Add newlines to the AsciiDoc output.
[metze/wireshark/wip.git] / tools / 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$
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 reply_var = None
62
63 REC_START       = 0
64 REC_LENGTH      = 1
65 REC_FIELD       = 2
66 REC_ENDIANNESS  = 3
67 REC_VAR         = 4
68 REC_REPEAT      = 5
69 REC_REQ_COND    = 6
70
71 NO_VAR          = -1
72 NO_REPEAT       = -1
73 NO_REQ_COND     = -1
74 NO_LENGTH_CHECK = -2
75
76
77 PROTO_LENGTH_UNKNOWN    = -1
78
79 global_highest_var = -1
80 global_req_cond = {}
81
82
83 REQ_COND_SIZE_VARIABLE = "REQ_COND_SIZE_VARIABLE"
84 REQ_COND_SIZE_CONSTANT = "REQ_COND_SIZE_CONSTANT"
85
86 ##############################################################################
87 # Global containers
88 ##############################################################################
89
90 class UniqueCollection:
91     """The UniqueCollection class stores objects which can be compared to other
92     objects of the same class. If two objects in the collection are equivalent,
93     only one is stored."""
94
95     def __init__(self, name):
96         "Constructor"
97         self.name = name
98         self.members = []
99         self.member_reprs = {}
100
101     def Add(self, object):
102         """Add an object to the members lists, if a comparable object
103         doesn't already exist. The object that is in the member list, that is
104         either the object that was added or the comparable object that was
105         already in the member list, is returned."""
106
107         r = repr(object)
108         # Is 'object' a duplicate of some other member?
109         if r in self.member_reprs:
110             return self.member_reprs[r]
111         else:
112             self.member_reprs[r] = object
113             self.members.append(object)
114             return object
115
116     def Members(self):
117         "Returns the list of members."
118         return self.members
119
120     def HasMember(self, object):
121         "Does the list of members contain the object?"
122         if repr(object) in self.members_reprs:
123             return 1
124         else:
125             return 0
126
127 # This list needs to be defined before the NCP types are defined,
128 # because the NCP types are defined in the global scope, not inside
129 # a function's scope.
130 ptvc_lists      = UniqueCollection('PTVC Lists')
131
132 ##############################################################################
133
134 class NamedList:
135     "NamedList's keep track of PTVC's and Completion Codes"
136     def __init__(self, name, list):
137         "Constructor"
138         self.name = name
139         self.list = list
140
141     def __cmp__(self, other):
142         "Compare this NamedList to another"
143
144         if isinstance(other, NamedList):
145             return cmp(self.list, other.list)
146         else:
147             return 0
148
149
150     def Name(self, new_name = None):
151         "Get/Set name of list"
152         if new_name != None:
153             self.name = new_name
154         return self.name
155
156     def Records(self):
157         "Returns record lists"
158         return self.list
159
160     def Null(self):
161         "Is there no list (different from an empty list)?"
162         return self.list == None
163
164     def Empty(self):
165         "It the list empty (different from a null list)?"
166         assert(not self.Null())
167
168         if self.list:
169             return 0
170         else:
171             return 1
172
173     def __repr__(self):
174         return repr(self.list)
175
176 class PTVC(NamedList):
177     """ProtoTree TVBuff Cursor List ("PTVC List") Class"""
178
179     def __init__(self, name, records):
180         "Constructor"
181         NamedList.__init__(self, name, [])
182
183         global global_highest_var
184
185         expected_offset = None
186         highest_var = -1
187
188         named_vars = {}
189
190         # Make a PTVCRecord object for each list in 'records'
191         for record in records:
192             offset = record[REC_START]
193             length = record[REC_LENGTH]
194             field = record[REC_FIELD]
195             endianness = record[REC_ENDIANNESS]
196
197             # Variable
198             var_name = record[REC_VAR]
199             if var_name:
200                 # Did we already define this var?
201                 if var_name in named_vars:
202                     sys.exit("%s has multiple %s vars." % \
203                             (name, var_name))
204
205                 highest_var = highest_var + 1
206                 var = highest_var
207                 if highest_var > global_highest_var:
208                     global_highest_var = highest_var
209                 named_vars[var_name] = var
210             else:
211                 var = NO_VAR
212
213             # Repeat
214             repeat_name = record[REC_REPEAT]
215             if repeat_name:
216                 # Do we have this var?
217                 if repeat_name not in named_vars:
218                     sys.exit("%s does not have %s var defined." % \
219                             (name, var_name))
220                 repeat = named_vars[repeat_name]
221             else:
222                 repeat = NO_REPEAT
223
224             # Request Condition
225             req_cond = record[REC_REQ_COND]
226             if req_cond != NO_REQ_COND:
227                 global_req_cond[req_cond] = None
228
229             ptvc_rec = PTVCRecord(field, length, endianness, var, repeat, req_cond)
230
231             if expected_offset == None:
232                 expected_offset = offset
233
234             elif expected_offset == -1:
235                 pass
236
237             elif expected_offset != offset and offset != -1:
238                 msg.write("Expected offset in %s for %s to be %d\n" % \
239                         (name, field.HFName(), expected_offset))
240                 sys.exit(1)
241
242             # We can't make a PTVC list from a variable-length
243             # packet, unless the fields can tell us at run time
244             # how long the packet is. That is, nstring8 is fine, since
245             # the field has an integer telling us how long the string is.
246             # Fields that don't have a length determinable at run-time
247             # cannot be variable-length.
248             if type(ptvc_rec.Length()) == type(()):
249                 if isinstance(ptvc_rec.Field(), nstring):
250                     expected_offset = -1
251                     pass
252                 elif isinstance(ptvc_rec.Field(), nbytes):
253                     expected_offset = -1
254                     pass
255                 elif isinstance(ptvc_rec.Field(), struct):
256                     expected_offset = -1
257                     pass
258                 else:
259                     field = ptvc_rec.Field()
260                     assert 0, "Cannot make PTVC from %s, type %s" % \
261                             (field.HFName(), field)
262
263             elif expected_offset > -1:
264                 if ptvc_rec.Length() < 0:
265                     expected_offset = -1
266                 else:
267                     expected_offset = expected_offset + ptvc_rec.Length()
268
269
270             self.list.append(ptvc_rec)
271
272     def ETTName(self):
273         return "ett_%s" % (self.Name(),)
274
275
276     def Code(self):
277         x =  "static const ptvc_record %s[] = {\n" % (self.Name())
278         for ptvc_rec in self.list:
279             x = x +  "\t%s,\n" % (ptvc_rec.Code())
280         x = x + "\t{ NULL, 0, NULL, NO_ENDIANNESS, NO_VAR, NO_REPEAT, NO_REQ_COND, NCP_FMT_NONE }\n"
281         x = x + "};\n"
282         return x
283
284     def __repr__(self):
285         x = ""
286         for ptvc_rec in self.list:
287             x = x + repr(ptvc_rec)
288         return x
289
290
291 class PTVCBitfield(PTVC):
292     def __init__(self, name, vars):
293         NamedList.__init__(self, name, [])
294
295         for var in vars:
296             ptvc_rec = PTVCRecord(var, var.Length(), var.Endianness(),
297                     NO_VAR, NO_REPEAT, NO_REQ_COND)
298             self.list.append(ptvc_rec)
299
300     def Code(self):
301         ett_name = self.ETTName()
302         x = "static gint %s = -1;\n" % (ett_name,)
303
304         x = x + "static const ptvc_record ptvc_%s[] = {\n" % (self.Name())
305         for ptvc_rec in self.list:
306             x = x +  "\t%s,\n" % (ptvc_rec.Code())
307         x = x + "\t{ NULL, 0, NULL, NO_ENDIANNESS, NO_VAR, NO_REPEAT, NO_REQ_COND, NCP_FMT_NONE }\n"
308         x = x + "};\n"
309
310         x = x + "static const sub_ptvc_record %s = {\n" % (self.Name(),)
311         x = x + "\t&%s,\n" % (ett_name,)
312         x = x + "\tNULL,\n"
313         x = x + "\tptvc_%s,\n" % (self.Name(),)
314         x = x + "};\n"
315         return x
316
317
318 class PTVCRecord:
319     def __init__(self, field, length, endianness, var, repeat, req_cond):
320         "Constructor"
321         self.field      = field
322         self.length     = length
323         self.endianness = endianness
324         self.var        = var
325         self.repeat     = repeat
326         self.req_cond   = req_cond
327
328     def __cmp__(self, other):
329         "Comparison operator"
330         if self.field != other.field:
331             return 1
332         elif self.length < other.length:
333             return -1
334         elif self.length > other.length:
335             return 1
336         elif self.endianness != other.endianness:
337             return 1
338         else:
339             return 0
340
341     def Code(self):
342         # Nice textual representations
343         if self.var == NO_VAR:
344             var = "NO_VAR"
345         else:
346             var = self.var
347
348         if self.repeat == NO_REPEAT:
349             repeat = "NO_REPEAT"
350         else:
351             repeat = self.repeat
352
353         if self.req_cond == NO_REQ_COND:
354             req_cond = "NO_REQ_COND"
355         else:
356             req_cond = global_req_cond[self.req_cond]
357             assert req_cond != None
358
359         if isinstance(self.field, struct):
360             return self.field.ReferenceString(var, repeat, req_cond)
361         else:
362             return self.RegularCode(var, repeat, req_cond)
363
364     def RegularCode(self, var, repeat, req_cond):
365         "String representation"
366         endianness = 'BE'
367         if self.endianness == LE:
368             endianness = 'LE'
369
370         length = None
371
372         if type(self.length) == type(0):
373             length = self.length
374         else:
375             # This is for cases where a length is needed
376             # in order to determine a following variable-length,
377             # like nstring8, where 1 byte is needed in order
378             # to determine the variable length.
379             var_length = self.field.Length()
380             if var_length > 0:
381                 length = var_length
382
383         if length == PROTO_LENGTH_UNKNOWN:
384             # XXX length = "PROTO_LENGTH_UNKNOWN"
385             pass
386
387         assert length, "Length not handled for %s" % (self.field.HFName(),)
388
389         sub_ptvc_name = self.field.PTVCName()
390         if sub_ptvc_name != "NULL":
391             sub_ptvc_name = "&%s" % (sub_ptvc_name,)
392
393
394         return "{ &%s, %s, %s, %s, %s, %s, %s, %s }" % \
395                 (self.field.HFName(), length, sub_ptvc_name,
396                 endianness, var, repeat, req_cond,
397                 self.field.SpecialFmt())
398
399     def Offset(self):
400         return self.offset
401
402     def Length(self):
403         return self.length
404
405     def Field(self):
406         return self.field
407
408     def __repr__(self):
409         return "{%s len=%s end=%s var=%s rpt=%s rqc=%s}" % \
410                 (self.field.HFName(), self.length,
411                 self.endianness, self.var, self.repeat, self.req_cond)
412
413 ##############################################################################
414
415 class NCP:
416     "NCP Packet class"
417     def __init__(self, func_code, description, group, has_length=1):
418         "Constructor"
419         self.__code__          = func_code
420         self.description        = description
421         self.group              = group
422         self.codes              = None
423         self.request_records    = None
424         self.reply_records      = None
425         self.has_length         = has_length
426         self.req_cond_size      = None
427         self.req_info_str       = None
428
429         if group not in groups:
430             msg.write("NCP 0x%x has invalid group '%s'\n" % \
431                     (self.__code__, group))
432             sys.exit(1)
433
434         if self.HasSubFunction():
435             # NCP Function with SubFunction
436             self.start_offset = 10
437         else:
438             # Simple NCP Function
439             self.start_offset = 7
440
441     def ReqCondSize(self):
442         return self.req_cond_size
443
444     def ReqCondSizeVariable(self):
445         self.req_cond_size = REQ_COND_SIZE_VARIABLE
446
447     def ReqCondSizeConstant(self):
448         self.req_cond_size = REQ_COND_SIZE_CONSTANT
449
450     def FunctionCode(self, part=None):
451         "Returns the function code for this NCP packet."
452         if part == None:
453             return self.__code__
454         elif part == 'high':
455             if self.HasSubFunction():
456                 return (self.__code__ & 0xff00) >> 8
457             else:
458                 return self.__code__
459         elif part == 'low':
460             if self.HasSubFunction():
461                 return self.__code__ & 0x00ff
462             else:
463                 return 0x00
464         else:
465             msg.write("Unknown directive '%s' for function_code()\n" % (part))
466             sys.exit(1)
467
468     def HasSubFunction(self):
469         "Does this NPC packet require a subfunction field?"
470         if self.__code__ <= 0xff:
471             return 0
472         else:
473             return 1
474
475     def HasLength(self):
476         return self.has_length
477
478     def Description(self):
479         return self.description
480
481     def Group(self):
482         return self.group
483
484     def PTVCRequest(self):
485         return self.ptvc_request
486
487     def PTVCReply(self):
488         return self.ptvc_reply
489
490     def Request(self, size, records=[], **kwargs):
491         self.request_size = size
492         self.request_records = records
493         if self.HasSubFunction():
494             if self.HasLength():
495                 self.CheckRecords(size, records, "Request", 10)
496             else:
497                 self.CheckRecords(size, records, "Request", 8)
498         else:
499             self.CheckRecords(size, records, "Request", 7)
500         self.ptvc_request = self.MakePTVC(records, "request")
501
502         if "info_str" in kwargs:
503             self.req_info_str = kwargs["info_str"]
504
505     def Reply(self, size, records=[]):
506         self.reply_size = size
507         self.reply_records = records
508         self.CheckRecords(size, records, "Reply", 8)
509         self.ptvc_reply = self.MakePTVC(records, "reply")
510
511     def CheckRecords(self, size, records, descr, min_hdr_length):
512         "Simple sanity check"
513         if size == NO_LENGTH_CHECK:
514             return
515         min = size
516         max = size
517         if type(size) == type(()):
518             min = size[0]
519             max = size[1]
520
521         lower = min_hdr_length
522         upper = min_hdr_length
523
524         for record in records:
525             rec_size = record[REC_LENGTH]
526             rec_lower = rec_size
527             rec_upper = rec_size
528             if type(rec_size) == type(()):
529                 rec_lower = rec_size[0]
530                 rec_upper = rec_size[1]
531
532             lower = lower + rec_lower
533             upper = upper + rec_upper
534
535         error = 0
536         if min != lower:
537             msg.write("%s records for 2222/0x%x sum to %d bytes minimum, but param1 shows %d\n" \
538                     % (descr, self.FunctionCode(), lower, min))
539             error = 1
540         if max != upper:
541             msg.write("%s records for 2222/0x%x sum to %d bytes maximum, but param1 shows %d\n" \
542                     % (descr, self.FunctionCode(), upper, max))
543             error = 1
544
545         if error == 1:
546             sys.exit(1)
547
548
549     def MakePTVC(self, records, name_suffix):
550         """Makes a PTVC out of a request or reply record list. Possibly adds
551         it to the global list of PTVCs (the global list is a UniqueCollection,
552         so an equivalent PTVC may already be in the global list)."""
553
554         name = "%s_%s" % (self.CName(), name_suffix)
555         ptvc = PTVC(name, records)
556         return ptvc_lists.Add(ptvc)
557
558     def CName(self):
559         "Returns a C symbol based on the NCP function code"
560         return "ncp_0x%x" % (self.__code__)
561
562     def InfoStrName(self):
563         "Returns a C symbol based on the NCP function code, for the info_str"
564         return "info_str_0x%x" % (self.__code__)
565
566     def Variables(self):
567         """Returns a list of variables used in the request and reply records.
568         A variable is listed only once, even if it is used twice (once in
569         the request, once in the reply)."""
570
571         variables = {}
572         if self.request_records:
573             for record in self.request_records:
574                 var = record[REC_FIELD]
575                 variables[var.HFName()] = var
576
577                 sub_vars = var.SubVariables()
578                 for sv in sub_vars:
579                     variables[sv.HFName()] = sv
580
581         if self.reply_records:
582             for record in self.reply_records:
583                 var = record[REC_FIELD]
584                 variables[var.HFName()] = var
585
586                 sub_vars = var.SubVariables()
587                 for sv in sub_vars:
588                     variables[sv.HFName()] = sv
589
590         return list(variables.values())
591
592     def CalculateReqConds(self):
593         """Returns a list of request conditions (dfilter text) used
594         in the reply records. A request condition is listed only once,"""
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 = list(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 code not in errors:
632                 msg.write("Errors table does not have key 0x%04x for NCP=0x%x\n" % (code,
633                         self.__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 "var" in kw:
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 "repeat" in kw:
684         repeat = kw["repeat"]
685     else:
686         repeat = None
687
688     # Request-condition ?
689     if "req_cond" in kw:
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 WiresharkFType(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     def __lt__(self, other):
775         return (self.hfname < other.hfname)
776
777 class struct(PTVC, Type):
778     def __init__(self, name, items, descr=None):
779         name = "struct_%s" % (name,)
780         NamedList.__init__(self, name, [])
781
782         self.bytes = 0
783         self.descr = descr
784         for item in items:
785             if isinstance(item, Type):
786                 field = item
787                 length = field.Length()
788                 endianness = field.Endianness()
789                 var = NO_VAR
790                 repeat = NO_REPEAT
791                 req_cond = NO_REQ_COND
792             elif type(item) == type([]):
793                 field = item[REC_FIELD]
794                 length = item[REC_LENGTH]
795                 endianness = item[REC_ENDIANNESS]
796                 var = item[REC_VAR]
797                 repeat = item[REC_REPEAT]
798                 req_cond = item[REC_REQ_COND]
799             else:
800                 assert 0, "Item %s item not handled." % (item,)
801
802             ptvc_rec = PTVCRecord(field, length, endianness, var,
803                     repeat, req_cond)
804             self.list.append(ptvc_rec)
805             self.bytes = self.bytes + field.Length()
806
807         self.hfname = self.name
808
809     def Variables(self):
810         vars = []
811         for ptvc_rec in self.list:
812             vars.append(ptvc_rec.Field())
813         return vars
814
815     def ReferenceString(self, var, repeat, req_cond):
816         return "{ PTVC_STRUCT, NO_LENGTH, &%s, NO_ENDIANNESS, %s, %s, %s, NCP_FMT_NONE }" % \
817                 (self.name, var, repeat, req_cond)
818
819     def Code(self):
820         ett_name = self.ETTName()
821         x = "static gint %s = -1;\n" % (ett_name,)
822         x = x + "static const ptvc_record ptvc_%s[] = {\n" % (self.name,)
823         for ptvc_rec in self.list:
824             x = x +  "\t%s,\n" % (ptvc_rec.Code())
825         x = x + "\t{ NULL, NO_LENGTH, NULL, NO_ENDIANNESS, NO_VAR, NO_REPEAT, NO_REQ_COND, NCP_FMT_NONE }\n"
826         x = x + "};\n"
827
828         x = x + "static const sub_ptvc_record %s = {\n" % (self.name,)
829         x = x + "\t&%s,\n" % (ett_name,)
830         if self.descr:
831             x = x + '\t"%s",\n' % (self.descr,)
832         else:
833             x = x + "\tNULL,\n"
834         x = x + "\tptvc_%s,\n" % (self.Name(),)
835         x = x + "};\n"
836         return x
837
838     def __cmp__(self, other):
839         return cmp(self.HFName(), other.HFName())
840
841
842 class byte(Type):
843     type    = "byte"
844     ftype   = "FT_UINT8"
845     def __init__(self, abbrev, descr):
846         Type.__init__(self, abbrev, descr, 1)
847
848 class CountingNumber:
849     pass
850
851 # Same as above. Both are provided for convenience
852 class uint8(Type, CountingNumber):
853     type    = "uint8"
854     ftype   = "FT_UINT8"
855     bytes   = 1
856     def __init__(self, abbrev, descr):
857         Type.__init__(self, abbrev, descr, 1)
858
859 class uint16(Type, CountingNumber):
860     type    = "uint16"
861     ftype   = "FT_UINT16"
862     def __init__(self, abbrev, descr, endianness = LE):
863         Type.__init__(self, abbrev, descr, 2, endianness)
864
865 class uint24(Type, CountingNumber):
866     type    = "uint24"
867     ftype   = "FT_UINT24"
868     def __init__(self, abbrev, descr, endianness = LE):
869         Type.__init__(self, abbrev, descr, 3, endianness)
870
871 class uint32(Type, CountingNumber):
872     type    = "uint32"
873     ftype   = "FT_UINT32"
874     def __init__(self, abbrev, descr, endianness = LE):
875         Type.__init__(self, abbrev, descr, 4, endianness)
876
877 class uint64(Type, CountingNumber):
878     type    = "uint64"
879     ftype   = "FT_UINT64"
880     def __init__(self, abbrev, descr, endianness = LE):
881         Type.__init__(self, abbrev, descr, 8, endianness)
882
883 class boolean8(uint8):
884     type    = "boolean8"
885     ftype   = "FT_BOOLEAN"
886     disp    = "BASE_NONE"
887
888 class boolean16(uint16):
889     type    = "boolean16"
890     ftype   = "FT_BOOLEAN"
891     disp    = "BASE_NONE"
892
893 class boolean24(uint24):
894     type    = "boolean24"
895     ftype   = "FT_BOOLEAN"
896     disp    = "BASE_NONE"
897
898 class boolean32(uint32):
899     type    = "boolean32"
900     ftype   = "FT_BOOLEAN"
901     disp    = "BASE_NONE"
902
903 class nstring:
904     pass
905
906 class nstring8(Type, nstring):
907     """A string of up to (2^8)-1 characters. The first byte
908     gives the string length."""
909
910     type    = "nstring8"
911     ftype   = "FT_UINT_STRING"
912     disp    = "BASE_NONE"
913     def __init__(self, abbrev, descr):
914         Type.__init__(self, abbrev, descr, 1)
915
916 class nstring16(Type, nstring):
917     """A string of up to (2^16)-2 characters. The first 2 bytes
918     gives the string length."""
919
920     type    = "nstring16"
921     ftype   = "FT_UINT_STRING"
922     disp    = "BASE_NONE"
923     def __init__(self, abbrev, descr, endianness = LE):
924         Type.__init__(self, abbrev, descr, 2, endianness)
925
926 class nstring32(Type, nstring):
927     """A string of up to (2^32)-4 characters. The first 4 bytes
928     gives the string length."""
929
930     type    = "nstring32"
931     ftype   = "FT_UINT_STRING"
932     disp    = "BASE_NONE"
933     def __init__(self, abbrev, descr, endianness = LE):
934         Type.__init__(self, abbrev, descr, 4, endianness)
935
936 class fw_string(Type):
937     """A fixed-width string of n bytes."""
938
939     type    = "fw_string"
940     disp    = "BASE_NONE"
941     ftype   = "FT_STRING"
942
943     def __init__(self, abbrev, descr, bytes):
944         Type.__init__(self, abbrev, descr, bytes)
945
946
947 class stringz(Type):
948     "NUL-terminated string, with a maximum length"
949
950     type    = "stringz"
951     disp    = "BASE_NONE"
952     ftype   = "FT_STRINGZ"
953     def __init__(self, abbrev, descr):
954         Type.__init__(self, abbrev, descr, PROTO_LENGTH_UNKNOWN)
955
956 class val_string(Type):
957     """Abstract class for val_stringN, where N is number
958     of bits that key takes up."""
959
960     type    = "val_string"
961     disp    = 'BASE_HEX'
962
963     def __init__(self, abbrev, descr, val_string_array, endianness = LE):
964         Type.__init__(self, abbrev, descr, self.bytes, endianness)
965         self.values = val_string_array
966
967     def Code(self):
968         result = "static const value_string %s[] = {\n" \
969                         % (self.ValuesCName())
970         for val_record in self.values:
971             value   = val_record[0]
972             text    = val_record[1]
973             value_repr = self.value_format % value
974             result = result + '\t{ %s,\t"%s" },\n' \
975                             % (value_repr, text)
976
977         value_repr = self.value_format % 0
978         result = result + "\t{ %s,\tNULL },\n" % (value_repr)
979         result = result + "};\n"
980         REC_VAL_STRING_RES = self.value_format % value
981         return result
982
983     def ValuesCName(self):
984         return "ncp_%s_vals" % (self.abbrev)
985
986     def ValuesName(self):
987         return "VALS(%s)" % (self.ValuesCName())
988
989 class val_string8(val_string):
990     type            = "val_string8"
991     ftype           = "FT_UINT8"
992     bytes           = 1
993     value_format    = "0x%02x"
994
995 class val_string16(val_string):
996     type            = "val_string16"
997     ftype           = "FT_UINT16"
998     bytes           = 2
999     value_format    = "0x%04x"
1000
1001 class val_string32(val_string):
1002     type            = "val_string32"
1003     ftype           = "FT_UINT32"
1004     bytes           = 4
1005     value_format    = "0x%08x"
1006
1007 class bytes(Type):
1008     type    = 'bytes'
1009     disp    = "BASE_NONE"
1010     ftype   = 'FT_BYTES'
1011
1012     def __init__(self, abbrev, descr, bytes):
1013         Type.__init__(self, abbrev, descr, bytes, NA)
1014
1015 class nbytes:
1016     pass
1017
1018 class nbytes8(Type, nbytes):
1019     """A series of up to (2^8)-1 bytes. The first byte
1020     gives the byte-string length."""
1021
1022     type    = "nbytes8"
1023     ftype   = "FT_UINT_BYTES"
1024     disp    = "BASE_NONE"
1025     def __init__(self, abbrev, descr, endianness = LE):
1026         Type.__init__(self, abbrev, descr, 1, endianness)
1027
1028 class nbytes16(Type, nbytes):
1029     """A series of up to (2^16)-2 bytes. The first 2 bytes
1030     gives the byte-string length."""
1031
1032     type    = "nbytes16"
1033     ftype   = "FT_UINT_BYTES"
1034     disp    = "BASE_NONE"
1035     def __init__(self, abbrev, descr, endianness = LE):
1036         Type.__init__(self, abbrev, descr, 2, endianness)
1037
1038 class nbytes32(Type, nbytes):
1039     """A series of up to (2^32)-4 bytes. The first 4 bytes
1040     gives the byte-string length."""
1041
1042     type    = "nbytes32"
1043     ftype   = "FT_UINT_BYTES"
1044     disp    = "BASE_NONE"
1045     def __init__(self, abbrev, descr, endianness = LE):
1046         Type.__init__(self, abbrev, descr, 4, endianness)
1047
1048 class bf_uint(Type):
1049     type    = "bf_uint"
1050     disp    = None
1051
1052     def __init__(self, bitmask, abbrev, descr, endianness=LE):
1053         Type.__init__(self, abbrev, descr, self.bytes, endianness)
1054         self.bitmask = bitmask
1055
1056     def Mask(self):
1057         return self.bitmask
1058
1059 class bf_val_str(bf_uint):
1060     type    = "bf_uint"
1061     disp    = None
1062
1063     def __init__(self, bitmask, abbrev, descr, val_string_array, endiannes=LE):
1064         bf_uint.__init__(self, bitmask, abbrev, descr, endiannes)
1065         self.values = val_string_array
1066
1067     def ValuesName(self):
1068         return "VALS(%s)" % (self.ValuesCName())
1069
1070 class bf_val_str8(bf_val_str, val_string8):
1071     type    = "bf_val_str8"
1072     ftype   = "FT_UINT8"
1073     disp    = "BASE_HEX"
1074     bytes   = 1
1075
1076 class bf_val_str16(bf_val_str, val_string16):
1077     type    = "bf_val_str16"
1078     ftype   = "FT_UINT16"
1079     disp    = "BASE_HEX"
1080     bytes   = 2
1081
1082 class bf_val_str32(bf_val_str, val_string32):
1083     type    = "bf_val_str32"
1084     ftype   = "FT_UINT32"
1085     disp    = "BASE_HEX"
1086     bytes   = 4
1087
1088 class bf_boolean:
1089     disp    = "BASE_NONE"
1090
1091 class bf_boolean8(bf_uint, boolean8, bf_boolean):
1092     type    = "bf_boolean8"
1093     ftype   = "FT_BOOLEAN"
1094     disp    = "8"
1095     bytes   = 1
1096
1097 class bf_boolean16(bf_uint, boolean16, bf_boolean):
1098     type    = "bf_boolean16"
1099     ftype   = "FT_BOOLEAN"
1100     disp    = "16"
1101     bytes   = 2
1102
1103 class bf_boolean24(bf_uint, boolean24, bf_boolean):
1104     type    = "bf_boolean24"
1105     ftype   = "FT_BOOLEAN"
1106     disp    = "24"
1107     bytes   = 3
1108
1109 class bf_boolean32(bf_uint, boolean32, bf_boolean):
1110     type    = "bf_boolean32"
1111     ftype   = "FT_BOOLEAN"
1112     disp    = "32"
1113     bytes   = 4
1114
1115 class bitfield(Type):
1116     type    = "bitfield"
1117     disp    = 'BASE_HEX'
1118
1119     def __init__(self, vars):
1120         var_hash = {}
1121         for var in vars:
1122             if isinstance(var, bf_boolean):
1123                 if not isinstance(var, self.bf_type):
1124                     print("%s must be of type %s" % \
1125                             (var.Abbreviation(),
1126                             self.bf_type))
1127                     sys.exit(1)
1128             var_hash[var.bitmask] = var
1129
1130         bitmasks = list(var_hash.keys())
1131         bitmasks.sort()
1132         bitmasks.reverse()
1133
1134         ordered_vars = []
1135         for bitmask in bitmasks:
1136             var = var_hash[bitmask]
1137             ordered_vars.append(var)
1138
1139         self.vars = ordered_vars
1140         self.ptvcname = "ncp_%s_bitfield" % (self.abbrev,)
1141         self.hfname = "hf_ncp_%s" % (self.abbrev,)
1142         self.sub_ptvc = PTVCBitfield(self.PTVCName(), self.vars)
1143
1144     def SubVariables(self):
1145         return self.vars
1146
1147     def SubVariablesPTVC(self):
1148         return self.sub_ptvc
1149
1150     def PTVCName(self):
1151         return self.ptvcname
1152
1153
1154 class bitfield8(bitfield, uint8):
1155     type    = "bitfield8"
1156     ftype   = "FT_UINT8"
1157     bf_type = bf_boolean8
1158
1159     def __init__(self, abbrev, descr, vars):
1160         uint8.__init__(self, abbrev, descr)
1161         bitfield.__init__(self, vars)
1162
1163 class bitfield16(bitfield, uint16):
1164     type    = "bitfield16"
1165     ftype   = "FT_UINT16"
1166     bf_type = bf_boolean16
1167
1168     def __init__(self, abbrev, descr, vars, endianness=LE):
1169         uint16.__init__(self, abbrev, descr, endianness)
1170         bitfield.__init__(self, vars)
1171
1172 class bitfield24(bitfield, uint24):
1173     type    = "bitfield24"
1174     ftype   = "FT_UINT24"
1175     bf_type = bf_boolean24
1176
1177     def __init__(self, abbrev, descr, vars, endianness=LE):
1178         uint24.__init__(self, abbrev, descr, endianness)
1179         bitfield.__init__(self, vars)
1180
1181 class bitfield32(bitfield, uint32):
1182     type    = "bitfield32"
1183     ftype   = "FT_UINT32"
1184     bf_type = bf_boolean32
1185
1186     def __init__(self, abbrev, descr, vars, endianness=LE):
1187         uint32.__init__(self, abbrev, descr, endianness)
1188         bitfield.__init__(self, vars)
1189
1190 #
1191 # Force the endianness of a field to a non-default value; used in
1192 # the list of fields of a structure.
1193 #
1194 def endian(field, endianness):
1195     return [-1, field.Length(), field, endianness, NO_VAR, NO_REPEAT, NO_REQ_COND]
1196
1197 ##############################################################################
1198 # NCP Field Types. Defined in Appendix A of "Programmer's Guide..."
1199 ##############################################################################
1200
1201 AbortQueueFlag                  = val_string8("abort_q_flag", "Abort Queue Flag", [
1202         [ 0x00, "Place at End of Queue" ],
1203         [ 0x01, "Do Not Place Spool File, Examine Flags" ],
1204 ])
1205 AcceptedMaxSize                 = uint16("accepted_max_size", "Accepted Max Size")
1206 AccessControl                   = val_string8("access_control", "Access Control", [
1207         [ 0x00, "Open for read by this client" ],
1208         [ 0x01, "Open for write by this client" ],
1209         [ 0x02, "Deny read requests from other stations" ],
1210         [ 0x03, "Deny write requests from other stations" ],
1211         [ 0x04, "File detached" ],
1212         [ 0x05, "TTS holding detach" ],
1213         [ 0x06, "TTS holding open" ],
1214 ])
1215 AccessDate                      = uint16("access_date", "Access Date")
1216 AccessDate.NWDate()
1217 AccessMode                      = bitfield8("access_mode", "Access Mode", [
1218         bf_boolean8(0x01, "acc_mode_read", "Read Access"),
1219         bf_boolean8(0x02, "acc_mode_write", "Write Access"),
1220         bf_boolean8(0x04, "acc_mode_deny_read", "Deny Read Access"),
1221         bf_boolean8(0x08, "acc_mode_deny_write", "Deny Write Access"),
1222         bf_boolean8(0x10, "acc_mode_comp", "Compatibility Mode"),
1223 ])
1224 AccessPrivileges                = bitfield8("access_privileges", "Access Privileges", [
1225         bf_boolean8(0x01, "acc_priv_read", "Read Privileges (files only)"),
1226         bf_boolean8(0x02, "acc_priv_write", "Write Privileges (files only)"),
1227         bf_boolean8(0x04, "acc_priv_open", "Open Privileges (files only)"),
1228         bf_boolean8(0x08, "acc_priv_create", "Create Privileges (files only)"),
1229         bf_boolean8(0x10, "acc_priv_delete", "Delete Privileges (files only)"),
1230         bf_boolean8(0x20, "acc_priv_parent", "Parental Privileges (directories only for creating, deleting, and renaming)"),
1231         bf_boolean8(0x40, "acc_priv_search", "Search Privileges (directories only)"),
1232         bf_boolean8(0x80, "acc_priv_modify", "Modify File Status Flags Privileges (files and directories)"),
1233 ])
1234 AccessRightsMask                = bitfield8("access_rights_mask", "Access Rights", [
1235         bf_boolean8(0x0001, "acc_rights_read", "Read Rights"),
1236         bf_boolean8(0x0002, "acc_rights_write", "Write Rights"),
1237         bf_boolean8(0x0004, "acc_rights_open", "Open Rights"),
1238         bf_boolean8(0x0008, "acc_rights_create", "Create Rights"),
1239         bf_boolean8(0x0010, "acc_rights_delete", "Delete Rights"),
1240         bf_boolean8(0x0020, "acc_rights_parent", "Parental Rights"),
1241         bf_boolean8(0x0040, "acc_rights_search", "Search Rights"),
1242         bf_boolean8(0x0080, "acc_rights_modify", "Modify Rights"),
1243 ])
1244 AccessRightsMaskWord            = bitfield16("access_rights_mask_word", "Access Rights", [
1245         bf_boolean16(0x0001, "acc_rights1_read", "Read Rights"),
1246         bf_boolean16(0x0002, "acc_rights1_write", "Write Rights"),
1247         bf_boolean16(0x0004, "acc_rights1_open", "Open Rights"),
1248         bf_boolean16(0x0008, "acc_rights1_create", "Create Rights"),
1249         bf_boolean16(0x0010, "acc_rights1_delete", "Delete Rights"),
1250         bf_boolean16(0x0020, "acc_rights1_parent", "Parental Rights"),
1251         bf_boolean16(0x0040, "acc_rights1_search", "Search Rights"),
1252         bf_boolean16(0x0080, "acc_rights1_modify", "Modify Rights"),
1253         bf_boolean16(0x0100, "acc_rights1_supervisor", "Supervisor Access Rights"),
1254 ])
1255 AccountBalance                  = uint32("account_balance", "Account Balance")
1256 AccountVersion                  = uint8("acct_version", "Acct Version")
1257 ActionFlag                      = bitfield8("action_flag", "Action Flag", [
1258         bf_boolean8(0x01, "act_flag_open", "Open"),
1259         bf_boolean8(0x02, "act_flag_replace", "Replace"),
1260         bf_boolean8(0x10, "act_flag_create", "Create"),
1261 ])
1262 ActiveConnBitList               = fw_string("active_conn_bit_list", "Active Connection List", 512)
1263 ActiveIndexedFiles              = uint16("active_indexed_files", "Active Indexed Files")
1264 ActualMaxBinderyObjects         = uint16("actual_max_bindery_objects", "Actual Max Bindery Objects")
1265 ActualMaxIndexedFiles           = uint16("actual_max_indexed_files", "Actual Max Indexed Files")
1266 ActualMaxOpenFiles              = uint16("actual_max_open_files", "Actual Max Open Files")
1267 ActualMaxSimultaneousTransactions = uint16("actual_max_sim_trans", "Actual Max Simultaneous Transactions")
1268 ActualMaxUsedDirectoryEntries   = uint16("actual_max_used_directory_entries", "Actual Max Used Directory Entries")
1269 ActualMaxUsedRoutingBuffers     = uint16("actual_max_used_routing_buffers", "Actual Max Used Routing Buffers")
1270 ActualResponseCount             = uint16("actual_response_count", "Actual Response Count")
1271 AddNameSpaceAndVol              = stringz("add_nm_spc_and_vol", "Add Name Space and Volume")
1272 AFPEntryID                      = uint32("afp_entry_id", "AFP Entry ID", BE)
1273 AFPEntryID.Display("BASE_HEX")
1274 AllocAvailByte                  = uint32("alloc_avail_byte", "Bytes Available for Allocation")
1275 AllocateMode                    = bitfield16("alloc_mode", "Allocate Mode", [
1276         bf_val_str16(0x0001, "alloc_dir_hdl", "Dir Handle Type",[
1277             [0x00, "Permanent"],
1278             [0x01, "Temporary"],
1279     ]),
1280         bf_boolean16(0x0002, "alloc_spec_temp_dir_hdl","Special Temporary Directory Handle"),
1281     bf_boolean16(0x4000, "alloc_reply_lvl2","Reply Level 2"),
1282     bf_boolean16(0x8000, "alloc_dst_name_spc","Destination Name Space Input Parameter"),
1283 ])
1284 AllocationBlockSize             = uint32("allocation_block_size", "Allocation Block Size")
1285 AllocFreeCount                  = uint32("alloc_free_count", "Reclaimable Free Bytes")
1286 ApplicationNumber               = uint16("application_number", "Application Number")
1287 ArchivedTime                    = uint16("archived_time", "Archived Time")
1288 ArchivedTime.NWTime()
1289 ArchivedDate                    = uint16("archived_date", "Archived Date")
1290 ArchivedDate.NWDate()
1291 ArchiverID                      = uint32("archiver_id", "Archiver ID", BE)
1292 ArchiverID.Display("BASE_HEX")
1293 AssociatedNameSpace             = uint8("associated_name_space", "Associated Name Space")
1294 AttachDuringProcessing          = uint16("attach_during_processing", "Attach During Processing")
1295 AttachedIndexedFiles            = uint8("attached_indexed_files", "Attached Indexed Files")
1296 AttachWhileProcessingAttach     = uint16("attach_while_processing_attach", "Attach While Processing Attach")
1297 Attributes                      = uint32("attributes", "Attributes")
1298 AttributesDef                   = bitfield8("attr_def", "Attributes", [
1299         bf_boolean8(0x01, "att_def_ro", "Read Only"),
1300         bf_boolean8(0x02, "att_def_hidden", "Hidden"),
1301         bf_boolean8(0x04, "att_def_system", "System"),
1302         bf_boolean8(0x08, "att_def_execute", "Execute"),
1303         bf_boolean8(0x10, "att_def_sub_only", "Subdirectory"),
1304         bf_boolean8(0x20, "att_def_archive", "Archive"),
1305         bf_boolean8(0x80, "att_def_shareable", "Shareable"),
1306 ])
1307 AttributesDef16                 = bitfield16("attr_def_16", "Attributes", [
1308         bf_boolean16(0x0001, "att_def16_ro", "Read Only"),
1309         bf_boolean16(0x0002, "att_def16_hidden", "Hidden"),
1310         bf_boolean16(0x0004, "att_def16_system", "System"),
1311         bf_boolean16(0x0008, "att_def16_execute", "Execute"),
1312         bf_boolean16(0x0010, "att_def16_sub_only", "Subdirectory"),
1313         bf_boolean16(0x0020, "att_def16_archive", "Archive"),
1314         bf_boolean16(0x0080, "att_def16_shareable", "Shareable"),
1315         bf_boolean16(0x1000, "att_def16_transaction", "Transactional"),
1316         bf_boolean16(0x4000, "att_def16_read_audit", "Read Audit"),
1317         bf_boolean16(0x8000, "att_def16_write_audit", "Write Audit"),
1318 ])
1319 AttributesDef32                 = bitfield32("attr_def_32", "Attributes", [
1320         bf_boolean32(0x00000001, "att_def32_ro", "Read Only"),
1321         bf_boolean32(0x00000002, "att_def32_hidden", "Hidden"),
1322         bf_boolean32(0x00000004, "att_def32_system", "System"),
1323         bf_boolean32(0x00000008, "att_def32_execute", "Execute"),
1324         bf_boolean32(0x00000010, "att_def32_sub_only", "Subdirectory"),
1325         bf_boolean32(0x00000020, "att_def32_archive", "Archive"),
1326     bf_boolean32(0x00000040, "att_def32_execute_confirm", "Execute Confirm"),
1327         bf_boolean32(0x00000080, "att_def32_shareable", "Shareable"),
1328         bf_val_str32(0x00000700, "att_def32_search", "Search Mode",[
1329             [0, "Search on all Read Only Opens"],
1330             [1, "Search on Read Only Opens with no Path"],
1331             [2, "Shell Default Search Mode"],
1332             [3, "Search on all Opens with no Path"],
1333             [4, "Do not Search"],
1334             [5, "Reserved - Do not Use"],
1335             [6, "Search on All Opens"],
1336             [7, "Reserved - Do not Use"],
1337     ]),
1338         bf_boolean32(0x00000800, "att_def32_no_suballoc", "No Suballoc"),
1339         bf_boolean32(0x00001000, "att_def32_transaction", "Transactional"),
1340         bf_boolean32(0x00004000, "att_def32_read_audit", "Read Audit"),
1341         bf_boolean32(0x00008000, "att_def32_write_audit", "Write Audit"),
1342         bf_boolean32(0x00010000, "att_def32_purge", "Immediate Purge"),
1343         bf_boolean32(0x00020000, "att_def32_reninhibit", "Rename Inhibit"),
1344         bf_boolean32(0x00040000, "att_def32_delinhibit", "Delete Inhibit"),
1345         bf_boolean32(0x00080000, "att_def32_cpyinhibit", "Copy Inhibit"),
1346         bf_boolean32(0x00100000, "att_def32_file_audit", "File Audit"),
1347         bf_boolean32(0x00200000, "att_def32_reserved", "Reserved"),
1348         bf_boolean32(0x00400000, "att_def32_data_migrate", "Data Migrated"),
1349         bf_boolean32(0x00800000, "att_def32_inhibit_dm", "Inhibit Data Migration"),
1350         bf_boolean32(0x01000000, "att_def32_dm_save_key", "Data Migration Save Key"),
1351         bf_boolean32(0x02000000, "att_def32_im_comp", "Immediate Compress"),
1352         bf_boolean32(0x04000000, "att_def32_comp", "Compressed"),
1353         bf_boolean32(0x08000000, "att_def32_comp_inhibit", "Inhibit Compression"),
1354         bf_boolean32(0x10000000, "att_def32_reserved2", "Reserved"),
1355         bf_boolean32(0x20000000, "att_def32_cant_compress", "Can't Compress"),
1356         bf_boolean32(0x40000000, "att_def32_attr_archive", "Archive Attributes"),
1357         bf_boolean32(0x80000000, "att_def32_reserved3", "Reserved"),
1358 ])
1359 AttributeValidFlag              = uint32("attribute_valid_flag", "Attribute Valid Flag")
1360 AuditFileVersionDate            = uint16("audit_file_ver_date", "Audit File Version Date")
1361 AuditFileVersionDate.NWDate()
1362 AuditFlag                       = val_string8("audit_flag", "Audit Flag", [
1363         [ 0x00, "Do NOT audit object" ],
1364         [ 0x01, "Audit object" ],
1365 ])
1366 AuditHandle                     = uint32("audit_handle", "Audit File Handle")
1367 AuditHandle.Display("BASE_HEX")
1368 AuditID                         = uint32("audit_id", "Audit ID", BE)
1369 AuditID.Display("BASE_HEX")
1370 AuditIDType                     = val_string16("audit_id_type", "Audit ID Type", [
1371         [ 0x0000, "Volume" ],
1372         [ 0x0001, "Container" ],
1373 ])
1374 AuditVersionDate                = uint16("audit_ver_date", "Auditing Version Date")
1375 AuditVersionDate.NWDate()
1376 AvailableBlocks                 = uint32("available_blocks", "Available Blocks")
1377 AvailableClusters               = uint16("available_clusters", "Available Clusters")
1378 AvailableDirectorySlots         = uint16("available_directory_slots", "Available Directory Slots")
1379 AvailableDirEntries             = uint32("available_dir_entries", "Available Directory Entries")
1380 AvailableIndexedFiles           = uint16("available_indexed_files", "Available Indexed Files")
1381
1382 BackgroundAgedWrites            = uint32("background_aged_writes", "Background Aged Writes")
1383 BackgroundDirtyWrites           = uint32("background_dirty_writes", "Background Dirty Writes")
1384 BadLogicalConnectionCount       = uint16("bad_logical_connection_count", "Bad Logical Connection Count")
1385 BannerName                      = fw_string("banner_name", "Banner Name", 14)
1386 BaseDirectoryID                 = uint32("base_directory_id", "Base Directory ID", BE)
1387 BaseDirectoryID.Display("BASE_HEX")
1388 binderyContext                  = nstring8("bindery_context", "Bindery Context")
1389 BitMap                          = bytes("bit_map", "Bit Map", 512)
1390 BlockNumber                     = uint32("block_number", "Block Number")
1391 BlockSize                       = uint16("block_size", "Block Size")
1392 BlockSizeInSectors              = uint32("block_size_in_sectors", "Block Size in Sectors")
1393 BoardInstalled                  = uint8("board_installed", "Board Installed")
1394 BoardNumber                     = uint32("board_number", "Board Number")
1395 BoardNumbers                    = uint32("board_numbers", "Board Numbers")
1396 BufferSize                      = uint16("buffer_size", "Buffer Size")
1397 BusString                       = stringz("bus_string", "Bus String")
1398 BusType                         = val_string8("bus_type", "Bus Type", [
1399         [0x00, "ISA"],
1400         [0x01, "Micro Channel" ],
1401         [0x02, "EISA"],
1402         [0x04, "PCI"],
1403         [0x08, "PCMCIA"],
1404         [0x10, "ISA"],
1405     [0x14, "ISA/PCI"],
1406 ])
1407 BytesActuallyTransferred        = uint32("bytes_actually_transferred", "Bytes Actually Transferred")
1408 BytesRead                       = fw_string("bytes_read", "Bytes Read", 6)
1409 BytesToCopy                     = uint32("bytes_to_copy", "Bytes to Copy")
1410 BytesWritten                    = fw_string("bytes_written", "Bytes Written", 6)
1411
1412 CacheAllocations                = uint32("cache_allocations", "Cache Allocations")
1413 CacheBlockScrapped              = uint16("cache_block_scrapped", "Cache Block Scrapped")
1414 CacheBufferCount                = uint16("cache_buffer_count", "Cache Buffer Count")
1415 CacheBufferSize                 = uint16("cache_buffer_size", "Cache Buffer Size")
1416 CacheFullWriteRequests          = uint32("cache_full_write_requests", "Cache Full Write Requests")
1417 CacheGetRequests                = uint32("cache_get_requests", "Cache Get Requests")
1418 CacheHitOnUnavailableBlock      = uint16("cache_hit_on_unavailable_block", "Cache Hit On Unavailable Block")
1419 CacheHits                       = uint32("cache_hits", "Cache Hits")
1420 CacheMisses                     = uint32("cache_misses", "Cache Misses")
1421 CachePartialWriteRequests       = uint32("cache_partial_write_requests", "Cache Partial Write Requests")
1422 CacheReadRequests               = uint32("cache_read_requests", "Cache Read Requests")
1423 CacheWriteRequests              = uint32("cache_write_requests", "Cache Write Requests")
1424 CategoryName                    = stringz("category_name", "Category Name")
1425 CCFileHandle                    = uint32("cc_file_handle", "File Handle")
1426 CCFileHandle.Display("BASE_HEX")
1427 CCFunction                      = val_string8("cc_function", "OP-Lock Flag", [
1428         [ 0x01, "Clear OP-Lock" ],
1429         [ 0x02, "Acknowledge Callback" ],
1430         [ 0x03, "Decline Callback" ],
1431     [ 0x04, "Level 2" ],
1432 ])
1433 ChangeBits                      = bitfield16("change_bits", "Change Bits", [
1434         bf_boolean16(0x0001, "change_bits_modify", "Modify Name"),
1435         bf_boolean16(0x0002, "change_bits_fatt", "File Attributes"),
1436         bf_boolean16(0x0004, "change_bits_cdate", "Creation Date"),
1437         bf_boolean16(0x0008, "change_bits_ctime", "Creation Time"),
1438         bf_boolean16(0x0010, "change_bits_owner", "Owner ID"),
1439         bf_boolean16(0x0020, "change_bits_adate", "Archive Date"),
1440         bf_boolean16(0x0040, "change_bits_atime", "Archive Time"),
1441         bf_boolean16(0x0080, "change_bits_aid", "Archiver ID"),
1442     bf_boolean16(0x0100, "change_bits_udate", "Update Date"),
1443         bf_boolean16(0x0200, "change_bits_utime", "Update Time"),
1444         bf_boolean16(0x0400, "change_bits_uid", "Update ID"),
1445         bf_boolean16(0x0800, "change_bits_acc_date", "Access Date"),
1446         bf_boolean16(0x1000, "change_bits_max_acc_mask", "Maximum Access Mask"),
1447         bf_boolean16(0x2000, "change_bits_max_space", "Maximum Space"),
1448 ])
1449 ChannelState                    = val_string8("channel_state", "Channel State", [
1450         [ 0x00, "Channel is running" ],
1451         [ 0x01, "Channel is stopping" ],
1452         [ 0x02, "Channel is stopped" ],
1453         [ 0x03, "Channel is not functional" ],
1454 ])
1455 ChannelSynchronizationState     = val_string8("channel_synchronization_state", "Channel Synchronization State", [
1456         [ 0x00, "Channel is not being used" ],
1457         [ 0x02, "NetWare is using the channel; no one else wants it" ],
1458         [ 0x04, "NetWare is using the channel; someone else wants it" ],
1459         [ 0x06, "Someone else is using the channel; NetWare does not need it" ],
1460         [ 0x08, "Someone else is using the channel; NetWare needs it" ],
1461         [ 0x0A, "Someone else has released the channel; NetWare should use it" ],
1462 ])
1463 ChargeAmount                    = uint32("charge_amount", "Charge Amount")
1464 ChargeInformation               = uint32("charge_information", "Charge Information")
1465 ClientCompFlag                  = val_string16("client_comp_flag", "Completion Flag", [
1466         [ 0x0000, "Successful" ],
1467         [ 0x0001, "Illegal Station Number" ],
1468         [ 0x0002, "Client Not Logged In" ],
1469         [ 0x0003, "Client Not Accepting Messages" ],
1470         [ 0x0004, "Client Already has a Message" ],
1471         [ 0x0096, "No Alloc Space for the Message" ],
1472         [ 0x00fd, "Bad Station Number" ],
1473         [ 0x00ff, "Failure" ],
1474 ])
1475 ClientIDNumber                  = uint32("client_id_number", "Client ID Number", BE)
1476 ClientIDNumber.Display("BASE_HEX")
1477 ClientList                      = uint32("client_list", "Client List")
1478 ClientListCount                 = uint16("client_list_cnt", "Client List Count")
1479 ClientListLen                   = uint8("client_list_len", "Client List Length")
1480 ClientName                      = nstring8("client_name", "Client Name")
1481 ClientRecordArea                = fw_string("client_record_area", "Client Record Area", 152)
1482 ClientStation                   = uint8("client_station", "Client Station")
1483 ClientStationLong               = uint32("client_station_long", "Client Station")
1484 ClientTaskNumber                = uint8("client_task_number", "Client Task Number")
1485 ClientTaskNumberLong            = uint32("client_task_number_long", "Client Task Number")
1486 ClusterCount                    = uint16("cluster_count", "Cluster Count")
1487 ClustersUsedByDirectories       = uint32("clusters_used_by_directories", "Clusters Used by Directories")
1488 ClustersUsedByExtendedDirectories = uint32("clusters_used_by_extended_dirs", "Clusters Used by Extended Directories")
1489 ClustersUsedByFAT               = uint32("clusters_used_by_fat", "Clusters Used by FAT")
1490 CodePage                = uint32("code_page", "Code Page")
1491 ComCnts                         = uint16("com_cnts", "Communication Counters")
1492 Comment                         = nstring8("comment", "Comment")
1493 CommentType                     = uint16("comment_type", "Comment Type")
1494 CompletionCode                  = uint32("ncompletion_code", "Completion Code")
1495 CompressedDataStreamsCount      = uint32("compressed_data_streams_count", "Compressed Data Streams Count")
1496 CompressedLimboDataStreamsCount = uint32("compressed_limbo_data_streams_count", "Compressed Limbo Data Streams Count")
1497 CompressedSectors               = uint32("compressed_sectors", "Compressed Sectors")
1498 compressionStage                = uint32("compression_stage", "Compression Stage")
1499 compressVolume                  = uint32("compress_volume", "Volume Compression")
1500 ConfigMajorVN                   = uint8("config_major_vn", "Configuration Major Version Number")
1501 ConfigMinorVN                   = uint8("config_minor_vn", "Configuration Minor Version Number")
1502 ConfigurationDescription        = fw_string("configuration_description", "Configuration Description", 80)
1503 ConfigurationText               = fw_string("configuration_text", "Configuration Text", 160)
1504 ConfiguredMaxBinderyObjects     = uint16("configured_max_bindery_objects", "Configured Max Bindery Objects")
1505 ConfiguredMaxOpenFiles          = uint16("configured_max_open_files", "Configured Max Open Files")
1506 ConfiguredMaxRoutingBuffers     = uint16("configured_max_routing_buffers", "Configured Max Routing Buffers")
1507 ConfiguredMaxSimultaneousTransactions = uint16("cfg_max_simultaneous_transactions", "Configured Max Simultaneous Transactions")
1508 ConnectedLAN                    = uint32("connected_lan", "LAN Adapter")
1509 ConnectionControlBits           = bitfield8("conn_ctrl_bits", "Connection Control", [
1510         bf_boolean8(0x01, "enable_brdcasts", "Enable Broadcasts"),
1511         bf_boolean8(0x02, "enable_personal_brdcasts", "Enable Personal Broadcasts"),
1512         bf_boolean8(0x04, "enable_wdog_messages", "Enable Watchdog Message"),
1513         bf_boolean8(0x10, "disable_brdcasts", "Disable Broadcasts"),
1514         bf_boolean8(0x20, "disable_personal_brdcasts", "Disable Personal Broadcasts"),
1515         bf_boolean8(0x40, "disable_wdog_messages", "Disable Watchdog Message"),
1516 ])
1517 ConnectionListCount             = uint32("conn_list_count", "Connection List Count")
1518 ConnectionList                  = uint32("connection_list", "Connection List")
1519 ConnectionNumber                = uint32("connection_number", "Connection Number", BE)
1520 ConnectionNumberList            = nstring8("connection_number_list", "Connection Number List")
1521 ConnectionNumberWord            = uint16("conn_number_word", "Connection Number")
1522 ConnectionNumberByte            = uint8("conn_number_byte", "Connection Number")
1523 ConnectionServiceType           = val_string8("connection_service_type","Connection Service Type",[
1524         [ 0x01, "CLIB backward Compatibility" ],
1525         [ 0x02, "NCP Connection" ],
1526         [ 0x03, "NLM Connection" ],
1527         [ 0x04, "AFP Connection" ],
1528         [ 0x05, "FTAM Connection" ],
1529         [ 0x06, "ANCP Connection" ],
1530         [ 0x07, "ACP Connection" ],
1531         [ 0x08, "SMB Connection" ],
1532         [ 0x09, "Winsock Connection" ],
1533 ])
1534 ConnectionsInUse                = uint16("connections_in_use", "Connections In Use")
1535 ConnectionsMaxUsed              = uint16("connections_max_used", "Connections Max Used")
1536 ConnectionsSupportedMax         = uint16("connections_supported_max", "Connections Supported Max")
1537 ConnectionType                  = val_string8("connection_type", "Connection Type", [
1538         [ 0x00, "Not in use" ],
1539         [ 0x02, "NCP" ],
1540         [ 0x0b, "UDP (for IP)" ],
1541 ])
1542 ConnListLen                     = uint8("conn_list_len", "Connection List Length")
1543 connList                        = uint32("conn_list", "Connection List")
1544 ControlFlags                    = val_string8("control_flags", "Control Flags", [
1545         [ 0x00, "Forced Record Locking is Off" ],
1546         [ 0x01, "Forced Record Locking is On" ],
1547 ])
1548 ControllerDriveNumber           = uint8("controller_drive_number", "Controller Drive Number")
1549 ControllerNumber                = uint8("controller_number", "Controller Number")
1550 ControllerType                  = uint8("controller_type", "Controller Type")
1551 Cookie1                         = uint32("cookie_1", "Cookie 1")
1552 Cookie2                         = uint32("cookie_2", "Cookie 2")
1553 Copies                          = uint8( "copies", "Copies" )
1554 CoprocessorFlag                 = uint32("co_processor_flag", "CoProcessor Present Flag")
1555 CoProcessorString               = stringz("co_proc_string", "CoProcessor String")
1556 CounterMask                     = val_string8("counter_mask", "Counter Mask", [
1557         [ 0x00, "Counter is Valid" ],
1558         [ 0x01, "Counter is not Valid" ],
1559 ])
1560 CPUNumber                       = uint32("cpu_number", "CPU Number")
1561 CPUString                       = stringz("cpu_string", "CPU String")
1562 CPUType                         = val_string8("cpu_type", "CPU Type", [
1563         [ 0x00, "80386" ],
1564         [ 0x01, "80486" ],
1565         [ 0x02, "Pentium" ],
1566         [ 0x03, "Pentium Pro" ],
1567 ])
1568 CreationDate                    = uint16("creation_date", "Creation Date")
1569 CreationDate.NWDate()
1570 CreationTime                    = uint16("creation_time", "Creation Time")
1571 CreationTime.NWTime()
1572 CreatorID                       = uint32("creator_id", "Creator ID", BE)
1573 CreatorID.Display("BASE_HEX")
1574 CreatorNameSpaceNumber          = val_string8("creator_name_space_number", "Creator Name Space Number", [
1575         [ 0x00, "DOS Name Space" ],
1576         [ 0x01, "MAC Name Space" ],
1577         [ 0x02, "NFS Name Space" ],
1578         [ 0x04, "Long Name Space" ],
1579 ])
1580 CreditLimit                     = uint32("credit_limit", "Credit Limit")
1581 CtrlFlags                       = val_string16("ctrl_flags", "Control Flags", [
1582         [ 0x0000, "Do Not Return File Name" ],
1583         [ 0x0001, "Return File Name" ],
1584 ])
1585 curCompBlks                     = uint32("cur_comp_blks", "Current Compression Blocks")
1586 curInitialBlks                  = uint32("cur_initial_blks", "Current Initial Blocks")
1587 curIntermediateBlks             = uint32("cur_inter_blks", "Current Intermediate Blocks")
1588 CurNumOfRTags                   = uint32("cur_num_of_r_tags", "Current Number of Resource Tags")
1589 CurrentBlockBeingDecompressed   = uint32("cur_blk_being_dcompress", "Current Block Being Decompressed")
1590 CurrentChangedFATs              = uint16("current_changed_fats", "Current Changed FAT Entries")
1591 CurrentEntries                  = uint32("current_entries", "Current Entries")
1592 CurrentFormType                 = uint8( "current_form_type", "Current Form Type" )
1593 CurrentLFSCounters              = uint32("current_lfs_counters", "Current LFS Counters")
1594 CurrentlyUsedRoutingBuffers     = uint16("currently_used_routing_buffers", "Currently Used Routing Buffers")
1595 CurrentOpenFiles                = uint16("current_open_files", "Current Open Files")
1596 CurrentReferenceID              = uint16("curr_ref_id", "Current Reference ID")
1597 CurrentServers                  = uint32("current_servers", "Current Servers")
1598 CurrentServerTime               = uint32("current_server_time", "Time Elapsed Since Server Was Brought Up")
1599 CurrentSpace                    = uint32("current_space", "Current Space")
1600 CurrentTransactionCount         = uint32("current_trans_count", "Current Transaction Count")
1601 CurrentUsedBinderyObjects       = uint16("current_used_bindery_objects", "Current Used Bindery Objects")
1602 CurrentUsedDynamicSpace         = uint32("current_used_dynamic_space", "Current Used Dynamic Space")
1603 CustomCnts                      = uint32("custom_cnts", "Custom Counters")
1604 CustomCount                     = uint32("custom_count", "Custom Count")
1605 CustomCounters                  = uint32("custom_counters", "Custom Counters")
1606 CustomString                    = nstring8("custom_string", "Custom String")
1607 CustomVariableValue             = uint32("custom_var_value", "Custom Variable Value")
1608
1609 Data                            = nstring8("data", "Data")
1610 DataForkFirstFAT                = uint32("data_fork_first_fat", "Data Fork First FAT Entry")
1611 DataForkLen                     = uint32("data_fork_len", "Data Fork Len")
1612 DataForkSize                    = uint32("data_fork_size", "Data Fork Size")
1613 DataSize                        = uint32("data_size", "Data Size")
1614 DataStream                      = val_string8("data_stream", "Data Stream", [
1615         [ 0x00, "Resource Fork or DOS" ],
1616         [ 0x01, "Data Fork" ],
1617 ])
1618 DataStreamFATBlocks     = uint32("data_stream_fat_blks", "Data Stream FAT Blocks")
1619 DataStreamName                  = nstring8("data_stream_name", "Data Stream Name")
1620 DataStreamNumber                = uint8("data_stream_number", "Data Stream Number")
1621 DataStreamNumberLong    = uint32("data_stream_num_long", "Data Stream Number")
1622 DataStreamsCount                = uint32("data_streams_count", "Data Streams Count")
1623 DataStreamSize                  = uint32("data_stream_size", "Size")
1624 DataStreamSpaceAlloc            = uint32( "data_stream_space_alloc", "Space Allocated for Data Stream" )
1625 DataTypeFlag            = val_string8("data_type_flag", "Data Type Flag", [
1626     [ 0x00, "ASCII Data" ],
1627     [ 0x01, "UTF8 Data" ],
1628 ])
1629 Day                             = uint8("s_day", "Day")
1630 DayOfWeek                       = val_string8("s_day_of_week", "Day of Week", [
1631         [ 0x00, "Sunday" ],
1632         [ 0x01, "Monday" ],
1633         [ 0x02, "Tuesday" ],
1634         [ 0x03, "Wednesday" ],
1635         [ 0x04, "Thursday" ],
1636         [ 0x05, "Friday" ],
1637         [ 0x06, "Saturday" ],
1638 ])
1639 DeadMirrorTable                 = bytes("dead_mirror_table", "Dead Mirror Table", 32)
1640 DefinedDataStreams              = uint8("defined_data_streams", "Defined Data Streams")
1641 DefinedNameSpaces               = uint8("defined_name_spaces", "Defined Name Spaces")
1642 DeletedDate                     = uint16("deleted_date", "Deleted Date")
1643 DeletedDate.NWDate()
1644 DeletedFileTime                 = uint32( "deleted_file_time", "Deleted File Time")
1645 DeletedFileTime.Display("BASE_HEX")
1646 DeletedTime                     = uint16("deleted_time", "Deleted Time")
1647 DeletedTime.NWTime()
1648 DeletedID                       = uint32( "delete_id", "Deleted ID", BE)
1649 DeletedID.Display("BASE_HEX")
1650 DeleteExistingFileFlag          = val_string8("delete_existing_file_flag", "Delete Existing File Flag", [
1651         [ 0x00, "Do Not Delete Existing File" ],
1652         [ 0x01, "Delete Existing File" ],
1653 ])
1654 DenyReadCount                   = uint16("deny_read_count", "Deny Read Count")
1655 DenyWriteCount                  = uint16("deny_write_count", "Deny Write Count")
1656 DescriptionStrings              = fw_string("description_string", "Description", 100)
1657 DesiredAccessRights             = bitfield16("desired_access_rights", "Desired Access Rights", [
1658     bf_boolean16(0x0001, "dsired_acc_rights_read_o", "Read Only"),
1659         bf_boolean16(0x0002, "dsired_acc_rights_write_o", "Write Only"),
1660         bf_boolean16(0x0004, "dsired_acc_rights_deny_r", "Deny Read"),
1661         bf_boolean16(0x0008, "dsired_acc_rights_deny_w", "Deny Write"),
1662         bf_boolean16(0x0010, "dsired_acc_rights_compat", "Compatibility"),
1663         bf_boolean16(0x0040, "dsired_acc_rights_w_thru", "File Write Through"),
1664         bf_boolean16(0x0400, "dsired_acc_rights_del_file_cls", "Delete File Close"),
1665 ])
1666 DesiredResponseCount            = uint16("desired_response_count", "Desired Response Count")
1667 DestDirHandle                   = uint8("dest_dir_handle", "Destination Directory Handle")
1668 DestNameSpace                   = val_string8("dest_name_space", "Destination Name Space", [
1669         [ 0x00, "DOS Name Space" ],
1670         [ 0x01, "MAC Name Space" ],
1671         [ 0x02, "NFS Name Space" ],
1672         [ 0x04, "Long Name Space" ],
1673 ])
1674 DestPathComponentCount          = uint8("dest_component_count", "Destination Path Component Count")
1675 DestPath                        = nstring8("dest_path", "Destination Path")
1676 DestPath16          = nstring16("dest_path_16", "Destination Path")
1677 DetachDuringProcessing          = uint16("detach_during_processing", "Detach During Processing")
1678 DetachForBadConnectionNumber    = uint16("detach_for_bad_connection_number", "Detach For Bad Connection Number")
1679 DirHandle                       = uint8("dir_handle", "Directory Handle")
1680 DirHandleName                   = uint8("dir_handle_name", "Handle Name")
1681 DirHandleLong                   = uint32("dir_handle_long", "Directory Handle")
1682 DirectoryAccessRights           = uint8("directory_access_rights", "Directory Access Rights")
1683 #
1684 # XXX - what do the bits mean here?
1685 #
1686 DirectoryAttributes             = uint8("directory_attributes", "Directory Attributes")
1687 DirectoryBase                   = uint32("dir_base", "Directory Base")
1688 DirectoryBase.Display("BASE_HEX")
1689 DirectoryCount                  = uint16("dir_count", "Directory Count")
1690 DirectoryEntryNumber            = uint32("directory_entry_number", "Directory Entry Number")
1691 DirectoryEntryNumber.Display('BASE_HEX')
1692 DirectoryEntryNumberWord        = uint16("directory_entry_number_word", "Directory Entry Number")
1693 DirectoryID                     = uint16("directory_id", "Directory ID", BE)
1694 DirectoryID.Display("BASE_HEX")
1695 DirectoryName                   = fw_string("directory_name", "Directory Name",12)
1696 DirectoryName14                 = fw_string("directory_name_14", "Directory Name", 14)
1697 DirectoryNameLen                = uint8("directory_name_len", "Directory Name Length")
1698 DirectoryNumber                 = uint32("directory_number", "Directory Number")
1699 DirectoryNumber.Display("BASE_HEX")
1700 DirectoryPath                   = fw_string("directory_path", "Directory Path", 16)
1701 DirectoryServicesObjectID       = uint32("directory_services_object_id", "Directory Services Object ID")
1702 DirectoryServicesObjectID.Display("BASE_HEX")
1703 DirectoryStamp                  = uint16("directory_stamp", "Directory Stamp (0xD1D1)")
1704 DirtyCacheBuffers               = uint16("dirty_cache_buffers", "Dirty Cache Buffers")
1705 DiskChannelNumber               = uint8("disk_channel_number", "Disk Channel Number")
1706 DiskChannelTable                = val_string8("disk_channel_table", "Disk Channel Table", [
1707         [ 0x01, "XT" ],
1708         [ 0x02, "AT" ],
1709         [ 0x03, "SCSI" ],
1710         [ 0x04, "Disk Coprocessor" ],
1711 ])
1712 DiskSpaceLimit                  = uint32("disk_space_limit", "Disk Space Limit")
1713 DMAChannelsUsed                 = uint32("dma_channels_used", "DMA Channels Used")
1714 DMInfoEntries                   = uint32("dm_info_entries", "DM Info Entries")
1715 DMInfoLevel                     = val_string8("dm_info_level", "DM Info Level", [
1716         [ 0x00, "Return Detailed DM Support Module Information" ],
1717         [ 0x01, "Return Number of DM Support Modules" ],
1718         [ 0x02, "Return DM Support Modules Names" ],
1719 ])
1720 DMFlags                         = val_string8("dm_flags", "DM Flags", [
1721         [ 0x00, "OnLine Media" ],
1722         [ 0x01, "OffLine Media" ],
1723 ])
1724 DMmajorVersion                  = uint32("dm_major_version", "DM Major Version")
1725 DMminorVersion                  = uint32("dm_minor_version", "DM Minor Version")
1726 DMPresentFlag                   = val_string8("dm_present_flag", "Data Migration Present Flag", [
1727         [ 0x00, "Data Migration NLM is not loaded" ],
1728         [ 0x01, "Data Migration NLM has been loaded and is running" ],
1729 ])
1730 DOSDirectoryBase                = uint32("dos_directory_base", "DOS Directory Base")
1731 DOSDirectoryBase.Display("BASE_HEX")
1732 DOSDirectoryEntry               = uint32("dos_directory_entry", "DOS Directory Entry")
1733 DOSDirectoryEntry.Display("BASE_HEX")
1734 DOSDirectoryEntryNumber         = uint32("dos_directory_entry_number", "DOS Directory Entry Number")
1735 DOSDirectoryEntryNumber.Display('BASE_HEX')
1736 DOSFileAttributes               = uint8("dos_file_attributes", "DOS File Attributes")
1737 DOSParentDirectoryEntry         = uint32("dos_parent_directory_entry", "DOS Parent Directory Entry")
1738 DOSParentDirectoryEntry.Display('BASE_HEX')
1739 DOSSequence                     = uint32("dos_sequence", "DOS Sequence")
1740 DriveCylinders                  = uint16("drive_cylinders", "Drive Cylinders")
1741 DriveDefinitionString           = fw_string("drive_definition_string", "Drive Definition", 64)
1742 DriveHeads                      = uint8("drive_heads", "Drive Heads")
1743 DriveMappingTable               = bytes("drive_mapping_table", "Drive Mapping Table", 32)
1744 DriveMirrorTable                = bytes("drive_mirror_table", "Drive Mirror Table", 32)
1745 DriverBoardName         = stringz("driver_board_name", "Driver Board Name")
1746 DriveRemovableFlag              = val_string8("drive_removable_flag", "Drive Removable Flag", [
1747         [ 0x00, "Nonremovable" ],
1748         [ 0xff, "Removable" ],
1749 ])
1750 DriverLogicalName       = stringz("driver_log_name", "Driver Logical Name")
1751 DriverShortName         = stringz("driver_short_name", "Driver Short Name")
1752 DriveSize                       = uint32("drive_size", "Drive Size")
1753 DstEAFlags                      = val_string16("dst_ea_flags", "Destination EA Flags", [
1754         [ 0x0000, "Return EAHandle,Information Level 0" ],
1755         [ 0x0001, "Return NetWareHandle,Information Level 0" ],
1756         [ 0x0002, "Return Volume/Directory Number,Information Level 0" ],
1757         [ 0x0004, "Return EAHandle,Close Handle on Error,Information Level 0" ],
1758         [ 0x0005, "Return NetWareHandle,Close Handle on Error,Information Level 0" ],
1759         [ 0x0006, "Return Volume/Directory Number,Close Handle on Error,Information Level 0" ],
1760         [ 0x0010, "Return EAHandle,Information Level 1" ],
1761         [ 0x0011, "Return NetWareHandle,Information Level 1" ],
1762         [ 0x0012, "Return Volume/Directory Number,Information Level 1" ],
1763         [ 0x0014, "Return EAHandle,Close Handle on Error,Information Level 1" ],
1764         [ 0x0015, "Return NetWareHandle,Close Handle on Error,Information Level 1" ],
1765         [ 0x0016, "Return Volume/Directory Number,Close Handle on Error,Information Level 1" ],
1766         [ 0x0020, "Return EAHandle,Information Level 2" ],
1767         [ 0x0021, "Return NetWareHandle,Information Level 2" ],
1768         [ 0x0022, "Return Volume/Directory Number,Information Level 2" ],
1769         [ 0x0024, "Return EAHandle,Close Handle on Error,Information Level 2" ],
1770         [ 0x0025, "Return NetWareHandle,Close Handle on Error,Information Level 2" ],
1771         [ 0x0026, "Return Volume/Directory Number,Close Handle on Error,Information Level 2" ],
1772         [ 0x0030, "Return EAHandle,Information Level 3" ],
1773         [ 0x0031, "Return NetWareHandle,Information Level 3" ],
1774         [ 0x0032, "Return Volume/Directory Number,Information Level 3" ],
1775         [ 0x0034, "Return EAHandle,Close Handle on Error,Information Level 3" ],
1776         [ 0x0035, "Return NetWareHandle,Close Handle on Error,Information Level 3" ],
1777         [ 0x0036, "Return Volume/Directory Number,Close Handle on Error,Information Level 3" ],
1778         [ 0x0040, "Return EAHandle,Information Level 4" ],
1779         [ 0x0041, "Return NetWareHandle,Information Level 4" ],
1780         [ 0x0042, "Return Volume/Directory Number,Information Level 4" ],
1781         [ 0x0044, "Return EAHandle,Close Handle on Error,Information Level 4" ],
1782         [ 0x0045, "Return NetWareHandle,Close Handle on Error,Information Level 4" ],
1783         [ 0x0046, "Return Volume/Directory Number,Close Handle on Error,Information Level 4" ],
1784         [ 0x0050, "Return EAHandle,Information Level 5" ],
1785         [ 0x0051, "Return NetWareHandle,Information Level 5" ],
1786         [ 0x0052, "Return Volume/Directory Number,Information Level 5" ],
1787         [ 0x0054, "Return EAHandle,Close Handle on Error,Information Level 5" ],
1788         [ 0x0055, "Return NetWareHandle,Close Handle on Error,Information Level 5" ],
1789         [ 0x0056, "Return Volume/Directory Number,Close Handle on Error,Information Level 5" ],
1790         [ 0x0060, "Return EAHandle,Information Level 6" ],
1791         [ 0x0061, "Return NetWareHandle,Information Level 6" ],
1792         [ 0x0062, "Return Volume/Directory Number,Information Level 6" ],
1793         [ 0x0064, "Return EAHandle,Close Handle on Error,Information Level 6" ],
1794         [ 0x0065, "Return NetWareHandle,Close Handle on Error,Information Level 6" ],
1795         [ 0x0066, "Return Volume/Directory Number,Close Handle on Error,Information Level 6" ],
1796         [ 0x0070, "Return EAHandle,Information Level 7" ],
1797         [ 0x0071, "Return NetWareHandle,Information Level 7" ],
1798         [ 0x0072, "Return Volume/Directory Number,Information Level 7" ],
1799         [ 0x0074, "Return EAHandle,Close Handle on Error,Information Level 7" ],
1800         [ 0x0075, "Return NetWareHandle,Close Handle on Error,Information Level 7" ],
1801         [ 0x0076, "Return Volume/Directory Number,Close Handle on Error,Information Level 7" ],
1802         [ 0x0080, "Return EAHandle,Information Level 0,Immediate Close Handle" ],
1803         [ 0x0081, "Return NetWareHandle,Information Level 0,Immediate Close Handle" ],
1804         [ 0x0082, "Return Volume/Directory Number,Information Level 0,Immediate Close Handle" ],
1805         [ 0x0084, "Return EAHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1806         [ 0x0085, "Return NetWareHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1807         [ 0x0086, "Return Volume/Directory Number,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1808         [ 0x0090, "Return EAHandle,Information Level 1,Immediate Close Handle" ],
1809         [ 0x0091, "Return NetWareHandle,Information Level 1,Immediate Close Handle" ],
1810         [ 0x0092, "Return Volume/Directory Number,Information Level 1,Immediate Close Handle" ],
1811         [ 0x0094, "Return EAHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1812         [ 0x0095, "Return NetWareHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1813         [ 0x0096, "Return Volume/Directory Number,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1814         [ 0x00a0, "Return EAHandle,Information Level 2,Immediate Close Handle" ],
1815         [ 0x00a1, "Return NetWareHandle,Information Level 2,Immediate Close Handle" ],
1816         [ 0x00a2, "Return Volume/Directory Number,Information Level 2,Immediate Close Handle" ],
1817         [ 0x00a4, "Return EAHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1818         [ 0x00a5, "Return NetWareHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1819         [ 0x00a6, "Return Volume/Directory Number,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1820         [ 0x00b0, "Return EAHandle,Information Level 3,Immediate Close Handle" ],
1821         [ 0x00b1, "Return NetWareHandle,Information Level 3,Immediate Close Handle" ],
1822         [ 0x00b2, "Return Volume/Directory Number,Information Level 3,Immediate Close Handle" ],
1823         [ 0x00b4, "Return EAHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1824         [ 0x00b5, "Return NetWareHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1825         [ 0x00b6, "Return Volume/Directory Number,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1826         [ 0x00c0, "Return EAHandle,Information Level 4,Immediate Close Handle" ],
1827         [ 0x00c1, "Return NetWareHandle,Information Level 4,Immediate Close Handle" ],
1828         [ 0x00c2, "Return Volume/Directory Number,Information Level 4,Immediate Close Handle" ],
1829         [ 0x00c4, "Return EAHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1830         [ 0x00c5, "Return NetWareHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1831         [ 0x00c6, "Return Volume/Directory Number,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1832         [ 0x00d0, "Return EAHandle,Information Level 5,Immediate Close Handle" ],
1833         [ 0x00d1, "Return NetWareHandle,Information Level 5,Immediate Close Handle" ],
1834         [ 0x00d2, "Return Volume/Directory Number,Information Level 5,Immediate Close Handle" ],
1835         [ 0x00d4, "Return EAHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1836         [ 0x00d5, "Return NetWareHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1837         [ 0x00d6, "Return Volume/Directory Number,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1838         [ 0x00e0, "Return EAHandle,Information Level 6,Immediate Close Handle" ],
1839         [ 0x00e1, "Return NetWareHandle,Information Level 6,Immediate Close Handle" ],
1840         [ 0x00e2, "Return Volume/Directory Number,Information Level 6,Immediate Close Handle" ],
1841         [ 0x00e4, "Return EAHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1842         [ 0x00e5, "Return NetWareHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1843         [ 0x00e6, "Return Volume/Directory Number,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1844         [ 0x00f0, "Return EAHandle,Information Level 7,Immediate Close Handle" ],
1845         [ 0x00f1, "Return NetWareHandle,Information Level 7,Immediate Close Handle" ],
1846         [ 0x00f2, "Return Volume/Directory Number,Information Level 7,Immediate Close Handle" ],
1847         [ 0x00f4, "Return EAHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1848         [ 0x00f5, "Return NetWareHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1849         [ 0x00f6, "Return Volume/Directory Number,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1850 ])
1851 dstNSIndicator                  = val_string16("dst_ns_indicator", "Destination Name Space Indicator", [
1852         [ 0x0000, "Return Source Name Space Information" ],
1853         [ 0x0001, "Return Destination Name Space Information" ],
1854 ])
1855 DstQueueID                      = uint32("dst_queue_id", "Destination Queue ID")
1856 DuplicateRepliesSent            = uint16("duplicate_replies_sent", "Duplicate Replies Sent")
1857
1858 EAAccessFlag                    = bitfield16("ea_access_flag", "EA Access Flag", [
1859         bf_boolean16(0x0001, "ea_permanent_memory", "Permanent Memory"),
1860         bf_boolean16(0x0002, "ea_deep_freeze", "Deep Freeze"),
1861         bf_boolean16(0x0004, "ea_in_progress", "In Progress"),
1862         bf_boolean16(0x0008, "ea_header_being_enlarged", "Header Being Enlarged"),
1863         bf_boolean16(0x0010, "ea_new_tally_used", "New Tally Used"),
1864         bf_boolean16(0x0020, "ea_tally_need_update", "Tally Need Update"),
1865         bf_boolean16(0x0040, "ea_score_card_present", "Score Card Present"),
1866         bf_boolean16(0x0080, "ea_need_bit_flag", "EA Need Bit Flag"),
1867         bf_boolean16(0x0100, "ea_write_privileges", "Write Privileges"),
1868         bf_boolean16(0x0200, "ea_read_privileges", "Read Privileges"),
1869         bf_boolean16(0x0400, "ea_delete_privileges", "Delete Privileges"),
1870         bf_boolean16(0x0800, "ea_system_ea_only", "System EA Only"),
1871         bf_boolean16(0x1000, "ea_write_in_progress", "Write In Progress"),
1872 ])
1873 EABytesWritten                  = uint32("ea_bytes_written", "Bytes Written")
1874 EACount                         = uint32("ea_count", "Count")
1875 EADataSize                      = uint32("ea_data_size", "Data Size")
1876 EADataSizeDuplicated            = uint32("ea_data_size_duplicated", "Data Size Duplicated")
1877 EADuplicateCount                = uint32("ea_duplicate_count", "Duplicate Count")
1878 EAErrorCodes                    = val_string16("ea_error_codes", "EA Error Codes", [
1879         [ 0x0000, "SUCCESSFUL" ],
1880         [ 0x00c8, "ERR_MISSING_EA_KEY" ],
1881         [ 0x00c9, "ERR_EA_NOT_FOUND" ],
1882         [ 0x00ca, "ERR_INVALID_EA_HANDLE_TYPE" ],
1883         [ 0x00cb, "ERR_EA_NO_KEY_NO_DATA" ],
1884         [ 0x00cc, "ERR_EA_NUMBER_MISMATCH" ],
1885         [ 0x00cd, "ERR_EXTENT_NUMBER_OUT_OF_RANGE" ],
1886         [ 0x00ce, "ERR_EA_BAD_DIR_NUM" ],
1887         [ 0x00cf, "ERR_INVALID_EA_HANDLE" ],
1888         [ 0x00d0, "ERR_EA_POSITION_OUT_OF_RANGE" ],
1889         [ 0x00d1, "ERR_EA_ACCESS_DENIED" ],
1890         [ 0x00d2, "ERR_DATA_PAGE_ODD_SIZE" ],
1891         [ 0x00d3, "ERR_EA_VOLUME_NOT_MOUNTED" ],
1892         [ 0x00d4, "ERR_BAD_PAGE_BOUNDARY" ],
1893         [ 0x00d5, "ERR_INSPECT_FAILURE" ],
1894         [ 0x00d6, "ERR_EA_ALREADY_CLAIMED" ],
1895         [ 0x00d7, "ERR_ODD_BUFFER_SIZE" ],
1896         [ 0x00d8, "ERR_NO_SCORECARDS" ],
1897         [ 0x00d9, "ERR_BAD_EDS_SIGNATURE" ],
1898         [ 0x00da, "ERR_EA_SPACE_LIMIT" ],
1899         [ 0x00db, "ERR_EA_KEY_CORRUPT" ],
1900         [ 0x00dc, "ERR_EA_KEY_LIMIT" ],
1901         [ 0x00dd, "ERR_TALLY_CORRUPT" ],
1902 ])
1903 EAFlags                         = val_string16("ea_flags", "EA Flags", [
1904         [ 0x0000, "Return EAHandle,Information Level 0" ],
1905         [ 0x0001, "Return NetWareHandle,Information Level 0" ],
1906         [ 0x0002, "Return Volume/Directory Number,Information Level 0" ],
1907         [ 0x0004, "Return EAHandle,Close Handle on Error,Information Level 0" ],
1908         [ 0x0005, "Return NetWareHandle,Close Handle on Error,Information Level 0" ],
1909         [ 0x0006, "Return Volume/Directory Number,Close Handle on Error,Information Level 0" ],
1910         [ 0x0010, "Return EAHandle,Information Level 1" ],
1911         [ 0x0011, "Return NetWareHandle,Information Level 1" ],
1912         [ 0x0012, "Return Volume/Directory Number,Information Level 1" ],
1913         [ 0x0014, "Return EAHandle,Close Handle on Error,Information Level 1" ],
1914         [ 0x0015, "Return NetWareHandle,Close Handle on Error,Information Level 1" ],
1915         [ 0x0016, "Return Volume/Directory Number,Close Handle on Error,Information Level 1" ],
1916         [ 0x0020, "Return EAHandle,Information Level 2" ],
1917         [ 0x0021, "Return NetWareHandle,Information Level 2" ],
1918         [ 0x0022, "Return Volume/Directory Number,Information Level 2" ],
1919         [ 0x0024, "Return EAHandle,Close Handle on Error,Information Level 2" ],
1920         [ 0x0025, "Return NetWareHandle,Close Handle on Error,Information Level 2" ],
1921         [ 0x0026, "Return Volume/Directory Number,Close Handle on Error,Information Level 2" ],
1922         [ 0x0030, "Return EAHandle,Information Level 3" ],
1923         [ 0x0031, "Return NetWareHandle,Information Level 3" ],
1924         [ 0x0032, "Return Volume/Directory Number,Information Level 3" ],
1925         [ 0x0034, "Return EAHandle,Close Handle on Error,Information Level 3" ],
1926         [ 0x0035, "Return NetWareHandle,Close Handle on Error,Information Level 3" ],
1927         [ 0x0036, "Return Volume/Directory Number,Close Handle on Error,Information Level 3" ],
1928         [ 0x0040, "Return EAHandle,Information Level 4" ],
1929         [ 0x0041, "Return NetWareHandle,Information Level 4" ],
1930         [ 0x0042, "Return Volume/Directory Number,Information Level 4" ],
1931         [ 0x0044, "Return EAHandle,Close Handle on Error,Information Level 4" ],
1932         [ 0x0045, "Return NetWareHandle,Close Handle on Error,Information Level 4" ],
1933         [ 0x0046, "Return Volume/Directory Number,Close Handle on Error,Information Level 4" ],
1934         [ 0x0050, "Return EAHandle,Information Level 5" ],
1935         [ 0x0051, "Return NetWareHandle,Information Level 5" ],
1936         [ 0x0052, "Return Volume/Directory Number,Information Level 5" ],
1937         [ 0x0054, "Return EAHandle,Close Handle on Error,Information Level 5" ],
1938         [ 0x0055, "Return NetWareHandle,Close Handle on Error,Information Level 5" ],
1939         [ 0x0056, "Return Volume/Directory Number,Close Handle on Error,Information Level 5" ],
1940         [ 0x0060, "Return EAHandle,Information Level 6" ],
1941         [ 0x0061, "Return NetWareHandle,Information Level 6" ],
1942         [ 0x0062, "Return Volume/Directory Number,Information Level 6" ],
1943         [ 0x0064, "Return EAHandle,Close Handle on Error,Information Level 6" ],
1944         [ 0x0065, "Return NetWareHandle,Close Handle on Error,Information Level 6" ],
1945         [ 0x0066, "Return Volume/Directory Number,Close Handle on Error,Information Level 6" ],
1946         [ 0x0070, "Return EAHandle,Information Level 7" ],
1947         [ 0x0071, "Return NetWareHandle,Information Level 7" ],
1948         [ 0x0072, "Return Volume/Directory Number,Information Level 7" ],
1949         [ 0x0074, "Return EAHandle,Close Handle on Error,Information Level 7" ],
1950         [ 0x0075, "Return NetWareHandle,Close Handle on Error,Information Level 7" ],
1951         [ 0x0076, "Return Volume/Directory Number,Close Handle on Error,Information Level 7" ],
1952         [ 0x0080, "Return EAHandle,Information Level 0,Immediate Close Handle" ],
1953         [ 0x0081, "Return NetWareHandle,Information Level 0,Immediate Close Handle" ],
1954         [ 0x0082, "Return Volume/Directory Number,Information Level 0,Immediate Close Handle" ],
1955         [ 0x0084, "Return EAHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1956         [ 0x0085, "Return NetWareHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1957         [ 0x0086, "Return Volume/Directory Number,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1958         [ 0x0090, "Return EAHandle,Information Level 1,Immediate Close Handle" ],
1959         [ 0x0091, "Return NetWareHandle,Information Level 1,Immediate Close Handle" ],
1960         [ 0x0092, "Return Volume/Directory Number,Information Level 1,Immediate Close Handle" ],
1961         [ 0x0094, "Return EAHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1962         [ 0x0095, "Return NetWareHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1963         [ 0x0096, "Return Volume/Directory Number,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1964         [ 0x00a0, "Return EAHandle,Information Level 2,Immediate Close Handle" ],
1965         [ 0x00a1, "Return NetWareHandle,Information Level 2,Immediate Close Handle" ],
1966         [ 0x00a2, "Return Volume/Directory Number,Information Level 2,Immediate Close Handle" ],
1967         [ 0x00a4, "Return EAHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1968         [ 0x00a5, "Return NetWareHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1969         [ 0x00a6, "Return Volume/Directory Number,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1970         [ 0x00b0, "Return EAHandle,Information Level 3,Immediate Close Handle" ],
1971         [ 0x00b1, "Return NetWareHandle,Information Level 3,Immediate Close Handle" ],
1972         [ 0x00b2, "Return Volume/Directory Number,Information Level 3,Immediate Close Handle" ],
1973         [ 0x00b4, "Return EAHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1974         [ 0x00b5, "Return NetWareHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1975         [ 0x00b6, "Return Volume/Directory Number,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1976         [ 0x00c0, "Return EAHandle,Information Level 4,Immediate Close Handle" ],
1977         [ 0x00c1, "Return NetWareHandle,Information Level 4,Immediate Close Handle" ],
1978         [ 0x00c2, "Return Volume/Directory Number,Information Level 4,Immediate Close Handle" ],
1979         [ 0x00c4, "Return EAHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1980         [ 0x00c5, "Return NetWareHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1981         [ 0x00c6, "Return Volume/Directory Number,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1982         [ 0x00d0, "Return EAHandle,Information Level 5,Immediate Close Handle" ],
1983         [ 0x00d1, "Return NetWareHandle,Information Level 5,Immediate Close Handle" ],
1984         [ 0x00d2, "Return Volume/Directory Number,Information Level 5,Immediate Close Handle" ],
1985         [ 0x00d4, "Return EAHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1986         [ 0x00d5, "Return NetWareHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1987         [ 0x00d6, "Return Volume/Directory Number,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1988         [ 0x00e0, "Return EAHandle,Information Level 6,Immediate Close Handle" ],
1989         [ 0x00e1, "Return NetWareHandle,Information Level 6,Immediate Close Handle" ],
1990         [ 0x00e2, "Return Volume/Directory Number,Information Level 6,Immediate Close Handle" ],
1991         [ 0x00e4, "Return EAHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1992         [ 0x00e5, "Return NetWareHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1993         [ 0x00e6, "Return Volume/Directory Number,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1994         [ 0x00f0, "Return EAHandle,Information Level 7,Immediate Close Handle" ],
1995         [ 0x00f1, "Return NetWareHandle,Information Level 7,Immediate Close Handle" ],
1996         [ 0x00f2, "Return Volume/Directory Number,Information Level 7,Immediate Close Handle" ],
1997         [ 0x00f4, "Return EAHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1998         [ 0x00f5, "Return NetWareHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1999         [ 0x00f6, "Return Volume/Directory Number,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
2000 ])
2001 EAHandle                        = uint32("ea_handle", "EA Handle")
2002 EAHandle.Display("BASE_HEX")
2003 EAHandleOrNetWareHandleOrVolume = uint32("ea_handle_or_netware_handle_or_volume", "EAHandle or NetWare Handle or Volume (see EAFlags)")
2004 EAHandleOrNetWareHandleOrVolume.Display("BASE_HEX")
2005 EAKey                           = nstring16("ea_key", "EA Key")
2006 EAKeySize                       = uint32("ea_key_size", "Key Size")
2007 EAKeySizeDuplicated             = uint32("ea_key_size_duplicated", "Key Size Duplicated")
2008 EAValue                         = nstring16("ea_value", "EA Value")
2009 EAValueRep                      = fw_string("ea_value_rep", "EA Value", 1)
2010 EAValueLength                   = uint16("ea_value_length", "Value Length")
2011 EchoSocket                      = uint16("echo_socket", "Echo Socket")
2012 EchoSocket.Display('BASE_HEX')
2013 EffectiveRights                 = bitfield8("effective_rights", "Effective Rights", [
2014         bf_boolean8(0x01, "effective_rights_read", "Read Rights"),
2015         bf_boolean8(0x02, "effective_rights_write", "Write Rights"),
2016         bf_boolean8(0x04, "effective_rights_open", "Open Rights"),
2017         bf_boolean8(0x08, "effective_rights_create", "Create Rights"),
2018         bf_boolean8(0x10, "effective_rights_delete", "Delete Rights"),
2019         bf_boolean8(0x20, "effective_rights_parental", "Parental Rights"),
2020         bf_boolean8(0x40, "effective_rights_search", "Search Rights"),
2021         bf_boolean8(0x80, "effective_rights_modify", "Modify Rights"),
2022 ])
2023 EnumInfoMask                    = bitfield8("enum_info_mask", "Return Information Mask", [
2024         bf_boolean8(0x01, "enum_info_transport", "Transport Information"),
2025         bf_boolean8(0x02, "enum_info_time", "Time Information"),
2026         bf_boolean8(0x04, "enum_info_name", "Name Information"),
2027         bf_boolean8(0x08, "enum_info_lock", "Lock Information"),
2028         bf_boolean8(0x10, "enum_info_print", "Print Information"),
2029         bf_boolean8(0x20, "enum_info_stats", "Statistical Information"),
2030         bf_boolean8(0x40, "enum_info_account", "Accounting Information"),
2031         bf_boolean8(0x80, "enum_info_auth", "Authentication Information"),
2032 ])
2033
2034 eventOffset                     = bytes("event_offset", "Event Offset", 8)
2035 eventTime                       = uint32("event_time", "Event Time")
2036 eventTime.Display("BASE_HEX")
2037 ExpirationTime                  = uint32("expiration_time", "Expiration Time")
2038 ExpirationTime.Display('BASE_HEX')
2039 ExtAttrDataSize                 = uint32("ext_attr_data_size", "Extended Attributes Data Size")
2040 ExtAttrCount                    = uint32("ext_attr_count", "Extended Attributes Count")
2041 ExtAttrKeySize                  = uint32("ext_attr_key_size", "Extended Attributes Key Size")
2042 ExtendedAttributesDefined       = uint32("extended_attributes_defined", "Extended Attributes Defined")
2043 ExtendedAttributeExtentsUsed    = uint32("extended_attribute_extents_used", "Extended Attribute Extents Used")
2044 ExtendedInfo                    = bitfield16("ext_info", "Extended Return Information", [
2045         bf_boolean16(0x0001, "ext_info_update", "Last Update"),
2046         bf_boolean16(0x0002, "ext_info_dos_name", "DOS Name"),
2047         bf_boolean16(0x0004, "ext_info_flush", "Flush Time"),
2048         bf_boolean16(0x0008, "ext_info_parental", "Parental"),
2049         bf_boolean16(0x0010, "ext_info_mac_finder", "MAC Finder"),
2050         bf_boolean16(0x0020, "ext_info_sibling", "Sibling"),
2051         bf_boolean16(0x0040, "ext_info_effective", "Effective"),
2052         bf_boolean16(0x0080, "ext_info_mac_date", "MAC Date"),
2053         bf_boolean16(0x0100, "ext_info_access", "Last Access"),
2054         bf_boolean16(0x0400, "ext_info_64_bit_fs", "64 Bit File Sizes"),
2055         bf_boolean16(0x8000, "ext_info_newstyle", "New Style"),
2056 ])
2057 ExtRouterActiveFlag             = boolean8("ext_router_active_flag", "External Router Active Flag")
2058
2059 FailedAllocReqCnt               = uint32("failed_alloc_req", "Failed Alloc Request Count")
2060 FatalFATWriteErrors             = uint16("fatal_fat_write_errors", "Fatal FAT Write Errors")
2061 FATScanErrors                   = uint16("fat_scan_errors", "FAT Scan Errors")
2062 FATWriteErrors                  = uint16("fat_write_errors", "FAT Write Errors")
2063 FieldsLenTable                  = bytes("fields_len_table", "Fields Len Table", 32)
2064 FileCount                       = uint16("file_count", "File Count")
2065 FileDate                        = uint16("file_date", "File Date")
2066 FileDate.NWDate()
2067 FileDirWindow                   = uint16("file_dir_win", "File/Dir Window")
2068 FileDirWindow.Display("BASE_HEX")
2069 FileExecuteType                 = uint8("file_execute_type", "File Execute Type")
2070 FileExtendedAttributes          = val_string8("file_ext_attr", "File Extended Attributes", [
2071         [ 0x00, "Search On All Read Only Opens" ],
2072         [ 0x01, "Search On Read Only Opens With No Path" ],
2073         [ 0x02, "Shell Default Search Mode" ],
2074         [ 0x03, "Search On All Opens With No Path" ],
2075         [ 0x04, "Do Not Search" ],
2076         [ 0x05, "Reserved" ],
2077         [ 0x06, "Search On All Opens" ],
2078         [ 0x07, "Reserved" ],
2079         [ 0x08, "Search On All Read Only Opens/Indexed" ],
2080         [ 0x09, "Search On Read Only Opens With No Path/Indexed" ],
2081         [ 0x0a, "Shell Default Search Mode/Indexed" ],
2082         [ 0x0b, "Search On All Opens With No Path/Indexed" ],
2083         [ 0x0c, "Do Not Search/Indexed" ],
2084         [ 0x0d, "Indexed" ],
2085         [ 0x0e, "Search On All Opens/Indexed" ],
2086         [ 0x0f, "Indexed" ],
2087         [ 0x10, "Search On All Read Only Opens/Transactional" ],
2088         [ 0x11, "Search On Read Only Opens With No Path/Transactional" ],
2089         [ 0x12, "Shell Default Search Mode/Transactional" ],
2090         [ 0x13, "Search On All Opens With No Path/Transactional" ],
2091         [ 0x14, "Do Not Search/Transactional" ],
2092         [ 0x15, "Transactional" ],
2093         [ 0x16, "Search On All Opens/Transactional" ],
2094         [ 0x17, "Transactional" ],
2095         [ 0x18, "Search On All Read Only Opens/Indexed/Transactional" ],
2096         [ 0x19, "Search On Read Only Opens With No Path/Indexed/Transactional" ],
2097         [ 0x1a, "Shell Default Search Mode/Indexed/Transactional" ],
2098         [ 0x1b, "Search On All Opens With No Path/Indexed/Transactional" ],
2099         [ 0x1c, "Do Not Search/Indexed/Transactional" ],
2100         [ 0x1d, "Indexed/Transactional" ],
2101         [ 0x1e, "Search On All Opens/Indexed/Transactional" ],
2102         [ 0x1f, "Indexed/Transactional" ],
2103         [ 0x40, "Search On All Read Only Opens/Read Audit" ],
2104         [ 0x41, "Search On Read Only Opens With No Path/Read Audit" ],
2105         [ 0x42, "Shell Default Search Mode/Read Audit" ],
2106         [ 0x43, "Search On All Opens With No Path/Read Audit" ],
2107         [ 0x44, "Do Not Search/Read Audit" ],
2108         [ 0x45, "Read Audit" ],
2109         [ 0x46, "Search On All Opens/Read Audit" ],
2110         [ 0x47, "Read Audit" ],
2111         [ 0x48, "Search On All Read Only Opens/Indexed/Read Audit" ],
2112         [ 0x49, "Search On Read Only Opens With No Path/Indexed/Read Audit" ],
2113         [ 0x4a, "Shell Default Search Mode/Indexed/Read Audit" ],
2114         [ 0x4b, "Search On All Opens With No Path/Indexed/Read Audit" ],
2115         [ 0x4c, "Do Not Search/Indexed/Read Audit" ],
2116         [ 0x4d, "Indexed/Read Audit" ],
2117         [ 0x4e, "Search On All Opens/Indexed/Read Audit" ],
2118         [ 0x4f, "Indexed/Read Audit" ],
2119         [ 0x50, "Search On All Read Only Opens/Transactional/Read Audit" ],
2120         [ 0x51, "Search On Read Only Opens With No Path/Transactional/Read Audit" ],
2121         [ 0x52, "Shell Default Search Mode/Transactional/Read Audit" ],
2122         [ 0x53, "Search On All Opens With No Path/Transactional/Read Audit" ],
2123         [ 0x54, "Do Not Search/Transactional/Read Audit" ],
2124         [ 0x55, "Transactional/Read Audit" ],
2125         [ 0x56, "Search On All Opens/Transactional/Read Audit" ],
2126         [ 0x57, "Transactional/Read Audit" ],
2127         [ 0x58, "Search On All Read Only Opens/Indexed/Transactional/Read Audit" ],
2128         [ 0x59, "Search On Read Only Opens With No Path/Indexed/Transactional/Read Audit" ],
2129         [ 0x5a, "Shell Default Search Mode/Indexed/Transactional/Read Audit" ],
2130         [ 0x5b, "Search On All Opens With No Path/Indexed/Transactional/Read Audit" ],
2131         [ 0x5c, "Do Not Search/Indexed/Transactional/Read Audit" ],
2132         [ 0x5d, "Indexed/Transactional/Read Audit" ],
2133         [ 0x5e, "Search On All Opens/Indexed/Transactional/Read Audit" ],
2134         [ 0x5f, "Indexed/Transactional/Read Audit" ],
2135         [ 0x80, "Search On All Read Only Opens/Write Audit" ],
2136         [ 0x81, "Search On Read Only Opens With No Path/Write Audit" ],
2137         [ 0x82, "Shell Default Search Mode/Write Audit" ],
2138         [ 0x83, "Search On All Opens With No Path/Write Audit" ],
2139         [ 0x84, "Do Not Search/Write Audit" ],
2140         [ 0x85, "Write Audit" ],
2141         [ 0x86, "Search On All Opens/Write Audit" ],
2142         [ 0x87, "Write Audit" ],
2143         [ 0x88, "Search On All Read Only Opens/Indexed/Write Audit" ],
2144         [ 0x89, "Search On Read Only Opens With No Path/Indexed/Write Audit" ],
2145         [ 0x8a, "Shell Default Search Mode/Indexed/Write Audit" ],
2146         [ 0x8b, "Search On All Opens With No Path/Indexed/Write Audit" ],
2147         [ 0x8c, "Do Not Search/Indexed/Write Audit" ],
2148         [ 0x8d, "Indexed/Write Audit" ],
2149         [ 0x8e, "Search On All Opens/Indexed/Write Audit" ],
2150         [ 0x8f, "Indexed/Write Audit" ],
2151         [ 0x90, "Search On All Read Only Opens/Transactional/Write Audit" ],
2152         [ 0x91, "Search On Read Only Opens With No Path/Transactional/Write Audit" ],
2153         [ 0x92, "Shell Default Search Mode/Transactional/Write Audit" ],
2154         [ 0x93, "Search On All Opens With No Path/Transactional/Write Audit" ],
2155         [ 0x94, "Do Not Search/Transactional/Write Audit" ],
2156         [ 0x95, "Transactional/Write Audit" ],
2157         [ 0x96, "Search On All Opens/Transactional/Write Audit" ],
2158         [ 0x97, "Transactional/Write Audit" ],
2159         [ 0x98, "Search On All Read Only Opens/Indexed/Transactional/Write Audit" ],
2160         [ 0x99, "Search On Read Only Opens With No Path/Indexed/Transactional/Write Audit" ],
2161         [ 0x9a, "Shell Default Search Mode/Indexed/Transactional/Write Audit" ],
2162         [ 0x9b, "Search On All Opens With No Path/Indexed/Transactional/Write Audit" ],
2163         [ 0x9c, "Do Not Search/Indexed/Transactional/Write Audit" ],
2164         [ 0x9d, "Indexed/Transactional/Write Audit" ],
2165         [ 0x9e, "Search On All Opens/Indexed/Transactional/Write Audit" ],
2166         [ 0x9f, "Indexed/Transactional/Write Audit" ],
2167         [ 0xa0, "Search On All Read Only Opens/Read Audit/Write Audit" ],
2168         [ 0xa1, "Search On Read Only Opens With No Path/Read Audit/Write Audit" ],
2169         [ 0xa2, "Shell Default Search Mode/Read Audit/Write Audit" ],
2170         [ 0xa3, "Search On All Opens With No Path/Read Audit/Write Audit" ],
2171         [ 0xa4, "Do Not Search/Read Audit/Write Audit" ],
2172         [ 0xa5, "Read Audit/Write Audit" ],
2173         [ 0xa6, "Search On All Opens/Read Audit/Write Audit" ],
2174         [ 0xa7, "Read Audit/Write Audit" ],
2175         [ 0xa8, "Search On All Read Only Opens/Indexed/Read Audit/Write Audit" ],
2176         [ 0xa9, "Search On Read Only Opens With No Path/Indexed/Read Audit/Write Audit" ],
2177         [ 0xaa, "Shell Default Search Mode/Indexed/Read Audit/Write Audit" ],
2178         [ 0xab, "Search On All Opens With No Path/Indexed/Read Audit/Write Audit" ],
2179         [ 0xac, "Do Not Search/Indexed/Read Audit/Write Audit" ],
2180         [ 0xad, "Indexed/Read Audit/Write Audit" ],
2181         [ 0xae, "Search On All Opens/Indexed/Read Audit/Write Audit" ],
2182         [ 0xaf, "Indexed/Read Audit/Write Audit" ],
2183         [ 0xb0, "Search On All Read Only Opens/Transactional/Read Audit/Write Audit" ],
2184         [ 0xb1, "Search On Read Only Opens With No Path/Transactional/Read Audit/Write Audit" ],
2185         [ 0xb2, "Shell Default Search Mode/Transactional/Read Audit/Write Audit" ],
2186         [ 0xb3, "Search On All Opens With No Path/Transactional/Read Audit/Write Audit" ],
2187         [ 0xb4, "Do Not Search/Transactional/Read Audit/Write Audit" ],
2188         [ 0xb5, "Transactional/Read Audit/Write Audit" ],
2189         [ 0xb6, "Search On All Opens/Transactional/Read Audit/Write Audit" ],
2190         [ 0xb7, "Transactional/Read Audit/Write Audit" ],
2191         [ 0xb8, "Search On All Read Only Opens/Indexed/Transactional/Read Audit/Write Audit" ],
2192         [ 0xb9, "Search On Read Only Opens With No Path/Indexed/Transactional/Read Audit/Write Audit" ],
2193         [ 0xba, "Shell Default Search Mode/Indexed/Transactional/Read Audit/Write Audit" ],
2194         [ 0xbb, "Search On All Opens With No Path/Indexed/Transactional/Read Audit/Write Audit" ],
2195         [ 0xbc, "Do Not Search/Indexed/Transactional/Read Audit/Write Audit" ],
2196         [ 0xbd, "Indexed/Transactional/Read Audit/Write Audit" ],
2197         [ 0xbe, "Search On All Opens/Indexed/Transactional/Read Audit/Write Audit" ],
2198         [ 0xbf, "Indexed/Transactional/Read Audit/Write Audit" ],
2199 ])
2200 fileFlags                       = uint32("file_flags", "File Flags")
2201 FileHandle                      = bytes("file_handle", "File Handle", 6)
2202 FileLimbo                       = uint32("file_limbo", "File Limbo")
2203 FileListCount                   = uint32("file_list_count", "File List Count")
2204 FileLock                        = val_string8("file_lock", "File Lock", [
2205         [ 0x00, "Not Locked" ],
2206         [ 0xfe, "Locked by file lock" ],
2207         [ 0xff, "Unknown" ],
2208 ])
2209 FileLockCount                   = uint16("file_lock_count", "File Lock Count")
2210 FileMigrationState  = val_string8("file_mig_state", "File Migration State", [
2211     [ 0x00, "Mark file ineligible for file migration" ],
2212     [ 0x01, "Mark file eligible for file migration" ],
2213     [ 0x02, "Mark file as migrated and delete fat chains" ],
2214     [ 0x03, "Reset file status back to normal" ],
2215     [ 0x04, "Get file data back and reset file status back to normal" ],
2216 ])
2217 FileMode                        = uint8("file_mode", "File Mode")
2218 FileName                        = nstring8("file_name", "Filename")
2219 FileName12                      = fw_string("file_name_12", "Filename", 12)
2220 FileName14                      = fw_string("file_name_14", "Filename", 14)
2221 FileName16          = nstring16("file_name_16", "Filename")
2222 FileNameLen                     = uint8("file_name_len", "Filename Length")
2223 FileOffset                      = uint32("file_offset", "File Offset")
2224 FilePath                        = nstring8("file_path", "File Path")
2225 FileSize                        = uint32("file_size", "File Size", BE)
2226 FileSize64bit       = uint64("f_size_64bit", "64bit File Size")
2227 FileSystemID                    = uint8("file_system_id", "File System ID")
2228 FileTime                        = uint16("file_time", "File Time")
2229 FileTime.NWTime()
2230 FileUseCount        = uint16("file_use_count", "File Use Count")
2231 FileWriteFlags                  = val_string8("file_write_flags", "File Write Flags", [
2232         [ 0x01, "Writing" ],
2233         [ 0x02, "Write aborted" ],
2234 ])
2235 FileWriteState                  = val_string8("file_write_state", "File Write State", [
2236         [ 0x00, "Not Writing" ],
2237         [ 0x01, "Write in Progress" ],
2238         [ 0x02, "Write Being Stopped" ],
2239 ])
2240 Filler                          = uint8("filler", "Filler")
2241 FinderAttr                      = bitfield16("finder_attr", "Finder Info Attributes", [
2242         bf_boolean16(0x0001, "finder_attr_desktop", "Object on Desktop"),
2243         bf_boolean16(0x2000, "finder_attr_invisible", "Object is Invisible"),
2244         bf_boolean16(0x4000, "finder_attr_bundle", "Object Has Bundle"),
2245 ])
2246 FixedBitMask                    = uint32("fixed_bit_mask", "Fixed Bit Mask")
2247 FixedBitsDefined                = uint16("fixed_bits_defined", "Fixed Bits Defined")
2248 FlagBits                        = uint8("flag_bits", "Flag Bits")
2249 Flags                           = uint8("flags", "Flags")
2250 FlagsDef                        = uint16("flags_def", "Flags")
2251 FlushTime                       = uint32("flush_time", "Flush Time")
2252 FolderFlag                      = val_string8("folder_flag", "Folder Flag", [
2253         [ 0x00, "Not a Folder" ],
2254         [ 0x01, "Folder" ],
2255 ])
2256 ForkCount                       = uint8("fork_count", "Fork Count")
2257 ForkIndicator                   = val_string8("fork_indicator", "Fork Indicator", [
2258         [ 0x00, "Data Fork" ],
2259         [ 0x01, "Resource Fork" ],
2260 ])
2261 ForceFlag                       = val_string8("force_flag", "Force Server Down Flag", [
2262         [ 0x00, "Down Server if No Files Are Open" ],
2263         [ 0xff, "Down Server Immediately, Auto-Close Open Files" ],
2264 ])
2265 ForgedDetachedRequests          = uint16("forged_detached_requests", "Forged Detached Requests")
2266 FormType                        = uint16( "form_type", "Form Type" )
2267 FormTypeCnt                     = uint32("form_type_count", "Form Types Count")
2268 FoundSomeMem                    = uint32("found_some_mem", "Found Some Memory")
2269 FractionalSeconds               = uint32("fractional_time", "Fractional Time in Seconds")
2270 FraggerHandle                   = uint32("fragger_handle", "Fragment Handle")
2271 FraggerHandle.Display('BASE_HEX')
2272 FragmentWriteOccurred           = uint16("fragment_write_occurred", "Fragment Write Occurred")
2273 FragSize                        = uint32("frag_size", "Fragment Size")
2274 FreeableLimboSectors            = uint32("freeable_limbo_sectors", "Freeable Limbo Sectors")
2275 FreeBlocks                      = uint32("free_blocks", "Free Blocks")
2276 FreedClusters                   = uint32("freed_clusters", "Freed Clusters")
2277 FreeDirectoryEntries            = uint16("free_directory_entries", "Free Directory Entries")
2278 FSEngineFlag                    = boolean8("fs_engine_flag", "FS Engine Flag")
2279 FullName                        = fw_string("full_name", "Full Name", 39)
2280
2281 GetSetFlag                      = val_string8("get_set_flag", "Get Set Flag", [
2282         [ 0x00, "Get the default support module ID" ],
2283         [ 0x01, "Set the default support module ID" ],
2284 ])
2285 GUID                            = bytes("guid", "GUID", 16)
2286
2287 HandleFlag                      = val_string8("handle_flag", "Handle Flag", [
2288         [ 0x00, "Short Directory Handle" ],
2289         [ 0x01, "Directory Base" ],
2290         [ 0xFF, "No Handle Present" ],
2291 ])
2292 HandleInfoLevel                 = val_string8("handle_info_level", "Handle Info Level", [
2293         [ 0x00, "Get Limited Information from a File Handle" ],
2294         [ 0x01, "Get Limited Information from a File Handle Using a Name Space" ],
2295         [ 0x02, "Get Information from a File Handle" ],
2296         [ 0x03, "Get Information from a Directory Handle" ],
2297         [ 0x04, "Get Complete Information from a Directory Handle" ],
2298         [ 0x05, "Get Complete Information from a File Handle" ],
2299 ])
2300 HeldBytesRead                   = bytes("held_bytes_read", "Held Bytes Read", 6)
2301 HeldBytesWritten                = bytes("held_bytes_write", "Held Bytes Written", 6)
2302 HeldConnectTimeInMinutes        = uint32("held_conn_time", "Held Connect Time in Minutes")
2303 HeldRequests                    = uint32("user_info_held_req", "Held Requests")
2304 HoldAmount                      = uint32("hold_amount", "Hold Amount")
2305 HoldCancelAmount                = uint32("hold_cancel_amount", "Hold Cancel Amount")
2306 HolderID                        = uint32("holder_id", "Holder ID")
2307 HolderID.Display("BASE_HEX")
2308 HoldTime                        = uint32("hold_time", "Hold Time")
2309 HopsToNet                       = uint16("hops_to_net", "Hop Count")
2310 HorizLocation                   = uint16("horiz_location", "Horizontal Location")
2311 HostAddress                     = bytes("host_address", "Host Address", 6)
2312 HotFixBlocksAvailable           = uint16("hot_fix_blocks_available", "Hot Fix Blocks Available")
2313 HotFixDisabled                  = val_string8("hot_fix_disabled", "Hot Fix Disabled", [
2314         [ 0x00, "Enabled" ],
2315         [ 0x01, "Disabled" ],
2316 ])
2317 HotFixTableSize                 = uint16("hot_fix_table_size", "Hot Fix Table Size")
2318 HotFixTableStart                = uint32("hot_fix_table_start", "Hot Fix Table Start")
2319 Hour                            = uint8("s_hour", "Hour")
2320 HugeBitMask                     = uint32("huge_bit_mask", "Huge Bit Mask")
2321 HugeBitsDefined                 = uint16("huge_bits_defined", "Huge Bits Defined")
2322 HugeData                        = nstring8("huge_data", "Huge Data")
2323 HugeDataUsed                    = uint32("huge_data_used", "Huge Data Used")
2324 HugeStateInfo                   = bytes("huge_state_info", "Huge State Info", 16)
2325
2326 IdentificationNumber            = uint32("identification_number", "Identification Number")
2327 IgnoredRxPkts                   = uint32("ignored_rx_pkts", "Ignored Receive Packets")
2328 IncomingPacketDiscardedNoDGroup = uint16("incoming_packet_discarded_no_dgroup", "Incoming Packet Discarded No DGroup")
2329 IndexNumber                     = uint8("index_number", "Index Number")
2330 InfoCount                       = uint16("info_count", "Info Count")
2331 InfoFlags                       = bitfield32("info_flags", "Info Flags", [
2332         bf_boolean32(0x10000000, "info_flags_security", "Return Object Security"),
2333         bf_boolean32(0x20000000, "info_flags_flags", "Return Object Flags"),
2334         bf_boolean32(0x40000000, "info_flags_type", "Return Object Type"),
2335         bf_boolean32(0x80000000, "info_flags_name", "Return Object Name"),
2336 ])
2337 InfoLevelNumber                 = val_string8("info_level_num", "Information Level Number", [
2338         [ 0x01, "Volume Information Definition" ],
2339         [ 0x02, "Volume Information 2 Definition" ],
2340 ])
2341 InfoMask                        = bitfield32("info_mask", "Information Mask", [
2342         bf_boolean32(0x00000001, "info_flags_dos_time", "DOS Time"),
2343         bf_boolean32(0x00000002, "info_flags_ref_count", "Reference Count"),
2344         bf_boolean32(0x00000004, "info_flags_dos_attr", "DOS Attributes"),
2345         bf_boolean32(0x00000008, "info_flags_ids", "ID's"),
2346         bf_boolean32(0x00000010, "info_flags_ds_sizes", "Data Stream Sizes"),
2347         bf_boolean32(0x00000020, "info_flags_ns_attr", "Name Space Attributes"),
2348         bf_boolean32(0x00000040, "info_flags_ea_present", "EA Present Flag"),
2349         bf_boolean32(0x00000080, "info_flags_all_attr", "All Attributes"),
2350         bf_boolean32(0x00000100, "info_flags_all_dirbase_num", "All Directory Base Numbers"),
2351         bf_boolean32(0x00000200, "info_flags_max_access_mask", "Maximum Access Mask"),
2352         bf_boolean32(0x00000400, "info_flags_flush_time", "Flush Time"),
2353         bf_boolean32(0x00000800, "info_flags_prnt_base_id", "Parent Base ID"),
2354         bf_boolean32(0x00001000, "info_flags_mac_finder", "Mac Finder Information"),
2355         bf_boolean32(0x00002000, "info_flags_sibling_cnt", "Sibling Count"),
2356         bf_boolean32(0x00004000, "info_flags_effect_rights", "Effective Rights"),
2357         bf_boolean32(0x00008000, "info_flags_mac_time", "Mac Time"),
2358         bf_boolean32(0x20000000, "info_mask_dosname", "DOS Name"),
2359         bf_boolean32(0x40000000, "info_mask_c_name_space", "Creator Name Space & Name"),
2360         bf_boolean32(0x80000000, "info_mask_name", "Name"),
2361 ])
2362 InheritedRightsMask             = bitfield16("inherited_rights_mask", "Inherited Rights Mask", [
2363     bf_boolean16(0x0001, "inh_rights_read", "Read Rights"),
2364         bf_boolean16(0x0002, "inh_rights_write", "Write Rights"),
2365         bf_boolean16(0x0004, "inh_rights_open", "Open Rights"),
2366         bf_boolean16(0x0008, "inh_rights_create", "Create Rights"),
2367         bf_boolean16(0x0010, "inh_rights_delete", "Delete Rights"),
2368         bf_boolean16(0x0020, "inh_rights_parent", "Change Access"),
2369         bf_boolean16(0x0040, "inh_rights_search", "See Files Flag"),
2370         bf_boolean16(0x0080, "inh_rights_modify", "Modify Rights"),
2371         bf_boolean16(0x0100, "inh_rights_supervisor", "Supervisor"),
2372 ])
2373 InheritanceRevokeMask           = bitfield16("inheritance_revoke_mask", "Revoke Rights Mask", [
2374         bf_boolean16(0x0001, "inh_revoke_read", "Read Rights"),
2375         bf_boolean16(0x0002, "inh_revoke_write", "Write Rights"),
2376         bf_boolean16(0x0004, "inh_revoke_open", "Open Rights"),
2377         bf_boolean16(0x0008, "inh_revoke_create", "Create Rights"),
2378         bf_boolean16(0x0010, "inh_revoke_delete", "Delete Rights"),
2379         bf_boolean16(0x0020, "inh_revoke_parent", "Change Access"),
2380         bf_boolean16(0x0040, "inh_revoke_search", "See Files Flag"),
2381         bf_boolean16(0x0080, "inh_revoke_modify", "Modify Rights"),
2382         bf_boolean16(0x0100, "inh_revoke_supervisor", "Supervisor"),
2383 ])
2384 InitialSemaphoreValue           = uint8("initial_semaphore_value", "Initial Semaphore Value")
2385 InspectSize                     = uint32("inspect_size", "Inspect Size")
2386 InternetBridgeVersion           = uint8("internet_bridge_version", "Internet Bridge Version")
2387 InterruptNumbersUsed            = uint32("interrupt_numbers_used", "Interrupt Numbers Used")
2388 InUse                           = uint32("in_use", "Bytes in Use")
2389 IOAddressesUsed                 = bytes("io_addresses_used", "IO Addresses Used", 8)
2390 IOErrorCount                    = uint16("io_error_count", "IO Error Count")
2391 IOEngineFlag                    = boolean8("io_engine_flag", "IO Engine Flag")
2392 IPXNotMyNetwork                 = uint16("ipx_not_my_network", "IPX Not My Network")
2393 ItemsChanged                    = uint32("items_changed", "Items Changed")
2394 ItemsChecked                    = uint32("items_checked", "Items Checked")
2395 ItemsCount                      = uint32("items_count", "Items Count")
2396 itemsInList                     = uint32("items_in_list", "Items in List")
2397 ItemsInPacket                   = uint32("items_in_packet", "Items in Packet")
2398
2399 JobControlFlags                 = bitfield8("job_control_flags", "Job Control Flags", [
2400         bf_boolean8(0x08, "job_control_job_recovery", "Job Recovery"),
2401         bf_boolean8(0x10, "job_control_reservice", "ReService Job"),
2402         bf_boolean8(0x20, "job_control_file_open", "File Open"),
2403         bf_boolean8(0x40, "job_control_user_hold", "User Hold"),
2404         bf_boolean8(0x80, "job_control_operator_hold", "Operator Hold"),
2405
2406 ])
2407 JobControlFlagsWord             = bitfield16("job_control_flags_word", "Job Control Flags", [
2408         bf_boolean16(0x0008, "job_control1_job_recovery", "Job Recovery"),
2409         bf_boolean16(0x0010, "job_control1_reservice", "ReService Job"),
2410         bf_boolean16(0x0020, "job_control1_file_open", "File Open"),
2411         bf_boolean16(0x0040, "job_control1_user_hold", "User Hold"),
2412         bf_boolean16(0x0080, "job_control1_operator_hold", "Operator Hold"),
2413
2414 ])
2415 JobCount                        = uint32("job_count", "Job Count")
2416 JobFileHandle                   = bytes("job_file_handle", "Job File Handle", 6)
2417 JobFileHandleLong               = uint32("job_file_handle_long", "Job File Handle", BE)
2418 JobFileHandleLong.Display("BASE_HEX")
2419 JobFileName                     = fw_string("job_file_name", "Job File Name", 14)
2420 JobPosition                     = uint8("job_position", "Job Position")
2421 JobPositionWord                 = uint16("job_position_word", "Job Position")
2422 JobNumber                       = uint16("job_number", "Job Number", BE )
2423 JobNumberLong                   = uint32("job_number_long", "Job Number", BE )
2424 JobNumberLong.Display("BASE_HEX")
2425 JobType                         = uint16("job_type", "Job Type", BE )
2426
2427 LANCustomVariablesCount         = uint32("lan_cust_var_count", "LAN Custom Variables Count")
2428 LANdriverBoardInstance          = uint16("lan_drv_bd_inst", "LAN Driver Board Instance")
2429 LANdriverBoardNumber            = uint16("lan_drv_bd_num", "LAN Driver Board Number")
2430 LANdriverCardID                 = uint16("lan_drv_card_id", "LAN Driver Card ID")
2431 LANdriverCardName               = fw_string("lan_drv_card_name", "LAN Driver Card Name", 28)
2432 LANdriverCFG_MajorVersion       = uint8("lan_dvr_cfg_major_vrs", "LAN Driver Config - Major Version")
2433 LANdriverCFG_MinorVersion       = uint8("lan_dvr_cfg_minor_vrs", "LAN Driver Config - Minor Version")
2434 LANdriverDMAUsage1              = uint8("lan_drv_dma_usage1", "Primary DMA Channel")
2435 LANdriverDMAUsage2              = uint8("lan_drv_dma_usage2", "Secondary DMA Channel")
2436 LANdriverFlags                  = uint16("lan_drv_flags", "LAN Driver Flags")
2437 LANdriverFlags.Display("BASE_HEX")
2438 LANdriverInterrupt1             = uint8("lan_drv_interrupt1", "Primary Interrupt Vector")
2439 LANdriverInterrupt2             = uint8("lan_drv_interrupt2", "Secondary Interrupt Vector")
2440 LANdriverIOPortsAndRanges1      = uint16("lan_drv_io_ports_and_ranges_1", "Primary Base I/O Port")
2441 LANdriverIOPortsAndRanges2      = uint16("lan_drv_io_ports_and_ranges_2", "Number of I/O Ports")
2442 LANdriverIOPortsAndRanges3      = uint16("lan_drv_io_ports_and_ranges_3", "Secondary Base I/O Port")
2443 LANdriverIOPortsAndRanges4      = uint16("lan_drv_io_ports_and_ranges_4", "Number of I/O Ports")
2444 LANdriverIOReserved             = bytes("lan_drv_io_reserved", "LAN Driver IO Reserved", 14)
2445 LANdriverLineSpeed              = uint16("lan_drv_line_speed", "LAN Driver Line Speed")
2446 LANdriverLink                   = uint32("lan_drv_link", "LAN Driver Link")
2447 LANdriverLogicalName            = bytes("lan_drv_log_name", "LAN Driver Logical Name", 18)
2448 LANdriverMajorVersion           = uint8("lan_drv_major_ver", "LAN Driver Major Version")
2449 LANdriverMaximumSize            = uint32("lan_drv_max_size", "LAN Driver Maximum Size")
2450 LANdriverMaxRecvSize            = uint32("lan_drv_max_rcv_size", "LAN Driver Maximum Receive Size")
2451 LANdriverMediaID                = uint16("lan_drv_media_id", "LAN Driver Media ID")
2452 LANdriverMediaType              = fw_string("lan_drv_media_type", "LAN Driver Media Type", 40)
2453 LANdriverMemoryDecode0          = uint32("lan_drv_mem_decode_0", "LAN Driver Memory Decode 0")
2454 LANdriverMemoryDecode1          = uint32("lan_drv_mem_decode_1", "LAN Driver Memory Decode 1")
2455 LANdriverMemoryLength0          = uint16("lan_drv_mem_length_0", "LAN Driver Memory Length 0")
2456 LANdriverMemoryLength1          = uint16("lan_drv_mem_length_1", "LAN Driver Memory Length 1")
2457 LANdriverMinorVersion           = uint8("lan_drv_minor_ver", "LAN Driver Minor Version")
2458 LANdriverModeFlags              = val_string8("lan_dvr_mode_flags", "LAN Driver Mode Flags", [
2459         [0x80, "Canonical Address" ],
2460         [0x81, "Canonical Address" ],
2461         [0x82, "Canonical Address" ],
2462         [0x83, "Canonical Address" ],
2463         [0x84, "Canonical Address" ],
2464         [0x85, "Canonical Address" ],
2465         [0x86, "Canonical Address" ],
2466         [0x87, "Canonical Address" ],
2467         [0x88, "Canonical Address" ],
2468         [0x89, "Canonical Address" ],
2469         [0x8a, "Canonical Address" ],
2470         [0x8b, "Canonical Address" ],
2471         [0x8c, "Canonical Address" ],
2472         [0x8d, "Canonical Address" ],
2473         [0x8e, "Canonical Address" ],
2474         [0x8f, "Canonical Address" ],
2475         [0x90, "Canonical Address" ],
2476         [0x91, "Canonical Address" ],
2477         [0x92, "Canonical Address" ],
2478         [0x93, "Canonical Address" ],
2479         [0x94, "Canonical Address" ],
2480         [0x95, "Canonical Address" ],
2481         [0x96, "Canonical Address" ],
2482         [0x97, "Canonical Address" ],
2483         [0x98, "Canonical Address" ],
2484         [0x99, "Canonical Address" ],
2485         [0x9a, "Canonical Address" ],
2486         [0x9b, "Canonical Address" ],
2487         [0x9c, "Canonical Address" ],
2488         [0x9d, "Canonical Address" ],
2489         [0x9e, "Canonical Address" ],
2490         [0x9f, "Canonical Address" ],
2491         [0xa0, "Canonical Address" ],
2492         [0xa1, "Canonical Address" ],
2493         [0xa2, "Canonical Address" ],
2494         [0xa3, "Canonical Address" ],
2495         [0xa4, "Canonical Address" ],
2496         [0xa5, "Canonical Address" ],
2497         [0xa6, "Canonical Address" ],
2498         [0xa7, "Canonical Address" ],
2499         [0xa8, "Canonical Address" ],
2500         [0xa9, "Canonical Address" ],
2501         [0xaa, "Canonical Address" ],
2502         [0xab, "Canonical Address" ],
2503         [0xac, "Canonical Address" ],
2504         [0xad, "Canonical Address" ],
2505         [0xae, "Canonical Address" ],
2506         [0xaf, "Canonical Address" ],
2507         [0xb0, "Canonical Address" ],
2508         [0xb1, "Canonical Address" ],
2509         [0xb2, "Canonical Address" ],
2510         [0xb3, "Canonical Address" ],
2511         [0xb4, "Canonical Address" ],
2512         [0xb5, "Canonical Address" ],
2513         [0xb6, "Canonical Address" ],
2514         [0xb7, "Canonical Address" ],
2515         [0xb8, "Canonical Address" ],
2516         [0xb9, "Canonical Address" ],
2517         [0xba, "Canonical Address" ],
2518         [0xbb, "Canonical Address" ],
2519         [0xbc, "Canonical Address" ],
2520         [0xbd, "Canonical Address" ],
2521         [0xbe, "Canonical Address" ],
2522         [0xbf, "Canonical Address" ],
2523         [0xc0, "Non-Canonical Address" ],
2524         [0xc1, "Non-Canonical Address" ],
2525         [0xc2, "Non-Canonical Address" ],
2526         [0xc3, "Non-Canonical Address" ],
2527         [0xc4, "Non-Canonical Address" ],
2528         [0xc5, "Non-Canonical Address" ],
2529         [0xc6, "Non-Canonical Address" ],
2530         [0xc7, "Non-Canonical Address" ],
2531         [0xc8, "Non-Canonical Address" ],
2532         [0xc9, "Non-Canonical Address" ],
2533         [0xca, "Non-Canonical Address" ],
2534         [0xcb, "Non-Canonical Address" ],
2535         [0xcc, "Non-Canonical Address" ],
2536         [0xcd, "Non-Canonical Address" ],
2537         [0xce, "Non-Canonical Address" ],
2538         [0xcf, "Non-Canonical Address" ],
2539         [0xd0, "Non-Canonical Address" ],
2540         [0xd1, "Non-Canonical Address" ],
2541         [0xd2, "Non-Canonical Address" ],
2542         [0xd3, "Non-Canonical Address" ],
2543         [0xd4, "Non-Canonical Address" ],
2544         [0xd5, "Non-Canonical Address" ],
2545         [0xd6, "Non-Canonical Address" ],
2546         [0xd7, "Non-Canonical Address" ],
2547         [0xd8, "Non-Canonical Address" ],
2548         [0xd9, "Non-Canonical Address" ],
2549         [0xda, "Non-Canonical Address" ],
2550         [0xdb, "Non-Canonical Address" ],
2551         [0xdc, "Non-Canonical Address" ],
2552         [0xdd, "Non-Canonical Address" ],
2553         [0xde, "Non-Canonical Address" ],
2554         [0xdf, "Non-Canonical Address" ],
2555         [0xe0, "Non-Canonical Address" ],
2556         [0xe1, "Non-Canonical Address" ],
2557         [0xe2, "Non-Canonical Address" ],
2558         [0xe3, "Non-Canonical Address" ],
2559         [0xe4, "Non-Canonical Address" ],
2560         [0xe5, "Non-Canonical Address" ],
2561         [0xe6, "Non-Canonical Address" ],
2562         [0xe7, "Non-Canonical Address" ],
2563         [0xe8, "Non-Canonical Address" ],
2564         [0xe9, "Non-Canonical Address" ],
2565         [0xea, "Non-Canonical Address" ],
2566         [0xeb, "Non-Canonical Address" ],
2567         [0xec, "Non-Canonical Address" ],
2568         [0xed, "Non-Canonical Address" ],
2569         [0xee, "Non-Canonical Address" ],
2570         [0xef, "Non-Canonical Address" ],
2571         [0xf0, "Non-Canonical Address" ],
2572         [0xf1, "Non-Canonical Address" ],
2573         [0xf2, "Non-Canonical Address" ],
2574         [0xf3, "Non-Canonical Address" ],
2575         [0xf4, "Non-Canonical Address" ],
2576         [0xf5, "Non-Canonical Address" ],
2577         [0xf6, "Non-Canonical Address" ],
2578         [0xf7, "Non-Canonical Address" ],
2579         [0xf8, "Non-Canonical Address" ],
2580         [0xf9, "Non-Canonical Address" ],
2581         [0xfa, "Non-Canonical Address" ],
2582         [0xfb, "Non-Canonical Address" ],
2583         [0xfc, "Non-Canonical Address" ],
2584         [0xfd, "Non-Canonical Address" ],
2585         [0xfe, "Non-Canonical Address" ],
2586         [0xff, "Non-Canonical Address" ],
2587 ])
2588 LANDriverNumber                 = uint8("lan_driver_number", "LAN Driver Number")
2589 LANdriverNodeAddress            = bytes("lan_dvr_node_addr", "LAN Driver Node Address", 6)
2590 LANdriverRecvSize               = uint32("lan_drv_rcv_size", "LAN Driver Receive Size")
2591 LANdriverReserved               = uint16("lan_drv_reserved", "LAN Driver Reserved")
2592 LANdriverSendRetries            = uint16("lan_drv_snd_retries", "LAN Driver Send Retries")
2593 LANdriverSharingFlags           = uint16("lan_drv_share", "LAN Driver Sharing Flags")
2594 LANdriverShortName              = fw_string("lan_drv_short_name", "LAN Driver Short Name", 40)
2595 LANdriverSlot                   = uint16("lan_drv_slot", "LAN Driver Slot")
2596 LANdriverSrcRouting             = uint32("lan_drv_src_route", "LAN Driver Source Routing")
2597 LANdriverTransportTime          = uint16("lan_drv_trans_time", "LAN Driver Transport Time")
2598 LastAccessedDate                = uint16("last_access_date", "Last Accessed Date")
2599 LastAccessedDate.NWDate()
2600 LastAccessedTime                = uint16("last_access_time", "Last Accessed Time")
2601 LastAccessedTime.NWTime()
2602 LastGarbCollect                 = uint32("last_garbage_collect", "Last Garbage Collection")
2603 LastInstance                    = uint32("last_instance", "Last Instance")
2604 LastRecordSeen                  = uint16("last_record_seen", "Last Record Seen")
2605 LastSearchIndex                 = uint16("last_search_index", "Search Index")
2606 LastSeen                        = uint32("last_seen", "Last Seen")
2607 LastSequenceNumber              = uint16("last_sequence_number", "Sequence Number")
2608 Length64bit         = bytes("length_64bit", "64bit Length", 64)
2609 Level                           = uint8("level", "Level")
2610 LFSCounters                     = uint32("lfs_counters", "LFS Counters")
2611 LimboDataStreamsCount           = uint32("limbo_data_streams_count", "Limbo Data Streams Count")
2612 limbCount                       = uint32("limb_count", "Limb Count")
2613 limbFlags           = bitfield32("limb_flags", "Limb Flags", [
2614         bf_boolean32(0x00000002, "scan_entire_folder", "Wild Search"),
2615         bf_boolean32(0x00000004, "scan_files_only", "Scan Files Only"),
2616         bf_boolean32(0x00000008, "scan_folders_only", "Scan Folders Only"),
2617         bf_boolean32(0x00000010, "allow_system", "Allow System Files and Folders"),
2618         bf_boolean32(0x00000020, "allow_hidden", "Allow Hidden Files and Folders"),
2619 ])
2620
2621 limbScanNum                     = uint32("limb_scan_num", "Limb Scan Number")
2622 LimboUsed                       = uint32("limbo_used", "Limbo Used")
2623 LoadedNameSpaces                = uint8("loaded_name_spaces", "Loaded Name Spaces")
2624 LocalConnectionID               = uint32("local_connection_id", "Local Connection ID")
2625 LocalConnectionID.Display("BASE_HEX")
2626 LocalMaxPacketSize              = uint32("local_max_packet_size", "Local Max Packet Size")
2627 LocalMaxSendSize                = uint32("local_max_send_size", "Local Max Send Size")
2628 LocalMaxRecvSize                = uint32("local_max_recv_size", "Local Max Recv Size")
2629 LocalLoginInfoCcode             = uint8("local_login_info_ccode", "Local Login Info C Code")
2630 LocalTargetSocket               = uint32("local_target_socket", "Local Target Socket")
2631 LocalTargetSocket.Display("BASE_HEX")
2632 LockAreaLen                     = uint32("lock_area_len", "Lock Area Length")
2633 LockAreasStartOffset            = uint32("lock_areas_start_offset", "Lock Areas Start Offset")
2634 LockTimeout                     = uint16("lock_timeout", "Lock Timeout")
2635 Locked                          = val_string8("locked", "Locked Flag", [
2636         [ 0x00, "Not Locked Exclusively" ],
2637         [ 0x01, "Locked Exclusively" ],
2638 ])
2639 LockFlag                        = val_string8("lock_flag", "Lock Flag", [
2640         [ 0x00, "Not Locked, Log for Future Exclusive Lock" ],
2641         [ 0x01, "Exclusive Lock (Read/Write)" ],
2642         [ 0x02, "Log for Future Shared Lock"],
2643         [ 0x03, "Shareable Lock (Read-Only)" ],
2644         [ 0xfe, "Locked by a File Lock" ],
2645         [ 0xff, "Locked by Begin Share File Set" ],
2646 ])
2647 LockName                        = nstring8("lock_name", "Lock Name")
2648 LockStatus                      = val_string8("lock_status", "Lock Status", [
2649         [ 0x00, "Locked Exclusive" ],
2650         [ 0x01, "Locked Shareable" ],
2651         [ 0x02, "Logged" ],
2652         [ 0x06, "Lock is Held by TTS"],
2653 ])
2654 ConnLockStatus                  = val_string8("conn_lock_status", "Lock Status", [
2655         [ 0x00, "Normal (connection free to run)" ],
2656         [ 0x01, "Waiting on physical record lock" ],
2657         [ 0x02, "Waiting on a file lock" ],
2658         [ 0x03, "Waiting on a logical record lock"],
2659         [ 0x04, "Waiting on a semaphore"],
2660 ])
2661 LockType                        = val_string8("lock_type", "Lock Type", [
2662         [ 0x00, "Locked" ],
2663         [ 0x01, "Open Shareable" ],
2664         [ 0x02, "Logged" ],
2665         [ 0x03, "Open Normal" ],
2666         [ 0x06, "TTS Holding Lock" ],
2667         [ 0x07, "Transaction Flag Set on This File" ],
2668 ])
2669 LogFileFlagHigh                 = bitfield8("log_file_flag_high", "Log File Flag (byte 2)", [
2670         bf_boolean8(0x80, "log_flag_call_back", "Call Back Requested" ),
2671 ])
2672 LogFileFlagLow                  = bitfield8("log_file_flag_low", "Log File Flag", [
2673         bf_boolean8(0x01, "log_flag_lock_file", "Lock File Immediately" ),
2674 ])
2675 LoggedObjectID                  = uint32("logged_object_id", "Logged in Object ID")
2676 LoggedObjectID.Display("BASE_HEX")
2677 LoggedCount                     = uint16("logged_count", "Logged Count")
2678 LogicalConnectionNumber         = uint16("logical_connection_number", "Logical Connection Number", BE)
2679 LogicalDriveCount               = uint8("logical_drive_count", "Logical Drive Count")
2680 LogicalDriveNumber              = uint8("logical_drive_number", "Logical Drive Number")
2681 LogicalLockThreshold            = uint8("logical_lock_threshold", "LogicalLockThreshold")
2682 LogicalRecordName               = nstring8("logical_record_name", "Logical Record Name")
2683 LoginKey                        = bytes("login_key", "Login Key", 8)
2684 LogLockType                     = uint8("log_lock_type", "Log Lock Type")
2685 LogTtlRxPkts                    = uint32("log_ttl_rx_pkts", "Total Received Packets")
2686 LogTtlTxPkts                    = uint32("log_ttl_tx_pkts", "Total Transmitted Packets")
2687 LongName                        = fw_string("long_name", "Long Name", 32)
2688 LRUBlockWasDirty                = uint16("lru_block_was_dirty", "LRU Block Was Dirty")
2689
2690 MacAttr                         = bitfield16("mac_attr", "Attributes", [
2691         bf_boolean16(0x0001, "mac_attr_smode1", "Search Mode"),
2692         bf_boolean16(0x0002, "mac_attr_smode2", "Search Mode"),
2693         bf_boolean16(0x0004, "mac_attr_smode3", "Search Mode"),
2694         bf_boolean16(0x0010, "mac_attr_transaction", "Transaction"),
2695         bf_boolean16(0x0020, "mac_attr_index", "Index"),
2696         bf_boolean16(0x0040, "mac_attr_r_audit", "Read Audit"),
2697         bf_boolean16(0x0080, "mac_attr_w_audit", "Write Audit"),
2698         bf_boolean16(0x0100, "mac_attr_r_only", "Read Only"),
2699         bf_boolean16(0x0200, "mac_attr_hidden", "Hidden"),
2700         bf_boolean16(0x0400, "mac_attr_system", "System"),
2701         bf_boolean16(0x0800, "mac_attr_execute_only", "Execute Only"),
2702         bf_boolean16(0x1000, "mac_attr_subdirectory", "Subdirectory"),
2703         bf_boolean16(0x2000, "mac_attr_archive", "Archive"),
2704         bf_boolean16(0x8000, "mac_attr_share", "Shareable File"),
2705 ])
2706 MACBackupDate                   = uint16("mac_backup_date", "Mac Backup Date")
2707 MACBackupDate.NWDate()
2708 MACBackupTime                   = uint16("mac_backup_time", "Mac Backup Time")
2709 MACBackupTime.NWTime()
2710 MacBaseDirectoryID              = uint32("mac_base_directory_id", "Mac Base Directory ID", BE)
2711 MacBaseDirectoryID.Display("BASE_HEX")
2712 MACCreateDate                   = uint16("mac_create_date", "Mac Create Date")
2713 MACCreateDate.NWDate()
2714 MACCreateTime                   = uint16("mac_create_time", "Mac Create Time")
2715 MACCreateTime.NWTime()
2716 MacDestinationBaseID            = uint32("mac_destination_base_id", "Mac Destination Base ID")
2717 MacDestinationBaseID.Display("BASE_HEX")
2718 MacFinderInfo                   = bytes("mac_finder_info", "Mac Finder Information", 32)
2719 MacLastSeenID                   = uint32("mac_last_seen_id", "Mac Last Seen ID")
2720 MacLastSeenID.Display("BASE_HEX")
2721 MacSourceBaseID                 = uint32("mac_source_base_id", "Mac Source Base ID")
2722 MacSourceBaseID.Display("BASE_HEX")
2723 MajorVersion                    = uint32("major_version", "Major Version")
2724 MaxBytes                        = uint16("max_bytes", "Maximum Number of Bytes")
2725 MaxDataStreams                  = uint32("max_data_streams", "Maximum Data Streams")
2726 MaxDirDepth                     = uint32("max_dir_depth", "Maximum Directory Depth")
2727 MaximumSpace                    = uint16("max_space", "Maximum Space")
2728 MaxNumOfConn                    = uint32("max_num_of_conn", "Maximum Number of Connections")
2729 MaxNumOfLANS                    = uint32("max_num_of_lans", "Maximum Number Of LAN's")
2730 MaxNumOfMedias                  = uint32("max_num_of_medias", "Maximum Number Of Media's")
2731 MaxNumOfNmeSps                  = uint32("max_num_of_nme_sps", "Maximum Number Of Name Spaces")
2732 MaxNumOfSpoolPr                 = uint32("max_num_of_spool_pr", "Maximum Number Of Spool Printers")
2733 MaxNumOfStacks                  = uint32("max_num_of_stacks", "Maximum Number Of Stacks")
2734 MaxNumOfUsers                   = uint32("max_num_of_users", "Maximum Number Of Users")
2735 MaxNumOfVol                     = uint32("max_num_of_vol", "Maximum Number of Volumes")
2736 MaxReadDataReplySize    = uint16("max_read_data_reply_size", "Max Read Data Reply Size")
2737 MaxSpace                        = uint32("maxspace", "Maximum Space")
2738 MaxUsedDynamicSpace             = uint32("max_used_dynamic_space", "Max Used Dynamic Space")
2739 MediaList                       = uint32("media_list", "Media List")
2740 MediaListCount                  = uint32("media_list_count", "Media List Count")
2741 MediaName                       = nstring8("media_name", "Media Name")
2742 MediaNumber                     = uint32("media_number", "Media Number")
2743 MaxReplyObjectIDCount           = uint8("max_reply_obj_id_count", "Max Reply Object ID Count")
2744 MediaObjectType                 = val_string8("media_object_type", "Object Type", [
2745         [ 0x00, "Adapter" ],
2746         [ 0x01, "Changer" ],
2747         [ 0x02, "Removable Device" ],
2748         [ 0x03, "Device" ],
2749         [ 0x04, "Removable Media" ],
2750         [ 0x05, "Partition" ],
2751         [ 0x06, "Slot" ],
2752         [ 0x07, "Hotfix" ],
2753         [ 0x08, "Mirror" ],
2754         [ 0x09, "Parity" ],
2755         [ 0x0a, "Volume Segment" ],
2756         [ 0x0b, "Volume" ],
2757         [ 0x0c, "Clone" ],
2758         [ 0x0d, "Fixed Media" ],
2759         [ 0x0e, "Unknown" ],
2760 ])
2761 MemberName                      = nstring8("member_name", "Member Name")
2762 MemberType                      = val_string16("member_type", "Member Type", [
2763         [ 0x0000,       "Unknown" ],
2764         [ 0x0001,       "User" ],
2765         [ 0x0002,       "User group" ],
2766         [ 0x0003,       "Print queue" ],
2767         [ 0x0004,       "NetWare file server" ],
2768         [ 0x0005,       "Job server" ],
2769         [ 0x0006,       "Gateway" ],
2770         [ 0x0007,       "Print server" ],
2771         [ 0x0008,       "Archive queue" ],
2772         [ 0x0009,       "Archive server" ],
2773         [ 0x000a,       "Job queue" ],
2774         [ 0x000b,       "Administration" ],
2775         [ 0x0021,       "NAS SNA gateway" ],
2776         [ 0x0026,       "Remote bridge server" ],
2777         [ 0x0027,       "TCP/IP gateway" ],
2778 ])
2779 MessageLanguage                 = uint32("message_language", "NLM Language")
2780 MigratedFiles                   = uint32("migrated_files", "Migrated Files")
2781 MigratedSectors                 = uint32("migrated_sectors", "Migrated Sectors")
2782 MinorVersion                    = uint32("minor_version", "Minor Version")
2783 Minute                          = uint8("s_minute", "Minutes")
2784 MixedModePathFlag               = val_string8("mixed_mode_path_flag", "Mixed Mode Path Flag", [
2785     [ 0x00, "Mixed mode path handling is not available"],
2786     [ 0x01, "Mixed mode path handling is available"],
2787 ])
2788 ModifiedDate                    = uint16("modified_date", "Modified Date")
2789 ModifiedDate.NWDate()
2790 ModifiedTime                    = uint16("modified_time", "Modified Time")
2791 ModifiedTime.NWTime()
2792 ModifierID                      = uint32("modifier_id", "Modifier ID", BE)
2793 ModifierID.Display("BASE_HEX")
2794 ModifyDOSInfoMask               = bitfield16("modify_dos_info_mask", "Modify DOS Info Mask", [
2795         bf_boolean16(0x0002, "modify_dos_read", "Attributes"),
2796         bf_boolean16(0x0004, "modify_dos_write", "Creation Date"),
2797         bf_boolean16(0x0008, "modify_dos_open", "Creation Time"),
2798         bf_boolean16(0x0010, "modify_dos_create", "Creator ID"),
2799         bf_boolean16(0x0020, "modify_dos_delete", "Archive Date"),
2800         bf_boolean16(0x0040, "modify_dos_parent", "Archive Time"),
2801         bf_boolean16(0x0080, "modify_dos_search", "Archiver ID"),
2802         bf_boolean16(0x0100, "modify_dos_mdate", "Modify Date"),
2803         bf_boolean16(0x0200, "modify_dos_mtime", "Modify Time"),
2804         bf_boolean16(0x0400, "modify_dos_mid", "Modifier ID"),
2805         bf_boolean16(0x0800, "modify_dos_laccess", "Last Access"),
2806         bf_boolean16(0x1000, "modify_dos_inheritance", "Inheritance"),
2807         bf_boolean16(0x2000, "modify_dos_max_space", "Maximum Space"),
2808 ])
2809 Month                           = val_string8("s_month", "Month", [
2810         [ 0x01, "January"],
2811         [ 0x02, "February"],
2812         [ 0x03, "March"],
2813         [ 0x04, "April"],
2814         [ 0x05, "May"],
2815         [ 0x06, "June"],
2816         [ 0x07, "July"],
2817         [ 0x08, "August"],
2818         [ 0x09, "September"],
2819         [ 0x0a, "October"],
2820         [ 0x0b, "November"],
2821         [ 0x0c, "December"],
2822 ])
2823
2824 MoreFlag                        = val_string8("more_flag", "More Flag", [
2825         [ 0x00, "No More Segments/Entries Available" ],
2826         [ 0x01, "More Segments/Entries Available" ],
2827         [ 0xff, "More Segments/Entries Available" ],
2828 ])
2829 MoreProperties                  = val_string8("more_properties", "More Properties", [
2830         [ 0x00, "No More Properties Available" ],
2831         [ 0x01, "No More Properties Available" ],
2832         [ 0xff, "More Properties Available" ],
2833 ])
2834
2835 Name                            = nstring8("name", "Name")
2836 Name12                          = fw_string("name12", "Name", 12)
2837 NameLen                         = uint8("name_len", "Name Space Length")
2838 NameLength                      = uint8("name_length", "Name Length")
2839 NameList                        = uint32("name_list", "Name List")
2840 #
2841 # XXX - should this value be used to interpret the characters in names,
2842 # search patterns, and the like?
2843 #
2844 # We need to handle character sets better, e.g. translating strings
2845 # from whatever character set they are in the packet (DOS/Windows code
2846 # pages, ISO character sets, UNIX EUC character sets, UTF-8, UCS-2/Unicode,
2847 # Mac character sets, etc.) into UCS-4 or UTF-8 and storing them as such
2848 # in the protocol tree, and displaying them as best we can.
2849 #
2850 NameSpace                       = val_string8("name_space", "Name Space", [
2851         [ 0x00, "DOS" ],
2852         [ 0x01, "MAC" ],
2853         [ 0x02, "NFS" ],
2854         [ 0x03, "FTAM" ],
2855         [ 0x04, "OS/2, Long" ],
2856 ])
2857 NamesSpaceInfoMask                      = bitfield16("ns_info_mask", "Names Space Info Mask", [
2858         bf_boolean16(0x0001, "ns_info_mask_modify", "Modify Name"),
2859         bf_boolean16(0x0002, "ns_info_mask_fatt", "File Attributes"),
2860         bf_boolean16(0x0004, "ns_info_mask_cdate", "Creation Date"),
2861         bf_boolean16(0x0008, "ns_info_mask_ctime", "Creation Time"),
2862         bf_boolean16(0x0010, "ns_info_mask_owner", "Owner ID"),
2863         bf_boolean16(0x0020, "ns_info_mask_adate", "Archive Date"),
2864         bf_boolean16(0x0040, "ns_info_mask_atime", "Archive Time"),
2865         bf_boolean16(0x0080, "ns_info_mask_aid", "Archiver ID"),
2866         bf_boolean16(0x0100, "ns_info_mask_udate", "Update Date"),
2867         bf_boolean16(0x0200, "ns_info_mask_utime", "Update Time"),
2868         bf_boolean16(0x0400, "ns_info_mask_uid", "Update ID"),
2869         bf_boolean16(0x0800, "ns_info_mask_acc_date", "Access Date"),
2870         bf_boolean16(0x1000, "ns_info_mask_max_acc_mask", "Inheritance"),
2871         bf_boolean16(0x2000, "ns_info_mask_max_space", "Maximum Space"),
2872 ])
2873 NameSpaceName                   = nstring8("name_space_name", "Name Space Name")
2874 nameType                        = uint32("name_type", "nameType")
2875 NCPdataSize                     = uint32("ncp_data_size", "NCP Data Size")
2876 NCPEncodedStringsBits   = uint32("ncp_encoded_strings_bits", "NCP Encoded Strings Bits")
2877 NCPextensionMajorVersion        = uint8("ncp_extension_major_version", "NCP Extension Major Version")
2878 NCPextensionMinorVersion        = uint8("ncp_extension_minor_version", "NCP Extension Minor Version")
2879 NCPextensionName                = nstring8("ncp_extension_name", "NCP Extension Name")
2880 NCPextensionNumber              = uint32("ncp_extension_number", "NCP Extension Number")
2881 NCPextensionNumber.Display("BASE_HEX")
2882 NCPExtensionNumbers             = uint32("ncp_extension_numbers", "NCP Extension Numbers")
2883 NCPextensionRevisionNumber      = uint8("ncp_extension_revision_number", "NCP Extension Revision Number")
2884 NCPPeakStaInUse                 = uint32("ncp_peak_sta_in_use", "Peak Number of Connections since Server was brought up")
2885 NCPStaInUseCnt                  = uint32("ncp_sta_in_use", "Number of Workstations Connected to Server")
2886 NDSRequestFlags                 = bitfield16("nds_request_flags", "NDS Request Flags", [
2887         bf_boolean16(0x0001, "nds_request_flags_output", "Output Fields"),
2888         bf_boolean16(0x0002, "nds_request_flags_no_such_entry", "No Such Entry"),
2889         bf_boolean16(0x0004, "nds_request_flags_local_entry", "Local Entry"),
2890         bf_boolean16(0x0008, "nds_request_flags_type_ref", "Type Referral"),
2891         bf_boolean16(0x0010, "nds_request_flags_alias_ref", "Alias Referral"),
2892         bf_boolean16(0x0020, "nds_request_flags_req_cnt", "Request Count"),
2893         bf_boolean16(0x0040, "nds_request_flags_req_data_size", "Request Data Size"),
2894         bf_boolean16(0x0080, "nds_request_flags_reply_data_size", "Reply Data Size"),
2895         bf_boolean16(0x0100, "nds_request_flags_trans_ref", "Transport Referral"),
2896         bf_boolean16(0x0200, "nds_request_flags_trans_ref2", "Transport Referral"),
2897         bf_boolean16(0x0400, "nds_request_flags_up_ref", "Up Referral"),
2898         bf_boolean16(0x0800, "nds_request_flags_dn_ref", "Down Referral"),
2899 ])
2900 NDSStatus                       = uint32("nds_status", "NDS Status")
2901 NetBIOSBroadcastWasPropogated   = uint32("netbios_broadcast_was_propogated", "NetBIOS Broadcast Was Propogated")
2902 NetIDNumber                     = uint32("net_id_number", "Net ID Number")
2903 NetIDNumber.Display("BASE_HEX")
2904 NetAddress                      = nbytes32("address", "Address")
2905 NetStatus                       = uint16("net_status", "Network Status")
2906 NetWareAccessHandle             = bytes("netware_access_handle", "NetWare Access Handle", 6)
2907 NetworkAddress                  = uint32("network_address", "Network Address")
2908 NetworkAddress.Display("BASE_HEX")
2909 NetworkNodeAddress              = bytes("network_node_address", "Network Node Address", 6)
2910 NetworkNumber                   = uint32("network_number", "Network Number")
2911 NetworkNumber.Display("BASE_HEX")
2912 #
2913 # XXX - this should have the "ipx_socket_vals" value_string table
2914 # from "packet-ipx.c".
2915 #
2916 NetworkSocket                   = uint16("network_socket", "Network Socket")
2917 NetworkSocket.Display("BASE_HEX")
2918 NewAccessRights                 = bitfield16("new_access_rights_mask", "New Access Rights", [
2919         bf_boolean16(0x0001, "new_access_rights_read", "Read"),
2920         bf_boolean16(0x0002, "new_access_rights_write", "Write"),
2921         bf_boolean16(0x0004, "new_access_rights_open", "Open"),
2922         bf_boolean16(0x0008, "new_access_rights_create", "Create"),
2923         bf_boolean16(0x0010, "new_access_rights_delete", "Delete"),
2924         bf_boolean16(0x0020, "new_access_rights_parental", "Parental"),
2925         bf_boolean16(0x0040, "new_access_rights_search", "Search"),
2926         bf_boolean16(0x0080, "new_access_rights_modify", "Modify"),
2927         bf_boolean16(0x0100, "new_access_rights_supervisor", "Supervisor"),
2928 ])
2929 NewDirectoryID                  = uint32("new_directory_id", "New Directory ID", BE)
2930 NewDirectoryID.Display("BASE_HEX")
2931 NewEAHandle                     = uint32("new_ea_handle", "New EA Handle")
2932 NewEAHandle.Display("BASE_HEX")
2933 NewFileName                     = fw_string("new_file_name", "New File Name", 14)
2934 NewFileNameLen                  = nstring8("new_file_name_len", "New File Name")
2935 NewFileSize                     = uint32("new_file_size", "New File Size")
2936 NewPassword                     = nstring8("new_password", "New Password")
2937 NewPath                         = nstring8("new_path", "New Path")
2938 NewPosition                     = uint8("new_position", "New Position")
2939 NewObjectName                   = nstring8("new_object_name", "New Object Name")
2940 NextCntBlock                    = uint32("next_cnt_block", "Next Count Block")
2941 NextHugeStateInfo               = bytes("next_huge_state_info", "Next Huge State Info", 16)
2942 nextLimbScanNum                 = uint32("next_limb_scan_num", "Next Limb Scan Number")
2943 NextObjectID                    = uint32("next_object_id", "Next Object ID", BE)
2944 NextObjectID.Display("BASE_HEX")
2945 NextRecord                      = uint32("next_record", "Next Record")
2946 NextRequestRecord               = uint16("next_request_record", "Next Request Record")
2947 NextSearchIndex                 = uint16("next_search_index", "Next Search Index")
2948 NextSearchNumber                = uint16("next_search_number", "Next Search Number")
2949 NextSearchNum                   = uint32("nxt_search_num", "Next Search Number")
2950 nextStartingNumber              = uint32("next_starting_number", "Next Starting Number")
2951 NextTrusteeEntry                = uint32("next_trustee_entry", "Next Trustee Entry")
2952 NextVolumeNumber                = uint32("next_volume_number", "Next Volume Number")
2953 NLMBuffer                       = nstring8("nlm_buffer", "Buffer")
2954 NLMcount                        = uint32("nlm_count", "NLM Count")
2955 NLMFlags                        = bitfield8("nlm_flags", "Flags", [
2956         bf_boolean8(0x01, "nlm_flags_reentrant", "ReEntrant"),
2957         bf_boolean8(0x02, "nlm_flags_multiple", "Can Load Multiple Times"),
2958         bf_boolean8(0x04, "nlm_flags_synchronize", "Synchronize Start"),
2959         bf_boolean8(0x08, "nlm_flags_pseudo", "PseudoPreemption"),
2960 ])
2961 NLMLoadOptions                  = uint32("nlm_load_options", "NLM Load Options")
2962 NLMName                         = stringz("nlm_name_stringz", "NLM Name")
2963 NLMNumber                       = uint32("nlm_number", "NLM Number")
2964 NLMNumbers                      = uint32("nlm_numbers", "NLM Numbers")
2965 NLMsInList                      = uint32("nlms_in_list", "NLM's in List")
2966 NLMStartNumber                  = uint32("nlm_start_num", "NLM Start Number")
2967 NLMType                         = val_string8("nlm_type", "NLM Type", [
2968         [ 0x00, "Generic NLM (.NLM)" ],
2969         [ 0x01, "LAN Driver (.LAN)" ],
2970         [ 0x02, "Disk Driver (.DSK)" ],
2971         [ 0x03, "Name Space Support Module (.NAM)" ],
2972         [ 0x04, "Utility or Support Program (.NLM)" ],
2973         [ 0x05, "Mirrored Server Link (.MSL)" ],
2974         [ 0x06, "OS NLM (.NLM)" ],
2975         [ 0x07, "Paged High OS NLM (.NLM)" ],
2976         [ 0x08, "Host Adapter Module (.HAM)" ],
2977         [ 0x09, "Custom Device Module (.CDM)" ],
2978         [ 0x0a, "File System Engine (.NLM)" ],
2979         [ 0x0b, "Real Mode NLM (.NLM)" ],
2980         [ 0x0c, "Hidden NLM (.NLM)" ],
2981         [ 0x15, "NICI Support (.NLM)" ],
2982         [ 0x16, "NICI Support (.NLM)" ],
2983         [ 0x17, "Cryptography (.NLM)" ],
2984         [ 0x18, "Encryption (.NLM)" ],
2985         [ 0x19, "NICI Support (.NLM)" ],
2986         [ 0x1c, "NICI Support (.NLM)" ],
2987 ])
2988 nodeFlags                       = uint32("node_flags", "Node Flags")
2989 nodeFlags.Display("BASE_HEX")
2990 NoMoreMemAvlCnt                 = uint32("no_more_mem_avail", "No More Memory Available Count")
2991 NonDedFlag                      = boolean8("non_ded_flag", "Non Dedicated Flag")
2992 NonFreeableAvailableSubAllocSectors = uint32("non_freeable_avail_sub_alloc_sectors", "Non Freeable Available Sub Alloc Sectors")
2993 NonFreeableLimboSectors         = uint32("non_freeable_limbo_sectors", "Non Freeable Limbo Sectors")
2994 NotUsableSubAllocSectors        = uint32("not_usable_sub_alloc_sectors", "Not Usable Sub Alloc Sectors")
2995 NotYetPurgeableBlocks           = uint32("not_yet_purgeable_blocks", "Not Yet Purgeable Blocks")
2996 NSInfoBitMask                   = uint32("ns_info_bit_mask", "Name Space Info Bit Mask")
2997 NSSOAllInFlags                  = bitfield32("nsso_all_in_flags", "SecretStore All Input Flags",[
2998         bf_boolean32(0x00000010, "nsso_all_unicode", "Unicode Data"),
2999         bf_boolean32(0x00000080, "nsso_set_tree", "Set Tree"),
3000         bf_boolean32(0x00000200, "nsso_destroy_ctx", "Destroy Context"),
3001 ])
3002 NSSOGetServiceInFlags           = bitfield32("nsso_get_svc_in_flags", "SecretStore Get Service Flags",[
3003         bf_boolean32(0x00000100, "nsso_get_ctx", "Get Context"),
3004 ])
3005 NSSOReadInFlags                 = bitfield32("nsso_read_in_flags", "SecretStore Read Flags",[
3006         bf_boolean32(0x00000001, "nsso_rw_enh_prot", "Read/Write Enhanced Protection"),
3007         bf_boolean32(0x00000008, "nsso_repair", "Repair SecretStore"),
3008 ])
3009 NSSOReadOrUnlockInFlags         = bitfield32("nsso_read_or_unlock_in_flags", "SecretStore Read or Unlock Flags",[
3010         bf_boolean32(0x00000004, "nsso_ep_master_pwd", "Master Password used instead of ENH Password"),
3011 ])
3012 NSSOUnlockInFlags               = bitfield32("nsso_unlock_in_flags", "SecretStore Unlock Flags",[
3013         bf_boolean32(0x00000004, "nsso_rmv_lock", "Remove Lock from Store"),
3014 ])
3015 NSSOWriteInFlags                = bitfield32("nsso_write_in_flags", "SecretStore Write Flags",[
3016         bf_boolean32(0x00000001, "nsso_enh_prot", "Enhanced Protection"),
3017         bf_boolean32(0x00000002, "nsso_create_id", "Create ID"),
3018         bf_boolean32(0x00000040, "nsso_ep_pwd_used", "Enhanced Protection Password Used"),
3019 ])
3020 NSSOContextOutFlags             = bitfield32("nsso_cts_out_flags", "Type of Context",[
3021         bf_boolean32(0x00000001, "nsso_ds_ctx", "DSAPI Context"),
3022         bf_boolean32(0x00000080, "nsso_ldap_ctx", "LDAP Context"),
3023         bf_boolean32(0x00000200, "nsso_dc_ctx", "Reserved"),
3024 ])
3025 NSSOGetServiceOutFlags          = bitfield32("nsso_get_svc_out_flags", "SecretStore Status Flags",[
3026         bf_boolean32(0x00400000, "nsso_mstr_pwd", "Master Password Present"),
3027 ])
3028 NSSOGetServiceReadOutFlags      = bitfield32("nsso_get_svc_read_out_flags", "SecretStore Status Flags",[
3029         bf_boolean32(0x00800000, "nsso_mp_disabled", "Master Password Disabled"),
3030 ])
3031 NSSOReadOutFlags                = bitfield32("nsso_read_out_flags", "SecretStore Read Flags",[
3032         bf_boolean32(0x00010000, "nsso_secret_locked", "Enhanced Protection Lock on Secret"),
3033         bf_boolean32(0x00020000, "nsso_secret_not_init", "Secret Not Yet Initialized"),
3034         bf_boolean32(0x00040000, "nsso_secret_marked", "Secret Marked for Enhanced Protection"),
3035         bf_boolean32(0x00080000, "nsso_secret_not_sync", "Secret Not Yet Synchronized in NDS"),
3036         bf_boolean32(0x00200000, "nsso_secret_enh_pwd", "Enhanced Protection Password on Secret"),
3037 ])
3038 NSSOReadOutStatFlags            = bitfield32("nsso_read_out_stat_flags", "SecretStore Read Status Flags",[
3039         bf_boolean32(0x00100000, "nsso_admin_mod", "Admin Modified Secret Last"),
3040 ])
3041 NSSOVerb                        = val_string8("nsso_verb", "SecretStore Verb", [
3042         [ 0x00, "Query Server" ],
3043         [ 0x01, "Read App Secrets" ],
3044         [ 0x02, "Write App Secrets" ],
3045         [ 0x03, "Add Secret ID" ],
3046         [ 0x04, "Remove Secret ID" ],
3047         [ 0x05, "Remove SecretStore" ],
3048         [ 0x06, "Enumerate SecretID's" ],
3049         [ 0x07, "Unlock Store" ],
3050         [ 0x08, "Set Master Password" ],
3051         [ 0x09, "Get Service Information" ],
3052 ])
3053 NSSpecificInfo                  = fw_string("ns_specific_info", "Name Space Specific Info", 512)
3054 NumberOfActiveTasks             = uint8("num_of_active_tasks", "Number of Active Tasks")
3055 NumberOfAllocs                  = uint32("num_of_allocs", "Number of Allocations")
3056 NumberOfCPUs                    = uint32("number_of_cpus", "Number of CPU's")
3057 NumberOfDataStreams             = uint16("number_of_data_streams", "Number of Data Streams")
3058 NumberOfDataStreamsLong     = uint32("number_of_data_streams_long", "Number of Data Streams")
3059 NumberOfDynamicMemoryAreas      = uint16("number_of_dynamic_memory_areas", "Number Of Dynamic Memory Areas")
3060 NumberOfEntries                 = uint8("number_of_entries", "Number of Entries")
3061 NumberOfLocks                   = uint8("number_of_locks", "Number of Locks")
3062 NumberOfMinutesToDelay          = uint32("number_of_minutes_to_delay", "Number of Minutes to Delay")
3063 NumberOfNCPExtensions           = uint32("number_of_ncp_extensions", "Number Of NCP Extensions")
3064 NumberOfNSLoaded                = uint16("number_of_ns_loaded", "Number Of Name Spaces Loaded")
3065 NumberOfProtocols               = uint8("number_of_protocols", "Number of Protocols")
3066 NumberOfRecords                 = uint16("number_of_records", "Number of Records")
3067 NumberOfReferencedPublics       = uint32("num_of_ref_publics", "Number of Referenced Public Symbols")
3068 NumberOfSemaphores              = uint16("number_of_semaphores", "Number Of Semaphores")
3069 NumberOfServiceProcesses        = uint8("number_of_service_processes", "Number Of Service Processes")
3070 NumberOfSetCategories           = uint32("number_of_set_categories", "Number Of Set Categories")
3071 NumberOfSMs                     = uint32("number_of_sms", "Number Of Storage Medias")
3072 NumberOfStations                = uint8("number_of_stations", "Number of Stations")
3073 NumBytes                        = uint16("num_bytes", "Number of Bytes")
3074 NumOfCCinPkt                    = uint32("num_of_cc_in_pkt", "Number of Custom Counters in Packet")
3075 NumOfChecks                     = uint32("num_of_checks", "Number of Checks")
3076 NumOfEntries                    = uint32("num_of_entries", "Number of Entries")
3077 NumOfFilesMigrated              = uint32("num_of_files_migrated", "Number Of Files Migrated")
3078 NumOfGarbageColl                = uint32("num_of_garb_coll", "Number of Garbage Collections")
3079 NumOfNCPReqs                    = uint32("num_of_ncp_reqs", "Number of NCP Requests since Server was brought up")
3080 NumOfSegments                   = uint32("num_of_segments", "Number of Segments")
3081
3082 ObjectCount                     = uint32("object_count", "Object Count")
3083 ObjectFlags                     = val_string8("object_flags", "Object Flags", [
3084         [ 0x00, "Dynamic object" ],
3085         [ 0x01, "Static object" ],
3086 ])
3087 ObjectHasProperties             = val_string8("object_has_properites", "Object Has Properties", [
3088         [ 0x00, "No properties" ],
3089         [ 0xff, "One or more properties" ],
3090 ])
3091 ObjectID                        = uint32("object_id", "Object ID", BE)
3092 ObjectID.Display('BASE_HEX')
3093 ObjectIDCount                   = uint16("object_id_count", "Object ID Count")
3094 ObjectIDInfo                    = uint32("object_id_info", "Object Information")
3095 ObjectInfoReturnCount           = uint32("object_info_rtn_count", "Object Information Count")
3096 ObjectName                      = nstring8("object_name", "Object Name")
3097 ObjectNameLen                   = fw_string("object_name_len", "Object Name", 48)
3098 ObjectNameStringz               = stringz("object_name_stringz", "Object Name")
3099 ObjectNumber                    = uint32("object_number", "Object Number")
3100 ObjectSecurity                  = val_string8("object_security", "Object Security", [
3101         [ 0x00, "Object Read (Anyone) / Object Write (Anyone)" ],
3102         [ 0x01, "Object Read (Logged in) / Object Write (Anyone)" ],
3103         [ 0x02, "Object Read (Logged in as Object) / Object Write (Anyone)" ],
3104         [ 0x03, "Object Read (Supervisor) / Object Write (Anyone)" ],
3105         [ 0x04, "Object Read (Operating System Only) / Object Write (Anyone)" ],
3106         [ 0x10, "Object Read (Anyone) / Object Write (Logged in)" ],
3107         [ 0x11, "Object Read (Logged in) / Object Write (Logged in)" ],
3108         [ 0x12, "Object Read (Logged in as Object) / Object Write (Logged in)" ],
3109         [ 0x13, "Object Read (Supervisor) / Object Write (Logged in)" ],
3110         [ 0x14, "Object Read (Operating System Only) / Object Write (Logged in)" ],
3111         [ 0x20, "Object Read (Anyone) / Object Write (Logged in as Object)" ],
3112         [ 0x21, "Object Read (Logged in) / Object Write (Logged in as Object)" ],
3113         [ 0x22, "Object Read (Logged in as Object) / Object Write (Logged in as Object)" ],
3114         [ 0x23, "Object Read (Supervisor) / Object Write (Logged in as Object)" ],
3115         [ 0x24, "Object Read (Operating System Only) / Object Write (Logged in as Object)" ],
3116         [ 0x30, "Object Read (Anyone) / Object Write (Supervisor)" ],
3117         [ 0x31, "Object Read (Logged in) / Object Write (Supervisor)" ],
3118         [ 0x32, "Object Read (Logged in as Object) / Object Write (Supervisor)" ],
3119         [ 0x33, "Object Read (Supervisor) / Object Write (Supervisor)" ],
3120         [ 0x34, "Object Read (Operating System Only) / Object Write (Supervisor)" ],
3121         [ 0x40, "Object Read (Anyone) / Object Write (Operating System Only)" ],
3122         [ 0x41, "Object Read (Logged in) / Object Write (Operating System Only)" ],
3123         [ 0x42, "Object Read (Logged in as Object) / Object Write (Operating System Only)" ],
3124         [ 0x43, "Object Read (Supervisor) / Object Write (Operating System Only)" ],
3125         [ 0x44, "Object Read (Operating System Only) / Object Write (Operating System Only)" ],
3126 ])
3127 #
3128 # XXX - should this use the "server_vals[]" value_string array from
3129 # "packet-ipx.c"?
3130 #
3131 # XXX - should this list be merged with that list?  There are some
3132 # oddities, e.g. this list has 0x03f5 for "Microsoft SQL Server", but
3133 # the list from "packet-ipx.c" has 0xf503 for that - is that just
3134 # byte-order confusion?
3135 #
3136 ObjectType                      = val_string16("object_type", "Object Type", [
3137         [ 0x0000,       "Unknown" ],
3138         [ 0x0001,       "User" ],
3139         [ 0x0002,       "User group" ],
3140         [ 0x0003,       "Print queue" ],
3141         [ 0x0004,       "NetWare file server" ],
3142         [ 0x0005,       "Job server" ],
3143         [ 0x0006,       "Gateway" ],
3144         [ 0x0007,       "Print server" ],
3145         [ 0x0008,       "Archive queue" ],
3146         [ 0x0009,       "Archive server" ],
3147         [ 0x000a,       "Job queue" ],
3148         [ 0x000b,       "Administration" ],
3149         [ 0x0021,       "NAS SNA gateway" ],
3150         [ 0x0026,       "Remote bridge server" ],
3151         [ 0x0027,       "TCP/IP gateway" ],
3152         [ 0x0047,       "Novell Print Server" ],
3153         [ 0x004b,       "Btrieve Server" ],
3154         [ 0x004c,       "NetWare SQL Server" ],
3155         [ 0x0064,       "ARCserve" ],
3156         [ 0x0066,       "ARCserve 3.0" ],
3157         [ 0x0076,       "NetWare SQL" ],
3158         [ 0x00a0,       "Gupta SQL Base Server" ],
3159         [ 0x00a1,       "Powerchute" ],
3160         [ 0x0107,       "NetWare Remote Console" ],
3161         [ 0x01cb,       "Shiva NetModem/E" ],
3162         [ 0x01cc,       "Shiva LanRover/E" ],
3163         [ 0x01cd,       "Shiva LanRover/T" ],
3164         [ 0x01d8,       "Castelle FAXPress Server" ],
3165         [ 0x01da,       "Castelle Print Server" ],
3166         [ 0x01dc,       "Castelle Fax Server" ],
3167         [ 0x0200,       "Novell SQL Server" ],
3168         [ 0x023a,       "NetWare Lanalyzer Agent" ],
3169         [ 0x023c,       "DOS Target Service Agent" ],
3170         [ 0x023f,       "NetWare Server Target Service Agent" ],
3171         [ 0x024f,       "Appletalk Remote Access Service" ],
3172         [ 0x0263,       "NetWare Management Agent" ],
3173         [ 0x0264,       "Global MHS" ],
3174         [ 0x0265,       "SNMP" ],
3175         [ 0x026a,       "NetWare Management/NMS Console" ],
3176         [ 0x026b,       "NetWare Time Synchronization" ],
3177         [ 0x0273,       "Nest Device" ],
3178         [ 0x0274,       "GroupWise Message Multiple Servers" ],
3179         [ 0x0278,       "NDS Replica Server" ],
3180         [ 0x0282,       "NDPS Service Registry Service" ],
3181         [ 0x028a,       "MPR/IPX Address Mapping Gateway" ],
3182         [ 0x028b,       "ManageWise" ],
3183         [ 0x0293,       "NetWare 6" ],
3184         [ 0x030c,       "HP JetDirect" ],
3185         [ 0x0328,       "Watcom SQL Server" ],
3186         [ 0x0355,       "Backup Exec" ],
3187         [ 0x039b,       "Lotus Notes" ],
3188         [ 0x03e1,       "Univel Server" ],
3189         [ 0x03f5,       "Microsoft SQL Server" ],
3190         [ 0x055e,       "Lexmark Print Server" ],
3191         [ 0x0640,       "Microsoft Gateway Services for NetWare" ],
3192         [ 0x064e,       "Microsoft Internet Information Server" ],
3193         [ 0x077b,       "Advantage Database Server" ],
3194         [ 0x07a7,       "Backup Exec Job Queue" ],
3195         [ 0x07a8,       "Backup Exec Job Manager" ],
3196         [ 0x07a9,       "Backup Exec Job Service" ],
3197         [ 0x5555,       "Site Lock" ],
3198         [ 0x8202,       "NDPS Broker" ],
3199 ])
3200 OCRetFlags                      = val_string8("o_c_ret_flags", "Open Create Return Flags", [
3201         [ 0x00, "No CallBack has been registered (No Op-Lock)" ],
3202         [ 0x01, "Request has been registered for CallBack (Op-Lock)" ],
3203 ])
3204 OESServer                       = val_string8("oes_server", "Type of Novell Server", [
3205         [ 0x00, "NetWare" ],
3206         [ 0x01, "OES" ],
3207 ])
3208
3209 OESLinuxOrNetWare                       = val_string8("oeslinux_or_netware", "Kernel Type", [
3210         [ 0x00, "NetWare" ],
3211         [ 0x01, "Linux" ],
3212 ])
3213
3214 OldestDeletedFileAgeInTicks     = uint32("oldest_deleted_file_age_in_ticks", "Oldest Deleted File Age in Ticks")
3215 OldFileName                     = bytes("old_file_name", "Old File Name", 15)
3216 OldFileSize                     = uint32("old_file_size", "Old File Size")
3217 OpenCount                       = uint16("open_count", "Open Count")
3218 OpenCreateAction                = bitfield8("open_create_action", "Open Create Action", [
3219         bf_boolean8(0x01, "open_create_action_opened", "Opened"),
3220         bf_boolean8(0x02, "open_create_action_created", "Created"),
3221         bf_boolean8(0x04, "open_create_action_replaced", "Replaced"),
3222         bf_boolean8(0x08, "open_create_action_compressed", "Compressed"),
3223         bf_boolean8(0x80, "open_create_action_read_only", "Read Only"),
3224 ])
3225 OpenCreateMode                  = bitfield8("open_create_mode", "Open Create Mode", [
3226         bf_boolean8(0x01, "open_create_mode_open", "Open existing file (file must exist)"),
3227         bf_boolean8(0x02, "open_create_mode_replace", "Replace existing file"),
3228         bf_boolean8(0x08, "open_create_mode_create", "Create new file or subdirectory (file or subdirectory cannot exist)"),
3229     bf_boolean8(0x20, "open_create_mode_64bit", "Open 64-bit Access"),
3230     bf_boolean8(0x40, "open_create_mode_ro", "Open with Read Only Access"),
3231         bf_boolean8(0x80, "open_create_mode_oplock", "Open Callback (Op-Lock)"),
3232 ])
3233 OpenForReadCount                = uint16("open_for_read_count", "Open For Read Count")
3234 OpenForWriteCount               = uint16("open_for_write_count", "Open For Write Count")
3235 OpenRights                      = bitfield8("open_rights", "Open Rights", [
3236         bf_boolean8(0x01, "open_rights_read_only", "Read Only"),
3237         bf_boolean8(0x02, "open_rights_write_only", "Write Only"),
3238         bf_boolean8(0x04, "open_rights_deny_read", "Deny Read"),
3239         bf_boolean8(0x08, "open_rights_deny_write", "Deny Write"),
3240         bf_boolean8(0x10, "open_rights_compat", "Compatibility"),
3241         bf_boolean8(0x40, "open_rights_write_thru", "File Write Through"),
3242 ])
3243 OptionNumber                    = uint8("option_number", "Option Number")
3244 originalSize            = uint32("original_size", "Original Size")
3245 OSLanguageID                    = uint8("os_language_id", "OS Language ID")
3246 OSMajorVersion                  = uint8("os_major_version", "OS Major Version")
3247 OSMinorVersion                  = uint8("os_minor_version", "OS Minor Version")
3248 OSRevision                          = uint32("os_revision", "OS Revision")
3249 OtherFileForkSize               = uint32("other_file_fork_size", "Other File Fork Size")
3250 OtherFileForkFAT                = uint32("other_file_fork_fat", "Other File Fork FAT Entry")
3251 OutgoingPacketDiscardedNoTurboBuffer = uint16("outgoing_packet_discarded_no_turbo_buffer", "Outgoing Packet Discarded No Turbo Buffer")
3252
3253 PacketsDiscardedByHopCount      = uint16("packets_discarded_by_hop_count", "Packets Discarded By Hop Count")
3254 PacketsDiscardedUnknownNet      = uint16("packets_discarded_unknown_net", "Packets Discarded Unknown Net")
3255 PacketsFromInvalidConnection    = uint16("packets_from_invalid_connection", "Packets From Invalid Connection")
3256 PacketsReceivedDuringProcessing = uint16("packets_received_during_processing", "Packets Received During Processing")
3257 PacketsWithBadRequestType       = uint16("packets_with_bad_request_type", "Packets With Bad Request Type")
3258 PacketsWithBadSequenceNumber    = uint16("packets_with_bad_sequence_number", "Packets With Bad Sequence Number")
3259 PageTableOwnerFlag              = uint32("page_table_owner_flag", "Page Table Owner")
3260 ParentID                        = uint32("parent_id", "Parent ID")
3261 ParentID.Display("BASE_HEX")
3262 ParentBaseID                    = uint32("parent_base_id", "Parent Base ID")
3263 ParentBaseID.Display("BASE_HEX")
3264 ParentDirectoryBase             = uint32("parent_directory_base", "Parent Directory Base")
3265 ParentDOSDirectoryBase          = uint32("parent_dos_directory_base", "Parent DOS Directory Base")
3266 ParentObjectNumber              = uint32("parent_object_number", "Parent Object Number")
3267 ParentObjectNumber.Display("BASE_HEX")
3268 Password                        = nstring8("password", "Password")
3269 PathBase                        = uint8("path_base", "Path Base")
3270 PathComponentCount              = uint16("path_component_count", "Path Component Count")
3271 PathComponentSize               = uint16("path_component_size", "Path Component Size")
3272 PathCookieFlags                 = val_string16("path_cookie_flags", "Path Cookie Flags", [
3273         [ 0x0000, "Last component is Not a File Name" ],
3274         [ 0x0001, "Last component is a File Name" ],
3275 ])
3276 PathCount                       = uint8("path_count", "Path Count")
3277 Path                            = nstring8("path", "Path")
3278 Path16              = nstring16("path16", "Path")
3279 PathAndName                     = stringz("path_and_name", "Path and Name")
3280 PendingIOCommands               = uint16("pending_io_commands", "Pending IO Commands")
3281 PhysicalDiskNumber              = uint8("physical_disk_number", "Physical Disk Number")
3282 PhysicalDriveCount              = uint8("physical_drive_count", "Physical Drive Count")
3283 PhysicalLockThreshold           = uint8("physical_lock_threshold", "Physical Lock Threshold")
3284 PingVersion                     = uint16("ping_version", "Ping Version")
3285 PoolName            = stringz("pool_name", "Pool Name")
3286 PositiveAcknowledgesSent        = uint16("positive_acknowledges_sent", "Positive Acknowledges Sent")
3287 PreCompressedSectors            = uint32("pre_compressed_sectors", "Precompressed Sectors")
3288 PreviousRecord                  = uint32("previous_record", "Previous Record")
3289 PrimaryEntry                    = uint32("primary_entry", "Primary Entry")
3290 PrintFlags                      = bitfield8("print_flags", "Print Flags", [
3291         bf_boolean8(0x08, "print_flags_ff", "Suppress Form Feeds"),
3292     bf_boolean8(0x10, "print_flags_cr", "Create"),
3293         bf_boolean8(0x20, "print_flags_del_spool", "Delete Spool File after Printing"),
3294         bf_boolean8(0x40, "print_flags_exp_tabs", "Expand Tabs in the File"),
3295         bf_boolean8(0x80, "print_flags_banner", "Print Banner Page"),
3296 ])
3297 PrinterHalted                   = val_string8("printer_halted", "Printer Halted", [
3298         [ 0x00, "Printer is not Halted" ],
3299         [ 0xff, "Printer is Halted" ],
3300 ])
3301 PrinterOffLine                  = val_string8( "printer_offline", "Printer Off-Line", [
3302         [ 0x00, "Printer is On-Line" ],
3303         [ 0xff, "Printer is Off-Line" ],
3304 ])
3305 PrintServerVersion              = uint8("print_server_version", "Print Server Version")
3306 Priority                        = uint32("priority", "Priority")
3307 Privileges                      = uint32("privileges", "Login Privileges")
3308 ProcessorType                   = val_string8("processor_type", "Processor Type", [
3309         [ 0x00, "Motorola 68000" ],
3310         [ 0x01, "Intel 8088 or 8086" ],
3311         [ 0x02, "Intel 80286" ],
3312 ])
3313 ProDOSInfo                      = bytes("pro_dos_info", "Pro DOS Info", 6)
3314 ProductMajorVersion             = uint16("product_major_version", "Product Major Version")
3315 ProductMinorVersion             = uint16("product_minor_version", "Product Minor Version")
3316 ProductRevisionVersion          = uint8("product_revision_version", "Product Revision Version")
3317 projectedCompSize               = uint32("projected_comp_size", "Projected Compression Size")
3318 PropertyHasMoreSegments         = val_string8("property_has_more_segments",
3319         "Property Has More Segments", [
3320         [ 0x00, "Is last segment" ],
3321         [ 0xff, "More segments are available" ],
3322 ])
3323 PropertyName                    = nstring8("property_name", "Property Name")
3324 PropertyName16                  = fw_string("property_name_16", "Property Name", 16)
3325 PropertyData                    = bytes("property_data", "Property Data", 128)
3326 PropertySegment                 = uint8("property_segment", "Property Segment")
3327 PropertyType                    = val_string8("property_type", "Property Type", [
3328         [ 0x00, "Display Static property" ],
3329         [ 0x01, "Display Dynamic property" ],
3330         [ 0x02, "Set Static property" ],
3331         [ 0x03, "Set Dynamic property" ],
3332 ])
3333 PropertyValue                   = fw_string("property_value", "Property Value", 128)
3334 ProposedMaxSize                 = uint16("proposed_max_size", "Proposed Max Size")
3335 protocolFlags                   = uint32("protocol_flags", "Protocol Flags")
3336 protocolFlags.Display("BASE_HEX")
3337 PurgeableBlocks                 = uint32("purgeable_blocks", "Purgeable Blocks")
3338 PurgeCcode                      = uint32("purge_c_code", "Purge Completion Code")
3339 PurgeCount                      = uint32("purge_count", "Purge Count")
3340 PurgeFlags                      = val_string16("purge_flags", "Purge Flags", [
3341         [ 0x0000, "Do not Purge All" ],
3342         [ 0x0001, "Purge All" ],
3343     [ 0xffff, "Do not Purge All" ],
3344 ])
3345 PurgeList                       = uint32("purge_list", "Purge List")
3346 PhysicalDiskChannel             = uint8("physical_disk_channel", "Physical Disk Channel")
3347 PhysicalDriveType               = val_string8("physical_drive_type", "Physical Drive Type", [
3348         [ 0x01, "XT" ],
3349         [ 0x02, "AT" ],
3350         [ 0x03, "SCSI" ],
3351         [ 0x04, "Disk Coprocessor" ],
3352         [ 0x05, "PS/2 with MFM Controller" ],
3353         [ 0x06, "PS/2 with ESDI Controller" ],
3354         [ 0x07, "Convergent Technology SBIC" ],
3355 ])
3356 PhysicalReadErrors              = uint16("physical_read_errors", "Physical Read Errors")
3357 PhysicalReadRequests            = uint32("physical_read_requests", "Physical Read Requests")
3358 PhysicalWriteErrors             = uint16("physical_write_errors", "Physical Write Errors")
3359 PhysicalWriteRequests           = uint32("physical_write_requests", "Physical Write Requests")
3360 PrintToFileFlag                 = boolean8("print_to_file_flag", "Print to File Flag")
3361
3362 QueueID                         = uint32("queue_id", "Queue ID")
3363 QueueID.Display("BASE_HEX")
3364 QueueName                       = nstring8("queue_name", "Queue Name")
3365 QueueStartPosition              = uint32("queue_start_position", "Queue Start Position")
3366 QueueStatus                     = bitfield8("queue_status", "Queue Status", [
3367         bf_boolean8(0x01, "queue_status_new_jobs", "Operator does not want to add jobs to the queue"),
3368         bf_boolean8(0x02, "queue_status_pserver", "Operator does not want additional servers attaching"),
3369         bf_boolean8(0x04, "queue_status_svc_jobs", "Operator does not want servers to service jobs"),
3370 ])
3371 QueueType                       = uint16("queue_type", "Queue Type")
3372 QueueingVersion                 = uint8("qms_version", "QMS Version")
3373
3374 ReadBeyondWrite                 = uint16("read_beyond_write", "Read Beyond Write")
3375 RecordLockCount                 = uint16("rec_lock_count", "Record Lock Count")
3376 RecordStart                     = uint32("record_start", "Record Start")
3377 RecordEnd                       = uint32("record_end", "Record End")
3378 RecordInUseFlag                 = val_string16("record_in_use", "Record in Use", [
3379         [ 0x0000, "Record In Use" ],
3380         [ 0xffff, "Record Not In Use" ],
3381 ])
3382 RedirectedPrinter               = uint8( "redirected_printer", "Redirected Printer" )
3383 ReferenceCount                  = uint32("reference_count", "Reference Count")
3384 RelationsCount                  = uint16("relations_count", "Relations Count")
3385 ReMirrorCurrentOffset           = uint32("re_mirror_current_offset", "ReMirror Current Offset")
3386 ReMirrorDriveNumber             = uint8("re_mirror_drive_number", "ReMirror Drive Number")
3387 RemoteMaxPacketSize             = uint32("remote_max_packet_size", "Remote Max Packet Size")
3388 RemoteTargetID                  = uint32("remote_target_id", "Remote Target ID")
3389 RemoteTargetID.Display("BASE_HEX")
3390 RemovableFlag                   = uint16("removable_flag", "Removable Flag")
3391 RemoveOpenRights                = bitfield8("remove_open_rights", "Remove Open Rights", [
3392         bf_boolean8(0x01, "remove_open_rights_ro", "Read Only"),
3393         bf_boolean8(0x02, "remove_open_rights_wo", "Write Only"),
3394         bf_boolean8(0x04, "remove_open_rights_dr", "Deny Read"),
3395         bf_boolean8(0x08, "remove_open_rights_dw", "Deny Write"),
3396         bf_boolean8(0x10, "remove_open_rights_comp", "Compatibility"),
3397         bf_boolean8(0x40, "remove_open_rights_write_thru", "Write Through"),
3398 ])
3399 RenameFlag                      = bitfield8("rename_flag", "Rename Flag", [
3400         bf_boolean8(0x01, "rename_flag_ren", "Rename to Myself allows file to be renamed to its original name"),
3401         bf_boolean8(0x02, "rename_flag_comp", "Compatibility allows files that are marked read only to be opened with read/write access"),
3402         bf_boolean8(0x04, "rename_flag_no", "Name Only renames only the specified name space entry name"),
3403 ])
3404 RepliesCancelled                = uint16("replies_cancelled", "Replies Cancelled")
3405 ReplyBuffer                     = nstring8("reply_buffer", "Reply Buffer")
3406 ReplyBufferSize                 = uint32("reply_buffer_size", "Reply Buffer Size")
3407 ReplyQueueJobNumbers            = uint32("reply_queue_job_numbers", "Reply Queue Job Numbers")
3408 RequestBitMap                   = bitfield16("request_bit_map", "Request Bit Map", [
3409         bf_boolean16(0x0001, "request_bit_map_ret_afp_ent", "AFP Entry ID"),
3410         bf_boolean16(0x0002, "request_bit_map_ret_data_fork", "Data Fork Length"),
3411         bf_boolean16(0x0004, "request_bit_map_ret_res_fork", "Resource Fork Length"),
3412         bf_boolean16(0x0008, "request_bit_map_ret_num_off", "Number of Offspring"),
3413         bf_boolean16(0x0010, "request_bit_map_ret_owner", "Owner ID"),
3414         bf_boolean16(0x0020, "request_bit_map_ret_short", "Short Name"),
3415         bf_boolean16(0x0040, "request_bit_map_ret_acc_priv", "Access Privileges"),
3416         bf_boolean16(0x0100, "request_bit_map_ratt", "Return Attributes"),
3417         bf_boolean16(0x0200, "request_bit_map_ret_afp_parent", "AFP Parent Entry ID"),
3418         bf_boolean16(0x0400, "request_bit_map_ret_cr_date", "Creation Date"),
3419         bf_boolean16(0x0800, "request_bit_map_ret_acc_date", "Access Date"),
3420         bf_boolean16(0x1000, "request_bit_map_ret_mod_date", "Modify Date&Time"),
3421         bf_boolean16(0x2000, "request_bit_map_ret_bak_date", "Backup Date&Time"),
3422         bf_boolean16(0x4000, "request_bit_map_ret_finder", "Finder Info"),
3423         bf_boolean16(0x8000, "request_bit_map_ret_long_nm", "Long Name"),
3424 ])
3425 ResourceForkLen                 = uint32("resource_fork_len", "Resource Fork Len")
3426 RequestCode                     = val_string8("request_code", "Request Code", [
3427         [ 0x00, "Change Logged in to Temporary Authenticated" ],
3428         [ 0x01, "Change Temporary Authenticated to Logged in" ],
3429 ])
3430 RequestData                     = nstring8("request_data", "Request Data")
3431 RequestsReprocessed = uint16("requests_reprocessed", "Requests Reprocessed")
3432 Reserved                        = uint8( "reserved", "Reserved" )
3433 Reserved2                       = bytes("reserved2", "Reserved", 2)
3434 Reserved3                       = bytes("reserved3", "Reserved", 3)
3435 Reserved4                       = bytes("reserved4", "Reserved", 4)
3436 Reserved5                       = bytes("reserved5", "Reserved", 5)
3437 Reserved6           = bytes("reserved6", "Reserved", 6)
3438 Reserved8                       = bytes("reserved8", "Reserved", 8)
3439 Reserved10          = bytes("reserved10", "Reserved", 10)
3440 Reserved12                      = bytes("reserved12", "Reserved", 12)
3441 Reserved16                      = bytes("reserved16", "Reserved", 16)
3442 Reserved20                      = bytes("reserved20", "Reserved", 20)
3443 Reserved28                      = bytes("reserved28", "Reserved", 28)
3444 Reserved36                      = bytes("reserved36", "Reserved", 36)
3445 Reserved44                      = bytes("reserved44", "Reserved", 44)
3446 Reserved48                      = bytes("reserved48", "Reserved", 48)
3447 Reserved50                      = bytes("reserved50", "Reserved", 50)
3448 Reserved56                      = bytes("reserved56", "Reserved", 56)
3449 Reserved64                      = bytes("reserved64", "Reserved", 64)
3450 Reserved120                     = bytes("reserved120", "Reserved", 120)
3451 ReservedOrDirectoryNumber       = uint32("reserved_or_directory_number", "Reserved or Directory Number (see EAFlags)")
3452 ReservedOrDirectoryNumber.Display("BASE_HEX")
3453 ResourceCount                   = uint32("resource_count", "Resource Count")
3454 ResourceForkSize                = uint32("resource_fork_size", "Resource Fork Size")
3455 ResourceName                    = stringz("resource_name", "Resource Name")
3456 ResourceSignature               = fw_string("resource_sig", "Resource Signature", 4)
3457 RestoreTime                     = uint32("restore_time", "Restore Time")
3458 Restriction                     = uint32("restriction", "Disk Space Restriction")
3459 RestrictionsEnforced            = val_string8("restrictions_enforced", "Disk Restrictions Enforce Flag", [
3460         [ 0x00, "Enforced" ],
3461         [ 0xff, "Not Enforced" ],
3462 ])
3463 ReturnInfoCount                 = uint32("return_info_count", "Return Information Count")
3464 ReturnInfoMask                  = bitfield16("ret_info_mask", "Return Information", [
3465     bf_boolean16(0x0001, "ret_info_mask_fname", "Return File Name Information"),
3466         bf_boolean16(0x0002, "ret_info_mask_alloc", "Return Allocation Space Information"),
3467         bf_boolean16(0x0004, "ret_info_mask_attr", "Return Attribute Information"),
3468         bf_boolean16(0x0008, "ret_info_mask_size", "Return Size Information"),
3469         bf_boolean16(0x0010, "ret_info_mask_tspace", "Return Total Space Information"),
3470         bf_boolean16(0x0020, "ret_info_mask_eattr", "Return Extended Attributes Information"),
3471         bf_boolean16(0x0040, "ret_info_mask_arch", "Return Archive Information"),
3472         bf_boolean16(0x0080, "ret_info_mask_mod", "Return Modify Information"),
3473     bf_boolean16(0x0100, "ret_info_mask_create", "Return Creation Information"),
3474         bf_boolean16(0x0200, "ret_info_mask_ns", "Return Name Space Information"),
3475         bf_boolean16(0x0400, "ret_info_mask_dir", "Return Directory Information"),
3476         bf_boolean16(0x0800, "ret_info_mask_rights", "Return Rights Information"),
3477         bf_boolean16(0x1000, "ret_info_mask_id", "Return ID Information"),
3478         bf_boolean16(0x2000, "ret_info_mask_ns_attr", "Return Name Space Attributes Information"),
3479         bf_boolean16(0x4000, "ret_info_mask_actual", "Return Actual Information"),
3480         bf_boolean16(0x8000, "ret_info_mask_logical", "Return Logical Information"),
3481 ])
3482 ReturnedListCount               = uint32("returned_list_count", "Returned List Count")
3483 Revision                        = uint32("revision", "Revision")
3484 RevisionNumber                  = uint8("revision_number", "Revision")
3485 RevQueryFlag                    = val_string8("rev_query_flag", "Revoke Rights Query Flag", [
3486         [ 0x00, "Do not query the locks engine for access rights" ],
3487         [ 0x01, "Query the locks engine and return the access rights" ],
3488 ])
3489 RightsGrantMask                 = bitfield8("rights_grant_mask", "Grant Rights", [
3490         bf_boolean8(0x01, "rights_grant_mask_read", "Read"),
3491         bf_boolean8(0x02, "rights_grant_mask_write", "Write"),
3492         bf_boolean8(0x04, "rights_grant_mask_open", "Open"),
3493         bf_boolean8(0x08, "rights_grant_mask_create", "Create"),
3494         bf_boolean8(0x10, "rights_grant_mask_del", "Delete"),
3495         bf_boolean8(0x20, "rights_grant_mask_parent", "Parental"),
3496         bf_boolean8(0x40, "rights_grant_mask_search", "Search"),
3497         bf_boolean8(0x80, "rights_grant_mask_mod", "Modify"),
3498 ])
3499 RightsRevokeMask                = bitfield8("rights_revoke_mask", "Revoke Rights", [
3500         bf_boolean8(0x01, "rights_revoke_mask_read", "Read"),
3501         bf_boolean8(0x02, "rights_revoke_mask_write", "Write"),
3502         bf_boolean8(0x04, "rights_revoke_mask_open", "Open"),
3503         bf_boolean8(0x08, "rights_revoke_mask_create", "Create"),
3504         bf_boolean8(0x10, "rights_revoke_mask_del", "Delete"),
3505         bf_boolean8(0x20, "rights_revoke_mask_parent", "Parental"),
3506         bf_boolean8(0x40, "rights_revoke_mask_search", "Search"),
3507         bf_boolean8(0x80, "rights_revoke_mask_mod", "Modify"),
3508 ])
3509 RIPSocketNumber                 = uint16("rip_socket_num", "RIP Socket Number")
3510 RIPSocketNumber.Display("BASE_HEX")
3511 RouterDownFlag                  = boolean8("router_dn_flag", "Router Down Flag")
3512 RPCccode                        = val_string16("rpc_c_code", "RPC Completion Code", [
3513         [ 0x0000, "Successful" ],
3514 ])
3515 RTagNumber                      = uint32("r_tag_num", "Resource Tag Number")
3516 RTagNumber.Display("BASE_HEX")
3517 RpyNearestSrvFlag               = boolean8("rpy_nearest_srv_flag", "Reply to Nearest Server Flag")
3518
3519 SalvageableFileEntryNumber      = uint32("salvageable_file_entry_number", "Salvageable File Entry Number")
3520 SalvageableFileEntryNumber.Display("BASE_HEX")
3521 SAPSocketNumber                 = uint16("sap_socket_number", "SAP Socket Number")
3522 SAPSocketNumber.Display("BASE_HEX")
3523 ScanItems                       = uint32("scan_items", "Number of Items returned from Scan")
3524 SearchAttributes                = bitfield8("sattr", "Search Attributes", [
3525         bf_boolean8(0x01, "sattr_ronly", "Read-Only Files Allowed"),
3526         bf_boolean8(0x02, "sattr_hid", "Hidden Files Allowed"),
3527         bf_boolean8(0x04, "sattr_sys", "System Files Allowed"),
3528         bf_boolean8(0x08, "sattr_exonly", "Execute-Only Files Allowed"),
3529         bf_boolean8(0x10, "sattr_sub", "Subdirectories Only"),
3530         bf_boolean8(0x20, "sattr_archive", "Archive"),
3531         bf_boolean8(0x40, "sattr_execute_confirm", "Execute Confirm"),
3532         bf_boolean8(0x80, "sattr_shareable", "Shareable"),
3533 ])
3534 SearchAttributesLow             = bitfield16("search_att_low", "Search Attributes", [
3535         bf_boolean16(0x0001, "search_att_read_only", "Read-Only"),
3536         bf_boolean16(0x0002, "search_att_hidden", "Hidden Files Allowed"),
3537         bf_boolean16(0x0004, "search_att_system", "System"),
3538         bf_boolean16(0x0008, "search_att_execute_only", "Execute-Only"),
3539         bf_boolean16(0x0010, "search_att_sub", "Subdirectories Only"),
3540         bf_boolean16(0x0020, "search_att_archive", "Archive"),
3541         bf_boolean16(0x0040, "search_att_execute_confirm", "Execute Confirm"),
3542         bf_boolean16(0x0080, "search_att_shareable", "Shareable"),
3543         bf_boolean16(0x8000, "search_attr_all_files", "All Files and Directories"),
3544 ])
3545 SearchBitMap                            = bitfield8("search_bit_map", "Search Bit Map", [
3546         bf_boolean8(0x01, "search_bit_map_hidden", "Hidden"),
3547         bf_boolean8(0x02, "search_bit_map_sys", "System"),
3548         bf_boolean8(0x04, "search_bit_map_sub", "Subdirectory"),
3549         bf_boolean8(0x08, "search_bit_map_files", "Files"),
3550 ])
3551 SearchConnNumber                        = uint32("search_conn_number", "Search Connection Number")
3552 SearchInstance                          = uint32("search_instance", "Search Instance")
3553 SearchNumber                = uint32("search_number", "Search Number")
3554 SearchPattern                           = nstring8("search_pattern", "Search Pattern")
3555 SearchPattern16                         = nstring16("search_pattern_16", "Search Pattern")
3556 SearchSequence                          = bytes("search_sequence", "Search Sequence", 9)
3557 SearchSequenceWord          = uint16("search_sequence_word", "Search Sequence", BE)
3558 Second                                      = uint8("s_second", "Seconds")
3559 SecondsRelativeToTheYear2000            = uint32("sec_rel_to_y2k", "Seconds Relative to the Year 2000")
3560 SecretStoreVerb                         = val_string8("ss_verb", "Secret Store Verb",[
3561         [ 0x00, "Query Server" ],
3562         [ 0x01, "Read App Secrets" ],
3563         [ 0x02, "Write App Secrets" ],
3564         [ 0x03, "Add Secret ID" ],
3565         [ 0x04, "Remove Secret ID" ],
3566         [ 0x05, "Remove SecretStore" ],
3567         [ 0x06, "Enumerate Secret IDs" ],
3568         [ 0x07, "Unlock Store" ],
3569         [ 0x08, "Set Master Password" ],
3570         [ 0x09, "Get Service Information" ],
3571 ])
3572 SecurityEquivalentList                  = fw_string("security_equiv_list", "Security Equivalent List", 128)
3573 SecurityFlag                            = bitfield8("security_flag", "Security Flag", [
3574         bf_boolean8(0x01, "checksumming", "Checksumming"),
3575         bf_boolean8(0x02, "signature", "Signature"),
3576         bf_boolean8(0x04, "complete_signatures", "Complete Signatures"),
3577         bf_boolean8(0x08, "encryption", "Encryption"),
3578         bf_boolean8(0x80, "large_internet_packets", "Large Internet Packets (LIP) Disabled"),
3579 ])
3580 SecurityRestrictionVersion              = uint8("security_restriction_version", "Security Restriction Version")
3581 SectorsPerBlock                         = uint8("sectors_per_block", "Sectors Per Block")
3582 SectorsPerCluster                       = uint16("sectors_per_cluster", "Sectors Per Cluster" )
3583 SectorsPerClusterLong                   = uint32("sectors_per_cluster_long", "Sectors Per Cluster" )
3584 SectorsPerTrack                         = uint8("sectors_per_track", "Sectors Per Track")
3585 SectorSize                              = uint32("sector_size", "Sector Size")
3586 SemaphoreHandle                         = uint32("semaphore_handle", "Semaphore Handle")
3587 SemaphoreName                           = nstring8("semaphore_name", "Semaphore Name")
3588 SemaphoreOpenCount                      = uint8("semaphore_open_count", "Semaphore Open Count")
3589 SemaphoreShareCount                     = uint8("semaphore_share_count", "Semaphore Share Count")
3590 SemaphoreTimeOut                        = uint16("semaphore_time_out", "Semaphore Time Out")
3591 SemaphoreValue                          = uint16("semaphore_value", "Semaphore Value")
3592 SendStatus                              = val_string8("send_status", "Send Status", [
3593         [ 0x00, "Successful" ],
3594         [ 0x01, "Illegal Station Number" ],
3595         [ 0x02, "Client Not Logged In" ],
3596         [ 0x03, "Client Not Accepting Messages" ],
3597         [ 0x04, "Client Already has a Message" ],
3598         [ 0x96, "No Alloc Space for the Message" ],
3599         [ 0xfd, "Bad Station Number" ],
3600         [ 0xff, "Failure" ],
3601 ])
3602 SequenceByte                    = uint8("sequence_byte", "Sequence")
3603 SequenceNumber                  = uint32("sequence_number", "Sequence Number")
3604 SequenceNumber.Display("BASE_HEX")
3605 ServerAddress                   = bytes("server_address", "Server Address", 12)
3606 ServerAppNumber                 = uint16("server_app_num", "Server App Number")
3607 ServerID                        = uint32("server_id_number", "Server ID", BE )
3608 ServerID.Display("BASE_HEX")
3609 ServerInfoFlags                 = val_string16("server_info_flags", "Server Information Flags", [
3610         [ 0x0000, "This server is not a member of a Cluster" ],
3611         [ 0x0001, "This server is a member of a Cluster" ],
3612 ])
3613 serverListFlags                 = uint32("server_list_flags", "Server List Flags")
3614 ServerName                      = fw_string("server_name", "Server Name", 48)
3615 serverName50                    = fw_string("server_name50", "Server Name", 50)
3616 ServerNameLen                   = nstring8("server_name_len", "Server Name")
3617 ServerNameStringz               = stringz("server_name_stringz", "Server Name")
3618 ServerNetworkAddress            = bytes("server_network_address", "Server Network Address", 10)
3619 ServerNode                      = bytes("server_node", "Server Node", 6)
3620 ServerSerialNumber              = uint32("server_serial_number", "Server Serial Number")
3621 ServerStation                   = uint8("server_station", "Server Station")
3622 ServerStationLong               = uint32("server_station_long", "Server Station")
3623 ServerStationList               = uint8("server_station_list", "Server Station List")
3624 ServerStatusRecord              = fw_string("server_status_record", "Server Status Record", 64)
3625 ServerTaskNumber                = uint8("server_task_number", "Server Task Number")
3626 ServerTaskNumberLong            = uint32("server_task_number_long", "Server Task Number")
3627 ServerType                      = uint16("server_type", "Server Type")
3628 ServerType.Display("BASE_HEX")
3629 ServerUtilization               = uint32("server_utilization", "Server Utilization")
3630 ServerUtilizationPercentage     = uint8("server_utilization_percentage", "Server Utilization Percentage")
3631 ServiceType                     = val_string16("Service_type", "Service Type", [
3632         [ 0x0000,       "Unknown" ],
3633         [ 0x0001,       "User" ],
3634         [ 0x0002,       "User group" ],
3635         [ 0x0003,       "Print queue" ],
3636         [ 0x0004,       "NetWare file server" ],
3637         [ 0x0005,       "Job server" ],
3638         [ 0x0006,       "Gateway" ],
3639         [ 0x0007,       "Print server" ],
3640         [ 0x0008,       "Archive queue" ],
3641         [ 0x0009,       "Archive server" ],
3642         [ 0x000a,       "Job queue" ],
3643         [ 0x000b,       "Administration" ],
3644         [ 0x0021,       "NAS SNA gateway" ],
3645         [ 0x0026,       "Remote bridge server" ],
3646         [ 0x0027,       "TCP/IP gateway" ],
3647     [ 0xffff,   "All Types" ],
3648 ])
3649 SetCmdCategory                  = val_string8("set_cmd_category", "Set Command Category", [
3650         [ 0x00, "Communications" ],
3651         [ 0x01, "Memory" ],
3652         [ 0x02, "File Cache" ],
3653         [ 0x03, "Directory Cache" ],
3654         [ 0x04, "File System" ],
3655         [ 0x05, "Locks" ],
3656         [ 0x06, "Transaction Tracking" ],
3657         [ 0x07, "Disk" ],
3658         [ 0x08, "Time" ],
3659         [ 0x09, "NCP" ],
3660         [ 0x0a, "Miscellaneous" ],
3661         [ 0x0b, "Error Handling" ],
3662         [ 0x0c, "Directory Services" ],
3663         [ 0x0d, "MultiProcessor" ],
3664         [ 0x0e, "Service Location Protocol" ],
3665         [ 0x0f, "Licensing Services" ],
3666 ])
3667 SetCmdFlags                             = bitfield8("set_cmd_flags", "Set Command Flags", [
3668         bf_boolean8(0x01, "cmd_flags_startup_only", "Startup.ncf Only"),
3669         bf_boolean8(0x02, "cmd_flags_hidden", "Hidden"),
3670         bf_boolean8(0x04, "cmd_flags_advanced", "Advanced"),
3671         bf_boolean8(0x08, "cmd_flags_later", "Restart Server Required to Take Effect"),
3672         bf_boolean8(0x80, "cmd_flags_secure", "Console Secured"),
3673 ])
3674 SetCmdName                      = stringz("set_cmd_name", "Set Command Name")
3675 SetCmdType                      = val_string8("set_cmd_type", "Set Command Type", [
3676         [ 0x00, "Numeric Value" ],
3677         [ 0x01, "Boolean Value" ],
3678         [ 0x02, "Ticks Value" ],
3679         [ 0x04, "Time Value" ],
3680         [ 0x05, "String Value" ],
3681         [ 0x06, "Trigger Value" ],
3682         [ 0x07, "Numeric Value" ],
3683 ])
3684 SetCmdValueNum                  = uint32("set_cmd_value_num", "Set Command Value")
3685 SetCmdValueString               = stringz("set_cmd_value_string", "Set Command Value")
3686 SetMask                         = bitfield32("set_mask", "Set Mask", [
3687                 bf_boolean32(0x00000001, "ncp_encoded_strings", "NCP Encoded Strings"),
3688                 bf_boolean32(0x00000002, "connection_code_page", "Connection Code Page"),
3689 ])
3690 SetParmName                     = stringz("set_parm_name", "Set Parameter Name")
3691 SFTErrorTable                   = bytes("sft_error_table", "SFT Error Table", 60)
3692 SFTSupportLevel                 = val_string8("sft_support_level", "SFT Support Level", [
3693         [ 0x01, "Server Offers Hot Disk Error Fixing" ],
3694         [ 0x02, "Server Offers Disk Mirroring and Transaction Tracking" ],
3695         [ 0x03, "Server Offers Physical Server Mirroring" ],
3696 ])
3697 ShareableLockCount              = uint16("shareable_lock_count", "Shareable Lock Count")
3698 SharedMemoryAddresses           = bytes("shared_memory_addresses", "Shared Memory Addresses", 10)
3699 ShortName                       = fw_string("short_name", "Short Name", 12)
3700 ShortStkName                    = fw_string("short_stack_name", "Short Stack Name", 16)
3701 SiblingCount                    = uint32("sibling_count", "Sibling Count")
3702 SixtyFourBitOffsetsSupportedFlag = val_string8("64_bit_flag", "64 Bit Support", [
3703     [ 0x00, "No support for 64 bit offsets" ],
3704     [ 0x01, "64 bit offsets supported" ],
3705 ])
3706 SMIDs                           = uint32("smids", "Storage Media ID's")
3707 SoftwareDescription             = fw_string("software_description", "Software Description", 65)
3708 SoftwareDriverType              = uint8("software_driver_type", "Software Driver Type")
3709 SoftwareMajorVersionNumber      = uint8("software_major_version_number", "Software Major Version Number")
3710 SoftwareMinorVersionNumber      = uint8("software_minor_version_number", "Software Minor Version Number")
3711 SourceDirHandle                 = uint8("source_dir_handle", "Source Directory Handle")
3712 sourceOriginateTime             = bytes("source_originate_time", "Source Originate Time", 8)
3713 SourcePath                      = nstring8("source_path", "Source Path")
3714 SourcePathComponentCount        = uint8("source_component_count", "Source Path Component Count")
3715 sourceReturnTime                = bytes("source_return_time", "Source Return Time", 8)
3716 SpaceUsed                       = uint32("space_used", "Space Used")
3717 SpaceMigrated                   = uint32("space_migrated", "Space Migrated")
3718 SrcNameSpace                    = val_string8("src_name_space", "Source Name Space", [
3719         [ 0x00, "DOS Name Space" ],
3720         [ 0x01, "MAC Name Space" ],
3721         [ 0x02, "NFS Name Space" ],
3722         [ 0x04, "Long Name Space" ],
3723 ])
3724 SupModID                        = uint32("sup_mod_id", "Sup Mod ID")
3725 StackCount                      = uint32("stack_count", "Stack Count")
3726 StackFullNameStr                = nstring8("stack_full_name_str", "Stack Full Name")
3727 StackMajorVN                    = uint8("stack_major_vn", "Stack Major Version Number")
3728 StackMinorVN                    = uint8("stack_minor_vn", "Stack Minor Version Number")
3729 StackNumber                     = uint32("stack_number", "Stack Number")
3730 StartConnNumber                 = uint32("start_conn_num", "Starting Connection Number")
3731 StartingBlock                   = uint16("starting_block", "Starting Block")
3732 StartingNumber                  = uint32("starting_number", "Starting Number")
3733 StartingSearchNumber            = uint16("start_search_number", "Start Search Number")
3734 StartNumber                     = uint32("start_number", "Start Number")
3735 startNumberFlag                 = uint16("start_number_flag", "Start Number Flag")
3736 StartOffset64bit    = bytes("s_offset_64bit", "64bit Starting Offset", 64)
3737 StartVolumeNumber               = uint32("start_volume_number", "Starting Volume Number")
3738 StationList                     = uint32("station_list", "Station List")
3739 StationNumber                   = bytes("station_number", "Station Number", 3)
3740 StatMajorVersion                = uint8("stat_major_version", "Statistics Table Major Version")
3741 StatMinorVersion                = uint8("stat_minor_version", "Statistics Table Minor Version")
3742 Status                          = bitfield16("status", "Status", [
3743         bf_boolean16(0x0001, "user_info_logged_in", "Logged In"),
3744         bf_boolean16(0x0002, "user_info_being_abort", "Being Aborted"),
3745         bf_boolean16(0x0004, "user_info_audited", "Audited"),
3746         bf_boolean16(0x0008, "user_info_need_sec", "Needs Security Change"),
3747         bf_boolean16(0x0010, "user_info_mac_station", "MAC Station"),
3748         bf_boolean16(0x0020, "user_info_temp_authen", "Temporary Authenticated"),
3749         bf_boolean16(0x0040, "user_info_audit_conn", "Audit Connection Recorded"),
3750         bf_boolean16(0x0080, "user_info_dsaudit_conn", "DS Audit Connection Recorded"),
3751         bf_boolean16(0x0100, "user_info_logout", "Logout in Progress"),
3752         bf_boolean16(0x0200, "user_info_int_login", "Internal Login"),
3753         bf_boolean16(0x0400, "user_info_bindery", "Bindery Connection"),
3754 ])
3755 StatusFlagBits                  = bitfield32("status_flag_bits", "Status Flag", [
3756         bf_boolean32(0x00000001, "status_flag_bits_suballoc", "Sub Allocation"),
3757         bf_boolean32(0x00000002, "status_flag_bits_comp", "Compression"),
3758         bf_boolean32(0x00000004, "status_flag_bits_migrate", "Migration"),
3759         bf_boolean32(0x00000008, "status_flag_bits_audit", "Audit"),
3760         bf_boolean32(0x00000010, "status_flag_bits_ro", "Read Only"),
3761         bf_boolean32(0x00000020, "status_flag_bits_im_purge", "Immediate Purge"),
3762     bf_boolean32(0x00000040, "status_flag_bits_64bit", "64Bit File Offsets"),
3763     bf_boolean32(0x00000080, "status_flag_bits_utf8", "UTF8 NCP Strings"),
3764     bf_boolean32(0x80000000, "status_flag_bits_nss", "NSS Volume"),
3765 ])
3766 SubAllocClusters                = uint32("sub_alloc_clusters", "Sub Alloc Clusters")
3767 SubAllocFreeableClusters        = uint32("sub_alloc_freeable_clusters", "Sub Alloc Freeable Clusters")
3768 Subdirectory                    = uint32("sub_directory", "Subdirectory")
3769 Subdirectory.Display("BASE_HEX")
3770 SuggestedFileSize               = uint32("suggested_file_size", "Suggested File Size")
3771 SupportModuleID                 = uint32("support_module_id", "Support Module ID")
3772 SynchName                       = nstring8("synch_name", "Synch Name")
3773 SystemIntervalMarker            = uint32("system_interval_marker", "System Interval Marker")
3774
3775 TabSize                         = uint8( "tab_size", "Tab Size" )
3776 TargetClientList                = uint8("target_client_list", "Target Client List")
3777 TargetConnectionNumber          = uint16("target_connection_number", "Target Connection Number")
3778 TargetDirectoryBase             = uint32("target_directory_base", "Target Directory Base")
3779 TargetDirHandle                 = uint8("target_dir_handle", "Target Directory Handle")
3780 TargetEntryID                   = uint32("target_entry_id", "Target Entry ID")
3781 TargetEntryID.Display("BASE_HEX")
3782 TargetExecutionTime             = bytes("target_execution_time", "Target Execution Time", 6)
3783 TargetFileHandle                = bytes("target_file_handle", "Target File Handle", 6)
3784 TargetFileOffset                = uint32("target_file_offset", "Target File Offset")
3785 TargetMessage                   = nstring8("target_message", "Message")
3786 TargetPrinter                   = uint8( "target_ptr", "Target Printer" )
3787 targetReceiveTime               = bytes("target_receive_time", "Target Receive Time", 8)
3788 TargetServerIDNumber            = uint32("target_server_id_number", "Target Server ID Number", BE )
3789 TargetServerIDNumber.Display("BASE_HEX")
3790 targetTransmitTime              = bytes("target_transmit_time", "Target Transmit Time", 8)
3791 TaskNumByte                     = uint8("task_num_byte", "Task Number")
3792 TaskNumber                      = uint32("task_number", "Task Number")
3793 TaskNumberWord                  = uint16("task_number_word", "Task Number")
3794 TaskState           = val_string8("task_state", "Task State", [
3795         [ 0x00, "Normal" ],
3796         [ 0x01, "TTS explicit transaction in progress" ],
3797         [ 0x02, "TTS implicit transaction in progress" ],
3798         [ 0x04, "Shared file set lock in progress" ],
3799 ])
3800 TextJobDescription              = fw_string("text_job_description", "Text Job Description", 50)
3801 ThrashingCount                  = uint16("thrashing_count", "Thrashing Count")
3802 TimeoutLimit                    = uint16("timeout_limit", "Timeout Limit")
3803 TimesyncStatus                  = bitfield32("timesync_status_flags", "Timesync Status", [
3804         bf_boolean32(0x00000001, "timesync_status_sync", "Time is Synchronized"),
3805         bf_boolean32(0x00000002, "timesync_status_net_sync", "Time is Synchronized to the Network"),
3806     bf_boolean32(0x00000004, "timesync_status_active", "Time Synchronization is Active"),
3807         bf_boolean32(0x00000008, "timesync_status_external", "External Time Synchronization Active"),
3808         bf_val_str32(0x00000700, "timesync_status_server_type", "Time Server Type", [
3809                 [ 0x01, "Client Time Server" ],
3810                 [ 0x02, "Secondary Time Server" ],
3811                 [ 0x03, "Primary Time Server" ],
3812                 [ 0x04, "Reference Time Server" ],
3813                 [ 0x05, "Single Reference Time Server" ],
3814         ]),
3815         bf_boolean32(0x000f0000, "timesync_status_ext_sync", "External Clock Status"),
3816 ])
3817 TimeToNet                       = uint16("time_to_net", "Time To Net")
3818 TotalBlocks                     = uint32("total_blocks", "Total Blocks")
3819 TotalBlocksToDecompress         = uint32("total_blks_to_dcompress", "Total Blocks To Decompress")
3820 TotalBytesRead                  = bytes("user_info_ttl_bytes_rd", "Total Bytes Read", 6)
3821 TotalBytesWritten               = bytes("user_info_ttl_bytes_wrt", "Total Bytes Written", 6)
3822 TotalCacheWrites                = uint32("total_cache_writes", "Total Cache Writes")
3823 TotalChangedFATs                = uint32("total_changed_fats", "Total Changed FAT Entries")
3824 TotalCommonCnts                 = uint32("total_common_cnts", "Total Common Counts")
3825 TotalCntBlocks                  = uint32("total_cnt_blocks", "Total Count Blocks")
3826 TotalDataStreamDiskSpaceAlloc   = uint32("ttl_data_str_size_space_alloc", "Total Data Stream Disk Space Alloc")
3827 TotalDirectorySlots             = uint16("total_directory_slots", "Total Directory Slots")
3828 TotalDirectoryEntries           = uint32("total_dir_entries", "Total Directory Entries")
3829 TotalDynamicSpace               = uint32("total_dynamic_space", "Total Dynamic Space")
3830 TotalExtendedDirectoryExtents   = uint32("total_extended_directory_extents", "Total Extended Directory Extents")
3831 TotalFileServicePackets         = uint32("total_file_service_packets", "Total File Service Packets")
3832 TotalFilesOpened                = uint32("total_files_opened", "Total Files Opened")
3833 TotalLFSCounters                = uint32("total_lfs_counters", "Total LFS Counters")
3834 TotalOffspring                  = uint16("total_offspring", "Total Offspring")
3835 TotalOtherPackets               = uint32("total_other_packets", "Total Other Packets")
3836 TotalQueueJobs                  = uint32("total_queue_jobs", "Total Queue Jobs")
3837 TotalReadRequests               = uint32("total_read_requests", "Total Read Requests")
3838 TotalRequest                    = uint32("total_request", "Total Requests")
3839 TotalRequestPackets             = uint32("total_request_packets", "Total Request Packets")
3840 TotalRoutedPackets              = uint32("total_routed_packets", "Total Routed Packets")
3841 TotalRxPkts                     = uint32("total_rx_pkts", "Total Receive Packets")
3842 TotalServerMemory               = uint16("total_server_memory", "Total Server Memory", BE)
3843 TotalTransactionsBackedOut      = uint32("total_trans_backed_out", "Total Transactions Backed Out")
3844 TotalTransactionsPerformed      = uint32("total_trans_performed", "Total Transactions Performed")
3845 TotalTxPkts                     = uint32("total_tx_pkts", "Total Transmit Packets")
3846 TotalUnfilledBackoutRequests    = uint16("total_unfilled_backout_requests", "Total Unfilled Backout Requests")
3847 TotalVolumeClusters             = uint16("total_volume_clusters", "Total Volume Clusters")
3848 TotalWriteRequests              = uint32("total_write_requests", "Total Write Requests")
3849 TotalWriteTransactionsPerformed = uint32("total_write_trans_performed", "Total Write Transactions Performed")
3850 TrackOnFlag                     = boolean8("track_on_flag", "Track On Flag")
3851 TransactionDiskSpace            = uint16("transaction_disk_space", "Transaction Disk Space")
3852 TransactionFATAllocations       = uint32("transaction_fat_allocations", "Transaction FAT Allocations")
3853 TransactionFileSizeChanges      = uint32("transaction_file_size_changes", "Transaction File Size Changes")
3854 TransactionFilesTruncated       = uint32("transaction_files_truncated", "Transaction Files Truncated")
3855 TransactionNumber               = uint32("transaction_number", "Transaction Number")
3856 TransactionTrackingEnabled      = uint8("transaction_tracking_enabled", "Transaction Tracking Enabled")
3857 TransactionTrackingFlag         = uint16("tts_flag", "Transaction Tracking Flag")
3858 TransactionTrackingSupported    = uint8("transaction_tracking_supported", "Transaction Tracking Supported")
3859 TransactionVolumeNumber         = uint16("transaction_volume_number", "Transaction Volume Number")
3860 TransportType                   = val_string8("transport_type", "Communications Type", [
3861         [ 0x01, "Internet Packet Exchange (IPX)" ],
3862         [ 0x05, "User Datagram Protocol (UDP)" ],
3863         [ 0x06, "Transmission Control Protocol (TCP)" ],
3864 ])
3865 TreeLength                      = uint32("tree_length", "Tree Length")
3866 TreeName                        = nstring32("tree_name", "Tree Name")
3867 TreeName.NWUnicode()
3868 TrusteeAccessMask           = uint8("trustee_acc_mask", "Trustee Access Mask")
3869 TrusteeRights                   = bitfield16("trustee_rights_low", "Trustee Rights", [
3870         bf_boolean16(0x0001, "trustee_rights_read", "Read"),
3871         bf_boolean16(0x0002, "trustee_rights_write", "Write"),
3872         bf_boolean16(0x0004, "trustee_rights_open", "Open"),
3873         bf_boolean16(0x0008, "trustee_rights_create", "Create"),
3874         bf_boolean16(0x0010, "trustee_rights_del", "Delete"),
3875         bf_boolean16(0x0020, "trustee_rights_parent", "Parental"),
3876         bf_boolean16(0x0040, "trustee_rights_search", "Search"),
3877         bf_boolean16(0x0080, "trustee_rights_modify", "Modify"),
3878         bf_boolean16(0x0100, "trustee_rights_super", "Supervisor"),
3879 ])
3880 TTSLevel                        = uint8("tts_level", "TTS Level")
3881 TrusteeSetNumber                = uint8("trustee_set_number", "Trustee Set Number")
3882 TrusteeID                       = uint32("trustee_id_set", "Trustee ID")
3883 TrusteeID.Display("BASE_HEX")
3884 ttlCompBlks                     = uint32("ttl_comp_blks", "Total Compression Blocks")
3885 TtlDSDskSpaceAlloc              = uint32("ttl_ds_disk_space_alloc", "Total Streams Space Allocated")
3886 TtlEAs                          = uint32("ttl_eas", "Total EA's")
3887 TtlEAsDataSize                  = uint32("ttl_eas_data_size", "Total EA's Data Size")
3888 TtlEAsKeySize                   = uint32("ttl_eas_key_size", "Total EA's Key Size")
3889 ttlIntermediateBlks             = uint32("ttl_inter_blks", "Total Intermediate Blocks")
3890 TtlMigratedSize                 = uint32("ttl_migrated_size", "Total Migrated Size")
3891 TtlNumOfRTags                   = uint32("ttl_num_of_r_tags", "Total Number of Resource Tags")
3892 TtlNumOfSetCmds                 = uint32("ttl_num_of_set_cmds", "Total Number of Set Commands")
3893 TtlValuesLength                 = uint32("ttl_values_length", "Total Values Length")
3894 TtlWriteDataSize                = uint32("ttl_write_data_size", "Total Write Data Size")
3895 TurboUsedForFileService         = uint16("turbo_used_for_file_service", "Turbo Used For File Service")
3896
3897 UnclaimedPkts                   = uint32("un_claimed_packets", "Unclaimed Packets")
3898 UnCompressableDataStreamsCount  = uint32("un_compressable_data_streams_count", "Uncompressable Data Streams Count")
3899 Undefined8                      = bytes("undefined_8", "Undefined", 8)
3900 Undefined28                     = bytes("undefined_28", "Undefined", 28)
3901 UndefinedWord                   = uint16("undefined_word", "Undefined")
3902 UniqueID                        = uint8("unique_id", "Unique ID")
3903 UnknownByte                     = uint8("unknown_byte", "Unknown Byte")
3904 Unused                          = uint8("un_used", "Unused")
3905 UnusedBlocks                    = uint32("unused_blocks", "Unused Blocks")
3906 UnUsedDirectoryEntries          = uint32("un_used_directory_entries", "Unused Directory Entries")
3907 UnusedDiskBlocks                = uint32("unused_disk_blocks", "Unused Disk Blocks")
3908 UnUsedExtendedDirectoryExtents  = uint32("un_used_extended_directory_extents", "Unused Extended Directory Extents")
3909 UpdateDate                      = uint16("update_date", "Update Date")
3910 UpdateDate.NWDate()
3911 UpdateID                        = uint32("update_id", "Update ID", BE)
3912 UpdateID.Display("BASE_HEX")
3913 UpdateTime                      = uint16("update_time", "Update Time")
3914 UpdateTime.NWTime()
3915 UseCount                        = val_string16("user_info_use_count", "Use Count", [
3916         [ 0x0000, "Connection is not in use" ],
3917         [ 0x0001, "Connection is in use" ],
3918 ])
3919 UsedBlocks                      = uint32("used_blocks", "Used Blocks")
3920 UserID                          = uint32("user_id", "User ID", BE)
3921 UserID.Display("BASE_HEX")
3922 UserLoginAllowed                = val_string8("user_login_allowed", "Login Status", [
3923         [ 0x00, "Client Login Disabled" ],
3924         [ 0x01, "Client Login Enabled" ],
3925 ])
3926
3927 UserName                        = nstring8("user_name", "User Name")
3928 UserName16                      = fw_string("user_name_16", "User Name", 16)
3929 UserName48                      = fw_string("user_name_48", "User Name", 48)
3930 UserType                        = uint16("user_type", "User Type")
3931 UTCTimeInSeconds                = uint32("uts_time_in_seconds", "UTC Time in Seconds")
3932
3933 ValueAvailable                  = val_string8("value_available", "Value Available", [
3934         [ 0x00, "Has No Value" ],
3935         [ 0xff, "Has Value" ],
3936 ])
3937 VAPVersion                      = uint8("vap_version", "VAP Version")
3938 VariableBitMask                 = uint32("variable_bit_mask", "Variable Bit Mask")
3939 VariableBitsDefined             = uint16("variable_bits_defined", "Variable Bits Defined")
3940 VConsoleRevision                = uint8("vconsole_rev", "Console Revision")
3941 VConsoleVersion                 = uint8("vconsole_ver", "Console Version")
3942 Verb                            = uint32("verb", "Verb")
3943 VerbData                        = uint8("verb_data", "Verb Data")
3944 version                         = uint32("version", "Version")
3945 VersionNumber                   = uint8("version_number", "Version")
3946 VersionNumberLong       = uint32("version_num_long", "Version")
3947 VertLocation                    = uint16("vert_location", "Vertical Location")
3948 VirtualConsoleVersion           = uint8("virtual_console_version", "Virtual Console Version")
3949 VolumeID                        = uint32("volume_id", "Volume ID")
3950 VolumeID.Display("BASE_HEX")
3951 VolInfoReplyLen                 = uint16("vol_info_reply_len", "Volume Information Reply Length")
3952 VolumeCapabilities                      = bitfield32("volume_capabilities", "Volume Capabilities", [
3953         bf_boolean32(0x00000001, "vol_cap_user_space", "NetWare User Space Restrictions Supported"),
3954         bf_boolean32(0x00000002, "vol_cap_dir_quota", "NetWare Directory Quotas Supported"),
3955         bf_boolean32(0x00000004, "vol_cap_dfs", "DFS is Active on Volume"),
3956         bf_boolean32(0x00000008, "vol_cap_sal_purge", "NetWare Salvage and Purge Operations Supported"),
3957         bf_boolean32(0x00000010, "vol_cap_comp", "NetWare Compression Supported"),
3958         bf_boolean32(0x00000020, "vol_cap_cluster", "Volume is a Cluster Resource"),
3959     bf_boolean32(0x00000040, "vol_cap_nss_admin", "Volume is the NSS Admin Volume"),
3960     bf_boolean32(0x00000080, "vol_cap_nss", "Volume is Mounted by NSS"),
3961         bf_boolean32(0x00000100, "vol_cap_ea", "OS2 style EA's Supported"),
3962         bf_boolean32(0x00000200, "vol_cap_archive", "NetWare Archive bit Supported"),
3963     bf_boolean32(0x00000400, "vol_cap_file_attr", "Full NetWare file Attributes Supported"),
3964 ])
3965 VolumeCachedFlag                = val_string8("volume_cached_flag", "Volume Cached Flag", [
3966         [ 0x00, "Volume is Not Cached" ],
3967         [ 0xff, "Volume is Cached" ],
3968 ])
3969 VolumeDataStreams               = uint8("volume_data_streams", "Volume Data Streams")
3970 VolumeGUID              = stringz("volume_guid", "Volume GUID")
3971 VolumeHashedFlag                = val_string8("volume_hashed_flag", "Volume Hashed Flag", [
3972         [ 0x00, "Volume is Not Hashed" ],
3973         [ 0xff, "Volume is Hashed" ],
3974 ])
3975 VolumeLastModifiedDate          = uint16("volume_last_modified_date", "Volume Last Modified Date")
3976 VolumeLastModifiedDate.NWDate()
3977 VolumeLastModifiedTime          = uint16("volume_last_modified_time", "Volume Last Modified Time")
3978 VolumeLastModifiedTime.NWTime()
3979 VolumeMountedFlag               = val_string8("volume_mounted_flag", "Volume Mounted Flag", [
3980         [ 0x00, "Volume is Not Mounted" ],
3981         [ 0xff, "Volume is Mounted" ],
3982 ])
3983 VolumeMountPoint = stringz("volume_mnt_point", "Volume Mount Point")
3984 VolumeName                      = fw_string("volume_name", "Volume Name", 16)
3985 VolumeNameLen                   = nstring8("volume_name_len", "Volume Name")
3986 VolumeNameSpaces                = uint8("volume_name_spaces", "Volume Name Spaces")
3987 VolumeNameStringz       = stringz("vol_name_stringz", "Volume Name")
3988 VolumeNumber                    = uint8("volume_number", "Volume Number")
3989 VolumeNumberLong                = uint32("volume_number_long", "Volume Number")
3990 VolumeRemovableFlag             = val_string8("volume_removable_flag", "Volume Removable Flag", [
3991         [ 0x00, "Disk Cannot be Removed from Server" ],
3992         [ 0xff, "Disk Can be Removed from Server" ],
3993 ])
3994 VolumeRequestFlags              = val_string16("volume_request_flags", "Volume Request Flags", [
3995         [ 0x0000, "Do not return name with volume number" ],
3996         [ 0x0001, "Return name with volume number" ],
3997 ])
3998 VolumeSizeInClusters            = uint32("volume_size_in_clusters", "Volume Size in Clusters")
3999 VolumesSupportedMax             = uint16("volumes_supported_max", "Volumes Supported Max")
4000 VolumeType                      = val_string16("volume_type", "Volume Type", [
4001         [ 0x0000, "NetWare 386" ],
4002         [ 0x0001, "NetWare 286" ],
4003         [ 0x0002, "NetWare 386 Version 30" ],
4004         [ 0x0003, "NetWare 386 Version 31" ],
4005 ])
4006 WastedServerMemory              = uint16("wasted_server_memory", "Wasted Server Memory", BE)
4007 WaitTime                        = uint32("wait_time", "Wait Time")
4008
4009 Year                            = val_string8("year", "Year",[
4010         [ 0x50, "1980" ],
4011         [ 0x51, "1981" ],
4012         [ 0x52, "1982" ],
4013         [ 0x53, "1983" ],
4014         [ 0x54, "1984" ],
4015         [ 0x55, "1985" ],
4016         [ 0x56, "1986" ],
4017         [ 0x57, "1987" ],
4018         [ 0x58, "1988" ],
4019         [ 0x59, "1989" ],
4020         [ 0x5a, "1990" ],
4021         [ 0x5b, "1991" ],
4022         [ 0x5c, "1992" ],
4023         [ 0x5d, "1993" ],
4024         [ 0x5e, "1994" ],
4025         [ 0x5f, "1995" ],
4026         [ 0x60, "1996" ],
4027         [ 0x61, "1997" ],
4028         [ 0x62, "1998" ],
4029         [ 0x63, "1999" ],
4030         [ 0x64, "2000" ],
4031         [ 0x65, "2001" ],
4032         [ 0x66, "2002" ],
4033         [ 0x67, "2003" ],
4034         [ 0x68, "2004" ],
4035         [ 0x69, "2005" ],
4036         [ 0x6a, "2006" ],
4037         [ 0x6b, "2007" ],
4038         [ 0x6c, "2008" ],
4039         [ 0x6d, "2009" ],
4040         [ 0x6e, "2010" ],
4041         [ 0x6f, "2011" ],
4042         [ 0x70, "2012" ],
4043         [ 0x71, "2013" ],
4044         [ 0x72, "2014" ],
4045         [ 0x73, "2015" ],
4046         [ 0x74, "2016" ],
4047         [ 0x75, "2017" ],
4048         [ 0x76, "2018" ],
4049         [ 0x77, "2019" ],
4050         [ 0x78, "2020" ],
4051         [ 0x79, "2021" ],
4052         [ 0x7a, "2022" ],
4053         [ 0x7b, "2023" ],
4054         [ 0x7c, "2024" ],
4055         [ 0x7d, "2025" ],
4056         [ 0x7e, "2026" ],
4057         [ 0x7f, "2027" ],
4058         [ 0xc0, "1984" ],
4059         [ 0xc1, "1985" ],
4060         [ 0xc2, "1986" ],
4061         [ 0xc3, "1987" ],
4062         [ 0xc4, "1988" ],
4063         [ 0xc5, "1989" ],
4064         [ 0xc6, "1990" ],
4065         [ 0xc7, "1991" ],
4066         [ 0xc8, "1992" ],
4067         [ 0xc9, "1993" ],
4068         [ 0xca, "1994" ],
4069         [ 0xcb, "1995" ],
4070         [ 0xcc, "1996" ],
4071         [ 0xcd, "1997" ],
4072         [ 0xce, "1998" ],
4073         [ 0xcf, "1999" ],
4074         [ 0xd0, "2000" ],
4075         [ 0xd1, "2001" ],
4076         [ 0xd2, "2002" ],
4077         [ 0xd3, "2003" ],
4078         [ 0xd4, "2004" ],
4079         [ 0xd5, "2005" ],
4080         [ 0xd6, "2006" ],
4081         [ 0xd7, "2007" ],
4082         [ 0xd8, "2008" ],
4083         [ 0xd9, "2009" ],
4084         [ 0xda, "2010" ],
4085         [ 0xdb, "2011" ],
4086         [ 0xdc, "2012" ],
4087         [ 0xdd, "2013" ],
4088         [ 0xde, "2014" ],
4089         [ 0xdf, "2015" ],
4090 ])
4091 ##############################################################################
4092 # Structs
4093 ##############################################################################
4094
4095
4096 acctngInfo                      = struct("acctng_info_struct", [
4097         HoldTime,
4098         HoldAmount,
4099         ChargeAmount,
4100         HeldConnectTimeInMinutes,
4101         HeldRequests,
4102         HeldBytesRead,
4103         HeldBytesWritten,
4104 ],"Accounting Information")
4105 AFP10Struct                       = struct("afp_10_struct", [
4106         AFPEntryID,
4107         ParentID,
4108         AttributesDef16,
4109         DataForkLen,
4110         ResourceForkLen,
4111         TotalOffspring,
4112         CreationDate,
4113         LastAccessedDate,
4114         ModifiedDate,
4115         ModifiedTime,
4116         ArchivedDate,
4117         ArchivedTime,
4118         CreatorID,
4119         Reserved4,
4120         FinderAttr,
4121         HorizLocation,
4122         VertLocation,
4123         FileDirWindow,
4124         Reserved16,
4125         LongName,
4126         CreatorID,
4127         ShortName,
4128         AccessPrivileges,
4129 ], "AFP Information" )
4130 AFP20Struct                       = struct("afp_20_struct", [
4131         AFPEntryID,
4132         ParentID,
4133         AttributesDef16,
4134         DataForkLen,
4135         ResourceForkLen,
4136         TotalOffspring,
4137         CreationDate,
4138         LastAccessedDate,
4139         ModifiedDate,
4140         ModifiedTime,
4141         ArchivedDate,
4142         ArchivedTime,
4143         CreatorID,
4144         Reserved4,
4145         FinderAttr,
4146         HorizLocation,
4147         VertLocation,
4148         FileDirWindow,
4149         Reserved16,
4150         LongName,
4151         CreatorID,
4152         ShortName,
4153         AccessPrivileges,
4154         Reserved,
4155         ProDOSInfo,
4156 ], "AFP Information" )
4157 ArchiveDateStruct               = struct("archive_date_struct", [
4158         ArchivedDate,
4159 ])
4160 ArchiveIdStruct                 = struct("archive_id_struct", [
4161         ArchiverID,
4162 ])
4163 ArchiveInfoStruct               = struct("archive_info_struct", [
4164         ArchivedTime,
4165         ArchivedDate,
4166         ArchiverID,
4167 ], "Archive Information")
4168 ArchiveTimeStruct               = struct("archive_time_struct", [
4169         ArchivedTime,
4170 ])
4171 AttributesStruct                = struct("attributes_struct", [
4172         AttributesDef32,
4173         FlagsDef,
4174 ], "Attributes")
4175 authInfo                        = struct("auth_info_struct", [
4176         Status,
4177         Reserved2,
4178         Privileges,
4179 ])
4180 BoardNameStruct                 = struct("board_name_struct", [
4181         DriverBoardName,
4182         DriverShortName,
4183         DriverLogicalName,
4184 ], "Board Name")
4185 CacheInfo                       = struct("cache_info", [
4186         uint32("max_byte_cnt", "Maximum Byte Count"),
4187         uint32("min_num_of_cache_buff", "Minimum Number Of Cache Buffers"),
4188         uint32("min_cache_report_thresh", "Minimum Cache Report Threshold"),
4189         uint32("alloc_waiting", "Allocate Waiting Count"),
4190         uint32("ndirty_blocks", "Number of Dirty Blocks"),
4191         uint32("cache_dirty_wait_time", "Cache Dirty Wait Time"),
4192         uint32("cache_max_concur_writes", "Cache Maximum Concurrent Writes"),
4193         uint32("max_dirty_time", "Maximum Dirty Time"),
4194         uint32("num_dir_cache_buff", "Number Of Directory Cache Buffers"),
4195         uint32("cache_byte_to_block", "Cache Byte To Block Shift Factor"),
4196 ], "Cache Information")
4197 CommonLanStruc                  = struct("common_lan_struct", [
4198         boolean8("not_supported_mask", "Bit Counter Supported"),
4199         Reserved3,
4200         uint32("total_tx_packet_count", "Total Transmit Packet Count"),
4201         uint32("total_rx_packet_count", "Total Receive Packet Count"),
4202         uint32("no_ecb_available_count", "No ECB Available Count"),
4203         uint32("packet_tx_too_big_count", "Transmit Packet Too Big Count"),
4204         uint32("packet_tx_too_small_count", "Transmit Packet Too Small Count"),
4205         uint32("packet_rx_overflow_count", "Receive Packet Overflow Count"),
4206         uint32("packet_rx_too_big_count", "Receive Packet Too Big Count"),
4207         uint32("packet_rs_too_small_count", "Receive Packet Too Small Count"),
4208         uint32("packet_tx_misc_error_count", "Transmit Packet Misc Error Count"),
4209         uint32("packet_rx_misc_error_count", "Receive Packet Misc Error Count"),
4210         uint32("retry_tx_count", "Transmit Retry Count"),
4211         uint32("checksum_error_count", "Checksum Error Count"),
4212         uint32("hardware_rx_mismatch_count", "Hardware Receive Mismatch Count"),
4213 ], "Common LAN Information")
4214 CompDeCompStat                  = struct("comp_d_comp_stat", [
4215         uint32("cmphitickhigh", "Compress High Tick"),
4216         uint32("cmphitickcnt", "Compress High Tick Count"),
4217         uint32("cmpbyteincount", "Compress Byte In Count"),
4218         uint32("cmpbyteoutcnt", "Compress Byte Out Count"),
4219         uint32("cmphibyteincnt", "Compress High Byte In Count"),
4220         uint32("cmphibyteoutcnt", "Compress High Byte Out Count"),
4221         uint32("decphitickhigh", "DeCompress High Tick"),
4222         uint32("decphitickcnt", "DeCompress High Tick Count"),
4223         uint32("decpbyteincount", "DeCompress Byte In Count"),
4224         uint32("decpbyteoutcnt", "DeCompress Byte Out Count"),
4225         uint32("decphibyteincnt", "DeCompress High Byte In Count"),
4226         uint32("decphibyteoutcnt", "DeCompress High Byte Out Count"),
4227 ], "Compression/Decompression Information")
4228 ConnFileStruct                  = struct("conn_file_struct", [
4229         ConnectionNumberWord,
4230         TaskNumberWord,
4231         LockType,
4232         AccessControl,
4233         LockFlag,
4234 ], "File Connection Information")
4235 ConnStruct                      = struct("conn_struct", [
4236         TaskNumByte,
4237         LockType,
4238         AccessControl,
4239         LockFlag,
4240         VolumeNumber,
4241         DirectoryEntryNumberWord,
4242         FileName14,
4243 ], "Connection Information")
4244 ConnTaskStruct                  = struct("conn_task_struct", [
4245         ConnectionNumberByte,
4246         TaskNumByte,
4247 ], "Task Information")
4248 Counters                        = struct("counters_struct", [
4249         uint32("read_exist_blck", "Read Existing Block Count"),
4250         uint32("read_exist_write_wait", "Read Existing Write Wait Count"),
4251         uint32("read_exist_part_read", "Read Existing Partial Read Count"),
4252         uint32("read_exist_read_err", "Read Existing Read Error Count"),
4253         uint32("wrt_blck_cnt", "Write Block Count"),
4254         uint32("wrt_entire_blck", "Write Entire Block Count"),
4255         uint32("internl_dsk_get", "Internal Disk Get Count"),
4256         uint32("internl_dsk_get_need_to_alloc", "Internal Disk Get Need To Allocate Count"),
4257         uint32("internl_dsk_get_someone_beat", "Internal Disk Get Someone Beat My Count"),
4258         uint32("internl_dsk_get_part_read", "Internal Disk Get Partial Read Count"),
4259         uint32("internl_dsk_get_read_err", "Internal Disk Get Read Error Count"),
4260         uint32("async_internl_dsk_get", "Async Internal Disk Get Count"),
4261         uint32("async_internl_dsk_get_need_to_alloc", "Async Internal Disk Get Need To Alloc"),
4262         uint32("async_internl_dsk_get_someone_beat", "Async Internal Disk Get Someone Beat Me"),
4263         uint32("err_doing_async_read", "Error Doing Async Read Count"),
4264         uint32("internl_dsk_get_no_read", "Internal Disk Get No Read Count"),
4265         uint32("internl_dsk_get_no_read_alloc", "Internal Disk Get No Read Allocate Count"),
4266         uint32("internl_dsk_get_no_read_someone_beat", "Internal Disk Get No Read Someone Beat Me Count"),
4267         uint32("internl_dsk_write", "Internal Disk Write Count"),
4268         uint32("internl_dsk_write_alloc", "Internal Disk Write Allocate Count"),
4269         uint32("internl_dsk_write_someone_beat", "Internal Disk Write Someone Beat Me Count"),
4270         uint32("write_err", "Write Error Count"),
4271         uint32("wait_on_sema", "Wait On Semaphore Count"),
4272         uint32("alloc_blck_i_had_to_wait_for", "Allocate Block I Had To Wait For Someone Count"),
4273         uint32("alloc_blck", "Allocate Block Count"),
4274         uint32("alloc_blck_i_had_to_wait", "Allocate Block I Had To Wait Count"),
4275 ], "Disk Counter Information")
4276 CPUInformation                  = struct("cpu_information", [
4277         PageTableOwnerFlag,
4278         CPUType,
4279         Reserved3,
4280         CoprocessorFlag,
4281         BusType,
4282         Reserved3,
4283         IOEngineFlag,
4284         Reserved3,
4285         FSEngineFlag,
4286         Reserved3,
4287         NonDedFlag,
4288         Reserved3,
4289         CPUString,
4290         CoProcessorString,
4291         BusString,
4292 ], "CPU Information")
4293 CreationDateStruct              = struct("creation_date_struct", [
4294         CreationDate,
4295 ])
4296 CreationInfoStruct              = struct("creation_info_struct", [
4297         CreationTime,
4298         CreationDate,
4299         endian(CreatorID, LE),
4300 ], "Creation Information")
4301 CreationTimeStruct              = struct("creation_time_struct", [
4302         CreationTime,
4303 ])
4304 CustomCntsInfo                  = struct("custom_cnts_info", [
4305         CustomVariableValue,
4306         CustomString,
4307 ], "Custom Counters" )
4308 DataStreamInfo                  = struct("data_stream_info", [
4309         AssociatedNameSpace,
4310         DataStreamName
4311 ])
4312 DataStreamSizeStruct            = struct("data_stream_size_struct", [
4313         DataStreamSize,
4314 ])
4315 DirCacheInfo                    = struct("dir_cache_info", [
4316         uint32("min_time_since_file_delete", "Minimum Time Since File Delete"),
4317         uint32("abs_min_time_since_file_delete", "Absolute Minimum Time Since File Delete"),
4318         uint32("min_num_of_dir_cache_buff", "Minimum Number Of Directory Cache Buffers"),
4319         uint32("max_num_of_dir_cache_buff", "Maximum Number Of Directory Cache Buffers"),
4320         uint32("num_of_dir_cache_buff", "Number Of Directory Cache Buffers"),
4321         uint32("dc_min_non_ref_time", "DC Minimum Non-Referenced Time"),
4322         uint32("dc_wait_time_before_new_buff", "DC Wait Time Before New Buffer"),
4323         uint32("dc_max_concurrent_writes", "DC Maximum Concurrent Writes"),
4324         uint32("dc_dirty_wait_time", "DC Dirty Wait Time"),
4325         uint32("dc_double_read_flag", "DC Double Read Flag"),
4326         uint32("map_hash_node_count", "Map Hash Node Count"),
4327         uint32("space_restriction_node_count", "Space Restriction Node Count"),
4328         uint32("trustee_list_node_count", "Trustee List Node Count"),
4329         uint32("percent_of_vol_used_by_dirs", "Percent Of Volume Used By Directories"),
4330 ], "Directory Cache Information")
4331 DirEntryStruct                  = struct("dir_entry_struct", [
4332         DirectoryEntryNumber,
4333         DOSDirectoryEntryNumber,
4334         VolumeNumberLong,
4335 ], "Directory Entry Information")
4336 DirectoryInstance               = struct("directory_instance", [
4337         SearchSequenceWord,
4338         DirectoryID,
4339         DirectoryName14,
4340         DirectoryAttributes,
4341         DirectoryAccessRights,
4342         endian(CreationDate, BE),
4343         endian(AccessDate, BE),
4344         CreatorID,
4345         Reserved2,
4346         DirectoryStamp,
4347 ], "Directory Information")
4348 DMInfoLevel0                    = struct("dm_info_level_0", [
4349         uint32("io_flag", "IO Flag"),
4350         uint32("sm_info_size", "Storage Module Information Size"),
4351         uint32("avail_space", "Available Space"),
4352         uint32("used_space", "Used Space"),
4353         stringz("s_module_name", "Storage Module Name"),
4354         uint8("s_m_info", "Storage Media Information"),
4355 ])
4356 DMInfoLevel1                    = struct("dm_info_level_1", [
4357         NumberOfSMs,
4358         SMIDs,
4359 ])
4360 DMInfoLevel2                    = struct("dm_info_level_2", [
4361         Name,
4362 ])
4363 DOSDirectoryEntryStruct         = struct("dos_directory_entry_struct", [
4364         AttributesDef32,
4365         UniqueID,
4366         PurgeFlags,
4367         DestNameSpace,
4368         DirectoryNameLen,
4369         DirectoryName,
4370         CreationTime,
4371         CreationDate,
4372         CreatorID,
4373         ArchivedTime,
4374         ArchivedDate,
4375         ArchiverID,
4376         UpdateTime,
4377         UpdateDate,
4378         NextTrusteeEntry,
4379         Reserved48,
4380         InheritedRightsMask,
4381 ], "DOS Directory Information")
4382 DOSFileEntryStruct              = struct("dos_file_entry_struct", [
4383         AttributesDef32,
4384         UniqueID,
4385         PurgeFlags,
4386         DestNameSpace,
4387         NameLen,
4388         Name12,
4389         CreationTime,
4390         CreationDate,
4391         CreatorID,
4392         ArchivedTime,
4393         ArchivedDate,
4394         ArchiverID,
4395         UpdateTime,
4396         UpdateDate,
4397         UpdateID,
4398         FileSize,
4399         DataForkFirstFAT,
4400         NextTrusteeEntry,
4401         Reserved36,
4402         InheritedRightsMask,
4403         LastAccessedDate,
4404         Reserved20,
4405         PrimaryEntry,
4406         NameList,
4407 ], "DOS File Information")
4408 DSSpaceAllocateStruct           = struct("ds_space_alloc_struct", [
4409         DataStreamSpaceAlloc,
4410 ])
4411 DynMemStruct                    = struct("dyn_mem_struct", [
4412         uint32("dyn_mem_struct_total", "Total Dynamic Space" ),
4413         uint32("dyn_mem_struct_max", "Max Used Dynamic Space" ),
4414         uint32("dyn_mem_struct_cur", "Current Used Dynamic Space" ),
4415 ], "Dynamic Memory Information")
4416 EAInfoStruct                    = struct("ea_info_struct", [
4417         EADataSize,
4418         EACount,
4419         EAKeySize,
4420 ], "Extended Attribute Information")
4421 ExtraCacheCntrs                 = struct("extra_cache_cntrs", [
4422         uint32("internl_dsk_get_no_wait", "Internal Disk Get No Wait Count"),
4423         uint32("internl_dsk_get_no_wait_need", "Internal Disk Get No Wait Need To Allocate Count"),
4424         uint32("internl_dsk_get_no_wait_no_blk", "Internal Disk Get No Wait No Block Count"),
4425         uint32("id_get_no_read_no_wait", "ID Get No Read No Wait Count"),
4426         uint32("id_get_no_read_no_wait_sema", "ID Get No Read No Wait Semaphored Count"),
4427         uint32("id_get_no_read_no_wait_buffer", "ID Get No Read No Wait No Buffer Count"),
4428         uint32("id_get_no_read_no_wait_alloc", "ID Get No Read No Wait Allocate Count"),
4429         uint32("id_get_no_read_no_wait_no_alloc", "ID Get No Read No Wait No Alloc Count"),
4430         uint32("id_get_no_read_no_wait_no_alloc_sema", "ID Get No Read No Wait No Alloc Semaphored Count"),
4431         uint32("id_get_no_read_no_wait_no_alloc_alloc", "ID Get No Read No Wait No Alloc Allocate Count"),
4432 ], "Extra Cache Counters Information")
4433
4434 FileSize64bitStruct             = struct("file_sz_64bit_struct", [
4435         FileSize64bit,
4436 ])
4437
4438 ReferenceIDStruct               = struct("ref_id_struct", [
4439         CurrentReferenceID,
4440 ])
4441 NSAttributeStruct               = struct("ns_attrib_struct", [
4442         AttributesDef32,
4443 ])
4444 DStreamActual                   = struct("d_stream_actual", [
4445         DataStreamNumberLong,
4446         DataStreamFATBlocks,
4447 ])
4448 DStreamLogical                  = struct("d_string_logical", [
4449         DataStreamNumberLong,
4450         DataStreamSize,
4451 ])
4452 LastUpdatedInSecondsStruct      = struct("last_update_in_seconds_struct", [
4453         SecondsRelativeToTheYear2000,
4454 ])
4455 DOSNameStruct                   = struct("dos_name_struct", [
4456         FileName,
4457 ], "DOS File Name")
4458 DOSName16Struct                   = struct("dos_name_16_struct", [
4459         FileName16,
4460 ], "DOS File Name")
4461 FlushTimeStruct                 = struct("flush_time_struct", [
4462         FlushTime,
4463 ])
4464 ParentBaseIDStruct              = struct("parent_base_id_struct", [
4465         ParentBaseID,
4466 ])
4467 MacFinderInfoStruct             = struct("mac_finder_info_struct", [
4468         MacFinderInfo,
4469 ])
4470 SiblingCountStruct              = struct("sibling_count_struct", [
4471         SiblingCount,
4472 ])
4473 EffectiveRightsStruct           = struct("eff_rights_struct", [
4474         EffectiveRights,
4475         Reserved3,
4476 ])
4477 MacTimeStruct                   = struct("mac_time_struct", [
4478         MACCreateDate,
4479         MACCreateTime,
4480         MACBackupDate,
4481         MACBackupTime,
4482 ])
4483 LastAccessedTimeStruct          = struct("last_access_time_struct", [
4484         LastAccessedTime,
4485 ])
4486 FileAttributesStruct            = struct("file_attributes_struct", [
4487         AttributesDef32,
4488 ])
4489 FileInfoStruct                  = struct("file_info_struct", [
4490         ParentID,
4491         DirectoryEntryNumber,
4492         TotalBlocksToDecompress,
4493         #CurrentBlockBeingDecompressed,
4494 ], "File Information")
4495 FileInstance                    = struct("file_instance", [
4496         SearchSequenceWord,
4497         DirectoryID,
4498         FileName14,
4499         AttributesDef,
4500         FileMode,
4501         FileSize,
4502         endian(CreationDate, BE),
4503         endian(AccessDate, BE),
4504         endian(UpdateDate, BE),
4505         endian(UpdateTime, BE),
4506 ], "File Instance")
4507 FileNameStruct                  = struct("file_name_struct", [
4508         FileName,
4509 ], "File Name")
4510 FileName16Struct                  = struct("file_name16_struct", [
4511         FileName16,
4512 ], "File Name")
4513 FileServerCounters              = struct("file_server_counters", [
4514         uint16("too_many_hops", "Too Many Hops"),
4515         uint16("unknown_network", "Unknown Network"),
4516         uint16("no_space_for_service", "No Space For Service"),
4517         uint16("no_receive_buff", "No Receive Buffers"),
4518         uint16("not_my_network", "Not My Network"),
4519         uint32("netbios_progated", "NetBIOS Propagated Count"),
4520         uint32("ttl_pckts_srvcd", "Total Packets Serviced"),
4521         uint32("ttl_pckts_routed", "Total Packets Routed"),
4522 ], "File Server Counters")
4523 FileSystemInfo                  = struct("file_system_info", [
4524         uint32("fat_moved", "Number of times the OS has move the location of FAT"),
4525         uint32("fat_write_err", "Number of write errors in both original and mirrored copies of FAT"),
4526         uint32("someone_else_did_it_0", "Someone Else Did It Count 0"),
4527         uint32("someone_else_did_it_1", "Someone Else Did It Count 1"),
4528         uint32("someone_else_did_it_2", "Someone Else Did It Count 2"),
4529         uint32("i_ran_out_someone_else_did_it_0", "I Ran Out Someone Else Did It Count 0"),
4530         uint32("i_ran_out_someone_else_did_it_1", "I Ran Out Someone Else Did It Count 1"),
4531         uint32("i_ran_out_someone_else_did_it_2", "I Ran Out Someone Else Did It Count 2"),
4532         uint32("turbo_fat_build_failed", "Turbo FAT Build Failed Count"),
4533         uint32("extra_use_count_node_count", "Errors allocating a use count node for TTS"),
4534         uint32("extra_extra_use_count_node_count", "Errors allocating an additional use count node for TTS"),
4535         uint32("error_read_last_fat", "Error Reading Last FAT Count"),
4536         uint32("someone_else_using_this_file", "Someone Else Using This File Count"),
4537 ], "File System Information")
4538 GenericInfoDef                  = struct("generic_info_def", [
4539         fw_string("generic_label", "Label", 64),
4540         uint32("generic_ident_type", "Identification Type"),
4541         uint32("generic_ident_time", "Identification Time"),
4542         uint32("generic_media_type", "Media Type"),
4543         uint32("generic_cartridge_type", "Cartridge Type"),
4544         uint32("generic_unit_size", "Unit Size"),
4545         uint32("generic_block_size", "Block Size"),
4546         uint32("generic_capacity", "Capacity"),
4547         uint32("generic_pref_unit_size", "Preferred Unit Size"),
4548         fw_string("generic_name", "Name",64),
4549         uint32("generic_type", "Type"),
4550         uint32("generic_status", "Status"),
4551         uint32("generic_func_mask", "Function Mask"),
4552         uint32("generic_ctl_mask", "Control Mask"),
4553         uint32("generic_parent_count", "Parent Count"),
4554         uint32("generic_sib_count", "Sibling Count"),
4555         uint32("generic_child_count", "Child Count"),
4556         uint32("generic_spec_info_sz", "Specific Information Size"),
4557         uint32("generic_object_uniq_id", "Unique Object ID"),
4558         uint32("generic_media_slot", "Media Slot"),
4559 ], "Generic Information")
4560 HandleInfoLevel0                = struct("handle_info_level_0", [
4561 #        DataStream,
4562 ])
4563 HandleInfoLevel1                = struct("handle_info_level_1", [
4564         DataStream,
4565 ])
4566 HandleInfoLevel2                = struct("handle_info_level_2", [
4567         DOSDirectoryBase,
4568         NameSpace,
4569         DataStream,
4570 ])
4571 HandleInfoLevel3                = struct("handle_info_level_3", [
4572         DOSDirectoryBase,
4573         NameSpace,
4574 ])
4575 HandleInfoLevel4                = struct("handle_info_level_4", [
4576         DOSDirectoryBase,
4577         NameSpace,
4578         ParentDirectoryBase,
4579         ParentDOSDirectoryBase,
4580 ])
4581 HandleInfoLevel5                = struct("handle_info_level_5", [
4582         DOSDirectoryBase,
4583         NameSpace,
4584         DataStream,
4585         ParentDirectoryBase,
4586         ParentDOSDirectoryBase,
4587 ])
4588 IPXInformation                  = struct("ipx_information", [
4589         uint32("ipx_send_pkt", "IPX Send Packet Count"),
4590         uint16("ipx_malform_pkt", "IPX Malformed Packet Count"),
4591         uint32("ipx_get_ecb_req", "IPX Get ECB Request Count"),
4592         uint32("ipx_get_ecb_fail", "IPX Get ECB Fail Count"),
4593         uint32("ipx_aes_event", "IPX AES Event Count"),
4594         uint16("ipx_postponed_aes", "IPX Postponed AES Count"),
4595         uint16("ipx_max_conf_sock", "IPX Max Configured Socket Count"),
4596         uint16("ipx_max_open_sock", "IPX Max Open Socket Count"),
4597         uint16("ipx_open_sock_fail", "IPX Open Socket Fail Count"),
4598         uint32("ipx_listen_ecb", "IPX Listen ECB Count"),
4599         uint16("ipx_ecb_cancel_fail", "IPX ECB Cancel Fail Count"),
4600         uint16("ipx_get_lcl_targ_fail", "IPX Get Local Target Fail Count"),
4601 ], "IPX Information")
4602 JobEntryTime                    = struct("job_entry_time", [
4603         Year,
4604         Month,
4605         Day,
4606         Hour,
4607         Minute,
4608         Second,
4609 ], "Job Entry Time")
4610 JobStruct3x                       = struct("job_struct_3x", [
4611     RecordInUseFlag,
4612     PreviousRecord,
4613     NextRecord,
4614         ClientStationLong,
4615         ClientTaskNumberLong,
4616         ClientIDNumber,
4617         TargetServerIDNumber,
4618         TargetExecutionTime,
4619         JobEntryTime,
4620         JobNumberLong,
4621         JobType,
4622         JobPositionWord,
4623         JobControlFlagsWord,
4624         JobFileName,
4625         JobFileHandleLong,
4626         ServerStationLong,
4627         ServerTaskNumberLong,
4628         ServerID,
4629         TextJobDescription,
4630         ClientRecordArea,
4631 ], "Job Information")
4632 JobStruct                       = struct("job_struct", [
4633         ClientStation,
4634         ClientTaskNumber,
4635         ClientIDNumber,
4636         TargetServerIDNumber,
4637         TargetExecutionTime,
4638         JobEntryTime,
4639         JobNumber,
4640         JobType,
4641         JobPosition,
4642         JobControlFlags,
4643         JobFileName,
4644         JobFileHandle,
4645         ServerStation,
4646         ServerTaskNumber,
4647         ServerID,
4648         TextJobDescription,
4649         ClientRecordArea,
4650 ], "Job Information")
4651 JobStructNew                    = struct("job_struct_new", [
4652         RecordInUseFlag,
4653         PreviousRecord,
4654         NextRecord,
4655         ClientStationLong,
4656         ClientTaskNumberLong,
4657         ClientIDNumber,
4658         TargetServerIDNumber,
4659         TargetExecutionTime,
4660         JobEntryTime,
4661         JobNumberLong,
4662         JobType,
4663         JobPositionWord,
4664         JobControlFlagsWord,
4665         JobFileName,
4666         JobFileHandleLong,
4667         ServerStationLong,
4668         ServerTaskNumberLong,
4669         ServerID,
4670 ], "Job Information")
4671 KnownRoutes                     = struct("known_routes", [
4672         NetIDNumber,
4673         HopsToNet,
4674         NetStatus,
4675         TimeToNet,
4676 ], "Known Routes")
4677 SrcEnhNWHandlePathS1                 = struct("source_nwhandle", [
4678                 DirectoryBase,
4679                 VolumeNumber,
4680                 HandleFlag,
4681         DataTypeFlag,
4682         Reserved5,
4683 ], "Source Information")
4684 DstEnhNWHandlePathS1                 = struct("destination_nwhandle", [
4685                 DirectoryBase,
4686                 VolumeNumber,
4687                 HandleFlag,
4688         DataTypeFlag,
4689         Reserved5,
4690 ], "Destination Information")
4691 KnownServStruc                  = struct("known_server_struct", [
4692         ServerAddress,
4693         HopsToNet,
4694         ServerNameStringz,
4695 ], "Known Servers")
4696 LANConfigInfo                   = struct("lan_cfg_info", [
4697         LANdriverCFG_MajorVersion,
4698         LANdriverCFG_MinorVersion,
4699         LANdriverNodeAddress,
4700         Reserved,
4701         LANdriverModeFlags,
4702         LANdriverBoardNumber,
4703         LANdriverBoardInstance,
4704         LANdriverMaximumSize,
4705         LANdriverMaxRecvSize,
4706         LANdriverRecvSize,
4707         LANdriverCardID,
4708         LANdriverMediaID,
4709         LANdriverTransportTime,
4710         LANdriverSrcRouting,
4711         LANdriverLineSpeed,
4712         LANdriverReserved,
4713         LANdriverMajorVersion,
4714         LANdriverMinorVersion,
4715         LANdriverFlags,
4716         LANdriverSendRetries,
4717         LANdriverLink,
4718         LANdriverSharingFlags,
4719         LANdriverSlot,
4720         LANdriverIOPortsAndRanges1,
4721         LANdriverIOPortsAndRanges2,
4722         LANdriverIOPortsAndRanges3,
4723         LANdriverIOPortsAndRanges4,
4724         LANdriverMemoryDecode0,
4725         LANdriverMemoryLength0,
4726         LANdriverMemoryDecode1,
4727         LANdriverMemoryLength1,
4728         LANdriverInterrupt1,
4729         LANdriverInterrupt2,
4730         LANdriverDMAUsage1,
4731         LANdriverDMAUsage2,
4732         LANdriverLogicalName,
4733         LANdriverIOReserved,
4734         LANdriverCardName,
4735 ], "LAN Configuration Information")
4736 LastAccessStruct                = struct("last_access_struct", [
4737         LastAccessedDate,
4738 ])
4739 lockInfo                        = struct("lock_info_struct", [
4740         LogicalLockThreshold,
4741         PhysicalLockThreshold,
4742         FileLockCount,
4743         RecordLockCount,
4744 ], "Lock Information")
4745 LockStruct                      = struct("lock_struct", [
4746         TaskNumByte,
4747         LockType,
4748         RecordStart,
4749         RecordEnd,
4750 ], "Locks")
4751 LoginTime                       = struct("login_time", [
4752         Year,
4753         Month,
4754         Day,
4755         Hour,
4756         Minute,
4757         Second,
4758         DayOfWeek,
4759 ], "Login Time")
4760 LogLockStruct                   = struct("log_lock_struct", [
4761         TaskNumberWord,
4762         LockStatus,
4763         LockName,
4764 ], "Logical Locks")
4765 LogRecStruct                    = struct("log_rec_struct", [
4766         ConnectionNumberWord,
4767         TaskNumByte,
4768         LockStatus,
4769 ], "Logical Record Locks")
4770 LSLInformation                  = struct("lsl_information", [
4771         uint32("rx_buffers", "Receive Buffers"),
4772         uint32("rx_buffers_75", "Receive Buffers Warning Level"),
4773         uint32("rx_buffers_checked_out", "Receive Buffers Checked Out Count"),
4774         uint32("rx_buffer_size", "Receive Buffer Size"),
4775         uint32("max_phy_packet_size", "Maximum Physical Packet Size"),
4776         uint32("last_time_rx_buff_was_alloc", "Last Time a Receive Buffer was Allocated"),
4777         uint32("max_num_of_protocols", "Maximum Number of Protocols"),
4778         uint32("max_num_of_media_types", "Maximum Number of Media Types"),
4779         uint32("total_tx_packets", "Total Transmit Packets"),
4780         uint32("get_ecb_buf", "Get ECB Buffers"),
4781         uint32("get_ecb_fails", "Get ECB Failures"),
4782         uint32("aes_event_count", "AES Event Count"),
4783         uint32("post_poned_events", "Postponed Events"),
4784         uint32("ecb_cxl_fails", "ECB Cancel Failures"),
4785         uint32("valid_bfrs_reused", "Valid Buffers Reused"),
4786         uint32("enqueued_send_cnt", "Enqueued Send Count"),
4787         uint32("total_rx_packets", "Total Receive Packets"),
4788         uint32("unclaimed_packets", "Unclaimed Packets"),
4789         uint8("stat_table_major_version", "Statistics Table Major Version"),
4790         uint8("stat_table_minor_version", "Statistics Table Minor Version"),
4791 ], "LSL Information")
4792 MaximumSpaceStruct              = struct("max_space_struct", [
4793         MaxSpace,
4794 ])
4795 MemoryCounters                  = struct("memory_counters", [
4796         uint32("orig_num_cache_buff", "Original Number Of Cache Buffers"),
4797         uint32("curr_num_cache_buff", "Current Number Of Cache Buffers"),
4798         uint32("cache_dirty_block_thresh", "Cache Dirty Block Threshold"),
4799         uint32("wait_node", "Wait Node Count"),
4800         uint32("wait_node_alloc_fail", "Wait Node Alloc Failure Count"),
4801         uint32("move_cache_node", "Move Cache Node Count"),
4802         uint32("move_cache_node_from_avai", "Move Cache Node From Avail Count"),
4803         uint32("accel_cache_node_write", "Accelerate Cache Node Write Count"),
4804         uint32("rem_cache_node", "Remove Cache Node Count"),
4805         uint32("rem_cache_node_from_avail", "Remove Cache Node From Avail Count"),
4806 ], "Memory Counters")
4807 MLIDBoardInfo                   = struct("mlid_board_info", [
4808         uint32("protocol_board_num", "Protocol Board Number"),
4809         uint16("protocol_number", "Protocol Number"),
4810         bytes("protocol_id", "Protocol ID", 6),
4811         nstring8("protocol_name", "Protocol Name"),
4812 ], "MLID Board Information")
4813 ModifyInfoStruct                = struct("modify_info_struct", [
4814         ModifiedTime,
4815         ModifiedDate,
4816         endian(ModifierID, LE),
4817         LastAccessedDate,
4818 ], "Modification Information")
4819 nameInfo                        = struct("name_info_struct", [
4820         ObjectType,
4821         nstring8("login_name", "Login Name"),
4822 ], "Name Information")
4823 NCPNetworkAddress               = struct("ncp_network_address_struct", [
4824         TransportType,
4825         Reserved3,
4826         NetAddress,
4827 ], "Network Address")
4828
4829 netAddr                         = struct("net_addr_struct", [
4830         TransportType,
4831         nbytes32("transport_addr", "Transport Address"),
4832 ], "Network Address")
4833
4834 NetWareInformationStruct        = struct("netware_information_struct", [
4835         DataStreamSpaceAlloc,           # (Data Stream Alloc Bit)
4836         AttributesDef32,                # (Attributes Bit)
4837         FlagsDef,
4838         DataStreamSize,                 # (Data Stream Size Bit)
4839         TotalDataStreamDiskSpaceAlloc,  # (Total Stream Size Bit)
4840         NumberOfDataStreams,
4841         CreationTime,                   # (Creation Bit)
4842         CreationDate,
4843         CreatorID,
4844         ModifiedTime,                   # (Modify Bit)
4845         ModifiedDate,
4846         ModifierID,
4847         LastAccessedDate,
4848         ArchivedTime,                   # (Archive Bit)
4849         ArchivedDate,
4850         ArchiverID,
4851         InheritedRightsMask,            # (Rights Bit)
4852         DirectoryEntryNumber,           # (Directory Entry Bit)
4853         DOSDirectoryEntryNumber,
4854         VolumeNumberLong,
4855         EADataSize,                     # (Extended Attribute Bit)
4856         EACount,
4857         EAKeySize,
4858         CreatorNameSpaceNumber,         # (Name Space Bit)
4859         Reserved3,
4860 ], "NetWare Information")
4861 NLMInformation                  = struct("nlm_information", [
4862         IdentificationNumber,
4863         NLMFlags,
4864         Reserved3,
4865         NLMType,
4866         Reserved3,
4867         ParentID,
4868         MajorVersion,
4869         MinorVersion,
4870         Revision,
4871         Year,
4872         Reserved3,
4873         Month,
4874         Reserved3,
4875         Day,
4876         Reserved3,
4877         AllocAvailByte,
4878         AllocFreeCount,
4879         LastGarbCollect,
4880         MessageLanguage,
4881         NumberOfReferencedPublics,
4882 ], "NLM Information")
4883 NSInfoStruct                    = struct("ns_info_struct", [
4884         CreatorNameSpaceNumber,
4885     Reserved3,
4886 ])
4887 NWAuditStatus                   = struct("nw_audit_status", [
4888         AuditVersionDate,
4889         AuditFileVersionDate,
4890         val_string16("audit_enable_flag", "Auditing Enabled Flag", [
4891                 [ 0x0000, "Auditing Disabled" ],
4892                 [ 0x0001, "Auditing Enabled" ],
4893         ]),
4894         Reserved2,
4895         uint32("audit_file_size", "Audit File Size"),
4896         uint32("modified_counter", "Modified Counter"),
4897         uint32("audit_file_max_size", "Audit File Maximum Size"),
4898         uint32("audit_file_size_threshold", "Audit File Size Threshold"),
4899         uint32("audit_record_count", "Audit Record Count"),
4900         uint32("auditing_flags", "Auditing Flags"),
4901 ], "NetWare Audit Status")
4902 ObjectSecurityStruct            = struct("object_security_struct", [
4903         ObjectSecurity,
4904 ])
4905 ObjectFlagsStruct               = struct("object_flags_struct", [
4906         ObjectFlags,
4907 ])
4908 ObjectTypeStruct                = struct("object_type_struct", [
4909         endian(ObjectType, BE),
4910         Reserved2,
4911 ])
4912 ObjectNameStruct                = struct("object_name_struct", [
4913         ObjectNameStringz,
4914 ])
4915 ObjectIDStruct                  = struct("object_id_struct", [
4916         ObjectID,
4917         Restriction,
4918 ])
4919 OpnFilesStruct                  = struct("opn_files_struct", [
4920         TaskNumberWord,
4921         LockType,
4922         AccessControl,
4923         LockFlag,
4924         VolumeNumber,
4925         DOSParentDirectoryEntry,
4926         DOSDirectoryEntry,
4927         ForkCount,
4928         NameSpace,
4929         FileName,
4930 ], "Open Files Information")
4931 OwnerIDStruct                   = struct("owner_id_struct", [
4932         CreatorID,
4933 ])
4934 PacketBurstInformation          = struct("packet_burst_information", [
4935         uint32("big_invalid_slot", "Big Invalid Slot Count"),
4936         uint32("big_forged_packet", "Big Forged Packet Count"),
4937         uint32("big_invalid_packet", "Big Invalid Packet Count"),
4938         uint32("big_still_transmitting", "Big Still Transmitting Count"),
4939         uint32("still_doing_the_last_req", "Still Doing The Last Request Count"),
4940         uint32("invalid_control_req", "Invalid Control Request Count"),
4941         uint32("control_invalid_message_number", "Control Invalid Message Number Count"),
4942         uint32("control_being_torn_down", "Control Being Torn Down Count"),
4943         uint32("big_repeat_the_file_read", "Big Repeat the File Read Count"),
4944         uint32("big_send_extra_cc_count", "Big Send Extra CC Count"),
4945         uint32("big_return_abort_mess", "Big Return Abort Message Count"),
4946         uint32("big_read_invalid_mess", "Big Read Invalid Message Number Count"),
4947         uint32("big_read_do_it_over", "Big Read Do It Over Count"),
4948         uint32("big_read_being_torn_down", "Big Read Being Torn Down Count"),
4949         uint32("previous_control_packet", "Previous Control Packet Count"),
4950         uint32("send_hold_off_message", "Send Hold Off Message Count"),
4951         uint32("big_read_no_data_avail", "Big Read No Data Available Count"),
4952         uint32("big_read_trying_to_read", "Big Read Trying To Read Too Much Count"),
4953         uint32("async_read_error", "Async Read Error Count"),
4954         uint32("big_read_phy_read_err", "Big Read Physical Read Error Count"),
4955         uint32("ctl_bad_ack_frag_list", "Control Bad ACK Fragment List Count"),
4956         uint32("ctl_no_data_read", "Control No Data Read Count"),
4957         uint32("write_dup_req", "Write Duplicate Request Count"),
4958         uint32("shouldnt_be_ack_here", "Shouldn't Be ACKing Here Count"),
4959         uint32("write_incon_packet_len", "Write Inconsistent Packet Lengths Count"),
4960         uint32("first_packet_isnt_a_write", "First Packet Isn't A Write Count"),
4961         uint32("write_trash_dup_req", "Write Trashed Duplicate Request Count"),
4962         uint32("big_write_inv_message_num", "Big Write Invalid Message Number Count"),
4963         uint32("big_write_being_torn_down", "Big Write Being Torn Down Count"),
4964         uint32("big_write_being_abort", "Big Write Being Aborted Count"),
4965         uint32("zero_ack_frag", "Zero ACK Fragment Count"),
4966         uint32("write_curr_trans", "Write Currently Transmitting Count"),
4967         uint32("try_to_write_too_much", "Trying To Write Too Much Count"),
4968         uint32("write_out_of_mem_for_ctl_nodes", "Write Out Of Memory For Control Nodes Count"),
4969         uint32("write_didnt_need_this_frag", "Write Didn't Need This Fragment Count"),
4970         uint32("write_too_many_buf_check", "Write Too Many Buffers Checked Out Count"),
4971         uint32("write_timeout", "Write Time Out Count"),
4972         uint32("write_got_an_ack0", "Write Got An ACK Count 0"),
4973         uint32("write_got_an_ack1", "Write Got An ACK Count 1"),
4974         uint32("poll_abort_conn", "Poller Aborted The Connection Count"),
4975         uint32("may_had_out_of_order", "Maybe Had Out Of Order Writes Count"),
4976         uint32("had_an_out_of_order", "Had An Out Of Order Write Count"),
4977         uint32("moved_the_ack_bit_dn", "Moved The ACK Bit Down Count"),
4978         uint32("bumped_out_of_order", "Bumped Out Of Order Write Count"),
4979         uint32("poll_rem_old_out_of_order", "Poller Removed Old Out Of Order Count"),
4980         uint32("write_didnt_need_but_req_ack", "Write Didn't Need But Requested ACK Count"),
4981         uint32("write_trash_packet", "Write Trashed Packet Count"),
4982         uint32("too_many_ack_frag", "Too Many ACK Fragments Count"),
4983         uint32("saved_an_out_of_order_packet", "Saved An Out Of Order Packet Count"),
4984         uint32("conn_being_aborted", "Connection Being Aborted Count"),
4985 ], "Packet Burst Information")
4986
4987 PadDSSpaceAllocate              = struct("pad_ds_space_alloc", [
4988     Reserved4,
4989 ])
4990 PadAttributes                   = struct("pad_attributes", [
4991     Reserved6,
4992 ])
4993 PadDataStreamSize               = struct("pad_data_stream_size", [
4994     Reserved4,
4995 ])
4996 PadTotalStreamSize              = struct("pad_total_stream_size", [
4997     Reserved6,
4998 ])
4999 PadCreationInfo                 = struct("pad_creation_info", [
5000     Reserved8,
5001 ])
5002 PadModifyInfo                   = struct("pad_modify_info", [
5003     Reserved10,
5004 ])
5005 PadArchiveInfo                  = struct("pad_archive_info", [
5006     Reserved8,
5007 ])
5008 PadRightsInfo                   = struct("pad_rights_info", [
5009     Reserved2,
5010 ])
5011 PadDirEntry                     = struct("pad_dir_entry", [
5012     Reserved12,
5013 ])
5014 PadEAInfo                       = struct("pad_ea_info", [
5015     Reserved12,
5016 ])
5017 PadNSInfo                       = struct("pad_ns_info", [
5018     Reserved4,
5019 ])
5020 PhyLockStruct                   = struct("phy_lock_struct", [
5021         LoggedCount,
5022         ShareableLockCount,
5023         RecordStart,
5024         RecordEnd,
5025         LogicalConnectionNumber,
5026         TaskNumByte,
5027         LockType,
5028 ], "Physical Locks")
5029 printInfo                       = struct("print_info_struct", [
5030         PrintFlags,
5031         TabSize,
5032         Copies,
5033         PrintToFileFlag,
5034         BannerName,
5035         TargetPrinter,
5036         FormType,
5037 ], "Print Information")
5038 ReplyLevel1Struct       = struct("reply_lvl_1_struct", [
5039     DirHandle,
5040     VolumeNumber,
5041     Reserved4,
5042 ], "Reply Level 1")
5043 ReplyLevel2Struct       = struct("reply_lvl_2_struct", [
5044     VolumeNumberLong,
5045     DirectoryBase,
5046     DOSDirectoryBase,
5047     NameSpace,
5048     DirHandle,
5049 ], "Reply Level 2")
5050 RightsInfoStruct                = struct("rights_info_struct", [
5051         InheritedRightsMask,
5052 ])
5053 RoutersInfo                     = struct("routers_info", [
5054         bytes("node", "Node", 6),
5055         ConnectedLAN,
5056         uint16("route_hops", "Hop Count"),
5057         uint16("route_time", "Route Time"),
5058 ], "Router Information")
5059 RTagStructure                   = struct("r_tag_struct", [
5060         RTagNumber,
5061         ResourceSignature,
5062         ResourceCount,
5063         ResourceName,
5064 ], "Resource Tag")
5065 ScanInfoFileName                = struct("scan_info_file_name", [
5066         SalvageableFileEntryNumber,
5067         FileName,
5068 ])
5069 ScanInfoFileNoName              = struct("scan_info_file_no_name", [
5070         SalvageableFileEntryNumber,
5071 ])
5072 SeachSequenceStruct             = struct("search_seq", [
5073         VolumeNumber,
5074         DirectoryEntryNumber,
5075         SequenceNumber,
5076 ], "Search Sequence")
5077 Segments                        = struct("segments", [
5078         uint32("volume_segment_dev_num", "Volume Segment Device Number"),
5079         uint32("volume_segment_offset", "Volume Segment Offset"),
5080         uint32("volume_segment_size", "Volume Segment Size"),
5081 ], "Volume Segment Information")
5082 SemaInfoStruct                  = struct("sema_info_struct", [
5083         LogicalConnectionNumber,
5084         TaskNumByte,
5085 ])
5086 SemaStruct                      = struct("sema_struct", [
5087         OpenCount,
5088         SemaphoreValue,
5089         TaskNumberWord,
5090         SemaphoreName,
5091 ], "Semaphore Information")
5092 ServerInfo                      = struct("server_info", [
5093         uint32("reply_canceled", "Reply Canceled Count"),
5094         uint32("write_held_off", "Write Held Off Count"),
5095         uint32("write_held_off_with_dup", "Write Held Off With Duplicate Request"),
5096         uint32("invalid_req_type", "Invalid Request Type Count"),
5097         uint32("being_aborted", "Being Aborted Count"),
5098         uint32("already_doing_realloc", "Already Doing Re-Allocate Count"),
5099         uint32("dealloc_invalid_slot", "De-Allocate Invalid Slot Count"),
5100         uint32("dealloc_being_proc", "De-Allocate Being Processed Count"),
5101         uint32("dealloc_forged_packet", "De-Allocate Forged Packet Count"),
5102         uint32("dealloc_still_transmit", "De-Allocate Still Transmitting Count"),
5103         uint32("start_station_error", "Start Station Error Count"),
5104         uint32("invalid_slot", "Invalid Slot Count"),
5105         uint32("being_processed", "Being Processed Count"),
5106         uint32("forged_packet", "Forged Packet Count"),
5107         uint32("still_transmitting", "Still Transmitting Count"),
5108         uint32("reexecute_request", "Re-Execute Request Count"),
5109         uint32("invalid_sequence_number", "Invalid Sequence Number Count"),
5110         uint32("dup_is_being_sent", "Duplicate Is Being Sent Already Count"),
5111         uint32("sent_pos_ack", "Sent Positive Acknowledge Count"),
5112         uint32("sent_a_dup_reply", "Sent A Duplicate Reply Count"),
5113         uint32("no_mem_for_station", "No Memory For Station Control Count"),
5114         uint32("no_avail_conns", "No Available Connections Count"),
5115         uint32("realloc_slot", "Re-Allocate Slot Count"),
5116         uint32("realloc_slot_came_too_soon", "Re-Allocate Slot Came Too Soon Count"),
5117 ], "Server Information")
5118 ServersSrcInfo                  = struct("servers_src_info", [
5119         ServerNode,
5120         ConnectedLAN,
5121         HopsToNet,
5122 ], "Source Server Information")
5123 SpaceStruct                     = struct("space_struct", [
5124         Level,
5125         MaxSpace,
5126         CurrentSpace,
5127 ], "Space Information")
5128 SPXInformation                  = struct("spx_information", [
5129         uint16("spx_max_conn", "SPX Max Connections Count"),
5130         uint16("spx_max_used_conn", "SPX Max Used Connections"),
5131         uint16("spx_est_conn_req", "SPX Establish Connection Requests"),
5132         uint16("spx_est_conn_fail", "SPX Establish Connection Fail"),
5133         uint16("spx_listen_con_req", "SPX Listen Connect Request"),
5134         uint16("spx_listen_con_fail", "SPX Listen Connect Fail"),
5135         uint32("spx_send", "SPX Send Count"),
5136         uint32("spx_window_choke", "SPX Window Choke Count"),
5137         uint16("spx_bad_send", "SPX Bad Send Count"),
5138         uint16("spx_send_fail", "SPX Send Fail Count"),
5139         uint16("spx_abort_conn", "SPX Aborted Connection"),
5140         uint32("spx_listen_pkt", "SPX Listen Packet Count"),
5141         uint16("spx_bad_listen", "SPX Bad Listen Count"),
5142         uint32("spx_incoming_pkt", "SPX Incoming Packet Count"),
5143         uint16("spx_bad_in_pkt", "SPX Bad In Packet Count"),
5144         uint16("spx_supp_pkt", "SPX Suppressed Packet Count"),
5145         uint16("spx_no_ses_listen", "SPX No Session Listen ECB Count"),
5146         uint16("spx_watch_dog", "SPX Watch Dog Destination Session Count"),
5147 ], "SPX Information")
5148 StackInfo                       = struct("stack_info", [
5149         StackNumber,
5150         fw_string("stack_short_name", "Stack Short Name", 16),
5151 ], "Stack Information")
5152 statsInfo                       = struct("stats_info_struct", [
5153         TotalBytesRead,
5154         TotalBytesWritten,
5155         TotalRequest,
5156 ], "Statistics")
5157 TaskStruct                       = struct("task_struct", [
5158         TaskNumberWord,
5159         TaskState,
5160 ], "Task Information")
5161 theTimeStruct                   = struct("the_time_struct", [
5162         UTCTimeInSeconds,
5163         FractionalSeconds,
5164         TimesyncStatus,
5165 ])
5166 timeInfo                        = struct("time_info", [
5167         Year,
5168         Month,
5169         Day,
5170         Hour,
5171         Minute,
5172         Second,
5173         DayOfWeek,
5174         uint32("login_expiration_time", "Login Expiration Time"),
5175 ])
5176 TotalStreamSizeStruct           = struct("total_stream_size_struct", [
5177     TtlDSDskSpaceAlloc,
5178         NumberOfDataStreams,
5179 ])
5180 TrendCounters                   = struct("trend_counters", [
5181         uint32("num_of_cache_checks", "Number Of Cache Checks"),
5182         uint32("num_of_cache_hits", "Number Of Cache Hits"),
5183         uint32("num_of_dirty_cache_checks", "Number Of Dirty Cache Checks"),
5184         uint32("num_of_cache_dirty_checks", "Number Of Cache Dirty Checks"),
5185         uint32("cache_used_while_check", "Cache Used While Checking"),
5186         uint32("wait_till_dirty_blcks_dec", "Wait Till Dirty Blocks Decrease Count"),
5187         uint32("alloc_blck_frm_avail", "Allocate Block From Available Count"),
5188         uint32("alloc_blck_frm_lru", "Allocate Block From LRU Count"),
5189         uint32("alloc_blck_already_wait", "Allocate Block Already Waiting"),
5190         uint32("lru_sit_time", "LRU Sitting Time"),
5191         uint32("num_of_cache_check_no_wait", "Number Of Cache Check No Wait"),
5192         uint32("num_of_cache_hits_no_wait", "Number Of Cache Hits No Wait"),
5193 ], "Trend Counters")
5194 TrusteeStruct                   = struct("trustee_struct", [
5195         endian(ObjectID, LE),
5196         AccessRightsMaskWord,
5197 ])
5198 UpdateDateStruct                = struct("update_date_struct", [
5199         UpdateDate,
5200 ])
5201 UpdateIDStruct                  = struct("update_id_struct", [
5202         UpdateID,
5203 ])
5204 UpdateTimeStruct                = struct("update_time_struct", [
5205         UpdateTime,
5206 ])
5207 UserInformation                 = struct("user_info", [
5208         endian(ConnectionNumber, LE),
5209         UseCount,
5210         Reserved2,
5211         ConnectionServiceType,
5212         Year,
5213         Month,
5214         Day,
5215         Hour,
5216         Minute,
5217         Second,
5218         DayOfWeek,
5219         Status,
5220         Reserved2,
5221         ExpirationTime,
5222         ObjectType,
5223         Reserved2,
5224         TransactionTrackingFlag,
5225         LogicalLockThreshold,
5226         FileWriteFlags,
5227         FileWriteState,
5228         Reserved,
5229         FileLockCount,
5230         RecordLockCount,
5231         TotalBytesRead,
5232         TotalBytesWritten,
5233         TotalRequest,
5234         HeldRequests,
5235         HeldBytesRead,
5236         HeldBytesWritten,
5237 ], "User Information")
5238 VolInfoStructure                = struct("vol_info_struct", [
5239         VolumeType,
5240         Reserved2,
5241         StatusFlagBits,
5242         SectorSize,
5243         SectorsPerClusterLong,
5244         VolumeSizeInClusters,
5245         FreedClusters,
5246         SubAllocFreeableClusters,
5247         FreeableLimboSectors,
5248         NonFreeableLimboSectors,
5249         NonFreeableAvailableSubAllocSectors,
5250         NotUsableSubAllocSectors,
5251         SubAllocClusters,
5252         DataStreamsCount,
5253         LimboDataStreamsCount,
5254         OldestDeletedFileAgeInTicks,
5255         CompressedDataStreamsCount,
5256         CompressedLimboDataStreamsCount,
5257         UnCompressableDataStreamsCount,
5258         PreCompressedSectors,
5259         CompressedSectors,
5260         MigratedFiles,
5261         MigratedSectors,
5262         ClustersUsedByFAT,
5263         ClustersUsedByDirectories,
5264         ClustersUsedByExtendedDirectories,
5265         TotalDirectoryEntries,
5266         UnUsedDirectoryEntries,
5267         TotalExtendedDirectoryExtents,
5268         UnUsedExtendedDirectoryExtents,
5269         ExtendedAttributesDefined,
5270         ExtendedAttributeExtentsUsed,
5271         DirectoryServicesObjectID,
5272         VolumeLastModifiedTime,
5273         VolumeLastModifiedDate,
5274 ], "Volume Information")
5275 VolInfo2Struct                  = struct("vol_info_struct_2", [
5276         uint32("volume_active_count", "Volume Active Count"),
5277         uint32("volume_use_count", "Volume Use Count"),
5278         uint32("mac_root_ids", "MAC Root IDs"),
5279         VolumeLastModifiedTime,
5280         VolumeLastModifiedDate,
5281         uint32("volume_reference_count", "Volume Reference Count"),
5282         uint32("compression_lower_limit", "Compression Lower Limit"),
5283         uint32("outstanding_ios", "Outstanding IOs"),
5284         uint32("outstanding_compression_ios", "Outstanding Compression IOs"),
5285         uint32("compression_ios_limit", "Compression IOs Limit"),
5286 ], "Extended Volume Information")
5287 VolumeWithNameStruct                    = struct("volume_with_name_struct", [
5288         VolumeNumberLong,
5289         VolumeNameLen,
5290 ])
5291 VolumeStruct                    = struct("volume_struct", [
5292         VolumeNumberLong,
5293 ])
5294 DataStreamsStruct               = struct("number_of_data_streams_struct", [
5295     NumberOfDataStreamsLong,
5296 ])
5297
5298 ##############################################################################
5299 # NCP Groups
5300 ##############################################################################
5301 def define_groups():
5302     groups['accounting']    = "Accounting"
5303     groups['afp']           = "AFP"
5304     groups['auditing']      = "Auditing"
5305     groups['bindery']       = "Bindery"
5306     groups['connection']    = "Connection"
5307     groups['enhanced']      = "Enhanced File System"
5308     groups['extended']      = "Extended Attribute"
5309     groups['extension']     = "NCP Extension"
5310     groups['file']          = "File System"
5311     groups['fileserver']    = "File Server Environment"
5312     groups['message']       = "Message"
5313     groups['migration']     = "Data Migration"
5314     groups['nds']           = "Novell Directory Services"
5315     groups['pburst']        = "Packet Burst"
5316     groups['print']         = "Print"
5317     groups['remote']        = "Remote"
5318     groups['sync']          = "Synchronization"
5319     groups['tsync']         = "Time Synchronization"
5320     groups['tts']           = "Transaction Tracking"
5321     groups['qms']           = "Queue Management System (QMS)"
5322     groups['stats']         = "Server Statistics"
5323     groups['nmas']          = "Novell Modular Authentication Service"
5324     groups['sss']           = "SecretStore Services"
5325
5326 ##############################################################################
5327 # NCP Errors
5328 ##############################################################################
5329 def define_errors():
5330     errors[0x0000] = "Ok"
5331     errors[0x0001] = "Transaction tracking is available"
5332     errors[0x0002] = "Ok. The data has been written"
5333     errors[0x0003] = "Calling Station is a Manager"
5334
5335     errors[0x0100] = "One or more of the Connection Numbers in the send list are invalid"
5336     errors[0x0101] = "Invalid space limit"
5337     errors[0x0102] = "Insufficient disk space"
5338     errors[0x0103] = "Queue server cannot add jobs"
5339     errors[0x0104] = "Out of disk space"
5340     errors[0x0105] = "Semaphore overflow"
5341     errors[0x0106] = "Invalid Parameter"
5342     errors[0x0107] = "Invalid Number of Minutes to Delay"
5343     errors[0x0108] = "Invalid Start or Network Number"
5344     errors[0x0109] = "Cannot Obtain License"
5345     errors[0x010a] = "No Purgeable Files Available"
5346
5347     errors[0x0200] = "One or more clients in the send list are not logged in"
5348     errors[0x0201] = "Queue server cannot attach"
5349
5350     errors[0x0300] = "One or more clients in the send list are not accepting messages"
5351
5352     errors[0x0400] = "Client already has message"
5353     errors[0x0401] = "Queue server cannot service job"
5354
5355     errors[0x7300] = "Revoke Handle Rights Not Found"
5356     errors[0x7700] = "Buffer Too Small"
5357     errors[0x7900] = "Invalid Parameter in Request Packet"
5358     errors[0x7901] = "Nothing being Compressed"
5359     errors[0x7a00] = "Connection Already Temporary"
5360     errors[0x7b00] = "Connection Already Logged in"
5361     errors[0x7c00] = "Connection Not Authenticated"
5362     errors[0x7d00] = "Connection Not Logged In"
5363
5364     errors[0x7e00] = "NCP failed boundary check"
5365     errors[0x7e01] = "Invalid Length"
5366
5367     errors[0x7f00] = "Lock Waiting"
5368     errors[0x8000] = "Lock fail"
5369     errors[0x8001] = "File in Use"
5370
5371     errors[0x8100] = "A file handle could not be allocated by the file server"
5372     errors[0x8101] = "Out of File Handles"
5373
5374     errors[0x8200] = "Unauthorized to open the file"
5375     errors[0x8300] = "Unable to read/write the volume. Possible bad sector on the file server"
5376     errors[0x8301] = "Hard I/O Error"
5377
5378     errors[0x8400] = "Unauthorized to create the directory"
5379     errors[0x8401] = "Unauthorized to create the file"
5380
5381     errors[0x8500] = "Unauthorized to delete the specified file"
5382     errors[0x8501] = "Unauthorized to overwrite an existing file in this directory"
5383
5384     errors[0x8700] = "An unexpected character was encountered in the filename"
5385     errors[0x8701] = "Create Filename Error"
5386
5387     errors[0x8800] = "Invalid file handle"
5388     errors[0x8900] = "Unauthorized to search this file/directory"
5389     errors[0x8a00] = "Unauthorized to delete this file/directory"
5390     errors[0x8b00] = "Unauthorized to rename a file in this directory"
5391
5392     errors[0x8c00] = "No set privileges"
5393     errors[0x8c01] = "Unauthorized to modify a file in this directory"
5394     errors[0x8c02] = "Unauthorized to change the restriction on this volume"
5395
5396     errors[0x8d00] = "Some of the affected files are in use by another client"
5397     errors[0x8d01] = "The affected file is in use"
5398
5399     errors[0x8e00] = "All of the affected files are in use by another client"
5400     errors[0x8f00] = "Some of the affected files are read-only"
5401
5402     errors[0x9000] = "An attempt to modify a read-only volume occurred"
5403     errors[0x9001] = "All of the affected files are read-only"
5404     errors[0x9002] = "Read Only Access to Volume"
5405
5406     errors[0x9100] = "Some of the affected files already exist"
5407     errors[0x9101] = "Some Names Exist"
5408
5409     errors[0x9200] = "Directory with the new name already exists"
5410     errors[0x9201] = "All of the affected files already exist"
5411
5412     errors[0x9300] = "Unauthorized to read from this file"
5413     errors[0x9400] = "Unauthorized to write to this file"
5414     errors[0x9500] = "The affected file is detached"
5415
5416     errors[0x9600] = "The file server has run out of memory to service this request"
5417     errors[0x9601] = "No alloc space for message"
5418     errors[0x9602] = "Server Out of Space"
5419
5420     errors[0x9800] = "The affected volume is not mounted"
5421     errors[0x9801] = "The volume associated with Volume Number is not mounted"
5422     errors[0x9802] = "The resulting volume does not exist"
5423     errors[0x9803] = "The destination volume is not mounted"
5424     errors[0x9804] = "Disk Map Error"
5425
5426     errors[0x9900] = "The file server has run out of directory space on the affected volume"
5427     errors[0x9a00] = "Invalid request to rename the affected file to another volume"
5428
5429     errors[0x9b00] = "DirHandle is not associated with a valid directory path"
5430     errors[0x9b01] = "A resulting directory handle is not associated with a valid directory path"
5431     errors[0x9b02] = "The directory associated with DirHandle does not exist"
5432     errors[0x9b03] = "Bad directory handle"
5433
5434     errors[0x9c00] = "The resulting path is not valid"
5435     errors[0x9c01] = "The resulting file path is not valid"
5436     errors[0x9c02] = "The resulting directory path is not valid"
5437     errors[0x9c03] = "Invalid path"
5438     errors[0x9c04] = "No more trustees found, based on requested search sequence number"
5439
5440     errors[0x9d00] = "A directory handle was not available for allocation"
5441
5442     errors[0x9e00] = "The name of the directory does not conform to a legal name for this name space"
5443     errors[0x9e01] = "The new directory name does not conform to a legal name for this name space"
5444     errors[0x9e02] = "Bad File Name"
5445
5446     errors[0x9f00] = "The request attempted to delete a directory that is in use by another client"
5447
5448     errors[0xa000] = "The request attempted to delete a directory that is not empty"
5449     errors[0xa100] = "An unrecoverable error occurred on the affected directory"
5450
5451     errors[0xa200] = "The request attempted to read from a file region that is physically locked"
5452     errors[0xa201] = "I/O Lock Error"
5453
5454     errors[0xa400] = "Invalid directory rename attempted"
5455     errors[0xa500] = "Invalid open create mode"
5456     errors[0xa600] = "Auditor Access has been Removed"
5457     errors[0xa700] = "Error Auditing Version"
5458
5459     errors[0xa800] = "Invalid Support Module ID"
5460     errors[0xa801] = "No Auditing Access Rights"
5461     errors[0xa802] = "No Access Rights"
5462
5463     errors[0xa900] = "Error Link in Path"
5464     errors[0xa901] = "Invalid Path With Junction Present"
5465
5466     errors[0xaa00] = "Invalid Data Type Flag"
5467
5468     errors[0xac00] = "Packet Signature Required"
5469
5470     errors[0xbe00] = "Invalid Data Stream"
5471     errors[0xbf00] = "Requests for this name space are not valid on this volume"
5472
5473     errors[0xc000] = "Unauthorized to retrieve accounting data"
5474
5475     errors[0xc100] = "The ACCOUNT_BALANCE property does not exist"
5476     errors[0xc101] = "No Account Balance"
5477
5478     errors[0xc200] = "The object has exceeded its credit limit"
5479     errors[0xc300] = "Too many holds have been placed against this account"
5480     errors[0xc400] = "The client account has been disabled"
5481
5482     errors[0xc500] = "Access to the account has been denied because of intruder detection"
5483     errors[0xc501] = "Login lockout"
5484     errors[0xc502] = "Server Login Locked"
5485
5486     errors[0xc600] = "The caller does not have operator privileges"
5487     errors[0xc601] = "The client does not have operator privileges"
5488
5489     errors[0xc800] = "Missing EA Key"
5490     errors[0xc900] = "EA Not Found"
5491     errors[0xca00] = "Invalid EA Handle Type"
5492     errors[0xcb00] = "EA No Key No Data"
5493     errors[0xcc00] = "EA Number Mismatch"
5494     errors[0xcd00] = "Extent Number Out of Range"
5495     errors[0xce00] = "EA Bad Directory Number"
5496     errors[0xcf00] = "Invalid EA Handle"
5497
5498     errors[0xd000] = "Queue error"
5499     errors[0xd001] = "EA Position Out of Range"
5500
5501     errors[0xd100] = "The queue does not exist"
5502     errors[0xd101] = "EA Access Denied"
5503
5504     errors[0xd200] = "A queue server is not associated with this queue"
5505     errors[0xd201] = "A queue server is not associated with the selected queue"
5506     errors[0xd202] = "No queue server"
5507     errors[0xd203] = "Data Page Odd Size"
5508
5509     errors[0xd300] = "No queue rights"
5510     errors[0xd301] = "EA Volume Not Mounted"
5511
5512     errors[0xd400] = "The queue is full and cannot accept another request"
5513     errors[0xd401] = "The queue associated with ObjectId is full and cannot accept another request"
5514     errors[0xd402] = "Bad Page Boundary"
5515
5516     errors[0xd500] = "A job does not exist in this queue"
5517     errors[0xd501] = "No queue job"
5518     errors[0xd502] = "The job associated with JobNumber does not exist in this queue"
5519     errors[0xd503] = "Inspect Failure"
5520     errors[0xd504] = "Unknown NCP Extension Number"
5521
5522     errors[0xd600] = "The file server does not allow unencrypted passwords"
5523     errors[0xd601] = "No job right"
5524     errors[0xd602] = "EA Already Claimed"
5525
5526     errors[0xd700] = "Bad account"
5527     errors[0xd701] = "The old and new password strings are identical"
5528     errors[0xd702] = "The job is currently being serviced"
5529     errors[0xd703] = "The queue is currently servicing a job"
5530     errors[0xd704] = "Queue servicing"
5531     errors[0xd705] = "Odd Buffer Size"
5532
5533     errors[0xd800] = "Queue not active"
5534     errors[0xd801] = "No Scorecards"
5535
5536     errors[0xd900] = "The file server cannot accept another connection as it has reached its limit"
5537     errors[0xd901] = "The client is not security equivalent to one of the objects in the Q_SERVERS group property of the target queue"
5538     errors[0xd902] = "Queue Station is not a server"
5539     errors[0xd903] = "Bad EDS Signature"
5540     errors[0xd904] = "Attempt to log in using an account which has limits on the number of concurrent connections and that number has been reached."
5541
5542     errors[0xda00] = "Attempted to login to the file server during a restricted time period"
5543     errors[0xda01] = "Queue halted"
5544     errors[0xda02] = "EA Space Limit"
5545
5546     errors[0xdb00] = "Attempted to login to the file server from an unauthorized workstation or network"
5547     errors[0xdb01] = "The queue cannot attach another queue server"
5548     errors[0xdb02] = "Maximum queue servers"
5549     errors[0xdb03] = "EA Key Corrupt"
5550
5551     errors[0xdc00] = "Account Expired"
5552     errors[0xdc01] = "EA Key Limit"
5553
5554     errors[0xdd00] = "Tally Corrupt"
5555     errors[0xde00] = "Attempted to login to the file server with an incorrect password"
5556     errors[0xdf00] = "Attempted to login to the file server with a password that has expired"
5557
5558     errors[0xe000] = "No Login Connections Available"
5559     errors[0xe700] = "No disk track"
5560     errors[0xe800] = "Write to group"
5561     errors[0xe900] = "The object is already a member of the group property"
5562
5563     errors[0xea00] = "No such member"
5564     errors[0xea01] = "The bindery object is not a member of the set"
5565     errors[0xea02] = "Non-existent member"
5566
5567     errors[0xeb00] = "The property is not a set property"
5568
5569     errors[0xec00] = "No such set"
5570     errors[0xec01] = "The set property does not exist"
5571
5572     errors[0xed00] = "Property exists"
5573     errors[0xed01] = "The property already exists"
5574     errors[0xed02] = "An attempt was made to create a bindery object property that already exists"
5575
5576     errors[0xee00] = "The object already exists"
5577     errors[0xee01] = "The bindery object already exists"
5578
5579     errors[0xef00] = "Illegal name"
5580     errors[0xef01] = "Illegal characters in ObjectName field"
5581     errors[0xef02] = "Invalid name"
5582
5583     errors[0xf000] = "A wildcard was detected in a field that does not support wildcards"
5584     errors[0xf001] = "An illegal wildcard was detected in ObjectName"
5585
5586     errors[0xf100] = "The client does not have the rights to access this bindery object"
5587     errors[0xf101] = "Bindery security"
5588     errors[0xf102] = "Invalid bindery security"
5589
5590     errors[0xf200] = "Unauthorized to read from this object"
5591     errors[0xf300] = "Unauthorized to rename this object"
5592
5593     errors[0xf400] = "Unauthorized to delete this object"
5594     errors[0xf401] = "No object delete privileges"
5595     errors[0xf402] = "Unauthorized to delete this queue"
5596
5597     errors[0xf500] = "Unauthorized to create this object"
5598     errors[0xf501] = "No object create"
5599
5600     errors[0xf600] = "No property delete"
5601     errors[0xf601] = "Unauthorized to delete the property of this object"
5602     errors[0xf602] = "Unauthorized to delete this property"
5603
5604     errors[0xf700] = "Unauthorized to create this property"
5605     errors[0xf701] = "No property create privilege"
5606
5607     errors[0xf800] = "Unauthorized to write to this property"
5608     errors[0xf900] = "Unauthorized to read this property"
5609     errors[0xfa00] = "Temporary remap error"
5610
5611     errors[0xfb00] = "No such property"
5612     errors[0xfb01] = "The file server does not support this request"
5613     errors[0xfb02] = "The specified property does not exist"
5614     errors[0xfb03] = "The PASSWORD property does not exist for this bindery object"
5615     errors[0xfb04] = "NDS NCP not available"
5616     errors[0xfb05] = "Bad Directory Handle"
5617     errors[0xfb06] = "Unknown Request"
5618     errors[0xfb07] = "Invalid Subfunction Request"
5619     errors[0xfb08] = "Attempt to use an invalid parameter (drive number, path, or flag value) during a set drive path call"
5620     errors[0xfb09] = "NMAS not running on this server, NCP NOT Supported"
5621     errors[0xfb0a] = "Station Not Logged In"
5622     errors[0xfb0b] = "Secret Store not running on this server, NCP Not supported"
5623
5624     errors[0xfc00] = "The message queue cannot accept another message"
5625     errors[0xfc01] = "The trustee associated with ObjectId does not exist"
5626     errors[0xfc02] = "The specified bindery object does not exist"
5627     errors[0xfc03] = "The bindery object associated with ObjectID does not exist"
5628     errors[0xfc04] = "A bindery object does not exist that matches"
5629     errors[0xfc05] = "The specified queue does not exist"
5630     errors[0xfc06] = "No such object"
5631     errors[0xfc07] = "The queue associated with ObjectID does not exist"
5632
5633     errors[0xfd00] = "Bad station number"
5634     errors[0xfd01] = "The connection associated with ConnectionNumber is not active"
5635     errors[0xfd02] = "Lock collision"
5636     errors[0xfd03] = "Transaction tracking is disabled"
5637
5638     errors[0xfe00] = "I/O failure"
5639     errors[0xfe01] = "The files containing the bindery on the file server are locked"
5640     errors[0xfe02] = "A file with the specified name already exists in this directory"
5641     errors[0xfe03] = "No more restrictions were found"
5642     errors[0xfe04] = "The file server was unable to lock the file within the specified time limit"
5643     errors[0xfe05] = "The file server was unable to lock all files within the specified time limit"
5644     errors[0xfe06] = "The bindery object associated with ObjectID is not a valid trustee"
5645     errors[0xfe07] = "Directory locked"
5646     errors[0xfe08] = "Bindery locked"
5647     errors[0xfe09] = "Invalid semaphore name length"
5648     errors[0xfe0a] = "The file server was unable to complete the operation within the specified time limit"
5649     errors[0xfe0b] = "Transaction restart"
5650     errors[0xfe0c] = "Bad packet"
5651     errors[0xfe0d] = "Timeout"
5652     errors[0xfe0e] = "User Not Found"
5653     errors[0xfe0f] = "Trustee Not Found"
5654
5655     errors[0xff00] = "Failure"
5656     errors[0xff01] = "Lock error"
5657     errors[0xff02] = "File not found"
5658     errors[0xff03] = "The file not found or cannot be unlocked"
5659     errors[0xff04] = "Record not found"
5660     errors[0xff05] = "The logical record was not found"
5661     errors[0xff06] = "The printer associated with Printer Number does not exist"
5662     errors[0xff07] = "No such printer"
5663     errors[0xff08] = "Unable to complete the request"
5664     errors[0xff09] = "Unauthorized to change privileges of this trustee"
5665     errors[0xff0a] = "No files matching the search criteria were found"
5666     errors[0xff0b] = "A file matching the search criteria was not found"
5667     errors[0xff0c] = "Verification failed"
5668     errors[0xff0d] = "Object associated with ObjectID is not a manager"
5669     errors[0xff0e] = "Invalid initial semaphore value"
5670     errors[0xff0f] = "The semaphore handle is not valid"
5671     errors[0xff10] = "SemaphoreHandle is not associated with a valid sempahore"
5672     errors[0xff11] = "Invalid semaphore handle"
5673     errors[0xff12] = "Transaction tracking is not available"
5674     errors[0xff13] = "The transaction has not yet been written to disk"
5675     errors[0xff14] = "Directory already exists"
5676     errors[0xff15] = "The file already exists and the deletion flag was not set"
5677     errors[0xff16] = "No matching files or directories were found"
5678     errors[0xff17] = "A file or directory matching the search criteria was not found"
5679     errors[0xff18] = "The file already exists"
5680     errors[0xff19] = "Failure, No files found"
5681     errors[0xff1a] = "Unlock Error"
5682     errors[0xff1b] = "I/O Bound Error"
5683     errors[0xff1c] = "Not Accepting Messages"
5684     errors[0xff1d] = "No More Salvageable Files in Directory"
5685     errors[0xff1e] = "Calling Station is Not a Manager"
5686     errors[0xff1f] = "Bindery Failure"
5687     errors[0xff20] = "NCP Extension Not Found"
5688     errors[0xff21] = "Audit Property Not Found"
5689     errors[0xff22] = "Server Set Parameter Not Found"
5690
5691 ##############################################################################
5692 # Produce C code
5693 ##############################################################################
5694 def ExamineVars(vars, structs_hash, vars_hash):
5695     for var in vars:
5696         if isinstance(var, struct):
5697             structs_hash[var.HFName()] = var
5698             struct_vars = var.Variables()
5699             ExamineVars(struct_vars, structs_hash, vars_hash)
5700         else:
5701             vars_hash[repr(var)] = var
5702             if isinstance(var, bitfield):
5703                 sub_vars = var.SubVariables()
5704                 ExamineVars(sub_vars, structs_hash, vars_hash)
5705
5706 def produce_code():
5707
5708     global errors
5709
5710     print("/*")
5711     print(" * Do not modify this file. Changes will be overwritten.")
5712     print(" * Generated automatically from %s" % (sys.argv[0]))
5713     print(" */\n")
5714
5715     print("""
5716 /*
5717  * Portions Copyright (c) Gilbert Ramirez 2000-2002
5718  * Portions Copyright (c) Novell, Inc. 2000-2005
5719  *
5720  * This program is free software; you can redistribute it and/or
5721  * modify it under the terms of the GNU General Public License
5722  * as published by the Free Software Foundation; either version 2
5723  * of the License, or (at your option) any later version.
5724  *
5725  * This program is distributed in the hope that it will be useful,
5726  * but WITHOUT ANY WARRANTY; without even the implied warranty of
5727  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5728  * GNU General Public License for more details.
5729  *
5730  * You should have received a copy of the GNU General Public License
5731  * along with this program; if not, write to the Free Software
5732  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
5733  */
5734
5735 #include "config.h"
5736
5737 #include <string.h>
5738 #include <glib.h>
5739 #include <epan/packet.h>
5740 #include <epan/conversation.h>
5741 #include <epan/ptvcursor.h>
5742 #include <epan/emem.h>
5743 #include <epan/strutil.h>
5744 #include <epan/reassemble.h>
5745 #include <epan/tap.h>
5746 #include "packet-ncp-int.h"
5747 #include "packet-ncp-nmas.h"
5748 #include "packet-ncp-sss.h"
5749
5750 /* Function declarations for functions used in proto_register_ncp2222() */
5751 static void ncp_init_protocol(void);
5752 static void ncp_postseq_cleanup(void);
5753
5754 /* Endianness macros */
5755 #define BE              0
5756 #define LE              1
5757 #define NO_ENDIANNESS   0
5758
5759 #define NO_LENGTH       -1
5760
5761 /* We use this int-pointer as a special flag in ptvc_record's */
5762 static int ptvc_struct_int_storage;
5763 #define PTVC_STRUCT     (&ptvc_struct_int_storage)
5764
5765 /* Values used in the count-variable ("var"/"repeat") logic. */""")
5766
5767
5768     if global_highest_var > -1:
5769         print("#define NUM_REPEAT_VARS\t%d" % (global_highest_var + 1))
5770         print("static guint repeat_vars[NUM_REPEAT_VARS];")
5771     else:
5772         print("#define NUM_REPEAT_VARS\t0")
5773         print("static guint *repeat_vars = NULL;")
5774
5775     print("""
5776 #define NO_VAR          NUM_REPEAT_VARS
5777 #define NO_REPEAT       NUM_REPEAT_VARS
5778
5779 #define REQ_COND_SIZE_CONSTANT  0
5780 #define REQ_COND_SIZE_VARIABLE  1
5781 #define NO_REQ_COND_SIZE        0
5782
5783
5784 #define NTREE   0x00020000
5785 #define NDEPTH  0x00000002
5786 #define NREV    0x00000004
5787 #define NFLAGS  0x00000008
5788
5789 static int hf_ncp_func = -1;
5790 static int hf_ncp_length = -1;
5791 static int hf_ncp_subfunc = -1;
5792 static int hf_ncp_group = -1;
5793 static int hf_ncp_fragment_handle = -1;
5794 static int hf_ncp_completion_code = -1;
5795 static int hf_ncp_connection_status = -1;
5796 static int hf_ncp_req_frame_num = -1;
5797 static int hf_ncp_req_frame_time = -1;
5798 static int hf_ncp_fragment_size = -1;
5799 static int hf_ncp_message_size = -1;
5800 static int hf_ncp_nds_flag = -1;
5801 static int hf_ncp_nds_verb = -1;
5802 static int hf_ping_version = -1;
5803 /* static int hf_nds_version = -1; */
5804 /* static int hf_nds_flags = -1; */
5805 static int hf_nds_reply_depth = -1;
5806 static int hf_nds_reply_rev = -1;
5807 static int hf_nds_reply_flags = -1;
5808 static int hf_nds_p1type = -1;
5809 static int hf_nds_uint32value = -1;
5810 static int hf_nds_bit1 = -1;
5811 static int hf_nds_bit2 = -1;
5812 static int hf_nds_bit3 = -1;
5813 static int hf_nds_bit4 = -1;
5814 static int hf_nds_bit5 = -1;
5815 static int hf_nds_bit6 = -1;
5816 static int hf_nds_bit7 = -1;
5817 static int hf_nds_bit8 = -1;
5818 static int hf_nds_bit9 = -1;
5819 static int hf_nds_bit10 = -1;
5820 static int hf_nds_bit11 = -1;
5821 static int hf_nds_bit12 = -1;
5822 static int hf_nds_bit13 = -1;
5823 static int hf_nds_bit14 = -1;
5824 static int hf_nds_bit15 = -1;
5825 static int hf_nds_bit16 = -1;
5826 static int hf_bit1outflags = -1;
5827 static int hf_bit2outflags = -1;
5828 static int hf_bit3outflags = -1;
5829 static int hf_bit4outflags = -1;
5830 static int hf_bit5outflags = -1;
5831 static int hf_bit6outflags = -1;
5832 static int hf_bit7outflags = -1;
5833 static int hf_bit8outflags = -1;
5834 static int hf_bit9outflags = -1;
5835 static int hf_bit10outflags = -1;
5836 static int hf_bit11outflags = -1;
5837 static int hf_bit12outflags = -1;
5838 static int hf_bit13outflags = -1;
5839 static int hf_bit14outflags = -1;
5840 static int hf_bit15outflags = -1;
5841 static int hf_bit16outflags = -1;
5842 static int hf_bit1nflags = -1;
5843 static int hf_bit2nflags = -1;
5844 static int hf_bit3nflags = -1;
5845 static int hf_bit4nflags = -1;
5846 static int hf_bit5nflags = -1;
5847 static int hf_bit6nflags = -1;
5848 static int hf_bit7nflags = -1;
5849 static int hf_bit8nflags = -1;
5850 static int hf_bit9nflags = -1;
5851 static int hf_bit10nflags = -1;
5852 static int hf_bit11nflags = -1;
5853 static int hf_bit12nflags = -1;
5854 static int hf_bit13nflags = -1;
5855 static int hf_bit14nflags = -1;
5856 static int hf_bit15nflags = -1;
5857 static int hf_bit16nflags = -1;
5858 static int hf_bit1rflags = -1;
5859 static int hf_bit2rflags = -1;
5860 static int hf_bit3rflags = -1;
5861 static int hf_bit4rflags = -1;
5862 static int hf_bit5rflags = -1;
5863 static int hf_bit6rflags = -1;
5864 static int hf_bit7rflags = -1;
5865 static int hf_bit8rflags = -1;
5866 static int hf_bit9rflags = -1;
5867 static int hf_bit10rflags = -1;
5868 static int hf_bit11rflags = -1;
5869 static int hf_bit12rflags = -1;
5870 static int hf_bit13rflags = -1;
5871 static int hf_bit14rflags = -1;
5872 static int hf_bit15rflags = -1;
5873 static int hf_bit16rflags = -1;
5874 static int hf_bit1cflags = -1;
5875 static int hf_bit2cflags = -1;
5876 static int hf_bit3cflags = -1;
5877 static int hf_bit4cflags = -1;
5878 static int hf_bit5cflags = -1;
5879 static int hf_bit6cflags = -1;
5880 static int hf_bit7cflags = -1;
5881 static int hf_bit8cflags = -1;
5882 static int hf_bit9cflags = -1;
5883 static int hf_bit10cflags = -1;
5884 static int hf_bit11cflags = -1;
5885 static int hf_bit12cflags = -1;
5886 static int hf_bit13cflags = -1;
5887 static int hf_bit14cflags = -1;
5888 static int hf_bit15cflags = -1;
5889 static int hf_bit16cflags = -1;
5890 static int hf_bit1acflags = -1;
5891 static int hf_bit2acflags = -1;
5892 static int hf_bit3acflags = -1;
5893 static int hf_bit4acflags = -1;
5894 static int hf_bit5acflags = -1;
5895 static int hf_bit6acflags = -1;
5896 static int hf_bit7acflags = -1;
5897 static int hf_bit8acflags = -1;
5898 static int hf_bit9acflags = -1;
5899 static int hf_bit10acflags = -1;
5900 static int hf_bit11acflags = -1;
5901 static int hf_bit12acflags = -1;
5902 static int hf_bit13acflags = -1;
5903 static int hf_bit14acflags = -1;
5904 static int hf_bit15acflags = -1;
5905 static int hf_bit16acflags = -1;
5906 static int hf_bit1vflags = -1;
5907 static int hf_bit2vflags = -1;
5908 static int hf_bit3vflags = -1;
5909 static int hf_bit4vflags = -1;
5910 static int hf_bit5vflags = -1;
5911 static int hf_bit6vflags = -1;
5912 static int hf_bit7vflags = -1;
5913 static int hf_bit8vflags = -1;
5914 static int hf_bit9vflags = -1;
5915 static int hf_bit10vflags = -1;
5916 static int hf_bit11vflags = -1;
5917 static int hf_bit12vflags = -1;
5918 static int hf_bit13vflags = -1;
5919 static int hf_bit14vflags = -1;
5920 static int hf_bit15vflags = -1;
5921 static int hf_bit16vflags = -1;
5922 static int hf_bit1eflags = -1;
5923 static int hf_bit2eflags = -1;
5924 static int hf_bit3eflags = -1;
5925 static int hf_bit4eflags = -1;
5926 static int hf_bit5eflags = -1;
5927 static int hf_bit6eflags = -1;
5928 static int hf_bit7eflags = -1;
5929 static int hf_bit8eflags = -1;
5930 static int hf_bit9eflags = -1;
5931 static int hf_bit10eflags = -1;
5932 static int hf_bit11eflags = -1;
5933 static int hf_bit12eflags = -1;
5934 static int hf_bit13eflags = -1;
5935 static int hf_bit14eflags = -1;
5936 static int hf_bit15eflags = -1;
5937 static int hf_bit16eflags = -1;
5938 static int hf_bit1infoflagsl = -1;
5939 static int hf_bit2infoflagsl = -1;
5940 static int hf_bit3infoflagsl = -1;
5941 static int hf_bit4infoflagsl = -1;
5942 static int hf_bit5infoflagsl = -1;
5943 static int hf_bit6infoflagsl = -1;
5944 static int hf_bit7infoflagsl = -1;
5945 static int hf_bit8infoflagsl = -1;
5946 static int hf_bit9infoflagsl = -1;
5947 static int hf_bit10infoflagsl = -1;
5948 static int hf_bit11infoflagsl = -1;
5949 static int hf_bit12infoflagsl = -1;
5950 static int hf_bit13infoflagsl = -1;
5951 static int hf_bit14infoflagsl = -1;
5952 static int hf_bit15infoflagsl = -1;
5953 static int hf_bit16infoflagsl = -1;
5954 static int hf_bit1infoflagsh = -1;
5955 static int hf_bit2infoflagsh = -1;
5956 static int hf_bit3infoflagsh = -1;
5957 static int hf_bit4infoflagsh = -1;
5958 static int hf_bit5infoflagsh = -1;
5959 static int hf_bit6infoflagsh = -1;
5960 static int hf_bit7infoflagsh = -1;
5961 static int hf_bit8infoflagsh = -1;
5962 static int hf_bit9infoflagsh = -1;
5963 static int hf_bit10infoflagsh = -1;
5964 static int hf_bit11infoflagsh = -1;
5965 static int hf_bit12infoflagsh = -1;
5966 static int hf_bit13infoflagsh = -1;
5967 static int hf_bit14infoflagsh = -1;
5968 static int hf_bit15infoflagsh = -1;
5969 static int hf_bit16infoflagsh = -1;
5970 static int hf_bit1lflags = -1;
5971 static int hf_bit2lflags = -1;
5972 static int hf_bit3lflags = -1;
5973 static int hf_bit4lflags = -1;
5974 static int hf_bit5lflags = -1;
5975 static int hf_bit6lflags = -1;
5976 static int hf_bit7lflags = -1;
5977 static int hf_bit8lflags = -1;
5978 static int hf_bit9lflags = -1;
5979 static int hf_bit10lflags = -1;
5980 static int hf_bit11lflags = -1;
5981 static int hf_bit12lflags = -1;
5982 static int hf_bit13lflags = -1;
5983 static int hf_bit14lflags = -1;
5984 static int hf_bit15lflags = -1;
5985 static int hf_bit16lflags = -1;
5986 static int hf_bit1l1flagsl = -1;
5987 static int hf_bit2l1flagsl = -1;
5988 static int hf_bit3l1flagsl = -1;
5989 static int hf_bit4l1flagsl = -1;
5990 static int hf_bit5l1flagsl = -1;
5991 static int hf_bit6l1flagsl = -1;
5992 static int hf_bit7l1flagsl = -1;
5993 static int hf_bit8l1flagsl = -1;
5994 static int hf_bit9l1flagsl = -1;
5995 static int hf_bit10l1flagsl = -1;
5996 static int hf_bit11l1flagsl = -1;
5997 static int hf_bit12l1flagsl = -1;
5998 static int hf_bit13l1flagsl = -1;
5999 static int hf_bit14l1flagsl = -1;
6000 static int hf_bit15l1flagsl = -1;
6001 static int hf_bit16l1flagsl = -1;
6002 static int hf_bit1l1flagsh = -1;
6003 static int hf_bit2l1flagsh = -1;
6004 static int hf_bit3l1flagsh = -1;
6005 static int hf_bit4l1flagsh = -1;
6006 static int hf_bit5l1flagsh = -1;
6007 static int hf_bit6l1flagsh = -1;
6008 static int hf_bit7l1flagsh = -1;
6009 static int hf_bit8l1flagsh = -1;
6010 static int hf_bit9l1flagsh = -1;
6011 static int hf_bit10l1flagsh = -1;
6012 static int hf_bit11l1flagsh = -1;
6013 static int hf_bit12l1flagsh = -1;
6014 static int hf_bit13l1flagsh = -1;
6015 static int hf_bit14l1flagsh = -1;
6016 static int hf_bit15l1flagsh = -1;
6017 static int hf_bit16l1flagsh = -1;
6018 static int hf_nds_tree_name = -1;
6019 static int hf_nds_reply_error = -1;
6020 static int hf_nds_net = -1;
6021 static int hf_nds_node = -1;
6022 static int hf_nds_socket = -1;
6023 static int hf_add_ref_ip = -1;
6024 static int hf_add_ref_udp = -1;
6025 static int hf_add_ref_tcp = -1;
6026 static int hf_referral_record = -1;
6027 static int hf_referral_addcount = -1;
6028 static int hf_nds_port = -1;
6029 static int hf_mv_string = -1;
6030 static int hf_nds_syntax = -1;
6031 static int hf_value_string = -1;
6032 static int hf_nds_buffer_size = -1;
6033 static int hf_nds_ver = -1;
6034 static int hf_nds_nflags = -1;
6035 static int hf_nds_scope = -1;
6036 static int hf_nds_name = -1;
6037 static int hf_nds_comm_trans = -1;
6038 static int hf_nds_tree_trans = -1;
6039 static int hf_nds_iteration = -1;
6040 static int hf_nds_eid = -1;
6041 static int hf_nds_info_type = -1;
6042 static int hf_nds_all_attr = -1;
6043 static int hf_nds_req_flags = -1;
6044 static int hf_nds_attr = -1;
6045 static int hf_nds_crc = -1;
6046 static int hf_nds_referrals = -1;
6047 static int hf_nds_result_flags = -1;
6048 static int hf_nds_tag_string = -1;
6049 static int hf_value_bytes = -1;
6050 static int hf_replica_type = -1;
6051 static int hf_replica_state = -1;
6052 static int hf_replica_number = -1;
6053 static int hf_min_nds_ver = -1;
6054 static int hf_nds_ver_include = -1;
6055 static int hf_nds_ver_exclude = -1;
6056 /* static int hf_nds_es = -1; */
6057 static int hf_es_type = -1;
6058 /* static int hf_delim_string = -1; */
6059 static int hf_rdn_string = -1;
6060 static int hf_nds_revent = -1;
6061 static int hf_nds_rnum = -1;
6062 static int hf_nds_name_type = -1;
6063 static int hf_nds_rflags = -1;
6064 static int hf_nds_eflags = -1;
6065 static int hf_nds_depth = -1;
6066 static int hf_nds_class_def_type = -1;
6067 static int hf_nds_classes = -1;
6068 static int hf_nds_return_all_classes = -1;
6069 static int hf_nds_stream_flags = -1;
6070 static int hf_nds_stream_name = -1;
6071 static int hf_nds_file_handle = -1;
6072 static int hf_nds_file_size = -1;
6073 static int hf_nds_dn_output_type = -1;
6074 static int hf_nds_nested_output_type = -1;
6075 static int hf_nds_output_delimiter = -1;
6076 static int hf_nds_output_entry_specifier = -1;
6077 static int hf_es_value = -1;
6078 static int hf_es_rdn_count = -1;
6079 static int hf_nds_replica_num = -1;
6080 static int hf_nds_event_num = -1;
6081 static int hf_es_seconds = -1;
6082 static int hf_nds_compare_results = -1;
6083 static int hf_nds_parent = -1;
6084 static int hf_nds_name_filter = -1;
6085 static int hf_nds_class_filter = -1;
6086 static int hf_nds_time_filter = -1;
6087 static int hf_nds_partition_root_id = -1;
6088 static int hf_nds_replicas = -1;
6089 static int hf_nds_purge = -1;
6090 static int hf_nds_local_partition = -1;
6091 static int hf_partition_busy = -1;
6092 static int hf_nds_number_of_changes = -1;
6093 static int hf_sub_count = -1;
6094 static int hf_nds_revision = -1;
6095 static int hf_nds_base_class = -1;
6096 static int hf_nds_relative_dn = -1;
6097 /* static int hf_nds_root_dn = -1; */
6098 /* static int hf_nds_parent_dn = -1; */
6099 static int hf_deref_base = -1;
6100 /* static int hf_nds_entry_info = -1; */
6101 static int hf_nds_base = -1;
6102 static int hf_nds_privileges = -1;
6103 static int hf_nds_vflags = -1;
6104 static int hf_nds_value_len = -1;
6105 static int hf_nds_cflags = -1;
6106 static int hf_nds_acflags = -1;
6107 static int hf_nds_asn1 = -1;
6108 static int hf_nds_upper = -1;
6109 static int hf_nds_lower = -1;
6110 static int hf_nds_trustee_dn = -1;
6111 static int hf_nds_attribute_dn = -1;
6112 static int hf_nds_acl_add = -1;
6113 static int hf_nds_acl_del = -1;
6114 static int hf_nds_att_add = -1;
6115 static int hf_nds_att_del = -1;
6116 static int hf_nds_keep = -1;
6117 static int hf_nds_new_rdn = -1;
6118 static int hf_nds_time_delay = -1;
6119 static int hf_nds_root_name = -1;
6120 static int hf_nds_new_part_id = -1;
6121 static int hf_nds_child_part_id = -1;
6122 static int hf_nds_master_part_id = -1;
6123 static int hf_nds_target_name = -1;
6124 static int hf_nds_super = -1;
6125 static int hf_bit1pingflags2 = -1;
6126 static int hf_bit2pingflags2 = -1;
6127 static int hf_bit3pingflags2 = -1;
6128 static int hf_bit4pingflags2 = -1;
6129 static int hf_bit5pingflags2 = -1;
6130 static int hf_bit6pingflags2 = -1;
6131 static int hf_bit7pingflags2 = -1;
6132 static int hf_bit8pingflags2 = -1;
6133 static int hf_bit9pingflags2 = -1;
6134 static int hf_bit10pingflags2 = -1;
6135 static int hf_bit11pingflags2 = -1;
6136 static int hf_bit12pingflags2 = -1;
6137 static int hf_bit13pingflags2 = -1;
6138 static int hf_bit14pingflags2 = -1;
6139 static int hf_bit15pingflags2 = -1;
6140 static int hf_bit16pingflags2 = -1;
6141 static int hf_bit1pingflags1 = -1;
6142 static int hf_bit2pingflags1 = -1;
6143 static int hf_bit3pingflags1 = -1;
6144 static int hf_bit4pingflags1 = -1;
6145 static int hf_bit5pingflags1 = -1;
6146 static int hf_bit6pingflags1 = -1;
6147 static int hf_bit7pingflags1 = -1;
6148 static int hf_bit8pingflags1 = -1;
6149 static int hf_bit9pingflags1 = -1;
6150 static int hf_bit10pingflags1 = -1;
6151 static int hf_bit11pingflags1 = -1;
6152 static int hf_bit12pingflags1 = -1;
6153 static int hf_bit13pingflags1 = -1;
6154 static int hf_bit14pingflags1 = -1;
6155 static int hf_bit15pingflags1 = -1;
6156 static int hf_bit16pingflags1 = -1;
6157 static int hf_bit1pingpflags1 = -1;
6158 static int hf_bit2pingpflags1 = -1;
6159 static int hf_bit3pingpflags1 = -1;
6160 static int hf_bit4pingpflags1 = -1;
6161 static int hf_bit5pingpflags1 = -1;
6162 static int hf_bit6pingpflags1 = -1;
6163 static int hf_bit7pingpflags1 = -1;
6164 static int hf_bit8pingpflags1 = -1;
6165 static int hf_bit9pingpflags1 = -1;
6166 static int hf_bit10pingpflags1 = -1;
6167 static int hf_bit11pingpflags1 = -1;
6168 static int hf_bit12pingpflags1 = -1;
6169 static int hf_bit13pingpflags1 = -1;
6170 static int hf_bit14pingpflags1 = -1;
6171 static int hf_bit15pingpflags1 = -1;
6172 static int hf_bit16pingpflags1 = -1;
6173 static int hf_bit1pingvflags1 = -1;
6174 static int hf_bit2pingvflags1 = -1;
6175 static int hf_bit3pingvflags1 = -1;
6176 static int hf_bit4pingvflags1 = -1;
6177 static int hf_bit5pingvflags1 = -1;
6178 static int hf_bit6pingvflags1 = -1;
6179 static int hf_bit7pingvflags1 = -1;
6180 static int hf_bit8pingvflags1 = -1;
6181 static int hf_bit9pingvflags1 = -1;
6182 static int hf_bit10pingvflags1 = -1;
6183 static int hf_bit11pingvflags1 = -1;
6184 static int hf_bit12pingvflags1 = -1;
6185 static int hf_bit13pingvflags1 = -1;
6186 static int hf_bit14pingvflags1 = -1;
6187 static int hf_bit15pingvflags1 = -1;
6188 static int hf_bit16pingvflags1 = -1;
6189 static int hf_nds_letter_ver = -1;
6190 static int hf_nds_os_majver = -1;
6191 static int hf_nds_os_minver = -1;
6192 static int hf_nds_lic_flags = -1;
6193 static int hf_nds_ds_time = -1;
6194 static int hf_nds_ping_version = -1;
6195 static int hf_nds_search_scope = -1;
6196 static int hf_nds_num_objects = -1;
6197 static int hf_bit1siflags = -1;
6198 static int hf_bit2siflags = -1;
6199 static int hf_bit3siflags = -1;
6200 static int hf_bit4siflags = -1;
6201 static int hf_bit5siflags = -1;
6202 static int hf_bit6siflags = -1;
6203 static int hf_bit7siflags = -1;
6204 static int hf_bit8siflags = -1;
6205 static int hf_bit9siflags = -1;
6206 static int hf_bit10siflags = -1;
6207 static int hf_bit11siflags = -1;
6208 static int hf_bit12siflags = -1;
6209 static int hf_bit13siflags = -1;
6210 static int hf_bit14siflags = -1;
6211 static int hf_bit15siflags = -1;
6212 static int hf_bit16siflags = -1;
6213 static int hf_nds_segments = -1;
6214 static int hf_nds_segment = -1;
6215 static int hf_nds_segment_overlap = -1;
6216 static int hf_nds_segment_overlap_conflict = -1;
6217 static int hf_nds_segment_multiple_tails = -1;
6218 static int hf_nds_segment_too_long_segment = -1;
6219 static int hf_nds_segment_error = -1;
6220 static int hf_nds_segment_count = -1;
6221 static int hf_nds_reassembled_length = -1;
6222 static int hf_nds_verb2b_req_flags = -1;
6223 static int hf_ncp_ip_address = -1;
6224 static int hf_ncp_copyright = -1;
6225 static int hf_ndsprot1flag = -1;
6226 static int hf_ndsprot2flag = -1;
6227 static int hf_ndsprot3flag = -1;
6228 static int hf_ndsprot4flag = -1;
6229 static int hf_ndsprot5flag = -1;
6230 static int hf_ndsprot6flag = -1;
6231 static int hf_ndsprot7flag = -1;
6232 static int hf_ndsprot8flag = -1;
6233 static int hf_ndsprot9flag = -1;
6234 static int hf_ndsprot10flag = -1;
6235 static int hf_ndsprot11flag = -1;
6236 static int hf_ndsprot12flag = -1;
6237 static int hf_ndsprot13flag = -1;
6238 static int hf_ndsprot14flag = -1;
6239 static int hf_ndsprot15flag = -1;
6240 static int hf_ndsprot16flag = -1;
6241 static int hf_nds_svr_dst_name = -1;
6242 static int hf_nds_tune_mark = -1;
6243 /* static int hf_nds_create_time = -1; */
6244 static int hf_srvr_param_number = -1;
6245 static int hf_srvr_param_boolean = -1;
6246 static int hf_srvr_param_string = -1;
6247 static int hf_nds_svr_time = -1;
6248 static int hf_nds_crt_time = -1;
6249 static int hf_nds_number_of_items = -1;
6250 static int hf_nds_compare_attributes = -1;
6251 static int hf_nds_read_attribute = -1;
6252 static int hf_nds_write_add_delete_attribute = -1;
6253 static int hf_nds_add_delete_self = -1;
6254 static int hf_nds_privilege_not_defined = -1;
6255 static int hf_nds_supervisor = -1;
6256 static int hf_nds_inheritance_control = -1;
6257 static int hf_nds_browse_entry = -1;
6258 static int hf_nds_add_entry = -1;
6259 static int hf_nds_delete_entry = -1;
6260 static int hf_nds_rename_entry = -1;
6261 static int hf_nds_supervisor_entry = -1;
6262 static int hf_nds_entry_privilege_not_defined = -1;
6263 static int hf_nds_iterator = -1;
6264 static int hf_ncp_nds_iterverb = -1;
6265 static int hf_iter_completion_code = -1;
6266 /* static int hf_nds_iterobj = -1; */
6267 static int hf_iter_verb_completion_code = -1;
6268 static int hf_iter_ans = -1;
6269 static int hf_positionable = -1;
6270 static int hf_num_skipped = -1;
6271 static int hf_num_to_skip = -1;
6272 static int hf_timelimit = -1;
6273 static int hf_iter_index = -1;
6274 static int hf_num_to_get = -1;
6275 /* static int hf_ret_info_type = -1; */
6276 static int hf_data_size = -1;
6277 static int hf_this_count = -1;
6278 static int hf_max_entries = -1;
6279 static int hf_move_position = -1;
6280 static int hf_iter_copy = -1;
6281 static int hf_iter_position = -1;
6282 static int hf_iter_search = -1;
6283 static int hf_iter_other = -1;
6284 static int hf_nds_oid = -1;
6285
6286 static expert_field ei_ncp_file_rights_change = EI_INIT;
6287 static expert_field ei_ncp_completion_code = EI_INIT;
6288 static expert_field ei_nds_reply_error = EI_INIT;
6289 static expert_field ei_ncp_destroy_connection = EI_INIT;
6290 static expert_field ei_nds_iteration = EI_INIT;
6291 static expert_field ei_ncp_eid = EI_INIT;
6292 static expert_field ei_ncp_file_handle = EI_INIT;
6293 static expert_field ei_ncp_connection_destroyed = EI_INIT;
6294 static expert_field ei_ncp_no_request_record_found = EI_INIT;
6295 static expert_field ei_ncp_file_rights = EI_INIT;
6296 static expert_field ei_iter_verb_completion_code = EI_INIT;
6297 static expert_field ei_ncp_connection_request = EI_INIT;
6298 static expert_field ei_ncp_connection_status = EI_INIT;
6299 static expert_field ei_ncp_op_lock_handle = EI_INIT;
6300 static expert_field ei_ncp_effective_rights = EI_INIT;
6301 static expert_field ei_ncp_server = EI_INIT;
6302 """)
6303
6304     # Look at all packet types in the packets collection, and cull information
6305     # from them.
6306     errors_used_list = []
6307     errors_used_hash = {}
6308     groups_used_list = []
6309     groups_used_hash = {}
6310     variables_used_hash = {}
6311     structs_used_hash = {}
6312
6313     for pkt in packets:
6314         # Determine which error codes are used.
6315         codes = pkt.CompletionCodes()
6316         for code in codes.Records():
6317             if code not in errors_used_hash:
6318                 errors_used_hash[code] = len(errors_used_list)
6319                 errors_used_list.append(code)
6320
6321         # Determine which groups are used.
6322         group = pkt.Group()
6323         if group not in groups_used_hash:
6324             groups_used_hash[group] = len(groups_used_list)
6325             groups_used_list.append(group)
6326
6327
6328
6329
6330         # Determine which variables are used.
6331         vars = pkt.Variables()
6332         ExamineVars(vars, structs_used_hash, variables_used_hash)
6333
6334
6335     # Print the hf variable declarations
6336     sorted_vars = list(variables_used_hash.values())
6337     sorted_vars.sort()
6338     for var in sorted_vars:
6339         print("static int " + var.HFName() + " = -1;")
6340
6341
6342     # Print the value_string's
6343     for var in sorted_vars:
6344         if isinstance(var, val_string):
6345             print("")
6346             print(var.Code())
6347
6348     # Determine which error codes are not used
6349     errors_not_used = {}
6350     # Copy the keys from the error list...
6351     for code in list(errors.keys()):
6352         errors_not_used[code] = 1
6353     # ... and remove the ones that *were* used.
6354     for code in errors_used_list:
6355         del errors_not_used[code]
6356
6357     # Print a remark showing errors not used
6358     list_errors_not_used = list(errors_not_used.keys())
6359     list_errors_not_used.sort()
6360     for code in list_errors_not_used:
6361         print("/* Error 0x%04x not used: %s */" % (code, errors[code]))
6362     print("\n")
6363
6364     # Print the errors table
6365     print("/* Error strings. */")
6366     print("static const char *ncp_errors[] = {")
6367     for code in errors_used_list:
6368         print('\t/* %02d (0x%04x) */ "%s",' % (errors_used_hash[code], code, errors[code]))
6369     print("};\n")
6370
6371
6372
6373
6374     # Determine which groups are not used
6375     groups_not_used = {}
6376     # Copy the keys from the group list...
6377     for group in list(groups.keys()):
6378         groups_not_used[group] = 1
6379     # ... and remove the ones that *were* used.
6380     for group in groups_used_list:
6381         del groups_not_used[group]
6382
6383     # Print a remark showing groups not used
6384     list_groups_not_used = list(groups_not_used.keys())
6385     list_groups_not_used.sort()
6386     for group in list_groups_not_used:
6387         print("/* Group not used: %s = %s */" % (group, groups[group]))
6388     print("\n")
6389
6390     # Print the groups table
6391     print("/* Group strings. */")
6392     print("static const char *ncp_groups[] = {")
6393     for group in groups_used_list:
6394         print('\t/* %02d (%s) */ "%s",' % (groups_used_hash[group], group, groups[group]))
6395     print("};\n")
6396
6397     # Print the group macros
6398     for group in groups_used_list:
6399         name = str.upper(group)
6400         print("#define NCP_GROUP_%s\t%d" % (name, groups_used_hash[group]))
6401     print("\n")
6402
6403
6404     # Print the conditional_records for all Request Conditions.
6405     num = 0
6406     print("/* Request-Condition dfilter records. The NULL pointer")
6407     print("   is replaced by a pointer to the created dfilter_t. */")
6408     if len(global_req_cond) == 0:
6409         print("static conditional_record req_conds = NULL;")
6410     else:
6411         print("static conditional_record req_conds[] = {")
6412         req_cond_l = list(global_req_cond.keys())
6413         req_cond_l.sort()
6414         for req_cond in req_cond_l:
6415             print("\t{ \"%s\", NULL }," % (req_cond,))
6416             global_req_cond[req_cond] = num
6417             num = num + 1
6418         print("};")
6419     print("#define NUM_REQ_CONDS %d" % (num,))
6420     print("#define NO_REQ_COND   NUM_REQ_CONDS\n\n")
6421
6422
6423
6424     # Print PTVC's for bitfields
6425     ett_list = []
6426     print("/* PTVC records for bit-fields. */")
6427     for var in sorted_vars:
6428         if isinstance(var, bitfield):
6429             sub_vars_ptvc = var.SubVariablesPTVC()
6430             print("/* %s */" % (sub_vars_ptvc.Name()))
6431             print(sub_vars_ptvc.Code())
6432             ett_list.append(sub_vars_ptvc.ETTName())
6433
6434
6435     # Print the PTVC's for structures
6436     print("/* PTVC records for structs. */")
6437     # Sort them
6438     svhash = {}
6439     for svar in list(structs_used_hash.values()):
6440         svhash[svar.HFName()] = svar
6441         if svar.descr:
6442             ett_list.append(svar.ETTName())
6443
6444     struct_vars = list(svhash.keys())
6445     struct_vars.sort()
6446     for varname in struct_vars:
6447         var = svhash[varname]
6448         print(var.Code())
6449
6450     ett_list.sort()
6451
6452     # Print regular PTVC's
6453     print("/* PTVC records. These are re-used to save space. */")
6454     for ptvc in ptvc_lists.Members():
6455         if not ptvc.Null() and not ptvc.Empty():
6456             print(ptvc.Code())
6457
6458     # Print error_equivalency tables
6459     print("/* Error-Equivalency Tables. These are re-used to save space. */")
6460     for compcodes in compcode_lists.Members():
6461         errors = compcodes.Records()
6462         # Make sure the record for error = 0x00 comes last.
6463         print("static const error_equivalency %s[] = {" % (compcodes.Name()))
6464         for error in errors:
6465             error_in_packet = error >> 8;
6466             ncp_error_index = errors_used_hash[error]
6467             print("\t{ 0x%02x, %d }, /* 0x%04x */" % (error_in_packet,
6468                     ncp_error_index, error))
6469         print("\t{ 0x00, -1 }\n};\n")
6470
6471
6472
6473     # Print integer arrays for all ncp_records that need
6474     # a list of req_cond_indexes. Do it "uniquely" to save space;
6475     # if multiple packets share the same set of req_cond's,
6476     # then they'll share the same integer array
6477     print("/* Request Condition Indexes */")
6478     # First, make them unique
6479     req_cond_collection = UniqueCollection("req_cond_collection")
6480     for pkt in packets:
6481         req_conds = pkt.CalculateReqConds()
6482         if req_conds:
6483             unique_list = req_cond_collection.Add(req_conds)
6484             pkt.SetReqConds(unique_list)
6485         else:
6486             pkt.SetReqConds(None)
6487
6488     # Print them
6489     for req_cond in req_cond_collection.Members():
6490         sys.stdout.write("static const int %s[] = {" % (req_cond.Name()))
6491         sys.stdout.write("\t")
6492         vals = []
6493         for text in req_cond.Records():
6494             vals.append(global_req_cond[text])
6495         vals.sort()
6496         for val in vals:
6497             sys.stdout.write("%s, " % (val,))
6498
6499         print("-1 };")
6500         print("")
6501
6502
6503
6504     # Functions without length parameter
6505     funcs_without_length = {}
6506
6507     # Print info string structures
6508     print("/* Info Strings */")
6509     for pkt in packets:
6510         if pkt.req_info_str:
6511             name = pkt.InfoStrName() + "_req"
6512             var = pkt.req_info_str[0]
6513             print("static const info_string_t %s = {" % (name,))
6514             print("\t&%s," % (var.HFName(),))
6515             print('\t"%s",' % (pkt.req_info_str[1],))
6516             print('\t"%s"' % (pkt.req_info_str[2],))
6517             print("};\n")
6518
6519
6520
6521     # Print ncp_record packet records
6522     print("#define SUBFUNC_WITH_LENGTH      0x02")
6523     print("#define SUBFUNC_NO_LENGTH        0x01")
6524     print("#define NO_SUBFUNC               0x00")
6525
6526     print("/* ncp_record structs for packets */")
6527     print("static const ncp_record ncp_packets[] = {")
6528     for pkt in packets:
6529         if pkt.HasSubFunction():
6530             func = pkt.FunctionCode('high')
6531             if pkt.HasLength():
6532                 subfunc_string = "SUBFUNC_WITH_LENGTH"
6533                 # Ensure that the function either has a length param or not
6534                 if func in funcs_without_length:
6535                     sys.exit("Function 0x%04x sometimes has length param, sometimes not." \
6536                             % (pkt.FunctionCode(),))
6537             else:
6538                 subfunc_string = "SUBFUNC_NO_LENGTH"
6539                 funcs_without_length[func] = 1
6540         else:
6541             subfunc_string = "NO_SUBFUNC"
6542         sys.stdout.write('\t{ 0x%02x, 0x%02x, %s, "%s",' % (pkt.FunctionCode('high'),
6543                 pkt.FunctionCode('low'), subfunc_string, pkt.Description()))
6544
6545         print('\t%d /* %s */,' % (groups_used_hash[pkt.Group()], pkt.Group()))
6546
6547         ptvc = pkt.PTVCRequest()
6548         if not ptvc.Null() and not ptvc.Empty():
6549             ptvc_request = ptvc.Name()
6550         else:
6551             ptvc_request = 'NULL'
6552
6553         ptvc = pkt.PTVCReply()
6554         if not ptvc.Null() and not ptvc.Empty():
6555             ptvc_reply = ptvc.Name()
6556         else:
6557             ptvc_reply = 'NULL'
6558
6559         errors = pkt.CompletionCodes()
6560
6561         req_conds_obj = pkt.GetReqConds()
6562         if req_conds_obj:
6563             req_conds = req_conds_obj.Name()
6564         else:
6565             req_conds = "NULL"
6566
6567         if not req_conds_obj:
6568             req_cond_size = "NO_REQ_COND_SIZE"
6569         else:
6570             req_cond_size = pkt.ReqCondSize()
6571             if req_cond_size == None:
6572                 msg.write("NCP packet %s needs a ReqCondSize*() call\n" \
6573                         % (pkt.CName(),))
6574                 sys.exit(1)
6575
6576         if pkt.req_info_str:
6577             req_info_str = "&" + pkt.InfoStrName() + "_req"
6578         else:
6579             req_info_str = "NULL"
6580
6581         print('\t\t%s, %s, %s, %s, %s, %s },\n' % \
6582                 (ptvc_request, ptvc_reply, errors.Name(), req_conds,
6583                 req_cond_size, req_info_str))
6584
6585     print('\t{ 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NO_REQ_COND_SIZE, NULL }')
6586     print("};\n")
6587
6588     print("/* ncp funcs that require a subfunc */")
6589     print("static const guint8 ncp_func_requires_subfunc[] = {")
6590     hi_seen = {}
6591     for pkt in packets:
6592         if pkt.HasSubFunction():
6593             hi_func = pkt.FunctionCode('high')
6594             if hi_func not in hi_seen:
6595                 print("\t0x%02x," % (hi_func))
6596                 hi_seen[hi_func] = 1
6597     print("\t0")
6598     print("};\n")
6599
6600
6601     print("/* ncp funcs that have no length parameter */")
6602     print("static const guint8 ncp_func_has_no_length_parameter[] = {")
6603     funcs = list(funcs_without_length.keys())
6604     funcs.sort()
6605     for func in funcs:
6606         print("\t0x%02x," % (func,))
6607     print("\t0")
6608     print("};\n")
6609
6610     print("")
6611
6612     # proto_register_ncp2222()
6613     print("""
6614 static const value_string ncp_nds_verb_vals[] = {
6615     { 1, "Resolve Name" },
6616     { 2, "Read Entry Information" },
6617     { 3, "Read" },
6618     { 4, "Compare" },
6619     { 5, "List" },
6620     { 6, "Search Entries" },
6621     { 7, "Add Entry" },
6622     { 8, "Remove Entry" },
6623     { 9, "Modify Entry" },
6624     { 10, "Modify RDN" },
6625     { 11, "Create Attribute" },
6626     { 12, "Read Attribute Definition" },
6627     { 13, "Remove Attribute Definition" },
6628     { 14, "Define Class" },
6629     { 15, "Read Class Definition " },
6630     { 16, "Modify Class Definition" },
6631     { 17, "Remove Class Definition" },
6632     { 18, "List Containable Classes" },
6633     { 19, "Get Effective Rights" },
6634     { 20, "Add Partition" },
6635     { 21, "Remove Partition" },
6636     { 22, "List Partitions" },
6637     { 23, "Split Partition" },
6638     { 24, "Join Partitions" },
6639     { 25, "Add Replica" },
6640     { 26, "Remove Replica" },
6641     { 27, "Open Stream" },
6642     { 28, "Search Filter" },
6643     { 29, "Create Subordinate Reference" },
6644     { 30, "Link Replica" },
6645     { 31, "Change Replica Type" },
6646     { 32, "Start Update Schema" },
6647     { 33, "End Update Schema" },
6648     { 34, "Update Schema" },
6649     { 35, "Start Update Replica" },
6650     { 36, "End Update Replica" },
6651     { 37, "Update Replica" },
6652     { 38, "Synchronize Partition" },
6653     { 39, "Synchronize Schema" },
6654     { 40, "Read Syntaxes" },
6655     { 41, "Get Replica Root ID" },
6656     { 42, "Begin Move Entry" },
6657     { 43, "Finish Move Entry" },
6658     { 44, "Release Moved Entry" },
6659     { 45, "Backup Entry" },
6660     { 46, "Restore Entry" },
6661     { 47, "Save DIB (Obsolete)" },
6662     { 48, "Control" },
6663     { 49, "Remove Backlink" },
6664     { 50, "Close Iteration" },
6665     { 51, "Mutate Entry" },
6666     { 52, "Audit Skulking" },
6667     { 53, "Get Server Address" },
6668     { 54, "Set Keys" },
6669     { 55, "Change Password" },
6670     { 56, "Verify Password" },
6671     { 57, "Begin Login" },
6672     { 58, "Finish Login" },
6673     { 59, "Begin Authentication" },
6674     { 60, "Finish Authentication" },
6675     { 61, "Logout" },
6676     { 62, "Repair Ring (Obsolete)" },
6677     { 63, "Repair Timestamps" },
6678     { 64, "Create Back Link" },
6679     { 65, "Delete External Reference" },
6680     { 66, "Rename External Reference" },
6681     { 67, "Create Queue Entry Directory" },
6682     { 68, "Remove Queue Entry Directory" },
6683     { 69, "Merge Entries" },
6684     { 70, "Change Tree Name" },
6685     { 71, "Partition Entry Count" },
6686     { 72, "Check Login Restrictions" },
6687     { 73, "Start Join" },
6688     { 74, "Low Level Split" },
6689     { 75, "Low Level Join" },
6690     { 76, "Abort Partition Operation" },
6691     { 77, "Get All Servers" },
6692     { 78, "Partition Function" },
6693     { 79, "Read References" },
6694     { 80, "Inspect Entry" },
6695     { 81, "Get Remote Entry ID" },
6696     { 82, "Change Security" },
6697     { 83, "Check Console Operator" },
6698     { 84, "Start Move Tree" },
6699     { 85, "Move Tree" },
6700     { 86, "End Move Tree" },
6701     { 87, "Low Level Abort Join" },
6702     { 88, "Check Security Equivalence" },
6703     { 89, "Merge Tree" },
6704     { 90, "Sync External Reference" },
6705     { 91, "Resend Entry" },
6706     { 92, "New Schema Epoch" },
6707     { 93, "Statistics" },
6708     { 94, "Ping" },
6709     { 95, "Get Bindery Contexts" },
6710     { 96, "Monitor Connection" },
6711     { 97, "Get DS Statistics" },
6712     { 98, "Reset DS Counters" },
6713     { 99, "Console" },
6714     { 100, "Read Stream" },
6715     { 101, "Write Stream" },
6716     { 102, "Create Orphan Partition" },
6717     { 103, "Remove Orphan Partition" },
6718     { 104, "Link Orphan Partition" },
6719     { 105, "Set Distributed Reference Link (DRL)" },
6720     { 106, "Available" },
6721     { 107, "Available" },
6722     { 108, "Verify Distributed Reference Link (DRL)" },
6723     { 109, "Verify Partition" },
6724     { 110, "Iterator" },
6725     { 111, "Available" },
6726     { 112, "Close Stream" },
6727     { 113, "Available" },
6728     { 114, "Read Status" },
6729     { 115, "Partition Sync Status" },
6730     { 116, "Read Reference Data" },
6731     { 117, "Write Reference Data" },
6732     { 118, "Resource Event" },
6733     { 119, "DIB Request (obsolete)" },
6734     { 120, "Set Replication Filter" },
6735     { 121, "Get Replication Filter" },
6736     { 122, "Change Attribute Definition" },
6737     { 123, "Schema in Use" },
6738     { 124, "Remove Keys" },
6739     { 125, "Clone" },
6740     { 126, "Multiple Operations Transaction" },
6741     { 240, "Ping" },
6742     { 255, "EDirectory Call" },
6743     { 0,  NULL }
6744 };
6745
6746 static const value_string connection_status_vals[] = {
6747     { 0x00, "Ok" },
6748     { 0x01, "Bad Service Connection" },
6749     { 0x10, "File Server is Down" },
6750     { 0x40, "Broadcast Message Pending" },
6751     { 0,    NULL }
6752 };
6753
6754 void
6755 proto_register_ncp2222(void)
6756 {
6757
6758     static hf_register_info hf[] = {
6759     { &hf_ncp_func,
6760     { "Function", "ncp.func", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
6761
6762     { &hf_ncp_length,
6763     { "Packet Length", "ncp.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
6764
6765     { &hf_ncp_subfunc,
6766     { "SubFunction", "ncp.subfunc", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
6767
6768     { &hf_ncp_completion_code,
6769     { "Completion Code", "ncp.completion_code", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
6770
6771     { &hf_ncp_group,
6772     { "NCP Group Type", "ncp.group", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
6773
6774     { &hf_ncp_fragment_handle,
6775     { "NDS Fragment Handle", "ncp.ndsfrag", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
6776
6777     { &hf_ncp_fragment_size,
6778     { "NDS Fragment Size", "ncp.ndsfragsize", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
6779
6780     { &hf_ncp_message_size,
6781     { "Message Size", "ncp.ndsmessagesize", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
6782
6783     { &hf_ncp_nds_flag,
6784     { "Flags", "ncp.ndsflag", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
6785
6786     { &hf_ncp_nds_verb,
6787     { "NDS Verb", "ncp.ndsverb", FT_UINT8, BASE_HEX, VALS(ncp_nds_verb_vals), 0x0, NULL, HFILL }},
6788
6789     { &hf_ping_version,
6790     { "NDS Version", "ncp.ping_version", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
6791
6792 #if 0 /* Unused ? */
6793     { &hf_nds_version,
6794     { "NDS Version", "ncp.nds_version", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
6795 #endif
6796
6797     { &hf_nds_tree_name,
6798     { "Tree Name", "ncp.nds_tree_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
6799
6800     /*
6801      * XXX - the page at
6802      *
6803      *      http://www.odyssea.com/whats_new/tcpipnet/tcpipnet.html
6804      *
6805      * says of the connection status "The Connection Code field may
6806      * contain values that indicate the status of the client host to
6807      * server connection.  A value of 1 in the fourth bit of this data
6808      * byte indicates that the server is unavailable (server was
6809      * downed).
6810      *
6811      * The page at
6812      *
6813      *      http://www.unm.edu/~network/presentations/course/appendix/appendix_f/tsld088.htm
6814      *
6815      * says that bit 0 is "bad service", bit 2 is "no connection
6816      * available", bit 4 is "service down", and bit 6 is "server
6817      * has a broadcast message waiting for the client".
6818      *
6819      * Should it be displayed in hex, and should those bits (and any
6820      * other bits with significance) be displayed as bitfields
6821      * underneath it?
6822      */
6823     { &hf_ncp_connection_status,
6824     { "Connection Status", "ncp.connection_status", FT_UINT8, BASE_DEC, VALS(connection_status_vals), 0x0, NULL, HFILL }},
6825
6826     { &hf_ncp_req_frame_num,
6827     { "Response to Request in Frame Number", "ncp.req_frame_num", FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL }},
6828
6829     { &hf_ncp_req_frame_time,
6830     { "Time from Request", "ncp.time", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, "Time between request and response in seconds", HFILL }},
6831
6832 #if 0 /* Unused ? */
6833     { &hf_nds_flags,
6834     { "NDS Return Flags", "ncp.nds_flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
6835 #endif
6836
6837     { &hf_nds_reply_depth,
6838     { "Distance from Root", "ncp.ndsdepth", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
6839
6840     { &hf_nds_reply_rev,
6841     { "NDS Revision", "ncp.ndsrev", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
6842
6843     { &hf_nds_reply_flags,
6844     { "Flags", "ncp.ndsflags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
6845
6846     { &hf_nds_p1type,
6847     { "NDS Parameter Type", "ncp.p1type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
6848
6849     { &hf_nds_uint32value,
6850     { "NDS Value", "ncp.uint32value", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
6851
6852     { &hf_nds_bit1,
6853     { "Typeless", "ncp.nds_bit1", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
6854
6855     { &hf_nds_bit2,
6856     { "All Containers", "ncp.nds_bit2", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
6857
6858     { &hf_nds_bit3,
6859     { "Slashed", "ncp.nds_bit3", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
6860
6861     { &hf_nds_bit4,
6862     { "Dotted", "ncp.nds_bit4", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
6863
6864     { &hf_nds_bit5,
6865     { "Tuned", "ncp.nds_bit5", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
6866
6867     { &hf_nds_bit6,
6868     { "Not Defined", "ncp.nds_bit6", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
6869
6870     { &hf_nds_bit7,
6871     { "Not Defined", "ncp.nds_bit7", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
6872
6873     { &hf_nds_bit8,
6874     { "Not Defined", "ncp.nds_bit8", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
6875
6876     { &hf_nds_bit9,
6877     { "Not Defined", "ncp.nds_bit9", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
6878
6879     { &hf_nds_bit10,
6880     { "Not Defined", "ncp.nds_bit10", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
6881
6882     { &hf_nds_bit11,
6883     { "Not Defined", "ncp.nds_bit11", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
6884
6885     { &hf_nds_bit12,
6886     { "Not Defined", "ncp.nds_bit12", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
6887
6888     { &hf_nds_bit13,
6889     { "Not Defined", "ncp.nds_bit13", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
6890
6891     { &hf_nds_bit14,
6892     { "Not Defined", "ncp.nds_bit14", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
6893
6894     { &hf_nds_bit15,
6895     { "Not Defined", "ncp.nds_bit15", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
6896
6897     { &hf_nds_bit16,
6898     { "Not Defined", "ncp.nds_bit16", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
6899
6900     { &hf_bit1outflags,
6901     { "Output Flags", "ncp.bit1outflags", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
6902
6903     { &hf_bit2outflags,
6904     { "Entry ID", "ncp.bit2outflags", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
6905
6906     { &hf_bit3outflags,
6907     { "Replica State", "ncp.bit3outflags", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
6908
6909     { &hf_bit4outflags,
6910     { "Modification Timestamp", "ncp.bit4outflags", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
6911
6912     { &hf_bit5outflags,
6913     { "Purge Time", "ncp.bit5outflags", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
6914
6915     { &hf_bit6outflags,
6916     { "Local Partition ID", "ncp.bit6outflags", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
6917
6918     { &hf_bit7outflags,
6919     { "Distinguished Name", "ncp.bit7outflags", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
6920
6921     { &hf_bit8outflags,
6922     { "Replica Type", "ncp.bit8outflags", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
6923
6924     { &hf_bit9outflags,
6925     { "Partition Busy", "ncp.bit9outflags", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
6926
6927     { &hf_bit10outflags,
6928     { "Not Defined", "ncp.bit10outflags", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
6929
6930     { &hf_bit11outflags,
6931     { "Not Defined", "ncp.bit11outflags", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
6932
6933     { &hf_bit12outflags,
6934     { "Not Defined", "ncp.bit12outflags", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
6935
6936     { &hf_bit13outflags,
6937     { "Not Defined", "ncp.bit13outflags", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
6938
6939     { &hf_bit14outflags,
6940     { "Not Defined", "ncp.bit14outflags", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
6941
6942     { &hf_bit15outflags,
6943     { "Not Defined", "ncp.bit15outflags", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
6944
6945     { &hf_bit16outflags,
6946     { "Not Defined", "ncp.bit16outflags", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
6947
6948     { &hf_bit1nflags,
6949     { "Entry ID", "ncp.bit1nflags", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
6950
6951     { &hf_bit2nflags,
6952     { "Readable", "ncp.bit2nflags", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
6953
6954     { &hf_bit3nflags,
6955     { "Writeable", "ncp.bit3nflags", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
6956
6957     { &hf_bit4nflags,
6958     { "Master", "ncp.bit4nflags", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
6959
6960     { &hf_bit5nflags,
6961     { "Create ID", "ncp.bit5nflags", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
6962
6963     { &hf_bit6nflags,
6964     { "Walk Tree", "ncp.bit6nflags", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
6965
6966     { &hf_bit7nflags,
6967     { "Dereference Alias", "ncp.bit7nflags", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
6968
6969     { &hf_bit8nflags,
6970     { "Not Defined", "ncp.bit8nflags", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
6971
6972     { &hf_bit9nflags,
6973     { "Not Defined", "ncp.bit9nflags", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
6974
6975     { &hf_bit10nflags,
6976     { "Not Defined", "ncp.bit10nflags", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
6977
6978     { &hf_bit11nflags,
6979     { "Not Defined", "ncp.bit11nflags", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
6980
6981     { &hf_bit12nflags,
6982     { "Not Defined", "ncp.bit12nflags", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
6983
6984     { &hf_bit13nflags,
6985     { "Not Defined", "ncp.bit13nflags", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
6986
6987     { &hf_bit14nflags,
6988     { "Prefer Referrals", "ncp.bit14nflags", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
6989
6990     { &hf_bit15nflags,
6991     { "Prefer Only Referrals", "ncp.bit15nflags", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
6992
6993     { &hf_bit16nflags,
6994     { "Not Defined", "ncp.bit16nflags", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
6995
6996     { &hf_bit1rflags,
6997     { "Typeless", "ncp.bit1rflags", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
6998
6999     { &hf_bit2rflags,
7000     { "Slashed", "ncp.bit2rflags", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7001
7002     { &hf_bit3rflags,
7003     { "Dotted", "ncp.bit3rflags", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7004
7005     { &hf_bit4rflags,
7006     { "Tuned", "ncp.bit4rflags", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7007
7008     { &hf_bit5rflags,
7009     { "Not Defined", "ncp.bit5rflags", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7010
7011     { &hf_bit6rflags,
7012     { "Not Defined", "ncp.bit6rflags", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7013
7014     { &hf_bit7rflags,
7015     { "Not Defined", "ncp.bit7rflags", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7016
7017     { &hf_bit8rflags,
7018     { "Not Defined", "ncp.bit8rflags", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7019
7020     { &hf_bit9rflags,
7021     { "Not Defined", "ncp.bit9rflags", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7022
7023     { &hf_bit10rflags,
7024     { "Not Defined", "ncp.bit10rflags", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7025
7026     { &hf_bit11rflags,
7027     { "Not Defined", "ncp.bit11rflags", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7028
7029     { &hf_bit12rflags,
7030     { "Not Defined", "ncp.bit12rflags", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7031
7032     { &hf_bit13rflags,
7033     { "Not Defined", "ncp.bit13rflags", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7034
7035     { &hf_bit14rflags,
7036     { "Not Defined", "ncp.bit14rflags", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7037
7038     { &hf_bit15rflags,
7039     { "Not Defined", "ncp.bit15rflags", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7040
7041     { &hf_bit16rflags,
7042     { "Not Defined", "ncp.bit16rflags", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7043
7044     { &hf_bit1eflags,
7045     { "Alias Entry", "ncp.bit1eflags", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7046
7047     { &hf_bit2eflags,
7048     { "Partition Root", "ncp.bit2eflags", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7049
7050     { &hf_bit3eflags,
7051     { "Container Entry", "ncp.bit3eflags", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7052
7053     { &hf_bit4eflags,
7054     { "Container Alias", "ncp.bit4eflags", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7055
7056     { &hf_bit5eflags,
7057     { "Matches List Filter", "ncp.bit5eflags", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7058
7059     { &hf_bit6eflags,
7060     { "Reference Entry", "ncp.bit6eflags", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7061
7062     { &hf_bit7eflags,
7063     { "40x Reference Entry", "ncp.bit7eflags", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7064
7065     { &hf_bit8eflags,
7066     { "Back Linked", "ncp.bit8eflags", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7067
7068     { &hf_bit9eflags,
7069     { "New Entry", "ncp.bit9eflags", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7070
7071     { &hf_bit10eflags,
7072     { "Temporary Reference", "ncp.bit10eflags", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7073
7074     { &hf_bit11eflags,
7075     { "Audited", "ncp.bit11eflags", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7076
7077     { &hf_bit12eflags,
7078     { "Entry Not Present", "ncp.bit12eflags", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7079
7080     { &hf_bit13eflags,
7081     { "Entry Verify CTS", "ncp.bit13eflags", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7082
7083     { &hf_bit14eflags,
7084     { "Entry Damaged", "ncp.bit14eflags", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7085
7086     { &hf_bit15eflags,
7087     { "Not Defined", "ncp.bit15rflags", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7088
7089     { &hf_bit16eflags,
7090     { "Not Defined", "ncp.bit16rflags", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7091
7092     { &hf_bit1infoflagsl,
7093     { "Output Flags", "ncp.bit1infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7094
7095     { &hf_bit2infoflagsl,
7096     { "Entry ID", "ncp.bit2infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7097
7098     { &hf_bit3infoflagsl,
7099     { "Entry Flags", "ncp.bit3infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7100
7101     { &hf_bit4infoflagsl,
7102     { "Subordinate Count", "ncp.bit4infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7103
7104     { &hf_bit5infoflagsl,
7105     { "Modification Time", "ncp.bit5infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7106
7107     { &hf_bit6infoflagsl,
7108     { "Modification Timestamp", "ncp.bit6infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7109
7110     { &hf_bit7infoflagsl,
7111     { "Creation Timestamp", "ncp.bit7infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7112
7113     { &hf_bit8infoflagsl,
7114     { "Partition Root ID", "ncp.bit8infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7115
7116     { &hf_bit9infoflagsl,
7117     { "Parent ID", "ncp.bit9infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7118
7119     { &hf_bit10infoflagsl,
7120     { "Revision Count", "ncp.bit10infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7121
7122     { &hf_bit11infoflagsl,
7123     { "Replica Type", "ncp.bit11infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7124
7125     { &hf_bit12infoflagsl,
7126     { "Base Class", "ncp.bit12infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7127
7128     { &hf_bit13infoflagsl,
7129     { "Relative Distinguished Name", "ncp.bit13infoflagsl", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7130
7131     { &hf_bit14infoflagsl,
7132     { "Distinguished Name", "ncp.bit14infoflagsl", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7133
7134     { &hf_bit15infoflagsl,
7135     { "Root Distinguished Name", "ncp.bit15infoflagsl", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7136
7137     { &hf_bit16infoflagsl,
7138     { "Parent Distinguished Name", "ncp.bit16infoflagsl", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7139
7140     { &hf_bit1infoflagsh,
7141     { "Purge Time", "ncp.bit1infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7142
7143     { &hf_bit2infoflagsh,
7144     { "Dereference Base Class", "ncp.bit2infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7145
7146     { &hf_bit3infoflagsh,
7147     { "Not Defined", "ncp.bit3infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7148
7149     { &hf_bit4infoflagsh,
7150     { "Not Defined", "ncp.bit4infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7151
7152     { &hf_bit5infoflagsh,
7153     { "Not Defined", "ncp.bit5infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7154
7155     { &hf_bit6infoflagsh,
7156     { "Not Defined", "ncp.bit6infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7157
7158     { &hf_bit7infoflagsh,
7159     { "Not Defined", "ncp.bit7infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7160
7161     { &hf_bit8infoflagsh,
7162     { "Not Defined", "ncp.bit8infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7163
7164     { &hf_bit9infoflagsh,
7165     { "Not Defined", "ncp.bit9infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7166
7167     { &hf_bit10infoflagsh,
7168     { "Not Defined", "ncp.bit10infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7169
7170     { &hf_bit11infoflagsh,
7171     { "Not Defined", "ncp.bit11infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7172
7173     { &hf_bit12infoflagsh,
7174     { "Not Defined", "ncp.bit12infoflagshs", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7175
7176     { &hf_bit13infoflagsh,
7177     { "Not Defined", "ncp.bit13infoflagsh", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7178
7179     { &hf_bit14infoflagsh,
7180     { "Not Defined", "ncp.bit14infoflagsh", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7181
7182     { &hf_bit15infoflagsh,
7183     { "Not Defined", "ncp.bit15infoflagsh", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7184
7185     { &hf_bit16infoflagsh,
7186     { "Not Defined", "ncp.bit16infoflagsh", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7187
7188     { &hf_bit1lflags,
7189     { "List Typeless", "ncp.bit1lflags", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7190
7191     { &hf_bit2lflags,
7192     { "List Containers", "ncp.bit2lflags", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7193
7194     { &hf_bit3lflags,
7195     { "List Slashed", "ncp.bit3lflags", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7196
7197     { &hf_bit4lflags,
7198     { "List Dotted", "ncp.bit4lflags", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7199
7200     { &hf_bit5lflags,
7201     { "Dereference Alias", "ncp.bit5lflags", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7202
7203     { &hf_bit6lflags,
7204     { "List All Containers", "ncp.bit6lflags", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7205
7206     { &hf_bit7lflags,
7207     { "List Obsolete", "ncp.bit7lflags", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7208
7209     { &hf_bit8lflags,
7210     { "List Tuned Output", "ncp.bit8lflags", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7211
7212     { &hf_bit9lflags,
7213     { "List External Reference", "ncp.bit9lflags", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7214
7215     { &hf_bit10lflags,
7216     { "Not Defined", "ncp.bit10lflags", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7217
7218     { &hf_bit11lflags,
7219     { "Not Defined", "ncp.bit11lflags", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7220
7221     { &hf_bit12lflags,
7222     { "Not Defined", "ncp.bit12lflags", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7223
7224     { &hf_bit13lflags,
7225     { "Not Defined", "ncp.bit13lflags", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7226
7227     { &hf_bit14lflags,
7228     { "Not Defined", "ncp.bit14lflags", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7229
7230     { &hf_bit15lflags,
7231     { "Not Defined", "ncp.bit15lflags", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7232
7233     { &hf_bit16lflags,
7234     { "Not Defined", "ncp.bit16lflags", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7235
7236     { &hf_bit1l1flagsl,
7237     { "Output Flags", "ncp.bit1l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7238
7239     { &hf_bit2l1flagsl,
7240     { "Entry ID", "ncp.bit2l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7241
7242     { &hf_bit3l1flagsl,
7243     { "Replica State", "ncp.bit3l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7244
7245     { &hf_bit4l1flagsl,
7246     { "Modification Timestamp", "ncp.bit4l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7247
7248     { &hf_bit5l1flagsl,
7249     { "Purge Time", "ncp.bit5l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7250
7251     { &hf_bit6l1flagsl,
7252     { "Local Partition ID", "ncp.bit6l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7253
7254     { &hf_bit7l1flagsl,
7255     { "Distinguished Name", "ncp.bit7l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7256
7257     { &hf_bit8l1flagsl,
7258     { "Replica Type", "ncp.bit8l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7259
7260     { &hf_bit9l1flagsl,
7261     { "Partition Busy", "ncp.bit9l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7262
7263     { &hf_bit10l1flagsl,
7264     { "Not Defined", "ncp.bit10l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7265
7266     { &hf_bit11l1flagsl,
7267     { "Not Defined", "ncp.bit11l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7268
7269     { &hf_bit12l1flagsl,
7270     { "Not Defined", "ncp.bit12l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7271
7272     { &hf_bit13l1flagsl,
7273     { "Not Defined", "ncp.bit13l1flagsl", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7274
7275     { &hf_bit14l1flagsl,
7276     { "Not Defined", "ncp.bit14l1flagsl", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7277
7278     { &hf_bit15l1flagsl,
7279     { "Not Defined", "ncp.bit15l1flagsl", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7280
7281     { &hf_bit16l1flagsl,
7282     { "Not Defined", "ncp.bit16l1flagsl", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7283
7284     { &hf_bit1l1flagsh,
7285     { "Not Defined", "ncp.bit1l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7286
7287     { &hf_bit2l1flagsh,
7288     { "Not Defined", "ncp.bit2l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7289
7290     { &hf_bit3l1flagsh,
7291     { "Not Defined", "ncp.bit3l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7292
7293     { &hf_bit4l1flagsh,
7294     { "Not Defined", "ncp.bit4l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7295
7296     { &hf_bit5l1flagsh,
7297     { "Not Defined", "ncp.bit5l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7298
7299     { &hf_bit6l1flagsh,
7300     { "Not Defined", "ncp.bit6l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7301
7302     { &hf_bit7l1flagsh,
7303     { "Not Defined", "ncp.bit7l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7304
7305     { &hf_bit8l1flagsh,
7306     { "Not Defined", "ncp.bit8l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7307
7308     { &hf_bit9l1flagsh,
7309     { "Not Defined", "ncp.bit9l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7310
7311     { &hf_bit10l1flagsh,
7312     { "Not Defined", "ncp.bit10l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7313
7314     { &hf_bit11l1flagsh,
7315     { "Not Defined", "ncp.bit11l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7316
7317     { &hf_bit12l1flagsh,
7318     { "Not Defined", "ncp.bit12l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7319
7320     { &hf_bit13l1flagsh,
7321     { "Not Defined", "ncp.bit13l1flagsh", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7322
7323     { &hf_bit14l1flagsh,
7324     { "Not Defined", "ncp.bit14l1flagsh", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7325
7326     { &hf_bit15l1flagsh,
7327     { "Not Defined", "ncp.bit15l1flagsh", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7328
7329     { &hf_bit16l1flagsh,
7330     { "Not Defined", "ncp.bit16l1flagsh", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7331
7332     { &hf_bit1vflags,
7333     { "Naming", "ncp.bit1vflags", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7334
7335     { &hf_bit2vflags,
7336     { "Base Class", "ncp.bit2vflags", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7337
7338     { &hf_bit3vflags,
7339     { "Present", "ncp.bit3vflags", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7340
7341     { &hf_bit4vflags,
7342     { "Value Damaged", "ncp.bit4vflags", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7343
7344     { &hf_bit5vflags,
7345     { "Not Defined", "ncp.bit5vflags", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7346
7347     { &hf_bit6vflags,
7348     { "Not Defined", "ncp.bit6vflags", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7349
7350     { &hf_bit7vflags,
7351     { "Not Defined", "ncp.bit7vflags", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7352
7353     { &hf_bit8vflags,
7354     { "Not Defined", "ncp.bit8vflags", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7355
7356     { &hf_bit9vflags,
7357     { "Not Defined", "ncp.bit9vflags", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7358
7359     { &hf_bit10vflags,
7360     { "Not Defined", "ncp.bit10vflags", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7361
7362     { &hf_bit11vflags,
7363     { "Not Defined", "ncp.bit11vflags", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7364
7365     { &hf_bit12vflags,
7366     { "Not Defined", "ncp.bit12vflags", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7367
7368     { &hf_bit13vflags,
7369     { "Not Defined", "ncp.bit13vflags", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7370
7371     { &hf_bit14vflags,
7372     { "Not Defined", "ncp.bit14vflags", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7373
7374     { &hf_bit15vflags,
7375     { "Not Defined", "ncp.bit15vflags", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7376
7377     { &hf_bit16vflags,
7378     { "Not Defined", "ncp.bit16vflags", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7379
7380     { &hf_bit1cflags,
7381     { "Container", "ncp.bit1cflags", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7382
7383     { &hf_bit2cflags,
7384     { "Effective", "ncp.bit2cflags", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7385
7386     { &hf_bit3cflags,
7387     { "Class Definition Cannot be Removed", "ncp.bit3cflags", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7388
7389     { &hf_bit4cflags,
7390     { "Ambiguous Naming", "ncp.bit4cflags", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7391
7392     { &hf_bit5cflags,
7393     { "Ambiguous Containment", "ncp.bit5cflags", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7394
7395     { &hf_bit6cflags,
7396     { "Auxiliary", "ncp.bit6cflags", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7397
7398     { &hf_bit7cflags,
7399     { "Operational", "ncp.bit7cflags", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7400
7401     { &hf_bit8cflags,
7402     { "Sparse Required", "ncp.bit8cflags", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7403
7404     { &hf_bit9cflags,
7405     { "Sparse Operational", "ncp.bit9cflags", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7406
7407     { &hf_bit10cflags,
7408     { "Not Defined", "ncp.bit10cflags", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7409
7410     { &hf_bit11cflags,
7411     { "Not Defined", "ncp.bit11cflags", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7412
7413     { &hf_bit12cflags,
7414     { "Not Defined", "ncp.bit12cflags", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7415
7416     { &hf_bit13cflags,
7417     { "Not Defined", "ncp.bit13cflags", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7418
7419     { &hf_bit14cflags,
7420     { "Not Defined", "ncp.bit14cflags", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7421
7422     { &hf_bit15cflags,
7423     { "Not Defined", "ncp.bit15cflags", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7424
7425     { &hf_bit16cflags,
7426     { "Not Defined", "ncp.bit16cflags", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7427
7428     { &hf_bit1acflags,
7429     { "Single Valued", "ncp.bit1acflags", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7430
7431     { &hf_bit2acflags,
7432     { "Sized", "ncp.bit2acflags", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7433
7434     { &hf_bit3acflags,
7435     { "Non-Removable", "ncp.bit3acflags", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7436
7437     { &hf_bit4acflags,
7438     { "Read Only", "ncp.bit4acflags", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7439
7440     { &hf_bit5acflags,
7441     { "Hidden", "ncp.bit5acflags", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7442
7443     { &hf_bit6acflags,
7444     { "String", "ncp.bit6acflags", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7445
7446     { &hf_bit7acflags,
7447     { "Synchronize Immediate", "ncp.bit7acflags", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7448
7449     { &hf_bit8acflags,
7450     { "Public Read", "ncp.bit8acflags", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7451
7452     { &hf_bit9acflags,
7453     { "Server Read", "ncp.bit9acflags", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7454
7455     { &hf_bit10acflags,
7456     { "Write Managed", "ncp.bit10acflags", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7457
7458     { &hf_bit11acflags,
7459     { "Per Replica", "ncp.bit11acflags", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7460
7461     { &hf_bit12acflags,
7462     { "Never Schedule Synchronization", "ncp.bit12acflags", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7463
7464     { &hf_bit13acflags,
7465     { "Operational", "ncp.bit13acflags", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7466
7467     { &hf_bit14acflags,
7468     { "Not Defined", "ncp.bit14acflags", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7469
7470     { &hf_bit15acflags,
7471     { "Not Defined", "ncp.bit15acflags", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7472
7473     { &hf_bit16acflags,
7474     { "Not Defined", "ncp.bit16acflags", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7475
7476
7477     { &hf_nds_reply_error,
7478     { "NDS Error", "ncp.ndsreplyerror", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7479
7480     { &hf_nds_net,
7481     { "Network","ncp.ndsnet", FT_IPXNET, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7482
7483     { &hf_nds_node,
7484     { "Node",       "ncp.ndsnode", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7485
7486     { &hf_nds_socket,
7487     { "Socket",     "ncp.ndssocket", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7488
7489     { &hf_add_ref_ip,
7490     { "Address Referral", "ncp.ipref", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7491
7492     { &hf_add_ref_udp,
7493     { "Address Referral", "ncp.udpref", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7494
7495     { &hf_add_ref_tcp,
7496     { "Address Referral", "ncp.tcpref", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7497
7498     { &hf_referral_record,
7499     { "Referral Record", "ncp.ref_rec", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7500
7501     { &hf_referral_addcount,
7502     { "Address Count", "ncp.ref_addcount", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7503
7504     { &hf_nds_port,
7505     { "Port", "ncp.ndsport", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7506
7507     { &hf_mv_string,
7508     { "Attribute Name", "ncp.mv_string", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7509
7510     { &hf_nds_syntax,
7511     { "Attribute Syntax", "ncp.nds_syntax", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7512
7513     { &hf_value_string,
7514     { "Value", "ncp.value_string", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7515
7516     { &hf_nds_stream_name,
7517     { "Stream Name", "ncp.nds_stream_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7518
7519     { &hf_nds_buffer_size,
7520     { "NDS Reply Buffer Size", "ncp.nds_reply_buf", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7521
7522     { &hf_nds_ver,
7523     { "NDS Version", "ncp.nds_ver", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7524
7525     { &hf_nds_nflags,
7526     { "Flags", "ncp.nds_nflags", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7527
7528     { &hf_nds_rflags,
7529     { "Request Flags", "ncp.nds_rflags", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7530
7531     { &hf_nds_eflags,
7532     { "Entry Flags", "ncp.nds_eflags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7533
7534     { &hf_nds_scope,
7535     { "Scope", "ncp.nds_scope", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7536
7537     { &hf_nds_name,
7538     { "Name", "ncp.nds_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7539
7540     { &hf_nds_name_type,
7541     { "Name Type", "ncp.nds_name_type", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7542
7543     { &hf_nds_comm_trans,
7544     { "Communications Transport", "ncp.nds_comm_trans", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7545
7546     { &hf_nds_tree_trans,
7547     { "Tree Walker Transport", "ncp.nds_tree_trans", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7548
7549     { &hf_nds_iteration,
7550     { "Iteration Handle", "ncp.nds_iteration", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7551
7552     { &hf_nds_iterator,
7553     { "Iterator", "ncp.nds_iterator", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7554
7555     { &hf_nds_file_handle,
7556     { "File Handle", "ncp.nds_file_handle", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7557
7558     { &hf_nds_file_size,
7559     { "File Size", "ncp.nds_file_size", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7560
7561     { &hf_nds_eid,
7562     { "NDS EID", "ncp.nds_eid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7563
7564     { &hf_nds_depth,
7565     { "Distance object is from Root", "ncp.nds_depth", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7566
7567     { &hf_nds_info_type,
7568     { "Info Type", "ncp.nds_info_type", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7569
7570     { &hf_nds_class_def_type,
7571     { "Class Definition Type", "ncp.nds_class_def_type", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7572
7573     { &hf_nds_all_attr,
7574     { "All Attributes", "ncp.nds_all_attr", FT_UINT32, BASE_DEC, NULL, 0x0, "Return all Attributes?", HFILL }},
7575
7576     { &hf_nds_return_all_classes,
7577     { "All Classes", "ncp.nds_return_all_classes", FT_STRING, BASE_NONE, NULL, 0x0, "Return all Classes?", HFILL }},
7578
7579     { &hf_nds_req_flags,
7580     { "Request Flags", "ncp.nds_req_flags", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7581
7582     { &hf_nds_attr,
7583     { "Attributes", "ncp.nds_attributes", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7584
7585     { &hf_nds_classes,
7586     { "Classes", "ncp.nds_classes", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7587
7588     { &hf_nds_crc,
7589     { "CRC", "ncp.nds_crc", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7590
7591     { &hf_nds_referrals,
7592     { "Referrals", "ncp.nds_referrals", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7593
7594     { &hf_nds_result_flags,
7595     { "Result Flags", "ncp.nds_result_flags", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7596
7597     { &hf_nds_stream_flags,
7598     { "Streams Flags", "ncp.nds_stream_flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7599
7600     { &hf_nds_tag_string,
7601     { "Tags", "ncp.nds_tags", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7602
7603     { &hf_value_bytes,
7604     { "Bytes", "ncp.value_bytes", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7605
7606     { &hf_replica_type,
7607     { "Replica Type", "ncp.rtype", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7608
7609     { &hf_replica_state,
7610     { "Replica State", "ncp.rstate", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7611
7612     { &hf_nds_rnum,
7613     { "Replica Number", "ncp.rnum", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7614
7615     { &hf_nds_revent,
7616     { "Event", "ncp.revent", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7617
7618     { &hf_replica_number,
7619     { "Replica Number", "ncp.rnum", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7620
7621     { &hf_min_nds_ver,
7622     { "Minimum NDS Version", "ncp.min_nds_version", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7623
7624     { &hf_nds_ver_include,
7625     { "Include NDS Version", "ncp.inc_nds_ver", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7626
7627     { &hf_nds_ver_exclude,
7628     { "Exclude NDS Version", "ncp.exc_nds_ver", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7629
7630 #if 0 /* Unused ? */
7631     { &hf_nds_es,
7632     { "Input Entry Specifier", "ncp.nds_es", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7633 #endif
7634
7635     { &hf_es_type,
7636     { "Entry Specifier Type", "ncp.nds_es_type", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7637
7638     { &hf_rdn_string,
7639     { "RDN", "ncp.nds_rdn", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7640
7641 #if 0 /* Unused ? */
7642     { &hf_delim_string,
7643     { "Delimiter", "ncp.nds_delim", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7644 #endif
7645
7646     { &hf_nds_dn_output_type,
7647     { "Output Entry Specifier Type", "ncp.nds_out_es_type", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7648
7649     { &hf_nds_nested_output_type,
7650     { "Nested Output Entry Specifier Type", "ncp.nds_nested_out_es", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7651
7652     { &hf_nds_output_delimiter,
7653     { "Output Delimiter", "ncp.nds_out_delimiter", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7654
7655     { &hf_nds_output_entry_specifier,
7656     { "Output Entry Specifier", "ncp.nds_out_es", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7657
7658     { &hf_es_value,
7659     { "Entry Specifier Value", "ncp.nds_es_value", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7660
7661     { &hf_es_rdn_count,
7662     { "RDN Count", "ncp.nds_es_rdn_count", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7663
7664     { &hf_nds_replica_num,
7665     { "Replica Number", "ncp.nds_replica_num", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7666
7667     { &hf_es_seconds,
7668     { "Seconds", "ncp.nds_es_seconds", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL }},
7669
7670     { &hf_nds_event_num,
7671     { "Event Number", "ncp.nds_event_num", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7672
7673     { &hf_nds_compare_results,
7674     { "Compare Results", "ncp.nds_compare_results", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7675
7676     { &hf_nds_parent,
7677     { "Parent ID", "ncp.nds_parent", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7678
7679     { &hf_nds_name_filter,
7680     { "Name Filter", "ncp.nds_name_filter", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7681
7682     { &hf_nds_class_filter,
7683     { "Class Filter", "ncp.nds_class_filter", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7684
7685     { &hf_nds_time_filter,
7686     { "Time Filter", "ncp.nds_time_filter", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7687
7688     { &hf_nds_partition_root_id,
7689     { "Partition Root ID", "ncp.nds_partition_root_id", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7690
7691     { &hf_nds_replicas,
7692     { "Replicas", "ncp.nds_replicas", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7693
7694     { &hf_nds_purge,
7695     { "Purge Time", "ncp.nds_purge", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL }},
7696
7697     { &hf_nds_local_partition,
7698     { "Local Partition ID", "ncp.nds_local_partition", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7699
7700     { &hf_partition_busy,
7701     { "Partition Busy", "ncp.nds_partition_busy", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7702
7703     { &hf_nds_number_of_changes,
7704     { "Number of Attribute Changes", "ncp.nds_number_of_changes", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7705
7706     { &hf_sub_count,
7707     { "Subordinate Count", "ncp.sub_count", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7708
7709     { &hf_nds_revision,
7710     { "Revision Count", "ncp.nds_rev_count", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7711
7712     { &hf_nds_base_class,
7713     { "Base Class", "ncp.nds_base_class", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7714
7715     { &hf_nds_relative_dn,
7716     { "Relative Distinguished Name", "ncp.nds_relative_dn", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7717
7718 #if 0 /* Unused ? */
7719     { &hf_nds_root_dn,
7720     { "Root Distinguished Name", "ncp.nds_root_dn", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7721 #endif
7722
7723 #if 0 /* Unused ? */
7724     { &hf_nds_parent_dn,
7725     { "Parent Distinguished Name", "ncp.nds_parent_dn", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7726 #endif
7727
7728     { &hf_deref_base,
7729     { "Dereference Base Class", "ncp.nds_deref_base", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7730
7731     { &hf_nds_base,
7732     { "Base Class", "ncp.nds_base", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7733
7734     { &hf_nds_super,
7735     { "Super Class", "ncp.nds_super", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7736
7737 #if 0 /* Unused ? */
7738     { &hf_nds_entry_info,
7739     { "Entry Information", "ncp.nds_entry_info", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7740 #endif
7741
7742     { &hf_nds_privileges,
7743     { "Privileges", "ncp.nds_privileges", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7744
7745     { &hf_nds_compare_attributes,
7746     { "Compare Attributes?", "ncp.nds_compare_attributes", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7747
7748     { &hf_nds_read_attribute,
7749     { "Read Attribute?", "ncp.nds_read_attribute", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7750
7751     { &hf_nds_write_add_delete_attribute,
7752     { "Write, Add, Delete Attribute?", "ncp.nds_write_add_delete_attribute", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7753
7754     { &hf_nds_add_delete_self,
7755     { "Add/Delete Self?", "ncp.nds_add_delete_self", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7756
7757     { &hf_nds_privilege_not_defined,
7758     { "Privilege Not defined", "ncp.nds_privilege_not_defined", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7759
7760     { &hf_nds_supervisor,
7761     { "Supervisor?", "ncp.nds_supervisor", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7762
7763     { &hf_nds_inheritance_control,
7764     { "Inheritance?", "ncp.nds_inheritance_control", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7765
7766     { &hf_nds_browse_entry,
7767     { "Browse Entry?", "ncp.nds_browse_entry", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7768
7769     { &hf_nds_add_entry,
7770     { "Add Entry?", "ncp.nds_add_entry", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7771
7772     { &hf_nds_delete_entry,
7773     { "Delete Entry?", "ncp.nds_delete_entry", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7774
7775     { &hf_nds_rename_entry,
7776     { "Rename Entry?", "ncp.nds_rename_entry", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7777
7778     { &hf_nds_supervisor_entry,
7779     { "Supervisor?", "ncp.nds_supervisor_entry", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7780
7781     { &hf_nds_entry_privilege_not_defined,
7782     { "Privilege Not Defined", "ncp.nds_entry_privilege_not_defined", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7783
7784     { &hf_nds_vflags,
7785     { "Value Flags", "ncp.nds_vflags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7786
7787     { &hf_nds_value_len,
7788     { "Value Length", "ncp.nds_vlength", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7789
7790     { &hf_nds_cflags,
7791     { "Class Flags", "ncp.nds_cflags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7792
7793     { &hf_nds_asn1,
7794     { "ASN.1 ID", "ncp.nds_asn1", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7795
7796     { &hf_nds_acflags,
7797     { "Attribute Constraint Flags", "ncp.nds_acflags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7798
7799     { &hf_nds_upper,
7800     { "Upper Limit Value", "ncp.nds_upper", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7801
7802     { &hf_nds_lower,
7803     { "Lower Limit Value", "ncp.nds_lower", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7804
7805     { &hf_nds_trustee_dn,
7806     { "Trustee Distinguished Name", "ncp.nds_trustee_dn", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7807
7808     { &hf_nds_attribute_dn,
7809     { "Attribute Name", "ncp.nds_attribute_dn", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7810
7811     { &hf_nds_acl_add,
7812     { "Access Control Lists to Add", "ncp.nds_acl_add", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7813
7814     { &hf_nds_acl_del,
7815     { "Access Control Lists to Delete", "ncp.nds_acl_del", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7816
7817     { &hf_nds_att_add,
7818     { "Attribute to Add", "ncp.nds_att_add", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7819
7820     { &hf_nds_att_del,
7821     { "Attribute to Delete", "ncp.nds_att_del", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7822
7823     { &hf_nds_keep,
7824     { "Delete Original RDN", "ncp.nds_keep", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7825
7826     { &hf_nds_new_rdn,
7827     { "New Relative Distinguished Name", "ncp.nds_new_rdn", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7828
7829     { &hf_nds_time_delay,
7830     { "Time Delay", "ncp.nds_time_delay", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
7831
7832     { &hf_nds_root_name,
7833     { "Root Most Object Name", "ncp.nds_root_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7834
7835     { &hf_nds_new_part_id,
7836     { "New Partition Root ID", "ncp.nds_new_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7837
7838     { &hf_nds_child_part_id,
7839     { "Child Partition Root ID", "ncp.nds_child_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7840
7841     { &hf_nds_master_part_id,
7842     { "Master Partition Root ID", "ncp.nds_master_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
7843
7844     { &hf_nds_target_name,
7845     { "Target Server Name", "ncp.nds_target_dn", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
7846
7847
7848     { &hf_bit1pingflags1,
7849     { "Supported Fields", "ncp.bit1pingflags1", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7850
7851     { &hf_bit2pingflags1,
7852     { "Depth", "ncp.bit2pingflags1", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7853
7854     { &hf_bit3pingflags1,
7855     { "Build Number", "ncp.bit3pingflags1", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7856
7857     { &hf_bit4pingflags1,
7858     { "Flags", "ncp.bit4pingflags1", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7859
7860     { &hf_bit5pingflags1,
7861     { "Verification Flags", "ncp.bit5pingflags1", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7862
7863     { &hf_bit6pingflags1,
7864     { "Letter Version", "ncp.bit6pingflags1", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7865
7866     { &hf_bit7pingflags1,
7867     { "OS Version", "ncp.bit7pingflags1", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7868
7869     { &hf_bit8pingflags1,
7870     { "Not Defined", "ncp.bit8pingflags1", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7871
7872     { &hf_bit9pingflags1,
7873     { "License Flags", "ncp.bit9pingflags1", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7874
7875     { &hf_bit10pingflags1,
7876     { "DS Time", "ncp.bit10pingflags1", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7877
7878     { &hf_bit11pingflags1,
7879     { "Server Time", "ncp.bit11pingflags1", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7880
7881     { &hf_bit12pingflags1,
7882     { "Create Time", "ncp.bit12pingflags1", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7883
7884     { &hf_bit13pingflags1,
7885     { "Not Defined", "ncp.bit13pingflags1", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7886
7887     { &hf_bit14pingflags1,
7888     { "Not Defined", "ncp.bit14pingflags1", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7889
7890     { &hf_bit15pingflags1,
7891     { "Not Defined", "ncp.bit15pingflags1", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7892
7893     { &hf_bit16pingflags1,
7894     { "Not Defined", "ncp.bit16pingflags1", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7895
7896     { &hf_bit1pingflags2,
7897     { "Sap Name", "ncp.bit1pingflags2", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7898
7899     { &hf_bit2pingflags2,
7900     { "Tree Name", "ncp.bit2pingflags2", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7901
7902     { &hf_bit3pingflags2,
7903     { "OS Name", "ncp.bit3pingflags2", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7904
7905     { &hf_bit4pingflags2,
7906     { "Hardware Name", "ncp.bit4pingflags2", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7907
7908     { &hf_bit5pingflags2,
7909     { "Vendor Name", "ncp.bit5pingflags2", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7910
7911     { &hf_bit6pingflags2,
7912     { "Not Defined", "ncp.bit6pingflags2", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7913
7914     { &hf_bit7pingflags2,
7915     { "Not Defined", "ncp.bit7pingflags2", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7916
7917     { &hf_bit8pingflags2,
7918     { "Not Defined", "ncp.bit8pingflags2", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7919
7920     { &hf_bit9pingflags2,
7921     { "Not Defined", "ncp.bit9pingflags2", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7922
7923     { &hf_bit10pingflags2,
7924     { "Not Defined", "ncp.bit10pingflags2", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7925
7926     { &hf_bit11pingflags2,
7927     { "Not Defined", "ncp.bit11pingflags2", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7928
7929     { &hf_bit12pingflags2,
7930     { "Not Defined", "ncp.bit12pingflags2", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7931
7932     { &hf_bit13pingflags2,
7933     { "Not Defined", "ncp.bit13pingflags2", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7934
7935     { &hf_bit14pingflags2,
7936     { "Not Defined", "ncp.bit14pingflags2", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7937
7938     { &hf_bit15pingflags2,
7939     { "Not Defined", "ncp.bit15pingflags2", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7940
7941     { &hf_bit16pingflags2,
7942     { "Not Defined", "ncp.bit16pingflags2", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7943
7944     { &hf_bit1pingpflags1,
7945     { "Root Most Master Replica", "ncp.bit1pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7946
7947     { &hf_bit2pingpflags1,
7948     { "Is Time Synchronized?", "ncp.bit2pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7949
7950     { &hf_bit3pingpflags1,
7951     { "Is Time Valid?", "ncp.bit3pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
7952
7953     { &hf_bit4pingpflags1,
7954     { "Is DS Time Synchronized?", "ncp.bit4pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
7955
7956     { &hf_bit5pingpflags1,
7957     { "Does Agent Have All Replicas?", "ncp.bit5pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
7958
7959     { &hf_bit6pingpflags1,
7960     { "Not Defined", "ncp.bit6pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
7961
7962     { &hf_bit7pingpflags1,
7963     { "Not Defined", "ncp.bit7pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
7964
7965     { &hf_bit8pingpflags1,
7966     { "Not Defined", "ncp.bit8pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
7967
7968     { &hf_bit9pingpflags1,
7969     { "Not Defined", "ncp.bit9pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
7970
7971     { &hf_bit10pingpflags1,
7972     { "Not Defined", "ncp.bit10pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
7973
7974     { &hf_bit11pingpflags1,
7975     { "Not Defined", "ncp.bit11pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
7976
7977     { &hf_bit12pingpflags1,
7978     { "Not Defined", "ncp.bit12pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
7979
7980     { &hf_bit13pingpflags1,
7981     { "Not Defined", "ncp.bit13pingpflags1", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
7982
7983     { &hf_bit14pingpflags1,
7984     { "Not Defined", "ncp.bit14pingpflags1", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
7985
7986     { &hf_bit15pingpflags1,
7987     { "Not Defined", "ncp.bit15pingpflags1", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
7988
7989     { &hf_bit16pingpflags1,
7990     { "Not Defined", "ncp.bit16pingpflags1", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
7991
7992     { &hf_bit1pingvflags1,
7993     { "Checksum", "ncp.bit1pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
7994
7995     { &hf_bit2pingvflags1,
7996     { "CRC32", "ncp.bit2pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
7997
7998     { &hf_bit3pingvflags1,
7999     { "Not Defined", "ncp.bit3pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
8000
8001     { &hf_bit4pingvflags1,
8002     { "Not Defined", "ncp.bit4pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
8003
8004     { &hf_bit5pingvflags1,
8005     { "Not Defined", "ncp.bit5pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
8006
8007     { &hf_bit6pingvflags1,
8008     { "Not Defined", "ncp.bit6pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
8009
8010     { &hf_bit7pingvflags1,
8011     { "Not Defined", "ncp.bit7pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
8012
8013     { &hf_bit8pingvflags1,
8014     { "Not Defined", "ncp.bit8pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
8015
8016     { &hf_bit9pingvflags1,
8017     { "Not Defined", "ncp.bit9pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
8018
8019     { &hf_bit10pingvflags1,
8020     { "Not Defined", "ncp.bit10pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
8021
8022     { &hf_bit11pingvflags1,
8023     { "Not Defined", "ncp.bit11pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
8024
8025     { &hf_bit12pingvflags1,
8026     { "Not Defined", "ncp.bit12pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
8027
8028     { &hf_bit13pingvflags1,
8029     { "Not Defined", "ncp.bit13pingvflags1", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
8030
8031     { &hf_bit14pingvflags1,
8032     { "Not Defined", "ncp.bit14pingvflags1", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
8033
8034     { &hf_bit15pingvflags1,
8035     { "Not Defined", "ncp.bit15pingvflags1", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
8036
8037     { &hf_bit16pingvflags1,
8038     { "Not Defined", "ncp.bit16pingvflags1", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
8039
8040     { &hf_nds_letter_ver,
8041     { "Letter Version", "ncp.nds_letter_ver", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8042
8043     { &hf_nds_os_majver,
8044     { "OS Major Version", "ncp.nds_os_majver", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
8045
8046     { &hf_nds_os_minver,
8047     { "OS Minor Version", "ncp.nds_os_minver", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
8048
8049     { &hf_nds_lic_flags,
8050     { "License Flags", "ncp.nds_lic_flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8051
8052     { &hf_nds_ds_time,
8053     { "DS Time", "ncp.nds_ds_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL }},
8054
8055     { &hf_nds_svr_time,
8056     { "Server Time", "ncp.nds_svr_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL }},
8057
8058     { &hf_nds_crt_time,
8059     { "Agent Create Time", "ncp.nds_crt_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL }},
8060
8061     { &hf_nds_ping_version,
8062     { "Ping Version", "ncp.nds_ping_version", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
8063
8064     { &hf_nds_search_scope,
8065     { "Search Scope", "ncp.nds_search_scope", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
8066
8067     { &hf_nds_num_objects,
8068     { "Number of Objects to Search", "ncp.nds_num_objects", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8069
8070
8071     { &hf_bit1siflags,
8072     { "Names", "ncp.bit1siflags", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
8073
8074     { &hf_bit2siflags,
8075     { "Names and Values", "ncp.bit2siflags", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
8076
8077     { &hf_bit3siflags,
8078     { "Effective Privileges", "ncp.bit3siflags", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
8079
8080     { &hf_bit4siflags,
8081     { "Value Info", "ncp.bit4siflags", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
8082
8083     { &hf_bit5siflags,
8084     { "Abbreviated Value", "ncp.bit5siflags", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
8085
8086     { &hf_bit6siflags,
8087     { "Not Defined", "ncp.bit6siflags", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
8088
8089     { &hf_bit7siflags,
8090     { "Not Defined", "ncp.bit7siflags", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
8091
8092     { &hf_bit8siflags,
8093     { "Not Defined", "ncp.bit8siflags", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
8094
8095     { &hf_bit9siflags,
8096     { "Expanded Class", "ncp.bit9siflags", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
8097
8098     { &hf_bit10siflags,
8099     { "Not Defined", "ncp.bit10siflags", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
8100
8101     { &hf_bit11siflags,
8102     { "Not Defined", "ncp.bit11siflags", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
8103
8104     { &hf_bit12siflags,
8105     { "Not Defined", "ncp.bit12siflags", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
8106
8107     { &hf_bit13siflags,
8108     { "Not Defined", "ncp.bit13siflags", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
8109
8110     { &hf_bit14siflags,
8111     { "Not Defined", "ncp.bit14siflags", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
8112
8113     { &hf_bit15siflags,
8114     { "Not Defined", "ncp.bit15siflags", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
8115
8116     { &hf_bit16siflags,
8117     { "Not Defined", "ncp.bit16siflags", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
8118
8119     { &hf_nds_segment_overlap,
8120     { "Segment overlap", "nds.segment.overlap", FT_BOOLEAN, BASE_NONE, NULL, 0x0, "Segment overlaps with other segments", HFILL }},
8121
8122     { &hf_nds_segment_overlap_conflict,
8123     { "Conflicting data in segment overlap", "nds.segment.overlap.conflict", FT_BOOLEAN, BASE_NONE, NULL, 0x0, "Overlapping segments contained conflicting data", HFILL }},
8124
8125     { &hf_nds_segment_multiple_tails,
8126     { "Multiple tail segments found", "nds.segment.multipletails", FT_BOOLEAN, BASE_NONE, NULL, 0x0, "Several tails were found when desegmenting the packet", HFILL }},
8127
8128     { &hf_nds_segment_too_long_segment,
8129     { "Segment too long", "nds.segment.toolongsegment", FT_BOOLEAN, BASE_NONE, NULL, 0x0, "Segment contained data past end of packet", HFILL }},
8130
8131     { &hf_nds_segment_error,
8132     { "Desegmentation error", "nds.segment.error", FT_FRAMENUM, BASE_NONE, NULL, 0x0, "Desegmentation error due to illegal segments", HFILL }},
8133
8134     { &hf_nds_segment_count,
8135     { "Segment count", "nds.segment.count", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
8136
8137     { &hf_nds_reassembled_length,
8138     { "Reassembled NDS length", "nds.reassembled.length", FT_UINT32, BASE_DEC, NULL, 0x0, "The total length of the reassembled payload", HFILL }},
8139
8140     { &hf_nds_segment,
8141     { "NDS Fragment", "nds.fragment", FT_FRAMENUM, BASE_NONE, NULL, 0x0, "NDPS Fragment", HFILL }},
8142
8143     { &hf_nds_segments,
8144     { "NDS Fragments", "nds.fragments", FT_NONE, BASE_NONE, NULL, 0x0, "NDPS Fragments", HFILL }},
8145
8146     { &hf_nds_verb2b_req_flags,
8147     { "Flags", "ncp.nds_verb2b_flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8148
8149     { &hf_ncp_ip_address,
8150     { "IP Address", "ncp.ip_addr", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
8151
8152     { &hf_ncp_copyright,
8153     { "Copyright", "ncp.copyright", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
8154
8155     { &hf_ndsprot1flag,
8156     { "Not Defined", "ncp.nds_prot_bit1", FT_BOOLEAN, 16, NULL, 0x00000001, NULL, HFILL }},
8157
8158     { &hf_ndsprot2flag,
8159     { "Not Defined", "ncp.nds_prot_bit2", FT_BOOLEAN, 16, NULL, 0x00000002, NULL, HFILL }},
8160
8161     { &hf_ndsprot3flag,
8162     { "Not Defined", "ncp.nds_prot_bit3", FT_BOOLEAN, 16, NULL, 0x00000004, NULL, HFILL }},
8163
8164     { &hf_ndsprot4flag,
8165     { "Not Defined", "ncp.nds_prot_bit4", FT_BOOLEAN, 16, NULL, 0x00000008, NULL, HFILL }},
8166
8167     { &hf_ndsprot5flag,
8168     { "Not Defined", "ncp.nds_prot_bit5", FT_BOOLEAN, 16, NULL, 0x00000010, NULL, HFILL }},
8169
8170     { &hf_ndsprot6flag,
8171     { "Not Defined", "ncp.nds_prot_bit6", FT_BOOLEAN, 16, NULL, 0x00000020, NULL, HFILL }},
8172
8173     { &hf_ndsprot7flag,
8174     { "Not Defined", "ncp.nds_prot_bit7", FT_BOOLEAN, 16, NULL, 0x00000040, NULL, HFILL }},
8175
8176     { &hf_ndsprot8flag,
8177     { "Not Defined", "ncp.nds_prot_bit8", FT_BOOLEAN, 16, NULL, 0x00000080, NULL, HFILL }},
8178
8179     { &hf_ndsprot9flag,
8180     { "Not Defined", "ncp.nds_prot_bit9", FT_BOOLEAN, 16, NULL, 0x00000100, NULL, HFILL }},
8181
8182     { &hf_ndsprot10flag,
8183     { "Not Defined", "ncp.nds_prot_bit10", FT_BOOLEAN, 16, NULL, 0x00000200, NULL, HFILL }},
8184
8185     { &hf_ndsprot11flag,
8186     { "Not Defined", "ncp.nds_prot_bit11", FT_BOOLEAN, 16, NULL, 0x00000400, NULL, HFILL }},
8187
8188     { &hf_ndsprot12flag,
8189     { "Not Defined", "ncp.nds_prot_bit12", FT_BOOLEAN, 16, NULL, 0x00000800, NULL, HFILL }},
8190
8191     { &hf_ndsprot13flag,
8192     { "Not Defined", "ncp.nds_prot_bit13", FT_BOOLEAN, 16, NULL, 0x00001000, NULL, HFILL }},
8193
8194     { &hf_ndsprot14flag,
8195     { "Not Defined", "ncp.nds_prot_bit14", FT_BOOLEAN, 16, NULL, 0x00002000, NULL, HFILL }},
8196
8197     { &hf_ndsprot15flag,
8198     { "Include CRC in NDS Header", "ncp.nds_prot_bit15", FT_BOOLEAN, 16, NULL, 0x00004000, NULL, HFILL }},
8199
8200     { &hf_ndsprot16flag,
8201     { "Client is a Server", "ncp.nds_prot_bit16", FT_BOOLEAN, 16, NULL, 0x00008000, NULL, HFILL }},
8202
8203     { &hf_nds_svr_dst_name,
8204     { "Server Distinguished Name", "ncp.nds_svr_dist_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
8205
8206     { &hf_nds_tune_mark,
8207     { "Tune Mark",  "ncp.ndstunemark", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8208
8209 #if 0 /* Unused ? */
8210     { &hf_nds_create_time,
8211     { "NDS Creation Time",  "ncp.ndscreatetime", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL }},
8212 #endif
8213
8214     { &hf_srvr_param_string,
8215     { "Set Parameter Value", "ncp.srvr_param_string", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
8216
8217     { &hf_srvr_param_number,
8218     { "Set Parameter Value", "ncp.srvr_param_string", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
8219
8220     { &hf_srvr_param_boolean,
8221     { "Set Parameter Value", "ncp.srvr_param_boolean", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
8222
8223     { &hf_nds_number_of_items,
8224     { "Number of Items", "ncp.ndsitems", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
8225
8226     { &hf_ncp_nds_iterverb,
8227     { "NDS Iteration Verb", "ncp.ndsiterverb", FT_UINT32, BASE_HEX, NULL /*VALS(iterator_subverbs)*/, 0x0, NULL, HFILL }},
8228
8229     { &hf_iter_completion_code,
8230     { "Iteration Completion Code", "ncp.iter_completion_code", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8231
8232 #if 0 /* Unused ? */
8233     { &hf_nds_iterobj,
8234     { "Iterator Object", "ncp.ndsiterobj", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8235 #endif
8236
8237     { &hf_iter_verb_completion_code,
8238     { "Completion Code", "ncp.iter_verb_completion_code", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8239
8240     { &hf_iter_ans,
8241     { "Iterator Answer", "ncp.iter_answer", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
8242
8243     { &hf_positionable,
8244     { "Positionable", "ncp.iterpositionable", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
8245
8246     { &hf_num_skipped,
8247     { "Number Skipped", "ncp.iternumskipped", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8248
8249     { &hf_num_to_skip,
8250     { "Number to Skip", "ncp.iternumtoskip", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8251
8252     { &hf_timelimit,
8253     { "Time Limit", "ncp.itertimelimit", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8254
8255     { &hf_iter_index,
8256     { "Iterator Index", "ncp.iterindex", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8257
8258     { &hf_num_to_get,
8259     { "Number to Get", "ncp.iternumtoget", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8260
8261 #if 0 /* Unused ? */
8262     { &hf_ret_info_type,
8263     { "Return Information Type", "ncp.iterretinfotype", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8264 #endif
8265
8266     { &hf_data_size,
8267     { "Data Size", "ncp.iterdatasize", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
8268
8269     { &hf_this_count,
8270     { "Number of Items", "ncp.itercount", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
8271
8272     { &hf_max_entries,
8273     { "Maximum Entries", "ncp.itermaxentries", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8274
8275     { &hf_move_position,
8276     { "Move Position", "ncp.itermoveposition", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8277
8278     { &hf_iter_copy,
8279     { "Iterator Copy", "ncp.itercopy", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8280
8281     { &hf_iter_position,
8282     { "Iteration Position", "ncp.iterposition", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8283
8284     { &hf_iter_search,
8285     { "Search Filter", "ncp.iter_search", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8286
8287     { &hf_iter_other,
8288     { "Other Iteration", "ncp.iterother", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
8289
8290     { &hf_nds_oid,
8291     { "Object ID", "ncp.nds_oid", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
8292
8293
8294
8295
8296 """)
8297     # Print the registration code for the hf variables
8298     for var in sorted_vars:
8299         print("\t{ &%s," % (var.HFName()))
8300         print("\t{ \"%s\", \"%s\", %s, %s, %s, 0x%x, NULL, HFILL }},\n" % \
8301                 (var.Description(), var.DFilter(),
8302                 var.WiresharkFType(), var.Display(), var.ValuesName(),
8303                 var.Mask()))
8304
8305     print("\t};\n")
8306
8307     if ett_list:
8308         print("\tstatic gint *ett[] = {")
8309
8310         for ett in ett_list:
8311             print("\t\t&%s," % (ett,))
8312
8313         print("\t};\n")
8314
8315     print("""
8316         static ei_register_info ei[] = {
8317                 { &ei_ncp_file_handle, { "ncp.file_handle.expert", PI_REQUEST_CODE, PI_CHAT, "Close file handle", EXPFILL }},
8318                 { &ei_ncp_file_rights, { "ncp.file_rights", PI_REQUEST_CODE, PI_CHAT, "File rights", EXPFILL }},
8319                 { &ei_ncp_op_lock_handle, { "ncp.op_lock_handle", PI_REQUEST_CODE, PI_CHAT, "Op-lock on handle", EXPFILL }},
8320                 { &ei_ncp_file_rights_change, { "ncp.file_rights.change", PI_REQUEST_CODE, PI_CHAT, "Change handle rights", EXPFILL }},
8321                 { &ei_ncp_effective_rights, { "ncp.effective_rights.expert", PI_RESPONSE_CODE, PI_CHAT, "Handle effective rights", EXPFILL }},
8322                 { &ei_ncp_server, { "ncp.server", PI_RESPONSE_CODE, PI_CHAT, "Server info", EXPFILL }},
8323                 { &ei_iter_verb_completion_code, { "ncp.iter_verb_completion_code.expert", PI_RESPONSE_CODE, PI_ERROR, "Iteration Verb Error", EXPFILL }},
8324                 { &ei_ncp_connection_request, { "ncp.connection_request", PI_RESPONSE_CODE, PI_CHAT, "Connection Request", EXPFILL }},
8325                 { &ei_ncp_destroy_connection, { "ncp.destroy_connection", PI_RESPONSE_CODE, PI_CHAT, "Destroy Connection Request", EXPFILL }},
8326                 { &ei_nds_reply_error, { "ncp.ndsreplyerror.expert", PI_RESPONSE_CODE, PI_ERROR, "NDS Error", EXPFILL }},
8327                 { &ei_nds_iteration, { "ncp.nds_iteration.error", PI_RESPONSE_CODE, PI_ERROR, "NDS Iteration Error", EXPFILL }},
8328                 { &ei_ncp_eid, { "ncp.eid", PI_RESPONSE_CODE, PI_CHAT, "EID", EXPFILL }},
8329                 { &ei_ncp_completion_code, { "ncp.completion_code.expert", PI_RESPONSE_CODE, PI_ERROR, "Code Completion Error", EXPFILL }},
8330                 { &ei_ncp_connection_status, { "ncp.connection_status.bad", PI_RESPONSE_CODE, PI_ERROR, "Error: Bad Connection Status", EXPFILL }},
8331                 { &ei_ncp_connection_destroyed, { "ncp.connection_destroyed", PI_RESPONSE_CODE, PI_CHAT, "Connection Destroyed", EXPFILL }},
8332                 { &ei_ncp_no_request_record_found, { "ncp.no_request_record_found", PI_SEQUENCE, PI_NOTE, "No request record found.", EXPFILL }},
8333         };
8334
8335         expert_module_t* expert_ncp;
8336
8337     proto_register_field_array(proto_ncp, hf, array_length(hf));""")
8338
8339     if ett_list:
8340         print("""
8341 proto_register_subtree_array(ett, array_length(ett));""")
8342
8343     print("""
8344         expert_ncp = expert_register_protocol(proto_ncp);
8345         expert_register_field_array(expert_ncp, ei, array_length(ei));
8346     register_init_routine(&ncp_init_protocol);
8347     register_postseq_cleanup_routine(&ncp_postseq_cleanup);""")
8348
8349     # End of proto_register_ncp2222()
8350     print("}")
8351     print("")
8352     print('#include "packet-ncp2222.inc"')
8353
8354 def usage():
8355     print("Usage: ncp2222.py -o output_file")
8356     sys.exit(1)
8357
8358 def main():
8359     global compcode_lists
8360     global ptvc_lists
8361     global msg
8362
8363     optstring = "o:"
8364     out_filename = None
8365
8366     try:
8367         opts, args = getopt.getopt(sys.argv[1:], optstring)
8368     except getopt.error:
8369         usage()
8370
8371     for opt, arg in opts:
8372         if opt == "-o":
8373             out_filename = arg
8374         else:
8375             usage()
8376
8377     if len(args) != 0:
8378         usage()
8379
8380     if not out_filename:
8381         usage()
8382
8383     # Create the output file
8384     try:
8385         out_file = open(out_filename, "w")
8386     except IOError:
8387         sys.exit("Could not open %s for writing: %s" % (out_filename,
8388                 IOError))
8389
8390     # Set msg to current stdout
8391     msg = sys.stdout
8392
8393     # Set stdout to the output file
8394     sys.stdout = out_file
8395
8396     msg.write("Processing NCP definitions...\n")
8397     # Run the code, and if we catch any exception,
8398     # erase the output file.
8399     try:
8400         compcode_lists  = UniqueCollection('Completion Code Lists')
8401         ptvc_lists      = UniqueCollection('PTVC Lists')
8402
8403         define_errors()
8404         define_groups()
8405
8406         define_ncp2222()
8407
8408         msg.write("Defined %d NCP types.\n" % (len(packets),))
8409         produce_code()
8410     except:
8411         traceback.print_exc(20, msg)
8412         try:
8413             out_file.close()
8414         except IOError:
8415             msg.write("Could not close %s: %s\n" % (out_filename, IOError))
8416
8417         try:
8418             if os.path.exists(out_filename):
8419                 os.remove(out_filename)
8420         except OSError:
8421             msg.write("Could not remove %s: %s\n" % (out_filename, OSError))
8422
8423         sys.exit(1)
8424
8425
8426
8427 def define_ncp2222():
8428     ##############################################################################
8429     # NCP Packets. Here I list functions and subfunctions in hexadecimal like the
8430     # NCP book (and I believe LanAlyzer does this too).
8431     # However, Novell lists these in decimal in their on-line documentation.
8432     ##############################################################################
8433     # 2222/01
8434     pkt = NCP(0x01, "File Set Lock", 'sync')
8435     pkt.Request(7)
8436     pkt.Reply(8)
8437     pkt.CompletionCodes([0x0000])
8438     # 2222/02
8439     pkt = NCP(0x02, "File Release Lock", 'sync')
8440     pkt.Request(7)
8441     pkt.Reply(8)
8442     pkt.CompletionCodes([0x0000, 0xff00])
8443     # 2222/03
8444     pkt = NCP(0x03, "Log File Exclusive", 'sync')
8445     pkt.Request( (12, 267), [
8446             rec( 7, 1, DirHandle ),
8447             rec( 8, 1, LockFlag ),
8448             rec( 9, 2, TimeoutLimit, BE ),
8449             rec( 11, (1, 256), FilePath ),
8450     ])
8451     pkt.Reply(8)
8452     pkt.CompletionCodes([0x0000, 0x8200, 0x9600, 0xfe0d, 0xff01])
8453     # 2222/04
8454     pkt = NCP(0x04, "Lock File Set", 'sync')
8455     pkt.Request( 9, [
8456             rec( 7, 2, TimeoutLimit ),
8457     ])
8458     pkt.Reply(8)
8459     pkt.CompletionCodes([0x0000, 0xfe0d, 0xff01])
8460     ## 2222/05
8461     pkt = NCP(0x05, "Release File", 'sync')
8462     pkt.Request( (9, 264), [
8463             rec( 7, 1, DirHandle ),
8464             rec( 8, (1, 256), FilePath ),
8465     ])
8466     pkt.Reply(8)
8467     pkt.CompletionCodes([0x0000, 0x9b00, 0x9c03, 0xff1a])
8468     # 2222/06
8469     pkt = NCP(0x06, "Release File Set", 'sync')
8470     pkt.Request( 8, [
8471             rec( 7, 1, LockFlag ),
8472     ])
8473     pkt.Reply(8)
8474     pkt.CompletionCodes([0x0000])
8475     # 2222/07
8476     pkt = NCP(0x07, "Clear File", 'sync')
8477     pkt.Request( (9, 264), [
8478             rec( 7, 1, DirHandle ),
8479             rec( 8, (1, 256), FilePath ),
8480     ])
8481     pkt.Reply(8)
8482     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03,
8483             0xa100, 0xfd00, 0xff1a])
8484     # 2222/08
8485     pkt = NCP(0x08, "Clear File Set", 'sync')
8486     pkt.Request( 8, [
8487             rec( 7, 1, LockFlag ),
8488     ])
8489     pkt.Reply(8)
8490     pkt.CompletionCodes([0x0000])
8491     # 2222/09
8492     pkt = NCP(0x09, "Log Logical Record", 'sync')
8493     pkt.Request( (11, 138), [
8494             rec( 7, 1, LockFlag ),
8495             rec( 8, 2, TimeoutLimit, BE ),
8496             rec( 10, (1, 128), LogicalRecordName ),
8497     ], info_str=(LogicalRecordName, "Log Logical Record: %s", ", %s"))
8498     pkt.Reply(8)
8499     pkt.CompletionCodes([0x0000, 0x9600, 0xfe0d, 0xff1a])
8500     # 2222/0A, 10
8501     pkt = NCP(0x0A, "Lock Logical Record Set", 'sync')
8502     pkt.Request( 10, [
8503             rec( 7, 1, LockFlag ),
8504             rec( 8, 2, TimeoutLimit ),
8505     ])
8506     pkt.Reply(8)
8507     pkt.CompletionCodes([0x0000, 0xfe0d, 0xff1a])
8508     # 2222/0B, 11
8509     pkt = NCP(0x0B, "Clear Logical Record", 'sync')
8510     pkt.Request( (8, 135), [
8511             rec( 7, (1, 128), LogicalRecordName ),
8512     ], info_str=(LogicalRecordName, "Clear Logical Record: %s", ", %s"))
8513     pkt.Reply(8)
8514     pkt.CompletionCodes([0x0000, 0xff1a])
8515     # 2222/0C, 12
8516     pkt = NCP(0x0C, "Release Logical Record", 'sync')
8517     pkt.Request( (8, 135), [
8518             rec( 7, (1, 128), LogicalRecordName ),
8519     ], info_str=(LogicalRecordName, "Release Logical Record: %s", ", %s"))
8520     pkt.Reply(8)
8521     pkt.CompletionCodes([0x0000, 0xff1a])
8522     # 2222/0D, 13
8523     pkt = NCP(0x0D, "Release Logical Record Set", 'sync')
8524     pkt.Request( 8, [
8525             rec( 7, 1, LockFlag ),
8526     ])
8527     pkt.Reply(8)
8528     pkt.CompletionCodes([0x0000])
8529     # 2222/0E, 14
8530     pkt = NCP(0x0E, "Clear Logical Record Set", 'sync')
8531     pkt.Request( 8, [
8532             rec( 7, 1, LockFlag ),
8533     ])
8534     pkt.Reply(8)
8535     pkt.CompletionCodes([0x0000])
8536     # 2222/1100, 17/00
8537     pkt = NCP(0x1100, "Write to Spool File", 'print')
8538     pkt.Request( (11, 16), [
8539             rec( 10, ( 1, 6 ), Data ),
8540     ], info_str=(Data, "Write to Spool File: %s", ", %s"))
8541     pkt.Reply(8)
8542     pkt.CompletionCodes([0x0000, 0x0104, 0x8000, 0x8101, 0x8701, 0x8800,
8543                          0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9400, 0x9500,
8544                          0x9600, 0x9804, 0x9900, 0xa100, 0xa201, 0xff19])
8545     # 2222/1101, 17/01
8546     pkt = NCP(0x1101, "Close Spool File", 'print')
8547     pkt.Request( 11, [
8548             rec( 10, 1, AbortQueueFlag ),
8549     ])
8550     pkt.Reply(8)
8551     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8701, 0x8800, 0x8d00,
8552                          0x8e00, 0x8f00, 0x9001, 0x9300, 0x9400, 0x9500,
8553                          0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03, 0x9d00,
8554                          0xa100, 0xd000, 0xd100, 0xd202, 0xd300, 0xd400,
8555                          0xda01, 0xe800, 0xea00, 0xeb00, 0xec00, 0xfc06,
8556                          0xfd00, 0xfe07, 0xff06])
8557     # 2222/1102, 17/02
8558     pkt = NCP(0x1102, "Set Spool File Flags", 'print')
8559     pkt.Request( 30, [
8560             rec( 10, 1, PrintFlags ),
8561             rec( 11, 1, TabSize ),
8562             rec( 12, 1, TargetPrinter ),
8563             rec( 13, 1, Copies ),
8564             rec( 14, 1, FormType ),
8565             rec( 15, 1, Reserved ),
8566             rec( 16, 14, BannerName ),
8567     ])
8568     pkt.Reply(8)
8569     pkt.CompletionCodes([0x0000, 0x9600, 0xd202, 0xd300, 0xe800, 0xea00,
8570                          0xeb00, 0xec00, 0xfc06, 0xfe07, 0xff06])
8571
8572     # 2222/1103, 17/03
8573     pkt = NCP(0x1103, "Spool A Disk File", 'print')
8574     pkt.Request( (12, 23), [
8575             rec( 10, 1, DirHandle ),
8576             rec( 11, (1, 12), Data ),
8577     ], info_str=(Data, "Spool a Disk File: %s", ", %s"))
8578     pkt.Reply(8)
8579     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8701, 0x8800, 0x8d00,
8580                          0x8e00, 0x8f00, 0x9001, 0x9300, 0x9400, 0x9500,
8581                          0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03, 0x9d00,
8582                          0xa100, 0xd000, 0xd100, 0xd202, 0xd300, 0xd400,
8583                          0xda01, 0xe800, 0xea00, 0xeb00, 0xec00, 0xfc06,
8584                          0xfd00, 0xfe07, 0xff06])
8585
8586     # 2222/1106, 17/06
8587     pkt = NCP(0x1106, "Get Printer Status", 'print')
8588     pkt.Request( 11, [
8589             rec( 10, 1, TargetPrinter ),
8590     ])
8591     pkt.Reply(12, [
8592             rec( 8, 1, PrinterHalted ),
8593             rec( 9, 1, PrinterOffLine ),
8594             rec( 10, 1, CurrentFormType ),
8595             rec( 11, 1, RedirectedPrinter ),
8596     ])
8597     pkt.CompletionCodes([0x0000, 0x9600, 0xfb05, 0xfd00, 0xff06])
8598
8599     # 2222/1109, 17/09
8600     pkt = NCP(0x1109, "Create Spool File", 'print')
8601     pkt.Request( (12, 23), [
8602             rec( 10, 1, DirHandle ),
8603             rec( 11, (1, 12), Data ),
8604     ], info_str=(Data, "Create Spool File: %s", ", %s"))
8605     pkt.Reply(8)
8606     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8400, 0x8701, 0x8d00,
8607                          0x8f00, 0x9001, 0x9400, 0x9600, 0x9804, 0x9900,
8608                          0x9b03, 0x9c03, 0xa100, 0xd000, 0xd100, 0xd202,
8609                          0xd300, 0xd400, 0xda01, 0xe800, 0xea00, 0xeb00,
8610                          0xec00, 0xfc06, 0xfd00, 0xfe07, 0xff06])
8611
8612     # 2222/110A, 17/10
8613     pkt = NCP(0x110A, "Get Printer's Queue", 'print')
8614     pkt.Request( 11, [
8615             rec( 10, 1, TargetPrinter ),
8616     ])
8617     pkt.Reply( 12, [
8618             rec( 8, 4, ObjectID, BE ),
8619     ])
8620     pkt.CompletionCodes([0x0000, 0x9600, 0xff06])
8621
8622     # 2222/12, 18
8623     pkt = NCP(0x12, "Get Volume Info with Number", 'file')
8624     pkt.Request( 8, [
8625             rec( 7, 1, VolumeNumber )
8626     ],info_str=(VolumeNumber, "Get Volume Information for Volume %d", ", %d"))
8627     pkt.Reply( 36, [
8628             rec( 8, 2, SectorsPerCluster, BE ),
8629             rec( 10, 2, TotalVolumeClusters, BE ),
8630             rec( 12, 2, AvailableClusters, BE ),
8631             rec( 14, 2, TotalDirectorySlots, BE ),
8632             rec( 16, 2, AvailableDirectorySlots, BE ),
8633             rec( 18, 16, VolumeName ),
8634             rec( 34, 2, RemovableFlag, BE ),
8635     ])
8636     pkt.CompletionCodes([0x0000, 0x9804])
8637
8638     # 2222/13, 19
8639     pkt = NCP(0x13, "Get Station Number", 'connection')
8640     pkt.Request(7)
8641     pkt.Reply(11, [
8642             rec( 8, 3, StationNumber )
8643     ])
8644     pkt.CompletionCodes([0x0000, 0xff00])
8645
8646     # 2222/14, 20
8647     pkt = NCP(0x14, "Get File Server Date And Time", 'fileserver')
8648     pkt.Request(7)
8649     pkt.Reply(15, [
8650             rec( 8, 1, Year ),
8651             rec( 9, 1, Month ),
8652             rec( 10, 1, Day ),
8653             rec( 11, 1, Hour ),
8654             rec( 12, 1, Minute ),
8655             rec( 13, 1, Second ),
8656             rec( 14, 1, DayOfWeek ),
8657     ])
8658     pkt.CompletionCodes([0x0000])
8659
8660     # 2222/1500, 21/00
8661     pkt = NCP(0x1500, "Send Broadcast Message", 'message')
8662     pkt.Request((13, 70), [
8663             rec( 10, 1, ClientListLen, var="x" ),
8664             rec( 11, 1, TargetClientList, repeat="x" ),
8665             rec( 12, (1, 58), TargetMessage ),
8666     ], info_str=(TargetMessage, "Send Broadcast Message: %s", ", %s"))
8667     pkt.Reply(10, [
8668             rec( 8, 1, ClientListLen, var="x" ),
8669             rec( 9, 1, SendStatus, repeat="x" )
8670     ])
8671     pkt.CompletionCodes([0x0000, 0xfd00])
8672
8673     # 2222/1501, 21/01
8674     pkt = NCP(0x1501, "Get Broadcast Message", 'message')
8675     pkt.Request(10)
8676     pkt.Reply((9,66), [
8677             rec( 8, (1, 58), TargetMessage )
8678     ])
8679     pkt.CompletionCodes([0x0000, 0xfd00])
8680
8681     # 2222/1502, 21/02
8682     pkt = NCP(0x1502, "Disable Broadcasts", 'message')
8683     pkt.Request(10)
8684     pkt.Reply(8)
8685     pkt.CompletionCodes([0x0000, 0xfb0a])
8686
8687     # 2222/1503, 21/03
8688     pkt = NCP(0x1503, "Enable Broadcasts", 'message')
8689     pkt.Request(10)
8690     pkt.Reply(8)
8691     pkt.CompletionCodes([0x0000])
8692
8693     # 2222/1509, 21/09
8694     pkt = NCP(0x1509, "Broadcast To Console", 'message')
8695     pkt.Request((11, 68), [
8696             rec( 10, (1, 58), TargetMessage )
8697     ], info_str=(TargetMessage, "Broadcast to Console: %s", ", %s"))
8698     pkt.Reply(8)
8699     pkt.CompletionCodes([0x0000])
8700
8701     # 2222/150A, 21/10
8702     pkt = NCP(0x150A, "Send Broadcast Message", 'message')
8703     pkt.Request((17, 74), [
8704             rec( 10, 2, ClientListCount, LE, var="x" ),
8705             rec( 12, 4, ClientList, LE, repeat="x" ),
8706             rec( 16, (1, 58), TargetMessage ),
8707     ], info_str=(TargetMessage, "Send Broadcast Message: %s", ", %s"))
8708     pkt.Reply(14, [
8709             rec( 8, 2, ClientListCount, LE, var="x" ),
8710             rec( 10, 4, ClientCompFlag, LE, repeat="x" ),
8711     ])
8712     pkt.CompletionCodes([0x0000, 0xfd00])
8713
8714     # 2222/150B, 21/11
8715     pkt = NCP(0x150B, "Get Broadcast Message", 'message')
8716     pkt.Request(10)
8717     pkt.Reply((9,66), [
8718             rec( 8, (1, 58), TargetMessage )
8719     ])
8720     pkt.CompletionCodes([0x0000, 0xfd00])
8721
8722     # 2222/150C, 21/12
8723     pkt = NCP(0x150C, "Connection Message Control", 'message')
8724     pkt.Request(22, [
8725             rec( 10, 1, ConnectionControlBits ),
8726             rec( 11, 3, Reserved3 ),
8727             rec( 14, 4, ConnectionListCount, LE, var="x" ),
8728             rec( 18, 4, ConnectionList, LE, repeat="x" ),
8729     ])
8730     pkt.Reply(8)
8731     pkt.CompletionCodes([0x0000, 0xff00])
8732
8733     # 2222/1600, 22/0
8734     pkt = NCP(0x1600, "Set Directory Handle", 'file')
8735     pkt.Request((13,267), [
8736             rec( 10, 1, TargetDirHandle ),
8737             rec( 11, 1, DirHandle ),
8738             rec( 12, (1, 255), Path ),
8739     ], info_str=(Path, "Set Directory Handle to: %s", ", %s"))
8740     pkt.Reply(8)
8741     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8742                          0xfd00, 0xff00])
8743
8744
8745     # 2222/1601, 22/1
8746     pkt = NCP(0x1601, "Get Directory Path", 'file')
8747     pkt.Request(11, [
8748             rec( 10, 1, DirHandle ),
8749     ],info_str=(DirHandle, "Get Directory Path for Directory Handle %d", ", %d"))
8750     pkt.Reply((9,263), [
8751             rec( 8, (1,255), Path ),
8752     ])
8753     pkt.CompletionCodes([0x0000, 0x9600, 0x9b00, 0x9c00, 0xa100])
8754
8755     # 2222/1602, 22/2
8756     pkt = NCP(0x1602, "Scan Directory Information", 'file')
8757     pkt.Request((14,268), [
8758             rec( 10, 1, DirHandle ),
8759             rec( 11, 2, StartingSearchNumber, BE ),
8760             rec( 13, (1, 255), Path ),
8761     ], info_str=(Path, "Scan Directory Information: %s", ", %s"))
8762     pkt.Reply(36, [
8763             rec( 8, 16, DirectoryPath ),
8764             rec( 24, 2, CreationDate, BE ),
8765             rec( 26, 2, CreationTime, BE ),
8766             rec( 28, 4, CreatorID, BE ),
8767             rec( 32, 1, AccessRightsMask ),
8768             rec( 33, 1, Reserved ),
8769             rec( 34, 2, NextSearchNumber, BE ),
8770     ])
8771     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8772                          0xfd00, 0xff00])
8773
8774     # 2222/1603, 22/3
8775     pkt = NCP(0x1603, "Get Effective Directory Rights", 'file')
8776     pkt.Request((12,266), [
8777             rec( 10, 1, DirHandle ),
8778             rec( 11, (1, 255), Path ),
8779     ], info_str=(Path, "Get Effective Directory Rights: %s", ", %s"))
8780     pkt.Reply(9, [
8781             rec( 8, 1, AccessRightsMask ),
8782     ])
8783     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8784                          0xfd00, 0xff00])
8785
8786     # 2222/1604, 22/4
8787     pkt = NCP(0x1604, "Modify Maximum Rights Mask", 'file')
8788     pkt.Request((14,268), [
8789             rec( 10, 1, DirHandle ),
8790             rec( 11, 1, RightsGrantMask ),
8791             rec( 12, 1, RightsRevokeMask ),
8792             rec( 13, (1, 255), Path ),
8793     ], info_str=(Path, "Modify Maximum Rights Mask: %s", ", %s"))
8794     pkt.Reply(8)
8795     pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8796                          0xfd00, 0xff00])
8797
8798     # 2222/1605, 22/5
8799     pkt = NCP(0x1605, "Get Volume Number", 'file')
8800     pkt.Request((11, 265), [
8801             rec( 10, (1,255), VolumeNameLen ),
8802     ], info_str=(VolumeNameLen, "Get Volume Number for: %s", ", %s"))
8803     pkt.Reply(9, [
8804             rec( 8, 1, VolumeNumber ),
8805     ])
8806     pkt.CompletionCodes([0x0000, 0x9600, 0x9804])
8807
8808     # 2222/1606, 22/6
8809     pkt = NCP(0x1606, "Get Volume Name", 'file')
8810     pkt.Request(11, [
8811             rec( 10, 1, VolumeNumber ),
8812     ],info_str=(VolumeNumber, "Get Name for Volume %d", ", %d"))
8813     pkt.Reply((9, 263), [
8814             rec( 8, (1,255), VolumeNameLen ),
8815     ])
8816     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0xff00])
8817
8818     # 2222/160A, 22/10
8819     pkt = NCP(0x160A, "Create Directory", 'file')
8820     pkt.Request((13,267), [
8821             rec( 10, 1, DirHandle ),
8822             rec( 11, 1, AccessRightsMask ),
8823             rec( 12, (1, 255), Path ),
8824     ], info_str=(Path, "Create Directory: %s", ", %s"))
8825     pkt.Reply(8)
8826     pkt.CompletionCodes([0x0000, 0x8400, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8827                          0x9e00, 0xa100, 0xfd00, 0xff00])
8828
8829     # 2222/160B, 22/11
8830     pkt = NCP(0x160B, "Delete Directory", 'file')
8831     pkt.Request((13,267), [
8832             rec( 10, 1, DirHandle ),
8833             rec( 11, 1, Reserved ),
8834             rec( 12, (1, 255), Path ),
8835     ], info_str=(Path, "Delete Directory: %s", ", %s"))
8836     pkt.Reply(8)
8837     pkt.CompletionCodes([0x0000, 0x8a00, 0x9600, 0x9804, 0x9b03, 0x9c03,
8838                          0x9f00, 0xa000, 0xa100, 0xfd00, 0xff00])
8839
8840     # 2222/160C, 22/12
8841     pkt = NCP(0x160C, "Scan Directory for Trustees", 'file')
8842     pkt.Request((13,267), [
8843             rec( 10, 1, DirHandle ),
8844             rec( 11, 1, TrusteeSetNumber ),
8845             rec( 12, (1, 255), Path ),
8846     ], info_str=(Path, "Scan Directory for Trustees: %s", ", %s"))
8847     pkt.Reply(57, [
8848             rec( 8, 16, DirectoryPath ),
8849             rec( 24, 2, CreationDate, BE ),
8850             rec( 26, 2, CreationTime, BE ),
8851             rec( 28, 4, CreatorID ),
8852             rec( 32, 4, TrusteeID, BE ),
8853             rec( 36, 4, TrusteeID, BE ),
8854             rec( 40, 4, TrusteeID, BE ),
8855             rec( 44, 4, TrusteeID, BE ),
8856             rec( 48, 4, TrusteeID, BE ),
8857             rec( 52, 1, AccessRightsMask ),
8858             rec( 53, 1, AccessRightsMask ),
8859             rec( 54, 1, AccessRightsMask ),
8860             rec( 55, 1, AccessRightsMask ),
8861             rec( 56, 1, AccessRightsMask ),
8862     ])
8863     pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c03,
8864                          0xa100, 0xfd00, 0xff00])
8865
8866     # 2222/160D, 22/13
8867     pkt = NCP(0x160D, "Add Trustee to Directory", 'file')
8868     pkt.Request((17,271), [
8869             rec( 10, 1, DirHandle ),
8870             rec( 11, 4, TrusteeID, BE ),
8871             rec( 15, 1, AccessRightsMask ),
8872             rec( 16, (1, 255), Path ),
8873     ], info_str=(Path, "Add Trustee to Directory: %s", ", %s"))
8874     pkt.Reply(8)
8875     pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8876                          0xa100, 0xfc06, 0xfd00, 0xff00])
8877
8878     # 2222/160E, 22/14
8879     pkt = NCP(0x160E, "Delete Trustee from Directory", 'file')
8880     pkt.Request((17,271), [
8881             rec( 10, 1, DirHandle ),
8882             rec( 11, 4, TrusteeID, BE ),
8883             rec( 15, 1, Reserved ),
8884             rec( 16, (1, 255), Path ),
8885     ], info_str=(Path, "Delete Trustee from Directory: %s", ", %s"))
8886     pkt.Reply(8)
8887     pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8888                          0xa100, 0xfc06, 0xfd00, 0xfe07, 0xff00])
8889
8890     # 2222/160F, 22/15
8891     pkt = NCP(0x160F, "Rename Directory", 'file')
8892     pkt.Request((13, 521), [
8893             rec( 10, 1, DirHandle ),
8894             rec( 11, (1, 255), Path ),
8895             rec( -1, (1, 255), NewPath ),
8896     ], info_str=(Path, "Rename Directory: %s", ", %s"))
8897     pkt.Reply(8)
8898     pkt.CompletionCodes([0x0000, 0x8b00, 0x9200, 0x9600, 0x9804, 0x9b03, 0x9c03,
8899                          0x9e00, 0xa100, 0xef00, 0xfd00, 0xff00])
8900
8901     # 2222/1610, 22/16
8902     pkt = NCP(0x1610, "Purge Erased Files", 'file')
8903     pkt.Request(10)
8904     pkt.Reply(8)
8905     pkt.CompletionCodes([0x0000, 0x8100, 0x9600, 0x9804, 0xa100, 0xff00])
8906
8907     # 2222/1611, 22/17
8908     pkt = NCP(0x1611, "Recover Erased File", 'file')
8909     pkt.Request(11, [
8910             rec( 10, 1, DirHandle ),
8911     ],info_str=(DirHandle, "Recover Erased File from Directory Handle %d", ", %d"))
8912     pkt.Reply(38, [
8913             rec( 8, 15, OldFileName ),
8914             rec( 23, 15, NewFileName ),
8915     ])
8916     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03,
8917                          0xa100, 0xfd00, 0xff00])
8918     # 2222/1612, 22/18
8919     pkt = NCP(0x1612, "Alloc Permanent Directory Handle", 'file')
8920     pkt.Request((13, 267), [
8921             rec( 10, 1, DirHandle ),
8922             rec( 11, 1, DirHandleName ),
8923             rec( 12, (1,255), Path ),
8924     ], info_str=(Path, "Allocate Permanent Directory Handle: %s", ", %s"))
8925     pkt.Reply(10, [
8926             rec( 8, 1, DirHandle ),
8927             rec( 9, 1, AccessRightsMask ),
8928     ])
8929     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9b00, 0x9c03, 0x9d00,
8930                          0xa100, 0xfd00, 0xff00])
8931     # 2222/1613, 22/19
8932     pkt = NCP(0x1613, "Alloc Temporary Directory Handle", 'file')
8933     pkt.Request((13, 267), [
8934             rec( 10, 1, DirHandle ),
8935             rec( 11, 1, DirHandleName ),
8936             rec( 12, (1,255), Path ),
8937     ], info_str=(Path, "Allocate Temporary Directory Handle: %s", ", %s"))
8938     pkt.Reply(10, [
8939             rec( 8, 1, DirHandle ),
8940             rec( 9, 1, AccessRightsMask ),
8941     ])
8942     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8943                          0xa100, 0xfd00, 0xff00])
8944     # 2222/1614, 22/20
8945     pkt = NCP(0x1614, "Deallocate Directory Handle", 'file')
8946     pkt.Request(11, [
8947             rec( 10, 1, DirHandle ),
8948     ],info_str=(DirHandle, "Deallocate Directory Handle %d", ", %d"))
8949     pkt.Reply(8)
8950     pkt.CompletionCodes([0x0000, 0x9b03])
8951     # 2222/1615, 22/21
8952     pkt = NCP(0x1615, "Get Volume Info with Handle", 'file')
8953     pkt.Request( 11, [
8954             rec( 10, 1, DirHandle )
8955     ],info_str=(DirHandle, "Get Volume Information with Handle %d", ", %d"))
8956     pkt.Reply( 36, [
8957             rec( 8, 2, SectorsPerCluster, BE ),
8958             rec( 10, 2, TotalVolumeClusters, BE ),
8959             rec( 12, 2, AvailableClusters, BE ),
8960             rec( 14, 2, TotalDirectorySlots, BE ),
8961             rec( 16, 2, AvailableDirectorySlots, BE ),
8962             rec( 18, 16, VolumeName ),
8963             rec( 34, 2, RemovableFlag, BE ),
8964     ])
8965     pkt.CompletionCodes([0x0000, 0xff00])
8966     # 2222/1616, 22/22
8967     pkt = NCP(0x1616, "Alloc Special Temporary Directory Handle", 'file')
8968     pkt.Request((13, 267), [
8969             rec( 10, 1, DirHandle ),
8970             rec( 11, 1, DirHandleName ),
8971             rec( 12, (1,255), Path ),
8972     ], info_str=(Path, "Allocate Special Temporary Directory Handle: %s", ", %s"))
8973     pkt.Reply(10, [
8974             rec( 8, 1, DirHandle ),
8975             rec( 9, 1, AccessRightsMask ),
8976     ])
8977     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9b00, 0x9c03, 0x9d00,
8978                          0xa100, 0xfd00, 0xff00])
8979     # 2222/1617, 22/23
8980     pkt = NCP(0x1617, "Extract a Base Handle", 'file')
8981     pkt.Request(11, [
8982             rec( 10, 1, DirHandle ),
8983     ],info_str=(DirHandle, "Extract a Base Handle from Directory Handle %d", ", %d"))
8984     pkt.Reply(22, [
8985             rec( 8, 10, ServerNetworkAddress ),
8986             rec( 18, 4, DirHandleLong ),
8987     ])
8988     pkt.CompletionCodes([0x0000, 0x9600, 0x9b03])
8989     # 2222/1618, 22/24
8990     pkt = NCP(0x1618, "Restore an Extracted Base Handle", 'file')
8991     pkt.Request(24, [
8992             rec( 10, 10, ServerNetworkAddress ),
8993             rec( 20, 4, DirHandleLong ),
8994     ])
8995     pkt.Reply(10, [
8996             rec( 8, 1, DirHandle ),
8997             rec( 9, 1, AccessRightsMask ),
8998     ])
8999     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c00, 0x9d00, 0xa100,
9000                          0xfd00, 0xff00])
9001     # 2222/1619, 22/25
9002     pkt = NCP(0x1619, "Set Directory Information", 'file')
9003     pkt.Request((21, 275), [
9004             rec( 10, 1, DirHandle ),
9005             rec( 11, 2, CreationDate ),
9006             rec( 13, 2, CreationTime ),
9007             rec( 15, 4, CreatorID, BE ),
9008             rec( 19, 1, AccessRightsMask ),
9009             rec( 20, (1,255), Path ),
9010     ], info_str=(Path, "Set Directory Information: %s", ", %s"))
9011     pkt.Reply(8)
9012     pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c00, 0xa100,
9013                          0xff16])
9014     # 2222/161A, 22/26
9015     pkt = NCP(0x161A, "Get Path Name of a Volume-Directory Number Pair", 'file')
9016     pkt.Request(13, [
9017             rec( 10, 1, VolumeNumber ),
9018             rec( 11, 2, DirectoryEntryNumberWord ),
9019     ])
9020     pkt.Reply((9,263), [
9021             rec( 8, (1,255), Path ),
9022             ])
9023     pkt.CompletionCodes([0x0000, 0x9804, 0x9c00, 0xa100])
9024     # 2222/161B, 22/27
9025     pkt = NCP(0x161B, "Scan Salvageable Files", 'file')
9026     pkt.Request(15, [
9027             rec( 10, 1, DirHandle ),
9028             rec( 11, 4, SequenceNumber ),
9029     ])
9030     pkt.Reply(140, [
9031             rec( 8, 4, SequenceNumber ),
9032             rec( 12, 2, Subdirectory ),
9033             rec( 14, 2, Reserved2 ),
9034             rec( 16, 4, AttributesDef32 ),
9035             rec( 20, 1, UniqueID ),
9036             rec( 21, 1, FlagsDef ),
9037             rec( 22, 1, DestNameSpace ),
9038             rec( 23, 1, FileNameLen ),
9039             rec( 24, 12, FileName12 ),
9040             rec( 36, 2, CreationTime ),
9041             rec( 38, 2, CreationDate ),
9042             rec( 40, 4, CreatorID, BE ),
9043             rec( 44, 2, ArchivedTime ),
9044             rec( 46, 2, ArchivedDate ),
9045             rec( 48, 4, ArchiverID, BE ),
9046             rec( 52, 2, UpdateTime ),
9047             rec( 54, 2, UpdateDate ),
9048             rec( 56, 4, UpdateID, BE ),
9049             rec( 60, 4, FileSize, BE ),
9050             rec( 64, 44, Reserved44 ),
9051             rec( 108, 2, InheritedRightsMask ),
9052             rec( 110, 2, LastAccessedDate ),
9053             rec( 112, 4, DeletedFileTime ),
9054             rec( 116, 2, DeletedTime ),
9055             rec( 118, 2, DeletedDate ),
9056             rec( 120, 4, DeletedID, BE ),
9057             rec( 124, 16, Reserved16 ),
9058     ])
9059     pkt.CompletionCodes([0x0000, 0xfb01, 0x9801, 0xff1d])
9060     # 2222/161C, 22/28
9061     pkt = NCP(0x161C, "Recover Salvageable File", 'file')
9062     pkt.Request((17,525), [
9063             rec( 10, 1, DirHandle ),
9064             rec( 11, 4, SequenceNumber ),
9065             rec( 15, (1, 255), FileName ),
9066             rec( -1, (1, 255), NewFileNameLen ),
9067     ], info_str=(FileName, "Recover File: %s", ", %s"))
9068     pkt.Reply(8)
9069     pkt.CompletionCodes([0x0000, 0x8401, 0x9c03, 0xfe02])
9070     # 2222/161D, 22/29
9071     pkt = NCP(0x161D, "Purge Salvageable File", 'file')
9072     pkt.Request(15, [
9073             rec( 10, 1, DirHandle ),
9074             rec( 11, 4, SequenceNumber ),
9075     ])
9076     pkt.Reply(8)
9077     pkt.CompletionCodes([0x0000, 0x8500, 0x9c03])
9078     # 2222/161E, 22/30
9079     pkt = NCP(0x161E, "Scan a Directory", 'file')
9080     pkt.Request((17, 271), [
9081             rec( 10, 1, DirHandle ),
9082             rec( 11, 1, DOSFileAttributes ),
9083             rec( 12, 4, SequenceNumber ),
9084             rec( 16, (1, 255), SearchPattern ),
9085     ], info_str=(SearchPattern, "Scan a Directory: %s", ", %s"))
9086     pkt.Reply(140, [
9087             rec( 8, 4, SequenceNumber ),
9088             rec( 12, 4, Subdirectory ),
9089             rec( 16, 4, AttributesDef32 ),
9090             rec( 20, 1, UniqueID, LE ),
9091             rec( 21, 1, PurgeFlags ),
9092             rec( 22, 1, DestNameSpace ),
9093             rec( 23, 1, NameLen ),
9094             rec( 24, 12, Name12 ),
9095             rec( 36, 2, CreationTime ),
9096             rec( 38, 2, CreationDate ),
9097             rec( 40, 4, CreatorID, BE ),
9098             rec( 44, 2, ArchivedTime ),
9099             rec( 46, 2, ArchivedDate ),
9100             rec( 48, 4, ArchiverID, BE ),
9101             rec( 52, 2, UpdateTime ),
9102             rec( 54, 2, UpdateDate ),
9103             rec( 56, 4, UpdateID, BE ),
9104             rec( 60, 4, FileSize, BE ),
9105             rec( 64, 44, Reserved44 ),
9106             rec( 108, 2, InheritedRightsMask ),
9107             rec( 110, 2, LastAccessedDate ),
9108             rec( 112, 28, Reserved28 ),
9109     ])
9110     pkt.CompletionCodes([0x0000, 0x8500, 0x9c03])
9111     # 2222/161F, 22/31
9112     pkt = NCP(0x161F, "Get Directory Entry", 'file')
9113     pkt.Request(11, [
9114             rec( 10, 1, DirHandle ),
9115     ])
9116     pkt.Reply(136, [
9117             rec( 8, 4, Subdirectory ),
9118             rec( 12, 4, AttributesDef32 ),
9119             rec( 16, 1, UniqueID, LE ),
9120             rec( 17, 1, PurgeFlags ),
9121             rec( 18, 1, DestNameSpace ),
9122             rec( 19, 1, NameLen ),
9123             rec( 20, 12, Name12 ),
9124             rec( 32, 2, CreationTime ),
9125             rec( 34, 2, CreationDate ),
9126             rec( 36, 4, CreatorID, BE ),
9127             rec( 40, 2, ArchivedTime ),
9128             rec( 42, 2, ArchivedDate ),
9129             rec( 44, 4, ArchiverID, BE ),
9130             rec( 48, 2, UpdateTime ),
9131             rec( 50, 2, UpdateDate ),
9132             rec( 52, 4, NextTrusteeEntry, BE ),
9133             rec( 56, 48, Reserved48 ),
9134             rec( 104, 2, MaximumSpace ),
9135             rec( 106, 2, InheritedRightsMask ),
9136             rec( 108, 28, Undefined28 ),
9137     ])
9138     pkt.CompletionCodes([0x0000, 0x8900, 0xbf00, 0xfb00])
9139     # 2222/1620, 22/32
9140     pkt = NCP(0x1620, "Scan Volume's User Disk Restrictions", 'file')
9141     pkt.Request(15, [
9142             rec( 10, 1, VolumeNumber ),
9143             rec( 11, 4, SequenceNumber ),
9144     ])
9145     pkt.Reply(17, [
9146             rec( 8, 1, NumberOfEntries, var="x" ),
9147             rec( 9, 8, ObjectIDStruct, repeat="x" ),
9148     ])
9149     pkt.CompletionCodes([0x0000, 0x9800])
9150     # 2222/1621, 22/33
9151     pkt = NCP(0x1621, "Add User Disk Space Restriction", 'file')
9152     pkt.Request(19, [
9153             rec( 10, 1, VolumeNumber ),
9154             rec( 11, 4, ObjectID ),
9155             rec( 15, 4, DiskSpaceLimit ),
9156     ])
9157     pkt.Reply(8)
9158     pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9800])
9159     # 2222/1622, 22/34
9160     pkt = NCP(0x1622, "Remove User Disk Space Restrictions", 'file')
9161     pkt.Request(15, [
9162             rec( 10, 1, VolumeNumber ),
9163             rec( 11, 4, ObjectID ),
9164     ])
9165     pkt.Reply(8)
9166     pkt.CompletionCodes([0x0000, 0x8c00, 0xfe0e])
9167     # 2222/1623, 22/35
9168     pkt = NCP(0x1623, "Get Directory Disk Space Restriction", 'file')
9169     pkt.Request(11, [
9170             rec( 10, 1, DirHandle ),
9171     ])
9172     pkt.Reply(18, [
9173             rec( 8, 1, NumberOfEntries ),
9174             rec( 9, 1, Level ),
9175             rec( 10, 4, MaxSpace ),
9176             rec( 14, 4, CurrentSpace ),
9177     ])
9178     pkt.CompletionCodes([0x0000])
9179     # 2222/1624, 22/36
9180     pkt = NCP(0x1624, "Set Directory Disk Space Restriction", 'file')
9181     pkt.Request(15, [
9182             rec( 10, 1, DirHandle ),
9183             rec( 11, 4, DiskSpaceLimit ),
9184     ])
9185     pkt.Reply(8)
9186     pkt.CompletionCodes([0x0000, 0x0101, 0x8c00, 0xbf00])
9187     # 2222/1625, 22/37
9188     pkt = NCP(0x1625, "Set Directory Entry Information", 'file')
9189     pkt.Request(NO_LENGTH_CHECK, [
9190             #
9191             # XXX - this didn't match what was in the spec for 22/37
9192             # on the Novell Web site.
9193             #
9194             rec( 10, 1, DirHandle ),
9195             rec( 11, 1, SearchAttributes ),
9196             rec( 12, 4, SequenceNumber ),
9197             rec( 16, 2, ChangeBits ),
9198             rec( 18, 2, Reserved2 ),
9199             rec( 20, 4, Subdirectory ),
9200             #srec(DOSDirectoryEntryStruct, req_cond="ncp.search_att_sub == TRUE"),
9201             srec(DOSFileEntryStruct, req_cond="ncp.search_att_sub == FALSE"),
9202     ])
9203     pkt.Reply(8)
9204     pkt.ReqCondSizeConstant()
9205     pkt.CompletionCodes([0x0000, 0x0106, 0x8c00, 0xbf00])
9206     # 2222/1626, 22/38
9207     pkt = NCP(0x1626, "Scan File or Directory for Extended Trustees", 'file')
9208     pkt.Request((13,267), [
9209             rec( 10, 1, DirHandle ),
9210             rec( 11, 1, SequenceByte ),
9211             rec( 12, (1, 255), Path ),
9212     ], info_str=(Path, "Scan for Extended Trustees: %s", ", %s"))
9213     pkt.Reply(91, [
9214             rec( 8, 1, NumberOfEntries, var="x" ),
9215             rec( 9, 4, ObjectID ),
9216             rec( 13, 4, ObjectID ),
9217             rec( 17, 4, ObjectID ),
9218             rec( 21, 4, ObjectID ),
9219             rec( 25, 4, ObjectID ),
9220             rec( 29, 4, ObjectID ),
9221             rec( 33, 4, ObjectID ),
9222             rec( 37, 4, ObjectID ),
9223             rec( 41, 4, ObjectID ),
9224             rec( 45, 4, ObjectID ),
9225             rec( 49, 4, ObjectID ),
9226             rec( 53, 4, ObjectID ),
9227             rec( 57, 4, ObjectID ),
9228             rec( 61, 4, ObjectID ),
9229             rec( 65, 4, ObjectID ),
9230             rec( 69, 4, ObjectID ),
9231             rec( 73, 4, ObjectID ),
9232             rec( 77, 4, ObjectID ),
9233             rec( 81, 4, ObjectID ),
9234             rec( 85, 4, ObjectID ),
9235             rec( 89, 2, AccessRightsMaskWord, repeat="x" ),
9236     ])
9237     pkt.CompletionCodes([0x0000, 0x9800, 0x9b00, 0x9c00])
9238     # 2222/1627, 22/39
9239     pkt = NCP(0x1627, "Add Extended Trustee to Directory or File", 'file')
9240     pkt.Request((18,272), [
9241             rec( 10, 1, DirHandle ),
9242             rec( 11, 4, ObjectID, BE ),
9243             rec( 15, 2, TrusteeRights ),
9244             rec( 17, (1, 255), Path ),
9245     ], info_str=(Path, "Add Extended Trustee: %s", ", %s"))
9246     pkt.Reply(8)
9247     pkt.CompletionCodes([0x0000, 0x9000])
9248     # 2222/1628, 22/40
9249     pkt = NCP(0x1628, "Scan Directory Disk Space", 'file')
9250     pkt.Request((17,271), [
9251             rec( 10, 1, DirHandle ),
9252             rec( 11, 1, SearchAttributes ),
9253             rec( 12, 4, SequenceNumber ),
9254             rec( 16, (1, 255), SearchPattern ),
9255     ], info_str=(SearchPattern, "Scan Directory Disk Space: %s", ", %s"))
9256     pkt.Reply((148), [
9257             rec( 8, 4, SequenceNumber ),
9258             rec( 12, 4, Subdirectory ),
9259             rec( 16, 4, AttributesDef32 ),
9260             rec( 20, 1, UniqueID ),
9261             rec( 21, 1, PurgeFlags ),
9262             rec( 22, 1, DestNameSpace ),
9263             rec( 23, 1, NameLen ),
9264             rec( 24, 12, Name12 ),
9265             rec( 36, 2, CreationTime ),
9266             rec( 38, 2, CreationDate ),
9267             rec( 40, 4, CreatorID, BE ),
9268             rec( 44, 2, ArchivedTime ),
9269             rec( 46, 2, ArchivedDate ),
9270             rec( 48, 4, ArchiverID, BE ),
9271             rec( 52, 2, UpdateTime ),
9272             rec( 54, 2, UpdateDate ),
9273             rec( 56, 4, UpdateID, BE ),
9274             rec( 60, 4, DataForkSize, BE ),
9275             rec( 64, 4, DataForkFirstFAT, BE ),
9276             rec( 68, 4, NextTrusteeEntry, BE ),
9277             rec( 72, 36, Reserved36 ),
9278             rec( 108, 2, InheritedRightsMask ),
9279             rec( 110, 2, LastAccessedDate ),
9280             rec( 112, 4, DeletedFileTime ),
9281             rec( 116, 2, DeletedTime ),
9282             rec( 118, 2, DeletedDate ),
9283             rec( 120, 4, DeletedID, BE ),
9284             rec( 124, 8, Undefined8 ),
9285             rec( 132, 4, PrimaryEntry, LE ),
9286             rec( 136, 4, NameList, LE ),
9287             rec( 140, 4, OtherFileForkSize, BE ),
9288             rec( 144, 4, OtherFileForkFAT, BE ),
9289     ])
9290     pkt.CompletionCodes([0x0000, 0x8900, 0x9c03, 0xfb01, 0xff00])
9291     # 2222/1629, 22/41
9292     pkt = NCP(0x1629, "Get Object Disk Usage and Restrictions", 'file')
9293     pkt.Request(15, [
9294             rec( 10, 1, VolumeNumber ),
9295             rec( 11, 4, ObjectID, LE ),
9296     ])
9297     pkt.Reply(16, [
9298             rec( 8, 4, Restriction ),
9299             rec( 12, 4, InUse ),
9300     ])
9301     pkt.CompletionCodes([0x0000, 0x9802])
9302     # 2222/162A, 22/42
9303     pkt = NCP(0x162A, "Get Effective Rights for Directory Entry", 'file')
9304     pkt.Request((12,266), [
9305             rec( 10, 1, DirHandle ),
9306             rec( 11, (1, 255), Path ),
9307     ], info_str=(Path, "Get Effective Rights: %s", ", %s"))
9308     pkt.Reply(10, [
9309             rec( 8, 2, AccessRightsMaskWord ),
9310     ])
9311     pkt.CompletionCodes([0x0000, 0x9804, 0x9c03])
9312     # 2222/162B, 22/43
9313     pkt = NCP(0x162B, "Remove Extended Trustee from Dir or File", 'file')
9314     pkt.Request((17,271), [
9315             rec( 10, 1, DirHandle ),
9316             rec( 11, 4, ObjectID, BE ),
9317             rec( 15, 1, Unused ),
9318             rec( 16, (1, 255), Path ),
9319     ], info_str=(Path, "Remove Extended Trustee from %s", ", %s"))
9320     pkt.Reply(8)
9321     pkt.CompletionCodes([0x0000, 0x9002, 0x9c03, 0xfe0f, 0xff09])
9322     # 2222/162C, 22/44
9323     pkt = NCP(0x162C, "Get Volume and Purge Information", 'file')
9324     pkt.Request( 11, [
9325             rec( 10, 1, VolumeNumber )
9326     ],info_str=(VolumeNumber, "Get Volume and Purge Information for Volume %d", ", %d"))
9327     pkt.Reply( (38,53), [
9328             rec( 8, 4, TotalBlocks ),
9329             rec( 12, 4, FreeBlocks ),
9330             rec( 16, 4, PurgeableBlocks ),
9331             rec( 20, 4, NotYetPurgeableBlocks ),
9332             rec( 24, 4, TotalDirectoryEntries ),
9333             rec( 28, 4, AvailableDirEntries ),
9334             rec( 32, 4, Reserved4 ),
9335             rec( 36, 1, SectorsPerBlock ),
9336             rec( 37, (1,16), VolumeNameLen ),
9337     ])
9338     pkt.CompletionCodes([0x0000])
9339     # 2222/162D, 22/45
9340     pkt = NCP(0x162D, "Get Directory Information", 'file')
9341     pkt.Request( 11, [
9342             rec( 10, 1, DirHandle )
9343     ])
9344     pkt.Reply( (30, 45), [
9345             rec( 8, 4, TotalBlocks ),
9346             rec( 12, 4, AvailableBlocks ),
9347             rec( 16, 4, TotalDirectoryEntries ),
9348             rec( 20, 4, AvailableDirEntries ),
9349             rec( 24, 4, Reserved4 ),
9350             rec( 28, 1, SectorsPerBlock ),
9351             rec( 29, (1,16), VolumeNameLen ),
9352     ])
9353     pkt.CompletionCodes([0x0000, 0x9b03])
9354     # 2222/162E, 22/46
9355     pkt = NCP(0x162E, "Rename Or Move", 'file')
9356     pkt.Request( (17,525), [
9357             rec( 10, 1, SourceDirHandle ),
9358             rec( 11, 1, SearchAttributes ),
9359             rec( 12, 1, SourcePathComponentCount ),
9360             rec( 13, (1,255), SourcePath ),
9361             rec( -1, 1, DestDirHandle ),
9362             rec( -1, 1, DestPathComponentCount ),
9363             rec( -1, (1,255), DestPath ),
9364     ], info_str=(SourcePath, "Rename or Move: %s", ", %s"))
9365     pkt.Reply(8)
9366     pkt.CompletionCodes([0x0000, 0x0102, 0x8701, 0x8b00, 0x8d00, 0x8e00,
9367                          0x8f00, 0x9001, 0x9101, 0x9201, 0x9a00, 0x9b03,
9368                          0x9c03, 0xa400, 0xff17])
9369     # 2222/162F, 22/47
9370     pkt = NCP(0x162F, "Get Name Space Information", 'file')
9371     pkt.Request( 11, [
9372             rec( 10, 1, VolumeNumber )
9373     ],info_str=(VolumeNumber, "Get Name Space Information for Volume %d", ", %d"))
9374     pkt.Reply( (15,523), [
9375             #
9376             # XXX - why does this not display anything at all
9377             # if the stuff after the first IndexNumber is
9378             # un-commented?  That stuff really is there....
9379             #
9380             rec( 8, 1, DefinedNameSpaces, var="v" ),
9381             rec( 9, (1,255), NameSpaceName, repeat="v" ),
9382             rec( -1, 1, DefinedDataStreams, var="w" ),
9383             rec( -1, (2,256), DataStreamInfo, repeat="w" ),
9384             rec( -1, 1, LoadedNameSpaces, var="x" ),
9385             rec( -1, 1, IndexNumber, repeat="x" ),
9386 #               rec( -1, 1, VolumeNameSpaces, var="y" ),
9387 #               rec( -1, 1, IndexNumber, repeat="y" ),
9388 #               rec( -1, 1, VolumeDataStreams, var="z" ),
9389 #               rec( -1, 1, IndexNumber, repeat="z" ),
9390     ])
9391     pkt.CompletionCodes([0x0000, 0x9802, 0xff00])
9392     # 2222/1630, 22/48
9393     pkt = NCP(0x1630, "Get Name Space Directory Entry", 'file')
9394     pkt.Request( 16, [
9395             rec( 10, 1, VolumeNumber ),
9396             rec( 11, 4, DOSSequence ),
9397             rec( 15, 1, SrcNameSpace ),
9398     ])
9399     pkt.Reply( 112, [
9400             rec( 8, 4, SequenceNumber ),
9401             rec( 12, 4, Subdirectory ),
9402             rec( 16, 4, AttributesDef32 ),
9403             rec( 20, 1, UniqueID ),
9404             rec( 21, 1, Flags ),
9405             rec( 22, 1, SrcNameSpace ),
9406             rec( 23, 1, NameLength ),
9407             rec( 24, 12, Name12 ),
9408             rec( 36, 2, CreationTime ),
9409             rec( 38, 2, CreationDate ),
9410             rec( 40, 4, CreatorID, BE ),
9411             rec( 44, 2, ArchivedTime ),
9412             rec( 46, 2, ArchivedDate ),
9413             rec( 48, 4, ArchiverID ),
9414             rec( 52, 2, UpdateTime ),
9415             rec( 54, 2, UpdateDate ),
9416             rec( 56, 4, UpdateID ),
9417             rec( 60, 4, FileSize ),
9418             rec( 64, 44, Reserved44 ),
9419             rec( 108, 2, InheritedRightsMask ),
9420             rec( 110, 2, LastAccessedDate ),
9421     ])
9422     pkt.CompletionCodes([0x0000, 0x8900, 0x9802, 0xbf00])
9423     # 2222/1631, 22/49
9424     pkt = NCP(0x1631, "Open Data Stream", 'file')
9425     pkt.Request( (15,269), [
9426             rec( 10, 1, DataStream ),
9427             rec( 11, 1, DirHandle ),
9428             rec( 12, 1, AttributesDef ),
9429             rec( 13, 1, OpenRights ),
9430             rec( 14, (1, 255), FileName ),
9431     ], info_str=(FileName, "Open Data Stream: %s", ", %s"))
9432     pkt.Reply( 12, [
9433             rec( 8, 4, CCFileHandle, BE ),
9434     ])
9435     pkt.CompletionCodes([0x0000, 0x8000, 0x8200, 0x9002, 0xbe00, 0xff00])
9436     # 2222/1632, 22/50
9437     pkt = NCP(0x1632, "Get Object Effective Rights for Directory Entry", 'file')
9438     pkt.Request( (16,270), [
9439             rec( 10, 4, ObjectID, BE ),
9440             rec( 14, 1, DirHandle ),
9441             rec( 15, (1, 255), Path ),
9442     ], info_str=(Path, "Get Object Effective Rights: %s", ", %s"))
9443     pkt.Reply( 10, [
9444             rec( 8, 2, TrusteeRights ),
9445     ])
9446     pkt.CompletionCodes([0x0000, 0x7e01, 0x9b00, 0x9c03, 0xfc06])
9447     # 2222/1633, 22/51
9448     pkt = NCP(0x1633, "Get Extended Volume Information", 'file')
9449     pkt.Request( 11, [
9450             rec( 10, 1, VolumeNumber ),
9451     ],info_str=(VolumeNumber, "Get Extended Volume Information for Volume %d", ", %d"))
9452     pkt.Reply( (139,266), [
9453             rec( 8, 2, VolInfoReplyLen ),
9454             rec( 10, 128, VolInfoStructure),
9455             rec( 138, (1,128), VolumeNameLen ),
9456     ])
9457     pkt.CompletionCodes([0x0000, 0x7e01, 0x9804, 0xfb08, 0xff00])
9458     # 2222/1634, 22/52
9459     pkt = NCP(0x1634, "Get Mount Volume List", 'file')
9460     pkt.Request( 22, [
9461             rec( 10, 4, StartVolumeNumber ),
9462             rec( 14, 4, VolumeRequestFlags, LE ),
9463             rec( 18, 4, SrcNameSpace ),
9464     ])
9465     pkt.Reply( NO_LENGTH_CHECK, [
9466             rec( 8, 4, ItemsInPacket, var="x" ),
9467             rec( 12, 4, NextVolumeNumber ),
9468     srec( VolumeStruct, req_cond="ncp.volume_request_flags==0x0000", repeat="x" ),
9469     srec( VolumeWithNameStruct, req_cond="ncp.volume_request_flags==0x0001", repeat="x" ),
9470     ])
9471     pkt.ReqCondSizeVariable()
9472     pkt.CompletionCodes([0x0000, 0x9802])
9473 # 2222/1635, 22/53
9474     pkt = NCP(0x1635, "Get Volume Capabilities", 'file')
9475     pkt.Request( 18, [
9476             rec( 10, 4, VolumeNumberLong ),
9477             rec( 14, 4, VersionNumberLong ),
9478     ])
9479     pkt.Reply( 744, [
9480             rec( 8, 4, VolumeCapabilities ),
9481             rec( 12, 28, Reserved28 ),
9482     rec( 40, 64, VolumeNameStringz ),
9483     rec( 104, 128, VolumeGUID ),
9484             rec( 232, 256, PoolName ),
9485     rec( 488, 256, VolumeMountPoint ),
9486     ])
9487     pkt.CompletionCodes([0x0000])
9488     # 2222/1700, 23/00
9489     pkt = NCP(0x1700, "Login User", 'connection')
9490     pkt.Request( (12, 58), [
9491             rec( 10, (1,16), UserName ),
9492             rec( -1, (1,32), Password ),
9493     ], info_str=(UserName, "Login User: %s", ", %s"))
9494     pkt.Reply(8)
9495     pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc501, 0xd700,
9496                          0xd900, 0xda00, 0xdb00, 0xde00, 0xdf00, 0xe800,
9497                          0xec00, 0xed00, 0xef00, 0xf001, 0xf100, 0xf200,
9498                          0xf600, 0xfb00, 0xfc06, 0xfe07, 0xff00])
9499     # 2222/1701, 23/01
9500     pkt = NCP(0x1701, "Change User Password", 'bindery')
9501     pkt.Request( (13, 90), [
9502             rec( 10, (1,16), UserName ),
9503             rec( -1, (1,32), Password ),
9504             rec( -1, (1,32), NewPassword ),
9505     ], info_str=(UserName, "Change Password for User: %s", ", %s"))
9506     pkt.Reply(8)
9507     pkt.CompletionCodes([0x0000, 0x9600, 0xd600, 0xf001, 0xf101, 0xf501,
9508                          0xfc06, 0xfe07, 0xff00])
9509     # 2222/1702, 23/02
9510     pkt = NCP(0x1702, "Get User Connection List", 'connection')
9511     pkt.Request( (11, 26), [
9512             rec( 10, (1,16), UserName ),
9513     ], info_str=(UserName, "Get User Connection: %s", ", %s"))
9514     pkt.Reply( (9, 136), [
9515             rec( 8, (1, 128), ConnectionNumberList ),
9516     ])
9517     pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9518     # 2222/1703, 23/03
9519     pkt = NCP(0x1703, "Get User Number", 'bindery')
9520     pkt.Request( (11, 26), [
9521             rec( 10, (1,16), UserName ),
9522     ], info_str=(UserName, "Get User Number: %s", ", %s"))
9523     pkt.Reply( 12, [
9524             rec( 8, 4, ObjectID, BE ),
9525     ])
9526     pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9527     # 2222/1705, 23/05
9528     pkt = NCP(0x1705, "Get Station's Logged Info", 'connection')
9529     pkt.Request( 11, [
9530             rec( 10, 1, TargetConnectionNumber ),
9531     ],info_str=(TargetConnectionNumber, "Get Station's Logged Information on Connection %d", ", %d"))
9532     pkt.Reply( 266, [
9533             rec( 8, 16, UserName16 ),
9534             rec( 24, 7, LoginTime ),
9535             rec( 31, 39, FullName ),
9536             rec( 70, 4, UserID, BE ),
9537             rec( 74, 128, SecurityEquivalentList ),
9538             rec( 202, 64, Reserved64 ),
9539     ])
9540     pkt.CompletionCodes([0x0000, 0x9602, 0xfc06, 0xfd00, 0xfe07, 0xff00])
9541     # 2222/1707, 23/07
9542     pkt = NCP(0x1707, "Get Group Number", 'bindery')
9543     pkt.Request( 14, [
9544             rec( 10, 4, ObjectID, BE ),
9545     ])
9546     pkt.Reply( 62, [
9547             rec( 8, 4, ObjectID, BE ),
9548             rec( 12, 2, ObjectType, BE ),
9549             rec( 14, 48, ObjectNameLen ),
9550     ])
9551     pkt.CompletionCodes([0x0000, 0x9602, 0xf101, 0xfc06, 0xfe07, 0xff00])
9552     # 2222/170C, 23/12
9553     pkt = NCP(0x170C, "Verify Serialization", 'fileserver')
9554     pkt.Request( 14, [
9555             rec( 10, 4, ServerSerialNumber ),
9556     ])
9557     pkt.Reply(8)
9558     pkt.CompletionCodes([0x0000, 0xff00])
9559     # 2222/170D, 23/13
9560     pkt = NCP(0x170D, "Log Network Message", 'file')
9561     pkt.Request( (11, 68), [
9562             rec( 10, (1, 58), TargetMessage ),
9563     ], info_str=(TargetMessage, "Log Network Message: %s", ", %s"))
9564     pkt.Reply(8)
9565     pkt.CompletionCodes([0x0000, 0x8000, 0x8100, 0x8800, 0x8d00, 0x8e00, 0x8f00,
9566                          0x9001, 0x9400, 0x9600, 0x9804, 0x9900, 0x9b00, 0xa100,
9567                          0xa201, 0xff00])
9568     # 2222/170E, 23/14
9569     pkt = NCP(0x170E, "Get Disk Utilization", 'fileserver')
9570     pkt.Request( 15, [
9571             rec( 10, 1, VolumeNumber ),
9572             rec( 11, 4, TrusteeID, BE ),
9573     ])
9574     pkt.Reply( 19, [
9575             rec( 8, 1, VolumeNumber ),
9576             rec( 9, 4, TrusteeID, BE ),
9577             rec( 13, 2, DirectoryCount, BE ),
9578             rec( 15, 2, FileCount, BE ),
9579             rec( 17, 2, ClusterCount, BE ),
9580     ])
9581     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0xa100, 0xf200])
9582     # 2222/170F, 23/15
9583     pkt = NCP(0x170F, "Scan File Information", 'file')
9584     pkt.Request((15,269), [
9585             rec( 10, 2, LastSearchIndex ),
9586             rec( 12, 1, DirHandle ),
9587             rec( 13, 1, SearchAttributes ),
9588             rec( 14, (1, 255), FileName ),
9589     ], info_str=(FileName, "Scan File Information: %s", ", %s"))
9590     pkt.Reply( 102, [
9591             rec( 8, 2, NextSearchIndex ),
9592             rec( 10, 14, FileName14 ),
9593             rec( 24, 2, AttributesDef16 ),
9594             rec( 26, 4, FileSize, BE ),
9595             rec( 30, 2, CreationDate, BE ),
9596             rec( 32, 2, LastAccessedDate, BE ),
9597             rec( 34, 2, ModifiedDate, BE ),
9598             rec( 36, 2, ModifiedTime, BE ),
9599             rec( 38, 4, CreatorID, BE ),
9600             rec( 42, 2, ArchivedDate, BE ),
9601             rec( 44, 2, ArchivedTime, BE ),
9602             rec( 46, 56, Reserved56 ),
9603     ])
9604     pkt.CompletionCodes([0x0000, 0x8800, 0x8900, 0x9300, 0x9400, 0x9804, 0x9b00, 0x9c00,
9605                          0xa100, 0xfd00, 0xff17])
9606     # 2222/1710, 23/16
9607     pkt = NCP(0x1710, "Set File Information", 'file')
9608     pkt.Request((91,345), [
9609             rec( 10, 2, AttributesDef16 ),
9610             rec( 12, 4, FileSize, BE ),
9611             rec( 16, 2, CreationDate, BE ),
9612             rec( 18, 2, LastAccessedDate, BE ),
9613             rec( 20, 2, ModifiedDate, BE ),
9614             rec( 22, 2, ModifiedTime, BE ),
9615             rec( 24, 4, CreatorID, BE ),
9616             rec( 28, 2, ArchivedDate, BE ),
9617             rec( 30, 2, ArchivedTime, BE ),
9618             rec( 32, 56, Reserved56 ),
9619             rec( 88, 1, DirHandle ),
9620             rec( 89, 1, SearchAttributes ),
9621             rec( 90, (1, 255), FileName ),
9622     ], info_str=(FileName, "Set Information for File: %s", ", %s"))
9623     pkt.Reply(8)
9624     pkt.CompletionCodes([0x0000, 0x8800, 0x8c00, 0x8e00, 0x9400, 0x9600, 0x9804,
9625                          0x9b03, 0x9c00, 0xa100, 0xa201, 0xfc06, 0xfd00, 0xfe07,
9626                          0xff17])
9627     # 2222/1711, 23/17
9628     pkt = NCP(0x1711, "Get File Server Information", 'fileserver')
9629     pkt.Request(10)
9630     pkt.Reply(136, [
9631             rec( 8, 48, ServerName ),
9632             rec( 56, 1, OSMajorVersion ),
9633             rec( 57, 1, OSMinorVersion ),
9634             rec( 58, 2, ConnectionsSupportedMax, BE ),
9635             rec( 60, 2, ConnectionsInUse, BE ),
9636             rec( 62, 2, VolumesSupportedMax, BE ),
9637             rec( 64, 1, OSRevision ),
9638             rec( 65, 1, SFTSupportLevel ),
9639             rec( 66, 1, TTSLevel ),
9640             rec( 67, 2, ConnectionsMaxUsed, BE ),
9641             rec( 69, 1, AccountVersion ),
9642             rec( 70, 1, VAPVersion ),
9643             rec( 71, 1, QueueingVersion ),
9644             rec( 72, 1, PrintServerVersion ),
9645             rec( 73, 1, VirtualConsoleVersion ),
9646             rec( 74, 1, SecurityRestrictionVersion ),
9647             rec( 75, 1, InternetBridgeVersion ),
9648             rec( 76, 1, MixedModePathFlag ),
9649             rec( 77, 1, LocalLoginInfoCcode ),
9650             rec( 78, 2, ProductMajorVersion, BE ),
9651             rec( 80, 2, ProductMinorVersion, BE ),
9652             rec( 82, 2, ProductRevisionVersion, BE ),
9653             rec( 84, 1, OSLanguageID, LE ),
9654             rec( 85, 1, SixtyFourBitOffsetsSupportedFlag ),
9655             rec( 86, 1, OESServer ),
9656             rec( 87, 1, OESLinuxOrNetWare ),
9657             rec( 88, 48, Reserved48 ),
9658     ])
9659     pkt.CompletionCodes([0x0000, 0x9600])
9660     # 2222/1712, 23/18
9661     pkt = NCP(0x1712, "Get Network Serial Number", 'fileserver')
9662     pkt.Request(10)
9663     pkt.Reply(14, [
9664             rec( 8, 4, ServerSerialNumber ),
9665             rec( 12, 2, ApplicationNumber ),
9666     ])
9667     pkt.CompletionCodes([0x0000, 0x9600])
9668     # 2222/1713, 23/19
9669     pkt = NCP(0x1713, "Get Internet Address", 'connection')
9670     pkt.Request(11, [
9671             rec( 10, 1, TargetConnectionNumber ),
9672     ],info_str=(TargetConnectionNumber, "Get Internet Address for Connection %d", ", %d"))
9673     pkt.Reply(20, [
9674             rec( 8, 4, NetworkAddress, BE ),
9675             rec( 12, 6, NetworkNodeAddress ),
9676             rec( 18, 2, NetworkSocket, BE ),
9677     ])
9678     pkt.CompletionCodes([0x0000, 0xff00])
9679     # 2222/1714, 23/20
9680     pkt = NCP(0x1714, "Login Object", 'connection')
9681     pkt.Request( (14, 60), [
9682             rec( 10, 2, ObjectType, BE ),
9683             rec( 12, (1,16), ClientName ),
9684             rec( -1, (1,32), Password ),
9685     ], info_str=(UserName, "Login Object: %s", ", %s"))
9686     pkt.Reply(8)
9687     pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc501, 0xd600, 0xd700,
9688                          0xd900, 0xda00, 0xdb00, 0xde00, 0xdf00, 0xe800, 0xec00,
9689                          0xed00, 0xef00, 0xf001, 0xf100, 0xf200, 0xf600, 0xfb00,
9690                          0xfc06, 0xfe07, 0xff00])
9691     # 2222/1715, 23/21
9692     pkt = NCP(0x1715, "Get Object Connection List", 'connection')
9693     pkt.Request( (13, 28), [
9694             rec( 10, 2, ObjectType, BE ),
9695             rec( 12, (1,16), ObjectName ),
9696     ], info_str=(UserName, "Get Object Connection List: %s", ", %s"))
9697     pkt.Reply( (9, 136), [
9698             rec( 8, (1, 128), ConnectionNumberList ),
9699     ])
9700     pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9701     # 2222/1716, 23/22
9702     pkt = NCP(0x1716, "Get Station's Logged Info", 'connection')
9703     pkt.Request( 11, [
9704             rec( 10, 1, TargetConnectionNumber ),
9705     ])
9706     pkt.Reply( 70, [
9707             rec( 8, 4, UserID, BE ),
9708             rec( 12, 2, ObjectType, BE ),
9709             rec( 14, 48, ObjectNameLen ),
9710             rec( 62, 7, LoginTime ),
9711             rec( 69, 1, Reserved ),
9712     ])
9713     pkt.CompletionCodes([0x0000, 0x9602, 0xfb0a, 0xfc06, 0xfd00, 0xfe07, 0xff00])
9714     # 2222/1717, 23/23
9715     pkt = NCP(0x1717, "Get Login Key", 'connection')
9716     pkt.Request(10)
9717     pkt.Reply( 16, [
9718             rec( 8, 8, LoginKey ),
9719     ])
9720     pkt.CompletionCodes([0x0000, 0x9602])
9721     # 2222/1718, 23/24
9722     pkt = NCP(0x1718, "Keyed Object Login", 'connection')
9723     pkt.Request( (21, 68), [
9724             rec( 10, 8, LoginKey ),
9725             rec( 18, 2, ObjectType, BE ),
9726             rec( 20, (1,48), ObjectName ),
9727     ], info_str=(ObjectName, "Keyed Object Login: %s", ", %s"))
9728     pkt.Reply(8)
9729     pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc500, 0xd904, 0xda00,
9730                          0xdb00, 0xdc00, 0xde00, 0xff00])
9731     # 2222/171A, 23/26
9732     pkt = NCP(0x171A, "Get Internet Address", 'connection')
9733     pkt.Request(12, [
9734             rec( 10, 2, TargetConnectionNumber ),
9735     ])
9736 # Dissect reply in packet-ncp2222.inc
9737     pkt.Reply(8)
9738     pkt.CompletionCodes([0x0000])
9739     # 2222/171B, 23/27
9740     pkt = NCP(0x171B, "Get Object Connection List", 'connection')
9741     pkt.Request( (17,64), [
9742             rec( 10, 4, SearchConnNumber ),
9743             rec( 14, 2, ObjectType, BE ),
9744             rec( 16, (1,48), ObjectName ),
9745     ], info_str=(ObjectName, "Get Object Connection List: %s", ", %s"))
9746     pkt.Reply( (13), [
9747             rec( 8, 1, ConnListLen, var="x" ),
9748             rec( 9, 4, ConnectionNumber, LE, repeat="x" ),
9749     ])
9750     pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9751     # 2222/171C, 23/28
9752     pkt = NCP(0x171C, "Get Station's Logged Info", 'connection')
9753     pkt.Request( 14, [
9754             rec( 10, 4, TargetConnectionNumber ),
9755     ])
9756     pkt.Reply( 70, [
9757             rec( 8, 4, UserID, BE ),
9758             rec( 12, 2, ObjectType, BE ),
9759             rec( 14, 48, ObjectNameLen ),
9760             rec( 62, 7, LoginTime ),
9761             rec( 69, 1, Reserved ),
9762     ])
9763     pkt.CompletionCodes([0x0000, 0x7d00, 0x9602, 0xfb02, 0xfc06, 0xfd00, 0xfe07, 0xff00])
9764     # 2222/171D, 23/29
9765     pkt = NCP(0x171D, "Change Connection State", 'connection')
9766     pkt.Request( 11, [
9767             rec( 10, 1, RequestCode ),
9768     ])
9769     pkt.Reply(8)
9770     pkt.CompletionCodes([0x0000, 0x0109, 0x7a00, 0x7b00, 0x7c00, 0xe000, 0xfb06, 0xfd00])
9771     # 2222/171E, 23/30
9772     pkt = NCP(0x171E, "Set Watchdog Delay Interval", 'connection')
9773     pkt.Request( 14, [
9774             rec( 10, 4, NumberOfMinutesToDelay ),
9775     ])
9776     pkt.Reply(8)
9777     pkt.CompletionCodes([0x0000, 0x0107])
9778     # 2222/171F, 23/31
9779     pkt = NCP(0x171F, "Get Connection List From Object", 'connection')
9780     pkt.Request( 18, [
9781             rec( 10, 4, ObjectID, BE ),
9782             rec( 14, 4, ConnectionNumber ),
9783     ])
9784     pkt.Reply( (9, 136), [
9785             rec( 8, (1, 128), ConnectionNumberList ),
9786     ])
9787     pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9788     # 2222/1720, 23/32
9789     pkt = NCP(0x1720, "Scan Bindery Object (List)", 'bindery')
9790     pkt.Request((23,70), [
9791             rec( 10, 4, NextObjectID, BE ),
9792             rec( 14, 2, ObjectType, BE ),
9793     rec( 16, 2, Reserved2 ),
9794             rec( 18, 4, InfoFlags ),
9795             rec( 22, (1,48), ObjectName ),
9796     ], info_str=(ObjectName, "Scan Bindery Object: %s", ", %s"))
9797     pkt.Reply(NO_LENGTH_CHECK, [
9798             rec( 8, 4, ObjectInfoReturnCount ),
9799             rec( 12, 4, NextObjectID, BE ),
9800             rec( 16, 4, ObjectID ),
9801             srec(ObjectTypeStruct, req_cond="ncp.info_flags_type == TRUE"),
9802             srec(ObjectSecurityStruct, req_cond="ncp.info_flags_security == TRUE"),
9803             srec(ObjectFlagsStruct, req_cond="ncp.info_flags_flags == TRUE"),
9804             srec(ObjectNameStruct, req_cond="ncp.info_flags_name == TRUE"),
9805     ])
9806     pkt.ReqCondSizeVariable()
9807     pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xfc02, 0xfe01, 0xff00])
9808     # 2222/1721, 23/33
9809     pkt = NCP(0x1721, "Generate GUIDs", 'connection')
9810     pkt.Request( 14, [
9811             rec( 10, 4, ReturnInfoCount ),
9812     ])
9813     pkt.Reply(28, [
9814             rec( 8, 4, ReturnInfoCount, var="x" ),
9815             rec( 12, 16, GUID, repeat="x" ),
9816     ])
9817     pkt.CompletionCodes([0x0000, 0x7e01])
9818 # 2222/1722, 23/34
9819     pkt = NCP(0x1722, "Set Connection Language Encoding", 'connection')
9820     pkt.Request( 22, [
9821             rec( 10, 4, SetMask ),
9822     rec( 14, 4, NCPEncodedStringsBits ),
9823     rec( 18, 4, CodePage ),
9824     ])
9825     pkt.Reply(8)
9826     pkt.CompletionCodes([0x0000])
9827     # 2222/1732, 23/50
9828     pkt = NCP(0x1732, "Create Bindery Object", 'bindery')
9829     pkt.Request( (15,62), [
9830             rec( 10, 1, ObjectFlags ),
9831             rec( 11, 1, ObjectSecurity ),
9832             rec( 12, 2, ObjectType, BE ),
9833             rec( 14, (1,48), ObjectName ),
9834     ], info_str=(ObjectName, "Create Bindery Object: %s", ", %s"))
9835     pkt.Reply(8)
9836     pkt.CompletionCodes([0x0000, 0x9600, 0xe700, 0xee00, 0xef00, 0xf101, 0xf501,
9837                          0xfc06, 0xfe07, 0xff00])
9838     # 2222/1733, 23/51
9839     pkt = NCP(0x1733, "Delete Bindery Object", 'bindery')
9840     pkt.Request( (13,60), [
9841             rec( 10, 2, ObjectType, BE ),
9842             rec( 12, (1,48), ObjectName ),
9843     ], info_str=(ObjectName, "Delete Bindery Object: %s", ", %s"))
9844     pkt.Reply(8)
9845     pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf200, 0xf400, 0xf600, 0xfb00,
9846                          0xfc06, 0xfe07, 0xff00])
9847     # 2222/1734, 23/52
9848     pkt = NCP(0x1734, "Rename Bindery Object", 'bindery')
9849     pkt.Request( (14,108), [
9850             rec( 10, 2, ObjectType, BE ),
9851             rec( 12, (1,48), ObjectName ),
9852             rec( -1, (1,48), NewObjectName ),
9853     ], info_str=(ObjectName, "Rename Bindery Object: %s", ", %s"))
9854     pkt.Reply(8)
9855     pkt.CompletionCodes([0x0000, 0x9600, 0xee00, 0xf000, 0xf300, 0xfc06, 0xfe07, 0xff00])
9856     # 2222/1735, 23/53
9857     pkt = NCP(0x1735, "Get Bindery Object ID", 'bindery')
9858     pkt.Request((13,60), [
9859             rec( 10, 2, ObjectType, BE ),
9860             rec( 12, (1,48), ObjectName ),
9861     ], info_str=(ObjectName, "Get Bindery Object: %s", ", %s"))
9862     pkt.Reply(62, [
9863             rec( 8, 4, ObjectID, BE ),
9864             rec( 12, 2, ObjectType, BE ),
9865             rec( 14, 48, ObjectNameLen ),
9866     ])
9867     pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xf000, 0xfc02, 0xfe01, 0xff00])
9868     # 2222/1736, 23/54
9869     pkt = NCP(0x1736, "Get Bindery Object Name", 'bindery')
9870     pkt.Request( 14, [
9871             rec( 10, 4, ObjectID, BE ),
9872     ])
9873     pkt.Reply( 62, [
9874             rec( 8, 4, ObjectID, BE ),
9875             rec( 12, 2, ObjectType, BE ),
9876             rec( 14, 48, ObjectNameLen ),
9877     ])
9878     pkt.CompletionCodes([0x0000, 0x9600, 0xf101, 0xfc02, 0xfe01, 0xff00])
9879     # 2222/1737, 23/55
9880     pkt = NCP(0x1737, "Scan Bindery Object", 'bindery')
9881     pkt.Request((17,64), [
9882             rec( 10, 4, ObjectID, BE ),
9883             rec( 14, 2, ObjectType, BE ),
9884             rec( 16, (1,48), ObjectName ),
9885     ], info_str=(ObjectName, "Scan Bindery Object: %s", ", %s"))
9886     pkt.Reply(65, [
9887             rec( 8, 4, ObjectID, BE ),
9888             rec( 12, 2, ObjectType, BE ),
9889             rec( 14, 48, ObjectNameLen ),
9890             rec( 62, 1, ObjectFlags ),
9891             rec( 63, 1, ObjectSecurity ),
9892             rec( 64, 1, ObjectHasProperties ),
9893     ])
9894     pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xfc02,
9895                          0xfe01, 0xff00])
9896     # 2222/1738, 23/56
9897     pkt = NCP(0x1738, "Change Bindery Object Security", 'bindery')
9898     pkt.Request((14,61), [
9899             rec( 10, 1, ObjectSecurity ),
9900             rec( 11, 2, ObjectType, BE ),
9901             rec( 13, (1,48), ObjectName ),
9902     ], info_str=(ObjectName, "Change Bindery Object Security: %s", ", %s"))
9903     pkt.Reply(8)
9904     pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf501, 0xfc02, 0xfe01, 0xff00])
9905     # 2222/1739, 23/57
9906     pkt = NCP(0x1739, "Create Property", 'bindery')
9907     pkt.Request((16,78), [
9908             rec( 10, 2, ObjectType, BE ),
9909             rec( 12, (1,48), ObjectName ),
9910             rec( -1, 1, PropertyType ),
9911             rec( -1, 1, ObjectSecurity ),
9912             rec( -1, (1,16), PropertyName ),
9913     ], info_str=(PropertyName, "Create Property: %s", ", %s"))
9914     pkt.Reply(8)
9915     pkt.CompletionCodes([0x0000, 0x9600, 0xed00, 0xef00, 0xf000, 0xf101,
9916                          0xf200, 0xf600, 0xf700, 0xfb00, 0xfc02, 0xfe01,
9917                          0xff00])
9918     # 2222/173A, 23/58
9919     pkt = NCP(0x173A, "Delete Property", 'bindery')
9920     pkt.Request((14,76), [
9921             rec( 10, 2, ObjectType, BE ),
9922             rec( 12, (1,48), ObjectName ),
9923             rec( -1, (1,16), PropertyName ),
9924     ], info_str=(PropertyName, "Delete Property: %s", ", %s"))
9925     pkt.Reply(8)
9926     pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf600, 0xfb00, 0xfc02,
9927                          0xfe01, 0xff00])
9928     # 2222/173B, 23/59
9929     pkt = NCP(0x173B, "Change Property Security", 'bindery')
9930     pkt.Request((15,77), [
9931             rec( 10, 2, ObjectType, BE ),
9932             rec( 12, (1,48), ObjectName ),
9933             rec( -1, 1, ObjectSecurity ),
9934             rec( -1, (1,16), PropertyName ),
9935     ], info_str=(PropertyName, "Change Property Security: %s", ", %s"))
9936     pkt.Reply(8)
9937     pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf200, 0xf600, 0xfb00,
9938                          0xfc02, 0xfe01, 0xff00])
9939     # 2222/173C, 23/60
9940     pkt = NCP(0x173C, "Scan Property", 'bindery')
9941     pkt.Request((18,80), [
9942             rec( 10, 2, ObjectType, BE ),
9943             rec( 12, (1,48), ObjectName ),
9944             rec( -1, 4, LastInstance, BE ),
9945             rec( -1, (1,16), PropertyName ),
9946     ], info_str=(PropertyName, "Scan Property: %s", ", %s"))
9947     pkt.Reply( 32, [
9948             rec( 8, 16, PropertyName16 ),
9949             rec( 24, 1, ObjectFlags ),
9950             rec( 25, 1, ObjectSecurity ),
9951             rec( 26, 4, SearchInstance, BE ),
9952             rec( 30, 1, ValueAvailable ),
9953             rec( 31, 1, MoreProperties ),
9954     ])
9955     pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf200, 0xf600, 0xfb00,
9956                          0xfc02, 0xfe01, 0xff00])
9957     # 2222/173D, 23/61
9958     pkt = NCP(0x173D, "Read Property Value", 'bindery')
9959     pkt.Request((15,77), [
9960             rec( 10, 2, ObjectType, BE ),
9961             rec( 12, (1,48), ObjectName ),
9962             rec( -1, 1, PropertySegment ),
9963             rec( -1, (1,16), PropertyName ),
9964     ], info_str=(PropertyName, "Read Property Value: %s", ", %s"))
9965     pkt.Reply(138, [
9966             rec( 8, 128, PropertyData ),
9967             rec( 136, 1, PropertyHasMoreSegments ),
9968             rec( 137, 1, PropertyType ),
9969     ])
9970     pkt.CompletionCodes([0x0000, 0x8800, 0x9300, 0x9600, 0xec01,
9971                          0xf000, 0xf100, 0xf900, 0xfb02, 0xfc02,
9972                          0xfe01, 0xff00])
9973     # 2222/173E, 23/62
9974     pkt = NCP(0x173E, "Write Property Value", 'bindery')
9975     pkt.Request((144,206), [
9976             rec( 10, 2, ObjectType, BE ),
9977             rec( 12, (1,48), ObjectName ),
9978             rec( -1, 1, PropertySegment ),
9979             rec( -1, 1, MoreFlag ),
9980             rec( -1, (1,16), PropertyName ),
9981             #
9982             # XXX - don't show this if MoreFlag isn't set?
9983             # In at least some packages where it's not set,
9984             # PropertyValue appears to be garbage.
9985             #
9986             rec( -1, 128, PropertyValue ),
9987     ], info_str=(PropertyName, "Write Property Value: %s", ", %s"))
9988     pkt.Reply(8)
9989     pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xec01, 0xf000, 0xf800,
9990                          0xfb02, 0xfc03, 0xfe01, 0xff00 ])
9991     # 2222/173F, 23/63
9992     pkt = NCP(0x173F, "Verify Bindery Object Password", 'bindery')
9993     pkt.Request((14,92), [
9994             rec( 10, 2, ObjectType, BE ),
9995             rec( 12, (1,48), ObjectName ),
9996             rec( -1, (1,32), Password ),
9997     ], info_str=(ObjectName, "Verify Bindery Object Password: %s", ", %s"))
9998     pkt.Reply(8)
9999     pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xec01, 0xf000, 0xf101,
10000                          0xfb02, 0xfc03, 0xfe01, 0xff00 ])
10001     # 2222/1740, 23/64
10002     pkt = NCP(0x1740, "Change Bindery Object Password", 'bindery')
10003     pkt.Request((15,124), [
10004             rec( 10, 2, ObjectType, BE ),
10005             rec( 12, (1,48), ObjectName ),
10006             rec( -1, (1,32), Password ),
10007             rec( -1, (1,32), NewPassword ),
10008     ], info_str=(ObjectName, "Change Bindery Object Password: %s", ", %s"))
10009     pkt.Reply(8)
10010     pkt.CompletionCodes([0x0000, 0x9600, 0xc501, 0xd701, 0xe800, 0xec01, 0xf001,
10011                          0xf100, 0xf800, 0xfb02, 0xfc03, 0xfe01, 0xff00])
10012     # 2222/1741, 23/65
10013     pkt = NCP(0x1741, "Add Bindery Object To Set", 'bindery')
10014     pkt.Request((17,126), [
10015             rec( 10, 2, ObjectType, BE ),
10016             rec( 12, (1,48), ObjectName ),
10017             rec( -1, (1,16), PropertyName ),
10018             rec( -1, 2, MemberType, BE ),
10019             rec( -1, (1,48), MemberName ),
10020     ], info_str=(MemberName, "Add Bindery Object to Set: %s", ", %s"))
10021     pkt.Reply(8)
10022     pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xe900, 0xea00, 0xeb00,
10023                          0xec01, 0xf000, 0xf800, 0xfb02, 0xfc03, 0xfe01,
10024                          0xff00])
10025     # 2222/1742, 23/66
10026     pkt = NCP(0x1742, "Delete Bindery Object From Set", 'bindery')
10027     pkt.Request((17,126), [
10028             rec( 10, 2, ObjectType, BE ),
10029             rec( 12, (1,48), ObjectName ),
10030             rec( -1, (1,16), PropertyName ),
10031             rec( -1, 2, MemberType, BE ),
10032             rec( -1, (1,48), MemberName ),
10033     ], info_str=(MemberName, "Delete Bindery Object from Set: %s", ", %s"))
10034     pkt.Reply(8)
10035     pkt.CompletionCodes([0x0000, 0x9600, 0xeb00, 0xf000, 0xf800, 0xfb02,
10036                          0xfc03, 0xfe01, 0xff00])
10037     # 2222/1743, 23/67
10038     pkt = NCP(0x1743, "Is Bindery Object In Set", 'bindery')
10039     pkt.Request((17,126), [
10040             rec( 10, 2, ObjectType, BE ),
10041             rec( 12, (1,48), ObjectName ),
10042             rec( -1, (1,16), PropertyName ),
10043             rec( -1, 2, MemberType, BE ),
10044             rec( -1, (1,48), MemberName ),
10045     ], info_str=(MemberName, "Is Bindery Object in Set: %s", ", %s"))
10046     pkt.Reply(8)
10047     pkt.CompletionCodes([0x0000, 0x9600, 0xea00, 0xeb00, 0xec01, 0xf000,
10048                          0xfb02, 0xfc03, 0xfe01, 0xff00])
10049     # 2222/1744, 23/68
10050     pkt = NCP(0x1744, "Close Bindery", 'bindery')
10051     pkt.Request(10)
10052     pkt.Reply(8)
10053     pkt.CompletionCodes([0x0000, 0xff00])
10054     # 2222/1745, 23/69
10055     pkt = NCP(0x1745, "Open Bindery", 'bindery')
10056     pkt.Request(10)
10057     pkt.Reply(8)
10058     pkt.CompletionCodes([0x0000, 0xff00])
10059     # 2222/1746, 23/70
10060     pkt = NCP(0x1746, "Get Bindery Access Level", 'bindery')
10061     pkt.Request(10)
10062     pkt.Reply(13, [
10063             rec( 8, 1, ObjectSecurity ),
10064             rec( 9, 4, LoggedObjectID, BE ),
10065     ])
10066     pkt.CompletionCodes([0x0000, 0x9600])
10067     # 2222/1747, 23/71
10068     pkt = NCP(0x1747, "Scan Bindery Object Trustee Paths", 'bindery')
10069     pkt.Request(17, [
10070             rec( 10, 1, VolumeNumber ),
10071             rec( 11, 2, LastSequenceNumber, BE ),
10072             rec( 13, 4, ObjectID, BE ),
10073     ])
10074     pkt.Reply((16,270), [
10075             rec( 8, 2, LastSequenceNumber, BE),
10076             rec( 10, 4, ObjectID, BE ),
10077             rec( 14, 1, ObjectSecurity ),
10078             rec( 15, (1,255), Path ),
10079     ])
10080     pkt.CompletionCodes([0x0000, 0x9300, 0x9600, 0xa100, 0xf000, 0xf100,
10081                          0xf200, 0xfc02, 0xfe01, 0xff00])
10082     # 2222/1748, 23/72
10083     pkt = NCP(0x1748, "Get Bindery Object Access Level", 'bindery')
10084     pkt.Request(14, [
10085             rec( 10, 4, ObjectID, BE ),
10086     ])
10087     pkt.Reply(9, [
10088             rec( 8, 1, ObjectSecurity ),
10089     ])
10090     pkt.CompletionCodes([0x0000, 0x9600])
10091     # 2222/1749, 23/73
10092     pkt = NCP(0x1749, "Is Calling Station a Manager", 'bindery')
10093     pkt.Request(10)
10094     pkt.Reply(8)
10095     pkt.CompletionCodes([0x0003, 0xff1e])
10096     # 2222/174A, 23/74
10097     pkt = NCP(0x174A, "Keyed Verify Password", 'bindery')
10098     pkt.Request((21,68), [
10099             rec( 10, 8, LoginKey ),
10100             rec( 18, 2, ObjectType, BE ),
10101             rec( 20, (1,48), ObjectName ),
10102     ], info_str=(ObjectName, "Keyed Verify Password: %s", ", %s"))
10103     pkt.Reply(8)
10104     pkt.CompletionCodes([0x0000, 0xc500, 0xfe01, 0xff0c])
10105     # 2222/174B, 23/75
10106     pkt = NCP(0x174B, "Keyed Change Password", 'bindery')
10107     pkt.Request((22,100), [
10108             rec( 10, 8, LoginKey ),
10109             rec( 18, 2, ObjectType, BE ),
10110             rec( 20, (1,48), ObjectName ),
10111             rec( -1, (1,32), Password ),
10112     ], info_str=(ObjectName, "Keyed Change Password: %s", ", %s"))
10113     pkt.Reply(8)
10114     pkt.CompletionCodes([0x0000, 0xc500, 0xfe01, 0xff0c])
10115     # 2222/174C, 23/76
10116     pkt = NCP(0x174C, "List Relations Of an Object", 'bindery')
10117     pkt.Request((18,80), [
10118             rec( 10, 4, LastSeen, BE ),
10119             rec( 14, 2, ObjectType, BE ),
10120             rec( 16, (1,48), ObjectName ),
10121             rec( -1, (1,16), PropertyName ),
10122     ], info_str=(ObjectName, "List Relations of an Object: %s", ", %s"))
10123     pkt.Reply(14, [
10124             rec( 8, 2, RelationsCount, BE, var="x" ),
10125             rec( 10, 4, ObjectID, BE, repeat="x" ),
10126     ])
10127     pkt.CompletionCodes([0x0000, 0xf000, 0xf200, 0xfe01, 0xff00])
10128     # 2222/1764, 23/100
10129     pkt = NCP(0x1764, "Create Queue", 'qms')
10130     pkt.Request((15,316), [
10131             rec( 10, 2, QueueType, BE ),
10132             rec( 12, (1,48), QueueName ),
10133             rec( -1, 1, PathBase ),
10134             rec( -1, (1,255), Path ),
10135     ], info_str=(QueueName, "Create Queue: %s", ", %s"))
10136     pkt.Reply(12, [
10137             rec( 8, 4, QueueID ),
10138     ])
10139     pkt.CompletionCodes([0x0000, 0x9600, 0x9900, 0xd000, 0xd100,
10140                          0xd200, 0xd300, 0xd400, 0xd500, 0xd601,
10141                          0xd703, 0xd800, 0xd902, 0xda01, 0xdb02,
10142                          0xee00, 0xff00])
10143     # 2222/1765, 23/101
10144     pkt = NCP(0x1765, "Destroy Queue", 'qms')
10145     pkt.Request(14, [
10146             rec( 10, 4, QueueID ),
10147     ])
10148     pkt.Reply(8)
10149     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10150                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10151                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10152     # 2222/1766, 23/102
10153     pkt = NCP(0x1766, "Read Queue Current Status", 'qms')
10154     pkt.Request(14, [
10155             rec( 10, 4, QueueID ),
10156     ])
10157     pkt.Reply(20, [
10158             rec( 8, 4, QueueID ),
10159             rec( 12, 1, QueueStatus ),
10160             rec( 13, 1, CurrentEntries ),
10161             rec( 14, 1, CurrentServers, var="x" ),
10162             rec( 15, 4, ServerID, repeat="x" ),
10163             rec( 19, 1, ServerStationList, repeat="x" ),
10164     ])
10165     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10166                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10167                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10168     # 2222/1767, 23/103
10169     pkt = NCP(0x1767, "Set Queue Current Status", 'qms')
10170     pkt.Request(15, [
10171             rec( 10, 4, QueueID ),
10172             rec( 14, 1, QueueStatus ),
10173     ])
10174     pkt.Reply(8)
10175     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10176                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10177                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07,
10178                          0xff00])
10179     # 2222/1768, 23/104
10180     pkt = NCP(0x1768, "Create Queue Job And File", 'qms')
10181     pkt.Request(264, [
10182             rec( 10, 4, QueueID ),
10183             rec( 14, 250, JobStruct ),
10184     ])
10185     pkt.Reply(62, [
10186             rec( 8, 1, ClientStation ),
10187             rec( 9, 1, ClientTaskNumber ),
10188             rec( 10, 4, ClientIDNumber, BE ),
10189             rec( 14, 4, TargetServerIDNumber, BE ),
10190             rec( 18, 6, TargetExecutionTime ),
10191             rec( 24, 6, JobEntryTime ),
10192             rec( 30, 2, JobNumber, BE ),
10193             rec( 32, 2, JobType, BE ),
10194             rec( 34, 1, JobPosition ),
10195             rec( 35, 1, JobControlFlags ),
10196             rec( 36, 14, JobFileName ),
10197             rec( 50, 6, JobFileHandle ),
10198             rec( 56, 1, ServerStation ),
10199             rec( 57, 1, ServerTaskNumber ),
10200             rec( 58, 4, ServerID, BE ),
10201     ])
10202     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10203                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10204                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07,
10205                          0xff00])
10206     # 2222/1769, 23/105
10207     pkt = NCP(0x1769, "Close File And Start Queue Job", 'qms')
10208     pkt.Request(16, [
10209             rec( 10, 4, QueueID ),
10210             rec( 14, 2, JobNumber, BE ),
10211     ])
10212     pkt.Reply(8)
10213     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10214                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10215                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10216     # 2222/176A, 23/106
10217     pkt = NCP(0x176A, "Remove Job From Queue", 'qms')
10218     pkt.Request(16, [
10219             rec( 10, 4, QueueID ),
10220             rec( 14, 2, JobNumber, BE ),
10221     ])
10222     pkt.Reply(8)
10223     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10224                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10225                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10226     # 2222/176B, 23/107
10227     pkt = NCP(0x176B, "Get Queue Job List", 'qms')
10228     pkt.Request(14, [
10229             rec( 10, 4, QueueID ),
10230     ])
10231     pkt.Reply(12, [
10232             rec( 8, 2, JobCount, BE, var="x" ),
10233             rec( 10, 2, JobNumber, BE, repeat="x" ),
10234     ])
10235     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10236                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10237                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10238     # 2222/176C, 23/108
10239     pkt = NCP(0x176C, "Read Queue Job Entry", 'qms')
10240     pkt.Request(16, [
10241             rec( 10, 4, QueueID ),
10242             rec( 14, 2, JobNumber, BE ),
10243     ])
10244     pkt.Reply(258, [
10245         rec( 8, 250, JobStruct ),
10246     ])
10247     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10248                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10249                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10250     # 2222/176D, 23/109
10251     pkt = NCP(0x176D, "Change Queue Job Entry", 'qms')
10252     pkt.Request(260, [
10253         rec( 14, 250, JobStruct ),
10254     ])
10255     pkt.Reply(8)
10256     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10257                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10258                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
10259     # 2222/176E, 23/110
10260     pkt = NCP(0x176E, "Change Queue Job Position", 'qms')
10261     pkt.Request(17, [
10262             rec( 10, 4, QueueID ),
10263             rec( 14, 2, JobNumber, BE ),
10264             rec( 16, 1, NewPosition ),
10265     ])
10266     pkt.Reply(8)
10267     pkt.CompletionCodes([0x0000, 0x9600, 0xd000, 0xd100, 0xd300, 0xd500,
10268                          0xd601, 0xfe07, 0xff1f])
10269     # 2222/176F, 23/111
10270     pkt = NCP(0x176F, "Attach Queue Server To Queue", 'qms')
10271     pkt.Request(14, [
10272             rec( 10, 4, QueueID ),
10273     ])
10274     pkt.Reply(8)
10275     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10276                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10277                          0xd800, 0xd902, 0xda01, 0xdb02, 0xea00,
10278                          0xfc06, 0xff00])
10279     # 2222/1770, 23/112
10280     pkt = NCP(0x1770, "Detach Queue Server From Queue", 'qms')
10281     pkt.Request(14, [
10282             rec( 10, 4, QueueID ),
10283     ])
10284     pkt.Reply(8)
10285     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10286                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10287                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10288     # 2222/1771, 23/113
10289     pkt = NCP(0x1771, "Service Queue Job", 'qms')
10290     pkt.Request(16, [
10291             rec( 10, 4, QueueID ),
10292             rec( 14, 2, ServiceType, BE ),
10293     ])
10294     pkt.Reply(62, [
10295             rec( 8, 1, ClientStation ),
10296             rec( 9, 1, ClientTaskNumber ),
10297             rec( 10, 4, ClientIDNumber, BE ),
10298             rec( 14, 4, TargetServerIDNumber, BE ),
10299             rec( 18, 6, TargetExecutionTime ),
10300             rec( 24, 6, JobEntryTime ),
10301             rec( 30, 2, JobNumber, BE ),
10302             rec( 32, 2, JobType, BE ),
10303             rec( 34, 1, JobPosition ),
10304             rec( 35, 1, JobControlFlags ),
10305             rec( 36, 14, JobFileName ),
10306             rec( 50, 6, JobFileHandle ),
10307             rec( 56, 1, ServerStation ),
10308             rec( 57, 1, ServerTaskNumber ),
10309             rec( 58, 4, ServerID, BE ),
10310     ])
10311     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10312                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10313                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10314     # 2222/1772, 23/114
10315     pkt = NCP(0x1772, "Finish Servicing Queue Job", 'qms')
10316     pkt.Request(18, [
10317             rec( 10, 4, QueueID ),
10318             rec( 14, 2, JobNumber, BE ),
10319             rec( 16, 2, ChargeInformation, BE ),
10320     ])
10321     pkt.Reply(8)
10322     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10323                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10324                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff00])
10325     # 2222/1773, 23/115
10326     pkt = NCP(0x1773, "Abort Servicing Queue Job", 'qms')
10327     pkt.Request(16, [
10328             rec( 10, 4, QueueID ),
10329             rec( 14, 2, JobNumber, BE ),
10330     ])
10331     pkt.Reply(8)
10332     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10333                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10334                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff18])
10335     # 2222/1774, 23/116
10336     pkt = NCP(0x1774, "Change To Client Rights", 'qms')
10337     pkt.Request(16, [
10338             rec( 10, 4, QueueID ),
10339             rec( 14, 2, JobNumber, BE ),
10340     ])
10341     pkt.Reply(8)
10342     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10343                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10344                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
10345     # 2222/1775, 23/117
10346     pkt = NCP(0x1775, "Restore Queue Server Rights", 'qms')
10347     pkt.Request(10)
10348     pkt.Reply(8)
10349     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10350                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10351                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10352     # 2222/1776, 23/118
10353     pkt = NCP(0x1776, "Read Queue Server Current Status", 'qms')
10354     pkt.Request(19, [
10355             rec( 10, 4, QueueID ),
10356             rec( 14, 4, ServerID, BE ),
10357             rec( 18, 1, ServerStation ),
10358     ])
10359     pkt.Reply(72, [
10360             rec( 8, 64, ServerStatusRecord ),
10361     ])
10362     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10363                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10364                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10365     # 2222/1777, 23/119
10366     pkt = NCP(0x1777, "Set Queue Server Current Status", 'qms')
10367     pkt.Request(78, [
10368             rec( 10, 4, QueueID ),
10369             rec( 14, 64, ServerStatusRecord ),
10370     ])
10371     pkt.Reply(8)
10372     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10373                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10374                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10375     # 2222/1778, 23/120
10376     pkt = NCP(0x1778, "Get Queue Job File Size", 'qms')
10377     pkt.Request(16, [
10378             rec( 10, 4, QueueID ),
10379             rec( 14, 2, JobNumber, BE ),
10380     ])
10381     pkt.Reply(18, [
10382             rec( 8, 4, QueueID ),
10383             rec( 12, 2, JobNumber, BE ),
10384             rec( 14, 4, FileSize, BE ),
10385     ])
10386     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10387                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10388                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff00])
10389     # 2222/1779, 23/121
10390     pkt = NCP(0x1779, "Create Queue Job And File", 'qms')
10391     pkt.Request(264, [
10392             rec( 10, 4, QueueID ),
10393             rec( 14, 250, JobStruct3x ),
10394     ])
10395     pkt.Reply(94, [
10396             rec( 8, 86, JobStructNew ),
10397     ])
10398     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10399                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10400                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff00])
10401     # 2222/177A, 23/122
10402     pkt = NCP(0x177A, "Read Queue Job Entry", 'qms')
10403     pkt.Request(18, [
10404             rec( 10, 4, QueueID ),
10405             rec( 14, 4, JobNumberLong ),
10406     ])
10407     pkt.Reply(258, [
10408         rec( 8, 250, JobStruct3x ),
10409     ])
10410     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10411                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10412                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10413     # 2222/177B, 23/123
10414     pkt = NCP(0x177B, "Change Queue Job Entry", 'qms')
10415     pkt.Request(264, [
10416             rec( 10, 4, QueueID ),
10417             rec( 14, 250, JobStruct ),
10418     ])
10419     pkt.Reply(8)
10420     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10421                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10422                          0xd800, 0xd902, 0xda01, 0xdb02, 0xea02, 0xfc07, 0xff00])
10423     # 2222/177C, 23/124
10424     pkt = NCP(0x177C, "Service Queue Job", 'qms')
10425     pkt.Request(16, [
10426             rec( 10, 4, QueueID ),
10427             rec( 14, 2, ServiceType ),
10428     ])
10429     pkt.Reply(94, [
10430         rec( 8, 86, JobStructNew ),
10431     ])
10432     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10433                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10434                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc05, 0xff00])
10435     # 2222/177D, 23/125
10436     pkt = NCP(0x177D, "Read Queue Current Status", 'qms')
10437     pkt.Request(14, [
10438             rec( 10, 4, QueueID ),
10439     ])
10440     pkt.Reply(32, [
10441             rec( 8, 4, QueueID ),
10442             rec( 12, 1, QueueStatus ),
10443             rec( 13, 3, Reserved3 ),
10444             rec( 16, 4, CurrentEntries ),
10445             rec( 20, 4, CurrentServers, var="x" ),
10446             rec( 24, 4, ServerID, repeat="x" ),
10447             rec( 28, 4, ServerStationLong, LE, repeat="x" ),
10448     ])
10449     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10450                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10451                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10452     # 2222/177E, 23/126
10453     pkt = NCP(0x177E, "Set Queue Current Status", 'qms')
10454     pkt.Request(15, [
10455             rec( 10, 4, QueueID ),
10456             rec( 14, 1, QueueStatus ),
10457     ])
10458     pkt.Reply(8)
10459     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10460                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10461                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10462     # 2222/177F, 23/127
10463     pkt = NCP(0x177F, "Close File And Start Queue Job", 'qms')
10464     pkt.Request(18, [
10465             rec( 10, 4, QueueID ),
10466             rec( 14, 4, JobNumberLong ),
10467     ])
10468     pkt.Reply(8)
10469     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10470                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10471                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff00])
10472     # 2222/1780, 23/128
10473     pkt = NCP(0x1780, "Remove Job From Queue", 'qms')
10474     pkt.Request(18, [
10475             rec( 10, 4, QueueID ),
10476             rec( 14, 4, JobNumberLong ),
10477     ])
10478     pkt.Reply(8)
10479     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10480                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10481                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10482     # 2222/1781, 23/129
10483     pkt = NCP(0x1781, "Get Queue Job List", 'qms')
10484     pkt.Request(18, [
10485             rec( 10, 4, QueueID ),
10486             rec( 14, 4, JobNumberLong ),
10487     ])
10488     pkt.Reply(20, [
10489             rec( 8, 4, TotalQueueJobs ),
10490             rec( 12, 4, ReplyQueueJobNumbers, var="x" ),
10491             rec( 16, 4, JobNumberLong, repeat="x" ),
10492     ])
10493     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10494                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10495                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10496     # 2222/1782, 23/130
10497     pkt = NCP(0x1782, "Change Job Priority", 'qms')
10498     pkt.Request(22, [
10499             rec( 10, 4, QueueID ),
10500             rec( 14, 4, JobNumberLong ),
10501             rec( 18, 4, Priority ),
10502     ])
10503     pkt.Reply(8)
10504     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10505                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10506                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10507     # 2222/1783, 23/131
10508     pkt = NCP(0x1783, "Finish Servicing Queue Job", 'qms')
10509     pkt.Request(22, [
10510             rec( 10, 4, QueueID ),
10511             rec( 14, 4, JobNumberLong ),
10512             rec( 18, 4, ChargeInformation ),
10513     ])
10514     pkt.Reply(8)
10515     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10516                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10517                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc05, 0xff00])
10518     # 2222/1784, 23/132
10519     pkt = NCP(0x1784, "Abort Servicing Queue Job", 'qms')
10520     pkt.Request(18, [
10521             rec( 10, 4, QueueID ),
10522             rec( 14, 4, JobNumberLong ),
10523     ])
10524     pkt.Reply(8)
10525     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10526                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10527                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc05, 0xff18])
10528     # 2222/1785, 23/133
10529     pkt = NCP(0x1785, "Change To Client Rights", 'qms')
10530     pkt.Request(18, [
10531             rec( 10, 4, QueueID ),
10532             rec( 14, 4, JobNumberLong ),
10533     ])
10534     pkt.Reply(8)
10535     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10536                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10537                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
10538     # 2222/1786, 23/134
10539     pkt = NCP(0x1786, "Read Queue Server Current Status", 'qms')
10540     pkt.Request(22, [
10541             rec( 10, 4, QueueID ),
10542             rec( 14, 4, ServerID, BE ),
10543             rec( 18, 4, ServerStation ),
10544     ])
10545     pkt.Reply(72, [
10546             rec( 8, 64, ServerStatusRecord ),
10547     ])
10548     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10549                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10550                          0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10551     # 2222/1787, 23/135
10552     pkt = NCP(0x1787, "Get Queue Job File Size", 'qms')
10553     pkt.Request(18, [
10554             rec( 10, 4, QueueID ),
10555             rec( 14, 4, JobNumberLong ),
10556     ])
10557     pkt.Reply(20, [
10558             rec( 8, 4, QueueID ),
10559             rec( 12, 4, JobNumberLong ),
10560             rec( 16, 4, FileSize, BE ),
10561     ])
10562     pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10563                          0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10564                          0xd800, 0xd902, 0xda01, 0xdb02, 0xfc05, 0xff00])
10565     # 2222/1788, 23/136
10566     pkt = NCP(0x1788, "Move Queue Job From Src Q to Dst Q", 'qms')
10567     pkt.Request(22, [
10568             rec( 10, 4, QueueID ),
10569             rec( 14, 4, JobNumberLong ),
10570             rec( 18, 4, DstQueueID ),
10571     ])
10572     pkt.Reply(12, [
10573             rec( 8, 4, JobNumberLong ),
10574     ])
10575     pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
10576     # 2222/1789, 23/137
10577     pkt = NCP(0x1789, "Get Queue Jobs From Form List", 'qms')
10578     pkt.Request(24, [
10579             rec( 10, 4, QueueID ),
10580             rec( 14, 4, QueueStartPosition ),
10581             rec( 18, 4, FormTypeCnt, LE, var="x" ),
10582             rec( 22, 2, FormType, repeat="x" ),
10583     ])
10584     pkt.Reply(20, [
10585             rec( 8, 4, TotalQueueJobs ),
10586             rec( 12, 4, JobCount, var="x" ),
10587             rec( 16, 4, JobNumberLong, repeat="x" ),
10588     ])
10589     pkt.CompletionCodes([0x0000, 0x7e01, 0xd300, 0xfc06])
10590     # 2222/178A, 23/138
10591     pkt = NCP(0x178A, "Service Queue Job By Form List", 'qms')
10592     pkt.Request(24, [
10593             rec( 10, 4, QueueID ),
10594             rec( 14, 4, QueueStartPosition ),
10595             rec( 18, 4, FormTypeCnt, LE, var= "x" ),
10596             rec( 22, 2, FormType, repeat="x" ),
10597     ])
10598     pkt.Reply(94, [
10599        rec( 8, 86, JobStructNew ),
10600     ])
10601     pkt.CompletionCodes([0x0000, 0x7e01, 0xd902, 0xfc06, 0xff00])
10602     # 2222/1796, 23/150
10603     pkt = NCP(0x1796, "Get Current Account Status", 'accounting')
10604     pkt.Request((13,60), [
10605             rec( 10, 2, ObjectType, BE ),
10606             rec( 12, (1,48), ObjectName ),
10607     ], info_str=(ObjectName, "Get Current Account Status: %s", ", %s"))
10608     pkt.Reply(264, [
10609             rec( 8, 4, AccountBalance, BE ),
10610             rec( 12, 4, CreditLimit, BE ),
10611             rec( 16, 120, Reserved120 ),
10612             rec( 136, 4, HolderID, BE ),
10613             rec( 140, 4, HoldAmount, BE ),
10614             rec( 144, 4, HolderID, BE ),
10615             rec( 148, 4, HoldAmount, BE ),
10616             rec( 152, 4, HolderID, BE ),
10617             rec( 156, 4, HoldAmount, BE ),
10618             rec( 160, 4, HolderID, BE ),
10619             rec( 164, 4, HoldAmount, BE ),
10620             rec( 168, 4, HolderID, BE ),
10621             rec( 172, 4, HoldAmount, BE ),
10622             rec( 176, 4, HolderID, BE ),
10623             rec( 180, 4, HoldAmount, BE ),
10624             rec( 184, 4, HolderID, BE ),
10625             rec( 188, 4, HoldAmount, BE ),
10626             rec( 192, 4, HolderID, BE ),
10627             rec( 196, 4, HoldAmount, BE ),
10628             rec( 200, 4, HolderID, BE ),
10629             rec( 204, 4, HoldAmount, BE ),
10630             rec( 208, 4, HolderID, BE ),
10631             rec( 212, 4, HoldAmount, BE ),
10632             rec( 216, 4, HolderID, BE ),
10633             rec( 220, 4, HoldAmount, BE ),
10634             rec( 224, 4, HolderID, BE ),
10635             rec( 228, 4, HoldAmount, BE ),
10636             rec( 232, 4, HolderID, BE ),
10637             rec( 236, 4, HoldAmount, BE ),
10638             rec( 240, 4, HolderID, BE ),
10639             rec( 244, 4, HoldAmount, BE ),
10640             rec( 248, 4, HolderID, BE ),
10641             rec( 252, 4, HoldAmount, BE ),
10642             rec( 256, 4, HolderID, BE ),
10643             rec( 260, 4, HoldAmount, BE ),
10644     ])
10645     pkt.CompletionCodes([0x0000, 0x9600, 0xc000, 0xc101, 0xc400, 0xe800,
10646                          0xea00, 0xeb00, 0xec00, 0xfc06, 0xfe07, 0xff00])
10647     # 2222/1797, 23/151
10648     pkt = NCP(0x1797, "Submit Account Charge", 'accounting')
10649     pkt.Request((26,327), [
10650             rec( 10, 2, ServiceType, BE ),
10651             rec( 12, 4, ChargeAmount, BE ),
10652             rec( 16, 4, HoldCancelAmount, BE ),
10653             rec( 20, 2, ObjectType, BE ),
10654             rec( 22, 2, CommentType, BE ),
10655             rec( 24, (1,48), ObjectName ),
10656             rec( -1, (1,255), Comment ),
10657     ], info_str=(ObjectName, "Submit Account Charge: %s", ", %s"))
10658     pkt.Reply(8)
10659     pkt.CompletionCodes([0x0000, 0x0102, 0x8800, 0x9400, 0x9600, 0xa201,
10660                          0xc000, 0xc101, 0xc200, 0xc400, 0xe800, 0xea00,
10661                          0xeb00, 0xec00, 0xfe07, 0xff00])
10662     # 2222/1798, 23/152
10663     pkt = NCP(0x1798, "Submit Account Hold", 'accounting')
10664     pkt.Request((17,64), [
10665             rec( 10, 4, HoldCancelAmount, BE ),
10666             rec( 14, 2, ObjectType, BE ),
10667             rec( 16, (1,48), ObjectName ),
10668     ], info_str=(ObjectName, "Submit Account Hold: %s", ", %s"))
10669     pkt.Reply(8)
10670     pkt.CompletionCodes([0x0000, 0x0102, 0x8800, 0x9400, 0x9600, 0xa201,
10671                          0xc000, 0xc101, 0xc200, 0xc400, 0xe800, 0xea00,
10672                          0xeb00, 0xec00, 0xfe07, 0xff00])
10673     # 2222/1799, 23/153
10674     pkt = NCP(0x1799, "Submit Account Note", 'accounting')
10675     pkt.Request((18,319), [
10676             rec( 10, 2, ServiceType, BE ),
10677             rec( 12, 2, ObjectType, BE ),
10678             rec( 14, 2, CommentType, BE ),
10679             rec( 16, (1,48), ObjectName ),
10680             rec( -1, (1,255), Comment ),
10681     ], info_str=(ObjectName, "Submit Account Note: %s", ", %s"))
10682     pkt.Reply(8)
10683     pkt.CompletionCodes([0x0000, 0x0102, 0x9600, 0xc000, 0xc101, 0xc400,
10684                          0xe800, 0xea00, 0xeb00, 0xec00, 0xf000, 0xfc06,
10685                          0xff00])
10686     # 2222/17c8, 23/200
10687     pkt = NCP(0x17c8, "Check Console Privileges", 'fileserver')
10688     pkt.Request(10)
10689     pkt.Reply(8)
10690     pkt.CompletionCodes([0x0000, 0xc601])
10691     # 2222/17c9, 23/201
10692     pkt = NCP(0x17c9, "Get File Server Description Strings", 'fileserver')
10693     pkt.Request(10)
10694     pkt.Reply(108, [
10695             rec( 8, 100, DescriptionStrings ),
10696     ])
10697     pkt.CompletionCodes([0x0000, 0x9600])
10698     # 2222/17CA, 23/202
10699     pkt = NCP(0x17CA, "Set File Server Date And Time", 'fileserver')
10700     pkt.Request(16, [
10701             rec( 10, 1, Year ),
10702             rec( 11, 1, Month ),
10703             rec( 12, 1, Day ),
10704             rec( 13, 1, Hour ),
10705             rec( 14, 1, Minute ),
10706             rec( 15, 1, Second ),
10707     ])
10708     pkt.Reply(8)
10709     pkt.CompletionCodes([0x0000, 0xc601])
10710     # 2222/17CB, 23/203
10711     pkt = NCP(0x17CB, "Disable File Server Login", 'fileserver')
10712     pkt.Request(10)
10713     pkt.Reply(8)
10714     pkt.CompletionCodes([0x0000, 0xc601])
10715     # 2222/17CC, 23/204
10716     pkt = NCP(0x17CC, "Enable File Server Login", 'fileserver')
10717     pkt.Request(10)
10718     pkt.Reply(8)
10719     pkt.CompletionCodes([0x0000, 0xc601])
10720     # 2222/17CD, 23/205
10721     pkt = NCP(0x17CD, "Get File Server Login Status", 'fileserver')
10722     pkt.Request(10)
10723     pkt.Reply(9, [
10724             rec( 8, 1, UserLoginAllowed ),
10725     ])
10726     pkt.CompletionCodes([0x0000, 0x9600, 0xfb01])
10727     # 2222/17CF, 23/207
10728     pkt = NCP(0x17CF, "Disable Transaction Tracking", 'fileserver')
10729     pkt.Request(10)
10730     pkt.Reply(8)
10731     pkt.CompletionCodes([0x0000, 0xc601])
10732     # 2222/17D0, 23/208
10733     pkt = NCP(0x17D0, "Enable Transaction Tracking", 'fileserver')
10734     pkt.Request(10)
10735     pkt.Reply(8)
10736     pkt.CompletionCodes([0x0000, 0xc601])
10737     # 2222/17D1, 23/209
10738     pkt = NCP(0x17D1, "Send Console Broadcast", 'fileserver')
10739     pkt.Request((13,267), [
10740             rec( 10, 1, NumberOfStations, var="x" ),
10741             rec( 11, 1, StationList, repeat="x" ),
10742             rec( 12, (1, 255), TargetMessage ),
10743     ], info_str=(TargetMessage, "Send Console Broadcast: %s", ", %s"))
10744     pkt.Reply(8)
10745     pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10746     # 2222/17D2, 23/210
10747     pkt = NCP(0x17D2, "Clear Connection Number", 'fileserver')
10748     pkt.Request(11, [
10749             rec( 10, 1, ConnectionNumber ),
10750     ],info_str=(ConnectionNumber, "Clear Connection Number %d", ", %d"))
10751     pkt.Reply(8)
10752     pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10753     # 2222/17D3, 23/211
10754     pkt = NCP(0x17D3, "Down File Server", 'fileserver')
10755     pkt.Request(11, [
10756             rec( 10, 1, ForceFlag ),
10757     ])
10758     pkt.Reply(8)
10759     pkt.CompletionCodes([0x0000, 0xc601, 0xff00])
10760     # 2222/17D4, 23/212
10761     pkt = NCP(0x17D4, "Get File System Statistics", 'fileserver')
10762     pkt.Request(10)
10763     pkt.Reply(50, [
10764             rec( 8, 4, SystemIntervalMarker, BE ),
10765             rec( 12, 2, ConfiguredMaxOpenFiles ),
10766             rec( 14, 2, ActualMaxOpenFiles ),
10767             rec( 16, 2, CurrentOpenFiles ),
10768             rec( 18, 4, TotalFilesOpened ),
10769             rec( 22, 4, TotalReadRequests ),
10770             rec( 26, 4, TotalWriteRequests ),
10771             rec( 30, 2, CurrentChangedFATs ),
10772             rec( 32, 4, TotalChangedFATs ),
10773             rec( 36, 2, FATWriteErrors ),
10774             rec( 38, 2, FatalFATWriteErrors ),
10775             rec( 40, 2, FATScanErrors ),
10776             rec( 42, 2, ActualMaxIndexedFiles ),
10777             rec( 44, 2, ActiveIndexedFiles ),
10778             rec( 46, 2, AttachedIndexedFiles ),
10779             rec( 48, 2, AvailableIndexedFiles ),
10780     ])
10781     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10782     # 2222/17D5, 23/213
10783     pkt = NCP(0x17D5, "Get Transaction Tracking Statistics", 'fileserver')
10784     pkt.Request((13,267), [
10785             rec( 10, 2, LastRecordSeen ),
10786             rec( 12, (1,255), SemaphoreName ),
10787     ])
10788     pkt.Reply(53, [
10789             rec( 8, 4, SystemIntervalMarker, BE ),
10790             rec( 12, 1, TransactionTrackingSupported ),
10791             rec( 13, 1, TransactionTrackingEnabled ),
10792             rec( 14, 2, TransactionVolumeNumber ),
10793             rec( 16, 2, ConfiguredMaxSimultaneousTransactions ),
10794             rec( 18, 2, ActualMaxSimultaneousTransactions ),
10795             rec( 20, 2, CurrentTransactionCount ),
10796             rec( 22, 4, TotalTransactionsPerformed ),
10797             rec( 26, 4, TotalWriteTransactionsPerformed ),
10798             rec( 30, 4, TotalTransactionsBackedOut ),
10799             rec( 34, 2, TotalUnfilledBackoutRequests ),
10800             rec( 36, 2, TransactionDiskSpace ),
10801             rec( 38, 4, TransactionFATAllocations ),
10802             rec( 42, 4, TransactionFileSizeChanges ),
10803             rec( 46, 4, TransactionFilesTruncated ),
10804             rec( 50, 1, NumberOfEntries, var="x" ),
10805             rec( 51, 2, ConnTaskStruct, repeat="x" ),
10806     ])
10807     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10808     # 2222/17D6, 23/214
10809     pkt = NCP(0x17D6, "Read Disk Cache Statistics", 'fileserver')
10810     pkt.Request(10)
10811     pkt.Reply(86, [
10812             rec( 8, 4, SystemIntervalMarker, BE ),
10813             rec( 12, 2, CacheBufferCount ),
10814             rec( 14, 2, CacheBufferSize ),
10815             rec( 16, 2, DirtyCacheBuffers ),
10816             rec( 18, 4, CacheReadRequests ),
10817             rec( 22, 4, CacheWriteRequests ),
10818             rec( 26, 4, CacheHits ),
10819             rec( 30, 4, CacheMisses ),
10820             rec( 34, 4, PhysicalReadRequests ),
10821             rec( 38, 4, PhysicalWriteRequests ),
10822             rec( 42, 2, PhysicalReadErrors ),
10823             rec( 44, 2, PhysicalWriteErrors ),
10824             rec( 46, 4, CacheGetRequests ),
10825             rec( 50, 4, CacheFullWriteRequests ),
10826             rec( 54, 4, CachePartialWriteRequests ),
10827             rec( 58, 4, BackgroundDirtyWrites ),
10828             rec( 62, 4, BackgroundAgedWrites ),
10829             rec( 66, 4, TotalCacheWrites ),
10830             rec( 70, 4, CacheAllocations ),
10831             rec( 74, 2, ThrashingCount ),
10832             rec( 76, 2, LRUBlockWasDirty ),
10833             rec( 78, 2, ReadBeyondWrite ),
10834             rec( 80, 2, FragmentWriteOccurred ),
10835             rec( 82, 2, CacheHitOnUnavailableBlock ),
10836             rec( 84, 2, CacheBlockScrapped ),
10837     ])
10838     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10839     # 2222/17D7, 23/215
10840     pkt = NCP(0x17D7, "Get Drive Mapping Table", 'fileserver')
10841     pkt.Request(10)
10842     pkt.Reply(184, [
10843             rec( 8, 4, SystemIntervalMarker, BE ),
10844             rec( 12, 1, SFTSupportLevel ),
10845             rec( 13, 1, LogicalDriveCount ),
10846             rec( 14, 1, PhysicalDriveCount ),
10847             rec( 15, 1, DiskChannelTable ),
10848             rec( 16, 4, Reserved4 ),
10849             rec( 20, 2, PendingIOCommands, BE ),
10850             rec( 22, 32, DriveMappingTable ),
10851             rec( 54, 32, DriveMirrorTable ),
10852             rec( 86, 32, DeadMirrorTable ),
10853             rec( 118, 1, ReMirrorDriveNumber ),
10854             rec( 119, 1, Filler ),
10855             rec( 120, 4, ReMirrorCurrentOffset, BE ),
10856             rec( 124, 60, SFTErrorTable ),
10857     ])
10858     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10859     # 2222/17D8, 23/216
10860     pkt = NCP(0x17D8, "Read Physical Disk Statistics", 'fileserver')
10861     pkt.Request(11, [
10862             rec( 10, 1, PhysicalDiskNumber ),
10863     ])
10864     pkt.Reply(101, [
10865             rec( 8, 4, SystemIntervalMarker, BE ),
10866             rec( 12, 1, PhysicalDiskChannel ),
10867             rec( 13, 1, DriveRemovableFlag ),
10868             rec( 14, 1, PhysicalDriveType ),
10869             rec( 15, 1, ControllerDriveNumber ),
10870             rec( 16, 1, ControllerNumber ),
10871             rec( 17, 1, ControllerType ),
10872             rec( 18, 4, DriveSize ),
10873             rec( 22, 2, DriveCylinders ),
10874             rec( 24, 1, DriveHeads ),
10875             rec( 25, 1, SectorsPerTrack ),
10876             rec( 26, 64, DriveDefinitionString ),
10877             rec( 90, 2, IOErrorCount ),
10878             rec( 92, 4, HotFixTableStart ),
10879             rec( 96, 2, HotFixTableSize ),
10880             rec( 98, 2, HotFixBlocksAvailable ),
10881             rec( 100, 1, HotFixDisabled ),
10882     ])
10883     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10884     # 2222/17D9, 23/217
10885     pkt = NCP(0x17D9, "Get Disk Channel Statistics", 'fileserver')
10886     pkt.Request(11, [
10887             rec( 10, 1, DiskChannelNumber ),
10888     ])
10889     pkt.Reply(192, [
10890             rec( 8, 4, SystemIntervalMarker, BE ),
10891             rec( 12, 2, ChannelState, BE ),
10892             rec( 14, 2, ChannelSynchronizationState, BE ),
10893             rec( 16, 1, SoftwareDriverType ),
10894             rec( 17, 1, SoftwareMajorVersionNumber ),
10895             rec( 18, 1, SoftwareMinorVersionNumber ),
10896             rec( 19, 65, SoftwareDescription ),
10897             rec( 84, 8, IOAddressesUsed ),
10898             rec( 92, 10, SharedMemoryAddresses ),
10899             rec( 102, 4, InterruptNumbersUsed ),
10900             rec( 106, 4, DMAChannelsUsed ),
10901             rec( 110, 1, FlagBits ),
10902             rec( 111, 1, Reserved ),
10903             rec( 112, 80, ConfigurationDescription ),
10904     ])
10905     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10906     # 2222/17DB, 23/219
10907     pkt = NCP(0x17DB, "Get Connection's Open Files", 'fileserver')
10908     pkt.Request(14, [
10909             rec( 10, 2, ConnectionNumber ),
10910             rec( 12, 2, LastRecordSeen, BE ),
10911     ])
10912     pkt.Reply(32, [
10913             rec( 8, 2, NextRequestRecord ),
10914             rec( 10, 1, NumberOfRecords, var="x" ),
10915             rec( 11, 21, ConnStruct, repeat="x" ),
10916     ])
10917     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10918     # 2222/17DC, 23/220
10919     pkt = NCP(0x17DC, "Get Connection Using A File", 'fileserver')
10920     pkt.Request((14,268), [
10921             rec( 10, 2, LastRecordSeen, BE ),
10922             rec( 12, 1, DirHandle ),
10923             rec( 13, (1,255), Path ),
10924     ], info_str=(Path, "Get Connection Using File: %s", ", %s"))
10925     pkt.Reply(30, [
10926             rec( 8, 2, UseCount, BE ),
10927             rec( 10, 2, OpenCount, BE ),
10928             rec( 12, 2, OpenForReadCount, BE ),
10929             rec( 14, 2, OpenForWriteCount, BE ),
10930             rec( 16, 2, DenyReadCount, BE ),
10931             rec( 18, 2, DenyWriteCount, BE ),
10932             rec( 20, 2, NextRequestRecord, BE ),
10933             rec( 22, 1, Locked ),
10934             rec( 23, 1, NumberOfRecords, var="x" ),
10935             rec( 24, 6, ConnFileStruct, repeat="x" ),
10936     ])
10937     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10938     # 2222/17DD, 23/221
10939     pkt = NCP(0x17DD, "Get Physical Record Locks By Connection And File", 'fileserver')
10940     pkt.Request(31, [
10941             rec( 10, 2, TargetConnectionNumber ),
10942             rec( 12, 2, LastRecordSeen, BE ),
10943             rec( 14, 1, VolumeNumber ),
10944             rec( 15, 2, DirectoryID ),
10945             rec( 17, 14, FileName14 ),
10946     ], info_str=(FileName14, "Get Physical Record Locks by Connection and File: %s", ", %s"))
10947     pkt.Reply(22, [
10948             rec( 8, 2, NextRequestRecord ),
10949             rec( 10, 1, NumberOfLocks, var="x" ),
10950             rec( 11, 1, Reserved ),
10951             rec( 12, 10, LockStruct, repeat="x" ),
10952     ])
10953     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10954     # 2222/17DE, 23/222
10955     pkt = NCP(0x17DE, "Get Physical Record Locks By File", 'fileserver')
10956     pkt.Request((14,268), [
10957             rec( 10, 2, TargetConnectionNumber ),
10958             rec( 12, 1, DirHandle ),
10959             rec( 13, (1,255), Path ),
10960     ], info_str=(Path, "Get Physical Record Locks by File: %s", ", %s"))
10961     pkt.Reply(28, [
10962             rec( 8, 2, NextRequestRecord ),
10963             rec( 10, 1, NumberOfLocks, var="x" ),
10964             rec( 11, 1, Reserved ),
10965             rec( 12, 16, PhyLockStruct, repeat="x" ),
10966     ])
10967     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10968     # 2222/17DF, 23/223
10969     pkt = NCP(0x17DF, "Get Logical Records By Connection", 'fileserver')
10970     pkt.Request(14, [
10971             rec( 10, 2, TargetConnectionNumber ),
10972             rec( 12, 2, LastRecordSeen, BE ),
10973     ])
10974     pkt.Reply((14,268), [
10975             rec( 8, 2, NextRequestRecord ),
10976             rec( 10, 1, NumberOfRecords, var="x" ),
10977             rec( 11, (3, 257), LogLockStruct, repeat="x" ),
10978     ])
10979     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10980     # 2222/17E0, 23/224
10981     pkt = NCP(0x17E0, "Get Logical Record Information", 'fileserver')
10982     pkt.Request((13,267), [
10983             rec( 10, 2, LastRecordSeen ),
10984             rec( 12, (1,255), LogicalRecordName ),
10985     ], info_str=(LogicalRecordName, "Get Logical Record Information: %s", ", %s"))
10986     pkt.Reply(20, [
10987             rec( 8, 2, UseCount, BE ),
10988             rec( 10, 2, ShareableLockCount, BE ),
10989             rec( 12, 2, NextRequestRecord ),
10990             rec( 14, 1, Locked ),
10991             rec( 15, 1, NumberOfRecords, var="x" ),
10992             rec( 16, 4, LogRecStruct, repeat="x" ),
10993     ])
10994     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10995     # 2222/17E1, 23/225
10996     pkt = NCP(0x17E1, "Get Connection's Semaphores", 'fileserver')
10997     pkt.Request(14, [
10998             rec( 10, 2, ConnectionNumber ),
10999             rec( 12, 2, LastRecordSeen ),
11000     ])
11001     pkt.Reply((18,272), [
11002             rec( 8, 2, NextRequestRecord ),
11003             rec( 10, 2, NumberOfSemaphores, var="x" ),
11004             rec( 12, (6,260), SemaStruct, repeat="x" ),
11005     ])
11006     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11007     # 2222/17E2, 23/226
11008     pkt = NCP(0x17E2, "Get Semaphore Information", 'fileserver')
11009     pkt.Request((13,267), [
11010             rec( 10, 2, LastRecordSeen ),
11011             rec( 12, (1,255), SemaphoreName ),
11012     ], info_str=(SemaphoreName, "Get Semaphore Information: %s", ", %s"))
11013     pkt.Reply(17, [
11014             rec( 8, 2, NextRequestRecord, BE ),
11015             rec( 10, 2, OpenCount, BE ),
11016             rec( 12, 1, SemaphoreValue ),
11017             rec( 13, 1, NumberOfRecords, var="x" ),
11018             rec( 14, 3, SemaInfoStruct, repeat="x" ),
11019     ])
11020     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11021     # 2222/17E3, 23/227
11022     pkt = NCP(0x17E3, "Get LAN Driver Configuration Information", 'fileserver')
11023     pkt.Request(11, [
11024             rec( 10, 1, LANDriverNumber ),
11025     ])
11026     pkt.Reply(180, [
11027             rec( 8, 4, NetworkAddress, BE ),
11028             rec( 12, 6, HostAddress ),
11029             rec( 18, 1, BoardInstalled ),
11030             rec( 19, 1, OptionNumber ),
11031             rec( 20, 160, ConfigurationText ),
11032     ])
11033     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11034     # 2222/17E5, 23/229
11035     pkt = NCP(0x17E5, "Get Connection Usage Statistics", 'fileserver')
11036     pkt.Request(12, [
11037             rec( 10, 2, ConnectionNumber ),
11038     ])
11039     pkt.Reply(26, [
11040             rec( 8, 2, NextRequestRecord ),
11041             rec( 10, 6, BytesRead ),
11042             rec( 16, 6, BytesWritten ),
11043             rec( 22, 4, TotalRequestPackets ),
11044      ])
11045     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11046     # 2222/17E6, 23/230
11047     pkt = NCP(0x17E6, "Get Object's Remaining Disk Space", 'fileserver')
11048     pkt.Request(14, [
11049             rec( 10, 4, ObjectID, BE ),
11050     ])
11051     pkt.Reply(21, [
11052             rec( 8, 4, SystemIntervalMarker, BE ),
11053             rec( 12, 4, ObjectID ),
11054             rec( 16, 4, UnusedDiskBlocks, BE ),
11055             rec( 20, 1, RestrictionsEnforced ),
11056      ])
11057     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11058     # 2222/17E7, 23/231
11059     pkt = NCP(0x17E7, "Get File Server LAN I/O Statistics", 'fileserver')
11060     pkt.Request(10)
11061     pkt.Reply(74, [
11062             rec( 8, 4, SystemIntervalMarker, BE ),
11063             rec( 12, 2, ConfiguredMaxRoutingBuffers ),
11064             rec( 14, 2, ActualMaxUsedRoutingBuffers ),
11065             rec( 16, 2, CurrentlyUsedRoutingBuffers ),
11066             rec( 18, 4, TotalFileServicePackets ),
11067             rec( 22, 2, TurboUsedForFileService ),
11068             rec( 24, 2, PacketsFromInvalidConnection ),
11069             rec( 26, 2, BadLogicalConnectionCount ),
11070             rec( 28, 2, PacketsReceivedDuringProcessing ),
11071             rec( 30, 2, RequestsReprocessed ),
11072             rec( 32, 2, PacketsWithBadSequenceNumber ),
11073             rec( 34, 2, DuplicateRepliesSent ),
11074             rec( 36, 2, PositiveAcknowledgesSent ),
11075             rec( 38, 2, PacketsWithBadRequestType ),
11076             rec( 40, 2, AttachDuringProcessing ),
11077             rec( 42, 2, AttachWhileProcessingAttach ),
11078             rec( 44, 2, ForgedDetachedRequests ),
11079             rec( 46, 2, DetachForBadConnectionNumber ),
11080             rec( 48, 2, DetachDuringProcessing ),
11081             rec( 50, 2, RepliesCancelled ),
11082             rec( 52, 2, PacketsDiscardedByHopCount ),
11083             rec( 54, 2, PacketsDiscardedUnknownNet ),
11084             rec( 56, 2, IncomingPacketDiscardedNoDGroup ),
11085             rec( 58, 2, OutgoingPacketDiscardedNoTurboBuffer ),
11086             rec( 60, 2, IPXNotMyNetwork ),
11087             rec( 62, 4, NetBIOSBroadcastWasPropogated ),
11088             rec( 66, 4, TotalOtherPackets ),
11089             rec( 70, 4, TotalRoutedPackets ),
11090      ])
11091     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11092     # 2222/17E8, 23/232
11093     pkt = NCP(0x17E8, "Get File Server Misc Information", 'fileserver')
11094     pkt.Request(10)
11095     pkt.Reply(40, [
11096             rec( 8, 4, SystemIntervalMarker, BE ),
11097             rec( 12, 1, ProcessorType ),
11098             rec( 13, 1, Reserved ),
11099             rec( 14, 1, NumberOfServiceProcesses ),
11100             rec( 15, 1, ServerUtilizationPercentage ),
11101             rec( 16, 2, ConfiguredMaxBinderyObjects ),
11102             rec( 18, 2, ActualMaxBinderyObjects ),
11103             rec( 20, 2, CurrentUsedBinderyObjects ),
11104             rec( 22, 2, TotalServerMemory ),
11105             rec( 24, 2, WastedServerMemory ),
11106             rec( 26, 2, NumberOfDynamicMemoryAreas, var="x" ),
11107             rec( 28, 12, DynMemStruct, repeat="x" ),
11108      ])
11109     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11110     # 2222/17E9, 23/233
11111     pkt = NCP(0x17E9, "Get Volume Information", 'fileserver')
11112     pkt.Request(11, [
11113             rec( 10, 1, VolumeNumber ),
11114     ],info_str=(VolumeNumber, "Get Information on Volume %d", ", %d"))
11115     pkt.Reply(48, [
11116             rec( 8, 4, SystemIntervalMarker, BE ),
11117             rec( 12, 1, VolumeNumber ),
11118             rec( 13, 1, LogicalDriveNumber ),
11119             rec( 14, 2, BlockSize ),
11120             rec( 16, 2, StartingBlock ),
11121             rec( 18, 2, TotalBlocks ),
11122             rec( 20, 2, FreeBlocks ),
11123             rec( 22, 2, TotalDirectoryEntries ),
11124             rec( 24, 2, FreeDirectoryEntries ),
11125             rec( 26, 2, ActualMaxUsedDirectoryEntries ),
11126             rec( 28, 1, VolumeHashedFlag ),
11127             rec( 29, 1, VolumeCachedFlag ),
11128             rec( 30, 1, VolumeRemovableFlag ),
11129             rec( 31, 1, VolumeMountedFlag ),
11130             rec( 32, 16, VolumeName ),
11131      ])
11132     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11133     # 2222/17EA, 23/234
11134     pkt = NCP(0x17EA, "Get Connection's Task Information", 'fileserver')
11135     pkt.Request(12, [
11136             rec( 10, 2, ConnectionNumber ),
11137     ])
11138     pkt.Reply(13, [
11139             rec( 8, 1, ConnLockStatus ),
11140             rec( 9, 1, NumberOfActiveTasks, var="x" ),
11141             rec( 10, 3, TaskStruct, repeat="x" ),
11142      ])
11143     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11144     # 2222/17EB, 23/235
11145     pkt = NCP(0x17EB, "Get Connection's Open Files", 'fileserver')
11146     pkt.Request(14, [
11147             rec( 10, 2, ConnectionNumber ),
11148             rec( 12, 2, LastRecordSeen ),
11149     ])
11150     pkt.Reply((29,283), [
11151             rec( 8, 2, NextRequestRecord ),
11152             rec( 10, 2, NumberOfRecords, var="x" ),
11153             rec( 12, (17, 271), OpnFilesStruct, repeat="x" ),
11154     ])
11155     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
11156     # 2222/17EC, 23/236
11157     pkt = NCP(0x17EC, "Get Connection Using A File", 'fileserver')
11158     pkt.Request(18, [
11159             rec( 10, 1, DataStreamNumber ),
11160             rec( 11, 1, VolumeNumber ),
11161             rec( 12, 4, DirectoryBase, LE ),
11162             rec( 16, 2, LastRecordSeen ),
11163     ])
11164     pkt.Reply(33, [
11165             rec( 8, 2, NextRequestRecord ),
11166             rec( 10, 2, FileUseCount ),
11167             rec( 12, 2, OpenCount ),
11168             rec( 14, 2, OpenForReadCount ),
11169             rec( 16, 2, OpenForWriteCount ),
11170             rec( 18, 2, DenyReadCount ),
11171             rec( 20, 2, DenyWriteCount ),
11172             rec( 22, 1, Locked ),
11173             rec( 23, 1, ForkCount ),
11174             rec( 24, 2, NumberOfRecords, var="x" ),
11175             rec( 26, 7, ConnFileStruct, repeat="x" ),
11176     ])
11177     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
11178     # 2222/17ED, 23/237
11179     pkt = NCP(0x17ED, "Get Physical Record Locks By Connection And File", 'fileserver')
11180     pkt.Request(20, [
11181             rec( 10, 2, TargetConnectionNumber ),
11182             rec( 12, 1, DataStreamNumber ),
11183             rec( 13, 1, VolumeNumber ),
11184             rec( 14, 4, DirectoryBase, LE ),
11185             rec( 18, 2, LastRecordSeen ),
11186     ])
11187     pkt.Reply(23, [
11188             rec( 8, 2, NextRequestRecord ),
11189             rec( 10, 2, NumberOfLocks, LE, var="x" ),
11190             rec( 12, 11, LockStruct, repeat="x" ),
11191     ])
11192     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11193     # 2222/17EE, 23/238
11194     pkt = NCP(0x17EE, "Get Physical Record Locks By File", 'fileserver')
11195     pkt.Request(18, [
11196             rec( 10, 1, DataStreamNumber ),
11197             rec( 11, 1, VolumeNumber ),
11198             rec( 12, 4, DirectoryBase ),
11199             rec( 16, 2, LastRecordSeen ),
11200     ])
11201     pkt.Reply(30, [
11202             rec( 8, 2, NextRequestRecord ),
11203             rec( 10, 2, NumberOfLocks, LE, var="x" ),
11204             rec( 12, 18, PhyLockStruct, repeat="x" ),
11205     ])
11206     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11207     # 2222/17EF, 23/239
11208     pkt = NCP(0x17EF, "Get Logical Records By Connection", 'fileserver')
11209     pkt.Request(14, [
11210             rec( 10, 2, TargetConnectionNumber ),
11211             rec( 12, 2, LastRecordSeen ),
11212     ])
11213     pkt.Reply((16,270), [
11214             rec( 8, 2, NextRequestRecord ),
11215             rec( 10, 2, NumberOfRecords, var="x" ),
11216             rec( 12, (4, 258), LogLockStruct, repeat="x" ),
11217     ])
11218     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11219     # 2222/17F0, 23/240
11220     pkt = NCP(0x17F0, "Get Logical Record Information (old)", 'fileserver')
11221     pkt.Request((13,267), [
11222             rec( 10, 2, LastRecordSeen ),
11223             rec( 12, (1,255), LogicalRecordName ),
11224     ])
11225     pkt.Reply(22, [
11226             rec( 8, 2, ShareableLockCount ),
11227             rec( 10, 2, UseCount ),
11228             rec( 12, 1, Locked ),
11229             rec( 13, 2, NextRequestRecord ),
11230             rec( 15, 2, NumberOfRecords, var="x" ),
11231             rec( 17, 5, LogRecStruct, repeat="x" ),
11232     ])
11233     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11234     # 2222/17F1, 23/241
11235     pkt = NCP(0x17F1, "Get Connection's Semaphores", 'fileserver')
11236     pkt.Request(14, [
11237             rec( 10, 2, ConnectionNumber ),
11238             rec( 12, 2, LastRecordSeen ),
11239     ])
11240     pkt.Reply((19,273), [
11241             rec( 8, 2, NextRequestRecord ),
11242             rec( 10, 2, NumberOfSemaphores, var="x" ),
11243             rec( 12, (7, 261), SemaStruct, repeat="x" ),
11244     ])
11245     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11246     # 2222/17F2, 23/242
11247     pkt = NCP(0x17F2, "Get Semaphore Information", 'fileserver')
11248     pkt.Request((13,267), [
11249             rec( 10, 2, LastRecordSeen ),
11250             rec( 12, (1,255), SemaphoreName ),
11251     ], info_str=(SemaphoreName, "Get Semaphore Information: %s", ", %s"))
11252     pkt.Reply(20, [
11253             rec( 8, 2, NextRequestRecord ),
11254             rec( 10, 2, OpenCount ),
11255             rec( 12, 2, SemaphoreValue ),
11256             rec( 14, 2, NumberOfRecords, var="x" ),
11257             rec( 16, 4, SemaInfoStruct, repeat="x" ),
11258     ])
11259     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11260     # 2222/17F3, 23/243
11261     pkt = NCP(0x17F3, "Map Directory Number to Path", 'file')
11262     pkt.Request(16, [
11263             rec( 10, 1, VolumeNumber ),
11264             rec( 11, 4, DirectoryNumber ),
11265             rec( 15, 1, NameSpace ),
11266     ])
11267     pkt.Reply((9,263), [
11268             rec( 8, (1,255), Path ),
11269     ])
11270     pkt.CompletionCodes([0x0000, 0x9600, 0x9c00, 0xc601, 0xfd00, 0xff00])
11271     # 2222/17F4, 23/244
11272     pkt = NCP(0x17F4, "Convert Path to Dir Entry", 'file')
11273     pkt.Request((12,266), [
11274             rec( 10, 1, DirHandle ),
11275             rec( 11, (1,255), Path ),
11276     ], info_str=(Path, "Convert Path to Directory Entry: %s", ", %s"))
11277     pkt.Reply(13, [
11278             rec( 8, 1, VolumeNumber ),
11279             rec( 9, 4, DirectoryNumber ),
11280     ])
11281     pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
11282     # 2222/17FD, 23/253
11283     pkt = NCP(0x17FD, "Send Console Broadcast", 'fileserver')
11284     pkt.Request((16, 270), [
11285             rec( 10, 1, NumberOfStations, var="x" ),
11286             rec( 11, 4, StationList, repeat="x" ),
11287             rec( 15, (1, 255), TargetMessage ),
11288     ], info_str=(TargetMessage, "Send Console Broadcast: %s", ", %s"))
11289     pkt.Reply(8)
11290     pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
11291     # 2222/17FE, 23/254
11292     pkt = NCP(0x17FE, "Clear Connection Number", 'fileserver')
11293     pkt.Request(14, [
11294             rec( 10, 4, ConnectionNumber ),
11295     ])
11296     pkt.Reply(8)
11297     pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
11298     # 2222/18, 24
11299     pkt = NCP(0x18, "End of Job", 'connection')
11300     pkt.Request(7)
11301     pkt.Reply(8)
11302     pkt.CompletionCodes([0x0000])
11303     # 2222/19, 25
11304     pkt = NCP(0x19, "Logout", 'connection')
11305     pkt.Request(7)
11306     pkt.Reply(8)
11307     pkt.CompletionCodes([0x0000])
11308     # 2222/1A, 26
11309     pkt = NCP(0x1A, "Log Physical Record", 'sync')
11310     pkt.Request(24, [
11311             rec( 7, 1, LockFlag ),
11312             rec( 8, 6, FileHandle ),
11313             rec( 14, 4, LockAreasStartOffset, BE ),
11314             rec( 18, 4, LockAreaLen, BE ),
11315             rec( 22, 2, LockTimeout ),
11316     ], info_str=(LockAreaLen, "Lock Record - Length of %d", "%d"))
11317     pkt.Reply(8)
11318     pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
11319     # 2222/1B, 27
11320     pkt = NCP(0x1B, "Lock Physical Record Set", 'sync')
11321     pkt.Request(10, [
11322             rec( 7, 1, LockFlag ),
11323             rec( 8, 2, LockTimeout ),
11324     ])
11325     pkt.Reply(8)
11326     pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
11327     # 2222/1C, 28
11328     pkt = NCP(0x1C, "Release Physical Record", 'sync')
11329     pkt.Request(22, [
11330             rec( 7, 1, Reserved ),
11331             rec( 8, 6, FileHandle ),
11332             rec( 14, 4, LockAreasStartOffset ),
11333             rec( 18, 4, LockAreaLen ),
11334     ], info_str=(LockAreaLen, "Release Lock Record - Length of %d", "%d"))
11335     pkt.Reply(8)
11336     pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
11337     # 2222/1D, 29
11338     pkt = NCP(0x1D, "Release Physical Record Set", 'sync')
11339     pkt.Request(8, [
11340             rec( 7, 1, LockFlag ),
11341     ])
11342     pkt.Reply(8)
11343     pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
11344     # 2222/1E, 30   #Tested and fixed 6-14-02 GM
11345     pkt = NCP(0x1E, "Clear Physical Record", 'sync')
11346     pkt.Request(22, [
11347             rec( 7, 1, Reserved ),
11348             rec( 8, 6, FileHandle ),
11349             rec( 14, 4, LockAreasStartOffset, BE ),
11350             rec( 18, 4, LockAreaLen, BE ),
11351     ], info_str=(LockAreaLen, "Clear Lock Record - Length of %d", "%d"))
11352     pkt.Reply(8)
11353     pkt.CompletionCodes([0x0000, 0x8000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
11354     # 2222/1F, 31
11355     pkt = NCP(0x1F, "Clear Physical Record Set", 'sync')
11356     pkt.Request(8, [
11357             rec( 7, 1, LockFlag ),
11358     ])
11359     pkt.Reply(8)
11360     pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
11361     # 2222/2000, 32/00
11362     pkt = NCP(0x2000, "Open Semaphore", 'sync', has_length=0)
11363     pkt.Request((10,264), [
11364             rec( 8, 1, InitialSemaphoreValue ),
11365             rec( 9, (1,255), SemaphoreName ),
11366     ], info_str=(SemaphoreName, "Open Semaphore: %s", ", %s"))
11367     pkt.Reply(13, [
11368               rec( 8, 4, SemaphoreHandle, BE ),
11369               rec( 12, 1, SemaphoreOpenCount ),
11370     ])
11371     pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
11372     # 2222/2001, 32/01
11373     pkt = NCP(0x2001, "Examine Semaphore", 'sync', has_length=0)
11374     pkt.Request(12, [
11375             rec( 8, 4, SemaphoreHandle, BE ),
11376     ])
11377     pkt.Reply(10, [
11378               rec( 8, 1, SemaphoreValue ),
11379               rec( 9, 1, SemaphoreOpenCount ),
11380     ])
11381     pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
11382     # 2222/2002, 32/02
11383     pkt = NCP(0x2002, "Wait On Semaphore", 'sync', has_length=0)
11384     pkt.Request(14, [
11385             rec( 8, 4, SemaphoreHandle, BE ),
11386             rec( 12, 2, SemaphoreTimeOut, BE ),
11387     ])
11388     pkt.Reply(8)
11389     pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
11390     # 2222/2003, 32/03
11391     pkt = NCP(0x2003, "Signal Semaphore", 'sync', has_length=0)
11392     pkt.Request(12, [
11393             rec( 8, 4, SemaphoreHandle, BE ),
11394     ])
11395     pkt.Reply(8)
11396     pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
11397     # 2222/2004, 32/04
11398     pkt = NCP(0x2004, "Close Semaphore", 'sync', has_length=0)
11399     pkt.Request(12, [
11400             rec( 8, 4, SemaphoreHandle, BE ),
11401     ])
11402     pkt.Reply(8)
11403     pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
11404     # 2222/21, 33
11405     pkt = NCP(0x21, "Negotiate Buffer Size", 'connection')
11406     pkt.Request(9, [
11407             rec( 7, 2, BufferSize, BE ),
11408     ])
11409     pkt.Reply(10, [
11410             rec( 8, 2, BufferSize, BE ),
11411     ])
11412     pkt.CompletionCodes([0x0000])
11413     # 2222/2200, 34/00
11414     pkt = NCP(0x2200, "TTS Is Available", 'tts', has_length=0)
11415     pkt.Request(8)
11416     pkt.Reply(8)
11417     pkt.CompletionCodes([0x0001, 0xfd03, 0xff12])
11418     # 2222/2201, 34/01
11419     pkt = NCP(0x2201, "TTS Begin Transaction", 'tts', has_length=0)
11420     pkt.Request(8)
11421     pkt.Reply(8)
11422     pkt.CompletionCodes([0x0000])
11423     # 2222/2202, 34/02
11424     pkt = NCP(0x2202, "TTS End Transaction", 'tts', has_length=0)
11425     pkt.Request(8)
11426     pkt.Reply(12, [
11427               rec( 8, 4, TransactionNumber, BE ),
11428     ])
11429     pkt.CompletionCodes([0x0000, 0xff01])
11430     # 2222/2203, 34/03
11431     pkt = NCP(0x2203, "TTS Abort Transaction", 'tts', has_length=0)
11432     pkt.Request(8)
11433     pkt.Reply(8)
11434     pkt.CompletionCodes([0x0000, 0xfd03, 0xfe0b, 0xff01])
11435     # 2222/2204, 34/04
11436     pkt = NCP(0x2204, "TTS Transaction Status", 'tts', has_length=0)
11437     pkt.Request(12, [
11438               rec( 8, 4, TransactionNumber, BE ),
11439     ])
11440     pkt.Reply(8)
11441     pkt.CompletionCodes([0x0000])
11442     # 2222/2205, 34/05
11443     pkt = NCP(0x2205, "TTS Get Application Thresholds", 'tts', has_length=0)
11444     pkt.Request(8)
11445     pkt.Reply(10, [
11446               rec( 8, 1, LogicalLockThreshold ),
11447               rec( 9, 1, PhysicalLockThreshold ),
11448     ])
11449     pkt.CompletionCodes([0x0000])
11450     # 2222/2206, 34/06
11451     pkt = NCP(0x2206, "TTS Set Application Thresholds", 'tts', has_length=0)
11452     pkt.Request(10, [
11453               rec( 8, 1, LogicalLockThreshold ),
11454               rec( 9, 1, PhysicalLockThreshold ),
11455     ])
11456     pkt.Reply(8)
11457     pkt.CompletionCodes([0x0000, 0x9600])
11458     # 2222/2207, 34/07
11459     pkt = NCP(0x2207, "TTS Get Workstation Thresholds", 'tts', has_length=0)
11460     pkt.Request(8)
11461     pkt.Reply(10, [
11462               rec( 8, 1, LogicalLockThreshold ),
11463               rec( 9, 1, PhysicalLockThreshold ),
11464     ])
11465     pkt.CompletionCodes([0x0000])
11466     # 2222/2208, 34/08
11467     pkt = NCP(0x2208, "TTS Set Workstation Thresholds", 'tts', has_length=0)
11468     pkt.Request(10, [
11469               rec( 8, 1, LogicalLockThreshold ),
11470               rec( 9, 1, PhysicalLockThreshold ),
11471     ])
11472     pkt.Reply(8)
11473     pkt.CompletionCodes([0x0000])
11474     # 2222/2209, 34/09
11475     pkt = NCP(0x2209, "TTS Get Transaction Bits", 'tts', has_length=0)
11476     pkt.Request(8)
11477     pkt.Reply(9, [
11478             rec( 8, 1, ControlFlags ),
11479     ])
11480     pkt.CompletionCodes([0x0000])
11481     # 2222/220A, 34/10
11482     pkt = NCP(0x220A, "TTS Set Transaction Bits", 'tts', has_length=0)
11483     pkt.Request(9, [
11484             rec( 8, 1, ControlFlags ),
11485     ])
11486     pkt.Reply(8)
11487     pkt.CompletionCodes([0x0000])
11488     # 2222/2301, 35/01
11489     pkt = NCP(0x2301, "AFP Create Directory", 'afp')
11490     pkt.Request((49, 303), [
11491             rec( 10, 1, VolumeNumber ),
11492             rec( 11, 4, BaseDirectoryID ),
11493             rec( 15, 1, Reserved ),
11494             rec( 16, 4, CreatorID ),
11495             rec( 20, 4, Reserved4 ),
11496             rec( 24, 2, FinderAttr ),
11497             rec( 26, 2, HorizLocation ),
11498             rec( 28, 2, VertLocation ),
11499             rec( 30, 2, FileDirWindow ),
11500             rec( 32, 16, Reserved16 ),
11501             rec( 48, (1,255), Path ),
11502     ], info_str=(Path, "AFP Create Directory: %s", ", %s"))
11503     pkt.Reply(12, [
11504             rec( 8, 4, NewDirectoryID ),
11505     ])
11506     pkt.CompletionCodes([0x0000, 0x8301, 0x8400, 0x8800, 0x9300, 0x9600, 0x9804,
11507                          0x9900, 0x9c03, 0x9e02, 0xa100, 0xa201, 0xfd00, 0xff18])
11508     # 2222/2302, 35/02
11509     pkt = NCP(0x2302, "AFP Create File", 'afp')
11510     pkt.Request((49, 303), [
11511             rec( 10, 1, VolumeNumber ),
11512             rec( 11, 4, BaseDirectoryID ),
11513             rec( 15, 1, DeleteExistingFileFlag ),
11514             rec( 16, 4, CreatorID, BE ),
11515             rec( 20, 4, Reserved4 ),
11516             rec( 24, 2, FinderAttr ),
11517             rec( 26, 2, HorizLocation, BE ),
11518             rec( 28, 2, VertLocation, BE ),
11519             rec( 30, 2, FileDirWindow, BE ),
11520             rec( 32, 16, Reserved16 ),
11521             rec( 48, (1,255), Path ),
11522     ], info_str=(Path, "AFP Create File: %s", ", %s"))
11523     pkt.Reply(12, [
11524             rec( 8, 4, NewDirectoryID ),
11525     ])
11526     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8400, 0x8701, 0x8800,
11527                          0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9300, 0x9600, 0x9804,
11528                          0x9900, 0x9b03, 0x9c03, 0x9e02, 0xa100, 0xa201, 0xfd00,
11529                          0xff18])
11530     # 2222/2303, 35/03
11531     pkt = NCP(0x2303, "AFP Delete", 'afp')
11532     pkt.Request((16,270), [
11533             rec( 10, 1, VolumeNumber ),
11534             rec( 11, 4, BaseDirectoryID ),
11535             rec( 15, (1,255), Path ),
11536     ], info_str=(Path, "AFP Delete: %s", ", %s"))
11537     pkt.Reply(8)
11538     pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x8a00, 0x8d00, 0x8e00, 0x8f00,
11539                          0x9000, 0x9300, 0x9600, 0x9804, 0x9b03, 0x9c03, 0x9e02,
11540                          0xa000, 0xa100, 0xa201, 0xfd00, 0xff19])
11541     # 2222/2304, 35/04
11542     pkt = NCP(0x2304, "AFP Get Entry ID From Name", 'afp')
11543     pkt.Request((16,270), [
11544             rec( 10, 1, VolumeNumber ),
11545             rec( 11, 4, BaseDirectoryID ),
11546             rec( 15, (1,255), Path ),
11547     ], info_str=(Path, "AFP Get Entry from Name: %s", ", %s"))
11548     pkt.Reply(12, [
11549             rec( 8, 4, TargetEntryID, BE ),
11550     ])
11551     pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
11552                          0xa100, 0xa201, 0xfd00, 0xff19])
11553     # 2222/2305, 35/05
11554     pkt = NCP(0x2305, "AFP Get File Information", 'afp')
11555     pkt.Request((18,272), [
11556             rec( 10, 1, VolumeNumber ),
11557             rec( 11, 4, BaseDirectoryID ),
11558             rec( 15, 2, RequestBitMap, BE ),
11559             rec( 17, (1,255), Path ),
11560     ], info_str=(Path, "AFP Get File Information: %s", ", %s"))
11561     pkt.Reply(121, [
11562             rec( 8, 4, AFPEntryID, BE ),
11563             rec( 12, 4, ParentID, BE ),
11564             rec( 16, 2, AttributesDef16, LE ),
11565             rec( 18, 4, DataForkLen, BE ),
11566             rec( 22, 4, ResourceForkLen, BE ),
11567             rec( 26, 2, TotalOffspring, BE  ),
11568             rec( 28, 2, CreationDate, BE ),
11569             rec( 30, 2, LastAccessedDate, BE ),
11570             rec( 32, 2, ModifiedDate, BE ),
11571             rec( 34, 2, ModifiedTime, BE ),
11572             rec( 36, 2, ArchivedDate, BE ),
11573             rec( 38, 2, ArchivedTime, BE ),
11574             rec( 40, 4, CreatorID, BE ),
11575             rec( 44, 4, Reserved4 ),
11576             rec( 48, 2, FinderAttr ),
11577             rec( 50, 2, HorizLocation ),
11578             rec( 52, 2, VertLocation ),
11579             rec( 54, 2, FileDirWindow ),
11580             rec( 56, 16, Reserved16 ),
11581             rec( 72, 32, LongName ),
11582             rec( 104, 4, CreatorID, BE ),
11583             rec( 108, 12, ShortName ),
11584             rec( 120, 1, AccessPrivileges ),
11585     ])
11586     pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
11587                          0xa100, 0xa201, 0xfd00, 0xff19])
11588     # 2222/2306, 35/06
11589     pkt = NCP(0x2306, "AFP Get Entry ID From NetWare Handle", 'afp')
11590     pkt.Request(16, [
11591             rec( 10, 6, FileHandle ),
11592     ])
11593     pkt.Reply(14, [
11594             rec( 8, 1, VolumeID ),
11595             rec( 9, 4, TargetEntryID, BE ),
11596             rec( 13, 1, ForkIndicator ),
11597     ])
11598     pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0xa201])
11599     # 2222/2307, 35/07
11600     pkt = NCP(0x2307, "AFP Rename", 'afp')
11601     pkt.Request((21, 529), [
11602             rec( 10, 1, VolumeNumber ),
11603             rec( 11, 4, MacSourceBaseID, BE ),
11604             rec( 15, 4, MacDestinationBaseID, BE ),
11605             rec( 19, (1,255), Path ),
11606             rec( -1, (1,255), NewFileNameLen ),
11607     ], info_str=(Path, "AFP Rename: %s", ", %s"))
11608     pkt.Reply(8)
11609     pkt.CompletionCodes([0x0000, 0x8301, 0x8401, 0x8800, 0x8b00, 0x8e00,
11610                          0x9001, 0x9201, 0x9300, 0x9600, 0x9804, 0x9900,
11611                          0x9c03, 0x9e00, 0xa100, 0xa201, 0xfd00, 0xff0a])
11612     # 2222/2308, 35/08
11613     pkt = NCP(0x2308, "AFP Open File Fork", 'afp')
11614     pkt.Request((18, 272), [
11615             rec( 10, 1, VolumeNumber ),
11616             rec( 11, 4, MacBaseDirectoryID ),
11617             rec( 15, 1, ForkIndicator ),
11618             rec( 16, 1, AccessMode ),
11619             rec( 17, (1,255), Path ),
11620     ], info_str=(Path, "AFP Open File Fork: %s", ", %s"))
11621     pkt.Reply(22, [
11622             rec( 8, 4, AFPEntryID, BE ),
11623             rec( 12, 4, DataForkLen, BE ),
11624             rec( 16, 6, NetWareAccessHandle ),
11625     ])
11626     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8800, 0x9300,
11627                          0x9400, 0x9600, 0x9804, 0x9900, 0x9c03, 0xa100,
11628                          0xa201, 0xfd00, 0xff16])
11629     # 2222/2309, 35/09
11630     pkt = NCP(0x2309, "AFP Set File Information", 'afp')
11631     pkt.Request((64, 318), [
11632             rec( 10, 1, VolumeNumber ),
11633             rec( 11, 4, MacBaseDirectoryID ),
11634             rec( 15, 2, RequestBitMap, BE ),
11635             rec( 17, 2, MacAttr, BE ),
11636             rec( 19, 2, CreationDate, BE ),
11637             rec( 21, 2, LastAccessedDate, BE ),
11638             rec( 23, 2, ModifiedDate, BE ),
11639             rec( 25, 2, ModifiedTime, BE ),
11640             rec( 27, 2, ArchivedDate, BE ),
11641             rec( 29, 2, ArchivedTime, BE ),
11642             rec( 31, 4, CreatorID, BE ),
11643             rec( 35, 4, Reserved4 ),
11644             rec( 39, 2, FinderAttr ),
11645             rec( 41, 2, HorizLocation ),
11646             rec( 43, 2, VertLocation ),
11647             rec( 45, 2, FileDirWindow ),
11648             rec( 47, 16, Reserved16 ),
11649             rec( 63, (1,255), Path ),
11650     ], info_str=(Path, "AFP Set File Information: %s", ", %s"))
11651     pkt.Reply(8)
11652     pkt.CompletionCodes([0x0000, 0x0104, 0x8301, 0x8800, 0x9300, 0x9400,
11653                          0x9500, 0x9600, 0x9804, 0x9c03, 0xa100, 0xa201,
11654                          0xfd00, 0xff16])
11655     # 2222/230A, 35/10
11656     pkt = NCP(0x230A, "AFP Scan File Information", 'afp')
11657     pkt.Request((26, 280), [
11658             rec( 10, 1, VolumeNumber ),
11659             rec( 11, 4, MacBaseDirectoryID ),
11660             rec( 15, 4, MacLastSeenID, BE ),
11661             rec( 19, 2, DesiredResponseCount, BE ),
11662             rec( 21, 2, SearchBitMap, BE ),
11663             rec( 23, 2, RequestBitMap, BE ),
11664             rec( 25, (1,255), Path ),
11665     ], info_str=(Path, "AFP Scan File Information: %s", ", %s"))
11666     pkt.Reply(123, [
11667             rec( 8, 2, ActualResponseCount, BE, var="x" ),
11668             rec( 10, 113, AFP10Struct, repeat="x" ),
11669     ])
11670     pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804,
11671                          0x9c03, 0xa100, 0xa201, 0xfd00, 0xff16])
11672     # 2222/230B, 35/11
11673     pkt = NCP(0x230B, "AFP Alloc Temporary Directory Handle", 'afp')
11674     pkt.Request((16,270), [
11675             rec( 10, 1, VolumeNumber ),
11676             rec( 11, 4, MacBaseDirectoryID ),
11677             rec( 15, (1,255), Path ),
11678     ], info_str=(Path, "AFP Allocate Temporary Directory Handle: %s", ", %s"))
11679     pkt.Reply(10, [
11680             rec( 8, 1, DirHandle ),
11681             rec( 9, 1, AccessRightsMask ),
11682     ])
11683     pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600,
11684                          0x9804, 0x9b03, 0x9c03, 0x9d00, 0xa100,
11685                          0xa201, 0xfd00, 0xff00])
11686     # 2222/230C, 35/12
11687     pkt = NCP(0x230C, "AFP Get Entry ID From Path Name", 'afp')
11688     pkt.Request((12,266), [
11689             rec( 10, 1, DirHandle ),
11690             rec( 11, (1,255), Path ),
11691     ], info_str=(Path, "AFP Get Entry ID from Path Name: %s", ", %s"))
11692     pkt.Reply(12, [
11693             rec( 8, 4, AFPEntryID, BE ),
11694     ])
11695     pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600,
11696                          0x9804, 0x9b03, 0x9c03, 0xa100, 0xa201,
11697                          0xfd00, 0xff00])
11698     # 2222/230D, 35/13
11699     pkt = NCP(0x230D, "AFP 2.0 Create Directory", 'afp')
11700     pkt.Request((55,309), [
11701             rec( 10, 1, VolumeNumber ),
11702             rec( 11, 4, BaseDirectoryID ),
11703             rec( 15, 1, Reserved ),
11704             rec( 16, 4, CreatorID, BE ),
11705             rec( 20, 4, Reserved4 ),
11706             rec( 24, 2, FinderAttr ),
11707             rec( 26, 2, HorizLocation ),
11708             rec( 28, 2, VertLocation ),
11709             rec( 30, 2, FileDirWindow ),
11710             rec( 32, 16, Reserved16 ),
11711             rec( 48, 6, ProDOSInfo ),
11712             rec( 54, (1,255), Path ),
11713     ], info_str=(Path, "AFP 2.0 Create Directory: %s", ", %s"))
11714     pkt.Reply(12, [
11715             rec( 8, 4, NewDirectoryID ),
11716     ])
11717     pkt.CompletionCodes([0x0000, 0x8301, 0x8400, 0x8800, 0x9300,
11718                          0x9600, 0x9804, 0x9900, 0x9c03, 0x9e00,
11719                          0xa100, 0xa201, 0xfd00, 0xff00])
11720     # 2222/230E, 35/14
11721     pkt = NCP(0x230E, "AFP 2.0 Create File", 'afp')
11722     pkt.Request((55,309), [
11723             rec( 10, 1, VolumeNumber ),
11724             rec( 11, 4, BaseDirectoryID ),
11725             rec( 15, 1, DeleteExistingFileFlag ),
11726             rec( 16, 4, CreatorID, BE ),
11727             rec( 20, 4, Reserved4 ),
11728             rec( 24, 2, FinderAttr ),
11729             rec( 26, 2, HorizLocation ),
11730             rec( 28, 2, VertLocation ),
11731             rec( 30, 2, FileDirWindow ),
11732             rec( 32, 16, Reserved16 ),
11733             rec( 48, 6, ProDOSInfo ),
11734             rec( 54, (1,255), Path ),
11735     ], info_str=(Path, "AFP 2.0 Create File: %s", ", %s"))
11736     pkt.Reply(12, [
11737             rec( 8, 4, NewDirectoryID ),
11738     ])
11739     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8400,
11740                          0x8701, 0x8800, 0x8a00, 0x8d00, 0x8e00,
11741                          0x8f00, 0x9001, 0x9300, 0x9600, 0x9804,
11742                          0x9900, 0x9b03, 0x9c03, 0x9e00, 0xa100,
11743                          0xa201, 0xfd00, 0xff00])
11744     # 2222/230F, 35/15
11745     pkt = NCP(0x230F, "AFP 2.0 Get File Or Directory Information", 'afp')
11746     pkt.Request((18,272), [
11747             rec( 10, 1, VolumeNumber ),
11748             rec( 11, 4, BaseDirectoryID ),
11749             rec( 15, 2, RequestBitMap, BE ),
11750             rec( 17, (1,255), Path ),
11751     ], info_str=(Path, "AFP 2.0 Get Information: %s", ", %s"))
11752     pkt.Reply(128, [
11753             rec( 8, 4, AFPEntryID, BE ),
11754             rec( 12, 4, ParentID, BE ),
11755             rec( 16, 2, AttributesDef16 ),
11756             rec( 18, 4, DataForkLen, BE ),
11757             rec( 22, 4, ResourceForkLen, BE ),
11758             rec( 26, 2, TotalOffspring, BE ),
11759             rec( 28, 2, CreationDate, BE ),
11760             rec( 30, 2, LastAccessedDate, BE ),
11761             rec( 32, 2, ModifiedDate, BE ),
11762             rec( 34, 2, ModifiedTime, BE ),
11763             rec( 36, 2, ArchivedDate, BE ),
11764             rec( 38, 2, ArchivedTime, BE ),
11765             rec( 40, 4, CreatorID, BE ),
11766             rec( 44, 4, Reserved4 ),
11767             rec( 48, 2, FinderAttr ),
11768             rec( 50, 2, HorizLocation ),
11769             rec( 52, 2, VertLocation ),
11770             rec( 54, 2, FileDirWindow ),
11771             rec( 56, 16, Reserved16 ),
11772             rec( 72, 32, LongName ),
11773             rec( 104, 4, CreatorID, BE ),
11774             rec( 108, 12, ShortName ),
11775             rec( 120, 1, AccessPrivileges ),
11776             rec( 121, 1, Reserved ),
11777             rec( 122, 6, ProDOSInfo ),
11778     ])
11779     pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
11780                          0xa100, 0xa201, 0xfd00, 0xff19])
11781     # 2222/2310, 35/16
11782     pkt = NCP(0x2310, "AFP 2.0 Set File Information", 'afp')
11783     pkt.Request((70, 324), [
11784             rec( 10, 1, VolumeNumber ),
11785             rec( 11, 4, MacBaseDirectoryID ),
11786             rec( 15, 2, RequestBitMap, BE ),
11787             rec( 17, 2, AttributesDef16 ),
11788             rec( 19, 2, CreationDate, BE ),
11789             rec( 21, 2, LastAccessedDate, BE ),
11790             rec( 23, 2, ModifiedDate, BE ),
11791             rec( 25, 2, ModifiedTime, BE ),
11792             rec( 27, 2, ArchivedDate, BE ),
11793             rec( 29, 2, ArchivedTime, BE ),
11794             rec( 31, 4, CreatorID, BE ),
11795             rec( 35, 4, Reserved4 ),
11796             rec( 39, 2, FinderAttr ),
11797             rec( 41, 2, HorizLocation ),
11798             rec( 43, 2, VertLocation ),
11799             rec( 45, 2, FileDirWindow ),
11800             rec( 47, 16, Reserved16 ),
11801             rec( 63, 6, ProDOSInfo ),
11802             rec( 69, (1,255), Path ),
11803     ], info_str=(Path, "AFP 2.0 Set File Information: %s", ", %s"))
11804     pkt.Reply(8)
11805     pkt.CompletionCodes([0x0000, 0x0104, 0x8301, 0x8800, 0x9300, 0x9400,
11806                          0x9500, 0x9600, 0x9804, 0x9c03, 0xa100, 0xa201,
11807                          0xfd00, 0xff16])
11808     # 2222/2311, 35/17
11809     pkt = NCP(0x2311, "AFP 2.0 Scan File Information", 'afp')
11810     pkt.Request((26, 280), [
11811             rec( 10, 1, VolumeNumber ),
11812             rec( 11, 4, MacBaseDirectoryID ),
11813             rec( 15, 4, MacLastSeenID, BE ),
11814             rec( 19, 2, DesiredResponseCount, BE ),
11815             rec( 21, 2, SearchBitMap, BE ),
11816             rec( 23, 2, RequestBitMap, BE ),
11817             rec( 25, (1,255), Path ),
11818     ], info_str=(Path, "AFP 2.0 Scan File Information: %s", ", %s"))
11819     pkt.Reply(14, [
11820             rec( 8, 2, ActualResponseCount, var="x" ),
11821             rec( 10, 4, AFP20Struct, repeat="x" ),
11822     ])
11823     pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804,
11824                          0x9c03, 0xa100, 0xa201, 0xfd00, 0xff16])
11825     # 2222/2312, 35/18
11826     pkt = NCP(0x2312, "AFP Get DOS Name From Entry ID", 'afp')
11827     pkt.Request(15, [
11828             rec( 10, 1, VolumeNumber ),
11829             rec( 11, 4, AFPEntryID, BE ),
11830     ])
11831     pkt.Reply((9,263), [
11832             rec( 8, (1,255), Path ),
11833     ])
11834     pkt.CompletionCodes([0x0000, 0x8900, 0x9600, 0xbf00])
11835     # 2222/2313, 35/19
11836     pkt = NCP(0x2313, "AFP Get Macintosh Info On Deleted File", 'afp')
11837     pkt.Request(15, [
11838             rec( 10, 1, VolumeNumber ),
11839             rec( 11, 4, DirectoryNumber, BE ),
11840     ])
11841     pkt.Reply((51,305), [
11842             rec( 8, 4, CreatorID, BE ),
11843             rec( 12, 4, Reserved4 ),
11844             rec( 16, 2, FinderAttr ),
11845             rec( 18, 2, HorizLocation ),
11846             rec( 20, 2, VertLocation ),
11847             rec( 22, 2, FileDirWindow ),
11848             rec( 24, 16, Reserved16 ),
11849             rec( 40, 6, ProDOSInfo ),
11850             rec( 46, 4, ResourceForkSize, BE ),
11851             rec( 50, (1,255), FileName ),
11852     ])
11853     pkt.CompletionCodes([0x0000, 0x9c03, 0xbf00])
11854     # 2222/2400, 36/00
11855     pkt = NCP(0x2400, "Get NCP Extension Information", 'extension')
11856     pkt.Request(14, [
11857             rec( 10, 4, NCPextensionNumber, LE ),
11858     ])
11859     pkt.Reply((16,270), [
11860             rec( 8, 4, NCPextensionNumber ),
11861             rec( 12, 1, NCPextensionMajorVersion ),
11862             rec( 13, 1, NCPextensionMinorVersion ),
11863             rec( 14, 1, NCPextensionRevisionNumber ),
11864             rec( 15, (1, 255), NCPextensionName ),
11865     ])
11866     pkt.CompletionCodes([0x0000, 0x7e01, 0xfe00, 0xff20])
11867     # 2222/2401, 36/01
11868     pkt = NCP(0x2401, "Get NCP Extension Maximum Data Size", 'extension')
11869     pkt.Request(10)
11870     pkt.Reply(10, [
11871             rec( 8, 2, NCPdataSize ),
11872     ])
11873     pkt.CompletionCodes([0x0000, 0x7e01, 0xfe00, 0xff20])
11874     # 2222/2402, 36/02
11875     pkt = NCP(0x2402, "Get NCP Extension Information by Name", 'extension')
11876     pkt.Request((11, 265), [
11877             rec( 10, (1,255), NCPextensionName ),
11878     ], info_str=(NCPextensionName, "Get NCP Extension Information by Name: %s", ", %s"))
11879     pkt.Reply((16,270), [
11880             rec( 8, 4, NCPextensionNumber ),
11881             rec( 12, 1, NCPextensionMajorVersion ),
11882             rec( 13, 1, NCPextensionMinorVersion ),
11883             rec( 14, 1, NCPextensionRevisionNumber ),
11884             rec( 15, (1, 255), NCPextensionName ),
11885     ])
11886     pkt.CompletionCodes([0x0000, 0x7e01, 0xfe00, 0xff20])
11887     # 2222/2403, 36/03
11888     pkt = NCP(0x2403, "Get Number of Registered NCP Extensions", 'extension')
11889     pkt.Request(10)
11890     pkt.Reply(12, [
11891             rec( 8, 4, NumberOfNCPExtensions ),
11892     ])
11893     pkt.CompletionCodes([0x0000, 0x7e01, 0xfe00, 0xff20])
11894     # 2222/2404, 36/04
11895     pkt = NCP(0x2404, "Get NCP Extension Registered Verbs List", 'extension')
11896     pkt.Request(14, [
11897             rec( 10, 4, StartingNumber ),
11898     ])
11899     pkt.Reply(20, [
11900             rec( 8, 4, ReturnedListCount, var="x" ),
11901             rec( 12, 4, nextStartingNumber ),
11902             rec( 16, 4, NCPExtensionNumbers, repeat="x" ),
11903     ])
11904     pkt.CompletionCodes([0x0000, 0x7e01, 0xfe00, 0xff20])
11905     # 2222/2405, 36/05
11906     pkt = NCP(0x2405, "Return NCP Extension Information", 'extension')
11907     pkt.Request(14, [
11908             rec( 10, 4, NCPextensionNumber ),
11909     ])
11910     pkt.Reply((16,270), [
11911             rec( 8, 4, NCPextensionNumber ),
11912             rec( 12, 1, NCPextensionMajorVersion ),
11913             rec( 13, 1, NCPextensionMinorVersion ),
11914             rec( 14, 1, NCPextensionRevisionNumber ),
11915             rec( 15, (1, 255), NCPextensionName ),
11916     ])
11917     pkt.CompletionCodes([0x0000, 0x7e01, 0xfe00, 0xff20])
11918     # 2222/2406, 36/06
11919     pkt = NCP(0x2406, "Return NCP Extension Maximum Data Size", 'extension')
11920     pkt.Request(10)
11921     pkt.Reply(12, [
11922             rec( 8, 4, NCPdataSize ),
11923     ])
11924     pkt.CompletionCodes([0x0000, 0x7e01, 0xfe00, 0xff20])
11925     # 2222/25, 37
11926     pkt = NCP(0x25, "Execute NCP Extension", 'extension')
11927     pkt.Request(11, [
11928             rec( 7, 4, NCPextensionNumber ),
11929             # The following value is Unicode
11930             #rec[ 13, (1,255), RequestData ],
11931     ])
11932     pkt.Reply(8)
11933         # The following value is Unicode
11934         #[ 8, (1, 255), ReplyBuffer ],
11935     pkt.CompletionCodes([0x0000, 0x7e01, 0xf000, 0x9c00, 0xd504, 0xee00, 0xfe00, 0xff20])
11936     # 2222/3B, 59
11937     pkt = NCP(0x3B, "Commit File", 'file', has_length=0 )
11938     pkt.Request(14, [
11939             rec( 7, 1, Reserved ),
11940             rec( 8, 6, FileHandle ),
11941     ], info_str=(FileHandle, "Commit File - 0x%s", ", %s"))
11942     pkt.Reply(8)
11943     pkt.CompletionCodes([0x0000, 0x8800, 0x9804, 0xff00])
11944     # 2222/3D, 61
11945     pkt = NCP(0x3D, "Commit File", 'file', has_length=0 )
11946     pkt.Request(14, [
11947             rec( 7, 1, Reserved ),
11948             rec( 8, 6, FileHandle ),
11949     ], info_str=(FileHandle, "Commit File - 0x%s", ", %s"))
11950     pkt.Reply(8)
11951     pkt.CompletionCodes([0x0000, 0x8800, 0x9804, 0xff00])
11952     # 2222/3E, 62
11953     pkt = NCP(0x3E, "File Search Initialize", 'file', has_length=0 )
11954     pkt.Request((9, 263), [
11955             rec( 7, 1, DirHandle ),
11956             rec( 8, (1,255), Path ),
11957     ], info_str=(Path, "Initialize File Search: %s", ", %s"))
11958     pkt.Reply(14, [
11959             rec( 8, 1, VolumeNumber ),
11960             rec( 9, 2, DirectoryID ),
11961             rec( 11, 2, SequenceNumber, BE ),
11962             rec( 13, 1, AccessRightsMask ),
11963     ])
11964     pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100,
11965                          0xfd00, 0xff16])
11966     # 2222/3F, 63
11967     pkt = NCP(0x3F, "File Search Continue", 'file', has_length=0 )
11968     pkt.Request((14, 268), [
11969             rec( 7, 1, VolumeNumber ),
11970             rec( 8, 2, DirectoryID ),
11971             rec( 10, 2, SequenceNumber, BE ),
11972             rec( 12, 1, SearchAttributes ),
11973             rec( 13, (1,255), Path ),
11974     ], info_str=(Path, "File Search Continue: %s", ", %s"))
11975     pkt.Reply( NO_LENGTH_CHECK, [
11976             #
11977             # XXX - don't show this if we got back a non-zero
11978             # completion code?  For example, 255 means "No
11979             # matching files or directories were found", so
11980             # presumably it can't show you a matching file or
11981             # directory instance - it appears to just leave crap
11982             # there.
11983             #
11984             srec( DirectoryInstance, req_cond="ncp.sattr_sub==TRUE"),
11985             srec( FileInstance, req_cond="ncp.sattr_sub!=TRUE"),
11986     ])
11987     pkt.ReqCondSizeVariable()
11988     pkt.CompletionCodes([0x0000, 0xff16])
11989     # 2222/40, 64
11990     pkt = NCP(0x40, "Search for a File", 'file')
11991     pkt.Request((12, 266), [
11992             rec( 7, 2, SequenceNumber, BE ),
11993             rec( 9, 1, DirHandle ),
11994             rec( 10, 1, SearchAttributes ),
11995             rec( 11, (1,255), FileName ),
11996     ], info_str=(FileName, "Search for File: %s", ", %s"))
11997     pkt.Reply(40, [
11998             rec( 8, 2, SequenceNumber, BE ),
11999             rec( 10, 2, Reserved2 ),
12000             rec( 12, 14, FileName14 ),
12001             rec( 26, 1, AttributesDef ),
12002             rec( 27, 1, FileExecuteType ),
12003             rec( 28, 4, FileSize ),
12004             rec( 32, 2, CreationDate, BE ),
12005             rec( 34, 2, LastAccessedDate, BE ),
12006             rec( 36, 2, ModifiedDate, BE ),
12007             rec( 38, 2, ModifiedTime, BE ),
12008     ])
12009     pkt.CompletionCodes([0x0000, 0x8900, 0x9600, 0x9804, 0x9b03,
12010                          0x9c03, 0xa100, 0xfd00, 0xff16])
12011     # 2222/41, 65
12012     pkt = NCP(0x41, "Open File", 'file')
12013     pkt.Request((10, 264), [
12014             rec( 7, 1, DirHandle ),
12015             rec( 8, 1, SearchAttributes ),
12016             rec( 9, (1,255), FileName ),
12017     ], info_str=(FileName, "Open File: %s", ", %s"))
12018     pkt.Reply(44, [
12019             rec( 8, 6, FileHandle ),
12020             rec( 14, 2, Reserved2 ),
12021             rec( 16, 14, FileName14 ),
12022             rec( 30, 1, AttributesDef ),
12023             rec( 31, 1, FileExecuteType ),
12024             rec( 32, 4, FileSize, BE ),
12025             rec( 36, 2, CreationDate, BE ),
12026             rec( 38, 2, LastAccessedDate, BE ),
12027             rec( 40, 2, ModifiedDate, BE ),
12028             rec( 42, 2, ModifiedTime, BE ),
12029     ])
12030     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8200, 0x9400,
12031                          0x9600, 0x9804, 0x9c03, 0xa100, 0xfd00,
12032                          0xff16])
12033     # 2222/42, 66
12034     pkt = NCP(0x42, "Close File", 'file')
12035     pkt.Request(14, [
12036             rec( 7, 1, Reserved ),
12037             rec( 8, 6, FileHandle ),
12038     ], info_str=(FileHandle, "Close File - 0x%s", ", %s"))
12039     pkt.Reply(8)
12040     pkt.CompletionCodes([0x0000, 0x8800, 0xff1a])
12041     # 2222/43, 67
12042     pkt = NCP(0x43, "Create File", 'file')
12043     pkt.Request((10, 264), [
12044             rec( 7, 1, DirHandle ),
12045             rec( 8, 1, AttributesDef ),
12046             rec( 9, (1,255), FileName ),
12047     ], info_str=(FileName, "Create File: %s", ", %s"))
12048     pkt.Reply(44, [
12049             rec( 8, 6, FileHandle ),
12050             rec( 14, 2, Reserved2 ),
12051             rec( 16, 14, FileName14 ),
12052             rec( 30, 1, AttributesDef ),
12053             rec( 31, 1, FileExecuteType ),
12054             rec( 32, 4, FileSize, BE ),
12055             rec( 36, 2, CreationDate, BE ),
12056             rec( 38, 2, LastAccessedDate, BE ),
12057             rec( 40, 2, ModifiedDate, BE ),
12058             rec( 42, 2, ModifiedTime, BE ),
12059     ])
12060     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12061                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12062                          0x9804, 0x9900, 0x9b03, 0x9c03, 0xfd00,
12063                          0xff00])
12064     # 2222/44, 68
12065     pkt = NCP(0x44, "Erase File", 'file')
12066     pkt.Request((10, 264), [
12067             rec( 7, 1, DirHandle ),
12068             rec( 8, 1, SearchAttributes ),
12069             rec( 9, (1,255), FileName ),
12070     ], info_str=(FileName, "Erase File: %s", ", %s"))
12071     pkt.Reply(8)
12072     pkt.CompletionCodes([0x0000, 0x8a00, 0x8d00, 0x8e00, 0x8f00,
12073                          0x9001, 0x9600, 0x9804, 0x9b03, 0x9c03,
12074                          0xa100, 0xfd00, 0xff00])
12075     # 2222/45, 69
12076     pkt = NCP(0x45, "Rename File", 'file')
12077     pkt.Request((12, 520), [
12078             rec( 7, 1, DirHandle ),
12079             rec( 8, 1, SearchAttributes ),
12080             rec( 9, (1,255), FileName ),
12081             rec( -1, 1, TargetDirHandle ),
12082             rec( -1, (1, 255), NewFileNameLen ),
12083     ], info_str=(FileName, "Rename File: %s", ", %s"))
12084     pkt.Reply(8)
12085     pkt.CompletionCodes([0x0000, 0x8701, 0x8b00, 0x8d00, 0x8e00,
12086                          0x8f00, 0x9001, 0x9101, 0x9201, 0x9600,
12087                          0x9804, 0x9a00, 0x9b03, 0x9c03, 0xa100,
12088                          0xfd00, 0xff16])
12089     # 2222/46, 70
12090     pkt = NCP(0x46, "Set File Attributes", 'file')
12091     pkt.Request((11, 265), [
12092             rec( 7, 1, AttributesDef ),
12093             rec( 8, 1, DirHandle ),
12094             rec( 9, 1, SearchAttributes ),
12095             rec( 10, (1,255), FileName ),
12096     ], info_str=(FileName, "Set File Attributes: %s", ", %s"))
12097     pkt.Reply(8)
12098     pkt.CompletionCodes([0x0000, 0x8c00, 0x8d00, 0x8e00, 0x9600,
12099                          0x9804, 0x9b03, 0x9c03, 0xa100, 0xfd00,
12100                          0xff16])
12101     # 2222/47, 71
12102     pkt = NCP(0x47, "Get Current Size of File", 'file')
12103     pkt.Request(14, [
12104     rec(7, 1, Reserved ),
12105             rec( 8, 6, FileHandle ),
12106     ], info_str=(FileHandle, "Get Current Size of File - 0x%s", ", %s"))
12107     pkt.Reply(12, [
12108             rec( 8, 4, FileSize, BE ),
12109     ])
12110     pkt.CompletionCodes([0x0000, 0x8800])
12111     # 2222/48, 72
12112     pkt = NCP(0x48, "Read From A File", 'file')
12113     pkt.Request(20, [
12114             rec( 7, 1, Reserved ),
12115             rec( 8, 6, FileHandle ),
12116             rec( 14, 4, FileOffset, BE ),
12117             rec( 18, 2, MaxBytes, BE ),
12118     ], info_str=(FileHandle, "Read From File - 0x%s", ", %s"))
12119     pkt.Reply(10, [
12120             rec( 8, 2, NumBytes, BE ),
12121     ])
12122     pkt.CompletionCodes([0x0000, 0x8300, 0x8800, 0x9300, 0xff1b])
12123     # 2222/49, 73
12124     pkt = NCP(0x49, "Write to a File", 'file')
12125     pkt.Request(20, [
12126             rec( 7, 1, Reserved ),
12127             rec( 8, 6, FileHandle ),
12128             rec( 14, 4, FileOffset, BE ),
12129             rec( 18, 2, MaxBytes, BE ),
12130     ], info_str=(FileHandle, "Write to a File - 0x%s", ", %s"))
12131     pkt.Reply(8)
12132     pkt.CompletionCodes([0x0000, 0x0104, 0x8300, 0x8800, 0x9400, 0x9500, 0xa201, 0xff1b])
12133     # 2222/4A, 74
12134     pkt = NCP(0x4A, "Copy from One File to Another", 'file')
12135     pkt.Request(30, [
12136             rec( 7, 1, Reserved ),
12137             rec( 8, 6, FileHandle ),
12138             rec( 14, 6, TargetFileHandle ),
12139             rec( 20, 4, FileOffset, BE ),
12140             rec( 24, 4, TargetFileOffset, BE ),
12141             rec( 28, 2, BytesToCopy, BE ),
12142     ])
12143     pkt.Reply(12, [
12144             rec( 8, 4, BytesActuallyTransferred, BE ),
12145     ])
12146     pkt.CompletionCodes([0x0000, 0x0104, 0x8300, 0x8800, 0x9300, 0x9400,
12147                          0x9500, 0x9600, 0xa201, 0xff1b])
12148     # 2222/4B, 75
12149     pkt = NCP(0x4B, "Set File Time Date Stamp", 'file')
12150     pkt.Request(18, [
12151             rec( 7, 1, Reserved ),
12152             rec( 8, 6, FileHandle ),
12153             rec( 14, 2, FileTime, BE ),
12154             rec( 16, 2, FileDate, BE ),
12155     ], info_str=(FileHandle, "Set Time and Date Stamp for File - 0x%s", ", %s"))
12156     pkt.Reply(8)
12157     pkt.CompletionCodes([0x0000, 0x8800, 0x9400, 0x9600, 0xfb08])
12158     # 2222/4C, 76
12159     pkt = NCP(0x4C, "Open File", 'file')
12160     pkt.Request((11, 265), [
12161             rec( 7, 1, DirHandle ),
12162             rec( 8, 1, SearchAttributes ),
12163             rec( 9, 1, AccessRightsMask ),
12164             rec( 10, (1,255), FileName ),
12165     ], info_str=(FileName, "Open File: %s", ", %s"))
12166     pkt.Reply(44, [
12167             rec( 8, 6, FileHandle ),
12168             rec( 14, 2, Reserved2 ),
12169             rec( 16, 14, FileName14 ),
12170             rec( 30, 1, AttributesDef ),
12171             rec( 31, 1, FileExecuteType ),
12172             rec( 32, 4, FileSize, BE ),
12173             rec( 36, 2, CreationDate, BE ),
12174             rec( 38, 2, LastAccessedDate, BE ),
12175             rec( 40, 2, ModifiedDate, BE ),
12176             rec( 42, 2, ModifiedTime, BE ),
12177     ])
12178     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8200, 0x9400,
12179                          0x9600, 0x9804, 0x9c03, 0xa100, 0xfd00,
12180                          0xff16])
12181     # 2222/4D, 77
12182     pkt = NCP(0x4D, "Create File", 'file')
12183     pkt.Request((10, 264), [
12184             rec( 7, 1, DirHandle ),
12185             rec( 8, 1, AttributesDef ),
12186             rec( 9, (1,255), FileName ),
12187     ], info_str=(FileName, "Create File: %s", ", %s"))
12188     pkt.Reply(44, [
12189             rec( 8, 6, FileHandle ),
12190             rec( 14, 2, Reserved2 ),
12191             rec( 16, 14, FileName14 ),
12192             rec( 30, 1, AttributesDef ),
12193             rec( 31, 1, FileExecuteType ),
12194             rec( 32, 4, FileSize, BE ),
12195             rec( 36, 2, CreationDate, BE ),
12196             rec( 38, 2, LastAccessedDate, BE ),
12197             rec( 40, 2, ModifiedDate, BE ),
12198             rec( 42, 2, ModifiedTime, BE ),
12199     ])
12200     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12201                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12202                          0x9804, 0x9900, 0x9b03, 0x9c03, 0xfd00,
12203                          0xff00])
12204     # 2222/4F, 79
12205     pkt = NCP(0x4F, "Set File Extended Attributes", 'file')
12206     pkt.Request((11, 265), [
12207             rec( 7, 1, AttributesDef ),
12208             rec( 8, 1, DirHandle ),
12209             rec( 9, 1, AccessRightsMask ),
12210             rec( 10, (1,255), FileName ),
12211     ], info_str=(FileName, "Set File Extended Attributes: %s", ", %s"))
12212     pkt.Reply(8)
12213     pkt.CompletionCodes([0x0000, 0x8c00, 0x8d00, 0x8e00, 0x9600,
12214                          0x9804, 0x9b03, 0x9c03, 0xa100, 0xfd00,
12215                          0xff16])
12216     # 2222/54, 84
12217     pkt = NCP(0x54, "Open/Create File", 'file')
12218     pkt.Request((12, 266), [
12219             rec( 7, 1, DirHandle ),
12220             rec( 8, 1, AttributesDef ),
12221             rec( 9, 1, AccessRightsMask ),
12222             rec( 10, 1, ActionFlag ),
12223             rec( 11, (1,255), FileName ),
12224     ], info_str=(FileName, "Open/Create File: %s", ", %s"))
12225     pkt.Reply(44, [
12226             rec( 8, 6, FileHandle ),
12227             rec( 14, 2, Reserved2 ),
12228             rec( 16, 14, FileName14 ),
12229             rec( 30, 1, AttributesDef ),
12230             rec( 31, 1, FileExecuteType ),
12231             rec( 32, 4, FileSize, BE ),
12232             rec( 36, 2, CreationDate, BE ),
12233             rec( 38, 2, LastAccessedDate, BE ),
12234             rec( 40, 2, ModifiedDate, BE ),
12235             rec( 42, 2, ModifiedTime, BE ),
12236     ])
12237     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12238                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12239                          0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
12240     # 2222/55, 85
12241     pkt = NCP(0x55, "Get Sparse File Data Block Bit Map", 'file')
12242     pkt.Request(17, [
12243             rec( 7, 6, FileHandle ),
12244             rec( 13, 4, FileOffset ),
12245     ], info_str=(FileHandle, "Get Sparse File Data Block Bitmap for File - 0x%s", ", %s"))
12246     pkt.Reply(528, [
12247             rec( 8, 4, AllocationBlockSize ),
12248             rec( 12, 4, Reserved4 ),
12249             rec( 16, 512, BitMap ),
12250     ])
12251     pkt.CompletionCodes([0x0000, 0x8800])
12252     # 2222/5601, 86/01
12253     pkt = NCP(0x5601, "Close Extended Attribute Handle", 'extended', has_length=0 )
12254     pkt.Request(14, [
12255             rec( 8, 2, Reserved2 ),
12256             rec( 10, 4, EAHandle ),
12257     ])
12258     pkt.Reply(8)
12259     pkt.CompletionCodes([0x0000, 0xcf00, 0xd301])
12260     # 2222/5602, 86/02
12261     pkt = NCP(0x5602, "Write Extended Attribute", 'extended', has_length=0 )
12262     pkt.Request((35,97), [
12263             rec( 8, 2, EAFlags ),
12264             rec( 10, 4, EAHandleOrNetWareHandleOrVolume, BE ),
12265             rec( 14, 4, ReservedOrDirectoryNumber ),
12266             rec( 18, 4, TtlWriteDataSize ),
12267             rec( 22, 4, FileOffset ),
12268             rec( 26, 4, EAAccessFlag ),
12269             rec( 30, 2, EAValueLength, var='x' ),
12270             rec( 32, (2,64), EAKey ),
12271             rec( -1, 1, EAValueRep, repeat='x' ),
12272     ], info_str=(EAKey, "Write Extended Attribute: %s", ", %s"))
12273     pkt.Reply(20, [
12274             rec( 8, 4, EAErrorCodes ),
12275             rec( 12, 4, EABytesWritten ),
12276             rec( 16, 4, NewEAHandle ),
12277     ])
12278     pkt.CompletionCodes([0x0000, 0xc800, 0xc900, 0xcb00, 0xce00, 0xcf00, 0xd101,
12279                          0xd203, 0xd301, 0xd402, 0xda02, 0xdc01, 0xef00, 0xff00])
12280     # 2222/5603, 86/03
12281     pkt = NCP(0x5603, "Read Extended Attribute", 'extended', has_length=0 )
12282     pkt.Request((28,538), [
12283             rec( 8, 2, EAFlags ),
12284             rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
12285             rec( 14, 4, ReservedOrDirectoryNumber ),
12286             rec( 18, 4, FileOffset ),
12287             rec( 22, 4, InspectSize ),
12288             rec( 26, (2,512), EAKey ),
12289     ], info_str=(EAKey, "Read Extended Attribute: %s", ", %s"))
12290     pkt.Reply((26,536), [
12291             rec( 8, 4, EAErrorCodes ),
12292             rec( 12, 4, TtlValuesLength ),
12293             rec( 16, 4, NewEAHandle ),
12294             rec( 20, 4, EAAccessFlag ),
12295             rec( 24, (2,512), EAValue ),
12296     ])
12297     pkt.CompletionCodes([0x0000, 0x8800, 0x9c03, 0xc900, 0xce00, 0xcf00, 0xd101,
12298                          0xd301, 0xd503])
12299     # 2222/5604, 86/04
12300     pkt = NCP(0x5604, "Enumerate Extended Attribute", 'extended', has_length=0 )
12301     pkt.Request((26,536), [
12302             rec( 8, 2, EAFlags ),
12303             rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
12304             rec( 14, 4, ReservedOrDirectoryNumber ),
12305             rec( 18, 4, InspectSize ),
12306             rec( 22, 2, SequenceNumber ),
12307             rec( 24, (2,512), EAKey ),
12308     ], info_str=(EAKey, "Enumerate Extended Attribute: %s", ", %s"))
12309     pkt.Reply(28, [
12310             rec( 8, 4, EAErrorCodes ),
12311             rec( 12, 4, TtlEAs ),
12312             rec( 16, 4, TtlEAsDataSize ),
12313             rec( 20, 4, TtlEAsKeySize ),
12314             rec( 24, 4, NewEAHandle ),
12315     ])
12316     pkt.CompletionCodes([0x0000, 0x8800, 0x8c01, 0xc800, 0xc900, 0xce00, 0xcf00, 0xd101,
12317                          0xd301, 0xd503, 0xfb08, 0xff00])
12318     # 2222/5605, 86/05
12319     pkt = NCP(0x5605, "Duplicate Extended Attributes", 'extended', has_length=0 )
12320     pkt.Request(28, [
12321             rec( 8, 2, EAFlags ),
12322             rec( 10, 2, DstEAFlags ),
12323             rec( 12, 4, EAHandleOrNetWareHandleOrVolume ),
12324             rec( 16, 4, ReservedOrDirectoryNumber ),
12325             rec( 20, 4, EAHandleOrNetWareHandleOrVolume ),
12326             rec( 24, 4, ReservedOrDirectoryNumber ),
12327     ])
12328     pkt.Reply(20, [
12329             rec( 8, 4, EADuplicateCount ),
12330             rec( 12, 4, EADataSizeDuplicated ),
12331             rec( 16, 4, EAKeySizeDuplicated ),
12332     ])
12333     pkt.CompletionCodes([0x0000, 0x8800, 0xd101])
12334     # 2222/5701, 87/01
12335     pkt = NCP(0x5701, "Open/Create File or Subdirectory", 'file', has_length=0)
12336     pkt.Request((30, 284), [
12337             rec( 8, 1, NameSpace  ),
12338             rec( 9, 1, OpenCreateMode ),
12339             rec( 10, 2, SearchAttributesLow ),
12340             rec( 12, 2, ReturnInfoMask ),
12341             rec( 14, 2, ExtendedInfo ),
12342             rec( 16, 4, AttributesDef32 ),
12343             rec( 20, 2, DesiredAccessRights ),
12344             rec( 22, 1, VolumeNumber ),
12345             rec( 23, 4, DirectoryBase ),
12346             rec( 27, 1, HandleFlag ),
12347             rec( 28, 1, PathCount, var="x" ),
12348             rec( 29, (1,255), Path, repeat="x" ),
12349     ], info_str=(Path, "Open or Create: %s", "/%s"))
12350     pkt.Reply( NO_LENGTH_CHECK, [
12351             rec( 8, 4, FileHandle ),
12352             rec( 12, 1, OpenCreateAction ),
12353             rec( 13, 1, Reserved ),
12354             srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12355             srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12356             srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12357             srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12358             srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12359             srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12360             srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12361             srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12362             srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12363             srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12364             srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12365             srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12366             srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12367             srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12368             srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12369             srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12370             srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12371             srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12372             srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12373             srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12374             srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12375             srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12376             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12377             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12378             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12379             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12380             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12381             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12382             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12383             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12384             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12385             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12386             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12387             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
12388             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12389             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
12390             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
12391             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
12392             srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
12393             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
12394             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
12395             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
12396             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
12397             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
12398             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12399             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
12400             srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12401     ])
12402     pkt.ReqCondSizeVariable()
12403     pkt.CompletionCodes([0x0000, 0x0102, 0x7f00, 0x8001, 0x8101, 0x8401, 0x8501,
12404                          0x8701, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9400, 0x9600,
12405                          0x9804, 0x9900, 0x9b03, 0x9c03, 0xa500, 0xa802, 0xa901, 0xbf00, 0xfd00, 0xff16])
12406     # 2222/5702, 87/02
12407     pkt = NCP(0x5702, "Initialize Search", 'file', has_length=0)
12408     pkt.Request( (18,272), [
12409             rec( 8, 1, NameSpace  ),
12410             rec( 9, 1, Reserved ),
12411             rec( 10, 1, VolumeNumber ),
12412             rec( 11, 4, DirectoryBase ),
12413             rec( 15, 1, HandleFlag ),
12414             rec( 16, 1, PathCount, var="x" ),
12415             rec( 17, (1,255), Path, repeat="x" ),
12416     ], info_str=(Path, "Set Search Pointer to: %s", "/%s"))
12417     pkt.Reply(17, [
12418             rec( 8, 1, VolumeNumber ),
12419             rec( 9, 4, DirectoryNumber ),
12420             rec( 13, 4, DirectoryEntryNumber ),
12421     ])
12422     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12423                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12424                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xbf00, 0xfd00, 0xff16])
12425     # 2222/5703, 87/03
12426     pkt = NCP(0x5703, "Search for File or Subdirectory", 'file', has_length=0)
12427     pkt.Request((26, 280), [
12428             rec( 8, 1, NameSpace  ),
12429             rec( 9, 1, DataStream ),
12430             rec( 10, 2, SearchAttributesLow ),
12431             rec( 12, 2, ReturnInfoMask ),
12432             rec( 14, 2, ExtendedInfo ),
12433             rec( 16, 9, SeachSequenceStruct ),
12434             rec( 25, (1,255), SearchPattern ),
12435     ], info_str=(SearchPattern, "Search for: %s", "/%s"))
12436     pkt.Reply( NO_LENGTH_CHECK, [
12437             rec( 8, 9, SeachSequenceStruct ),
12438             rec( 17, 1, Reserved ),
12439             srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12440             srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12441             srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12442             srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12443             srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12444             srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12445             srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12446             srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12447             srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12448             srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12449             srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12450             srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12451             srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12452             srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12453             srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12454             srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12455             srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12456             srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12457             srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12458             srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12459             srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12460             srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12461             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12462             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12463             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12464             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12465             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12466             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12467             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12468             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12469             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12470             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12471             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12472             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
12473             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12474             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
12475             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
12476             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
12477             srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
12478             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
12479             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
12480             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
12481             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
12482             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
12483             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12484             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
12485             srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12486     ])
12487     pkt.ReqCondSizeVariable()
12488     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12489                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12490                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xbf00, 0xfd00, 0xff16])
12491     # 2222/5704, 87/04
12492     pkt = NCP(0x5704, "Rename Or Move a File or Subdirectory", 'file', has_length=0)
12493     pkt.Request((28, 536), [
12494             rec( 8, 1, NameSpace  ),
12495             rec( 9, 1, RenameFlag ),
12496             rec( 10, 2, SearchAttributesLow ),
12497             rec( 12, 1, VolumeNumber ),
12498             rec( 13, 4, DirectoryBase ),
12499             rec( 17, 1, HandleFlag ),
12500             rec( 18, 1, PathCount, var="x" ),
12501             rec( 19, 1, VolumeNumber ),
12502             rec( 20, 4, DirectoryBase ),
12503             rec( 24, 1, HandleFlag ),
12504             rec( 25, 1, PathCount, var="y" ),
12505             rec( 26, (1, 255), Path, repeat="x" ),
12506             rec( -1, (1,255), DestPath, repeat="y" ),
12507     ], info_str=(Path, "Rename or Move: %s", "/%s"))
12508     pkt.Reply(8)
12509     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
12510                          0x8701, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9100, 0x9200, 0x9600,
12511                          0x9804, 0x9a00, 0x9b03, 0x9c03, 0x9e00, 0xa901, 0xbf00, 0xfd00, 0xff16])
12512     # 2222/5705, 87/05
12513     pkt = NCP(0x5705, "Scan File or Subdirectory for Trustees", 'file', has_length=0)
12514     pkt.Request((24, 278), [
12515             rec( 8, 1, NameSpace  ),
12516             rec( 9, 1, Reserved ),
12517             rec( 10, 2, SearchAttributesLow ),
12518             rec( 12, 4, SequenceNumber ),
12519             rec( 16, 1, VolumeNumber ),
12520             rec( 17, 4, DirectoryBase ),
12521             rec( 21, 1, HandleFlag ),
12522             rec( 22, 1, PathCount, var="x" ),
12523             rec( 23, (1, 255), Path, repeat="x" ),
12524     ], info_str=(Path, "Scan Trustees for: %s", "/%s"))
12525     pkt.Reply(20, [
12526             rec( 8, 4, SequenceNumber ),
12527             rec( 12, 2, ObjectIDCount, var="x" ),
12528             rec( 14, 6, TrusteeStruct, repeat="x" ),
12529     ])
12530     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12531                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12532                          0x9804, 0x9b03, 0x9c04, 0xa901, 0xbf00, 0xfd00, 0xff16])
12533     # 2222/5706, 87/06
12534     pkt = NCP(0x5706, "Obtain File or SubDirectory Information", 'file', has_length=0)
12535     pkt.Request((24,278), [
12536             rec( 10, 1, SrcNameSpace ),
12537             rec( 11, 1, DestNameSpace ),
12538             rec( 12, 2, SearchAttributesLow ),
12539             rec( 14, 2, ReturnInfoMask, LE ),
12540             rec( 16, 2, ExtendedInfo ),
12541             rec( 18, 1, VolumeNumber ),
12542             rec( 19, 4, DirectoryBase ),
12543             rec( 23, 1, HandleFlag ),
12544             rec( 24, 1, PathCount, var="x" ),
12545             rec( 25, (1,255), Path, repeat="x",),
12546     ], info_str=(Path, "Obtain Info for: %s", "/%s"))
12547     pkt.Reply(NO_LENGTH_CHECK, [
12548         srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12549         srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12550         srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12551         srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12552         srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12553         srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12554         srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12555         srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12556         srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12557         srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12558         srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12559         srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12560         srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12561         srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12562         srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12563         srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12564         srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12565         srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12566         srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12567         srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12568         srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12569         srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12570         srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12571         srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12572         srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12573         srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12574         srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12575         srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12576         srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12577         srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12578         srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12579         srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12580         srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12581         srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
12582         srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12583         srec( DataStreamsStruct, req_cond="ncp.ret_info_mask_actual == 1" ),
12584         srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1 && ncp.number_of_data_streams_long > 0" ),            # , repeat="x"
12585         srec( DataStreamsStruct, req_cond="ncp.ret_info_mask_logical == 1" ), # , var="y"
12586         srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1 && ncp.number_of_data_streams_long > 0" ),          # , repeat="y"
12587         srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
12588         srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
12589         srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
12590         srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
12591         srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
12592         srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
12593         srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
12594         srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12595         srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
12596                     srec( FileSize64bitStruct, req_cond="ncp.ext_info_64_bit_fs == 1" ),
12597         srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12598     ])
12599     pkt.ReqCondSizeVariable()
12600     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12601                          0x8700, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
12602                          0x9802, 0x9b03, 0x9c03, 0xa802, 0xa901, 0xbf00, 0xfd00, 0xff16])
12603     # 2222/5707, 87/07
12604     pkt = NCP(0x5707, "Modify File or Subdirectory DOS Information", 'file', has_length=0)
12605     pkt.Request((62,316), [
12606             rec( 8, 1, NameSpace ),
12607             rec( 9, 1, Reserved ),
12608             rec( 10, 2, SearchAttributesLow ),
12609             rec( 12, 2, ModifyDOSInfoMask ),
12610             rec( 14, 2, Reserved2 ),
12611             rec( 16, 2, AttributesDef16 ),
12612             rec( 18, 1, FileMode ),
12613             rec( 19, 1, FileExtendedAttributes ),
12614             rec( 20, 2, CreationDate ),
12615             rec( 22, 2, CreationTime ),
12616             rec( 24, 4, CreatorID, BE ),
12617             rec( 28, 2, ModifiedDate ),
12618             rec( 30, 2, ModifiedTime ),
12619             rec( 32, 4, ModifierID, BE ),
12620             rec( 36, 2, ArchivedDate ),
12621             rec( 38, 2, ArchivedTime ),
12622             rec( 40, 4, ArchiverID, BE ),
12623             rec( 44, 2, LastAccessedDate ),
12624             rec( 46, 2, InheritedRightsMask ),
12625             rec( 48, 2, InheritanceRevokeMask ),
12626             rec( 50, 4, MaxSpace ),
12627             rec( 54, 1, VolumeNumber ),
12628             rec( 55, 4, DirectoryBase ),
12629             rec( 59, 1, HandleFlag ),
12630             rec( 60, 1, PathCount, var="x" ),
12631             rec( 61, (1,255), Path, repeat="x" ),
12632     ], info_str=(Path, "Modify DOS Information for: %s", "/%s"))
12633     pkt.Reply(8)
12634     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
12635                          0x8701, 0x8c01, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
12636                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xbf00, 0xfd00, 0xff16])
12637     # 2222/5708, 87/08
12638     pkt = NCP(0x5708, "Delete a File or Subdirectory", 'file', has_length=0)
12639     pkt.Request((20,274), [
12640             rec( 8, 1, NameSpace ),
12641             rec( 9, 1, Reserved ),
12642             rec( 10, 2, SearchAttributesLow ),
12643             rec( 12, 1, VolumeNumber ),
12644             rec( 13, 4, DirectoryBase ),
12645             rec( 17, 1, HandleFlag ),
12646             rec( 18, 1, PathCount, var="x" ),
12647             rec( 19, (1,255), Path, repeat="x" ),
12648     ], info_str=(Path, "Delete a File or Subdirectory: %s", "/%s"))
12649     pkt.Reply(8)
12650     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12651                          0x8701, 0x8900, 0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
12652                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xbf00, 0xfd00, 0xff16])
12653     # 2222/5709, 87/09
12654     pkt = NCP(0x5709, "Set Short Directory Handle", 'file', has_length=0)
12655     pkt.Request((20,274), [
12656             rec( 8, 1, NameSpace ),
12657             rec( 9, 1, DataStream ),
12658             rec( 10, 1, DestDirHandle ),
12659             rec( 11, 1, Reserved ),
12660             rec( 12, 1, VolumeNumber ),
12661             rec( 13, 4, DirectoryBase ),
12662             rec( 17, 1, HandleFlag ),
12663             rec( 18, 1, PathCount, var="x" ),
12664             rec( 19, (1,255), Path, repeat="x" ),
12665     ], info_str=(Path, "Set Short Directory Handle to: %s", "/%s"))
12666     pkt.Reply(8)
12667     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12668                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12669                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xbf00, 0xfd00, 0xff16])
12670     # 2222/570A, 87/10
12671     pkt = NCP(0x570A, "Add Trustee Set to File or Subdirectory", 'file', has_length=0)
12672     pkt.Request((31,285), [
12673             rec( 8, 1, NameSpace ),
12674             rec( 9, 1, Reserved ),
12675             rec( 10, 2, SearchAttributesLow ),
12676             rec( 12, 2, AccessRightsMaskWord ),
12677             rec( 14, 2, ObjectIDCount, var="y" ),
12678             rec( 16, 1, VolumeNumber ),
12679             rec( 17, 4, DirectoryBase ),
12680             rec( 21, 1, HandleFlag ),
12681             rec( 22, 1, PathCount, var="x" ),
12682             rec( 23, (1,255), Path, repeat="x" ),
12683             rec( -1, 7, TrusteeStruct, repeat="y" ),
12684     ], info_str=(Path, "Add Trustee Set to: %s", "/%s"))
12685     pkt.Reply(8)
12686     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12687                          0x8701, 0x8c01, 0x8d00, 0x8f00, 0x9001, 0x9600,
12688                          0x9804, 0x9b03, 0x9c03, 0xa802, 0xa901, 0xbf00, 0xfc01, 0xfd00, 0xff16])
12689     # 2222/570B, 87/11
12690     pkt = NCP(0x570B, "Delete Trustee Set from File or SubDirectory", 'file', has_length=0)
12691     pkt.Request((27,281), [
12692             rec( 8, 1, NameSpace ),
12693             rec( 9, 1, Reserved ),
12694             rec( 10, 2, ObjectIDCount, var="y" ),
12695             rec( 12, 1, VolumeNumber ),
12696             rec( 13, 4, DirectoryBase ),
12697             rec( 17, 1, HandleFlag ),
12698             rec( 18, 1, PathCount, var="x" ),
12699             rec( 19, (1,255), Path, repeat="x" ),
12700             rec( -1, 7, TrusteeStruct, repeat="y" ),
12701     ], info_str=(Path, "Delete Trustee Set from: %s", "/%s"))
12702     pkt.Reply(8)
12703     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12704                          0x8701, 0x8c01, 0x8d00, 0x8f00, 0x9001, 0x9600,
12705                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12706     # 2222/570C, 87/12
12707     pkt = NCP(0x570C, "Allocate Short Directory Handle", 'file', has_length=0)
12708     pkt.Request((20,274), [
12709             rec( 8, 1, NameSpace ),
12710             rec( 9, 1, Reserved ),
12711             rec( 10, 2, AllocateMode ),
12712             rec( 12, 1, VolumeNumber ),
12713             rec( 13, 4, DirectoryBase ),
12714             rec( 17, 1, HandleFlag ),
12715             rec( 18, 1, PathCount, var="x" ),
12716             rec( 19, (1,255), Path, repeat="x" ),
12717     ], info_str=(Path, "Allocate Short Directory Handle to: %s", "/%s"))
12718     pkt.Reply(NO_LENGTH_CHECK, [
12719     srec( ReplyLevel2Struct, req_cond="ncp.alloc_reply_lvl2 == TRUE" ),
12720             srec( ReplyLevel1Struct, req_cond="ncp.alloc_reply_lvl2 == FALSE" ),
12721     ])
12722     pkt.ReqCondSizeVariable()
12723     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12724                          0x8701, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
12725                          0x9804, 0x9b03, 0x9c03, 0x9d00, 0xa901, 0xbf00, 0xfd00, 0xff16])
12726     # 2222/5710, 87/16
12727     pkt = NCP(0x5710, "Scan Salvageable Files", 'file', has_length=0)
12728     pkt.Request((26,280), [
12729             rec( 8, 1, NameSpace ),
12730             rec( 9, 1, DataStream ),
12731             rec( 10, 2, ReturnInfoMask ),
12732             rec( 12, 2, ExtendedInfo ),
12733             rec( 14, 4, SequenceNumber ),
12734             rec( 18, 1, VolumeNumber ),
12735             rec( 19, 4, DirectoryBase ),
12736             rec( 23, 1, HandleFlag ),
12737             rec( 24, 1, PathCount, var="x" ),
12738             rec( 25, (1,255), Path, repeat="x" ),
12739     ], info_str=(Path, "Scan for Deleted Files in: %s", "/%s"))
12740     pkt.Reply(NO_LENGTH_CHECK, [
12741             rec( 8, 4, SequenceNumber ),
12742             rec( 12, 2, DeletedTime ),
12743             rec( 14, 2, DeletedDate ),
12744             rec( 16, 4, DeletedID, BE ),
12745             rec( 20, 4, VolumeID ),
12746             rec( 24, 4, DirectoryBase ),
12747             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12748             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12749             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12750             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12751             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12752             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12753             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12754             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12755             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12756             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12757             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12758             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12759             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12760             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12761             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12762             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12763             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12764             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12765             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12766             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12767             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12768             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12769             srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12770             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12771             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12772             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12773             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12774             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12775             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12776             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12777             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12778             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12779             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12780             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12781             srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12782     ])
12783     pkt.ReqCondSizeVariable()
12784     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12785                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12786                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12787     # 2222/5711, 87/17
12788     pkt = NCP(0x5711, "Recover Salvageable File", 'file', has_length=0)
12789     pkt.Request((23,277), [
12790             rec( 8, 1, NameSpace ),
12791             rec( 9, 1, Reserved ),
12792             rec( 10, 4, SequenceNumber ),
12793             rec( 14, 4, VolumeID ),
12794             rec( 18, 4, DirectoryBase ),
12795             rec( 22, (1,255), FileName ),
12796     ], info_str=(FileName, "Recover Deleted File: %s", ", %s"))
12797     pkt.Reply(8)
12798     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12799                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12800                          0x9804, 0x9b03, 0x9c03, 0xa802, 0xbf00, 0xfe02, 0xfd00, 0xff16])
12801     # 2222/5712, 87/18
12802     pkt = NCP(0x5712, "Purge Salvageable Files", 'file', has_length=0)
12803     pkt.Request(22, [
12804             rec( 8, 1, NameSpace ),
12805             rec( 9, 1, Reserved ),
12806             rec( 10, 4, SequenceNumber ),
12807             rec( 14, 4, VolumeID ),
12808             rec( 18, 4, DirectoryBase ),
12809     ])
12810     pkt.Reply(8)
12811     pkt.CompletionCodes([0x0000, 0x010a, 0x8000, 0x8101, 0x8401, 0x8501,
12812                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12813                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12814     # 2222/5713, 87/19
12815     pkt = NCP(0x5713, "Get Name Space Information", 'file', has_length=0)
12816     pkt.Request(18, [
12817             rec( 8, 1, SrcNameSpace ),
12818             rec( 9, 1, DestNameSpace ),
12819             rec( 10, 1, Reserved ),
12820             rec( 11, 1, VolumeNumber ),
12821             rec( 12, 4, DirectoryBase ),
12822             rec( 16, 2, NamesSpaceInfoMask ),
12823     ])
12824     pkt.Reply(NO_LENGTH_CHECK, [
12825         srec( FileNameStruct, req_cond="ncp.ns_info_mask_modify == TRUE" ),
12826         srec( FileAttributesStruct, req_cond="ncp.ns_info_mask_fatt == TRUE" ),
12827         srec( CreationDateStruct, req_cond="ncp.ns_info_mask_cdate == TRUE" ),
12828         srec( CreationTimeStruct, req_cond="ncp.ns_info_mask_ctime == TRUE" ),
12829         srec( OwnerIDStruct, req_cond="ncp.ns_info_mask_owner == TRUE" ),
12830         srec( ArchiveDateStruct, req_cond="ncp.ns_info_mask_adate == TRUE" ),
12831         srec( ArchiveTimeStruct, req_cond="ncp.ns_info_mask_atime == TRUE" ),
12832         srec( ArchiveIdStruct, req_cond="ncp.ns_info_mask_aid == TRUE" ),
12833         srec( UpdateDateStruct, req_cond="ncp.ns_info_mask_udate == TRUE" ),
12834         srec( UpdateTimeStruct, req_cond="ncp.ns_info_mask_utime == TRUE" ),
12835         srec( UpdateIDStruct, req_cond="ncp.ns_info_mask_uid == TRUE" ),
12836         srec( LastAccessStruct, req_cond="ncp.ns_info_mask_acc_date == TRUE" ),
12837         srec( RightsInfoStruct, req_cond="ncp.ns_info_mask_max_acc_mask == TRUE" ),
12838     ])
12839     pkt.ReqCondSizeVariable()
12840     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12841                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12842                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12843     # 2222/5714, 87/20
12844     pkt = NCP(0x5714, "Search for File or Subdirectory Set", 'file', has_length=0)
12845     pkt.Request((28, 282), [
12846             rec( 8, 1, NameSpace  ),
12847             rec( 9, 1, DataStream ),
12848             rec( 10, 2, SearchAttributesLow ),
12849             rec( 12, 2, ReturnInfoMask ),
12850             rec( 14, 2, ExtendedInfo ),
12851             rec( 16, 2, ReturnInfoCount ),
12852             rec( 18, 9, SeachSequenceStruct ),
12853             rec( 27, (1,255), SearchPattern ),
12854     ])
12855 # The reply packet is dissected in packet-ncp2222.inc
12856     pkt.Reply(NO_LENGTH_CHECK, [
12857     ])
12858     pkt.ReqCondSizeVariable()
12859     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12860                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12861                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xbf00, 0xfd00, 0xff16])
12862     # 2222/5715, 87/21
12863     pkt = NCP(0x5715, "Get Path String from Short Directory Handle", 'file', has_length=0)
12864     pkt.Request(10, [
12865             rec( 8, 1, NameSpace ),
12866             rec( 9, 1, DirHandle ),
12867     ])
12868     pkt.Reply((9,263), [
12869             rec( 8, (1,255), Path ),
12870     ])
12871     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12872                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12873                          0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
12874     # 2222/5716, 87/22
12875     pkt = NCP(0x5716, "Generate Directory Base and Volume Number", 'file', has_length=0)
12876     pkt.Request((20,274), [
12877             rec( 8, 1, SrcNameSpace ),
12878             rec( 9, 1, DestNameSpace ),
12879             rec( 10, 2, dstNSIndicator ),
12880             rec( 12, 1, VolumeNumber ),
12881             rec( 13, 4, DirectoryBase ),
12882             rec( 17, 1, HandleFlag ),
12883             rec( 18, 1, PathCount, var="x" ),
12884             rec( 19, (1,255), Path, repeat="x" ),
12885     ], info_str=(Path, "Get Volume and Directory Base from: %s", "/%s"))
12886     pkt.Reply(17, [
12887             rec( 8, 4, DirectoryBase ),
12888             rec( 12, 4, DOSDirectoryBase ),
12889             rec( 16, 1, VolumeNumber ),
12890     ])
12891     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12892                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12893                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12894     # 2222/5717, 87/23
12895     pkt = NCP(0x5717, "Query Name Space Information Format", 'file', has_length=0)
12896     pkt.Request(10, [
12897             rec( 8, 1, NameSpace ),
12898             rec( 9, 1, VolumeNumber ),
12899     ])
12900     pkt.Reply(58, [
12901             rec( 8, 4, FixedBitMask ),
12902             rec( 12, 4, VariableBitMask ),
12903             rec( 16, 4, HugeBitMask ),
12904             rec( 20, 2, FixedBitsDefined ),
12905             rec( 22, 2, VariableBitsDefined ),
12906             rec( 24, 2, HugeBitsDefined ),
12907             rec( 26, 32, FieldsLenTable ),
12908     ])
12909     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12910                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12911                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12912     # 2222/5718, 87/24
12913     pkt = NCP(0x5718, "Get Name Spaces Loaded List from Volume Number", 'file', has_length=0)
12914     pkt.Request(11, [
12915             rec( 8, 2, Reserved2 ),
12916             rec( 10, 1, VolumeNumber ),
12917     ], info_str=(VolumeNumber, "Get Name Spaces Loaded List from Vol: %d", "/%d"))
12918     pkt.Reply(11, [
12919             rec( 8, 2, NumberOfNSLoaded, var="x" ),
12920             rec( 10, 1, NameSpace, repeat="x" ),
12921     ])
12922     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12923                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12924                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12925     # 2222/5719, 87/25
12926     pkt = NCP(0x5719, "Set Name Space Information", 'file', has_length=0)
12927     pkt.Request(531, [
12928             rec( 8, 1, SrcNameSpace ),
12929             rec( 9, 1, DestNameSpace ),
12930             rec( 10, 1, VolumeNumber ),
12931             rec( 11, 4, DirectoryBase ),
12932             rec( 15, 2, NamesSpaceInfoMask ),
12933             rec( 17, 2, Reserved2 ),
12934             rec( 19, 512, NSSpecificInfo ),
12935     ])
12936     pkt.Reply(8)
12937     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12938                          0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12939                          0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12940                          0xff16])
12941     # 2222/571A, 87/26
12942     pkt = NCP(0x571A, "Get Huge Name Space Information", 'file', has_length=0)
12943     pkt.Request(34, [
12944             rec( 8, 1, NameSpace ),
12945             rec( 9, 1, VolumeNumber ),
12946             rec( 10, 4, DirectoryBase ),
12947             rec( 14, 4, HugeBitMask ),
12948             rec( 18, 16, HugeStateInfo ),
12949     ])
12950     pkt.Reply((25,279), [
12951             rec( 8, 16, NextHugeStateInfo ),
12952             rec( 24, (1,255), HugeData ),
12953     ])
12954     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12955                          0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12956                          0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12957                          0xff16])
12958     # 2222/571B, 87/27
12959     pkt = NCP(0x571B, "Set Huge Name Space Information", 'file', has_length=0)
12960     pkt.Request((35,289), [
12961             rec( 8, 1, NameSpace ),
12962             rec( 9, 1, VolumeNumber ),
12963             rec( 10, 4, DirectoryBase ),
12964             rec( 14, 4, HugeBitMask ),
12965             rec( 18, 16, HugeStateInfo ),
12966             rec( 34, (1,255), HugeData ),
12967     ])
12968     pkt.Reply(28, [
12969             rec( 8, 16, NextHugeStateInfo ),
12970             rec( 24, 4, HugeDataUsed ),
12971     ])
12972     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12973                          0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12974                          0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12975                          0xff16])
12976     # 2222/571C, 87/28
12977     pkt = NCP(0x571C, "Get Full Path String", 'file', has_length=0)
12978     pkt.Request((28,282), [
12979             rec( 8, 1, SrcNameSpace ),
12980             rec( 9, 1, DestNameSpace ),
12981             rec( 10, 2, PathCookieFlags ),
12982             rec( 12, 4, Cookie1 ),
12983             rec( 16, 4, Cookie2 ),
12984             rec( 20, 1, VolumeNumber ),
12985             rec( 21, 4, DirectoryBase ),
12986             rec( 25, 1, HandleFlag ),
12987             rec( 26, 1, PathCount, var="x" ),
12988             rec( 27, (1,255), Path, repeat="x" ),
12989     ], info_str=(Path, "Get Full Path from: %s", "/%s"))
12990     pkt.Reply((23,277), [
12991             rec( 8, 2, PathCookieFlags ),
12992             rec( 10, 4, Cookie1 ),
12993             rec( 14, 4, Cookie2 ),
12994             rec( 18, 2, PathComponentSize ),
12995             rec( 20, 2, PathComponentCount, var='x' ),
12996             rec( 22, (1,255), Path, repeat='x' ),
12997     ])
12998     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12999                          0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
13000                          0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
13001                          0xff16])
13002     # 2222/571D, 87/29
13003     pkt = NCP(0x571D, "Get Effective Directory Rights", 'file', has_length=0)
13004     pkt.Request((24, 278), [
13005             rec( 8, 1, NameSpace  ),
13006             rec( 9, 1, DestNameSpace ),
13007             rec( 10, 2, SearchAttributesLow ),
13008             rec( 12, 2, ReturnInfoMask ),
13009             rec( 14, 2, ExtendedInfo ),
13010             rec( 16, 1, VolumeNumber ),
13011             rec( 17, 4, DirectoryBase ),
13012             rec( 21, 1, HandleFlag ),
13013             rec( 22, 1, PathCount, var="x" ),
13014             rec( 23, (1,255), Path, repeat="x" ),
13015     ], info_str=(Path, "Get Effective Rights for: %s", "/%s"))
13016     pkt.Reply(NO_LENGTH_CHECK, [
13017             rec( 8, 2, EffectiveRights ),
13018             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
13019             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
13020             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
13021             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
13022             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
13023             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
13024             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
13025             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
13026             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
13027             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
13028             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
13029             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
13030             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
13031             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
13032             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
13033             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
13034             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
13035             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
13036             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
13037             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
13038             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
13039             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
13040             srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
13041             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
13042             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
13043             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
13044             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
13045             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
13046             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
13047             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
13048             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
13049             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
13050             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
13051             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
13052             srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
13053     ])
13054     pkt.ReqCondSizeVariable()
13055     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13056                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13057                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13058     # 2222/571E, 87/30
13059     pkt = NCP(0x571E, "Open/Create File or Subdirectory", 'file', has_length=0)
13060     pkt.Request((34, 288), [
13061             rec( 8, 1, NameSpace  ),
13062             rec( 9, 1, DataStream ),
13063             rec( 10, 1, OpenCreateMode ),
13064             rec( 11, 1, Reserved ),
13065             rec( 12, 2, SearchAttributesLow ),
13066             rec( 14, 2, Reserved2 ),
13067             rec( 16, 2, ReturnInfoMask ),
13068             rec( 18, 2, ExtendedInfo ),
13069             rec( 20, 4, AttributesDef32 ),
13070             rec( 24, 2, DesiredAccessRights ),
13071             rec( 26, 1, VolumeNumber ),
13072             rec( 27, 4, DirectoryBase ),
13073             rec( 31, 1, HandleFlag ),
13074             rec( 32, 1, PathCount, var="x" ),
13075             rec( 33, (1,255), Path, repeat="x" ),
13076     ], info_str=(Path, "Open or Create File: %s", "/%s"))
13077     pkt.Reply(NO_LENGTH_CHECK, [
13078             rec( 8, 4, FileHandle, BE ),
13079             rec( 12, 1, OpenCreateAction ),
13080             rec( 13, 1, Reserved ),
13081             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
13082             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
13083             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
13084             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
13085             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
13086             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
13087             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
13088             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
13089             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
13090             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
13091             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
13092             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
13093             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
13094             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
13095             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
13096             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
13097             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
13098             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
13099             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
13100             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
13101             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
13102             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
13103             srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
13104             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
13105             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
13106             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
13107             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
13108             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
13109             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
13110             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
13111             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
13112             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
13113             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
13114             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
13115             srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
13116     ])
13117     pkt.ReqCondSizeVariable()
13118     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
13119                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13120                          0x9804, 0x9b03, 0x9c03, 0xbe00, 0xbf00, 0xfd00, 0xff16])
13121     # 2222/571F, 87/31
13122     pkt = NCP(0x571F, "Get File Information", 'file', has_length=0)
13123     pkt.Request(15, [
13124             rec( 8, 6, FileHandle  ),
13125             rec( 14, 1, HandleInfoLevel ),
13126     ], info_str=(FileHandle, "Get File Information - 0x%s", ", %s"))
13127     pkt.Reply(NO_LENGTH_CHECK, [
13128             rec( 8, 4, VolumeNumberLong ),
13129             rec( 12, 4, DirectoryBase ),
13130             srec(HandleInfoLevel0, req_cond="ncp.handle_info_level==0x00" ),
13131             srec(HandleInfoLevel1, req_cond="ncp.handle_info_level==0x01" ),
13132             srec(HandleInfoLevel2, req_cond="ncp.handle_info_level==0x02" ),
13133             srec(HandleInfoLevel3, req_cond="ncp.handle_info_level==0x03" ),
13134             srec(HandleInfoLevel4, req_cond="ncp.handle_info_level==0x04" ),
13135             srec(HandleInfoLevel5, req_cond="ncp.handle_info_level==0x05" ),
13136     ])
13137     pkt.ReqCondSizeVariable()
13138     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13139                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13140                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13141     # 2222/5720, 87/32
13142     pkt = NCP(0x5720, "Open/Create File or Subdirectory with Callback", 'file', has_length=0)
13143     pkt.Request((30, 284), [
13144             rec( 8, 1, NameSpace  ),
13145             rec( 9, 1, OpenCreateMode ),
13146             rec( 10, 2, SearchAttributesLow ),
13147             rec( 12, 2, ReturnInfoMask ),
13148             rec( 14, 2, ExtendedInfo ),
13149             rec( 16, 4, AttributesDef32 ),
13150             rec( 20, 2, DesiredAccessRights ),
13151             rec( 22, 1, VolumeNumber ),
13152             rec( 23, 4, DirectoryBase ),
13153             rec( 27, 1, HandleFlag ),
13154             rec( 28, 1, PathCount, var="x" ),
13155             rec( 29, (1,255), Path, repeat="x" ),
13156     ], info_str=(Path, "Open or Create with Op-Lock: %s", "/%s"))
13157     pkt.Reply( NO_LENGTH_CHECK, [
13158             rec( 8, 4, FileHandle, BE ),
13159             rec( 12, 1, OpenCreateAction ),
13160             rec( 13, 1, OCRetFlags ),
13161             srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
13162             srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
13163             srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
13164             srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
13165             srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
13166             srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
13167             srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
13168             srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
13169             srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
13170             srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
13171             srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
13172             srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
13173             srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
13174             srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
13175             srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
13176             srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
13177             srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
13178             srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
13179             srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
13180             srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
13181             srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
13182             srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
13183             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
13184             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
13185             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
13186             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
13187             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
13188             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
13189             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
13190             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
13191             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
13192             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
13193             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
13194             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
13195             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
13196             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
13197             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
13198             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
13199             srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
13200             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
13201             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
13202             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
13203             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
13204             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
13205             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
13206             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
13207             srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
13208     ])
13209     pkt.ReqCondSizeVariable()
13210     pkt.CompletionCodes([0x0000, 0x0102, 0x7f00, 0x8000, 0x8101, 0x8401, 0x8501,
13211                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13212                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13213     # 2222/5721, 87/33
13214     pkt = NCP(0x5721, "Open/Create File or Subdirectory II with Callback", 'file', has_length=0)
13215     pkt.Request((34, 288), [
13216             rec( 8, 1, NameSpace  ),
13217             rec( 9, 1, DataStream ),
13218             rec( 10, 1, OpenCreateMode ),
13219             rec( 11, 1, Reserved ),
13220             rec( 12, 2, SearchAttributesLow ),
13221             rec( 14, 2, Reserved2 ),
13222             rec( 16, 2, ReturnInfoMask ),
13223             rec( 18, 2, ExtendedInfo ),
13224             rec( 20, 4, AttributesDef32 ),
13225             rec( 24, 2, DesiredAccessRights ),
13226             rec( 26, 1, VolumeNumber ),
13227             rec( 27, 4, DirectoryBase ),
13228             rec( 31, 1, HandleFlag ),
13229             rec( 32, 1, PathCount, var="x" ),
13230             rec( 33, (1,255), Path, repeat="x" ),
13231     ], info_str=(FilePath, "Open or Create II with Op-Lock: %s", "/%s"))
13232     pkt.Reply(NO_LENGTH_CHECK, [
13233             rec( 8, 4, FileHandle ),
13234             rec( 12, 1, OpenCreateAction ),
13235             rec( 13, 1, OCRetFlags ),
13236     srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
13237     srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
13238     srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
13239     srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
13240     srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
13241     srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
13242     srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
13243     srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
13244     srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
13245     srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
13246     srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
13247     srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
13248     srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
13249     srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
13250     srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
13251     srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
13252     srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
13253     srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
13254     srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
13255     srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
13256     srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
13257     srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
13258     srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
13259     srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
13260     srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
13261     srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
13262     srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
13263     srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
13264     srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
13265     srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
13266     srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
13267     srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
13268     srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
13269     srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
13270     srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
13271     srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
13272     srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
13273     srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
13274     srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
13275     srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
13276     srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
13277     srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
13278     srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
13279     srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
13280     srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
13281     srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
13282     srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
13283     ])
13284     pkt.ReqCondSizeVariable()
13285     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
13286                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13287                          0x9804, 0x9b03, 0x9c03, 0xbe00, 0xbf00, 0xfd00, 0xff16])
13288     # 2222/5722, 87/34
13289     pkt = NCP(0x5722, "Open CallBack Control (Op-Lock)", 'file', has_length=0)
13290     pkt.Request(13, [
13291             rec( 10, 4, CCFileHandle, BE ),
13292             rec( 14, 1, CCFunction ),
13293     ])
13294     pkt.Reply(8)
13295     pkt.CompletionCodes([0x0000, 0x8000, 0x8800, 0xff16])
13296     # 2222/5723, 87/35
13297     pkt = NCP(0x5723, "Modify DOS Attributes on a File or Subdirectory", 'file', has_length=0)
13298     pkt.Request((28, 282), [
13299             rec( 8, 1, NameSpace  ),
13300             rec( 9, 1, Flags ),
13301             rec( 10, 2, SearchAttributesLow ),
13302             rec( 12, 2, ReturnInfoMask ),
13303             rec( 14, 2, ExtendedInfo ),
13304             rec( 16, 4, AttributesDef32 ),
13305             rec( 20, 1, VolumeNumber ),
13306             rec( 21, 4, DirectoryBase ),
13307             rec( 25, 1, HandleFlag ),
13308             rec( 26, 1, PathCount, var="x" ),
13309             rec( 27, (1,255), Path, repeat="x" ),
13310     ], info_str=(Path, "Modify DOS Attributes for: %s", "/%s"))
13311     pkt.Reply(24, [
13312             rec( 8, 4, ItemsChecked ),
13313             rec( 12, 4, ItemsChanged ),
13314             rec( 16, 4, AttributeValidFlag ),
13315             rec( 20, 4, AttributesDef32 ),
13316     ])
13317     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
13318                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13319                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13320     # 2222/5724, 87/36
13321     pkt = NCP(0x5724, "Log File", 'sync', has_length=0)
13322     pkt.Request((28, 282), [
13323             rec( 8, 1, NameSpace  ),
13324             rec( 9, 1, Reserved ),
13325             rec( 10, 2, Reserved2 ),
13326             rec( 12, 1, LogFileFlagLow ),
13327             rec( 13, 1, LogFileFlagHigh ),
13328             rec( 14, 2, Reserved2 ),
13329             rec( 16, 4, WaitTime ),
13330             rec( 20, 1, VolumeNumber ),
13331             rec( 21, 4, DirectoryBase ),
13332             rec( 25, 1, HandleFlag ),
13333             rec( 26, 1, PathCount, var="x" ),
13334             rec( 27, (1,255), Path, repeat="x" ),
13335     ], info_str=(Path, "Lock File: %s", "/%s"))
13336     pkt.Reply(8)
13337     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13338                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13339                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13340     # 2222/5725, 87/37
13341     pkt = NCP(0x5725, "Release File", 'sync', has_length=0)
13342     pkt.Request((20, 274), [
13343             rec( 8, 1, NameSpace  ),
13344             rec( 9, 1, Reserved ),
13345             rec( 10, 2, Reserved2 ),
13346             rec( 12, 1, VolumeNumber ),
13347             rec( 13, 4, DirectoryBase ),
13348             rec( 17, 1, HandleFlag ),
13349             rec( 18, 1, PathCount, var="x" ),
13350             rec( 19, (1,255), Path, repeat="x" ),
13351     ], info_str=(Path, "Release Lock on: %s", "/%s"))
13352     pkt.Reply(8)
13353     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13354                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13355                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13356     # 2222/5726, 87/38
13357     pkt = NCP(0x5726, "Clear File", 'sync', has_length=0)
13358     pkt.Request((20, 274), [
13359             rec( 8, 1, NameSpace  ),
13360             rec( 9, 1, Reserved ),
13361             rec( 10, 2, Reserved2 ),
13362             rec( 12, 1, VolumeNumber ),
13363             rec( 13, 4, DirectoryBase ),
13364             rec( 17, 1, HandleFlag ),
13365             rec( 18, 1, PathCount, var="x" ),
13366             rec( 19, (1,255), Path, repeat="x" ),
13367     ], info_str=(Path, "Clear File: %s", "/%s"))
13368     pkt.Reply(8)
13369     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13370                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13371                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13372     # 2222/5727, 87/39
13373     pkt = NCP(0x5727, "Get Directory Disk Space Restriction", 'file', has_length=0)
13374     pkt.Request((19, 273), [
13375             rec( 8, 1, NameSpace  ),
13376             rec( 9, 2, Reserved2 ),
13377             rec( 11, 1, VolumeNumber ),
13378             rec( 12, 4, DirectoryBase ),
13379             rec( 16, 1, HandleFlag ),
13380             rec( 17, 1, PathCount, var="x" ),
13381             rec( 18, (1,255), Path, repeat="x" ),
13382     ], info_str=(Path, "Get Disk Space Restriction for: %s", "/%s"))
13383     pkt.Reply(18, [
13384             rec( 8, 1, NumberOfEntries, var="x" ),
13385             rec( 9, 9, SpaceStruct, repeat="x" ),
13386     ])
13387     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13388                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13389                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
13390                          0xff16])
13391     # 2222/5728, 87/40
13392     pkt = NCP(0x5728, "Search for File or Subdirectory Set (Extended Errors)", 'file', has_length=0)
13393     pkt.Request((28, 282), [
13394             rec( 8, 1, NameSpace  ),
13395             rec( 9, 1, DataStream ),
13396             rec( 10, 2, SearchAttributesLow ),
13397             rec( 12, 2, ReturnInfoMask ),
13398             rec( 14, 2, ExtendedInfo ),
13399             rec( 16, 2, ReturnInfoCount ),
13400             rec( 18, 9, SeachSequenceStruct ),
13401             rec( 27, (1,255), SearchPattern ),
13402     ], info_str=(SearchPattern, "Search for: %s", ", %s"))
13403     pkt.Reply(NO_LENGTH_CHECK, [
13404             rec( 8, 9, SeachSequenceStruct ),
13405             rec( 17, 1, MoreFlag ),
13406             rec( 18, 2, InfoCount ),
13407             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
13408             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
13409             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
13410             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
13411             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
13412             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
13413             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
13414             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
13415             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
13416             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
13417             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
13418             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
13419             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
13420             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
13421             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
13422             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
13423             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
13424             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
13425             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
13426             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
13427             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
13428             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
13429             srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
13430             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
13431             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
13432             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
13433             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
13434             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
13435             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
13436             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
13437             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
13438             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
13439             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
13440             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
13441             srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
13442     ])
13443     pkt.ReqCondSizeVariable()
13444     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13445                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13446                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13447     # 2222/5729, 87/41
13448     pkt = NCP(0x5729, "Scan Salvageable Files", 'file', has_length=0)
13449     pkt.Request((24,278), [
13450             rec( 8, 1, NameSpace ),
13451             rec( 9, 1, Reserved ),
13452             rec( 10, 2, CtrlFlags, LE ),
13453             rec( 12, 4, SequenceNumber ),
13454             rec( 16, 1, VolumeNumber ),
13455             rec( 17, 4, DirectoryBase ),
13456             rec( 21, 1, HandleFlag ),
13457             rec( 22, 1, PathCount, var="x" ),
13458             rec( 23, (1,255), Path, repeat="x" ),
13459     ], info_str=(Path, "Scan Deleted Files: %s", "/%s"))
13460     pkt.Reply(NO_LENGTH_CHECK, [
13461             rec( 8, 4, SequenceNumber ),
13462             rec( 12, 4, DirectoryBase ),
13463             rec( 16, 4, ScanItems, var="x" ),
13464             srec(ScanInfoFileName, req_cond="ncp.ctrl_flags==0x0001", repeat="x" ),
13465             srec(ScanInfoFileNoName, req_cond="ncp.ctrl_flags==0x0000", repeat="x" ),
13466     ])
13467     pkt.ReqCondSizeVariable()
13468     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13469                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13470                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13471     # 2222/572A, 87/42
13472     pkt = NCP(0x572A, "Purge Salvageable File List", 'file', has_length=0)
13473     pkt.Request(28, [
13474             rec( 8, 1, NameSpace ),
13475             rec( 9, 1, Reserved ),
13476             rec( 10, 2, PurgeFlags ),
13477             rec( 12, 4, VolumeNumberLong ),
13478             rec( 16, 4, DirectoryBase ),
13479             rec( 20, 4, PurgeCount, var="x" ),
13480             rec( 24, 4, PurgeList, repeat="x" ),
13481     ])
13482     pkt.Reply(16, [
13483             rec( 8, 4, PurgeCount, var="x" ),
13484             rec( 12, 4, PurgeCcode, repeat="x" ),
13485     ])
13486     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13487                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13488                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13489     # 2222/572B, 87/43
13490     pkt = NCP(0x572B, "Revoke File Handle Rights", 'file', has_length=0)
13491     pkt.Request(17, [
13492             rec( 8, 3, Reserved3 ),
13493             rec( 11, 1, RevQueryFlag ),
13494             rec( 12, 4, FileHandle ),
13495             rec( 16, 1, RemoveOpenRights ),
13496     ])
13497     pkt.Reply(13, [
13498             rec( 8, 4, FileHandle ),
13499             rec( 12, 1, OpenRights ),
13500     ])
13501     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13502                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13503                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13504     # 2222/572C, 87/44
13505     pkt = NCP(0x572C, "Update File Handle Rights", 'file', has_length=0)
13506     pkt.Request(24, [
13507             rec( 8, 2, Reserved2 ),
13508             rec( 10, 1, VolumeNumber ),
13509             rec( 11, 1, NameSpace ),
13510             rec( 12, 4, DirectoryNumber ),
13511             rec( 16, 2, AccessRightsMaskWord ),
13512             rec( 18, 2, NewAccessRights ),
13513             rec( 20, 4, FileHandle, BE ),
13514     ])
13515     pkt.Reply(16, [
13516             rec( 8, 4, FileHandle, BE ),
13517             rec( 12, 4, EffectiveRights, LE ),
13518     ])
13519     pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13520                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13521                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
13522     # 2222/5740, 87/64
13523     pkt = NCP(0x5740, "Read from File", 'file', has_length=0)
13524     pkt.Request(22, [
13525     rec( 8, 4, FileHandle, BE ),
13526     rec( 12, 8, StartOffset64bit, BE ),
13527     rec( 20, 2, NumBytes, BE ),
13528 ])
13529     pkt.Reply(10, [
13530     rec( 8, 2, NumBytes, BE),
13531 ])
13532     pkt.CompletionCodes([0x0000, 0x8300, 0x8800, 0x9300, 0x9500, 0xa201, 0xfd00, 0xff1b])
13533     # 2222/5741, 87/65
13534     pkt = NCP(0x5741, "Write to File", 'file', has_length=0)
13535     pkt.Request(22, [
13536     rec( 8, 4, FileHandle, BE ),
13537     rec( 12, 8, StartOffset64bit, BE ),
13538     rec( 20, 2, NumBytes, BE ),
13539 ])
13540     pkt.Reply(8)
13541     pkt.CompletionCodes([0x0000, 0x0102, 0x8300, 0x8800, 0x9400, 0x9500, 0xa201, 0xfd00, 0xff1b])
13542     # 2222/5742, 87/66
13543     pkt = NCP(0x5742, "Get Current Size of File", 'file', has_length=0)
13544     pkt.Request(12, [
13545     rec( 8, 4, FileHandle, BE ),
13546 ])
13547     pkt.Reply(16, [
13548     rec( 8, 8, FileSize64bit),
13549 ])
13550     pkt.CompletionCodes([0x0000, 0x7f00, 0x8800, 0x9600, 0xfd02, 0xff01])
13551     # 2222/5743, 87/67
13552     pkt = NCP(0x5743, "Log Physical Record", 'file', has_length=0)
13553     pkt.Request(36, [
13554     rec( 8, 4, LockFlag, BE ),
13555     rec(12, 4, FileHandle, BE ),
13556     rec(16, 8, StartOffset64bit, BE ),
13557     rec(24, 8, Length64bit, BE ),
13558     rec(32, 4, LockTimeout, BE),
13559 ])
13560     pkt.Reply(8)
13561     pkt.CompletionCodes([0x0000, 0x7f00, 0x8800, 0x9600, 0xfb08, 0xfd02, 0xff01])
13562     # 2222/5744, 87/68
13563     pkt = NCP(0x5744, "Release Physical Record", 'file', has_length=0)
13564     pkt.Request(28, [
13565     rec(8, 4, FileHandle, BE ),
13566     rec(12, 8, StartOffset64bit, BE ),
13567     rec(20, 8, Length64bit, BE ),
13568 ])
13569     pkt.Reply(8)
13570     pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13571                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13572                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff1a])
13573     # 2222/5745, 87/69
13574     pkt = NCP(0x5745, "Clear Physical Record", 'file', has_length=0)
13575     pkt.Request(28, [
13576     rec(8, 4, FileHandle, BE ),
13577     rec(12, 8, StartOffset64bit, BE ),
13578     rec(20, 8, Length64bit, BE ),
13579 ])
13580     pkt.Reply(8)
13581     pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13582                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13583                          0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff1a])
13584     # 2222/5801, 8801
13585     pkt = NCP(0x5801, "Query Volume Audit Status", "auditing", has_length=0)
13586     pkt.Request(12, [
13587             rec( 8, 4, ConnectionNumber ),
13588     ])
13589     pkt.Reply(40, [
13590             rec(8, 32, NWAuditStatus ),
13591     ])
13592     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13593                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13594                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13595     # 2222/5802, 8802
13596     pkt = NCP(0x5802, "Add User Audit Property", "auditing", has_length=0)
13597     pkt.Request(25, [
13598             rec(8, 4, AuditIDType ),
13599             rec(12, 4, AuditID ),
13600             rec(16, 4, AuditHandle ),
13601             rec(20, 4, ObjectID ),
13602             rec(24, 1, AuditFlag ),
13603     ])
13604     pkt.Reply(8)
13605     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13606                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13607                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13608     # 2222/5803, 8803
13609     pkt = NCP(0x5803, "Add Auditor Access", "auditing", has_length=0)
13610     pkt.Request(8)
13611     pkt.Reply(8)
13612     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13613                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13614                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xde00, 0xfd00, 0xff16])
13615     # 2222/5804, 8804
13616     pkt = NCP(0x5804, "Change Auditor Volume Password", "auditing", has_length=0)
13617     pkt.Request(8)
13618     pkt.Reply(8)
13619     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13620                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13621                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13622     # 2222/5805, 8805
13623     pkt = NCP(0x5805, "Check Auditor Access", "auditing", has_length=0)
13624     pkt.Request(8)
13625     pkt.Reply(8)
13626     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13627                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13628                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13629     # 2222/5806, 8806
13630     pkt = NCP(0x5806, "Delete User Audit Property", "auditing", has_length=0)
13631     pkt.Request(8)
13632     pkt.Reply(8)
13633     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13634                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13635                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff21])
13636     # 2222/5807, 8807
13637     pkt = NCP(0x5807, "Disable Auditing On A Volume", "auditing", has_length=0)
13638     pkt.Request(8)
13639     pkt.Reply(8)
13640     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13641                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13642                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13643     # 2222/5808, 8808
13644     pkt = NCP(0x5808, "Enable Auditing On A Volume", "auditing", has_length=0)
13645     pkt.Request(8)
13646     pkt.Reply(8)
13647     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13648                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13649                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xde00, 0xfd00, 0xff16])
13650     # 2222/5809, 8809
13651     pkt = NCP(0x5809, "Query User Being Audited", "auditing", has_length=0)
13652     pkt.Request(8)
13653     pkt.Reply(8)
13654     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13655                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13656                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13657     # 2222/580A, 88,10
13658     pkt = NCP(0x580A, "Read Audit Bit Map", "auditing", has_length=0)
13659     pkt.Request(8)
13660     pkt.Reply(8)
13661     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13662                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13663                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13664     # 2222/580B, 88,11
13665     pkt = NCP(0x580B, "Read Audit File Configuration Header", "auditing", has_length=0)
13666     pkt.Request(8)
13667     pkt.Reply(8)
13668     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13669                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13670                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13671     # 2222/580D, 88,13
13672     pkt = NCP(0x580D, "Remove Auditor Access", "auditing", has_length=0)
13673     pkt.Request(8)
13674     pkt.Reply(8)
13675     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13676                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13677                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13678     # 2222/580E, 88,14
13679     pkt = NCP(0x580E, "Reset Audit File", "auditing", has_length=0)
13680     pkt.Request(8)
13681     pkt.Reply(8)
13682     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13683                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13684                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13685
13686     # 2222/580F, 88,15
13687     pkt = NCP(0x580F, "Auditing NCP", "auditing", has_length=0)
13688     pkt.Request(8)
13689     pkt.Reply(8)
13690     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13691                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13692                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfb00, 0xfd00, 0xff16])
13693     # 2222/5810, 88,16
13694     pkt = NCP(0x5810, "Write Audit Bit Map", "auditing", has_length=0)
13695     pkt.Request(8)
13696     pkt.Reply(8)
13697     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13698                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13699                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13700     # 2222/5811, 88,17
13701     pkt = NCP(0x5811, "Write Audit File Configuration Header", "auditing", has_length=0)
13702     pkt.Request(8)
13703     pkt.Reply(8)
13704     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13705                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13706                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13707     # 2222/5812, 88,18
13708     pkt = NCP(0x5812, "Change Auditor Volume Password2", "auditing", has_length=0)
13709     pkt.Request(8)
13710     pkt.Reply(8)
13711     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13712                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13713                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13714     # 2222/5813, 88,19
13715     pkt = NCP(0x5813, "Return Audit Flags", "auditing", has_length=0)
13716     pkt.Request(8)
13717     pkt.Reply(8)
13718     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13719                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13720                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13721     # 2222/5814, 88,20
13722     pkt = NCP(0x5814, "Close Old Audit File", "auditing", has_length=0)
13723     pkt.Request(8)
13724     pkt.Reply(8)
13725     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13726                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13727                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13728     # 2222/5816, 88,22
13729     pkt = NCP(0x5816, "Check Level Two Access", "auditing", has_length=0)
13730     pkt.Request(8)
13731     pkt.Reply(8)
13732     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13733                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13734                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xde00, 0xfd00, 0xff16])
13735     # 2222/5817, 88,23
13736     pkt = NCP(0x5817, "Return Old Audit File List", "auditing", has_length=0)
13737     pkt.Request(8)
13738     pkt.Reply(8)
13739     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13740                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13741                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13742     # 2222/5818, 88,24
13743     pkt = NCP(0x5818, "Init Audit File Reads", "auditing", has_length=0)
13744     pkt.Request(8)
13745     pkt.Reply(8)
13746     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13747                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13748                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13749     # 2222/5819, 88,25
13750     pkt = NCP(0x5819, "Read Auditing File", "auditing", has_length=0)
13751     pkt.Request(8)
13752     pkt.Reply(8)
13753     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13754                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13755                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13756     # 2222/581A, 88,26
13757     pkt = NCP(0x581A, "Delete Old Audit File", "auditing", has_length=0)
13758     pkt.Request(8)
13759     pkt.Reply(8)
13760     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13761                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13762                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13763     # 2222/581E, 88,30
13764     pkt = NCP(0x581E, "Restart Volume auditing", "auditing", has_length=0)
13765     pkt.Request(8)
13766     pkt.Reply(8)
13767     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13768                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13769                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13770     # 2222/581F, 88,31
13771     pkt = NCP(0x581F, "Set Volume Password", "auditing", has_length=0)
13772     pkt.Request(8)
13773     pkt.Reply(8)
13774     pkt.CompletionCodes([0x0000, 0x0106, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13775                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13776                          0x9804, 0x9b03, 0x9c03, 0xa600, 0xa700, 0xa801, 0xbe00, 0xfd00, 0xff16])
13777     # 2222/5901, 89,01
13778     pkt = NCP(0x5901, "Open/Create File or Subdirectory", "enhanced", has_length=0)
13779     pkt.Request((37,290), [
13780             rec( 8, 1, NameSpace  ),
13781             rec( 9, 1, OpenCreateMode ),
13782             rec( 10, 2, SearchAttributesLow ),
13783             rec( 12, 2, ReturnInfoMask ),
13784             rec( 14, 2, ExtendedInfo ),
13785             rec( 16, 4, AttributesDef32 ),
13786             rec( 20, 2, DesiredAccessRights ),
13787             rec( 22, 4, DirectoryBase ),
13788             rec( 26, 1, VolumeNumber ),
13789             rec( 27, 1, HandleFlag ),
13790             rec( 28, 1, DataTypeFlag ),
13791             rec( 29, 5, Reserved5 ),
13792             rec( 34, 1, PathCount, var="x" ),
13793             rec( 35, (2,255), Path16, repeat="x" ),
13794     ], info_str=(Path16, "Open or Create File or Subdirectory: %s", "/%s"))
13795     pkt.Reply( NO_LENGTH_CHECK, [
13796             rec( 8, 4, FileHandle, BE ),
13797             rec( 12, 1, OpenCreateAction ),
13798             rec( 13, 1, Reserved ),
13799                     srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
13800                     srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
13801                     srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
13802                     srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
13803                     srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
13804                     srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
13805                     srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
13806                     srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
13807                     srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
13808                     srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
13809                     srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
13810                     srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
13811                     srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
13812                     srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
13813                     srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
13814                     srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
13815                     srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
13816                     srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
13817                     srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
13818                     srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
13819                     srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
13820                     srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
13821                     srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
13822                     srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
13823                     srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
13824                     srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
13825                     srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
13826                     srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
13827                     srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
13828                     srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
13829                     srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
13830                     srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
13831                     srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
13832                     srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
13833                     srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
13834                     srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
13835                     srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
13836                     srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
13837                     srec( DOSName16Struct, req_cond="ncp.ext_info_dos_name == 1" ),
13838                     srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
13839                     srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
13840                     srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
13841                     srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
13842                     srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
13843                     srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
13844                     srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
13845                     srec( FileSize64bitStruct, req_cond="ncp.ext_info_64_bit_fs == 1" ),
13846                     srec( FileName16Struct, req_cond="ncp.ret_info_mask_fname == 1" ),
13847     ])
13848     pkt.ReqCondSizeVariable()
13849     pkt.CompletionCodes([0x0000, 0x0102, 0x7f00, 0x8000, 0x8101, 0x8401, 0x8501,
13850                                             0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13851                                             0x9804, 0x9900, 0x9b03, 0x9c03, 0xa901, 0xa500, 0xaa00, 0xbf00, 0xfd00, 0xff16])
13852     # 2222/5902, 89/02
13853     pkt = NCP(0x5902, "Initialize Search", 'enhanced', has_length=0)
13854     pkt.Request( (25,278), [
13855             rec( 8, 1, NameSpace  ),
13856             rec( 9, 1, Reserved ),
13857             rec( 10, 4, DirectoryBase ),
13858             rec( 14, 1, VolumeNumber ),
13859             rec( 15, 1, HandleFlag ),
13860     rec( 16, 1, DataTypeFlag ),
13861     rec( 17, 5, Reserved5 ),
13862             rec( 22, 1, PathCount, var="x" ),
13863             rec( 23, (2,255), Path16, repeat="x" ),
13864     ], info_str=(Path16, "Set Search Pointer to: %s", "/%s"))
13865     pkt.Reply(17, [
13866             rec( 8, 1, VolumeNumber ),
13867             rec( 9, 4, DirectoryNumber ),
13868             rec( 13, 4, DirectoryEntryNumber ),
13869     ])
13870     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13871                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13872                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
13873     # 2222/5903, 89/03
13874     pkt = NCP(0x5903, "Search for File or Subdirectory", 'enhanced', has_length=0)
13875     pkt.Request((28, 281), [
13876             rec( 8, 1, NameSpace  ),
13877             rec( 9, 1, DataStream ),
13878             rec( 10, 2, SearchAttributesLow ),
13879             rec( 12, 2, ReturnInfoMask ),
13880             rec( 14, 2, ExtendedInfo ),
13881             rec( 16, 9, SeachSequenceStruct ),
13882     rec( 25, 1, DataTypeFlag ),
13883             rec( 26, (2,255), SearchPattern16 ),
13884     ], info_str=(SearchPattern16, "Search for: %s", "/%s"))
13885     pkt.Reply( NO_LENGTH_CHECK, [
13886             rec( 8, 9, SeachSequenceStruct ),
13887             rec( 17, 1, Reserved ),
13888             srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
13889             srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
13890             srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
13891             srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
13892             srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
13893             srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
13894             srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
13895             srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
13896             srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
13897             srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
13898             srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
13899             srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
13900             srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
13901             srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
13902             srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
13903             srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
13904             srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
13905             srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
13906             srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
13907             srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
13908             srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
13909             srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
13910             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
13911             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
13912             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
13913             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
13914             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
13915             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
13916             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
13917             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
13918             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
13919             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
13920             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
13921             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
13922             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
13923             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
13924             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
13925             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
13926             srec( DOSName16Struct, req_cond="ncp.ext_info_dos_name == 1" ),
13927             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
13928             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
13929             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
13930             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
13931             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
13932             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
13933             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
13934             srec( FileSize64bitStruct, req_cond="ncp.ext_info_64_bit_fs == 1" ),
13935             srec( FileName16Struct, req_cond="ncp.ret_info_mask_fname == 1" ),
13936     ])
13937     pkt.ReqCondSizeVariable()
13938     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13939                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13940                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
13941     # 2222/5904, 89/04
13942     pkt = NCP(0x5904, "Rename Or Move a File or Subdirectory", 'enhanced', has_length=0)
13943     pkt.Request((42, 548), [
13944             rec( 8, 1, NameSpace  ),
13945             rec( 9, 1, RenameFlag ),
13946             rec( 10, 2, SearchAttributesLow ),
13947     rec( 12, 12, SrcEnhNWHandlePathS1 ),
13948             rec( 24, 1, PathCount, var="x" ),
13949             rec( 25, 12, DstEnhNWHandlePathS1 ),
13950             rec( 37, 1, PathCount, var="y" ),
13951             rec( 38, (2, 255), Path16, repeat="x" ),
13952             rec( -1, (2,255), DestPath16, repeat="y" ),
13953     ], info_str=(Path16, "Rename or Move: %s", "/%s"))
13954     pkt.Reply(8)
13955     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
13956                          0x8701, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9200, 0x9600,
13957                          0x9804, 0x9a00, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
13958     # 2222/5905, 89/05
13959     pkt = NCP(0x5905, "Scan File or Subdirectory for Trustees", 'enhanced', has_length=0)
13960     pkt.Request((31, 284), [
13961             rec( 8, 1, NameSpace  ),
13962             rec( 9, 1, MaxReplyObjectIDCount ),
13963             rec( 10, 2, SearchAttributesLow ),
13964             rec( 12, 4, SequenceNumber ),
13965             rec( 16, 4, DirectoryBase ),
13966             rec( 20, 1, VolumeNumber ),
13967             rec( 21, 1, HandleFlag ),
13968     rec( 22, 1, DataTypeFlag ),
13969     rec( 23, 5, Reserved5 ),
13970             rec( 28, 1, PathCount, var="x" ),
13971             rec( 29, (2, 255), Path16, repeat="x" ),
13972     ], info_str=(Path16, "Scan Trustees for: %s", "/%s"))
13973     pkt.Reply(20, [
13974             rec( 8, 4, SequenceNumber ),
13975             rec( 12, 2, ObjectIDCount, var="x" ),
13976             rec( 14, 6, TrusteeStruct, repeat="x" ),
13977     ])
13978     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
13979                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
13980                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
13981     # 2222/5906, 89/06
13982     pkt = NCP(0x5906, "Obtain File or SubDirectory Information", 'enhanced', has_length=0)
13983     pkt.Request((22), [
13984             rec( 8, 1, SrcNameSpace ),
13985             rec( 9, 1, DestNameSpace ),
13986             rec( 10, 2, SearchAttributesLow ),
13987             rec( 12, 2, ReturnInfoMask, LE ),
13988             rec( 14, 2, ExtendedInfo ),
13989             rec( 16, 4, DirectoryBase ),
13990             rec( 20, 1, VolumeNumber ),
13991             rec( 21, 1, HandleFlag ),
13992     #
13993     # Move to packet-ncp2222.inc
13994     # The datatype flag indicates if the path is represented as ASCII or UTF8
13995     # ASCII has a 1 byte count field whereas UTF8 has a two byte count field.
13996     #
13997     #rec( 22, 1, DataTypeFlag ),
13998     #rec( 23, 5, Reserved5 ),
13999             #rec( 28, 1, PathCount, var="x" ),
14000             #rec( 29, (2,255), Path16, repeat="x",),
14001     ], info_str=(Path16, "Obtain Info for: %s", "/%s"))
14002     pkt.Reply(NO_LENGTH_CHECK, [
14003         srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
14004         srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
14005         srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
14006         srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
14007         srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
14008         srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
14009         srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
14010         srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
14011         srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
14012         srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
14013         srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
14014         srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
14015         srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
14016         srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
14017         srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
14018         srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
14019         srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
14020         srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
14021         srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
14022         srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
14023         srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
14024         srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
14025         srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
14026         srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
14027         srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
14028         srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
14029         srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
14030         srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
14031         srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
14032         srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
14033         srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
14034         srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
14035         srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
14036         srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
14037         srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
14038         srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
14039         srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
14040         srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
14041         srec( DOSName16Struct, req_cond="ncp.ext_info_dos_name == 1" ),
14042         srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
14043         srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
14044         srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
14045         srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
14046         srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
14047         srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
14048         srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
14049         srec( FileSize64bitStruct, req_cond="ncp.ext_info_64_bit_fs == 1" ),
14050         srec( FileName16Struct, req_cond="ncp.ret_info_mask_fname == 1" ),
14051     ])
14052     pkt.ReqCondSizeVariable()
14053     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14054                          0x8700, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
14055                          0x9804, 0x9b03, 0x9c03, 0xa802, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14056     # 2222/5907, 89/07
14057     pkt = NCP(0x5907, "Modify File or Subdirectory DOS Information", 'enhanced', has_length=0)
14058     pkt.Request((69,322), [
14059             rec( 8, 1, NameSpace ),
14060             rec( 9, 1, Reserved ),
14061             rec( 10, 2, SearchAttributesLow ),
14062             rec( 12, 2, ModifyDOSInfoMask ),
14063             rec( 14, 2, Reserved2 ),
14064             rec( 16, 2, AttributesDef16 ),
14065             rec( 18, 1, FileMode ),
14066             rec( 19, 1, FileExtendedAttributes ),
14067             rec( 20, 2, CreationDate ),
14068             rec( 22, 2, CreationTime ),
14069             rec( 24, 4, CreatorID, BE ),
14070             rec( 28, 2, ModifiedDate ),
14071             rec( 30, 2, ModifiedTime ),
14072             rec( 32, 4, ModifierID, BE ),
14073             rec( 36, 2, ArchivedDate ),
14074             rec( 38, 2, ArchivedTime ),
14075             rec( 40, 4, ArchiverID, BE ),
14076             rec( 44, 2, LastAccessedDate ),
14077             rec( 46, 2, InheritedRightsMask ),
14078             rec( 48, 2, InheritanceRevokeMask ),
14079             rec( 50, 4, MaxSpace ),
14080             rec( 54, 4, DirectoryBase ),
14081             rec( 58, 1, VolumeNumber ),
14082             rec( 59, 1, HandleFlag ),
14083     rec( 60, 1, DataTypeFlag ),
14084     rec( 61, 5, Reserved5 ),
14085             rec( 66, 1, PathCount, var="x" ),
14086             rec( 67, (2,255), Path16, repeat="x" ),
14087     ], info_str=(Path16, "Modify DOS Information for: %s", "/%s"))
14088     pkt.Reply(8)
14089     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
14090                          0x8701, 0x8c01, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
14091                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14092     # 2222/5908, 89/08
14093     pkt = NCP(0x5908, "Delete a File or Subdirectory", 'enhanced', has_length=0)
14094     pkt.Request((27,280), [
14095             rec( 8, 1, NameSpace ),
14096             rec( 9, 1, Reserved ),
14097             rec( 10, 2, SearchAttributesLow ),
14098             rec( 12, 4, DirectoryBase ),
14099             rec( 16, 1, VolumeNumber ),
14100             rec( 17, 1, HandleFlag ),
14101     rec( 18, 1, DataTypeFlag ),
14102     rec( 19, 5, Reserved5 ),
14103             rec( 24, 1, PathCount, var="x" ),
14104             rec( 25, (2,255), Path16, repeat="x" ),
14105     ], info_str=(Path16, "Delete a File or Subdirectory: %s", "/%s"))
14106     pkt.Reply(8)
14107     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14108                          0x8701, 0x8900, 0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
14109                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14110     # 2222/5909, 89/09
14111     pkt = NCP(0x5909, "Set Short Directory Handle", 'enhanced', has_length=0)
14112     pkt.Request((27,280), [
14113             rec( 8, 1, NameSpace ),
14114             rec( 9, 1, DataStream ),
14115             rec( 10, 1, DestDirHandle ),
14116             rec( 11, 1, Reserved ),
14117             rec( 12, 4, DirectoryBase ),
14118             rec( 16, 1, VolumeNumber ),
14119             rec( 17, 1, HandleFlag ),
14120     rec( 18, 1, DataTypeFlag ),
14121     rec( 19, 5, Reserved5 ),
14122             rec( 24, 1, PathCount, var="x" ),
14123             rec( 25, (2,255), Path16, repeat="x" ),
14124     ], info_str=(Path16, "Set Short Directory Handle to: %s", "/%s"))
14125     pkt.Reply(8)
14126     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14127                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14128                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14129     # 2222/590A, 89/10
14130     pkt = NCP(0x590A, "Add Trustee Set to File or Subdirectory", 'enhanced', has_length=0)
14131     pkt.Request((37,290), [
14132             rec( 8, 1, NameSpace ),
14133             rec( 9, 1, Reserved ),
14134             rec( 10, 2, SearchAttributesLow ),
14135             rec( 12, 2, AccessRightsMaskWord ),
14136             rec( 14, 2, ObjectIDCount, var="y" ),
14137             rec( -1, 6, TrusteeStruct, repeat="y" ),
14138             rec( -1, 4, DirectoryBase ),
14139             rec( -1, 1, VolumeNumber ),
14140             rec( -1, 1, HandleFlag ),
14141     rec( -1, 1, DataTypeFlag ),
14142     rec( -1, 5, Reserved5 ),
14143             rec( -1, 1, PathCount, var="x" ),
14144             rec( -1, (2,255), Path16, repeat="x" ),
14145     ], info_str=(Path16, "Add Trustee Set to: %s", "/%s"))
14146     pkt.Reply(8)
14147     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
14148                          0x8701, 0x8c01, 0x8d00, 0x8f00, 0x9001, 0x9600,
14149                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfc01, 0xfd00, 0xff16])
14150     # 2222/590B, 89/11
14151     pkt = NCP(0x590B, "Delete Trustee Set from File or SubDirectory", 'enhanced', has_length=0)
14152     pkt.Request((34,287), [
14153             rec( 8, 1, NameSpace ),
14154             rec( 9, 1, Reserved ),
14155             rec( 10, 2, ObjectIDCount, var="y" ),
14156             rec( 12, 7, TrusteeStruct, repeat="y" ),
14157             rec( 19, 4, DirectoryBase ),
14158             rec( 23, 1, VolumeNumber ),
14159             rec( 24, 1, HandleFlag ),
14160     rec( 25, 1, DataTypeFlag ),
14161     rec( 26, 5, Reserved5 ),
14162             rec( 31, 1, PathCount, var="x" ),
14163             rec( 32, (2,255), Path16, repeat="x" ),
14164     ], info_str=(Path16, "Delete Trustee Set from: %s", "/%s"))
14165     pkt.Reply(8)
14166     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14167                          0x8701, 0x8c01, 0x8d00, 0x8f00, 0x9001, 0x9600,
14168                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14169     # 2222/590C, 89/12
14170     pkt = NCP(0x590C, "Allocate Short Directory Handle", 'enhanced', has_length=0)
14171     pkt.Request((27,280), [
14172             rec( 8, 1, NameSpace ),
14173             rec( 9, 1, DestNameSpace ),
14174             rec( 10, 2, AllocateMode ),
14175             rec( 12, 4, DirectoryBase ),
14176             rec( 16, 1, VolumeNumber ),
14177             rec( 17, 1, HandleFlag ),
14178     rec( 18, 1, DataTypeFlag ),
14179     rec( 19, 5, Reserved5 ),
14180             rec( 24, 1, PathCount, var="x" ),
14181             rec( 25, (2,255), Path16, repeat="x" ),
14182     ], info_str=(Path16, "Allocate Short Directory Handle to: %s", "/%s"))
14183     pkt.Reply(NO_LENGTH_CHECK, [
14184     srec( ReplyLevel2Struct, req_cond="ncp.alloc_reply_lvl2 == TRUE" ),
14185             srec( ReplyLevel1Struct, req_cond="ncp.alloc_reply_lvl2 == FALSE" ),
14186     ])
14187     pkt.ReqCondSizeVariable()
14188     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14189                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14190                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14191 # 2222/5910, 89/16
14192     pkt = NCP(0x5910, "Scan Salvageable Files", 'enhanced', has_length=0)
14193     pkt.Request((33,286), [
14194             rec( 8, 1, NameSpace ),
14195             rec( 9, 1, DataStream ),
14196             rec( 10, 2, ReturnInfoMask ),
14197             rec( 12, 2, ExtendedInfo ),
14198             rec( 14, 4, SequenceNumber ),
14199             rec( 18, 4, DirectoryBase ),
14200             rec( 22, 1, VolumeNumber ),
14201             rec( 23, 1, HandleFlag ),
14202     rec( 24, 1, DataTypeFlag ),
14203     rec( 25, 5, Reserved5 ),
14204             rec( 30, 1, PathCount, var="x" ),
14205             rec( 31, (2,255), Path16, repeat="x" ),
14206     ], info_str=(Path16, "Scan for Deleted Files in: %s", "/%s"))
14207     pkt.Reply(NO_LENGTH_CHECK, [
14208             rec( 8, 4, SequenceNumber ),
14209             rec( 12, 2, DeletedTime ),
14210             rec( 14, 2, DeletedDate ),
14211             rec( 16, 4, DeletedID, BE ),
14212             rec( 20, 4, VolumeID ),
14213             rec( 24, 4, DirectoryBase ),
14214             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
14215             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
14216             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
14217             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
14218             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
14219             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
14220             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
14221             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
14222             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
14223             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
14224             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
14225             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
14226             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
14227             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
14228             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
14229             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
14230             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
14231             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
14232             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
14233             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
14234             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
14235             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
14236             srec( FileName16Struct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
14237             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
14238             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
14239             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
14240             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
14241             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
14242             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
14243             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
14244             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
14245             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
14246             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
14247             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
14248             srec( FileSize64bitStruct, req_cond="ncp.ext_info_64_bit_fs == 1" ),
14249             srec( FileName16Struct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
14250     ])
14251     pkt.ReqCondSizeVariable()
14252     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14253                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14254                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14255     # 2222/5911, 89/17
14256     pkt = NCP(0x5911, "Recover Salvageable File", 'enhanced', has_length=0)
14257     pkt.Request((24,278), [
14258             rec( 8, 1, NameSpace ),
14259             rec( 9, 1, Reserved ),
14260             rec( 10, 4, SequenceNumber ),
14261             rec( 14, 4, VolumeID ),
14262             rec( 18, 4, DirectoryBase ),
14263     rec( 22, 1, DataTypeFlag ),
14264             rec( 23, (1,255), FileName ),
14265     ], info_str=(FileName, "Recover Deleted File: %s", ", %s"))
14266     pkt.Reply(8)
14267     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
14268                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14269                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14270     # 2222/5913, 89/19
14271     pkt = NCP(0x5913, "Get Name Space Information", 'enhanced', has_length=0)
14272     pkt.Request(18, [
14273             rec( 8, 1, SrcNameSpace ),
14274             rec( 9, 1, DestNameSpace ),
14275             rec( 10, 1, DataTypeFlag ),
14276             rec( 11, 1, VolumeNumber ),
14277             rec( 12, 4, DirectoryBase ),
14278             rec( 16, 2, NamesSpaceInfoMask ),
14279     ])
14280     pkt.Reply(NO_LENGTH_CHECK, [
14281         srec( FileName16Struct, req_cond="ncp.ns_info_mask_modify == TRUE" ),
14282         srec( FileAttributesStruct, req_cond="ncp.ns_info_mask_fatt == TRUE" ),
14283         srec( CreationDateStruct, req_cond="ncp.ns_info_mask_cdate == TRUE" ),
14284         srec( CreationTimeStruct, req_cond="ncp.ns_info_mask_ctime == TRUE" ),
14285         srec( OwnerIDStruct, req_cond="ncp.ns_info_mask_owner == TRUE" ),
14286         srec( ArchiveDateStruct, req_cond="ncp.ns_info_mask_adate == TRUE" ),
14287         srec( ArchiveTimeStruct, req_cond="ncp.ns_info_mask_atime == TRUE" ),
14288         srec( ArchiveIdStruct, req_cond="ncp.ns_info_mask_aid == TRUE" ),
14289         srec( UpdateDateStruct, req_cond="ncp.ns_info_mask_udate == TRUE" ),
14290         srec( UpdateTimeStruct, req_cond="ncp.ns_info_mask_utime == TRUE" ),
14291         srec( UpdateIDStruct, req_cond="ncp.ns_info_mask_uid == TRUE" ),
14292         srec( LastAccessStruct, req_cond="ncp.ns_info_mask_acc_date == TRUE" ),
14293         srec( RightsInfoStruct, req_cond="ncp.ns_info_mask_max_acc_mask == TRUE" ),
14294     ])
14295     pkt.ReqCondSizeVariable()
14296     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14297                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14298                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14299     # 2222/5914, 89/20
14300     pkt = NCP(0x5914, "Search for File or Subdirectory Set", 'enhanced', has_length=0)
14301     pkt.Request((30, 283), [
14302             rec( 8, 1, NameSpace  ),
14303             rec( 9, 1, DataStream ),
14304             rec( 10, 2, SearchAttributesLow ),
14305             rec( 12, 2, ReturnInfoMask ),
14306             rec( 14, 2, ExtendedInfo ),
14307             rec( 16, 2, ReturnInfoCount ),
14308             rec( 18, 9, SeachSequenceStruct ),
14309     rec( 27, 1, DataTypeFlag ),
14310             rec( 28, (2,255), SearchPattern16 ),
14311     ])
14312 # The reply packet is dissected in packet-ncp2222.inc
14313     pkt.Reply(NO_LENGTH_CHECK, [
14314     ])
14315     pkt.ReqCondSizeVariable()
14316     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14317                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14318                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14319     # 2222/5916, 89/22
14320     pkt = NCP(0x5916, "Generate Directory Base and Volume Number", 'enhanced', has_length=0)
14321     pkt.Request((27,280), [
14322             rec( 8, 1, SrcNameSpace ),
14323             rec( 9, 1, DestNameSpace ),
14324             rec( 10, 2, dstNSIndicator ),
14325             rec( 12, 4, DirectoryBase ),
14326             rec( 16, 1, VolumeNumber ),
14327             rec( 17, 1, HandleFlag ),
14328     rec( 18, 1, DataTypeFlag ),
14329     rec( 19, 5, Reserved5 ),
14330             rec( 24, 1, PathCount, var="x" ),
14331             rec( 25, (2,255), Path16, repeat="x" ),
14332     ], info_str=(Path16, "Get Volume and Directory Base from: %s", "/%s"))
14333     pkt.Reply(17, [
14334             rec( 8, 4, DirectoryBase ),
14335             rec( 12, 4, DOSDirectoryBase ),
14336             rec( 16, 1, VolumeNumber ),
14337     ])
14338     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14339                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14340                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14341     # 2222/5919, 89/25
14342     pkt = NCP(0x5919, "Set Name Space Information", 'enhanced', has_length=0)
14343     pkt.Request(530, [
14344             rec( 8, 1, SrcNameSpace ),
14345             rec( 9, 1, DestNameSpace ),
14346             rec( 10, 1, VolumeNumber ),
14347             rec( 11, 4, DirectoryBase ),
14348             rec( 15, 2, NamesSpaceInfoMask ),
14349     rec( 17, 1, DataTypeFlag ),
14350             rec( 18, 512, NSSpecificInfo ),
14351     ])
14352     pkt.Reply(8)
14353     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
14354                          0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
14355                          0x9600, 0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00,
14356                          0xff16])
14357     # 2222/591C, 89/28
14358     pkt = NCP(0x591C, "Get Full Path String", 'enhanced', has_length=0)
14359     pkt.Request((35,288), [
14360             rec( 8, 1, SrcNameSpace ),
14361             rec( 9, 1, DestNameSpace ),
14362             rec( 10, 2, PathCookieFlags ),
14363             rec( 12, 4, Cookie1 ),
14364             rec( 16, 4, Cookie2 ),
14365             rec( 20, 4, DirectoryBase ),
14366             rec( 24, 1, VolumeNumber ),
14367             rec( 25, 1, HandleFlag ),
14368     rec( 26, 1, DataTypeFlag ),
14369     rec( 27, 5, Reserved5 ),
14370             rec( 32, 1, PathCount, var="x" ),
14371             rec( 33, (2,255), Path16, repeat="x" ),
14372     ], info_str=(Path16, "Get Full Path from: %s", "/%s"))
14373     pkt.Reply((24,277), [
14374             rec( 8, 2, PathCookieFlags ),
14375             rec( 10, 4, Cookie1 ),
14376             rec( 14, 4, Cookie2 ),
14377             rec( 18, 2, PathComponentSize ),
14378             rec( 20, 2, PathComponentCount, var='x' ),
14379             rec( 22, (2,255), Path16, repeat='x' ),
14380     ])
14381     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14382                          0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
14383                          0x9600, 0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00,
14384                          0xff16])
14385     # 2222/591D, 89/29
14386     pkt = NCP(0x591D, "Get Effective Directory Rights", 'enhanced', has_length=0)
14387     pkt.Request((31, 284), [
14388             rec( 8, 1, NameSpace  ),
14389             rec( 9, 1, DestNameSpace ),
14390             rec( 10, 2, SearchAttributesLow ),
14391             rec( 12, 2, ReturnInfoMask ),
14392             rec( 14, 2, ExtendedInfo ),
14393             rec( 16, 4, DirectoryBase ),
14394             rec( 20, 1, VolumeNumber ),
14395             rec( 21, 1, HandleFlag ),
14396     rec( 22, 1, DataTypeFlag ),
14397     rec( 23, 5, Reserved5 ),
14398             rec( 28, 1, PathCount, var="x" ),
14399             rec( 29, (2,255), Path16, repeat="x" ),
14400     ], info_str=(Path16, "Get Effective Rights for: %s", "/%s"))
14401     pkt.Reply(NO_LENGTH_CHECK, [
14402             rec( 8, 2, EffectiveRights, LE ),
14403             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
14404             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
14405             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
14406             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
14407             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
14408             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
14409             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
14410             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
14411             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
14412             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
14413             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
14414             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
14415             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
14416             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
14417             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
14418             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
14419             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
14420             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
14421             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
14422             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
14423             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
14424             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
14425             srec( FileName16Struct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
14426             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
14427             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
14428             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
14429             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
14430             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
14431             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
14432             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
14433             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
14434             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
14435             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
14436             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
14437             srec( FileSize64bitStruct, req_cond="(ncp.ext_info_64_bit_fs == 1) && (ncp.ret_info_mask_fname == 1)" ),
14438             srec( FileName16Struct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
14439     ])
14440     pkt.ReqCondSizeVariable()
14441     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14442                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14443                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14444     # 2222/591E, 89/30
14445     pkt = NCP(0x591E, "Open/Create File or Subdirectory", 'enhanced', has_length=0)
14446     pkt.Request((41, 294), [
14447             rec( 8, 1, NameSpace  ),
14448             rec( 9, 1, DataStream ),
14449             rec( 10, 1, OpenCreateMode ),
14450             rec( 11, 1, Reserved ),
14451             rec( 12, 2, SearchAttributesLow ),
14452             rec( 14, 2, Reserved2 ),
14453             rec( 16, 2, ReturnInfoMask ),
14454             rec( 18, 2, ExtendedInfo ),
14455             rec( 20, 4, AttributesDef32 ),
14456             rec( 24, 2, DesiredAccessRights ),
14457             rec( 26, 4, DirectoryBase ),
14458             rec( 30, 1, VolumeNumber ),
14459             rec( 31, 1, HandleFlag ),
14460     rec( 32, 1, DataTypeFlag ),
14461     rec( 33, 5, Reserved5 ),
14462             rec( 38, 1, PathCount, var="x" ),
14463             rec( 39, (2,255), Path16, repeat="x" ),
14464     ], info_str=(Path16, "Open or Create File: %s", "/%s"))
14465     pkt.Reply(NO_LENGTH_CHECK, [
14466             rec( 8, 4, FileHandle, BE ),
14467             rec( 12, 1, OpenCreateAction ),
14468             rec( 13, 1, Reserved ),
14469             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
14470             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
14471             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
14472             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
14473             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
14474             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
14475             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
14476             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
14477             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
14478             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
14479             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
14480             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
14481             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
14482             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
14483             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
14484             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
14485             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
14486             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
14487             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
14488             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
14489             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
14490             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
14491             srec( FileName16Struct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
14492             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
14493             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
14494             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
14495             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
14496             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
14497             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
14498             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
14499             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
14500             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
14501             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
14502             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
14503             srec( FileSize64bitStruct, req_cond="(ncp.ext_info_64_bit_fs == 1) && (ncp.ret_info_mask_fname == 1)" ),
14504             srec( FileName16Struct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
14505     ])
14506     pkt.ReqCondSizeVariable()
14507     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
14508                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14509                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14510     # 2222/5920, 89/32
14511     pkt = NCP(0x5920, "Open/Create File or Subdirectory with Callback", 'enhanced', has_length=0)
14512     pkt.Request((37, 290), [
14513             rec( 8, 1, NameSpace  ),
14514             rec( 9, 1, OpenCreateMode ),
14515             rec( 10, 2, SearchAttributesLow ),
14516             rec( 12, 2, ReturnInfoMask ),
14517             rec( 14, 2, ExtendedInfo ),
14518             rec( 16, 4, AttributesDef32 ),
14519             rec( 20, 2, DesiredAccessRights ),
14520             rec( 22, 4, DirectoryBase ),
14521             rec( 26, 1, VolumeNumber ),
14522             rec( 27, 1, HandleFlag ),
14523     rec( 28, 1, DataTypeFlag ),
14524     rec( 29, 5, Reserved5 ),
14525             rec( 34, 1, PathCount, var="x" ),
14526             rec( 35, (2,255), Path16, repeat="x" ),
14527     ], info_str=(Path16, "Open or Create with Op-Lock: %s", "/%s"))
14528     pkt.Reply( NO_LENGTH_CHECK, [
14529             rec( 8, 4, FileHandle, BE ),
14530             rec( 12, 1, OpenCreateAction ),
14531             rec( 13, 1, OCRetFlags ),
14532             srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
14533             srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
14534             srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
14535             srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
14536             srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
14537             srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
14538             srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
14539             srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
14540             srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
14541             srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
14542             srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
14543             srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
14544             srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
14545             srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
14546             srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
14547             srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
14548             srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
14549             srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
14550             srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
14551             srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
14552             srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
14553             srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
14554             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
14555             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
14556             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
14557             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
14558             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
14559             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
14560             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
14561             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
14562             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
14563             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
14564             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
14565             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
14566             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
14567             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
14568             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
14569             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
14570             srec( DOSName16Struct, req_cond="ncp.ext_info_dos_name == 1" ),
14571             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
14572             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
14573             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
14574             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
14575             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
14576             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
14577             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
14578             srec( FileSize64bitStruct, req_cond="ncp.ext_info_64_bit_fs == 1" ),
14579             srec( FileName16Struct, req_cond="ncp.ret_info_mask_fname == 1" ),
14580     ])
14581     pkt.ReqCondSizeVariable()
14582     pkt.CompletionCodes([0x0000, 0x0102, 0x7f00, 0x8000, 0x8101, 0x8401, 0x8501,
14583                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14584                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14585     # 2222/5921, 89/33
14586     pkt = NCP(0x5921, "Open/Create File or Subdirectory II with Callback", 'enhanced', has_length=0)
14587     pkt.Request((41, 294), [
14588             rec( 8, 1, NameSpace  ),
14589             rec( 9, 1, DataStream ),
14590             rec( 10, 1, OpenCreateMode ),
14591             rec( 11, 1, Reserved ),
14592             rec( 12, 2, SearchAttributesLow ),
14593             rec( 14, 2, Reserved2 ),
14594             rec( 16, 2, ReturnInfoMask ),
14595             rec( 18, 2, ExtendedInfo ),
14596             rec( 20, 4, AttributesDef32 ),
14597             rec( 24, 2, DesiredAccessRights ),
14598             rec( 26, 4, DirectoryBase ),
14599             rec( 30, 1, VolumeNumber ),
14600             rec( 31, 1, HandleFlag ),
14601     rec( 32, 1, DataTypeFlag ),
14602     rec( 33, 5, Reserved5 ),
14603             rec( 38, 1, PathCount, var="x" ),
14604             rec( 39, (2,255), Path16, repeat="x" ),
14605     ], info_str=(Path16, "Open or Create II with Op-Lock: %s", "/%s"))
14606     pkt.Reply( NO_LENGTH_CHECK, [
14607             rec( 8, 4, FileHandle ),
14608             rec( 12, 1, OpenCreateAction ),
14609             rec( 13, 1, OCRetFlags ),
14610             srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
14611             srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
14612             srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
14613             srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
14614             srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
14615             srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
14616             srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
14617             srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
14618             srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
14619             srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
14620             srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
14621             srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
14622             srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
14623             srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
14624             srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
14625             srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
14626             srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
14627             srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
14628             srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
14629             srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
14630             srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
14631             srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
14632             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
14633             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
14634             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
14635             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
14636             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
14637             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
14638             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
14639             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
14640             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
14641             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
14642             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
14643             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
14644             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
14645             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
14646             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
14647             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
14648             srec( DOSName16Struct, req_cond="ncp.ext_info_dos_name == 1" ),
14649             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
14650             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
14651             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
14652             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
14653             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
14654             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
14655             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
14656             srec( FileSize64bitStruct, req_cond="ncp.ext_info_64_bit_fs == 1" ),
14657             srec( FileName16Struct, req_cond="ncp.ret_info_mask_fname == 1" ),
14658     ])
14659     pkt.ReqCondSizeVariable()
14660     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
14661                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14662                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14663     # 2222/5923, 89/35
14664     pkt = NCP(0x5923, "Modify DOS Attributes on a File or Subdirectory", 'enhanced', has_length=0)
14665     pkt.Request((35, 288), [
14666             rec( 8, 1, NameSpace  ),
14667             rec( 9, 1, Flags ),
14668             rec( 10, 2, SearchAttributesLow ),
14669             rec( 12, 2, ReturnInfoMask ),
14670             rec( 14, 2, ExtendedInfo ),
14671             rec( 16, 4, AttributesDef32 ),
14672             rec( 20, 4, DirectoryBase ),
14673             rec( 24, 1, VolumeNumber ),
14674             rec( 25, 1, HandleFlag ),
14675     rec( 26, 1, DataTypeFlag ),
14676     rec( 27, 5, Reserved5 ),
14677             rec( 32, 1, PathCount, var="x" ),
14678             rec( 33, (2,255), Path16, repeat="x" ),
14679     ], info_str=(Path16, "Modify DOS Attributes for: %s", "/%s"))
14680     pkt.Reply(24, [
14681             rec( 8, 4, ItemsChecked ),
14682             rec( 12, 4, ItemsChanged ),
14683             rec( 16, 4, AttributeValidFlag ),
14684             rec( 20, 4, AttributesDef32 ),
14685     ])
14686     pkt.CompletionCodes([0x0000, 0x0102, 0x8000, 0x8101, 0x8401, 0x8501,
14687                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14688                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14689     # 2222/5927, 89/39
14690     pkt = NCP(0x5927, "Get Directory Disk Space Restriction", 'enhanced', has_length=0)
14691     pkt.Request((26, 279), [
14692             rec( 8, 1, NameSpace  ),
14693             rec( 9, 2, Reserved2 ),
14694             rec( 11, 4, DirectoryBase ),
14695             rec( 15, 1, VolumeNumber ),
14696             rec( 16, 1, HandleFlag ),
14697     rec( 17, 1, DataTypeFlag ),
14698     rec( 18, 5, Reserved5 ),
14699             rec( 23, 1, PathCount, var="x" ),
14700             rec( 24, (2,255), Path16, repeat="x" ),
14701     ], info_str=(Path16, "Get Disk Space Restriction for: %s", "/%s"))
14702     pkt.Reply(18, [
14703             rec( 8, 1, NumberOfEntries, var="x" ),
14704             rec( 9, 9, SpaceStruct, repeat="x" ),
14705     ])
14706     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14707                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14708                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00,
14709                          0xff16])
14710     # 2222/5928, 89/40
14711     pkt = NCP(0x5928, "Search for File or Subdirectory Set (Extended Errors)", 'enhanced', has_length=0)
14712     pkt.Request((30, 283), [
14713             rec( 8, 1, NameSpace  ),
14714             rec( 9, 1, DataStream ),
14715             rec( 10, 2, SearchAttributesLow ),
14716             rec( 12, 2, ReturnInfoMask ),
14717             rec( 14, 2, ExtendedInfo ),
14718             rec( 16, 2, ReturnInfoCount ),
14719             rec( 18, 9, SeachSequenceStruct ),
14720     rec( 27, 1, DataTypeFlag ),
14721             rec( 28, (2,255), SearchPattern16 ),
14722     ], info_str=(SearchPattern16, "Search for: %s", ", %s"))
14723     pkt.Reply(NO_LENGTH_CHECK, [
14724             rec( 8, 9, SeachSequenceStruct ),
14725             rec( 17, 1, MoreFlag ),
14726             rec( 18, 2, InfoCount ),
14727             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
14728             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
14729             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
14730             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
14731             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
14732             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
14733             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
14734             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
14735             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
14736             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
14737             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
14738             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
14739             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
14740             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
14741             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
14742             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
14743             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
14744             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
14745             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
14746             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
14747             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
14748             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
14749             srec( FileName16Struct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
14750             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
14751             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
14752             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
14753             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
14754             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
14755             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
14756             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
14757             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
14758             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
14759             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
14760             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
14761             srec( FileSize64bitStruct, req_cond="(ncp.ext_info_64_bit_fs == 1) && (ncp.ret_info_mask_fname == 1)" ),
14762             srec( FileName16Struct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
14763     ])
14764     pkt.ReqCondSizeVariable()
14765     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14766                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14767                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14768     # 2222/5932, 89/50
14769     pkt = NCP(0x5932, "Get Object Effective Rights", "enhanced", has_length=0)
14770     pkt.Request(25, [
14771 rec( 8, 1, NameSpace ),
14772 rec( 9, 4, ObjectID ),
14773             rec( 13, 4, DirectoryBase ),
14774             rec( 17, 1, VolumeNumber ),
14775             rec( 18, 1, HandleFlag ),
14776     rec( 19, 1, DataTypeFlag ),
14777     rec( 20, 5, Reserved5 ),
14778 ])
14779     pkt.Reply( 10, [
14780             rec( 8, 2, TrusteeRights ),
14781     ])
14782     pkt.CompletionCodes([0x0000, 0x7e01, 0x9b00, 0x9c03, 0xa901, 0xaa00])
14783     # 2222/5934, 89/52
14784     pkt = NCP(0x5934, "Write Extended Attribute", 'enhanced', has_length=0 )
14785     pkt.Request((36,98), [
14786             rec( 8, 2, EAFlags ),
14787             rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
14788             rec( 14, 4, ReservedOrDirectoryNumber ),
14789             rec( 18, 4, TtlWriteDataSize ),
14790             rec( 22, 4, FileOffset ),
14791             rec( 26, 4, EAAccessFlag ),
14792     rec( 30, 1, DataTypeFlag ),
14793             rec( 31, 2, EAValueLength, var='x' ),
14794             rec( 33, (2,64), EAKey ),
14795             rec( -1, 1, EAValueRep, repeat='x' ),
14796     ], info_str=(EAKey, "Write Extended Attribute: %s", ", %s"))
14797     pkt.Reply(20, [
14798             rec( 8, 4, EAErrorCodes ),
14799             rec( 12, 4, EABytesWritten ),
14800             rec( 16, 4, NewEAHandle ),
14801     ])
14802     pkt.CompletionCodes([0x0000, 0xc800, 0xc900, 0xcb00, 0xce00, 0xcf00, 0xd101,
14803                          0xd203, 0xa901, 0xaa00, 0xd301, 0xd402])
14804     # 2222/5935, 89/53
14805     pkt = NCP(0x5935, "Read Extended Attribute", 'enhanced', has_length=0 )
14806     pkt.Request((31,541), [
14807             rec( 8, 2, EAFlags ),
14808             rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
14809             rec( 14, 4, ReservedOrDirectoryNumber ),
14810             rec( 18, 4, FileOffset ),
14811             rec( 22, 4, InspectSize ),
14812     rec( 26, 1, DataTypeFlag ),
14813     rec( 27, 2, MaxReadDataReplySize ),
14814             rec( 29, (2,512), EAKey ),
14815     ], info_str=(EAKey, "Read Extended Attribute: %s", ", %s"))
14816     pkt.Reply((26,536), [
14817             rec( 8, 4, EAErrorCodes ),
14818             rec( 12, 4, TtlValuesLength ),
14819             rec( 16, 4, NewEAHandle ),
14820             rec( 20, 4, EAAccessFlag ),
14821             rec( 24, (2,512), EAValue ),
14822     ])
14823     pkt.CompletionCodes([0x0000, 0xa901, 0xaa00, 0xc900, 0xce00, 0xcf00, 0xd101,
14824                          0xd301])
14825     # 2222/5936, 89/54
14826     pkt = NCP(0x5936, "Enumerate Extended Attribute", 'enhanced', has_length=0 )
14827     pkt.Request((27,537), [
14828             rec( 8, 2, EAFlags ),
14829             rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
14830             rec( 14, 4, ReservedOrDirectoryNumber ),
14831             rec( 18, 4, InspectSize ),
14832             rec( 22, 2, SequenceNumber ),
14833     rec( 24, 1, DataTypeFlag ),
14834             rec( 25, (2,512), EAKey ),
14835     ], info_str=(EAKey, "Enumerate Extended Attribute: %s", ", %s"))
14836     pkt.Reply(28, [
14837             rec( 8, 4, EAErrorCodes ),
14838             rec( 12, 4, TtlEAs ),
14839             rec( 16, 4, TtlEAsDataSize ),
14840             rec( 20, 4, TtlEAsKeySize ),
14841             rec( 24, 4, NewEAHandle ),
14842     ])
14843     pkt.CompletionCodes([0x0000, 0x8800, 0xa901, 0xaa00, 0xc900, 0xce00, 0xcf00, 0xd101,
14844                          0xd301])
14845     # 2222/5947, 89/71
14846     pkt = NCP(0x5947, "Scan Volume Trustee Object Paths", 'enhanced', has_length=0)
14847     pkt.Request(21, [
14848             rec( 8, 4, VolumeID  ),
14849             rec( 12, 4, ObjectID ),
14850             rec( 16, 4, SequenceNumber ),
14851             rec( 20, 1, DataTypeFlag ),
14852     ])
14853     pkt.Reply((20,273), [
14854             rec( 8, 4, SequenceNumber ),
14855             rec( 12, 4, ObjectID ),
14856     rec( 16, 1, TrusteeAccessMask ),
14857             rec( 17, 1, PathCount, var="x" ),
14858             rec( 18, (2,255), Path16, repeat="x" ),
14859     ])
14860     pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
14861                          0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
14862                          0x9804, 0x9b03, 0x9c03, 0xa901, 0xaa00, 0xbf00, 0xfd00, 0xff16])
14863     # 2222/5A01, 90/00
14864     pkt = NCP(0x5A00, "Parse Tree", 'file')
14865     pkt.Request(46, [
14866             rec( 10, 4, InfoMask ),
14867             rec( 14, 4, Reserved4 ),
14868             rec( 18, 4, Reserved4 ),
14869             rec( 22, 4, limbCount ),
14870     rec( 26, 4, limbFlags ),
14871     rec( 30, 4, VolumeNumberLong ),
14872     rec( 34, 4, DirectoryBase ),
14873     rec( 38, 4, limbScanNum ),
14874     rec( 42, 4, NameSpace ),
14875     ])
14876     pkt.Reply(32, [
14877             rec( 8, 4, limbCount ),
14878             rec( 12, 4, ItemsCount ),
14879             rec( 16, 4, nextLimbScanNum ),
14880             rec( 20, 4, CompletionCode ),
14881             rec( 24, 1, FolderFlag ),
14882             rec( 25, 3, Reserved ),
14883             rec( 28, 4, DirectoryBase ),
14884     ])
14885     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
14886                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
14887                          0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
14888     # 2222/5A0A, 90/10
14889     pkt = NCP(0x5A0A, "Get Reference Count from Dir Entry Number", 'file')
14890     pkt.Request(19, [
14891             rec( 10, 4, VolumeNumberLong ),
14892             rec( 14, 4, DirectoryBase ),
14893             rec( 18, 1, NameSpace ),
14894     ])
14895     pkt.Reply(12, [
14896             rec( 8, 4, ReferenceCount ),
14897     ])
14898     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
14899                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
14900                          0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
14901     # 2222/5A0B, 90/11
14902     pkt = NCP(0x5A0B, "Get Reference Count from Dir Handle", 'file')
14903     pkt.Request(14, [
14904             rec( 10, 4, DirHandle ),
14905     ])
14906     pkt.Reply(12, [
14907             rec( 8, 4, ReferenceCount ),
14908     ])
14909     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
14910                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
14911                          0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
14912     # 2222/5A0C, 90/12
14913     pkt = NCP(0x5A0C, "Set Compressed File Size", 'file')
14914     pkt.Request(20, [
14915             rec( 10, 6, FileHandle ),
14916             rec( 16, 4, SuggestedFileSize ),
14917     ])
14918     pkt.Reply(16, [
14919             rec( 8, 4, OldFileSize ),
14920             rec( 12, 4, NewFileSize ),
14921     ])
14922     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
14923                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
14924                          0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
14925     # 2222/5A80, 90/128
14926     pkt = NCP(0x5A80, "Move File Data To Data Migration", 'migration')
14927     pkt.Request(27, [
14928             rec( 10, 4, VolumeNumberLong ),
14929             rec( 14, 4, DirectoryEntryNumber ),
14930             rec( 18, 1, NameSpace ),
14931             rec( 19, 3, Reserved ),
14932             rec( 22, 4, SupportModuleID ),
14933             rec( 26, 1, DMFlags ),
14934     ])
14935     pkt.Reply(8)
14936     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
14937                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
14938                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
14939     # 2222/5A81, 90/129
14940     pkt = NCP(0x5A81, "Data Migration File Information", 'migration')
14941     pkt.Request(19, [
14942             rec( 10, 4, VolumeNumberLong ),
14943             rec( 14, 4, DirectoryEntryNumber ),
14944             rec( 18, 1, NameSpace ),
14945     ])
14946     pkt.Reply(24, [
14947             rec( 8, 4, SupportModuleID ),
14948             rec( 12, 4, RestoreTime ),
14949             rec( 16, 4, DMInfoEntries, var="x" ),
14950             rec( 20, 4, DataSize, repeat="x" ),
14951     ])
14952     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
14953                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
14954                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
14955     # 2222/5A82, 90/130
14956     pkt = NCP(0x5A82, "Volume Data Migration Status", 'migration')
14957     pkt.Request(18, [
14958             rec( 10, 4, VolumeNumberLong ),
14959             rec( 14, 4, SupportModuleID ),
14960     ])
14961     pkt.Reply(32, [
14962             rec( 8, 4, NumOfFilesMigrated ),
14963             rec( 12, 4, TtlMigratedSize ),
14964             rec( 16, 4, SpaceUsed ),
14965             rec( 20, 4, LimboUsed ),
14966             rec( 24, 4, SpaceMigrated ),
14967             rec( 28, 4, FileLimbo ),
14968     ])
14969     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
14970                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
14971                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
14972     # 2222/5A83, 90/131
14973     pkt = NCP(0x5A83, "Migrator Status Info", 'migration')
14974     pkt.Request(10)
14975     pkt.Reply(20, [
14976             rec( 8, 1, DMPresentFlag ),
14977             rec( 9, 3, Reserved3 ),
14978             rec( 12, 4, DMmajorVersion ),
14979             rec( 16, 4, DMminorVersion ),
14980     ])
14981     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
14982                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
14983                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
14984     # 2222/5A84, 90/132
14985     pkt = NCP(0x5A84, "Data Migration Support Module Information", 'migration')
14986     pkt.Request(18, [
14987             rec( 10, 1, DMInfoLevel ),
14988             rec( 11, 3, Reserved3),
14989             rec( 14, 4, SupportModuleID ),
14990     ])
14991     pkt.Reply(NO_LENGTH_CHECK, [
14992             srec( DMInfoLevel0, req_cond="ncp.dm_info_level == 0x00" ),
14993             srec( DMInfoLevel1, req_cond="ncp.dm_info_level == 0x01" ),
14994             srec( DMInfoLevel2, req_cond="ncp.dm_info_level == 0x02" ),
14995     ])
14996     pkt.ReqCondSizeVariable()
14997     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
14998                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
14999                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15000     # 2222/5A85, 90/133
15001     pkt = NCP(0x5A85, "Move File Data From Data Migration", 'migration')
15002     pkt.Request(19, [
15003             rec( 10, 4, VolumeNumberLong ),
15004             rec( 14, 4, DirectoryEntryNumber ),
15005             rec( 18, 1, NameSpace ),
15006     ])
15007     pkt.Reply(8)
15008     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15009                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
15010                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15011     # 2222/5A86, 90/134
15012     pkt = NCP(0x5A86, "Get/Set Default Read-Write Support Module ID", 'migration')
15013     pkt.Request(18, [
15014             rec( 10, 1, GetSetFlag ),
15015             rec( 11, 3, Reserved3 ),
15016             rec( 14, 4, SupportModuleID ),
15017     ])
15018     pkt.Reply(12, [
15019             rec( 8, 4, SupportModuleID ),
15020     ])
15021     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15022                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
15023                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15024     # 2222/5A87, 90/135
15025     pkt = NCP(0x5A87, "Data Migration Support Module Capacity Request", 'migration')
15026     pkt.Request(22, [
15027             rec( 10, 4, SupportModuleID ),
15028             rec( 14, 4, VolumeNumberLong ),
15029             rec( 18, 4, DirectoryBase ),
15030     ])
15031     pkt.Reply(20, [
15032             rec( 8, 4, BlockSizeInSectors ),
15033             rec( 12, 4, TotalBlocks ),
15034             rec( 16, 4, UsedBlocks ),
15035     ])
15036     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15037                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
15038                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15039     # 2222/5A88, 90/136
15040     pkt = NCP(0x5A88, "RTDM Request", 'migration')
15041     pkt.Request(15, [
15042             rec( 10, 4, Verb ),
15043             rec( 14, 1, VerbData ),
15044     ])
15045     pkt.Reply(8)
15046     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15047                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
15048                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15049 # 2222/5A96, 90/150
15050     pkt = NCP(0x5A96, "File Migration Request", 'file')
15051     pkt.Request(22, [
15052             rec( 10, 4, VolumeNumberLong ),
15053     rec( 14, 4, DirectoryBase ),
15054     rec( 18, 4, FileMigrationState ),
15055     ])
15056     pkt.Reply(8)
15057     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15058                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
15059                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfb00, 0xff16])
15060 # 2222/5C, 91
15061     pkt = NCP(0x5B, "NMAS Graded Authentication", 'nmas')
15062     #Need info on this packet structure
15063     pkt.Request(7)
15064     pkt.Reply(8)
15065     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15066                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15067                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15068     # SecretStore data is dissected by packet-ncp-sss.c
15069 # 2222/5C01, 9201
15070     pkt = NCP(0x5C01, "SecretStore Services (Ping Server)", 'sss', 0)
15071     pkt.Request(8)
15072     pkt.Reply(8)
15073     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15074                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15075                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15076     # 2222/5C02, 9202
15077     pkt = NCP(0x5C02, "SecretStore Services (Fragment)", 'sss', 0)
15078     pkt.Request(8)
15079     pkt.Reply(8)
15080     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15081                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15082                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15083     # 2222/5C03, 9203
15084     pkt = NCP(0x5C03, "SecretStore Services (Write App Secrets)", 'sss', 0)
15085     pkt.Request(8)
15086     pkt.Reply(8)
15087     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15088                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15089                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15090     # 2222/5C04, 9204
15091     pkt = NCP(0x5C04, "SecretStore Services (Add Secret ID)", 'sss', 0)
15092     pkt.Request(8)
15093     pkt.Reply(8)
15094     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15095                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15096                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15097     # 2222/5C05, 9205
15098     pkt = NCP(0x5C05, "SecretStore Services (Remove Secret ID)", 'sss', 0)
15099     pkt.Request(8)
15100     pkt.Reply(8)
15101     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15102                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15103                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15104     # 2222/5C06, 9206
15105     pkt = NCP(0x5C06, "SecretStore Services (Remove SecretStore)", 'sss', 0)
15106     pkt.Request(8)
15107     pkt.Reply(8)
15108     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15109                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15110                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15111     # 2222/5C07, 9207
15112     pkt = NCP(0x5C07, "SecretStore Services (Enumerate Secret IDs)", 'sss', 0)
15113     pkt.Request(8)
15114     pkt.Reply(8)
15115     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15116                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15117                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15118     # 2222/5C08, 9208
15119     pkt = NCP(0x5C08, "SecretStore Services (Unlock Store)", 'sss', 0)
15120     pkt.Request(8)
15121     pkt.Reply(8)
15122     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15123                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15124                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15125     # 2222/5C09, 9209
15126     pkt = NCP(0x5C09, "SecretStore Services (Set Master Password)", 'sss', 0)
15127     pkt.Request(8)
15128     pkt.Reply(8)
15129     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15130                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15131                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15132     # 2222/5C0a, 9210
15133     pkt = NCP(0x5C0a, "SecretStore Services (Get Service Information)", 'sss', 0)
15134     pkt.Request(8)
15135     pkt.Reply(8)
15136     pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
15137                          0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
15138                          0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
15139 # NMAS packets are dissected in packet-ncp-nmas.c
15140     # 2222/5E, 9401
15141     pkt = NCP(0x5E01, "NMAS Communications Packet (Ping)", 'nmas', 0)
15142     pkt.Request(8)
15143     pkt.Reply(8)
15144     pkt.CompletionCodes([0x0000, 0xfb09, 0xff08])
15145     # 2222/5E, 9402
15146     pkt = NCP(0x5E02, "NMAS Communications Packet (Fragment)", 'nmas', 0)
15147     pkt.Request(8)
15148     pkt.Reply(8)
15149     pkt.CompletionCodes([0x0000, 0xfb09, 0xff08])
15150     # 2222/5E, 9403
15151     pkt = NCP(0x5E03, "NMAS Communications Packet (Abort)", 'nmas', 0)
15152     pkt.Request(8)
15153     pkt.Reply(8)
15154     pkt.CompletionCodes([0x0000, 0xfb09, 0xff08])
15155     # 2222/61, 97
15156     pkt = NCP(0x61, "Get Big Packet NCP Max Packet Size", 'connection')
15157     pkt.Request(10, [
15158             rec( 7, 2, ProposedMaxSize, BE ),
15159             rec( 9, 1, SecurityFlag ),
15160     ],info_str=(ProposedMaxSize, "Get Big Max Packet Size - %d", ", %d"))
15161     pkt.Reply(13, [
15162             rec( 8, 2, AcceptedMaxSize, BE ),
15163             rec( 10, 2, EchoSocket, BE ),
15164             rec( 12, 1, SecurityFlag ),
15165     ])
15166     pkt.CompletionCodes([0x0000])
15167     # 2222/63, 99
15168     pkt = NCP(0x63, "Undocumented Packet Burst", 'pburst')
15169     pkt.Request(7)
15170     pkt.Reply(8)
15171     pkt.CompletionCodes([0x0000])
15172     # 2222/64, 100
15173     pkt = NCP(0x64, "Undocumented Packet Burst", 'pburst')
15174     pkt.Request(7)
15175     pkt.Reply(8)
15176     pkt.CompletionCodes([0x0000])
15177     # 2222/65, 101
15178     pkt = NCP(0x65, "Packet Burst Connection Request", 'pburst')
15179     pkt.Request(25, [
15180             rec( 7, 4, LocalConnectionID, BE ),
15181             rec( 11, 4, LocalMaxPacketSize, BE ),
15182             rec( 15, 2, LocalTargetSocket, BE ),
15183             rec( 17, 4, LocalMaxSendSize, BE ),
15184             rec( 21, 4, LocalMaxRecvSize, BE ),
15185     ])
15186     pkt.Reply(16, [
15187             rec( 8, 4, RemoteTargetID, BE ),
15188             rec( 12, 4, RemoteMaxPacketSize, BE ),
15189     ])
15190     pkt.CompletionCodes([0x0000])
15191     # 2222/66, 102
15192     pkt = NCP(0x66, "Undocumented Packet Burst", 'pburst')
15193     pkt.Request(7)
15194     pkt.Reply(8)
15195     pkt.CompletionCodes([0x0000])
15196     # 2222/67, 103
15197     pkt = NCP(0x67, "Undocumented Packet Burst", 'pburst')
15198     pkt.Request(7)
15199     pkt.Reply(8)
15200     pkt.CompletionCodes([0x0000])
15201     # 2222/6801, 104/01
15202     pkt = NCP(0x6801, "Ping for NDS NCP", "nds", has_length=0)
15203     pkt.Request(8)
15204     pkt.Reply(8)
15205     pkt.ReqCondSizeVariable()
15206     pkt.CompletionCodes([0x0000, 0x8100, 0xfb04, 0xfe0c])
15207     # 2222/6802, 104/02
15208     #
15209     # XXX - if FraggerHandle is not 0xffffffff, this is not the
15210     # first fragment, so we can only dissect this by reassembling;
15211     # the fields after "Fragment Handle" are bogus for non-0xffffffff
15212     # fragments, so we shouldn't dissect them. This is all handled in packet-ncp2222.inc.
15213     #
15214     pkt = NCP(0x6802, "Send NDS Fragmented Request/Reply", "nds", has_length=0)
15215     pkt.Request(8)
15216     pkt.Reply(8)
15217     pkt.ReqCondSizeVariable()
15218     pkt.CompletionCodes([0x0000, 0xac00, 0xfd01])
15219     # 2222/6803, 104/03
15220     pkt = NCP(0x6803, "Fragment Close", "nds", has_length=0)
15221     pkt.Request(12, [
15222             rec( 8, 4, FraggerHandle ),
15223     ])
15224     pkt.Reply(8)
15225     pkt.CompletionCodes([0x0000, 0xff00])
15226     # 2222/6804, 104/04
15227     pkt = NCP(0x6804, "Return Bindery Context", "nds", has_length=0)
15228     pkt.Request(8)
15229     pkt.Reply((9, 263), [
15230             rec( 8, (1,255), binderyContext ),
15231     ])
15232     pkt.CompletionCodes([0x0000, 0xfe0c, 0xff00])
15233     # 2222/6805, 104/05
15234     pkt = NCP(0x6805, "Monitor NDS Connection", "nds", has_length=0)
15235     pkt.Request(8)
15236     pkt.Reply(8)
15237     pkt.CompletionCodes([0x0000, 0x7700, 0xfb00, 0xfe0c, 0xff00])
15238     # 2222/6806, 104/06
15239     pkt = NCP(0x6806, "Return NDS Statistics", "nds", has_length=0)
15240     pkt.Request(10, [
15241             rec( 8, 2, NDSRequestFlags ),
15242     ])
15243     pkt.Reply(8)
15244     #Need to investigate how to decode Statistics Return Value
15245     pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
15246     # 2222/6807, 104/07
15247     pkt = NCP(0x6807, "Clear NDS Statistics", "nds", has_length=0)
15248     pkt.Request(8)
15249     pkt.Reply(8)
15250     pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
15251     # 2222/6808, 104/08
15252     pkt = NCP(0x6808, "Reload NDS Software", "nds", has_length=0)
15253     pkt.Request(8)
15254     pkt.Reply(12, [
15255             rec( 8, 4, NDSStatus ),
15256     ])
15257     pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
15258     # 2222/68C8, 104/200
15259     pkt = NCP(0x68C8, "Query Container Audit Status", "auditing", has_length=0)
15260     pkt.Request(12, [
15261             rec( 8, 4, ConnectionNumber ),
15262     ])
15263     pkt.Reply(40, [
15264             rec(8, 32, NWAuditStatus ),
15265     ])
15266     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15267     # 2222/68CA, 104/202
15268     pkt = NCP(0x68CA, "Add Auditor Access", "auditing", has_length=0)
15269     pkt.Request(8)
15270     pkt.Reply(8)
15271     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15272     # 2222/68CB, 104/203
15273     pkt = NCP(0x68CB, "Change Auditor Container Password", "auditing", has_length=0)
15274     pkt.Request(8)
15275     pkt.Reply(8)
15276     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15277     # 2222/68CC, 104/204
15278     pkt = NCP(0x68CC, "Check Auditor Access", "auditing", has_length=0)
15279     pkt.Request(8)
15280     pkt.Reply(8)
15281     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15282     # 2222/68CE, 104/206
15283     pkt = NCP(0x680CE, "Disable Container Auditing", "auditing", has_length=0)
15284     pkt.Request(8)
15285     pkt.Reply(8)
15286     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15287     # 2222/68CF, 104/207
15288     pkt = NCP(0x68CF, "Enable Container Auditing", "auditing", has_length=0)
15289     pkt.Request(8)
15290     pkt.Reply(8)
15291     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15292     # 2222/68D1, 104/209
15293     pkt = NCP(0x68D1, "Read Audit File Header", "auditing", has_length=0)
15294     pkt.Request(8)
15295     pkt.Reply(8)
15296     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15297     # 2222/68D3, 104/211
15298     pkt = NCP(0x68D3, "Remove Auditor Access", "auditing", has_length=0)
15299     pkt.Request(8)
15300     pkt.Reply(8)
15301     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15302     # 2222/68D4, 104/212
15303     pkt = NCP(0x68D4, "Reset Audit File", "auditing", has_length=0)
15304     pkt.Request(8)
15305     pkt.Reply(8)
15306     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15307     # 2222/68D6, 104/214
15308     pkt = NCP(0x68D6, "Write Audit File Configuration Header", "auditing", has_length=0)
15309     pkt.Request(8)
15310     pkt.Reply(8)
15311     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15312     # 2222/68D7, 104/215
15313     pkt = NCP(0x68D7, "Change Auditor Container Password2", "auditing", has_length=0)
15314     pkt.Request(8)
15315     pkt.Reply(8)
15316     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15317     # 2222/68D8, 104/216
15318     pkt = NCP(0x68D8, "Return Audit Flags", "auditing", has_length=0)
15319     pkt.Request(8)
15320     pkt.Reply(8)
15321     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15322     # 2222/68D9, 104/217
15323     pkt = NCP(0x68D9, "Close Old Audit File", "auditing", has_length=0)
15324     pkt.Request(8)
15325     pkt.Reply(8)
15326     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15327     # 2222/68DB, 104/219
15328     pkt = NCP(0x68DB, "Check Level Two Access", "auditing", has_length=0)
15329     pkt.Request(8)
15330     pkt.Reply(8)
15331     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15332     # 2222/68DC, 104/220
15333     pkt = NCP(0x68DC, "Check Object Audited", "auditing", has_length=0)
15334     pkt.Request(8)
15335     pkt.Reply(8)
15336     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15337     # 2222/68DD, 104/221
15338     pkt = NCP(0x68DD, "Change Object Audited", "auditing", has_length=0)
15339     pkt.Request(8)
15340     pkt.Reply(8)
15341     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15342     # 2222/68DE, 104/222
15343     pkt = NCP(0x68DE, "Return Old Audit File List", "auditing", has_length=0)
15344     pkt.Request(8)
15345     pkt.Reply(8)
15346     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15347     # 2222/68DF, 104/223
15348     pkt = NCP(0x68DF, "Init Audit File Reads", "auditing", has_length=0)
15349     pkt.Request(8)
15350     pkt.Reply(8)
15351     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15352     # 2222/68E0, 104/224
15353     pkt = NCP(0x68E0, "Read Auditing File", "auditing", has_length=0)
15354     pkt.Request(8)
15355     pkt.Reply(8)
15356     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15357     # 2222/68E1, 104/225
15358     pkt = NCP(0x68E1, "Delete Old Audit File", "auditing", has_length=0)
15359     pkt.Request(8)
15360     pkt.Reply(8)
15361     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15362     # 2222/68E5, 104/229
15363     pkt = NCP(0x68E5, "Set Audit Password", "auditing", has_length=0)
15364     pkt.Request(8)
15365     pkt.Reply(8)
15366     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15367     # 2222/68E7, 104/231
15368     pkt = NCP(0x68E7, "External Audit Append To File", "auditing", has_length=0)
15369     pkt.Request(8)
15370     pkt.Reply(8)
15371     pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
15372     # 2222/69, 105
15373     pkt = NCP(0x69, "Log File", 'sync')
15374     pkt.Request( (12, 267), [
15375             rec( 7, 1, DirHandle ),
15376             rec( 8, 1, LockFlag ),
15377             rec( 9, 2, TimeoutLimit ),
15378             rec( 11, (1, 256), FilePath ),
15379     ], info_str=(FilePath, "Log File: %s", "/%s"))
15380     pkt.Reply(8)
15381     pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x9600, 0xfe0d, 0xff01])
15382     # 2222/6A, 106
15383     pkt = NCP(0x6A, "Lock File Set", 'sync')
15384     pkt.Request( 9, [
15385             rec( 7, 2, TimeoutLimit ),
15386     ])
15387     pkt.Reply(8)
15388     pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x9600, 0xfe0d, 0xff01])
15389     # 2222/6B, 107
15390     pkt = NCP(0x6B, "Log Logical Record", 'sync')
15391     pkt.Request( (11, 266), [
15392             rec( 7, 1, LockFlag ),
15393             rec( 8, 2, TimeoutLimit ),
15394             rec( 10, (1, 256), SynchName ),
15395     ], info_str=(SynchName, "Log Logical Record: %s", ", %s"))
15396     pkt.Reply(8)
15397     pkt.CompletionCodes([0x0000, 0x7f00, 0x9600, 0xfe0d, 0xff01])
15398     # 2222/6C, 108
15399     pkt = NCP(0x6C, "Log Logical Record", 'sync')
15400     pkt.Request( 10, [
15401             rec( 7, 1, LockFlag ),
15402             rec( 8, 2, TimeoutLimit ),
15403     ])
15404     pkt.Reply(8)
15405     pkt.CompletionCodes([0x0000, 0x7f00, 0x9600, 0xfe0d, 0xff01])
15406     # 2222/6D, 109
15407     pkt = NCP(0x6D, "Log Physical Record", 'sync')
15408     pkt.Request(24, [
15409             rec( 7, 1, LockFlag ),
15410             rec( 8, 6, FileHandle ),
15411             rec( 14, 4, LockAreasStartOffset ),
15412             rec( 18, 4, LockAreaLen ),
15413             rec( 22, 2, LockTimeout ),
15414     ])
15415     pkt.Reply(8)
15416     pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
15417     # 2222/6E, 110
15418     pkt = NCP(0x6E, "Lock Physical Record Set", 'sync')
15419     pkt.Request(10, [
15420             rec( 7, 1, LockFlag ),
15421             rec( 8, 2, LockTimeout ),
15422     ])
15423     pkt.Reply(8)
15424     pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
15425     # 2222/6F00, 111/00
15426     pkt = NCP(0x6F00, "Open/Create a Semaphore", 'sync', has_length=0)
15427     pkt.Request((10,521), [
15428             rec( 8, 1, InitialSemaphoreValue ),
15429             rec( 9, (1, 512), SemaphoreName ),
15430     ], info_str=(SemaphoreName, "Open/Create Semaphore: %s", ", %s"))
15431     pkt.Reply(13, [
15432               rec( 8, 4, SemaphoreHandle ),
15433               rec( 12, 1, SemaphoreOpenCount ),
15434     ])
15435     pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
15436     # 2222/6F01, 111/01
15437     pkt = NCP(0x6F01, "Examine Semaphore", 'sync', has_length=0)
15438     pkt.Request(12, [
15439             rec( 8, 4, SemaphoreHandle ),
15440     ])
15441     pkt.Reply(10, [
15442               rec( 8, 1, SemaphoreValue ),
15443               rec( 9, 1, SemaphoreOpenCount ),
15444     ])
15445     pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
15446     # 2222/6F02, 111/02
15447     pkt = NCP(0x6F02, "Wait On (P) Semaphore", 'sync', has_length=0)
15448     pkt.Request(14, [
15449             rec( 8, 4, SemaphoreHandle ),
15450             rec( 12, 2, LockTimeout ),
15451     ])
15452     pkt.Reply(8)
15453     pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
15454     # 2222/6F03, 111/03
15455     pkt = NCP(0x6F03, "Signal (V) Semaphore", 'sync', has_length=0)
15456     pkt.Request(12, [
15457             rec( 8, 4, SemaphoreHandle ),
15458     ])
15459     pkt.Reply(8)
15460     pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
15461     # 2222/6F04, 111/04
15462     pkt = NCP(0x6F04, "Close Semaphore", 'sync', has_length=0)
15463     pkt.Request(12, [
15464             rec( 8, 4, SemaphoreHandle ),
15465     ])
15466     pkt.Reply(10, [
15467             rec( 8, 1, SemaphoreOpenCount ),
15468             rec( 9, 1, SemaphoreShareCount ),
15469     ])
15470     pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
15471     ## 2222/1125
15472     pkt = NCP(0x70, "Clear and Get Waiting Lock Completion", 'sync')
15473     pkt.Request(7)
15474     pkt.Reply(8)
15475     pkt.CompletionCodes([0x0000, 0x9b00, 0x9c03, 0xff1a])
15476     # 2222/7201, 114/01
15477     pkt = NCP(0x7201, "Timesync Get Time", 'tsync')
15478     pkt.Request(10)
15479     pkt.Reply(32,[
15480             rec( 8, 12, theTimeStruct ),
15481             rec(20, 8, eventOffset ),
15482             rec(28, 4, eventTime ),
15483     ])
15484     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
15485     # 2222/7202, 114/02
15486     pkt = NCP(0x7202, "Timesync Exchange Time", 'tsync')
15487     pkt.Request((63,112), [
15488             rec( 10, 4, protocolFlags ),
15489             rec( 14, 4, nodeFlags ),
15490             rec( 18, 8, sourceOriginateTime ),
15491             rec( 26, 8, targetReceiveTime ),
15492             rec( 34, 8, targetTransmitTime ),
15493             rec( 42, 8, sourceReturnTime ),
15494             rec( 50, 8, eventOffset ),
15495             rec( 58, 4, eventTime ),
15496             rec( 62, (1,50), ServerNameLen ),
15497     ], info_str=(ServerNameLen, "Timesync Exchange Time: %s", ", %s"))
15498     pkt.Reply((64,113), [
15499             rec( 8, 3, Reserved3 ),
15500             rec( 11, 4, protocolFlags ),
15501             rec( 15, 4, nodeFlags ),
15502             rec( 19, 8, sourceOriginateTime ),
15503             rec( 27, 8, targetReceiveTime ),
15504             rec( 35, 8, targetTransmitTime ),
15505             rec( 43, 8, sourceReturnTime ),
15506             rec( 51, 8, eventOffset ),
15507             rec( 59, 4, eventTime ),
15508             rec( 63, (1,50), ServerNameLen ),
15509     ])
15510     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
15511     # 2222/7205, 114/05
15512     pkt = NCP(0x7205, "Timesync Get Server List", 'tsync')
15513     pkt.Request(14, [
15514             rec( 10, 4, StartNumber ),
15515     ])
15516     pkt.Reply(66, [
15517             rec( 8, 4, nameType ),
15518             rec( 12, 48, ServerName ),
15519             rec( 60, 4, serverListFlags ),
15520             rec( 64, 2, startNumberFlag ),
15521     ])
15522     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
15523     # 2222/7206, 114/06
15524     pkt = NCP(0x7206, "Timesync Set Server List", 'tsync')
15525     pkt.Request(14, [
15526             rec( 10, 4, StartNumber ),
15527     ])
15528     pkt.Reply(66, [
15529             rec( 8, 4, nameType ),
15530             rec( 12, 48, ServerName ),
15531             rec( 60, 4, serverListFlags ),
15532             rec( 64, 2, startNumberFlag ),
15533     ])
15534     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
15535     # 2222/720C, 114/12
15536     pkt = NCP(0x720C, "Timesync Get Version", 'tsync')
15537     pkt.Request(10)
15538     pkt.Reply(12, [
15539             rec( 8, 4, version ),
15540     ])
15541     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
15542     # 2222/7B01, 123/01
15543     pkt = NCP(0x7B01, "Get Cache Information", 'stats')
15544     pkt.Request(10)
15545     pkt.Reply(288, [
15546             rec(8, 4, CurrentServerTime, LE),
15547             rec(12, 1, VConsoleVersion ),
15548             rec(13, 1, VConsoleRevision ),
15549             rec(14, 2, Reserved2 ),
15550             rec(16, 104, Counters ),
15551             rec(120, 40, ExtraCacheCntrs ),
15552             rec(160, 40, MemoryCounters ),
15553             rec(200, 48, TrendCounters ),
15554             rec(248, 40, CacheInfo ),
15555     ])
15556     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xff00])
15557     # 2222/7B02, 123/02
15558     pkt = NCP(0x7B02, "Get File Server Information", 'stats')
15559     pkt.Request(10)
15560     pkt.Reply(150, [
15561             rec(8, 4, CurrentServerTime ),
15562             rec(12, 1, VConsoleVersion ),
15563             rec(13, 1, VConsoleRevision ),
15564             rec(14, 2, Reserved2 ),
15565             rec(16, 4, NCPStaInUseCnt ),
15566             rec(20, 4, NCPPeakStaInUse ),
15567             rec(24, 4, NumOfNCPReqs ),
15568             rec(28, 4, ServerUtilization ),
15569             rec(32, 96, ServerInfo ),
15570             rec(128, 22, FileServerCounters ),
15571     ])
15572     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15573     # 2222/7B03, 123/03
15574     pkt = NCP(0x7B03, "NetWare File System Information", 'stats')
15575     pkt.Request(11, [
15576             rec(10, 1, FileSystemID ),
15577     ])
15578     pkt.Reply(68, [
15579             rec(8, 4, CurrentServerTime ),
15580             rec(12, 1, VConsoleVersion ),
15581             rec(13, 1, VConsoleRevision ),
15582             rec(14, 2, Reserved2 ),
15583             rec(16, 52, FileSystemInfo ),
15584     ])
15585     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15586     # 2222/7B04, 123/04
15587     pkt = NCP(0x7B04, "User Information", 'stats')
15588     pkt.Request(14, [
15589             rec(10, 4, ConnectionNumber, LE ),
15590     ])
15591     pkt.Reply((85, 132), [
15592             rec(8, 4, CurrentServerTime ),
15593             rec(12, 1, VConsoleVersion ),
15594             rec(13, 1, VConsoleRevision ),
15595             rec(14, 2, Reserved2 ),
15596             rec(16, 68, UserInformation ),
15597             rec(84, (1, 48), UserName ),
15598     ])
15599     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15600     # 2222/7B05, 123/05
15601     pkt = NCP(0x7B05, "Packet Burst Information", 'stats')
15602     pkt.Request(10)
15603     pkt.Reply(216, [
15604             rec(8, 4, CurrentServerTime ),
15605             rec(12, 1, VConsoleVersion ),
15606             rec(13, 1, VConsoleRevision ),
15607             rec(14, 2, Reserved2 ),
15608             rec(16, 200, PacketBurstInformation ),
15609     ])
15610     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15611     # 2222/7B06, 123/06
15612     pkt = NCP(0x7B06, "IPX SPX Information", 'stats')
15613     pkt.Request(10)
15614     pkt.Reply(94, [
15615             rec(8, 4, CurrentServerTime ),
15616             rec(12, 1, VConsoleVersion ),
15617             rec(13, 1, VConsoleRevision ),
15618             rec(14, 2, Reserved2 ),
15619             rec(16, 34, IPXInformation ),
15620             rec(50, 44, SPXInformation ),
15621     ])
15622     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15623     # 2222/7B07, 123/07
15624     pkt = NCP(0x7B07, "Garbage Collection Information", 'stats')
15625     pkt.Request(10)
15626     pkt.Reply(40, [
15627             rec(8, 4, CurrentServerTime ),
15628             rec(12, 1, VConsoleVersion ),
15629             rec(13, 1, VConsoleRevision ),
15630             rec(14, 2, Reserved2 ),
15631             rec(16, 4, FailedAllocReqCnt ),
15632             rec(20, 4, NumberOfAllocs ),
15633             rec(24, 4, NoMoreMemAvlCnt ),
15634             rec(28, 4, NumOfGarbageColl ),
15635             rec(32, 4, FoundSomeMem ),
15636             rec(36, 4, NumOfChecks ),
15637     ])
15638     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15639     # 2222/7B08, 123/08
15640     pkt = NCP(0x7B08, "CPU Information", 'stats')
15641     pkt.Request(14, [
15642             rec(10, 4, CPUNumber ),
15643     ])
15644     pkt.Reply(51, [
15645             rec(8, 4, CurrentServerTime ),
15646             rec(12, 1, VConsoleVersion ),
15647             rec(13, 1, VConsoleRevision ),
15648             rec(14, 2, Reserved2 ),
15649             rec(16, 4, NumberOfCPUs ),
15650             rec(20, 31, CPUInformation ),
15651     ])
15652     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15653     # 2222/7B09, 123/09
15654     pkt = NCP(0x7B09, "Volume Switch Information", 'stats')
15655     pkt.Request(14, [
15656             rec(10, 4, StartNumber )
15657     ])
15658     pkt.Reply(28, [
15659             rec(8, 4, CurrentServerTime ),
15660             rec(12, 1, VConsoleVersion ),
15661             rec(13, 1, VConsoleRevision ),
15662             rec(14, 2, Reserved2 ),
15663             rec(16, 4, TotalLFSCounters ),
15664             rec(20, 4, CurrentLFSCounters, var="x"),
15665             rec(24, 4, LFSCounters, repeat="x"),
15666     ])
15667     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15668     # 2222/7B0A, 123/10
15669     pkt = NCP(0x7B0A, "Get NLM Loaded List", 'stats')
15670     pkt.Request(14, [
15671             rec(10, 4, StartNumber )
15672     ])
15673     pkt.Reply(28, [
15674             rec(8, 4, CurrentServerTime ),
15675             rec(12, 1, VConsoleVersion ),
15676             rec(13, 1, VConsoleRevision ),
15677             rec(14, 2, Reserved2 ),
15678             rec(16, 4, NLMcount ),
15679             rec(20, 4, NLMsInList, var="x" ),
15680             rec(24, 4, NLMNumbers, repeat="x" ),
15681     ])
15682     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15683     # 2222/7B0B, 123/11
15684     pkt = NCP(0x7B0B, "NLM Information", 'stats')
15685     pkt.Request(14, [
15686             rec(10, 4, NLMNumber ),
15687     ])
15688     pkt.Reply(NO_LENGTH_CHECK, [
15689             rec(8, 4, CurrentServerTime ),
15690             rec(12, 1, VConsoleVersion ),
15691             rec(13, 1, VConsoleRevision ),
15692             rec(14, 2, Reserved2 ),
15693             rec(16, 60, NLMInformation ),
15694     # The remainder of this dissection is manually decoded in packet-ncp2222.inc
15695             #rec(-1, (1,255), FileName ),
15696             #rec(-1, (1,255), Name ),
15697             #rec(-1, (1,255), Copyright ),
15698     ])
15699     pkt.ReqCondSizeVariable()
15700     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15701     # 2222/7B0C, 123/12
15702     pkt = NCP(0x7B0C, "Get Directory Cache Information", 'stats')
15703     pkt.Request(10)
15704     pkt.Reply(72, [
15705             rec(8, 4, CurrentServerTime ),
15706             rec(12, 1, VConsoleVersion ),
15707             rec(13, 1, VConsoleRevision ),
15708             rec(14, 2, Reserved2 ),
15709             rec(16, 56, DirCacheInfo ),
15710     ])
15711     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15712     # 2222/7B0D, 123/13
15713     pkt = NCP(0x7B0D, "Get Operating System Version Information", 'stats')
15714     pkt.Request(10)
15715     pkt.Reply(70, [
15716             rec(8, 4, CurrentServerTime ),
15717             rec(12, 1, VConsoleVersion ),
15718             rec(13, 1, VConsoleRevision ),
15719             rec(14, 2, Reserved2 ),
15720             rec(16, 1, OSMajorVersion ),
15721             rec(17, 1, OSMinorVersion ),
15722             rec(18, 1, OSRevision ),
15723             rec(19, 1, AccountVersion ),
15724             rec(20, 1, VAPVersion ),
15725             rec(21, 1, QueueingVersion ),
15726             rec(22, 1, SecurityRestrictionVersion ),
15727             rec(23, 1, InternetBridgeVersion ),
15728             rec(24, 4, MaxNumOfVol ),
15729             rec(28, 4, MaxNumOfConn ),
15730             rec(32, 4, MaxNumOfUsers ),
15731             rec(36, 4, MaxNumOfNmeSps ),
15732             rec(40, 4, MaxNumOfLANS ),
15733             rec(44, 4, MaxNumOfMedias ),
15734             rec(48, 4, MaxNumOfStacks ),
15735             rec(52, 4, MaxDirDepth ),
15736             rec(56, 4, MaxDataStreams ),
15737             rec(60, 4, MaxNumOfSpoolPr ),
15738             rec(64, 4, ServerSerialNumber ),
15739             rec(68, 2, ServerAppNumber ),
15740     ])
15741     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15742     # 2222/7B0E, 123/14
15743     pkt = NCP(0x7B0E, "Get Active Connection List by Type", 'stats')
15744     pkt.Request(15, [
15745             rec(10, 4, StartConnNumber ),
15746             rec(14, 1, ConnectionType ),
15747     ])
15748     pkt.Reply(528, [
15749             rec(8, 4, CurrentServerTime ),
15750             rec(12, 1, VConsoleVersion ),
15751             rec(13, 1, VConsoleRevision ),
15752             rec(14, 2, Reserved2 ),
15753             rec(16, 512, ActiveConnBitList ),
15754     ])
15755     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfd01, 0xff00])
15756     # 2222/7B0F, 123/15
15757     pkt = NCP(0x7B0F, "Get NLM Resource Tag List", 'stats')
15758     pkt.Request(18, [
15759             rec(10, 4, NLMNumber ),
15760             rec(14, 4, NLMStartNumber ),
15761     ])
15762     pkt.Reply(37, [
15763             rec(8, 4, CurrentServerTime ),
15764             rec(12, 1, VConsoleVersion ),
15765             rec(13, 1, VConsoleRevision ),
15766             rec(14, 2, Reserved2 ),
15767             rec(16, 4, TtlNumOfRTags ),
15768             rec(20, 4, CurNumOfRTags ),
15769             rec(24, 13, RTagStructure ),
15770     ])
15771     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15772     # 2222/7B10, 123/16
15773     pkt = NCP(0x7B10, "Enumerate Connection Information from Connection List", 'stats')
15774     pkt.Request(22, [
15775             rec(10, 1, EnumInfoMask),
15776             rec(11, 3, Reserved3),
15777             rec(14, 4, itemsInList, var="x"),
15778             rec(18, 4, connList, repeat="x"),
15779     ])
15780     pkt.Reply(NO_LENGTH_CHECK, [
15781             rec(8, 4, CurrentServerTime ),
15782             rec(12, 1, VConsoleVersion ),
15783             rec(13, 1, VConsoleRevision ),
15784             rec(14, 2, Reserved2 ),
15785             rec(16, 4, ItemsInPacket ),
15786             srec(netAddr, req_cond="ncp.enum_info_transport==TRUE"),
15787             srec(timeInfo, req_cond="ncp.enum_info_time==TRUE"),
15788             srec(nameInfo, req_cond="ncp.enum_info_name==TRUE"),
15789             srec(lockInfo, req_cond="ncp.enum_info_lock==TRUE"),
15790             srec(printInfo, req_cond="ncp.enum_info_print==TRUE"),
15791             srec(statsInfo, req_cond="ncp.enum_info_stats==TRUE"),
15792             srec(acctngInfo, req_cond="ncp.enum_info_account==TRUE"),
15793             srec(authInfo, req_cond="ncp.enum_info_auth==TRUE"),
15794     ])
15795     pkt.ReqCondSizeVariable()
15796     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15797     # 2222/7B11, 123/17
15798     pkt = NCP(0x7B11, "Enumerate NCP Service Network Addresses", 'stats')
15799     pkt.Request(14, [
15800             rec(10, 4, SearchNumber ),
15801     ])
15802     pkt.Reply(36, [
15803             rec(8, 4, CurrentServerTime ),
15804             rec(12, 1, VConsoleVersion ),
15805             rec(13, 1, VConsoleRevision ),
15806             rec(14, 2, ServerInfoFlags ),
15807     rec(16, 16, GUID ),
15808     rec(32, 4, NextSearchNum ),
15809     # The following two items are dissected in packet-ncp2222.inc
15810     #rec(36, 4, ItemsInPacket, var="x"),
15811     #rec(40, 20, NCPNetworkAddress, repeat="x" ),
15812     ])
15813     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb01, 0xff00])
15814     # 2222/7B14, 123/20
15815     pkt = NCP(0x7B14, "Active LAN Board List", 'stats')
15816     pkt.Request(14, [
15817             rec(10, 4, StartNumber ),
15818     ])
15819     pkt.Reply(28, [
15820             rec(8, 4, CurrentServerTime ),
15821             rec(12, 1, VConsoleVersion ),
15822             rec(13, 1, VConsoleRevision ),
15823             rec(14, 2, Reserved2 ),
15824             rec(16, 4, MaxNumOfLANS ),
15825             rec(20, 4, ItemsInPacket, var="x"),
15826             rec(24, 4, BoardNumbers, repeat="x"),
15827     ])
15828     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15829     # 2222/7B15, 123/21
15830     pkt = NCP(0x7B15, "LAN Configuration Information", 'stats')
15831     pkt.Request(14, [
15832             rec(10, 4, BoardNumber ),
15833     ])
15834     pkt.Reply(152, [
15835             rec(8, 4, CurrentServerTime ),
15836             rec(12, 1, VConsoleVersion ),
15837             rec(13, 1, VConsoleRevision ),
15838             rec(14, 2, Reserved2 ),
15839             rec(16,136, LANConfigInfo ),
15840     ])
15841     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15842     # 2222/7B16, 123/22
15843     pkt = NCP(0x7B16, "LAN Common Counters Information", 'stats')
15844     pkt.Request(18, [
15845             rec(10, 4, BoardNumber ),
15846             rec(14, 4, BlockNumber ),
15847     ])
15848     pkt.Reply(86, [
15849             rec(8, 4, CurrentServerTime ),
15850             rec(12, 1, VConsoleVersion ),
15851             rec(13, 1, VConsoleRevision ),
15852             rec(14, 1, StatMajorVersion ),
15853             rec(15, 1, StatMinorVersion ),
15854             rec(16, 4, TotalCommonCnts ),
15855             rec(20, 4, TotalCntBlocks ),
15856             rec(24, 4, CustomCounters ),
15857             rec(28, 4, NextCntBlock ),
15858             rec(32, 54, CommonLanStruc ),
15859     ])
15860     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15861     # 2222/7B17, 123/23
15862     pkt = NCP(0x7B17, "LAN Custom Counters Information", 'stats')
15863     pkt.Request(18, [
15864             rec(10, 4, BoardNumber ),
15865             rec(14, 4, StartNumber ),
15866     ])
15867     pkt.Reply(25, [
15868             rec(8, 4, CurrentServerTime ),
15869             rec(12, 1, VConsoleVersion ),
15870             rec(13, 1, VConsoleRevision ),
15871             rec(14, 2, Reserved2 ),
15872             rec(16, 4, NumOfCCinPkt, var="x"),
15873             rec(20, 5, CustomCntsInfo, repeat="x"),
15874     ])
15875     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15876     # 2222/7B18, 123/24
15877     pkt = NCP(0x7B18, "LAN Name Information", 'stats')
15878     pkt.Request(14, [
15879             rec(10, 4, BoardNumber ),
15880     ])
15881     pkt.Reply(NO_LENGTH_CHECK, [
15882             rec(8, 4, CurrentServerTime ),
15883             rec(12, 1, VConsoleVersion ),
15884             rec(13, 1, VConsoleRevision ),
15885             rec(14, 2, Reserved2 ),
15886     rec(16, PROTO_LENGTH_UNKNOWN, DriverBoardName ),
15887     rec(-1, PROTO_LENGTH_UNKNOWN, DriverShortName ),
15888     rec(-1, PROTO_LENGTH_UNKNOWN, DriverLogicalName ),
15889     ])
15890     pkt.ReqCondSizeVariable()
15891     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15892     # 2222/7B19, 123/25
15893     pkt = NCP(0x7B19, "LSL Information", 'stats')
15894     pkt.Request(10)
15895     pkt.Reply(90, [
15896             rec(8, 4, CurrentServerTime ),
15897             rec(12, 1, VConsoleVersion ),
15898             rec(13, 1, VConsoleRevision ),
15899             rec(14, 2, Reserved2 ),
15900             rec(16, 74, LSLInformation ),
15901     ])
15902     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15903     # 2222/7B1A, 123/26
15904     pkt = NCP(0x7B1A, "LSL Logical Board Statistics", 'stats')
15905     pkt.Request(14, [
15906             rec(10, 4, BoardNumber ),
15907     ])
15908     pkt.Reply(28, [
15909             rec(8, 4, CurrentServerTime ),
15910             rec(12, 1, VConsoleVersion ),
15911             rec(13, 1, VConsoleRevision ),
15912             rec(14, 2, Reserved2 ),
15913             rec(16, 4, LogTtlTxPkts ),
15914             rec(20, 4, LogTtlRxPkts ),
15915             rec(24, 4, UnclaimedPkts ),
15916     ])
15917     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15918     # 2222/7B1B, 123/27
15919     pkt = NCP(0x7B1B, "MLID Board Information", 'stats')
15920     pkt.Request(14, [
15921             rec(10, 4, BoardNumber ),
15922     ])
15923     pkt.Reply(44, [
15924             rec(8, 4, CurrentServerTime ),
15925             rec(12, 1, VConsoleVersion ),
15926             rec(13, 1, VConsoleRevision ),
15927             rec(14, 1, Reserved ),
15928             rec(15, 1, NumberOfProtocols ),
15929             rec(16, 28, MLIDBoardInfo ),
15930     ])
15931     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15932     # 2222/7B1E, 123/30
15933     pkt = NCP(0x7B1E, "Get Media Manager Object Information", 'stats')
15934     pkt.Request(14, [
15935             rec(10, 4, ObjectNumber ),
15936     ])
15937     pkt.Reply(212, [
15938             rec(8, 4, CurrentServerTime ),
15939             rec(12, 1, VConsoleVersion ),
15940             rec(13, 1, VConsoleRevision ),
15941             rec(14, 2, Reserved2 ),
15942             rec(16, 196, GenericInfoDef ),
15943     ])
15944     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15945     # 2222/7B1F, 123/31
15946     pkt = NCP(0x7B1F, "Get Media Manager Objects List", 'stats')
15947     pkt.Request(15, [
15948             rec(10, 4, StartNumber ),
15949             rec(14, 1, MediaObjectType ),
15950     ])
15951     pkt.Reply(28, [
15952             rec(8, 4, CurrentServerTime ),
15953             rec(12, 1, VConsoleVersion ),
15954             rec(13, 1, VConsoleRevision ),
15955             rec(14, 2, Reserved2 ),
15956             rec(16, 4, nextStartingNumber ),
15957             rec(20, 4, ObjectCount, var="x"),
15958             rec(24, 4, ObjectID, repeat="x"),
15959     ])
15960     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15961     # 2222/7B20, 123/32
15962     pkt = NCP(0x7B20, "Get Media Manager Object Childrens List", 'stats')
15963     pkt.Request(22, [
15964             rec(10, 4, StartNumber ),
15965             rec(14, 1, MediaObjectType ),
15966             rec(15, 3, Reserved3 ),
15967             rec(18, 4, ParentObjectNumber ),
15968     ])
15969     pkt.Reply(28, [
15970             rec(8, 4, CurrentServerTime ),
15971             rec(12, 1, VConsoleVersion ),
15972             rec(13, 1, VConsoleRevision ),
15973             rec(14, 2, Reserved2 ),
15974             rec(16, 4, nextStartingNumber ),
15975             rec(20, 4, ObjectCount, var="x" ),
15976             rec(24, 4, ObjectID, repeat="x" ),
15977     ])
15978     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
15979     # 2222/7B21, 123/33
15980     pkt = NCP(0x7B21, "Get Volume Segment List", 'stats')
15981     pkt.Request(14, [
15982             rec(10, 4, VolumeNumberLong ),
15983     ])
15984     pkt.Reply(32, [
15985             rec(8, 4, CurrentServerTime ),
15986             rec(12, 1, VConsoleVersion ),
15987             rec(13, 1, VConsoleRevision ),
15988             rec(14, 2, Reserved2 ),
15989             rec(16, 4, NumOfSegments, var="x" ),
15990             rec(20, 12, Segments, repeat="x" ),
15991     ])
15992     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0x9801, 0xfb06, 0xff00])
15993     # 2222/7B22, 123/34
15994     pkt = NCP(0x7B22, "Get Volume Information by Level", 'stats')
15995     pkt.Request(15, [
15996             rec(10, 4, VolumeNumberLong ),
15997             rec(14, 1, InfoLevelNumber ),
15998     ])
15999     pkt.Reply(NO_LENGTH_CHECK, [
16000             rec(8, 4, CurrentServerTime ),
16001             rec(12, 1, VConsoleVersion ),
16002             rec(13, 1, VConsoleRevision ),
16003             rec(14, 2, Reserved2 ),
16004             rec(16, 1, InfoLevelNumber ),
16005             rec(17, 3, Reserved3 ),
16006             srec(VolInfoStructure, req_cond="ncp.info_level_num==0x01"),
16007             srec(VolInfo2Struct, req_cond="ncp.info_level_num==0x02"),
16008     ])
16009     pkt.ReqCondSizeVariable()
16010     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
16011     # 2222/7B28, 123/40
16012     pkt = NCP(0x7B28, "Active Protocol Stacks", 'stats')
16013     pkt.Request(14, [
16014             rec(10, 4, StartNumber ),
16015     ])
16016     pkt.Reply(48, [
16017             rec(8, 4, CurrentServerTime ),
16018             rec(12, 1, VConsoleVersion ),
16019             rec(13, 1, VConsoleRevision ),
16020             rec(14, 2, Reserved2 ),
16021             rec(16, 4, MaxNumOfLANS ),
16022             rec(20, 4, StackCount, var="x" ),
16023             rec(24, 4, nextStartingNumber ),
16024             rec(28, 20, StackInfo, repeat="x" ),
16025     ])
16026     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
16027     # 2222/7B29, 123/41
16028     pkt = NCP(0x7B29, "Get Protocol Stack Configuration Information", 'stats')
16029     pkt.Request(14, [
16030             rec(10, 4, StackNumber ),
16031     ])
16032     pkt.Reply((37,164), [
16033             rec(8, 4, CurrentServerTime ),
16034             rec(12, 1, VConsoleVersion ),
16035             rec(13, 1, VConsoleRevision ),
16036             rec(14, 2, Reserved2 ),
16037             rec(16, 1, ConfigMajorVN ),
16038             rec(17, 1, ConfigMinorVN ),
16039             rec(18, 1, StackMajorVN ),
16040             rec(19, 1, StackMinorVN ),
16041             rec(20, 16, ShortStkName ),
16042             rec(36, (1,128), StackFullNameStr ),
16043     ])
16044     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
16045     # 2222/7B2A, 123/42
16046     pkt = NCP(0x7B2A, "Get Protocol Stack Statistics Information", 'stats')
16047     pkt.Request(14, [
16048             rec(10, 4, StackNumber ),
16049     ])
16050     pkt.Reply(38, [
16051             rec(8, 4, CurrentServerTime ),
16052             rec(12, 1, VConsoleVersion ),
16053             rec(13, 1, VConsoleRevision ),
16054             rec(14, 2, Reserved2 ),
16055             rec(16, 1, StatMajorVersion ),
16056             rec(17, 1, StatMinorVersion ),
16057             rec(18, 2, ComCnts ),
16058             rec(20, 4, CounterMask ),
16059             rec(24, 4, TotalTxPkts ),
16060             rec(28, 4, TotalRxPkts ),
16061             rec(32, 4, IgnoredRxPkts ),
16062             rec(36, 2, CustomCnts ),
16063     ])
16064     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
16065     # 2222/7B2B, 123/43
16066     pkt = NCP(0x7B2B, "Get Protocol Stack Custom Information", 'stats')
16067     pkt.Request(18, [
16068             rec(10, 4, StackNumber ),
16069             rec(14, 4, StartNumber ),
16070     ])
16071     pkt.Reply(25, [
16072             rec(8, 4, CurrentServerTime ),
16073             rec(12, 1, VConsoleVersion ),
16074             rec(13, 1, VConsoleRevision ),
16075             rec(14, 2, Reserved2 ),
16076             rec(16, 4, CustomCount, var="x" ),
16077             rec(20, 5, CustomCntsInfo, repeat="x" ),
16078     ])
16079     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
16080     # 2222/7B2C, 123/44
16081     pkt = NCP(0x7B2C, "Get Protocol Stack Numbers by Media Number", 'stats')
16082     pkt.Request(14, [
16083             rec(10, 4, MediaNumber ),
16084     ])
16085     pkt.Reply(24, [
16086             rec(8, 4, CurrentServerTime ),
16087             rec(12, 1, VConsoleVersion ),
16088             rec(13, 1, VConsoleRevision ),
16089             rec(14, 2, Reserved2 ),
16090             rec(16, 4, StackCount, var="x" ),
16091             rec(20, 4, StackNumber, repeat="x" ),
16092     ])
16093     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
16094     # 2222/7B2D, 123/45
16095     pkt = NCP(0x7B2D, "Get Protocol Stack Numbers by LAN Board Number", 'stats')
16096     pkt.Request(14, [
16097             rec(10, 4, BoardNumber ),
16098     ])
16099     pkt.Reply(24, [
16100             rec(8, 4, CurrentServerTime ),
16101             rec(12, 1, VConsoleVersion ),
16102             rec(13, 1, VConsoleRevision ),
16103             rec(14, 2, Reserved2 ),
16104             rec(16, 4, StackCount, var="x" ),
16105             rec(20, 4, StackNumber, repeat="x" ),
16106     ])
16107     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
16108     # 2222/7B2E, 123/46
16109     pkt = NCP(0x7B2E, "Get Media Name by Media Number", 'stats')
16110     pkt.Request(14, [
16111             rec(10, 4, MediaNumber ),
16112     ])
16113     pkt.Reply((17,144), [
16114             rec(8, 4, CurrentServerTime ),
16115             rec(12, 1, VConsoleVersion ),
16116             rec(13, 1, VConsoleRevision ),
16117             rec(14, 2, Reserved2 ),
16118             rec(16, (1,128), MediaName ),
16119     ])
16120     pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
16121     # 2222/7B2F, 123/47
16122     pkt = NCP(0x7B2F, "Get Loaded Media Number", 'stats')
16123     pkt.Request(10)
16124     pkt.Reply(28, [
16125             rec(8, 4, CurrentServerTime ),
16126             rec(12, 1, VConsoleVersion ),
16127             rec(13, 1, VConsoleRevision ),
16128             rec(14, 2, Reserved2 ),
16129             rec(16, 4, MaxNumOfMedias ),
16130             rec(20, 4, MediaListCount, var="x" ),
16131             rec(24, 4, MediaList, repeat="x" ),
16132     ])
16133     pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
16134     # 2222/7B32, 123/50
16135     pkt = NCP(0x7B32, "Get General Router and SAP Information", 'stats')
16136     pkt.Request(10)
16137     pkt.Reply(37, [
16138             rec(8, 4, CurrentServerTime ),
16139             rec(12, 1, VConsoleVersion ),
16140             rec(13, 1, VConsoleRevision ),
16141             rec(14, 2, Reserved2 ),
16142             rec(16, 2, RIPSocketNumber ),
16143             rec(18, 2, Reserved2 ),
16144             rec(20, 1, RouterDownFlag ),
16145             rec(21, 3, Reserved3 ),
16146             rec(24, 1, TrackOnFlag ),
16147             rec(25, 3, Reserved3 ),
16148             rec(28, 1, ExtRouterActiveFlag ),
16149             rec(29, 3, Reserved3 ),
16150             rec(32, 2, SAPSocketNumber ),
16151             rec(34, 2, Reserved2 ),
16152             rec(36, 1, RpyNearestSrvFlag ),
16153     ])
16154     pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
16155     # 2222/7B33, 123/51
16156     pkt = NCP(0x7B33, "Get Network Router Information", 'stats')
16157     pkt.Request(14, [
16158             rec(10, 4, NetworkNumber ),
16159     ])
16160     pkt.Reply(26, [
16161             rec(8, 4, CurrentServerTime ),
16162             rec(12, 1, VConsoleVersion ),
16163             rec(13, 1, VConsoleRevision ),
16164             rec(14, 2, Reserved2 ),
16165             rec(16, 10, KnownRoutes ),
16166     ])
16167     pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
16168     # 2222/7B34, 123/52
16169     pkt = NCP(0x7B34, "Get Network Routers Information", 'stats')
16170     pkt.Request(18, [
16171             rec(10, 4, NetworkNumber),
16172             rec(14, 4, StartNumber ),
16173     ])
16174     pkt.Reply(34, [
16175             rec(8, 4, CurrentServerTime ),
16176             rec(12, 1, VConsoleVersion ),
16177             rec(13, 1, VConsoleRevision ),
16178             rec(14, 2, Reserved2 ),
16179             rec(16, 4, NumOfEntries, var="x" ),
16180             rec(20, 14, RoutersInfo, repeat="x" ),
16181     ])
16182     pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
16183     # 2222/7B35, 123/53
16184     pkt = NCP(0x7B35, "Get Known Networks Information", 'stats')
16185     pkt.Request(14, [
16186             rec(10, 4, StartNumber ),
16187     ])
16188     pkt.Reply(30, [
16189             rec(8, 4, CurrentServerTime ),
16190             rec(12, 1, VConsoleVersion ),
16191             rec(13, 1, VConsoleRevision ),
16192             rec(14, 2, Reserved2 ),
16193             rec(16, 4, NumOfEntries, var="x" ),
16194             rec(20, 10, KnownRoutes, repeat="x" ),
16195     ])
16196     pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
16197     # 2222/7B36, 123/54
16198     pkt = NCP(0x7B36, "Get Server Information", 'stats')
16199     pkt.Request((15,64), [
16200             rec(10, 2, ServerType ),
16201             rec(12, 2, Reserved2 ),
16202             rec(14, (1,50), ServerNameLen ),
16203     ], info_str=(ServerNameLen, "Get Server Information: %s", ", %s"))
16204     pkt.Reply(30, [
16205             rec(8, 4, CurrentServerTime ),
16206             rec(12, 1, VConsoleVersion ),
16207             rec(13, 1, VConsoleRevision ),
16208             rec(14, 2, Reserved2 ),
16209             rec(16, 12, ServerAddress ),
16210             rec(28, 2, HopsToNet ),
16211     ])
16212     pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
16213     # 2222/7B37, 123/55
16214     pkt = NCP(0x7B37, "Get Server Sources Information", 'stats')
16215     pkt.Request((19,68), [
16216             rec(10, 4, StartNumber ),
16217             rec(14, 2, ServerType ),
16218             rec(16, 2, Reserved2 ),
16219             rec(18, (1,50), ServerNameLen ),
16220     ], info_str=(ServerNameLen, "Get Server Sources Info: %s", ", %s"))
16221     pkt.Reply(32, [
16222             rec(8, 4, CurrentServerTime ),
16223             rec(12, 1, VConsoleVersion ),
16224             rec(13, 1, VConsoleRevision ),
16225             rec(14, 2, Reserved2 ),
16226             rec(16, 4, NumOfEntries, var="x" ),
16227             rec(20, 12, ServersSrcInfo, repeat="x" ),
16228     ])
16229     pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
16230     # 2222/7B38, 123/56
16231     pkt = NCP(0x7B38, "Get Known Servers Information", 'stats')
16232     pkt.Request(16, [
16233             rec(10, 4, StartNumber ),
16234             rec(14, 2, ServerType ),
16235     ])
16236     pkt.Reply(35, [
16237             rec(8, 4, CurrentServerTime ),
16238             rec(12, 1, VConsoleVersion ),
16239             rec(13, 1, VConsoleRevision ),
16240             rec(14, 2, Reserved2 ),
16241             rec(16, 4, NumOfEntries, var="x" ),
16242             rec(20, 15, KnownServStruc, repeat="x" ),
16243     ])
16244     pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
16245     # 2222/7B3C, 123/60
16246     pkt = NCP(0x7B3C, "Get Server Set Commands Information", 'stats')
16247     pkt.Request(14, [
16248             rec(10, 4, StartNumber ),
16249     ])
16250     pkt.Reply(NO_LENGTH_CHECK, [
16251             rec(8, 4, CurrentServerTime ),
16252             rec(12, 1, VConsoleVersion ),
16253             rec(13, 1, VConsoleRevision ),
16254             rec(14, 2, Reserved2 ),
16255             rec(16, 4, TtlNumOfSetCmds ),
16256             rec(20, 4, nextStartingNumber ),
16257             rec(24, 1, SetCmdType ),
16258             rec(25, 3, Reserved3 ),
16259             rec(28, 1, SetCmdCategory ),
16260             rec(29, 3, Reserved3 ),
16261             rec(32, 1, SetCmdFlags ),
16262             rec(33, 3, Reserved3 ),
16263             rec(36, PROTO_LENGTH_UNKNOWN, SetCmdName ),
16264             rec(-1, 4, SetCmdValueNum ),
16265     ])
16266     pkt.ReqCondSizeVariable()
16267     pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
16268     # 2222/7B3D, 123/61
16269     pkt = NCP(0x7B3D, "Get Server Set Categories", 'stats')
16270     pkt.Request(14, [
16271             rec(10, 4, StartNumber ),
16272     ])
16273     pkt.Reply(NO_LENGTH_CHECK, [
16274             rec(8, 4, CurrentServerTime ),
16275             rec(12, 1, VConsoleVersion ),
16276             rec(13, 1, VConsoleRevision ),
16277             rec(14, 2, Reserved2 ),
16278             rec(16, 4, NumberOfSetCategories ),
16279             rec(20, 4, nextStartingNumber ),
16280             rec(24, PROTO_LENGTH_UNKNOWN, CategoryName ),
16281     ])
16282     pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
16283     # 2222/7B3E, 123/62
16284     pkt = NCP(0x7B3E, "Get Server Set Commands Information By Name", 'stats')
16285     pkt.Request(NO_LENGTH_CHECK, [
16286             rec(10, PROTO_LENGTH_UNKNOWN, SetParmName ),
16287     ], info_str=(SetParmName, "Get Server Set Command Info for: %s", ", %s"))
16288     pkt.Reply(NO_LENGTH_CHECK, [
16289             rec(8, 4, CurrentServerTime ),
16290             rec(12, 1, VConsoleVersion ),
16291             rec(13, 1, VConsoleRevision ),
16292             rec(14, 2, Reserved2 ),
16293     rec(16, 4, TtlNumOfSetCmds ),
16294     rec(20, 4, nextStartingNumber ),
16295     rec(24, 1, SetCmdType ),
16296     rec(25, 3, Reserved3 ),
16297     rec(28, 1, SetCmdCategory ),
16298     rec(29, 3, Reserved3 ),
16299     rec(32, 1, SetCmdFlags ),
16300     rec(33, 3, Reserved3 ),
16301     rec(36, PROTO_LENGTH_UNKNOWN, SetCmdName ),
16302     # The value of the set command is decoded in packet-ncp2222.inc
16303     ])
16304     pkt.ReqCondSizeVariable()
16305     pkt.CompletionCodes([0x0000, 0x7e01, 0xc600, 0xfb06, 0xff22])
16306     # 2222/7B46, 123/70
16307     pkt = NCP(0x7B46, "Get Current Compressing File", 'stats')
16308     pkt.Request(14, [
16309             rec(10, 4, VolumeNumberLong ),
16310     ])
16311     pkt.Reply(56, [
16312             rec(8, 4, ParentID ),
16313             rec(12, 4, DirectoryEntryNumber ),
16314             rec(16, 4, compressionStage ),
16315             rec(20, 4, ttlIntermediateBlks ),
16316             rec(24, 4, ttlCompBlks ),
16317             rec(28, 4, curIntermediateBlks ),
16318             rec(32, 4, curCompBlks ),
16319             rec(36, 4, curInitialBlks ),
16320             rec(40, 4, fileFlags ),
16321             rec(44, 4, projectedCompSize ),
16322             rec(48, 4, originalSize ),
16323             rec(52, 4, compressVolume ),
16324     ])
16325     pkt.CompletionCodes([0x0000, 0x7e00, 0x7901, 0x9801, 0xfb06, 0xff00])
16326     # 2222/7B47, 123/71
16327     pkt = NCP(0x7B47, "Get Current DeCompressing File Info List", 'stats')
16328     pkt.Request(14, [
16329             rec(10, 4, VolumeNumberLong ),
16330     ])
16331     pkt.Reply(24, [
16332             #rec(8, 4, FileListCount ),
16333             rec(8, 16, FileInfoStruct ),
16334     ])
16335     pkt.CompletionCodes([0x0000, 0x7e00, 0x9801, 0xfb06, 0xff00])
16336     # 2222/7B48, 123/72
16337     pkt = NCP(0x7B48, "Get Compression and Decompression Time and Counts", 'stats')
16338     pkt.Request(14, [
16339             rec(10, 4, VolumeNumberLong ),
16340     ])
16341     pkt.Reply(64, [
16342             rec(8, 56, CompDeCompStat ),
16343     ])
16344     pkt.CompletionCodes([0x0000, 0x7e00, 0x9801, 0xfb06, 0xff00])
16345     # 2222/7BF9, 123/249
16346     pkt = NCP(0x7BF9, "Set Alert Notification", 'stats')
16347     pkt.Request(10)
16348     pkt.Reply(8)
16349     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
16350     # 2222/7BFB, 123/251
16351     pkt = NCP(0x7BFB, "Get Item Configuration Information", 'stats')
16352     pkt.Request(10)
16353     pkt.Reply(8)
16354     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
16355     # 2222/7BFC, 123/252
16356     pkt = NCP(0x7BFC, "Get Subject Item ID List", 'stats')
16357     pkt.Request(10)
16358     pkt.Reply(8)
16359     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
16360     # 2222/7BFD, 123/253
16361     pkt = NCP(0x7BFD, "Get Subject Item List Count", 'stats')
16362     pkt.Request(10)
16363     pkt.Reply(8)
16364     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
16365     # 2222/7BFE, 123/254
16366     pkt = NCP(0x7BFE, "Get Subject ID List", 'stats')
16367     pkt.Request(10)
16368     pkt.Reply(8)
16369     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
16370     # 2222/7BFF, 123/255
16371     pkt = NCP(0x7BFF, "Get Number of NetMan Subjects", 'stats')
16372     pkt.Request(10)
16373     pkt.Reply(8)
16374     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
16375     # 2222/8301, 131/01
16376     pkt = NCP(0x8301, "RPC Load an NLM", 'remote')
16377     pkt.Request(NO_LENGTH_CHECK, [
16378             rec(10, 4, NLMLoadOptions ),
16379             rec(14, 16, Reserved16 ),
16380             rec(30, PROTO_LENGTH_UNKNOWN, PathAndName ),
16381     ], info_str=(PathAndName, "RPC Load NLM: %s", ", %s"))
16382     pkt.Reply(12, [
16383             rec(8, 4, RPCccode ),
16384     ])
16385     pkt.CompletionCodes([0x0000, 0x7c00, 0x7e00, 0xfb07, 0xff00])
16386     # 2222/8302, 131/02
16387     pkt = NCP(0x8302, "RPC Unload an NLM", 'remote')
16388     pkt.Request(NO_LENGTH_CHECK, [
16389             rec(10, 20, Reserved20 ),
16390             rec(30, PROTO_LENGTH_UNKNOWN, NLMName ),
16391     ], info_str=(NLMName, "RPC Unload NLM: %s", ", %s"))
16392     pkt.Reply(12, [
16393             rec(8, 4, RPCccode ),
16394     ])
16395     pkt.CompletionCodes([0x0000, 0x7c00, 0x7e00, 0xfb07, 0xff00])
16396     # 2222/8303, 131/03
16397     pkt = NCP(0x8303, "RPC Mount Volume", 'remote')
16398     pkt.Request(NO_LENGTH_CHECK, [
16399             rec(10, 20, Reserved20 ),
16400             rec(30, PROTO_LENGTH_UNKNOWN, VolumeNameStringz ),
16401     ], info_str=(VolumeNameStringz, "RPC Mount Volume: %s", ", %s"))
16402     pkt.Reply(32, [
16403             rec(8, 4, RPCccode),
16404             rec(12, 16, Reserved16 ),
16405             rec(28, 4, VolumeNumberLong ),
16406     ])
16407     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
16408     # 2222/8304, 131/04
16409     pkt = NCP(0x8304, "RPC Dismount Volume", 'remote')
16410     pkt.Request(NO_LENGTH_CHECK, [
16411             rec(10, 20, Reserved20 ),
16412             rec(30, PROTO_LENGTH_UNKNOWN, VolumeNameStringz ),
16413     ], info_str=(VolumeNameStringz, "RPC Dismount Volume: %s", ", %s"))
16414     pkt.Reply(12, [
16415             rec(8, 4, RPCccode ),
16416     ])
16417     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
16418     # 2222/8305, 131/05
16419     pkt = NCP(0x8305, "RPC Add Name Space To Volume", 'remote')
16420     pkt.Request(NO_LENGTH_CHECK, [
16421             rec(10, 20, Reserved20 ),
16422             rec(30, PROTO_LENGTH_UNKNOWN, AddNameSpaceAndVol ),
16423     ], info_str=(AddNameSpaceAndVol, "RPC Add Name Space to Volume: %s", ", %s"))
16424     pkt.Reply(12, [
16425             rec(8, 4, RPCccode ),
16426     ])
16427     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
16428     # 2222/8306, 131/06
16429     pkt = NCP(0x8306, "RPC Set Command Value", 'remote')
16430     pkt.Request(NO_LENGTH_CHECK, [
16431             rec(10, 1, SetCmdType ),
16432             rec(11, 3, Reserved3 ),
16433             rec(14, 4, SetCmdValueNum ),
16434             rec(18, 12, Reserved12 ),
16435             rec(30, PROTO_LENGTH_UNKNOWN, SetCmdName ),
16436             #
16437             # XXX - optional string, if SetCmdType is 0
16438             #
16439     ], info_str=(SetCmdName, "RPC Set Command Value: %s", ", %s"))
16440     pkt.Reply(12, [
16441             rec(8, 4, RPCccode ),
16442     ])
16443     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
16444     # 2222/8307, 131/07
16445     pkt = NCP(0x8307, "RPC Execute NCF File", 'remote')
16446     pkt.Request(NO_LENGTH_CHECK, [
16447             rec(10, 20, Reserved20 ),
16448             rec(30, PROTO_LENGTH_UNKNOWN, PathAndName ),
16449     ], info_str=(PathAndName, "RPC Execute NCF File: %s", ", %s"))
16450     pkt.Reply(12, [
16451             rec(8, 4, RPCccode ),
16452     ])
16453     pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
16454 if __name__ == '__main__':
16455 #       import profile
16456 #       filename = "ncp.pstats"
16457 #       profile.run("main()", filename)
16458 #
16459 #       import pstats
16460 #       sys.stdout = msg
16461 #       p = pstats.Stats(filename)
16462 #
16463 #       print "Stats sorted by cumulative time"
16464 #       p.strip_dirs().sort_stats('cumulative').print_stats()
16465 #
16466 #       print "Function callees"
16467 #       p.print_callees()
16468     main()