FileSize appears to be big-endian in DOSFileEntryStruct and FileInstance
[obnox/wireshark/wip.git] / ncp2222.py
1 #!/usr/bin/env python
2                                       
3 """
4 Creates C code from a table of NCP type 0x2222 packet types.
5 (And 0x3333, which are the replies, but the packets are more commonly
6 refered to as type 0x2222; the 0x3333 replies are understood to be
7 part of the 0x2222 "family")
8
9 The data-munging code was written by Gilbert Ramirez.
10 The NCP data comes from Greg Morris <GMORRIS@novell.com>.
11 Many thanks to Novell for letting him work on this.
12
13 Additional data sources:
14 "Programmer's Guide to the NetWare Core Protocol" by Steve Conner and Dianne Conner.
15
16 Novell provides info at:
17
18 http://developer.novell.com/ndk  (where you can download an *.exe file which
19 installs a PDF)
20
21 or
22
23 http://developer.novell.com/ndk/doc/docui/index.htm#../ncp/ncp__enu/data/
24 for a badly-formatted HTML version of the same PDF.
25
26
27 $Id: ncp2222.py,v 1.44 2003/02/05 06:24:30 guy Exp $
28
29
30 Copyright (c) 2000-2002 by Gilbert Ramirez <gram@alumni.rice.edu>
31 and Greg Morris <GMORRIS@novell.com>.
32
33 This program is free software; you can redistribute it and/or
34 modify it under the terms of the GNU General Public License
35 as published by the Free Software Foundation; either version 2
36 of the License, or (at your option) any later version.
37  
38 This program is distributed in the hope that it will be useful,
39 but WITHOUT ANY WARRANTY; without even the implied warranty of
40 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
41 GNU General Public License for more details.
42  
43 You should have received a copy of the GNU General Public License
44 along with this program; if not, write to the Free Software
45 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
46 """
47
48 import os
49 import sys
50 import string
51 import getopt
52 import traceback
53
54 errors          = {}
55 groups          = {}
56 packets         = []
57 compcode_lists  = None
58 ptvc_lists      = None
59 msg             = None
60
61 REC_START       = 0
62 REC_LENGTH      = 1
63 REC_FIELD       = 2
64 REC_ENDIANNESS  = 3
65 REC_VAR         = 4
66 REC_REPEAT      = 5
67 REC_REQ_COND    = 6
68
69 NO_VAR          = -1
70 NO_REPEAT       = -1
71 NO_REQ_COND     = -1
72 NO_LENGTH_CHECK = -2
73
74
75 PROTO_LENGTH_UNKNOWN    = -1
76
77 global_highest_var = -1
78 global_req_cond = {}
79
80
81 REQ_COND_SIZE_VARIABLE = "REQ_COND_SIZE_VARIABLE"
82 REQ_COND_SIZE_CONSTANT = "REQ_COND_SIZE_CONSTANT"
83
84 ##############################################################################
85 # Global containers
86 ##############################################################################
87
88 class UniqueCollection:
89         """The UniqueCollection class stores objects which can be compared to other
90         objects of the same class. If two objects in the collection are equivalent,
91         only one is stored."""
92
93         def __init__(self, name):
94                 "Constructor"
95                 self.name = name
96                 self.members = []
97                 self.member_reprs = {}
98
99         def Add(self, object):
100                 """Add an object to the members lists, if a comparable object
101                 doesn't already exist. The object that is in the member list, that is
102                 either the object that was added or the comparable object that was
103                 already in the member list, is returned."""
104
105                 r = repr(object)
106                 # Is 'object' a duplicate of some other member?
107                 if self.member_reprs.has_key(r):
108                         return self.member_reprs[r]
109                 else:
110                         self.member_reprs[r] = object
111                         self.members.append(object)
112                         return object
113
114         def Members(self):
115                 "Returns the list of members."
116                 return self.members
117
118         def HasMember(self, object):
119                 "Does the list of members contain the object?"
120                 if self.members_reprs.has_key(repr(object)):
121                         return 1
122                 else:
123                         return 0
124
125 # This list needs to be defined before the NCP types are defined,
126 # because the NCP types are defined in the global scope, not inside
127 # a function's scope.
128 ptvc_lists      = UniqueCollection('PTVC Lists')
129
130 ##############################################################################
131
132 class NamedList:
133         "NamedList's keep track of PTVC's and Completion Codes"
134         def __init__(self, name, list):
135                 "Constructor"
136                 self.name = name
137                 self.list = list
138
139         def __cmp__(self, other):
140                 "Compare this NamedList to another"
141
142                 if isinstance(other, NamedList):
143                         return cmp(self.list, other.list)
144                 else:
145                         return 0
146
147
148         def Name(self, new_name = None):
149                 "Get/Set name of list"
150                 if new_name != None:
151                         self.name = new_name
152                 return self.name
153
154         def Records(self):
155                 "Returns record lists"
156                 return self.list
157
158         def Null(self):
159                 "Is there no list (different from an empty list)?"
160                 return self.list == None
161
162         def Empty(self):
163                 "It the list empty (different from a null list)?"
164                 assert(not self.Null())
165
166                 if self.list:
167                         return 0
168                 else:
169                         return 1
170
171         def __repr__(self):
172                 return repr(self.list)
173
174 class PTVC(NamedList):
175         """ProtoTree TVBuff Cursor List ("PTVC List") Class"""
176
177         def __init__(self, name, records):
178                 "Constructor"
179                 NamedList.__init__(self, name, [])
180
181                 global global_highest_var
182
183                 expected_offset = None
184                 highest_var = -1
185
186                 named_vars = {}
187
188                 # Make a PTVCRecord object for each list in 'records'
189                 for record in records:
190                         offset = record[REC_START]
191                         length = record[REC_LENGTH]
192                         field = record[REC_FIELD]
193                         endianness = record[REC_ENDIANNESS]
194
195                         # Variable
196                         var_name = record[REC_VAR]
197                         if var_name:
198                                 # Did we already define this var?
199                                 if named_vars.has_key(var_name):
200                                         sys.exit("%s has multiple %s vars." % \
201                                                 (name, var_name))
202
203                                 highest_var = highest_var + 1
204                                 var = highest_var
205                                 if highest_var > global_highest_var:
206                                     global_highest_var = highest_var
207                                 named_vars[var_name] = var
208                         else:
209                                 var = NO_VAR
210
211                         # Repeat
212                         repeat_name = record[REC_REPEAT]
213                         if repeat_name:
214                                 # Do we have this var?
215                                 if not named_vars.has_key(repeat_name):
216                                         sys.exit("%s does not have %s var defined." % \
217                                                 (name, var_name))
218                                 repeat = named_vars[repeat_name]
219                         else:
220                                 repeat = NO_REPEAT
221
222                         # Request Condition
223                         req_cond = record[REC_REQ_COND]
224                         if req_cond != NO_REQ_COND:
225                                 global_req_cond[req_cond] = None
226
227                         ptvc_rec = PTVCRecord(field, length, endianness, var, repeat, req_cond)
228
229                         if expected_offset == None:
230                                 expected_offset = offset
231
232                         elif expected_offset == -1:
233                                 pass
234
235                         elif expected_offset != offset and offset != -1:
236                                 msg.write("Expected offset in %s for %s to be %d\n" % \
237                                         (name, field.HFName(), expected_offset))
238                                 sys.exit(1)
239
240                         # We can't make a PTVC list from a variable-length
241                         # packet, unless the fields can tell us at run time
242                         # how long the packet is. That is, nstring8 is fine, since
243                         # the field has an integer telling us how long the string is.
244                         # Fields that don't have a length determinable at run-time
245                         # cannot be variable-length.
246                         if type(ptvc_rec.Length()) == type(()):
247                                 if isinstance(ptvc_rec.Field(), nstring):
248                                         expected_offset = -1
249                                         pass
250                                 elif isinstance(ptvc_rec.Field(), nbytes):
251                                         expected_offset = -1
252                                         pass
253                                 elif isinstance(ptvc_rec.Field(), struct):
254                                         expected_offset = -1
255                                         pass
256                                 else:
257                                         field = ptvc_rec.Field()
258                                         assert 0, "Cannot make PTVC from %s, type %s" % \
259                                                 (field.HFName(), field)
260
261                         elif expected_offset > -1:
262                                 if ptvc_rec.Length() < 0:
263                                         expected_offset = -1
264                                 else:
265                                         expected_offset = expected_offset + ptvc_rec.Length()
266
267
268                         self.list.append(ptvc_rec)
269
270         def ETTName(self):
271                 return "ett_%s" % (self.Name(),)
272
273
274         def Code(self):
275                 x =  "static const ptvc_record %s[] = {\n" % (self.Name())
276                 for ptvc_rec in self.list:
277                         x = x +  "\t%s,\n" % (ptvc_rec.Code())
278                 x = x + "\t{ NULL, 0, NULL, NO_ENDIANNESS, NO_VAR, NO_REPEAT, NO_REQ_COND, NCP_FMT_NONE }\n"
279                 x = x + "};\n"
280                 return x
281
282         def __repr__(self):
283                 x = ""
284                 for ptvc_rec in self.list:
285                         x = x + repr(ptvc_rec)
286                 return x
287
288
289 class PTVCBitfield(PTVC):
290         def __init__(self, name, vars):
291                 NamedList.__init__(self, name, [])
292
293                 for var in vars:
294                         ptvc_rec = PTVCRecord(var, var.Length(), var.Endianness(),
295                                 NO_VAR, NO_REPEAT, NO_REQ_COND)
296                         self.list.append(ptvc_rec)
297
298         def Code(self):
299                 ett_name = self.ETTName()
300                 x = "static gint %s;\n" % (ett_name,)
301
302                 x = x + "static const ptvc_record ptvc_%s[] = {\n" % (self.Name())
303                 for ptvc_rec in self.list:
304                         x = x +  "\t%s,\n" % (ptvc_rec.Code())
305                 x = x + "\t{ NULL, 0, NULL, NO_ENDIANNESS, NO_VAR, NO_REPEAT, NO_REQ_COND, NCP_FMT_NONE }\n"
306                 x = x + "};\n"
307
308                 x = x + "static const sub_ptvc_record %s = {\n" % (self.Name(),)
309                 x = x + "\t&%s,\n" % (ett_name,)
310                 x = x + "\tNULL,\n"
311                 x = x + "\tptvc_%s,\n" % (self.Name(),)
312                 x = x + "};\n"
313                 return x
314
315
316 class PTVCRecord:
317         def __init__(self, field, length, endianness, var, repeat, req_cond):
318                 "Constructor"
319                 self.field      = field
320                 self.length     = length
321                 self.endianness = endianness
322                 self.var        = var
323                 self.repeat     = repeat
324                 self.req_cond   = req_cond
325
326         def __cmp__(self, other):
327                 "Comparison operator"
328                 if self.field != other.field:
329                         return 1
330                 elif self.length < other.length:
331                         return -1
332                 elif self.length > other.length:
333                         return 1
334                 elif self.endianness != other.endianness:
335                         return 1
336                 else:
337                         return 0
338
339         def Code(self):
340                 # Nice textual representations
341                 if self.var == NO_VAR:
342                         var = "NO_VAR"
343                 else:
344                         var = self.var
345
346                 if self.repeat == NO_REPEAT:
347                         repeat = "NO_REPEAT"
348                 else:
349                         repeat = self.repeat
350
351                 if self.req_cond == NO_REQ_COND:
352                         req_cond = "NO_REQ_COND"
353                 else:
354                         req_cond = global_req_cond[self.req_cond]
355                         assert req_cond != None
356
357                 if isinstance(self.field, struct):
358                         return self.field.ReferenceString(var, repeat, req_cond)
359                 else:
360                         return self.RegularCode(var, repeat, req_cond)
361
362         def RegularCode(self, var, repeat, req_cond):
363                 "String representation"
364                 endianness = 'BE'
365                 if self.endianness == LE:
366                         endianness = 'LE'
367
368                 length = None
369
370                 if type(self.length) == type(0):
371                         length = self.length
372                 else:
373                         # This is for cases where a length is needed
374                         # in order to determine a following variable-length,
375                         # like nstring8, where 1 byte is needed in order
376                         # to determine the variable length.
377                         var_length = self.field.Length()
378                         if var_length > 0:
379                                 length = var_length
380
381                 if length == PROTO_LENGTH_UNKNOWN:
382                         # XXX length = "PROTO_LENGTH_UNKNOWN"
383                         pass
384
385                 assert length, "Length not handled for %s" % (self.field.HFName(),)
386
387                 sub_ptvc_name = self.field.PTVCName()
388                 if sub_ptvc_name != "NULL":
389                         sub_ptvc_name = "&%s" % (sub_ptvc_name,)
390
391
392                 return "{ &%s, %s, %s, %s, %s, %s, %s, %s }" % \
393                         (self.field.HFName(), length, sub_ptvc_name, 
394                         endianness, var, repeat, req_cond,
395                         self.field.SpecialFmt())
396
397         def Offset(self):
398                 return self.offset
399
400         def Length(self):
401                 return self.length
402
403         def Field(self):
404                 return self.field
405
406         def __repr__(self):
407                 return "{%s len=%s end=%s var=%s rpt=%s rqc=%s}" % \
408                         (self.field.HFName(), self.length,
409                         self.endianness, self.var, self.repeat, self.req_cond)
410
411 ##############################################################################
412
413 class NCP:
414         "NCP Packet class"
415         def __init__(self, func_code, description, group, has_length=1):
416                 "Constructor"
417                 self.func_code          = func_code
418                 self.description        = description
419                 self.group              = group
420                 self.codes              = None
421                 self.request_records    = None
422                 self.reply_records      = None
423                 self.has_length         = has_length
424                 self.req_cond_size      = None
425                 self.req_info_str       = None
426
427                 if not groups.has_key(group):
428                         msg.write("NCP 0x%x has invalid group '%s'\n" % \
429                                 (self.func_code, group))
430                         sys.exit(1)
431
432                 if self.HasSubFunction():
433                         # NCP Function with SubFunction
434                         self.start_offset = 10
435                 else:
436                         # Simple NCP Function
437                         self.start_offset = 7
438
439         def ReqCondSize(self):
440                 return self.req_cond_size
441
442         def ReqCondSizeVariable(self):
443                 self.req_cond_size = REQ_COND_SIZE_VARIABLE
444
445         def ReqCondSizeConstant(self):
446                 self.req_cond_size = REQ_COND_SIZE_CONSTANT
447
448         def FunctionCode(self, part=None):
449                 "Returns the function code for this NCP packet."
450                 if part == None:
451                         return self.func_code
452                 elif part == 'high':
453                         if self.HasSubFunction():
454                                 return (self.func_code & 0xff00) >> 8
455                         else:
456                                 return self.func_code
457                 elif part == 'low':
458                         if self.HasSubFunction():
459                                 return self.func_code & 0x00ff
460                         else:
461                                 return 0x00
462                 else:
463                         msg.write("Unknown directive '%s' for function_code()\n" % (part))
464                         sys.exit(1)
465
466         def HasSubFunction(self):
467                 "Does this NPC packet require a subfunction field?"
468                 if self.func_code <= 0xff:
469                         return 0
470                 else:
471                         return 1
472
473         def HasLength(self):
474                 return self.has_length
475
476         def Description(self):
477                 return self.description
478
479         def Group(self):
480                 return self.group
481
482         def PTVCRequest(self):
483                 return self.ptvc_request
484
485         def PTVCReply(self):
486                 return self.ptvc_reply
487
488         def Request(self, size, records=[], **kwargs):
489                 self.request_size = size
490                 self.request_records = records
491                 if self.HasSubFunction():
492                         if self.HasLength():
493                                 self.CheckRecords(size, records, "Request", 10)
494                         else:
495                                 self.CheckRecords(size, records, "Request", 8)
496                 else:
497                         self.CheckRecords(size, records, "Request", 7)
498                 self.ptvc_request = self.MakePTVC(records, "request")
499
500                 if kwargs.has_key("info_str"):
501                         self.req_info_str = kwargs["info_str"]
502
503         def Reply(self, size, records=[]):
504                 self.reply_size = size
505                 self.reply_records = records
506                 self.CheckRecords(size, records, "Reply", 8)
507                 self.ptvc_reply = self.MakePTVC(records, "reply")
508
509         def CheckRecords(self, size, records, descr, min_hdr_length):
510                 "Simple sanity check"
511                 if size == NO_LENGTH_CHECK:
512                         return
513                 min = size
514                 max = size
515                 if type(size) == type(()):
516                         min = size[0]
517                         max = size[1]
518
519                 lower = min_hdr_length
520                 upper = min_hdr_length
521
522                 for record in records:
523                         rec_size = record[REC_LENGTH]
524                         rec_lower = rec_size
525                         rec_upper = rec_size
526                         if type(rec_size) == type(()):
527                                 rec_lower = rec_size[0]
528                                 rec_upper = rec_size[1]
529
530                         lower = lower + rec_lower
531                         upper = upper + rec_upper
532
533                 error = 0
534                 if min != lower:
535                         msg.write("%s records for 2222/0x%x sum to %d bytes minimum, but param1 shows %d\n" \
536                                 % (descr, self.FunctionCode(), lower, min))
537                         error = 1
538                 if max != upper:
539                         msg.write("%s records for 2222/0x%x sum to %d bytes maximum, but param1 shows %d\n" \
540                                 % (descr, self.FunctionCode(), upper, max))
541                         error = 1
542
543                 if error == 1:
544                         sys.exit(1)
545
546
547         def MakePTVC(self, records, name_suffix):
548                 """Makes a PTVC out of a request or reply record list. Possibly adds
549                 it to the global list of PTVCs (the global list is a UniqueCollection,
550                 so an equivalent PTVC may already be in the global list)."""
551
552                 name = "%s_%s" % (self.CName(), name_suffix)
553                 ptvc = PTVC(name, records)
554                 return ptvc_lists.Add(ptvc)
555
556         def CName(self):
557                 "Returns a C symbol based on the NCP function code"
558                 return "ncp_0x%x" % (self.func_code)
559
560         def InfoStrName(self):
561                 "Returns a C symbol based on the NCP function code, for the info_str"
562                 return "info_str_0x%x" % (self.func_code)
563
564         def Variables(self):
565                 """Returns a list of variables used in the request and reply records.
566                 A variable is listed only once, even if it is used twice (once in
567                 the request, once in the reply)."""
568
569                 variables = {}
570                 if self.request_records:
571                         for record in self.request_records:
572                                 var = record[REC_FIELD]
573                                 variables[var.HFName()] = var
574
575                                 sub_vars = var.SubVariables()
576                                 for sv in sub_vars:
577                                         variables[sv.HFName()] = sv
578
579                 if self.reply_records:
580                         for record in self.reply_records:
581                                 var = record[REC_FIELD]
582                                 variables[var.HFName()] = var
583
584                                 sub_vars = var.SubVariables()
585                                 for sv in sub_vars:
586                                         variables[sv.HFName()] = sv
587
588                 return variables.values()
589
590         def CalculateReqConds(self):
591                 """Returns a list of request conditions (dfilter text) used
592                 in the reply records. A request condition is listed only once,
593                 even it it used twice. """
594                 texts = {}
595                 if self.reply_records:
596                         for record in self.reply_records:
597                                 text = record[REC_REQ_COND]
598                                 if text != NO_REQ_COND:
599                                         texts[text] = None
600
601                 if len(texts) == 0:
602                         self.req_conds = None
603                         return None
604
605                 dfilter_texts = texts.keys()
606                 dfilter_texts.sort()
607                 name = "%s_req_cond_indexes" % (self.CName(),)
608                 return NamedList(name, dfilter_texts)
609
610         def GetReqConds(self):
611                 return self.req_conds
612
613         def SetReqConds(self, new_val):
614                 self.req_conds = new_val
615
616
617         def CompletionCodes(self, codes=None):
618                 """Sets or returns the list of completion
619                 codes. Internally, a NamedList is used to store the
620                 completion codes, but the caller of this function never
621                 realizes that because Python lists are the input and
622                 output."""
623
624                 if codes == None:
625                         return self.codes
626
627                 # Sanity check
628                 okay = 1
629                 for code in codes:
630                         if not errors.has_key(code):
631                                 msg.write("Errors table does not have key 0x%04x for NCP=0x%x\n" % (code,
632                                         self.func_code))
633                                 okay = 0
634
635                 # Delay the exit until here so that the programmer can get
636                 # the complete list of missing error codes
637                 if not okay:
638                         sys.exit(1)
639
640                 # Create CompletionCode (NamedList) object and possible
641                 # add it to  the global list of completion code lists.
642                 name = "%s_errors" % (self.CName(),)
643                 codes.sort()
644                 codes_list = NamedList(name, codes)
645                 self.codes = compcode_lists.Add(codes_list)
646
647                 self.Finalize()
648
649         def Finalize(self):
650                 """Adds the NCP object to the global collection of NCP
651                 objects. This is done automatically after setting the
652                 CompletionCode list. Yes, this is a shortcut, but it makes
653                 our list of NCP packet definitions look neater, since an
654                 explicit "add to global list of packets" is not needed."""
655
656                 # Add packet to global collection of packets
657                 packets.append(self)
658
659 def rec(start, length, field, endianness=None, **kw):
660         return _rec(start, length, field, endianness, kw)
661
662 def srec(field, endianness=None, **kw):
663         return _rec(-1, -1, field, endianness, kw)
664
665 def _rec(start, length, field, endianness, kw):
666         # If endianness not explicitly given, use the field's
667         # default endiannes.
668         if endianness == None:
669                 endianness = field.Endianness()
670
671         # Setting a var?
672         if kw.has_key("var"):
673                 # Is the field an INT ?
674                 if not isinstance(field, CountingNumber):
675                         sys.exit("Field %s used as count variable, but not integer." \
676                                 % (field.HFName()))
677                 var = kw["var"]
678         else:
679                 var = None
680
681         # If 'var' not used, 'repeat' can be used.
682         if not var and kw.has_key("repeat"):
683                 repeat = kw["repeat"]
684         else:
685                 repeat = None
686
687         # Request-condition ?
688         if kw.has_key("req_cond"):
689                 req_cond = kw["req_cond"]
690         else:
691                 req_cond = NO_REQ_COND
692
693         return [start, length, field, endianness, var, repeat, req_cond]
694
695
696
697
698 ##############################################################################
699
700 LE              = 1             # Little-Endian
701 BE              = 0             # Big-Endian
702 NA              = -1            # Not Applicable
703
704 class Type:
705         " Virtual class for NCP field types"
706         type            = "Type"
707         ftype           = None
708         disp            = "BASE_DEC"
709         endianness      = NA
710         values          = []
711
712         def __init__(self, abbrev, descr, bytes, endianness = NA):
713                 self.abbrev = abbrev
714                 self.descr = descr
715                 self.bytes = bytes
716                 self.endianness = endianness
717                 self.hfname = "hf_ncp_" + self.abbrev
718                 self.special_fmt = "NCP_FMT_NONE"
719
720         def Length(self):
721                 return self.bytes
722
723         def Abbreviation(self):
724                 return self.abbrev
725
726         def Description(self):
727                 return self.descr
728
729         def HFName(self):
730                 return self.hfname
731
732         def DFilter(self):
733                 return "ncp." + self.abbrev
734
735         def EtherealFType(self):
736                 return self.ftype
737
738         def Display(self, newval=None):
739                 if newval != None:
740                         self.disp = newval
741                 return self.disp
742
743         def ValuesName(self):
744                 return "NULL"
745
746         def Mask(self):
747                 return 0
748
749         def Endianness(self):
750                 return self.endianness
751
752         def SubVariables(self):
753                 return []
754
755         def PTVCName(self):
756                 return "NULL"
757
758         def NWDate(self):
759                 self.special_fmt = "NCP_FMT_NW_DATE"
760
761         def NWTime(self):
762                 self.special_fmt = "NCP_FMT_NW_TIME"
763                 
764         def NWUnicode(self):
765                 self.special_fmt = "NCP_FMT_UNICODE"                
766                 
767         def SpecialFmt(self):
768                 return self.special_fmt
769
770         def __cmp__(self, other):
771                 return cmp(self.hfname, other.hfname)
772
773 class struct(PTVC, Type):
774         def __init__(self, name, items, descr=None):
775                 name = "struct_%s" % (name,)
776                 NamedList.__init__(self, name, [])
777
778                 self.bytes = 0
779                 self.descr = descr
780                 for item in items:
781                         if isinstance(item, Type):
782                                 field = item
783                                 length = field.Length()
784                                 endianness = field.Endianness()
785                                 var = NO_VAR
786                                 repeat = NO_REPEAT
787                                 req_cond = NO_REQ_COND
788                         elif type(item) == type([]):
789                                 field = item[REC_FIELD]
790                                 length = item[REC_LENGTH]
791                                 endianness = item[REC_ENDIANNESS]
792                                 var = item[REC_VAR]
793                                 repeat = item[REC_REPEAT]
794                                 req_cond = item[REC_REQ_COND]
795                         else:
796                                 assert 0, "Item %s item not handled." % (item,)
797
798                         ptvc_rec = PTVCRecord(field, length, endianness, var,
799                                 repeat, req_cond)
800                         self.list.append(ptvc_rec)
801                         self.bytes = self.bytes + field.Length()
802
803                 self.hfname = self.name
804
805         def Variables(self):
806                 vars = []
807                 for ptvc_rec in self.list:
808                         vars.append(ptvc_rec.Field())
809                 return vars
810
811         def ReferenceString(self, var, repeat, req_cond):
812                 return "{ PTVC_STRUCT, NO_LENGTH, &%s, NO_ENDIANNESS, %s, %s, %s, NCP_FMT_NONE }" % \
813                         (self.name, var, repeat, req_cond)
814
815         def Code(self):
816                 ett_name = self.ETTName()
817                 x = "static gint %s;\n" % (ett_name,)
818                 x = x + "static const ptvc_record ptvc_%s[] = {\n" % (self.name,)
819                 for ptvc_rec in self.list:
820                         x = x +  "\t%s,\n" % (ptvc_rec.Code())
821                 x = x + "\t{ NULL, NO_LENGTH, NULL, NO_ENDIANNESS, NO_VAR, NO_REPEAT, NO_REQ_COND, NCP_FMT_NONE }\n"
822                 x = x + "};\n"
823
824                 x = x + "static const sub_ptvc_record %s = {\n" % (self.name,)
825                 x = x + "\t&%s,\n" % (ett_name,)
826                 if self.descr:
827                         x = x + '\t"%s",\n' % (self.descr,)
828                 else:
829                         x = x + "\tNULL,\n"
830                 x = x + "\tptvc_%s,\n" % (self.Name(),)
831                 x = x + "};\n"
832                 return x
833
834         def __cmp__(self, other):
835                 return cmp(self.HFName(), other.HFName())
836
837
838 class byte(Type):
839         type    = "byte"
840         ftype   = "FT_UINT8"
841         def __init__(self, abbrev, descr):
842                 Type.__init__(self, abbrev, descr, 1)
843
844 class CountingNumber:
845         pass
846
847 # Same as above. Both are provided for convenience
848 class uint8(Type, CountingNumber):
849         type    = "uint8"
850         ftype   = "FT_UINT8"
851         bytes   = 1
852         def __init__(self, abbrev, descr):
853                 Type.__init__(self, abbrev, descr, 1)
854
855 class uint16(Type, CountingNumber):
856         type    = "uint16"
857         ftype   = "FT_UINT16"
858         def __init__(self, abbrev, descr, endianness = LE):
859                 Type.__init__(self, abbrev, descr, 2, endianness)
860
861 class uint24(Type, CountingNumber):
862         type    = "uint24"
863         ftype   = "FT_UINT24"
864         def __init__(self, abbrev, descr, endianness = LE):
865                 Type.__init__(self, abbrev, descr, 3, endianness)
866
867 class uint32(Type, CountingNumber):
868         type    = "uint32"
869         ftype   = "FT_UINT32"
870         def __init__(self, abbrev, descr, endianness = LE):
871                 Type.__init__(self, abbrev, descr, 4, endianness)
872
873 class boolean8(uint8):
874         type    = "boolean8"
875         ftype   = "FT_BOOLEAN"
876
877 class boolean16(uint16):
878         type    = "boolean16"
879         ftype   = "FT_BOOLEAN"
880
881 class boolean24(uint24):
882         type    = "boolean24"
883         ftype   = "FT_BOOLEAN"
884
885 class boolean32(uint32):
886         type    = "boolean32"
887         ftype   = "FT_BOOLEAN"
888
889 class nstring:
890         pass
891
892 class nstring8(Type, nstring):
893         """A string of up to (2^8)-1 characters. The first byte
894         gives the string length."""
895
896         type    = "nstring8"
897         ftype   = "FT_UINT_STRING"
898         def __init__(self, abbrev, descr):
899                 Type.__init__(self, abbrev, descr, 1)
900
901 class nstring16(Type, nstring):
902         """A string of up to (2^16)-2 characters. The first 2 bytes
903         gives the string length."""
904
905         type    = "nstring16"
906         ftype   = "FT_UINT_STRING"
907         def __init__(self, abbrev, descr, endianness = LE):
908                 Type.__init__(self, abbrev, descr, 2, endianness)
909
910 class nstring32(Type, nstring):
911         """A string of up to (2^32)-4 characters. The first 4 bytes
912         gives the string length."""
913
914         type    = "nstring32"
915         ftype   = "FT_UINT_STRING"
916         def __init__(self, abbrev, descr, endianness = LE):
917                 Type.__init__(self, abbrev, descr, 4, endianness)
918
919 class fw_string(Type):
920         """A fixed-width string of n bytes."""
921
922         type    = "fw_string"
923         ftype   = "FT_STRING"
924
925         def __init__(self, abbrev, descr, bytes):
926                 Type.__init__(self, abbrev, descr, bytes)
927
928
929 class stringz(Type):
930         "NUL-terminated string, with a maximum length"
931
932         type    = "stringz"
933         ftype   = "FT_STRINGZ"
934         def __init__(self, abbrev, descr):
935                 Type.__init__(self, abbrev, descr, PROTO_LENGTH_UNKNOWN)
936
937 class val_string(Type):
938         """Abstract class for val_stringN, where N is number
939         of bits that key takes up."""
940
941         type    = "val_string"
942         disp    = 'BASE_HEX'
943
944         def __init__(self, abbrev, descr, val_string_array, endianness = LE):
945                 Type.__init__(self, abbrev, descr, self.bytes, endianness)
946                 self.values = val_string_array
947
948         def Code(self):
949                 result = "static const value_string %s[] = {\n" \
950                                 % (self.ValuesCName())
951                 for val_record in self.values:
952                         value   = val_record[0]
953                         text    = val_record[1]
954                         value_repr = self.value_format % value
955                         result = result + '\t{ %s,\t"%s" },\n' \
956                                         % (value_repr, text)
957
958                 value_repr = self.value_format % 0
959                 result = result + "\t{ %s,\tNULL },\n" % (value_repr)
960                 result = result + "};\n"
961                 REC_VAL_STRING_RES = self.value_format % value
962                 return result
963
964         def ValuesCName(self):
965                 return "ncp_%s_vals" % (self.abbrev)
966
967         def ValuesName(self):
968                 return "VALS(%s)" % (self.ValuesCName())
969
970 class val_string8(val_string):
971         type            = "val_string8"
972         ftype           = "FT_UINT8"
973         bytes           = 1
974         value_format    = "0x%02x"
975
976 class val_string16(val_string):
977         type            = "val_string16"
978         ftype           = "FT_UINT16"
979         bytes           = 2
980         value_format    = "0x%04x"
981
982 class val_string32(val_string):
983         type            = "val_string32"
984         ftype           = "FT_UINT32"
985         bytes           = 4
986         value_format    = "0x%08x"
987
988 class bytes(Type):
989         type    = 'bytes'
990         ftype   = 'FT_BYTES'
991
992         def __init__(self, abbrev, descr, bytes):
993                 Type.__init__(self, abbrev, descr, bytes, NA)
994
995 class nbytes:
996         pass
997
998 class nbytes8(Type, nbytes):
999         """A series of up to (2^8)-1 bytes. The first byte
1000         gives the byte-string length."""
1001
1002         type    = "nbytes8"
1003         ftype   = "FT_UINT_BYTES"
1004         def __init__(self, abbrev, descr, endianness = LE):
1005                 Type.__init__(self, abbrev, descr, 1, endianness)
1006
1007 class nbytes16(Type, nbytes):
1008         """A series of up to (2^16)-2 bytes. The first 2 bytes
1009         gives the byte-string length."""
1010
1011         type    = "nbytes16"
1012         ftype   = "FT_UINT_BYTES"
1013         def __init__(self, abbrev, descr, endianness = LE):
1014                 Type.__init__(self, abbrev, descr, 2, endianness)
1015
1016 class nbytes32(Type, nbytes):
1017         """A series of up to (2^32)-4 bytes. The first 4 bytes
1018         gives the byte-string length."""
1019
1020         type    = "nbytes32"
1021         ftype   = "FT_UINT_BYTES"
1022         def __init__(self, abbrev, descr, endianness = LE):
1023                 Type.__init__(self, abbrev, descr, 4, endianness)
1024
1025 class bf_uint(Type):
1026         type    = "bf_uint"
1027         disp    = None
1028
1029         def __init__(self, bitmask, abbrev, descr, endianness=LE):
1030                 Type.__init__(self, abbrev, descr, self.bytes, endianness)
1031                 self.bitmask = bitmask
1032
1033         def Mask(self):
1034                 return self.bitmask
1035
1036 class bf_val_str(bf_uint):
1037         type    = "bf_uint"
1038         disp    = None
1039
1040         def __init__(self, bitmask, abbrev, descr, val_string_array, endiannes=LE):
1041                 bf_uint.__init__(self, bitmask, abbrev, descr, endiannes)
1042                 self.values = val_string_array
1043
1044         def ValuesName(self):
1045                 return "VALS(%s)" % (self.ValuesCName())
1046
1047 class bf_val_str8(bf_val_str, val_string8):
1048         type    = "bf_val_str8"
1049         ftype   = "FT_UINT8"
1050         disp    = "BASE_HEX"
1051         bytes   = 1
1052
1053 class bf_val_str16(bf_val_str, val_string16):
1054         type    = "bf_val_str16"
1055         ftype   = "FT_UINT16"
1056         disp    = "BASE_HEX"
1057         bytes   = 2
1058
1059 class bf_val_str32(bf_val_str, val_string32):
1060         type    = "bf_val_str32"
1061         ftype   = "FT_UINT32"
1062         disp    = "BASE_HEX"
1063         bytes   = 4
1064
1065 class bf_boolean:
1066     pass
1067
1068 class bf_boolean8(bf_uint, boolean8, bf_boolean):
1069         type    = "bf_boolean8"
1070         ftype   = "FT_BOOLEAN"
1071         disp    = "8"
1072         bytes   = 1
1073
1074 class bf_boolean16(bf_uint, boolean16, bf_boolean):
1075         type    = "bf_boolean16"
1076         ftype   = "FT_BOOLEAN"
1077         disp    = "16"
1078         bytes   = 2
1079
1080 class bf_boolean24(bf_uint, boolean24, bf_boolean):
1081         type    = "bf_boolean24"
1082         ftype   = "FT_BOOLEAN"
1083         disp    = "24"
1084         bytes   = 3
1085
1086 class bf_boolean32(bf_uint, boolean32, bf_boolean):
1087         type    = "bf_boolean32"
1088         ftype   = "FT_BOOLEAN"
1089         disp    = "32"
1090         bytes   = 4
1091
1092 class bitfield(Type):
1093         type    = "bitfield"
1094         disp    = 'BASE_HEX'
1095
1096         def __init__(self, vars):
1097                 var_hash = {}
1098                 for var in vars:
1099                         if isinstance(var, bf_boolean):
1100                                 if not isinstance(var, self.bf_type):
1101                                         print "%s must be of type %s" % \
1102                                                 (var.Abbreviation(),
1103                                                 self.bf_type)
1104                                         sys.exit(1)
1105                         var_hash[var.bitmask] = var
1106
1107                 bitmasks = var_hash.keys()
1108                 bitmasks.sort()
1109                 bitmasks.reverse()
1110
1111                 ordered_vars = []
1112                 for bitmask in bitmasks:
1113                         var = var_hash[bitmask]
1114                         ordered_vars.append(var)
1115
1116                 self.vars = ordered_vars
1117                 self.ptvcname = "ncp_%s_bitfield" % (self.abbrev,)
1118                 self.hfname = "hf_ncp_%s" % (self.abbrev,)
1119                 self.sub_ptvc = PTVCBitfield(self.PTVCName(), self.vars)
1120
1121         def SubVariables(self):
1122                 return self.vars
1123
1124         def SubVariablesPTVC(self):
1125                 return self.sub_ptvc
1126
1127         def PTVCName(self):
1128                 return self.ptvcname
1129
1130
1131 class bitfield8(bitfield, uint8):
1132         type    = "bitfield8"
1133         ftype   = "FT_UINT8"
1134         bf_type = bf_boolean8
1135
1136         def __init__(self, abbrev, descr, vars):
1137                 uint8.__init__(self, abbrev, descr)
1138                 bitfield.__init__(self, vars)
1139
1140 class bitfield16(bitfield, uint16):
1141         type    = "bitfield16"
1142         ftype   = "FT_UINT16"
1143         bf_type = bf_boolean16
1144
1145         def __init__(self, abbrev, descr, vars, endianness=LE):
1146                 uint16.__init__(self, abbrev, descr, endianness)
1147                 bitfield.__init__(self, vars)
1148
1149 class bitfield24(bitfield, uint24):
1150         type    = "bitfield24"
1151         ftype   = "FT_UINT24"
1152         bf_type = bf_boolean24
1153
1154         def __init__(self, abbrev, descr, vars, endianness=LE):
1155                 uint24.__init__(self, abbrev, descr, endianness)
1156                 bitfield.__init__(self, vars)
1157
1158 class bitfield32(bitfield, uint32):
1159         type    = "bitfield32"
1160         ftype   = "FT_UINT32"
1161         bf_type = bf_boolean32
1162
1163         def __init__(self, abbrev, descr, vars, endianness=LE):
1164                 uint32.__init__(self, abbrev, descr, endianness)
1165                 bitfield.__init__(self, vars)
1166
1167
1168 ##############################################################################
1169 # NCP Field Types. Defined in Appendix A of "Programmer's Guide..."
1170 ##############################################################################
1171 AbortQueueFlag                  = val_string8("abort_q_flag", "Abort Queue Flag", [
1172         [ 0x00, "Place at End of Queue" ],
1173         [ 0x01, "Do Not Place Spool File, Examine Flags" ],
1174 ])
1175 AcceptedMaxSize                 = uint16("accepted_max_size", "Accepted Max Size")
1176 AccessControl                   = val_string8("access_control", "Access Control", [
1177         [ 0x00, "Open for read by this client" ],
1178         [ 0x01, "Open for write by this client" ],
1179         [ 0x02, "Deny read requests from other stations" ],
1180         [ 0x03, "Deny write requests from other stations" ],
1181         [ 0x04, "File detached" ],
1182         [ 0x05, "TTS holding detach" ],
1183         [ 0x06, "TTS holding open" ],
1184 ])
1185 AccessDate                      = uint16("access_date", "Access Date")
1186 AccessDate.NWDate()
1187 AccessMode                      = bitfield8("access_mode", "Access Mode", [
1188         bf_boolean8(0x01, "acc_mode_read", "Read Access"),
1189         bf_boolean8(0x02, "acc_mode_write", "Write Access"),
1190         bf_boolean8(0x04, "acc_mode_deny_read", "Deny Read Access"),
1191         bf_boolean8(0x08, "acc_mode_deny_write", "Deny Write Access"),
1192         bf_boolean8(0x10, "acc_mode_comp", "Compatibility Mode"),
1193 ])
1194 AccessPrivileges                = bitfield8("access_privileges", "Access Privileges", [
1195         bf_boolean8(0x01, "acc_priv_read", "Read Privileges (files only)"),
1196         bf_boolean8(0x02, "acc_priv_write", "Write Privileges (files only)"),
1197         bf_boolean8(0x04, "acc_priv_open", "Open Privileges (files only)"),
1198         bf_boolean8(0x08, "acc_priv_create", "Create Privileges (files only)"),
1199         bf_boolean8(0x10, "acc_priv_delete", "Delete Privileges (files only)"),
1200         bf_boolean8(0x20, "acc_priv_parent", "Parental Privileges (directories only for creating, deleting, and renaming)"),
1201         bf_boolean8(0x40, "acc_priv_search", "Search Privileges (directories only)"),
1202         bf_boolean8(0x80, "acc_priv_modify", "Modify File Status Flags Privileges (files and directories)"),
1203 ])
1204 AccessRightsMask                = bitfield8("access_rights_mask", "Access Rights", [
1205         bf_boolean8(0x0001, "acc_rights_read", "Read Rights"),
1206         bf_boolean8(0x0002, "acc_rights_write", "Write Rights"),
1207         bf_boolean8(0x0004, "acc_rights_open", "Open Rights"),
1208         bf_boolean8(0x0008, "acc_rights_create", "Create Rights"),
1209         bf_boolean8(0x0010, "acc_rights_delete", "Delete Rights"),
1210         bf_boolean8(0x0020, "acc_rights_parent", "Parental Rights"),
1211         bf_boolean8(0x0040, "acc_rights_search", "Search Rights"),
1212         bf_boolean8(0x0080, "acc_rights_modify", "Modify Rights"),
1213 ])
1214 AccessRightsMaskWord            = bitfield16("access_rights_mask_word", "Access Rights", [
1215         bf_boolean16(0x0001, "acc_rights1_read", "Read Rights"),
1216         bf_boolean16(0x0002, "acc_rights1_write", "Write Rights"),
1217         bf_boolean16(0x0004, "acc_rights1_open", "Open Rights"),
1218         bf_boolean16(0x0008, "acc_rights1_create", "Create Rights"),
1219         bf_boolean16(0x0010, "acc_rights1_delete", "Delete Rights"),
1220         bf_boolean16(0x0020, "acc_rights1_parent", "Parental Rights"),
1221         bf_boolean16(0x0040, "acc_rights1_search", "Search Rights"),
1222         bf_boolean16(0x0080, "acc_rights1_modify", "Modify Rights"),
1223         bf_boolean16(0x0100, "acc_rights1_supervisor", "Supervisor Access Rights"),
1224 ])
1225 AccountBalance                  = uint32("account_balance", "Account Balance")
1226 AccountVersion                  = uint8("acct_version", "Acct Version")
1227 ActionFlag                      = bitfield8("action_flag", "Action Flag", [
1228         bf_boolean8(0x01, "act_flag_open", "Open"),
1229         bf_boolean8(0x02, "act_flag_replace", "Replace"),
1230         bf_boolean8(0x10, "act_flag_create", "Create"),
1231 ])
1232 ActiveConnBitList               = fw_string("active_conn_bit_list", "Active Connection List", 512)
1233 ActiveIndexedFiles              = uint16("active_indexed_files", "Active Indexed Files")
1234 ActualMaxBinderyObjects         = uint16("actual_max_bindery_objects", "Actual Max Bindery Objects")
1235 ActualMaxIndexedFiles           = uint16("actual_max_indexed_files", "Actual Max Indexed Files")
1236 ActualMaxOpenFiles              = uint16("actual_max_open_files", "Actual Max Open Files")
1237 ActualMaxSimultaneousTransactions = uint16("actual_max_sim_trans", "Actual Max Simultaneous Transactions")
1238 ActualMaxUsedDirectoryEntries   = uint16("actual_max_used_directory_entries", "Actual Max Used Directory Entries")
1239 ActualMaxUsedRoutingBuffers     = uint16("actual_max_used_routing_buffers", "Actual Max Used Routing Buffers")
1240 ActualResponseCount             = uint16("actual_response_count", "Actual Response Count")
1241 AddNameSpaceAndVol              = stringz("add_nm_spc_and_vol", "Add Name Space and Volume")
1242 AFPEntryID                      = uint32("afp_entry_id", "AFP Entry ID", BE)
1243 AFPEntryID.Display("BASE_HEX")
1244 AllocAvailByte                  = uint32("alloc_avail_byte", "Bytes Available for Allocation")
1245 AllocateMode                    = val_string16("allocate_mode", "Allocate Mode", [
1246         [ 0x0000, "Permanent Directory Handle" ],
1247         [ 0x0001, "Temporary Directory Handle" ],
1248         [ 0x0002, "Special Temporary Directory Handle" ],
1249 ])
1250 AllocationBlockSize             = uint32("allocation_block_size", "Allocation Block Size")
1251 AllocFreeCount                  = uint32("alloc_free_count", "Reclaimable Free Bytes")
1252 ApplicationNumber               = uint16("application_number", "Application Number")
1253 ArchivedTime                    = uint16("archived_time", "Archived Time")
1254 ArchivedTime.NWTime()
1255 ArchivedDate                    = uint16("archived_date", "Archived Date")
1256 ArchivedDate.NWDate()
1257 ArchiverID                      = uint32("archiver_id", "Archiver ID", BE)
1258 ArchiverID.Display("BASE_HEX")
1259 AssociatedNameSpace             = uint8("associated_name_space", "Associated Name Space")
1260 AttachDuringProcessing          = uint16("attach_during_processing", "Attach During Processing")
1261 AttachedIndexedFiles            = uint8("attached_indexed_files", "Attached Indexed Files")
1262 AttachWhileProcessingAttach     = uint16("attach_while_processing_attach", "Attach While Processing Attach")
1263 Attributes                      = uint32("attributes", "Attributes")
1264 AttributesDef                   = bitfield8("attr_def", "Attributes", [
1265         bf_boolean8(0x01, "att_def_ro", "Read Only"),
1266         bf_boolean8(0x02, "att_def_hidden", "Hidden"),
1267         bf_boolean8(0x04, "att_def_system", "System"),
1268         bf_boolean8(0x08, "att_def_execute", "Execute"),
1269         bf_boolean8(0x10, "att_def_sub_only", "Subdirectories Only"),
1270         bf_boolean8(0x20, "att_def_archive", "Archive"),
1271         bf_boolean8(0x80, "att_def_shareable", "Shareable"),
1272 ])
1273 AttributesDef16                 = bitfield16("attr_def_16", "Attributes", [
1274         bf_boolean16(0x0001, "att_def16_ro", "Read Only"),
1275         bf_boolean16(0x0002, "att_def16_hidden", "Hidden"),
1276         bf_boolean16(0x0004, "att_def16_system", "System"),
1277         bf_boolean16(0x0008, "att_def16_execute", "Execute"),
1278         bf_boolean16(0x0010, "att_def16_sub_only", "Subdirectories Only"),
1279         bf_boolean16(0x0020, "att_def16_archive", "Archive"),
1280         bf_boolean16(0x0080, "att_def16_shareable", "Shareable"),
1281         bf_boolean16(0x1000, "att_def16_transaction", "Transactional"),
1282         bf_boolean16(0x4000, "att_def16_read_audit", "Read Audit"),
1283         bf_boolean16(0x8000, "att_def16_write_audit", "Write Audit"),
1284 ])
1285 AttributesDef32                 = bitfield32("attr_def_32", "Attributes", [
1286         bf_boolean32(0x00000001, "att_def32_ro", "Read Only"),
1287         bf_boolean32(0x00000002, "att_def32_hidden", "Hidden"),
1288         bf_boolean32(0x00000004, "att_def32_system", "System"),
1289         bf_boolean32(0x00000008, "att_def32_execute", "Execute"),
1290         bf_boolean32(0x00000010, "att_def32_sub_only", "Subdirectories Only"),
1291         bf_boolean32(0x00000020, "att_def32_archive", "Archive"),
1292         bf_boolean32(0x00000080, "att_def32_shareable", "Shareable"),
1293         bf_boolean32(0x00001000, "att_def32_transaction", "Transactional"),
1294         bf_boolean32(0x00004000, "att_def32_read_audit", "Read Audit"),
1295         bf_boolean32(0x00008000, "att_def32_write_audit", "Write Audit"),
1296         bf_boolean32(0x00010000, "att_def_purge", "Purge"),
1297         bf_boolean32(0x00020000, "att_def_reninhibit", "Rename Inhibit"),
1298         bf_boolean32(0x00040000, "att_def_delinhibit", "Delete Inhibit"),
1299         bf_boolean32(0x00080000, "att_def_cpyinhibit", "Copy Inhibit"),
1300         bf_boolean32(0x02000000, "att_def_im_comp", "Immediate Compress"),
1301         bf_boolean32(0x04000000, "att_def_comp", "Compressed"),
1302 ])
1303 AttributeValidFlag              = uint32("attribute_valid_flag", "Attribute Valid Flag")
1304 AuditFileVersionDate            = uint16("audit_file_ver_date", "Audit File Version Date")
1305 AuditFileVersionDate.NWDate()
1306 AuditFlag                       = val_string8("audit_flag", "Audit Flag", [
1307         [ 0x00, "Do NOT audit object" ],
1308         [ 0x01, "Audit object" ],
1309 ])
1310 AuditHandle                     = uint32("audit_handle", "Audit File Handle")
1311 AuditHandle.Display("BASE_HEX")
1312 AuditID                         = uint32("audit_id", "Audit ID", BE)
1313 AuditID.Display("BASE_HEX")
1314 AuditIDType                     = val_string16("audit_id_type", "Audit ID Type", [
1315         [ 0x0000, "Volume" ],
1316         [ 0x0001, "Container" ],
1317 ])
1318 AuditVersionDate                = uint16("audit_ver_date", "Auditing Version Date")
1319 AuditVersionDate.NWDate()
1320 AvailableBlocks                 = uint32("available_blocks", "Available Blocks")
1321 AvailableClusters               = uint16("available_clusters", "Available Clusters")
1322 AvailableDirectorySlots         = uint16("available_directory_slots", "Available Directory Slots")
1323 AvailableDirEntries             = uint32("available_dir_entries", "Available Directory Entries")
1324 AvailableIndexedFiles           = uint16("available_indexed_files", "Available Indexed Files")
1325
1326 BackgroundAgedWrites            = uint32("background_aged_writes", "Background Aged Writes")
1327 BackgroundDirtyWrites           = uint32("background_dirty_writes", "Background Dirty Writes")
1328 BadLogicalConnectionCount       = uint16("bad_logical_connection_count", "Bad Logical Connection Count")
1329 BannerName                      = fw_string("banner_name", "Banner Name", 14)
1330 BaseDirectoryID                 = uint32("base_directory_id", "Base Directory ID")
1331 BaseDirectoryID.Display("BASE_HEX")
1332 binderyContext                  = nstring8("bindery_context", "Bindery Context")
1333 BitMap                          = bytes("bit_map", "Bit Map", 512)
1334 BlockNumber                     = uint32("block_number", "Block Number")
1335 BlockSize                       = uint16("block_size", "Block Size")
1336 BlockSizeInSectors              = uint32("block_size_in_sectors", "Block Size in Sectors")
1337 BoardInstalled                  = uint8("board_installed", "Board Installed")
1338 BoardNumber                     = uint32("board_number", "Board Number")
1339 BoardNumbers                    = uint32("board_numbers", "Board Numbers")
1340 BufferSize                      = uint16("buffer_size", "Buffer Size")
1341 BusString                       = stringz("bus_string", "Bus String")
1342 BusType                         = val_string8("bus_type", "Bus Type", [
1343         [0x00, "ISA"],
1344         [0x01, "Micro Channel" ],
1345         [0x02, "EISA"],
1346         [0x04, "PCI"],
1347         [0x08, "PCMCIA"],
1348         [0x10, "ISA"],
1349         [0x14, "ISA"],
1350 ])
1351 BytesActuallyTransferred        = uint32("bytes_actually_transferred", "Bytes Actually Transferred")
1352 BytesRead                       = fw_string("bytes_read", "Bytes Read", 6)
1353 BytesToCopy                     = uint32("bytes_to_copy", "Bytes to Copy")
1354 BytesWritten                    = fw_string("bytes_written", "Bytes Written", 6)
1355
1356 CacheAllocations                = uint32("cache_allocations", "Cache Allocations")
1357 CacheBlockScrapped              = uint16("cache_block_scrapped", "Cache Block Scrapped")
1358 CacheBufferCount                = uint16("cache_buffer_count", "Cache Buffer Count")
1359 CacheBufferSize                 = uint16("cache_buffer_size", "Cache Buffer Size")
1360 CacheFullWriteRequests          = uint32("cache_full_write_requests", "Cache Full Write Requests")
1361 CacheGetRequests                = uint32("cache_get_requests", "Cache Get Requests")
1362 CacheHitOnUnavailableBlock      = uint16("cache_hit_on_unavailable_block", "Cache Hit On Unavailable Block")
1363 CacheHits                       = uint32("cache_hits", "Cache Hits")
1364 CacheMisses                     = uint32("cache_misses", "Cache Misses")
1365 CachePartialWriteRequests       = uint32("cache_partial_write_requests", "Cache Partial Write Requests")
1366 CacheReadRequests               = uint32("cache_read_requests", "Cache Read Requests")
1367 CacheWriteRequests              = uint32("cache_write_requests", "Cache Write Requests")
1368 CategoryName                    = stringz("category_name", "Category Name")
1369 CCFileHandle                    = uint32("cc_file_handle", "File Handle")
1370 CCFileHandle.Display("BASE_HEX")
1371 CCFunction                      = val_string8("cc_function", "OP-Lock Flag", [
1372         [ 0x01, "Clear OP-Lock" ],
1373         [ 0x02, "Acknowledge Callback" ],
1374         [ 0x03, "Decline Callback" ],
1375 ])
1376 ChangeBits                      = bitfield16("change_bits", "Change Bits", [
1377         bf_boolean16(0x0001, "change_bits_modify", "Modify Name"),
1378         bf_boolean16(0x0002, "change_bits_fatt", "File Attributes"),
1379         bf_boolean16(0x0004, "change_bits_cdate", "Creation Date"),
1380         bf_boolean16(0x0008, "change_bits_ctime", "Creation Time"),
1381         bf_boolean16(0x0010, "change_bits_owner", "Owner ID"),
1382         bf_boolean16(0x0020, "change_bits_adate", "Archive Date"),
1383         bf_boolean16(0x0040, "change_bits_atime", "Archive Time"),
1384         bf_boolean16(0x0080, "change_bits_aid", "Archiver ID"),
1385         bf_boolean16(0x0100, "change_bits_udate", "Update Date"),
1386         bf_boolean16(0x0200, "change_bits_utime", "Update Time"),
1387         bf_boolean16(0x0400, "change_bits_uid", "Update ID"),
1388         bf_boolean16(0x0800, "change_bits_acc_date", "Access Date"),
1389         bf_boolean16(0x1000, "change_bits_max_acc_mask", "Maximum Access Mask"),
1390         bf_boolean16(0x2000, "change_bits_max_space", "Maximum Space"),
1391 ])
1392 ChannelState                    = val_string8("channel_state", "Channel State", [
1393         [ 0x00, "Channel is running" ],
1394         [ 0x01, "Channel is stopping" ],
1395         [ 0x02, "Channel is stopped" ],
1396         [ 0x03, "Channel is not functional" ],
1397 ])
1398 ChannelSynchronizationState     = val_string8("channel_synchronization_state", "Channel Synchronization State", [
1399         [ 0x00, "Channel is not being used" ],
1400         [ 0x02, "NetWare is using the channel; no one else wants it" ],
1401         [ 0x04, "NetWare is using the channel; someone else wants it" ],
1402         [ 0x06, "Someone else is using the channel; NetWare does not need it" ],
1403         [ 0x08, "Someone else is using the channel; NetWare needs it" ],
1404         [ 0x0A, "Someone else has released the channel; NetWare should use it" ],
1405 ])
1406 ChargeAmount                    = uint32("charge_amount", "Charge Amount")
1407 ChargeInformation               = uint32("charge_information", "Charge Information")
1408 ClientCompFlag                  = val_string16("client_comp_flag", "Completion Flag", [
1409         [ 0x0000, "Successful" ],
1410         [ 0x0001, "Illegal Station Number" ],
1411         [ 0x0002, "Client Not Logged In" ],
1412         [ 0x0003, "Client Not Accepting Messages" ],
1413         [ 0x0004, "Client Already has a Message" ],
1414         [ 0x0096, "No Alloc Space for the Message" ],
1415         [ 0x00fd, "Bad Station Number" ],
1416         [ 0x00ff, "Failure" ],
1417 ])      
1418 ClientIDNumber                  = uint32("client_id_number", "Client ID Number", BE)
1419 ClientIDNumber.Display("BASE_HEX")
1420 ClientList                      = uint32("client_list", "Client List")
1421 ClientListCount                 = uint16("client_list_cnt", "Client List Count")
1422 ClientListLen                   = uint8("client_list_len", "Client List Length")
1423 ClientName                      = nstring8("client_name", "Client Name")
1424 ClientRecordArea                = fw_string("client_record_area", "Client Record Area", 152)
1425 ClientStation                   = uint8("client_station", "Client Station")
1426 ClientStationLong               = uint32("client_station_long", "Client Station")
1427 ClientTaskNumber                = uint8("client_task_number", "Client Task Number")
1428 ClientTaskNumberLong            = uint32("client_task_number_long", "Client Task Number")
1429 ClusterCount                    = uint16("cluster_count", "Cluster Count")
1430 ClustersUsedByDirectories       = uint32("clusters_used_by_directories", "Clusters Used by Directories")
1431 ClustersUsedByExtendedDirectories = uint32("clusters_used_by_extended_dirs", "Clusters Used by Extended Directories")
1432 ClustersUsedByFAT               = uint32("clusters_used_by_fat", "Clusters Used by FAT")
1433 ComCnts                         = uint16("com_cnts", "Communication Counters")
1434 Comment                         = nstring8("comment", "Comment")
1435 CommentType                     = uint16("comment_type", "Comment Type")
1436 CompletionCode                  = uint32("ncompletion_code", "Completion Code")
1437 CompressedDataStreamsCount      = uint32("compressed_data_streams_count", "Compressed Data Streams Count")
1438 CompressedLimboDataStreamsCount = uint32("compressed_limbo_data_streams_count", "Compressed Limbo Data Streams Count")
1439 CompressedSectors               = uint32("compressed_sectors", "Compressed Sectors")
1440 compressionStage                = uint32("compression_stage", "Compression Stage")
1441 compressVolume                  = uint32("compress_volume", "Volume Compression")
1442 ConfigMajorVN                   = uint8("config_major_vn", "Configuration Major Version Number")
1443 ConfigMinorVN                   = uint8("config_minor_vn", "Configuration Minor Version Number")
1444 ConfigurationDescription        = fw_string("configuration_description", "Configuration Description", 80)
1445 ConfigurationText               = fw_string("configuration_text", "Configuration Text", 160)
1446 ConfiguredMaxBinderyObjects     = uint16("configured_max_bindery_objects", "Configured Max Bindery Objects")
1447 ConfiguredMaxOpenFiles          = uint16("configured_max_open_files", "Configured Max Open Files")
1448 ConfiguredMaxRoutingBuffers     = uint16("configured_max_routing_buffers", "Configured Max Routing Buffers")
1449 ConfiguredMaxSimultaneousTransactions = uint16("cfg_max_simultaneous_transactions", "Configured Max Simultaneous Transactions")
1450 ConnectedLAN                    = uint32("connected_lan", "LAN Adapter")
1451 ConnectionControlBits           = bitfield8("conn_ctrl_bits", "Connection Control", [
1452         bf_boolean8(0x01, "enable_brdcasts", "Enable Broadcasts"),
1453         bf_boolean8(0x02, "enable_personal_brdcasts", "Enable Personal Broadcasts"),
1454         bf_boolean8(0x04, "enable_wdog_messages", "Enable Watchdog Message"),
1455         bf_boolean8(0x10, "disable_brdcasts", "Disable Broadcasts"),
1456         bf_boolean8(0x20, "disable_personal_brdcasts", "Disable Personal Broadcasts"),
1457         bf_boolean8(0x40, "disable_wdog_messages", "Disable Watchdog Message"),
1458 ])
1459 ConnectionListCount             = uint32("conn_list_count", "Connection List Count")
1460 ConnectionList                  = uint32("connection_list", "Connection List")
1461 ConnectionNumber                = uint32("connection_number", "Connection Number", BE)
1462 ConnectionNumberList            = nstring8("connection_number_list", "Connection Number List")
1463 ConnectionNumberWord            = uint16("conn_number_word", "Connection Number")
1464 ConnectionNumberByte            = uint8("conn_number_byte", "Connection Number")
1465 ConnectionServiceType           = val_string8("connection_service_type","Connection Service Type",[
1466         [ 0x01, "CLIB backward Compatibility" ],
1467         [ 0x02, "NCP Connection" ],
1468         [ 0x03, "NLM Connection" ],
1469         [ 0x04, "AFP Connection" ],
1470         [ 0x05, "FTAM Connection" ],
1471         [ 0x06, "ANCP Connection" ],
1472         [ 0x07, "ACP Connection" ],
1473         [ 0x08, "SMB Connection" ],
1474         [ 0x09, "Winsock Connection" ],
1475 ])
1476 ConnectionsInUse                = uint16("connections_in_use", "Connections In Use")
1477 ConnectionsMaxUsed              = uint16("connections_max_used", "Connections Max Used")
1478 ConnectionsSupportedMax         = uint16("connections_supported_max", "Connections Supported Max")
1479 ConnectionType                  = val_string8("connection_type", "Connection Type", [
1480         [ 0x00, "Not in use" ],
1481         [ 0x02, "NCP" ],
1482         [ 0x11, "UDP (for IP)" ],
1483 ])
1484 ConnListLen                     = uint8("conn_list_len", "Connection List Length")
1485 Copyright                       = nstring8("copyright", "Copyright")
1486 connList                        = uint32("conn_list", "Connection List")
1487 ControlFlags                    = val_string8("control_flags", "Control Flags", [
1488         [ 0x00, "Forced Record Locking is Off" ],
1489         [ 0x01, "Forced Record Locking is On" ],
1490 ])
1491 ControllerDriveNumber           = uint8("controller_drive_number", "Controller Drive Number")
1492 ControllerNumber                = uint8("controller_number", "Controller Number")
1493 ControllerType                  = uint8("controller_type", "Controller Type")
1494 Cookie1                         = uint32("cookie_1", "Cookie 1")
1495 Cookie2                         = uint32("cookie_2", "Cookie 2")
1496 Copies                          = uint8( "copies", "Copies" )
1497 CoprocessorFlag                 = uint32("co_processor_flag", "CoProcessor Present Flag")
1498 CoProcessorString               = stringz("co_proc_string", "CoProcessor String")
1499 CounterMask                     = val_string8("counter_mask", "Counter Mask", [
1500         [ 0x00, "Counter is Valid" ],
1501         [ 0x01, "Counter is not Valid" ],
1502 ])        
1503 CPUNumber                       = uint32("cpu_number", "CPU Number")
1504 CPUString                       = stringz("cpu_string", "CPU String")
1505 CPUType                         = val_string8("cpu_type", "CPU Type", [
1506         [ 0x00, "80386" ],
1507         [ 0x01, "80486" ],
1508         [ 0x02, "Pentium" ],
1509         [ 0x03, "Pentium Pro" ],
1510 ])    
1511 CreationDate                    = uint16("creation_date", "Creation Date")
1512 CreationDate.NWDate()
1513 CreationTime                    = uint16("creation_time", "Creation Time")
1514 CreationTime.NWTime()
1515 CreatorID                       = uint32("creator_id", "Creator ID", BE)
1516 CreatorID.Display("BASE_HEX")
1517 CreatorNameSpaceNumber          = val_string8("creator_name_space_number", "Creator Name Space Number", [
1518         [ 0x00, "DOS Name Space" ],
1519         [ 0x01, "MAC Name Space" ],
1520         [ 0x02, "NFS Name Space" ],
1521         [ 0x04, "Long Name Space" ],
1522 ])
1523 CreditLimit                     = uint32("credit_limit", "Credit Limit")
1524 CtrlFlags                       = val_string16("ctrl_flags", "Control Flags", [
1525         [ 0x0000, "Do Not Return File Name" ],
1526         [ 0x0001, "Return File Name" ],
1527 ])      
1528 curCompBlks                     = uint32("cur_comp_blks", "Current Compression Blocks")
1529 curInitialBlks                  = uint32("cur_initial_blks", "Current Initial Blocks")
1530 curIntermediateBlks             = uint32("cur_inter_blks", "Current Intermediate Blocks")
1531 CurNumOfRTags                   = uint32("cur_num_of_r_tags", "Current Number of Resource Tags")
1532 CurrentBlockBeingDecompressed   = uint32("cur_blk_being_dcompress", "Current Block Being Decompressed")
1533 CurrentChangedFATs              = uint16("current_changed_fats", "Current Changed FAT Entries")
1534 CurrentEntries                  = uint32("current_entries", "Current Entries")
1535 CurrentFormType                 = uint8( "current_form_type", "Current Form Type" )
1536 CurrentLFSCounters              = uint32("current_lfs_counters", "Current LFS Counters")
1537 CurrentlyUsedRoutingBuffers     = uint16("currently_used_routing_buffers", "Currently Used Routing Buffers")
1538 CurrentOpenFiles                = uint16("current_open_files", "Current Open Files")
1539 CurrentReferenceID              = uint16("curr_ref_id", "Current Reference ID")
1540 CurrentServers                  = uint32("current_servers", "Current Servers")
1541 CurrentServerTime               = uint32("current_server_time", "Time Elapsed Since Server Was Brought Up")
1542 CurrentSpace                    = uint32("current_space", "Current Space")
1543 CurrentTransactionCount         = uint32("current_trans_count", "Current Transaction Count")
1544 CurrentUsedBinderyObjects       = uint16("current_used_bindery_objects", "Current Used Bindery Objects")
1545 CurrentUsedDynamicSpace         = uint32("current_used_dynamic_space", "Current Used Dynamic Space")
1546 CustomCnts                      = uint32("custom_cnts", "Custom Counters")
1547 CustomCount                     = uint32("custom_count", "Custom Count")
1548 CustomCounters                  = uint32("custom_counters", "Custom Counters")
1549 CustomString                    = nstring8("custom_string", "Custom String")
1550 CustomVariableValue             = uint32("custom_var_value", "Custom Variable Value")
1551
1552 Data                            = nstring8("data", "Data")
1553 DataForkFirstFAT                = uint32("data_fork_first_fat", "Data Fork First FAT Entry")
1554 DataForkLen                     = uint32("data_fork_len", "Data Fork Len")
1555 DataForkSize                    = uint32("data_fork_size", "Data Fork Size")
1556 DataSize                        = uint32("data_size", "Data Size")
1557 DataStream                      = val_string8("data_stream", "Data Stream", [
1558         [ 0x00, "Resource Fork or DOS" ],
1559         [ 0x01, "Data Fork" ],
1560 ])
1561 DataStreamName                  = nstring8("data_stream_name", "Data Stream Name")
1562 DataStreamNumber                = uint8("data_stream_number", "Data Stream Number")
1563 DataStreamsCount                = uint32("data_streams_count", "Data Streams Count")
1564 DataStreamSize                  = uint32("data_stream_size", "Size")
1565 DataStreamSpaceAlloc            = uint32( "data_stream_space_alloc", "Space Allocated for Data Stream" )
1566 Day                             = uint8("s_day", "Day")
1567 DayOfWeek                       = val_string8("s_day_of_week", "Day of Week", [
1568         [ 0x00, "Sunday" ],
1569         [ 0x01, "Monday" ],
1570         [ 0x02, "Tuesday" ],
1571         [ 0x03, "Wednesday" ],
1572         [ 0x04, "Thursday" ],
1573         [ 0x05, "Friday" ],
1574         [ 0x06, "Saturday" ],
1575 ])
1576 DeadMirrorTable                 = bytes("dead_mirror_table", "Dead Mirror Table", 32)
1577 DefinedDataStreams              = uint8("defined_data_streams", "Defined Data Streams")
1578 DefinedNameSpaces               = uint8("definded_name_spaces", "Defined Name Spaces")
1579 DeletedDate                     = uint16("deleted_date", "Deleted Date")
1580 DeletedDate.NWDate()
1581 DeletedFileTime                 = uint32( "deleted_file_time", "Deleted File Time")
1582 DeletedFileTime.Display("BASE_HEX")
1583 DeletedTime                     = uint16("deleted_time", "Deleted Time")
1584 DeletedTime.NWTime()
1585 DeletedID                       = uint32( "delete_id", "Deleted ID", BE)
1586 DeletedID.Display("BASE_HEX")
1587 DeleteExistingFileFlag          = val_string8("delete_existing_file_flag", "Delete Existing File Flag", [
1588         [ 0x00, "Do Not Delete Existing File" ],
1589         [ 0x01, "Delete Existing File" ],
1590 ])      
1591 DenyReadCount                   = uint16("deny_read_count", "Deny Read Count")
1592 DenyWriteCount                  = uint16("deny_write_count", "Deny Write Count")
1593 DescriptionStrings              = fw_string("description_string", "Description", 512)
1594 DesiredAccessRights             = bitfield16("desired_access_rights", "Desired Access Rights", [
1595         bf_boolean16(0x0001, "dsired_acc_rights_read_o", "Read Only"),
1596         bf_boolean16(0x0002, "dsired_acc_rights_write_o", "Write Only"),
1597         bf_boolean16(0x0004, "dsired_acc_rights_deny_r", "Deny Read"),
1598         bf_boolean16(0x0008, "dsired_acc_rights_deny_w", "Deny Write"),
1599         bf_boolean16(0x0010, "dsired_acc_rights_compat", "Compatibility"),
1600         bf_boolean16(0x0040, "dsired_acc_rights_w_thru", "File Write Through"),
1601         bf_boolean16(0x0400, "dsired_acc_rights_del_file_cls", "Delete File Close"),
1602 ])
1603 DesiredResponseCount            = uint16("desired_response_count", "Desired Response Count")
1604 DestDirHandle                   = uint8("dest_dir_handle", "Destination Directory Handle")
1605 DestNameSpace                   = val_string8("dest_name_space", "Destination Name Space", [
1606         [ 0x00, "DOS Name Space" ],
1607         [ 0x01, "MAC Name Space" ],
1608         [ 0x02, "NFS Name Space" ],
1609         [ 0x04, "Long Name Space" ],
1610 ])
1611 DestPathComponentCount          = uint8("dest_component_count", "Destination Path Component Count")
1612 DestPath                        = nstring8("dest_path", "Destination Path")
1613 DetachDuringProcessing          = uint16("detach_during_processing", "Detach During Processing")
1614 DetachForBadConnectionNumber    = uint16("detach_for_bad_connection_number", "Detach For Bad Connection Number")
1615 DirHandle                       = uint8("dir_handle", "Directory Handle")
1616 DirHandleName                   = uint8("dir_handle_name", "Handle Name")
1617 DirHandleLong                   = uint32("dir_handle_long", "Directory Handle")
1618 DirectoryAccessRights           = uint8("directory_access_rights", "Directory Access Rights")
1619 DirectoryAttributes             = uint8("directory_attributes", "Directory Attributes")
1620 DirectoryBase                   = uint32("dir_base", "Directory Base")
1621 DirectoryBase.Display("BASE_HEX")
1622 DirectoryCount                  = uint16("dir_count", "Directory Count")
1623 DirectoryEntryNumber            = uint32("directory_entry_number", "Directory Entry Number")
1624 DirectoryEntryNumber.Display('BASE_HEX')
1625 DirectoryEntryNumberWord        = uint16("directory_entry_number_word", "Directory Entry Number")
1626 DirectoryID                     = uint16("directory_id", "Directory ID")
1627 DirectoryID.Display("BASE_HEX")
1628 DirectoryName                   = fw_string("directory_name", "Directory Name",12)
1629 DirectoryName14                 = fw_string("directory_name_14", "Directory Name", 14)
1630 DirectoryNameLen                = uint8("directory_name_len", "Directory Name Length")
1631 DirectoryNumber                 = uint32("directory_number", "Directory Number")
1632 DirectoryNumber.Display("BASE_HEX")
1633 DirectoryPath                   = fw_string("directory_path", "Directory Path", 16)
1634 DirectoryServicesObjectID       = uint32("directory_services_object_id", "Directory Services Object ID")
1635 DirectoryServicesObjectID.Display("BASE_HEX")
1636 DirectoryStamp                  = uint16("directory_stamp", "Directory Stamp (0xD1D1)")
1637 DirtyCacheBuffers               = uint16("dirty_cache_buffers", "Dirty Cache Buffers")
1638 DiskChannelNumber               = uint8("disk_channel_number", "Disk Channel Number")
1639 DiskChannelTable                = val_string8("disk_channel_table", "Disk Channel Table", [
1640         [ 0x01, "XT" ],
1641         [ 0x02, "AT" ],
1642         [ 0x03, "SCSI" ],
1643         [ 0x04, "Disk Coprocessor" ],
1644 ])
1645 DiskSpaceLimit                  = uint32("disk_space_limit", "Disk Space Limit")
1646 DMAChannelsUsed                 = uint32("dma_channels_used", "DMA Channels Used")
1647 DMInfoEntries                   = uint32("dm_info_entries", "DM Info Entries")
1648 DMInfoLevel                     = val_string8("dm_info_level", "DM Info Level", [
1649         [ 0x00, "Return Detailed DM Support Module Information" ],
1650         [ 0x01, "Return Number of DM Support Modules" ],
1651         [ 0x02, "Return DM Support Modules Names" ],
1652 ])      
1653 DMFlags                         = val_string8("dm_flags", "DM Flags", [
1654         [ 0x00, "OnLine Media" ],
1655         [ 0x01, "OffLine Media" ],
1656 ])
1657 DMmajorVersion                  = uint32("dm_major_version", "DM Major Version")
1658 DMminorVersion                  = uint32("dm_minor_version", "DM Minor Version")
1659 DMPresentFlag                   = val_string8("dm_present_flag", "Data Migration Present Flag", [
1660         [ 0x00, "Data Migration NLM is not loaded" ],
1661         [ 0x01, "Data Migration NLM has been loaded and is running" ],
1662 ])      
1663 DOSDirectoryBase                = uint32("dos_directory_base", "DOS Directory Base")
1664 DOSDirectoryBase.Display("BASE_HEX")
1665 DOSDirectoryEntry               = uint32("dos_directory_entry", "DOS Directory Entry")
1666 DOSDirectoryEntry.Display("BASE_HEX")
1667 DOSDirectoryEntryNumber         = uint32("dos_directory_entry_number", "DOS Directory Entry Number")
1668 DOSDirectoryEntryNumber.Display('BASE_HEX')
1669 DOSFileAttributes               = uint8("dos_file_attributes", "DOS File Attributes")
1670 DOSParentDirectoryEntry         = uint32("dos_parent_directory_entry", "DOS Parent Directory Entry")
1671 DOSParentDirectoryEntry.Display('BASE_HEX')
1672 DOSSequence                     = uint32("dos_sequence", "DOS Sequence")
1673 DriveCylinders                  = uint16("drive_cylinders", "Drive Cylinders")
1674 DriveDefinitionString           = fw_string("drive_definition_string", "Drive Definition", 64)
1675 DriveHeads                      = uint8("drive_heads", "Drive Heads")
1676 DriveMappingTable               = bytes("drive_mapping_table", "Drive Mapping Table", 32)
1677 DriveMirrorTable                = bytes("drive_mirror_table", "Drive Mirror Table", 32)
1678 DriverBoardName                 = stringz("driver_board_name", "Driver Board Name")
1679 DriveRemovableFlag              = val_string8("drive_removable_flag", "Drive Removable Flag", [
1680         [ 0x00, "Nonremovable" ],
1681         [ 0xff, "Removable" ],
1682 ])
1683 DriverLogicalName               = stringz("driver_log_name", "Driver Logical Name")
1684 DriverShortName                 = stringz("driver_short_name", "Driver Short Name")
1685 DriveSize                       = uint32("drive_size", "Drive Size")
1686 DstEAFlags                      = val_string16("dst_ea_flags", "Destination EA Flags", [
1687         [ 0x0000, "Return EAHandle,Information Level 0" ],
1688         [ 0x0001, "Return NetWareHandle,Information Level 0" ],
1689         [ 0x0002, "Return Volume/Directory Number,Information Level 0" ],
1690         [ 0x0004, "Return EAHandle,Close Handle on Error,Information Level 0" ],
1691         [ 0x0005, "Return NetWareHandle,Close Handle on Error,Information Level 0" ],
1692         [ 0x0006, "Return Volume/Directory Number,Close Handle on Error,Information Level 0" ],
1693         [ 0x0010, "Return EAHandle,Information Level 1" ],
1694         [ 0x0011, "Return NetWareHandle,Information Level 1" ],
1695         [ 0x0012, "Return Volume/Directory Number,Information Level 1" ],
1696         [ 0x0014, "Return EAHandle,Close Handle on Error,Information Level 1" ],
1697         [ 0x0015, "Return NetWareHandle,Close Handle on Error,Information Level 1" ],
1698         [ 0x0016, "Return Volume/Directory Number,Close Handle on Error,Information Level 1" ],
1699         [ 0x0020, "Return EAHandle,Information Level 2" ],
1700         [ 0x0021, "Return NetWareHandle,Information Level 2" ],
1701         [ 0x0022, "Return Volume/Directory Number,Information Level 2" ],
1702         [ 0x0024, "Return EAHandle,Close Handle on Error,Information Level 2" ],
1703         [ 0x0025, "Return NetWareHandle,Close Handle on Error,Information Level 2" ],
1704         [ 0x0026, "Return Volume/Directory Number,Close Handle on Error,Information Level 2" ],
1705         [ 0x0030, "Return EAHandle,Information Level 3" ],
1706         [ 0x0031, "Return NetWareHandle,Information Level 3" ],
1707         [ 0x0032, "Return Volume/Directory Number,Information Level 3" ],
1708         [ 0x0034, "Return EAHandle,Close Handle on Error,Information Level 3" ],
1709         [ 0x0035, "Return NetWareHandle,Close Handle on Error,Information Level 3" ],
1710         [ 0x0036, "Return Volume/Directory Number,Close Handle on Error,Information Level 3" ],
1711         [ 0x0040, "Return EAHandle,Information Level 4" ],
1712         [ 0x0041, "Return NetWareHandle,Information Level 4" ],
1713         [ 0x0042, "Return Volume/Directory Number,Information Level 4" ],
1714         [ 0x0044, "Return EAHandle,Close Handle on Error,Information Level 4" ],
1715         [ 0x0045, "Return NetWareHandle,Close Handle on Error,Information Level 4" ],
1716         [ 0x0046, "Return Volume/Directory Number,Close Handle on Error,Information Level 4" ],
1717         [ 0x0050, "Return EAHandle,Information Level 5" ],
1718         [ 0x0051, "Return NetWareHandle,Information Level 5" ],
1719         [ 0x0052, "Return Volume/Directory Number,Information Level 5" ],
1720         [ 0x0054, "Return EAHandle,Close Handle on Error,Information Level 5" ],
1721         [ 0x0055, "Return NetWareHandle,Close Handle on Error,Information Level 5" ],
1722         [ 0x0056, "Return Volume/Directory Number,Close Handle on Error,Information Level 5" ],
1723         [ 0x0060, "Return EAHandle,Information Level 6" ],
1724         [ 0x0061, "Return NetWareHandle,Information Level 6" ],
1725         [ 0x0062, "Return Volume/Directory Number,Information Level 6" ],
1726         [ 0x0064, "Return EAHandle,Close Handle on Error,Information Level 6" ],
1727         [ 0x0065, "Return NetWareHandle,Close Handle on Error,Information Level 6" ],
1728         [ 0x0066, "Return Volume/Directory Number,Close Handle on Error,Information Level 6" ],
1729         [ 0x0070, "Return EAHandle,Information Level 7" ],
1730         [ 0x0071, "Return NetWareHandle,Information Level 7" ],
1731         [ 0x0072, "Return Volume/Directory Number,Information Level 7" ],
1732         [ 0x0074, "Return EAHandle,Close Handle on Error,Information Level 7" ],
1733         [ 0x0075, "Return NetWareHandle,Close Handle on Error,Information Level 7" ],
1734         [ 0x0076, "Return Volume/Directory Number,Close Handle on Error,Information Level 7" ],
1735         [ 0x0080, "Return EAHandle,Information Level 0,Immediate Close Handle" ],
1736         [ 0x0081, "Return NetWareHandle,Information Level 0,Immediate Close Handle" ],
1737         [ 0x0082, "Return Volume/Directory Number,Information Level 0,Immediate Close Handle" ],
1738         [ 0x0084, "Return EAHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1739         [ 0x0085, "Return NetWareHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1740         [ 0x0086, "Return Volume/Directory Number,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1741         [ 0x0090, "Return EAHandle,Information Level 1,Immediate Close Handle" ],
1742         [ 0x0091, "Return NetWareHandle,Information Level 1,Immediate Close Handle" ],
1743         [ 0x0092, "Return Volume/Directory Number,Information Level 1,Immediate Close Handle" ],
1744         [ 0x0094, "Return EAHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1745         [ 0x0095, "Return NetWareHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1746         [ 0x0096, "Return Volume/Directory Number,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1747         [ 0x00a0, "Return EAHandle,Information Level 2,Immediate Close Handle" ],
1748         [ 0x00a1, "Return NetWareHandle,Information Level 2,Immediate Close Handle" ],
1749         [ 0x00a2, "Return Volume/Directory Number,Information Level 2,Immediate Close Handle" ],
1750         [ 0x00a4, "Return EAHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1751         [ 0x00a5, "Return NetWareHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1752         [ 0x00a6, "Return Volume/Directory Number,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1753         [ 0x00b0, "Return EAHandle,Information Level 3,Immediate Close Handle" ],
1754         [ 0x00b1, "Return NetWareHandle,Information Level 3,Immediate Close Handle" ],
1755         [ 0x00b2, "Return Volume/Directory Number,Information Level 3,Immediate Close Handle" ],
1756         [ 0x00b4, "Return EAHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1757         [ 0x00b5, "Return NetWareHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1758         [ 0x00b6, "Return Volume/Directory Number,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1759         [ 0x00c0, "Return EAHandle,Information Level 4,Immediate Close Handle" ],
1760         [ 0x00c1, "Return NetWareHandle,Information Level 4,Immediate Close Handle" ],
1761         [ 0x00c2, "Return Volume/Directory Number,Information Level 4,Immediate Close Handle" ],
1762         [ 0x00c4, "Return EAHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1763         [ 0x00c5, "Return NetWareHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1764         [ 0x00c6, "Return Volume/Directory Number,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1765         [ 0x00d0, "Return EAHandle,Information Level 5,Immediate Close Handle" ],
1766         [ 0x00d1, "Return NetWareHandle,Information Level 5,Immediate Close Handle" ],
1767         [ 0x00d2, "Return Volume/Directory Number,Information Level 5,Immediate Close Handle" ],
1768         [ 0x00d4, "Return EAHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1769         [ 0x00d5, "Return NetWareHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1770         [ 0x00d6, "Return Volume/Directory Number,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1771         [ 0x00e0, "Return EAHandle,Information Level 6,Immediate Close Handle" ],
1772         [ 0x00e1, "Return NetWareHandle,Information Level 6,Immediate Close Handle" ],
1773         [ 0x00e2, "Return Volume/Directory Number,Information Level 6,Immediate Close Handle" ],
1774         [ 0x00e4, "Return EAHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1775         [ 0x00e5, "Return NetWareHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1776         [ 0x00e6, "Return Volume/Directory Number,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1777         [ 0x00f0, "Return EAHandle,Information Level 7,Immediate Close Handle" ],
1778         [ 0x00f1, "Return NetWareHandle,Information Level 7,Immediate Close Handle" ],
1779         [ 0x00f2, "Return Volume/Directory Number,Information Level 7,Immediate Close Handle" ],
1780         [ 0x00f4, "Return EAHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1781         [ 0x00f5, "Return NetWareHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1782         [ 0x00f6, "Return Volume/Directory Number,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1783 ])
1784 dstNSIndicator                  = val_string16("dst_ns_indicator", "Destination Name Space Indicator", [
1785         [ 0x0000, "Return Source Name Space Information" ],
1786         [ 0x0001, "Return Destination Name Space Information" ],
1787 ])      
1788 DstQueueID                      = uint32("dst_queue_id", "Destination Queue ID")
1789 DuplicateRepliesSent            = uint16("duplicate_replies_sent", "Duplicate Replies Sent")
1790
1791 EAAccessFlag                    = bitfield16("ea_access_flag", "EA Access Flag", [
1792         bf_boolean16(0x0001, "ea_permanent_memory", "Permanent Memory"),
1793         bf_boolean16(0x0002, "ea_deep_freeze", "Deep Freeze"),
1794         bf_boolean16(0x0004, "ea_in_progress", "In Progress"),
1795         bf_boolean16(0x0008, "ea_header_being_enlarged", "Header Being Enlarged"),
1796         bf_boolean16(0x0010, "ea_new_tally_used", "New Tally Used"),
1797         bf_boolean16(0x0020, "ea_tally_need_update", "Tally Need Update"),
1798         bf_boolean16(0x0040, "ea_score_card_present", "Score Card Present"),
1799         bf_boolean16(0x0080, "ea_need_bit_flag", "EA Need Bit Flag"),
1800         bf_boolean16(0x0100, "ea_write_privileges", "Write Privileges"),
1801         bf_boolean16(0x0200, "ea_read_privileges", "Read Privileges"),
1802         bf_boolean16(0x0400, "ea_delete_privileges", "Delete Privileges"),
1803         bf_boolean16(0x0800, "ea_system_ea_only", "System EA Only"),
1804         bf_boolean16(0x1000, "ea_write_in_progress", "Write In Progress"),
1805 ])
1806 EABytesWritten                  = uint32("ea_bytes_written", "Bytes Written")
1807 EACount                         = uint32("ea_count", "Count")
1808 EADataSize                      = uint32("ea_data_size", "Data Size")
1809 EADataSizeDuplicated            = uint32("ea_data_size_duplicated", "Data Size Duplicated")
1810 EADuplicateCount                = uint32("ea_duplicate_count", "Duplicate Count")
1811 EAErrorCodes                    = val_string16("ea_error_codes", "EA Error Codes", [
1812         [ 0x0000, "SUCCESSFUL" ],
1813         [ 0x00c8, "ERR_MISSING_EA_KEY" ],
1814         [ 0x00c9, "ERR_EA_NOT_FOUND" ],
1815         [ 0x00ca, "ERR_INVALID_EA_HANDLE_TYPE" ],
1816         [ 0x00cb, "ERR_EA_NO_KEY_NO_DATA" ],
1817         [ 0x00cc, "ERR_EA_NUMBER_MISMATCH" ],
1818         [ 0x00cd, "ERR_EXTENT_NUMBER_OUT_OF_RANGE" ],
1819         [ 0x00ce, "ERR_EA_BAD_DIR_NUM" ],
1820         [ 0x00cf, "ERR_INVALID_EA_HANDLE" ],
1821         [ 0x00d0, "ERR_EA_POSITION_OUT_OF_RANGE" ],
1822         [ 0x00d1, "ERR_EA_ACCESS_DENIED" ],
1823         [ 0x00d2, "ERR_DATA_PAGE_ODD_SIZE" ],
1824         [ 0x00d3, "ERR_EA_VOLUME_NOT_MOUNTED" ],
1825         [ 0x00d4, "ERR_BAD_PAGE_BOUNDARY" ],
1826         [ 0x00d5, "ERR_INSPECT_FAILURE" ],
1827         [ 0x00d6, "ERR_EA_ALREADY_CLAIMED" ],
1828         [ 0x00d7, "ERR_ODD_BUFFER_SIZE" ],
1829         [ 0x00d8, "ERR_NO_SCORECARDS" ],
1830         [ 0x00d9, "ERR_BAD_EDS_SIGNATURE" ],
1831         [ 0x00da, "ERR_EA_SPACE_LIMIT" ],
1832         [ 0x00db, "ERR_EA_KEY_CORRUPT" ],
1833         [ 0x00dc, "ERR_EA_KEY_LIMIT" ],
1834         [ 0x00dd, "ERR_TALLY_CORRUPT" ],
1835 ])
1836 EAFlags                         = val_string16("ea_flags", "EA Flags", [
1837         [ 0x0000, "Return EAHandle,Information Level 0" ],
1838         [ 0x0001, "Return NetWareHandle,Information Level 0" ],
1839         [ 0x0002, "Return Volume/Directory Number,Information Level 0" ],
1840         [ 0x0004, "Return EAHandle,Close Handle on Error,Information Level 0" ],
1841         [ 0x0005, "Return NetWareHandle,Close Handle on Error,Information Level 0" ],
1842         [ 0x0006, "Return Volume/Directory Number,Close Handle on Error,Information Level 0" ],
1843         [ 0x0010, "Return EAHandle,Information Level 1" ],
1844         [ 0x0011, "Return NetWareHandle,Information Level 1" ],
1845         [ 0x0012, "Return Volume/Directory Number,Information Level 1" ],
1846         [ 0x0014, "Return EAHandle,Close Handle on Error,Information Level 1" ],
1847         [ 0x0015, "Return NetWareHandle,Close Handle on Error,Information Level 1" ],
1848         [ 0x0016, "Return Volume/Directory Number,Close Handle on Error,Information Level 1" ],
1849         [ 0x0020, "Return EAHandle,Information Level 2" ],
1850         [ 0x0021, "Return NetWareHandle,Information Level 2" ],
1851         [ 0x0022, "Return Volume/Directory Number,Information Level 2" ],
1852         [ 0x0024, "Return EAHandle,Close Handle on Error,Information Level 2" ],
1853         [ 0x0025, "Return NetWareHandle,Close Handle on Error,Information Level 2" ],
1854         [ 0x0026, "Return Volume/Directory Number,Close Handle on Error,Information Level 2" ],
1855         [ 0x0030, "Return EAHandle,Information Level 3" ],
1856         [ 0x0031, "Return NetWareHandle,Information Level 3" ],
1857         [ 0x0032, "Return Volume/Directory Number,Information Level 3" ],
1858         [ 0x0034, "Return EAHandle,Close Handle on Error,Information Level 3" ],
1859         [ 0x0035, "Return NetWareHandle,Close Handle on Error,Information Level 3" ],
1860         [ 0x0036, "Return Volume/Directory Number,Close Handle on Error,Information Level 3" ],
1861         [ 0x0040, "Return EAHandle,Information Level 4" ],
1862         [ 0x0041, "Return NetWareHandle,Information Level 4" ],
1863         [ 0x0042, "Return Volume/Directory Number,Information Level 4" ],
1864         [ 0x0044, "Return EAHandle,Close Handle on Error,Information Level 4" ],
1865         [ 0x0045, "Return NetWareHandle,Close Handle on Error,Information Level 4" ],
1866         [ 0x0046, "Return Volume/Directory Number,Close Handle on Error,Information Level 4" ],
1867         [ 0x0050, "Return EAHandle,Information Level 5" ],
1868         [ 0x0051, "Return NetWareHandle,Information Level 5" ],
1869         [ 0x0052, "Return Volume/Directory Number,Information Level 5" ],
1870         [ 0x0054, "Return EAHandle,Close Handle on Error,Information Level 5" ],
1871         [ 0x0055, "Return NetWareHandle,Close Handle on Error,Information Level 5" ],
1872         [ 0x0056, "Return Volume/Directory Number,Close Handle on Error,Information Level 5" ],
1873         [ 0x0060, "Return EAHandle,Information Level 6" ],
1874         [ 0x0061, "Return NetWareHandle,Information Level 6" ],
1875         [ 0x0062, "Return Volume/Directory Number,Information Level 6" ],
1876         [ 0x0064, "Return EAHandle,Close Handle on Error,Information Level 6" ],
1877         [ 0x0065, "Return NetWareHandle,Close Handle on Error,Information Level 6" ],
1878         [ 0x0066, "Return Volume/Directory Number,Close Handle on Error,Information Level 6" ],
1879         [ 0x0070, "Return EAHandle,Information Level 7" ],
1880         [ 0x0071, "Return NetWareHandle,Information Level 7" ],
1881         [ 0x0072, "Return Volume/Directory Number,Information Level 7" ],
1882         [ 0x0074, "Return EAHandle,Close Handle on Error,Information Level 7" ],
1883         [ 0x0075, "Return NetWareHandle,Close Handle on Error,Information Level 7" ],
1884         [ 0x0076, "Return Volume/Directory Number,Close Handle on Error,Information Level 7" ],
1885         [ 0x0080, "Return EAHandle,Information Level 0,Immediate Close Handle" ],
1886         [ 0x0081, "Return NetWareHandle,Information Level 0,Immediate Close Handle" ],
1887         [ 0x0082, "Return Volume/Directory Number,Information Level 0,Immediate Close Handle" ],
1888         [ 0x0084, "Return EAHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1889         [ 0x0085, "Return NetWareHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1890         [ 0x0086, "Return Volume/Directory Number,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1891         [ 0x0090, "Return EAHandle,Information Level 1,Immediate Close Handle" ],
1892         [ 0x0091, "Return NetWareHandle,Information Level 1,Immediate Close Handle" ],
1893         [ 0x0092, "Return Volume/Directory Number,Information Level 1,Immediate Close Handle" ],
1894         [ 0x0094, "Return EAHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1895         [ 0x0095, "Return NetWareHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1896         [ 0x0096, "Return Volume/Directory Number,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1897         [ 0x00a0, "Return EAHandle,Information Level 2,Immediate Close Handle" ],
1898         [ 0x00a1, "Return NetWareHandle,Information Level 2,Immediate Close Handle" ],
1899         [ 0x00a2, "Return Volume/Directory Number,Information Level 2,Immediate Close Handle" ],
1900         [ 0x00a4, "Return EAHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1901         [ 0x00a5, "Return NetWareHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1902         [ 0x00a6, "Return Volume/Directory Number,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1903         [ 0x00b0, "Return EAHandle,Information Level 3,Immediate Close Handle" ],
1904         [ 0x00b1, "Return NetWareHandle,Information Level 3,Immediate Close Handle" ],
1905         [ 0x00b2, "Return Volume/Directory Number,Information Level 3,Immediate Close Handle" ],
1906         [ 0x00b4, "Return EAHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1907         [ 0x00b5, "Return NetWareHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1908         [ 0x00b6, "Return Volume/Directory Number,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1909         [ 0x00c0, "Return EAHandle,Information Level 4,Immediate Close Handle" ],
1910         [ 0x00c1, "Return NetWareHandle,Information Level 4,Immediate Close Handle" ],
1911         [ 0x00c2, "Return Volume/Directory Number,Information Level 4,Immediate Close Handle" ],
1912         [ 0x00c4, "Return EAHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1913         [ 0x00c5, "Return NetWareHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1914         [ 0x00c6, "Return Volume/Directory Number,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1915         [ 0x00d0, "Return EAHandle,Information Level 5,Immediate Close Handle" ],
1916         [ 0x00d1, "Return NetWareHandle,Information Level 5,Immediate Close Handle" ],
1917         [ 0x00d2, "Return Volume/Directory Number,Information Level 5,Immediate Close Handle" ],
1918         [ 0x00d4, "Return EAHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1919         [ 0x00d5, "Return NetWareHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1920         [ 0x00d6, "Return Volume/Directory Number,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1921         [ 0x00e0, "Return EAHandle,Information Level 6,Immediate Close Handle" ],
1922         [ 0x00e1, "Return NetWareHandle,Information Level 6,Immediate Close Handle" ],
1923         [ 0x00e2, "Return Volume/Directory Number,Information Level 6,Immediate Close Handle" ],
1924         [ 0x00e4, "Return EAHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1925         [ 0x00e5, "Return NetWareHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1926         [ 0x00e6, "Return Volume/Directory Number,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1927         [ 0x00f0, "Return EAHandle,Information Level 7,Immediate Close Handle" ],
1928         [ 0x00f1, "Return NetWareHandle,Information Level 7,Immediate Close Handle" ],
1929         [ 0x00f2, "Return Volume/Directory Number,Information Level 7,Immediate Close Handle" ],
1930         [ 0x00f4, "Return EAHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1931         [ 0x00f5, "Return NetWareHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1932         [ 0x00f6, "Return Volume/Directory Number,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1933 ])
1934 EAHandle                        = uint32("ea_handle", "EA Handle")
1935 EAHandle.Display("BASE_HEX")
1936 EAHandleOrNetWareHandleOrVolume = uint32("ea_handle_or_netware_handle_or_volume", "EAHandle or NetWare Handle or Volume (see EAFlags)")
1937 EAHandleOrNetWareHandleOrVolume.Display("BASE_HEX")
1938 EAKey                           = nstring16("ea_key", "EA Key")
1939 EAKeySize                       = uint32("ea_key_size", "Key Size")
1940 EAKeySizeDuplicated             = uint32("ea_key_size_duplicated", "Key Size Duplicated")
1941 EAValue                         = nstring16("ea_value", "EA Value")
1942 EAValueRep                      = fw_string("ea_value_rep", "EA Value", 1)
1943 EAValueLength                   = uint16("ea_value_length", "Value Length")
1944 EchoSocket                      = uint16("echo_socket", "Echo Socket")
1945 EchoSocket.Display('BASE_HEX')
1946 EffectiveRights                 = bitfield8("effective_rights", "Effective Rights", [
1947         bf_boolean8(0x01, "effective_rights_read", "Read Rights"),
1948         bf_boolean8(0x02, "effective_rights_write", "Write Rights"),
1949         bf_boolean8(0x04, "effective_rights_open", "Open Rights"),
1950         bf_boolean8(0x08, "effective_rights_create", "Create Rights"),
1951         bf_boolean8(0x10, "effective_rights_delete", "Delete Rights"),
1952         bf_boolean8(0x20, "effective_rights_parental", "Parental Rights"),
1953         bf_boolean8(0x40, "effective_rights_search", "Search Rights"),
1954         bf_boolean8(0x80, "effective_rights_modify", "Modify Rights"),
1955 ])
1956 EnumInfoMask                    = bitfield8("enum_info_mask", "Return Information Mask", [
1957         bf_boolean8(0x01, "enum_info_transport", "Transport Information"),
1958         bf_boolean8(0x02, "enum_info_time", "Time Information"),
1959         bf_boolean8(0x04, "enum_info_name", "Name Information"),
1960         bf_boolean8(0x08, "enum_info_lock", "Lock Information"),
1961         bf_boolean8(0x10, "enum_info_print", "Print Information"),
1962         bf_boolean8(0x20, "enum_info_stats", "Statistical Information"),
1963         bf_boolean8(0x40, "enum_info_account", "Accounting Information"),
1964         bf_boolean8(0x80, "enum_info_auth", "Authentication Information"),
1965 ])
1966
1967 eventOffset                     = bytes("event_offset", "Event Offset", 8)
1968 eventOffset.Display("BASE_HEX")
1969 eventTime                       = uint32("event_time", "Event Time")
1970 eventTime.Display("BASE_HEX")
1971 ExpirationTime                  = uint32("expiration_time", "Expiration Time")
1972 ExpirationTime.Display('BASE_HEX')
1973 ExtAttrDataSize                 = uint32("ext_attr_data_size", "Extended Attributes Data Size")
1974 ExtAttrCount                    = uint32("ext_attr_count", "Extended Attributes Count")
1975 ExtAttrKeySize                  = uint32("ext_attr_key_size", "Extended Attributes Key Size")
1976 ExtendedAttributesDefined       = uint32("extended_attributes_defined", "Extended Attributes Defined")
1977 ExtendedAttributeExtantsUsed    = uint32("extended_attribute_extants_used", "Extended Attribute Extants Used")
1978 ExtendedInfo                    = bitfield16("ext_info", "Extended Return Information", [
1979         bf_boolean16(0x0001, "ext_info_update", "Update"),
1980         bf_boolean16(0x0002, "ext_info_dos_name", "DOS Name"),
1981         bf_boolean16(0x0004, "ext_info_flush", "Flush"),
1982         bf_boolean16(0x0008, "ext_info_parental", "Parental"),
1983         bf_boolean16(0x0010, "ext_info_mac_finder", "MAC Finder"),
1984         bf_boolean16(0x0020, "ext_info_sibling", "Sibling"),
1985         bf_boolean16(0x0040, "ext_info_effective", "Effective"),
1986         bf_boolean16(0x0080, "ext_info_mac_date", "MAC Date"),
1987         bf_boolean16(0x0100, "ext_info_access", "Last Access"),
1988         bf_boolean16(0x0400, "ext_info_64_bit_fs", "64 Bit File Sizes"),
1989         bf_boolean16(0x8000, "ext_info_newstyle", "New Style"),
1990 ])
1991 ExtRouterActiveFlag             = boolean8("ext_router_active_flag", "External Router Active Flag")
1992
1993 FailedAllocReqCnt               = uint32("failed_alloc_req", "Failed Alloc Request Count")
1994 FatalFATWriteErrors             = uint16("fatal_fat_write_errors", "Fatal FAT Write Errors")
1995 FATScanErrors                   = uint16("fat_scan_errors", "FAT Scan Errors")
1996 FATWriteErrors                  = uint16("fat_write_errors", "FAT Write Errors")
1997 FieldsLenTable                  = bytes("fields_len_table", "Fields Len Table", 32)
1998 FileCount                       = uint16("file_count", "File Count")
1999 FileDate                        = uint16("file_date", "File Date")
2000 FileDate.NWDate()
2001 FileDirWindow                   = uint16("file_dir_win", "File/Dir Window")
2002 FileDirWindow.Display("BASE_HEX")
2003 FileExecuteType                 = uint8("file_execute_type", "File Execute Type")
2004 FileExtendedAttributes          = val_string8("file_ext_attr", "File Extended Attributes", [
2005         [ 0x00, "Search On All Read Only Opens" ],
2006         [ 0x01, "Search On Read Only Opens With No Path" ],
2007         [ 0x02, "Shell Default Search Mode" ],
2008         [ 0x03, "Search On All Opens With No Path" ],
2009         [ 0x04, "Do Not Search" ],
2010         [ 0x05, "Reserved" ],
2011         [ 0x06, "Search On All Opens" ],
2012         [ 0x07, "Reserved" ],
2013         [ 0x08, "Search On All Read Only Opens/Indexed" ],
2014         [ 0x09, "Search On Read Only Opens With No Path/Indexed" ],
2015         [ 0x0a, "Shell Default Search Mode/Indexed" ],
2016         [ 0x0b, "Search On All Opens With No Path/Indexed" ],
2017         [ 0x0c, "Do Not Search/Indexed" ],
2018         [ 0x0d, "Indexed" ],
2019         [ 0x0e, "Search On All Opens/Indexed" ],
2020         [ 0x0f, "Indexed" ],
2021         [ 0x10, "Search On All Read Only Opens/Transactional" ],
2022         [ 0x11, "Search On Read Only Opens With No Path/Transactional" ],
2023         [ 0x12, "Shell Default Search Mode/Transactional" ],
2024         [ 0x13, "Search On All Opens With No Path/Transactional" ],
2025         [ 0x14, "Do Not Search/Transactional" ],
2026         [ 0x15, "Transactional" ],
2027         [ 0x16, "Search On All Opens/Transactional" ],
2028         [ 0x17, "Transactional" ],
2029         [ 0x18, "Search On All Read Only Opens/Indexed/Transactional" ],
2030         [ 0x19, "Search On Read Only Opens With No Path/Indexed/Transactional" ],
2031         [ 0x1a, "Shell Default Search Mode/Indexed/Transactional" ],
2032         [ 0x1b, "Search On All Opens With No Path/Indexed/Transactional" ],
2033         [ 0x1c, "Do Not Search/Indexed/Transactional" ],
2034         [ 0x1d, "Indexed/Transactional" ],
2035         [ 0x1e, "Search On All Opens/Indexed/Transactional" ],
2036         [ 0x1f, "Indexed/Transactional" ],
2037         [ 0x40, "Search On All Read Only Opens/Read Audit" ],
2038         [ 0x41, "Search On Read Only Opens With No Path/Read Audit" ],
2039         [ 0x42, "Shell Default Search Mode/Read Audit" ],
2040         [ 0x43, "Search On All Opens With No Path/Read Audit" ],
2041         [ 0x44, "Do Not Search/Read Audit" ],
2042         [ 0x45, "Read Audit" ],
2043         [ 0x46, "Search On All Opens/Read Audit" ],
2044         [ 0x47, "Read Audit" ],
2045         [ 0x48, "Search On All Read Only Opens/Indexed/Read Audit" ],
2046         [ 0x49, "Search On Read Only Opens With No Path/Indexed/Read Audit" ],
2047         [ 0x4a, "Shell Default Search Mode/Indexed/Read Audit" ],
2048         [ 0x4b, "Search On All Opens With No Path/Indexed/Read Audit" ],
2049         [ 0x4c, "Do Not Search/Indexed/Read Audit" ],
2050         [ 0x4d, "Indexed/Read Audit" ],
2051         [ 0x4e, "Search On All Opens/Indexed/Read Audit" ],
2052         [ 0x4f, "Indexed/Read Audit" ],
2053         [ 0x50, "Search On All Read Only Opens/Transactional/Read Audit" ],
2054         [ 0x51, "Search On Read Only Opens With No Path/Transactional/Read Audit" ],
2055         [ 0x52, "Shell Default Search Mode/Transactional/Read Audit" ],
2056         [ 0x53, "Search On All Opens With No Path/Transactional/Read Audit" ],
2057         [ 0x54, "Do Not Search/Transactional/Read Audit" ],
2058         [ 0x55, "Transactional/Read Audit" ],
2059         [ 0x56, "Search On All Opens/Transactional/Read Audit" ],
2060         [ 0x57, "Transactional/Read Audit" ],
2061         [ 0x58, "Search On All Read Only Opens/Indexed/Transactional/Read Audit" ],
2062         [ 0x59, "Search On Read Only Opens With No Path/Indexed/Transactional/Read Audit" ],
2063         [ 0x5a, "Shell Default Search Mode/Indexed/Transactional/Read Audit" ],
2064         [ 0x5b, "Search On All Opens With No Path/Indexed/Transactional/Read Audit" ],
2065         [ 0x5c, "Do Not Search/Indexed/Transactional/Read Audit" ],
2066         [ 0x5d, "Indexed/Transactional/Read Audit" ],
2067         [ 0x5e, "Search On All Opens/Indexed/Transactional/Read Audit" ],
2068         [ 0x5f, "Indexed/Transactional/Read Audit" ],
2069         [ 0x80, "Search On All Read Only Opens/Write Audit" ],
2070         [ 0x81, "Search On Read Only Opens With No Path/Write Audit" ],
2071         [ 0x82, "Shell Default Search Mode/Write Audit" ],
2072         [ 0x83, "Search On All Opens With No Path/Write Audit" ],
2073         [ 0x84, "Do Not Search/Write Audit" ],
2074         [ 0x85, "Write Audit" ],
2075         [ 0x86, "Search On All Opens/Write Audit" ],
2076         [ 0x87, "Write Audit" ],
2077         [ 0x88, "Search On All Read Only Opens/Indexed/Write Audit" ],
2078         [ 0x89, "Search On Read Only Opens With No Path/Indexed/Write Audit" ],
2079         [ 0x8a, "Shell Default Search Mode/Indexed/Write Audit" ],
2080         [ 0x8b, "Search On All Opens With No Path/Indexed/Write Audit" ],
2081         [ 0x8c, "Do Not Search/Indexed/Write Audit" ],
2082         [ 0x8d, "Indexed/Write Audit" ],
2083         [ 0x8e, "Search On All Opens/Indexed/Write Audit" ],
2084         [ 0x8f, "Indexed/Write Audit" ],
2085         [ 0x90, "Search On All Read Only Opens/Transactional/Write Audit" ],
2086         [ 0x91, "Search On Read Only Opens With No Path/Transactional/Write Audit" ],
2087         [ 0x92, "Shell Default Search Mode/Transactional/Write Audit" ],
2088         [ 0x93, "Search On All Opens With No Path/Transactional/Write Audit" ],
2089         [ 0x94, "Do Not Search/Transactional/Write Audit" ],
2090         [ 0x95, "Transactional/Write Audit" ],
2091         [ 0x96, "Search On All Opens/Transactional/Write Audit" ],
2092         [ 0x97, "Transactional/Write Audit" ],
2093         [ 0x98, "Search On All Read Only Opens/Indexed/Transactional/Write Audit" ],
2094         [ 0x99, "Search On Read Only Opens With No Path/Indexed/Transactional/Write Audit" ],
2095         [ 0x9a, "Shell Default Search Mode/Indexed/Transactional/Write Audit" ],
2096         [ 0x9b, "Search On All Opens With No Path/Indexed/Transactional/Write Audit" ],
2097         [ 0x9c, "Do Not Search/Indexed/Transactional/Write Audit" ],
2098         [ 0x9d, "Indexed/Transactional/Write Audit" ],
2099         [ 0x9e, "Search On All Opens/Indexed/Transactional/Write Audit" ],
2100         [ 0x9f, "Indexed/Transactional/Write Audit" ],
2101         [ 0xa0, "Search On All Read Only Opens/Read Audit/Write Audit" ],
2102         [ 0xa1, "Search On Read Only Opens With No Path/Read Audit/Write Audit" ],
2103         [ 0xa2, "Shell Default Search Mode/Read Audit/Write Audit" ],
2104         [ 0xa3, "Search On All Opens With No Path/Read Audit/Write Audit" ],
2105         [ 0xa4, "Do Not Search/Read Audit/Write Audit" ],
2106         [ 0xa5, "Read Audit/Write Audit" ],
2107         [ 0xa6, "Search On All Opens/Read Audit/Write Audit" ],
2108         [ 0xa7, "Read Audit/Write Audit" ],
2109         [ 0xa8, "Search On All Read Only Opens/Indexed/Read Audit/Write Audit" ],
2110         [ 0xa9, "Search On Read Only Opens With No Path/Indexed/Read Audit/Write Audit" ],
2111         [ 0xaa, "Shell Default Search Mode/Indexed/Read Audit/Write Audit" ],
2112         [ 0xab, "Search On All Opens With No Path/Indexed/Read Audit/Write Audit" ],
2113         [ 0xac, "Do Not Search/Indexed/Read Audit/Write Audit" ],
2114         [ 0xad, "Indexed/Read Audit/Write Audit" ],
2115         [ 0xae, "Search On All Opens/Indexed/Read Audit/Write Audit" ],
2116         [ 0xaf, "Indexed/Read Audit/Write Audit" ],
2117         [ 0xb0, "Search On All Read Only Opens/Transactional/Read Audit/Write Audit" ],
2118         [ 0xb1, "Search On Read Only Opens With No Path/Transactional/Read Audit/Write Audit" ],
2119         [ 0xb2, "Shell Default Search Mode/Transactional/Read Audit/Write Audit" ],
2120         [ 0xb3, "Search On All Opens With No Path/Transactional/Read Audit/Write Audit" ],
2121         [ 0xb4, "Do Not Search/Transactional/Read Audit/Write Audit" ],
2122         [ 0xb5, "Transactional/Read Audit/Write Audit" ],
2123         [ 0xb6, "Search On All Opens/Transactional/Read Audit/Write Audit" ],
2124         [ 0xb7, "Transactional/Read Audit/Write Audit" ],
2125         [ 0xb8, "Search On All Read Only Opens/Indexed/Transactional/Read Audit/Write Audit" ],
2126         [ 0xb9, "Search On Read Only Opens With No Path/Indexed/Transactional/Read Audit/Write Audit" ],
2127         [ 0xba, "Shell Default Search Mode/Indexed/Transactional/Read Audit/Write Audit" ],
2128         [ 0xbb, "Search On All Opens With No Path/Indexed/Transactional/Read Audit/Write Audit" ],
2129         [ 0xbc, "Do Not Search/Indexed/Transactional/Read Audit/Write Audit" ],
2130         [ 0xbd, "Indexed/Transactional/Read Audit/Write Audit" ],
2131         [ 0xbe, "Search On All Opens/Indexed/Transactional/Read Audit/Write Audit" ],
2132         [ 0xbf, "Indexed/Transactional/Read Audit/Write Audit" ],
2133 ])
2134 fileFlags                       = uint32("file_flags", "File Flags")
2135 FileHandle                      = bytes("file_handle", "File Handle", 6)
2136 FileLimbo                       = uint32("file_limbo", "File Limbo")
2137 FileListCount                   = uint32("file_list_count", "File List Count")
2138 FileLock                        = val_string8("file_lock", "File Lock", [
2139         [ 0x00, "Not Locked" ],
2140         [ 0xfe, "Locked by file lock" ],
2141         [ 0xff, "Unknown" ],
2142 ])
2143 FileLockCount                   = uint16("file_lock_count", "File Lock Count")
2144 FileMode                        = uint8("file_mode", "File Mode")
2145 FileName                        = nstring8("file_name", "Filename")
2146 FileName12                      = fw_string("file_name_12", "Filename", 12)
2147 FileName14                      = fw_string("file_name_14", "Filename", 14)
2148 FileNameLen                     = uint8("file_name_len", "Filename Length")
2149 FileOffset                      = uint32("file_offset", "File Offset")
2150 FilePath                        = nstring8("file_path", "File Path")
2151 FileSize                        = uint32("file_size", "File Size", BE)
2152 FileSystemID                    = uint8("file_system_id", "File System ID")
2153 FileTime                        = uint16("file_time", "File Time")
2154 FileTime.NWTime()
2155 FileWriteFlags                  = val_string8("file_write_flags", "File Write Flags", [
2156         [ 0x01, "Writing" ],
2157         [ 0x02, "Write aborted" ],
2158 ])
2159 FileWriteState                  = val_string8("file_write_state", "File Write State", [
2160         [ 0x00, "Not Writing" ],
2161         [ 0x01, "Write in Progress" ],
2162         [ 0x02, "Write Being Stopped" ],
2163 ])
2164 Filler                          = uint8("filler", "Filler")
2165 FinderAttr                      = bitfield16("finder_attr", "Finder Info Attributes", [
2166         bf_boolean16(0x0001, "finder_attr_desktop", "Object on Desktop"),
2167         bf_boolean16(0x2000, "finder_attr_invisible", "Object is Invisible"),
2168         bf_boolean16(0x4000, "finder_attr_bundle", "Object Has Bundle"),
2169 ])
2170 FixedBitMask                    = uint32("fixed_bit_mask", "Fixed Bit Mask")
2171 FixedBitsDefined                = uint16("fixed_bits_defined", "Fixed Bits Defined")
2172 FlagBits                        = uint8("flag_bits", "Flag Bits")
2173 Flags                           = uint8("flags", "Flags")
2174 FlagsDef                        = uint16("flags_def", "Flags")
2175 FlushTime                       = uint32("flush_time", "Flush Time")
2176 FolderFlag                      = val_string8("folder_flag", "Folder Flag", [
2177         [ 0x00, "Not a Folder" ],
2178         [ 0x01, "Folder" ],
2179 ])
2180 ForkCount                       = uint8("fork_count", "Fork Count")
2181 ForkIndicator                   = val_string8("fork_indicator", "Fork Indicator", [
2182         [ 0x00, "Data Fork" ],
2183         [ 0x01, "Resource Fork" ],
2184 ])
2185 ForceFlag                       = val_string8("force_flag", "Force Server Down Flag", [
2186         [ 0x00, "Down Server if No Files Are Open" ],
2187         [ 0xff, "Down Server Immediately, Auto-Close Open Files" ],
2188 ])
2189 ForgedDetachedRequests          = uint16("forged_detached_requests", "Forged Detached Requests")
2190 FormType                        = uint16( "form_type", "Form Type" )
2191 FormTypeCnt                     = uint32("form_type_count", "Form Types Count")
2192 FoundSomeMem                    = uint32("found_some_mem", "Found Some Memory")
2193 FractionalSeconds               = uint32("fractional_time", "Fractional Time in Seconds")
2194 FraggerHandle                   = uint32("fragger_handle", "Fragment Handle")
2195 FraggerHandle.Display('BASE_HEX')
2196 FragmentWriteOccurred           = uint16("fragment_write_occurred", "Fragment Write Occurred")
2197 FragSize                        = uint32("frag_size", "Fragment Size")
2198 FreeableLimboSectors            = uint32("freeable_limbo_sectors", "Freeable Limbo Sectors")
2199 FreeBlocks                      = uint32("free_blocks", "Free Blocks")
2200 FreedClusters                   = uint32("freed_clusters", "Freed Clusters")
2201 FreeDirectoryEntries            = uint16("free_directory_entries", "Free Directory Entries")
2202 FSEngineFlag                    = boolean8("fs_engine_flag", "FS Engine Flag")
2203 FullName                        = fw_string("full_name", "Full Name", 39)
2204
2205 GetSetFlag                      = val_string8("get_set_flag", "Get Set Flag", [
2206         [ 0x00, "Get the default support module ID" ],
2207         [ 0x01, "Set the default support module ID" ],
2208 ])      
2209 GUID                            = bytes("guid", "GUID", 16)
2210 GUID.Display("BASE_HEX")
2211
2212 HandleFlag                      = val_string8("handle_flag", "Handle Flag", [
2213         [ 0x00, "Short Directory Handle" ],
2214         [ 0x01, "Directory Base" ],
2215         [ 0xFF, "No Handle Present" ],
2216 ])
2217 HandleInfoLevel                 = val_string8("handle_info_level", "Handle Info Level", [
2218         [ 0x00, "Get Limited Information from a File Handle" ],
2219         [ 0x01, "Get Limited Information from a File Handle Using a Name Space" ],
2220         [ 0x02, "Get Information from a File Handle" ],
2221         [ 0x03, "Get Information from a Directory Handle" ],
2222         [ 0x04, "Get Complete Information from a Directory Handle" ],
2223         [ 0x05, "Get Complete Information from a File Handle" ],
2224 ])
2225 HeldBytesRead                   = bytes("held_bytes_read", "Held Bytes Read", 6)
2226 HeldBytesWritten                = bytes("held_bytes_write", "Held Bytes Written", 6)
2227 HeldConnectTimeInMinutes        = uint32("held_conn_time", "Held Connect Time in Minutes")
2228 HeldRequests                    = uint32("user_info_held_req", "Held Requests")
2229 HoldAmount                      = uint32("hold_amount", "Hold Amount")
2230 HoldCancelAmount                = uint32("hold_cancel_amount", "Hold Cancel Amount")
2231 HolderID                        = uint32("holder_id", "Holder ID")
2232 HolderID.Display("BASE_HEX")
2233 HoldTime                        = uint32("hold_time", "Hold Time")
2234 HopsToNet                       = uint16("hops_to_net", "Hop Count")
2235 HorizLocation                   = uint16("horiz_location", "Horizontal Location")
2236 HostAddress                     = bytes("host_address", "Host Address", 6)
2237 HotFixBlocksAvailable           = uint16("hot_fix_blocks_available", "Hot Fix Blocks Available")
2238 HotFixDisabled                  = val_string8("hot_fix_disabled", "Hot Fix Disabled", [
2239         [ 0x00, "Enabled" ],
2240         [ 0x01, "Disabled" ],
2241 ])
2242 HotFixTableSize                 = uint16("hot_fix_table_size", "Hot Fix Table Size")
2243 HotFixTableStart                = uint32("hot_fix_table_start", "Hot Fix Table Start")
2244 Hour                            = uint8("s_hour", "Hour")
2245 HugeBitMask                     = uint32("huge_bit_mask", "Huge Bit Mask")
2246 HugeBitsDefined                 = uint16("huge_bits_defined", "Huge Bits Defined")
2247 HugeData                        = nstring8("huge_data", "Huge Data")
2248 HugeDataUsed                    = uint32("huge_data_used", "Huge Data Used")
2249 HugeStateInfo                   = bytes("huge_state_info", "Huge State Info", 16)
2250
2251 IdentificationNumber            = uint32("identification_number", "Identification Number")
2252 IgnoredRxPkts                   = uint32("ignored_rx_pkts", "Ignored Receive Packets")
2253 IncomingPacketDiscardedNoDGroup = uint16("incoming_packet_discarded_no_dgroup", "Incoming Packet Discarded No DGroup")
2254 InfoCount                       = uint16("info_count", "Info Count")
2255 InfoFlags                       = bitfield32("info_flags", "Info Flags", [
2256         bf_boolean32(0x10000000, "info_flags_security", "Return Object Security"),
2257         bf_boolean32(0x20000000, "info_flags_flags", "Return Object Flags"),
2258         bf_boolean32(0x40000000, "info_flags_type", "Return Object Type"),
2259         bf_boolean32(0x80000000, "info_flags_name", "Return Object Name"),
2260 ])
2261 InfoLevelNumber                 = val_string8("info_level_num", "Information Level Number", [
2262         [ 0x01, "Volume Information Definition" ],
2263         [ 0x02, "Volume Information 2 Definition" ],
2264 ])        
2265 InfoMask                        = bitfield32("info_mask", "Information Mask", [
2266         bf_boolean32(0x00000001, "info_flags_dos_time", "DOS Time"),
2267         bf_boolean32(0x00000002, "info_flags_ref_count", "Reference Count"),
2268         bf_boolean32(0x00000004, "info_flags_dos_attr", "DOS Attributes"),
2269         bf_boolean32(0x00000008, "info_flags_ids", "ID's"),
2270         bf_boolean32(0x00000010, "info_flags_ds_sizes", "Data Stream Sizes"),
2271         bf_boolean32(0x00000020, "info_flags_ns_attr", "Name Space Attributes"),
2272         bf_boolean32(0x00000040, "info_flags_ea_present", "EA Present Flag"),
2273         bf_boolean32(0x00000080, "info_flags_all_attr", "All Attributes"),
2274         bf_boolean32(0x00000100, "info_flags_all_dirbase_num", "All Directory Base Numbers"),
2275         bf_boolean32(0x00000200, "info_flags_max_access_mask", "Maximum Access Mask"),
2276         bf_boolean32(0x00000400, "info_flags_flush_time", "Flush Time"),
2277         bf_boolean32(0x00000800, "info_flags_prnt_base_id", "Parent Base ID"),
2278         bf_boolean32(0x00001000, "info_flags_mac_finder", "Mac Finder Information"),
2279         bf_boolean32(0x00002000, "info_flags_sibling_cnt", "Sibling Count"),
2280         bf_boolean32(0x00004000, "info_flags_effect_rights", "Effective Rights"),
2281         bf_boolean32(0x00008000, "info_flags_mac_time", "Mac Time"),
2282         bf_boolean32(0x20000000, "info_mask_dosname", "DOS Name"),
2283         bf_boolean32(0x40000000, "info_mask_c_name_space", "Creator Name Space & Name"),
2284         bf_boolean32(0x80000000, "info_mask_name", "Name"),
2285 ])
2286 InheritedRightsMask             = bitfield16("inherited_rights_mask", "Inherited Rights Mask", [ 
2287         bf_boolean16(0x0001, "inh_rights_read", "Read Rights"),
2288         bf_boolean16(0x0002, "inh_rights_write", "Write Rights"),
2289         bf_boolean16(0x0004, "inh_rights_open", "Open Rights"),
2290         bf_boolean16(0x0008, "inh_rights_create", "Create Rights"),
2291         bf_boolean16(0x0010, "inh_rights_delete", "Delete Rights"),
2292         bf_boolean16(0x0020, "inh_rights_parent", "Change Access"),
2293         bf_boolean16(0x0040, "inh_rights_search", "See Files Flag"),
2294         bf_boolean16(0x0080, "inh_rights_modify", "Modify Rights"),
2295         bf_boolean16(0x0100, "inh_rights_supervisor", "Supervisor"),
2296 ])
2297 InheritanceRevokeMask           = bitfield16("inheritance_revoke_mask", "Revoke Rights Mask", [
2298         bf_boolean16(0x0001, "inh_revoke_read", "Read Rights"),
2299         bf_boolean16(0x0002, "inh_revoke_write", "Write Rights"),
2300         bf_boolean16(0x0004, "inh_revoke_open", "Open Rights"),
2301         bf_boolean16(0x0008, "inh_revoke_create", "Create Rights"),
2302         bf_boolean16(0x0010, "inh_revoke_delete", "Delete Rights"),
2303         bf_boolean16(0x0020, "inh_revoke_parent", "Change Access"),
2304         bf_boolean16(0x0040, "inh_revoke_search", "See Files Flag"),
2305         bf_boolean16(0x0080, "inh_revoke_modify", "Modify Rights"),
2306         bf_boolean16(0x0100, "inh_revoke_supervisor", "Supervisor"),
2307 ])
2308 InitialSemaphoreValue           = uint8("initial_semaphore_value", "Initial Semaphore Value")
2309 InspectSize                     = uint32("inspect_size", "Inspect Size")
2310 InternetBridgeVersion           = uint8("internet_bridge_version", "Internet Bridge Version")
2311 InterruptNumbersUsed            = uint32("interrupt_numbers_used", "Interrupt Numbers Used")
2312 InUse                           = uint32("in_use", "Bytes in Use")
2313 IOAddressesUsed                 = bytes("io_addresses_used", "IO Addresses Used", 8)
2314 IOErrorCount                    = uint16("io_error_count", "IO Error Count")
2315 IOEngineFlag                    = boolean8("io_engine_flag", "IO Engine Flag")
2316 IPXNotMyNetwork                 = uint16("ipx_not_my_network", "IPX Not My Network")
2317 ItemsChanged                    = uint32("items_changed", "Items Changed")
2318 ItemsChecked                    = uint32("items_checked", "Items Checked")
2319 ItemsCount                      = uint32("items_count", "Items Count")
2320 itemsInList                     = uint32("items_in_list", "Items in List")
2321 ItemsInPacket                   = uint32("items_in_packet", "Items in Packet")
2322
2323 JobControlFlags                 = bitfield8("job_control_flags", "Job Control Flags", [
2324         bf_boolean8(0x08, "job_control_job_recovery", "Job Recovery"),
2325         bf_boolean8(0x10, "job_control_reservice", "ReService Job"),
2326         bf_boolean8(0x20, "job_control_file_open", "File Open"),
2327         bf_boolean8(0x40, "job_control_user_hold", "User Hold"),
2328         bf_boolean8(0x80, "job_control_operator_hold", "Operator Hold"),
2329
2330 ])
2331 JobControlFlagsWord             = bitfield16("job_control_flags_word", "Job Control Flags", [
2332         bf_boolean16(0x0008, "job_control1_job_recovery", "Job Recovery"),
2333         bf_boolean16(0x0010, "job_control1_reservice", "ReService Job"),
2334         bf_boolean16(0x0020, "job_control1_file_open", "File Open"),
2335         bf_boolean16(0x0040, "job_control1_user_hold", "User Hold"),
2336         bf_boolean16(0x0080, "job_control1_operator_hold", "Operator Hold"),
2337
2338 ])
2339 JobCount                        = uint32("job_count", "Job Count")
2340 JobFileHandle                   = bytes("job_file_handle", "Job File Handle", 6)
2341 JobFileHandleLong               = uint32("job_file_handle_long", "Job File Handle")
2342 JobFileHandleLong.Display("BASE_HEX")
2343 JobFileName                     = fw_string("job_file_name", "Job File Name", 14)
2344 JobPosition                     = uint8("job_position", "Job Position")
2345 JobPositionWord                 = uint16("job_position_word", "Job Position")
2346 JobNumber                       = uint16("job_number", "Job Number", BE )
2347 JobNumberLong                   = uint32("job_number_long", "Job Number", BE )
2348 JobNumberList                   = uint32("job_number_list", "Job Number List")
2349 JobType                         = uint16("job_type", "Job Type", BE )
2350
2351 LANCustomVariablesCount         = uint32("lan_cust_var_count", "LAN Custom Variables Count")
2352 LANdriverBoardInstance          = uint16("lan_drv_bd_inst", "LAN Driver Board Instance")
2353 LANdriverBoardNumber            = uint16("lan_drv_bd_num", "LAN Driver Board Number")
2354 LANdriverCardID                 = uint16("lan_drv_card_id", "LAN Driver Card ID")
2355 LANdriverCardName               = fw_string("lan_drv_card_name", "LAN Driver Card Name", 28)
2356 LANdriverCFG_MajorVersion       = uint8("lan_dvr_cfg_major_vrs", "LAN Driver Config - Major Version")
2357 LANdriverCFG_MinorVersion       = uint8("lan_dvr_cfg_minor_vrs", "LAN Driver Config - Minor Version")
2358 LANdriverDMAUsage1              = uint8("lan_drv_dma_usage1", "Primary DMA Channel")
2359 LANdriverDMAUsage2              = uint8("lan_drv_dma_usage2", "Secondary DMA Channel")
2360 LANdriverFlags                  = uint16("lan_drv_flags", "LAN Driver Flags")
2361 LANdriverFlags.Display("BASE_HEX")        
2362 LANdriverInterrupt1             = uint8("lan_drv_interrupt1", "Primary Interrupt Vector")
2363 LANdriverInterrupt2             = uint8("lan_drv_interrupt2", "Secondary Interrupt Vector")
2364 LANdriverIOPortsAndRanges1      = uint16("lan_drv_io_ports_and_ranges_1", "Primary Base I/O Port")
2365 LANdriverIOPortsAndRanges2      = uint16("lan_drv_io_ports_and_ranges_2", "Number of I/O Ports")
2366 LANdriverIOPortsAndRanges3      = uint16("lan_drv_io_ports_and_ranges_3", "Secondary Base I/O Port")
2367 LANdriverIOPortsAndRanges4      = uint16("lan_drv_io_ports_and_ranges_4", "Number of I/O Ports")
2368 LANdriverIOReserved             = bytes("lan_drv_io_reserved", "LAN Driver IO Reserved", 14)
2369 LANdriverLineSpeed              = uint16("lan_drv_line_speed", "LAN Driver Line Speed")
2370 LANdriverLink                   = uint32("lan_drv_link", "LAN Driver Link")
2371 LANdriverLogicalName            = bytes("lan_drv_log_name", "LAN Driver Logical Name", 18)
2372 LANdriverMajorVersion           = uint8("lan_drv_major_ver", "LAN Driver Major Version")
2373 LANdriverMaximumSize            = uint32("lan_drv_max_size", "LAN Driver Maximum Size")
2374 LANdriverMaxRecvSize            = uint32("lan_drv_max_rcv_size", "LAN Driver Maximum Receive Size")
2375 LANdriverMediaID                = uint16("lan_drv_media_id", "LAN Driver Media ID")
2376 LANdriverMediaType              = fw_string("lan_drv_media_type", "LAN Driver Media Type", 40)
2377 LANdriverMemoryDecode0          = uint32("lan_drv_mem_decode_0", "LAN Driver Memory Decode 0")
2378 LANdriverMemoryDecode1          = uint32("lan_drv_mem_decode_1", "LAN Driver Memory Decode 1")
2379 LANdriverMemoryLength0          = uint16("lan_drv_mem_length_0", "LAN Driver Memory Length 0")
2380 LANdriverMemoryLength1          = uint16("lan_drv_mem_length_1", "LAN Driver Memory Length 1")
2381 LANdriverMinorVersion           = uint8("lan_drv_minor_ver", "LAN Driver Minor Version")
2382 LANdriverModeFlags              = val_string8("lan_dvr_mode_flags", "LAN Driver Mode Flags", [
2383         [0x80, "Canonical Address" ],
2384         [0x81, "Canonical Address" ],
2385         [0x82, "Canonical Address" ],
2386         [0x83, "Canonical Address" ],
2387         [0x84, "Canonical Address" ],
2388         [0x85, "Canonical Address" ],
2389         [0x86, "Canonical Address" ],
2390         [0x87, "Canonical Address" ],
2391         [0x88, "Canonical Address" ],
2392         [0x89, "Canonical Address" ],
2393         [0x8a, "Canonical Address" ],
2394         [0x8b, "Canonical Address" ],
2395         [0x8c, "Canonical Address" ],
2396         [0x8d, "Canonical Address" ],
2397         [0x8e, "Canonical Address" ],
2398         [0x8f, "Canonical Address" ],
2399         [0x90, "Canonical Address" ],
2400         [0x91, "Canonical Address" ],
2401         [0x92, "Canonical Address" ],
2402         [0x93, "Canonical Address" ],
2403         [0x94, "Canonical Address" ],
2404         [0x95, "Canonical Address" ],
2405         [0x96, "Canonical Address" ],
2406         [0x97, "Canonical Address" ],
2407         [0x98, "Canonical Address" ],
2408         [0x99, "Canonical Address" ],
2409         [0x9a, "Canonical Address" ],
2410         [0x9b, "Canonical Address" ],
2411         [0x9c, "Canonical Address" ],
2412         [0x9d, "Canonical Address" ],
2413         [0x9e, "Canonical Address" ],
2414         [0x9f, "Canonical Address" ],
2415         [0xa0, "Canonical Address" ],
2416         [0xa1, "Canonical Address" ],
2417         [0xa2, "Canonical Address" ],
2418         [0xa3, "Canonical Address" ],
2419         [0xa4, "Canonical Address" ],
2420         [0xa5, "Canonical Address" ],
2421         [0xa6, "Canonical Address" ],
2422         [0xa7, "Canonical Address" ],
2423         [0xa8, "Canonical Address" ],
2424         [0xa9, "Canonical Address" ],
2425         [0xaa, "Canonical Address" ],
2426         [0xab, "Canonical Address" ],
2427         [0xac, "Canonical Address" ],
2428         [0xad, "Canonical Address" ],
2429         [0xae, "Canonical Address" ],
2430         [0xaf, "Canonical Address" ],
2431         [0xb0, "Canonical Address" ],
2432         [0xb1, "Canonical Address" ],
2433         [0xb2, "Canonical Address" ],
2434         [0xb3, "Canonical Address" ],
2435         [0xb4, "Canonical Address" ],
2436         [0xb5, "Canonical Address" ],
2437         [0xb6, "Canonical Address" ],
2438         [0xb7, "Canonical Address" ],
2439         [0xb8, "Canonical Address" ],
2440         [0xb9, "Canonical Address" ],
2441         [0xba, "Canonical Address" ],
2442         [0xbb, "Canonical Address" ],
2443         [0xbc, "Canonical Address" ],
2444         [0xbd, "Canonical Address" ],
2445         [0xbe, "Canonical Address" ],
2446         [0xbf, "Canonical Address" ],
2447         [0xc0, "Non-Canonical Address" ],
2448         [0xc1, "Non-Canonical Address" ],
2449         [0xc2, "Non-Canonical Address" ],
2450         [0xc3, "Non-Canonical Address" ],
2451         [0xc4, "Non-Canonical Address" ],
2452         [0xc5, "Non-Canonical Address" ],
2453         [0xc6, "Non-Canonical Address" ],
2454         [0xc7, "Non-Canonical Address" ],
2455         [0xc8, "Non-Canonical Address" ],
2456         [0xc9, "Non-Canonical Address" ],
2457         [0xca, "Non-Canonical Address" ],
2458         [0xcb, "Non-Canonical Address" ],
2459         [0xcc, "Non-Canonical Address" ],
2460         [0xcd, "Non-Canonical Address" ],
2461         [0xce, "Non-Canonical Address" ],
2462         [0xcf, "Non-Canonical Address" ],
2463         [0xd0, "Non-Canonical Address" ],
2464         [0xd1, "Non-Canonical Address" ],
2465         [0xd2, "Non-Canonical Address" ],
2466         [0xd3, "Non-Canonical Address" ],
2467         [0xd4, "Non-Canonical Address" ],
2468         [0xd5, "Non-Canonical Address" ],
2469         [0xd6, "Non-Canonical Address" ],
2470         [0xd7, "Non-Canonical Address" ],
2471         [0xd8, "Non-Canonical Address" ],
2472         [0xd9, "Non-Canonical Address" ],
2473         [0xda, "Non-Canonical Address" ],
2474         [0xdb, "Non-Canonical Address" ],
2475         [0xdc, "Non-Canonical Address" ],
2476         [0xdd, "Non-Canonical Address" ],
2477         [0xde, "Non-Canonical Address" ],
2478         [0xdf, "Non-Canonical Address" ],
2479         [0xe0, "Non-Canonical Address" ],
2480         [0xe1, "Non-Canonical Address" ],
2481         [0xe2, "Non-Canonical Address" ],
2482         [0xe3, "Non-Canonical Address" ],
2483         [0xe4, "Non-Canonical Address" ],
2484         [0xe5, "Non-Canonical Address" ],
2485         [0xe6, "Non-Canonical Address" ],
2486         [0xe7, "Non-Canonical Address" ],
2487         [0xe8, "Non-Canonical Address" ],
2488         [0xe9, "Non-Canonical Address" ],
2489         [0xea, "Non-Canonical Address" ],
2490         [0xeb, "Non-Canonical Address" ],
2491         [0xec, "Non-Canonical Address" ],
2492         [0xed, "Non-Canonical Address" ],
2493         [0xee, "Non-Canonical Address" ],
2494         [0xef, "Non-Canonical Address" ],
2495         [0xf0, "Non-Canonical Address" ],
2496         [0xf1, "Non-Canonical Address" ],
2497         [0xf2, "Non-Canonical Address" ],
2498         [0xf3, "Non-Canonical Address" ],
2499         [0xf4, "Non-Canonical Address" ],
2500         [0xf5, "Non-Canonical Address" ],
2501         [0xf6, "Non-Canonical Address" ],
2502         [0xf7, "Non-Canonical Address" ],
2503         [0xf8, "Non-Canonical Address" ],
2504         [0xf9, "Non-Canonical Address" ],
2505         [0xfa, "Non-Canonical Address" ],
2506         [0xfb, "Non-Canonical Address" ],
2507         [0xfc, "Non-Canonical Address" ],
2508         [0xfd, "Non-Canonical Address" ],
2509         [0xfe, "Non-Canonical Address" ],
2510         [0xff, "Non-Canonical Address" ],
2511 ])        
2512 LANDriverNumber                 = uint8("lan_driver_number", "LAN Driver Number")
2513 LANdriverNodeAddress            = bytes("lan_dvr_node_addr", "LAN Driver Node Address", 6)
2514 LANdriverRecvSize               = uint32("lan_drv_rcv_size", "LAN Driver Receive Size")
2515 LANdriverReserved               = uint16("lan_drv_reserved", "LAN Driver Reserved")
2516 LANdriverSendRetries            = uint16("lan_drv_snd_retries", "LAN Driver Send Retries")
2517 LANdriverSharingFlags           = uint16("lan_drv_share", "LAN Driver Sharing Flags")
2518 LANdriverShortName              = fw_string("lan_drv_short_name", "LAN Driver Short Name", 40)
2519 LANdriverSlot                   = uint16("lan_drv_slot", "LAN Driver Slot")
2520 LANdriverSrcRouting             = uint32("lan_drv_src_route", "LAN Driver Source Routing")
2521 LANdriverTransportTime          = uint16("lan_drv_trans_time", "LAN Driver Transport Time")
2522 LastAccessedDate                = uint16("last_access_date", "Last Accessed Date")
2523 LastAccessedDate.NWDate()
2524 LastAccessedTime                = uint16("last_access_time", "Last Accessed Time")
2525 LastAccessedTime.NWTime()
2526 LastGarbCollect                 = uint32("last_garbage_collect", "Last Garbage Collection")
2527 LastInstance                    = uint32("last_instance", "Last Instance")
2528 LastRecordSeen                  = uint16("last_record_seen", "Last Record Seen")
2529 LastSearchIndex                 = uint16("last_search_index", "Search Index")
2530 LastSeen                        = uint32("last_seen", "Last Seen")
2531 LastSequenceNumber              = uint16("last_sequence_number", "Sequence Number")
2532 Level                           = uint8("level", "Level")
2533 LFSCounters                     = uint32("lfs_counters", "LFS Counters")
2534 LimboDataStreamsCount           = uint32("limbo_data_streams_count", "Limbo Data Streams Count")
2535 limbCount                       = uint32("limb_count", "Limb Count")
2536 LimboUsed                       = uint32("limbo_used", "Limbo Used")
2537 LocalConnectionID               = uint32("local_connection_id", "Local Connection ID")
2538 LocalConnectionID.Display("BASE_HEX")
2539 LocalMaxPacketSize              = uint32("local_max_packet_size", "Local Max Packet Size")
2540 LocalMaxSendSize                = uint32("local_max_send_size", "Local Max Send Size")
2541 LocalMaxRecvSize                = uint32("local_max_recv_size", "Local Max Recv Size")
2542 LocalLoginInfoCcode             = uint8("local_login_info_ccode", "Local Login Info C Code")
2543 LocalTargetSocket               = uint32("local_target_socket", "Local Target Socket")
2544 LocalTargetSocket.Display("BASE_HEX")
2545 LockAreaLen                     = uint32("lock_area_len", "Lock Area Length")
2546 LockAreasStartOffset            = uint32("lock_areas_start_offset", "Lock Areas Start Offset")
2547 LockTimeout                     = uint16("lock_timeout", "Lock Timeout")
2548 Locked                          = val_string8("locked", "Locked Flag", [
2549         [ 0x00, "Not Locked Exclusively" ],
2550         [ 0x01, "Locked Exclusively" ],
2551 ])
2552 LockFlag                        = val_string8("lock_flag", "Lock Flag", [
2553         [ 0x00, "Not Locked, Log for Future Exclusive Lock" ],
2554         [ 0x01, "Exclusive Lock (Read/Write)" ],
2555         [ 0x02, "Log for Future Shared Lock"],
2556         [ 0x03, "Shareable Lock (Read-Only)" ],
2557         [ 0xfe, "Locked by a File Lock" ],
2558         [ 0xff, "Locked by Begin Share File Set" ],
2559 ])
2560 LockName                        = nstring8("lock_name", "Lock Name")
2561 LockStatus                      = val_string8("lock_status", "Lock Status", [
2562         [ 0x00, "Locked Exclusive" ],
2563         [ 0x01, "Locked Shareable" ],
2564         [ 0x02, "Logged" ],
2565         [ 0x06, "Lock is Held by TTS"],
2566 ])
2567 LockType                        = val_string8("lock_type", "Lock Type", [
2568         [ 0x00, "Locked" ],
2569         [ 0x01, "Open Shareable" ],
2570         [ 0x02, "Logged" ],
2571         [ 0x03, "Open Normal" ],
2572         [ 0x06, "TTS Holding Lock" ],
2573         [ 0x07, "Transaction Flag Set on This File" ],
2574 ])
2575 LogFileFlagHigh                 = bitfield8("log_file_flag_high", "Log File Flag (byte 2)", [
2576         bf_boolean8(0x80, "log_flag_call_back", "Call Back Requested" ),
2577 ])
2578 LogFileFlagLow                  = bitfield8("log_file_flag_low", "Log File Flag", [
2579         bf_boolean8(0x01, "log_flag_lock_file", "Lock File Immediately" ), 
2580 ])      
2581 LoggedObjectID                  = uint32("logged_object_id", "Logged in Object ID")
2582 LoggedObjectID.Display("BASE_HEX")
2583 LoggedCount                     = uint16("logged_count", "Logged Count")
2584 LogicalConnectionNumber         = uint16("logical_connection_number", "Logical Connection Number", BE)
2585 LogicalDriveCount               = uint8("logical_drive_count", "Logical Drive Count")
2586 LogicalDriveNumber              = uint8("logical_drive_number", "Logical Drive Number")
2587 LogicalLockThreshold            = uint8("logical_lock_threshold", "LogicalLockThreshold")
2588 LogicalRecordName               = nstring8("logical_record_name", "Logical Record Name")
2589 LoginKey                        = bytes("login_key", "Login Key", 8)
2590 LogLockType                     = uint8("log_lock_type", "Log Lock Type")
2591 LogTtlRxPkts                    = uint32("log_ttl_rx_pkts", "Total Received Packets")
2592 LogTtlTxPkts                    = uint32("log_ttl_tx_pkts", "Total Transmitted Packets")
2593 LongName                        = fw_string("long_name", "Long Name", 32)
2594 LRUBlockWasDirty                = uint16("lru_block_was_dirty", "LRU Block Was Dirty")
2595
2596 MacAttr                         = bitfield16("mac_attr", "Attributes", [
2597         bf_boolean16(0x0001, "mac_attr_smode1", "Search Mode"),
2598         bf_boolean16(0x0002, "mac_attr_smode2", "Search Mode"),
2599         bf_boolean16(0x0004, "mac_attr_smode3", "Search Mode"),
2600         bf_boolean16(0x0010, "mac_attr_transaction", "Transaction"),
2601         bf_boolean16(0x0020, "mac_attr_index", "Index"),
2602         bf_boolean16(0x0040, "mac_attr_r_audit", "Read Audit"),
2603         bf_boolean16(0x0080, "mac_attr_w_audit", "Write Audit"),
2604         bf_boolean16(0x0100, "mac_attr_r_only", "Read Only"),
2605         bf_boolean16(0x0200, "mac_attr_hidden", "Hidden"),
2606         bf_boolean16(0x0400, "mac_attr_system", "System"),
2607         bf_boolean16(0x0800, "mac_attr_execute_only", "Execute Only"),
2608         bf_boolean16(0x1000, "mac_attr_subdirectory", "Subdirectory"),
2609         bf_boolean16(0x2000, "mac_attr_archive", "Archive"),
2610         bf_boolean16(0x8000, "mac_attr_share", "Shareable File"),
2611 ])
2612 MACBackupDate                   = uint16("mac_backup_date", "Mac Backup Date")
2613 MACBackupDate.NWDate()
2614 MACBackupTime                   = uint16("mac_backup_time", "Mac Backup Time")
2615 MACBackupTime.NWTime()
2616 MacBaseDirectoryID              = uint32("mac_base_directory_id", "Mac Base Directory ID")
2617 MacBaseDirectoryID.Display("BASE_HEX")
2618 MACCreateDate                   = uint16("mac_create_date", "Mac Create Date")
2619 MACCreateDate.NWDate()
2620 MACCreateTime                   = uint16("mac_create_time", "Mac Create Time")
2621 MACCreateTime.NWTime()
2622 MacDestinationBaseID            = uint32("mac_destination_base_id", "Mac Destination Base ID")
2623 MacDestinationBaseID.Display("BASE_HEX")
2624 MacFinderInfo                   = bytes("mac_finder_info", "Mac Finder Information", 32)
2625 MacLastSeenID                   = uint32("mac_last_seen_id", "Mac Last Seen ID")
2626 MacLastSeenID.Display("BASE_HEX")
2627 MacSourceBaseID                 = uint32("mac_source_base_id", "Mac Source Base ID")
2628 MacSourceBaseID.Display("BASE_HEX")
2629 MajorVersion                    = uint32("major_version", "Major Version")
2630 MaxBytes                        = uint16("max_bytes", "Maximum Number of Bytes")
2631 MaxDataStreams                  = uint32("max_data_streams", "Maximum Data Streams")
2632 MaxDirDepth                     = uint32("max_dir_depth", "Maximum Directory Depth")
2633 MaximumSpace                    = uint16("max_space", "Maximum Space")
2634 MaxNumOfConn                    = uint32("max_num_of_conn", "Maximum Number of Connections")
2635 MaxNumOfLANS                    = uint32("max_num_of_lans", "Maximum Number Of LAN's")
2636 MaxNumOfMedias                  = uint32("max_num_of_medias", "Maximum Number Of Media's")
2637 MaxNumOfNmeSps                  = uint32("max_num_of_nme_sps", "Maximum Number Of Name Spaces")
2638 MaxNumOfSpoolPr                 = uint32("max_num_of_spool_pr", "Maximum Number Of Spool Printers")
2639 MaxNumOfStacks                  = uint32("max_num_of_stacks", "Maximum Number Of Stacks")
2640 MaxNumOfUsers                   = uint32("max_num_of_users", "Maximum Number Of Users")
2641 MaxNumOfVol                     = uint32("max_num_of_vol", "Maximum Number of Volumes")
2642 MaxSpace                        = uint32("maxspace", "Maximum Space")
2643 MaxUsedDynamicSpace             = uint32("max_used_dynamic_space", "Max Used Dynamic Space")
2644 MediaList                       = uint32("media_list", "Media List")
2645 MediaListCount                  = uint32("media_list_count", "Media List Count")
2646 MediaName                       = nstring8("media_name", "Media Name")
2647 MediaNumber                     = uint32("media_number", "Media Number")
2648 MediaObjectType                 = val_string8("media_object_type", "Object Type", [
2649         [ 0x00, "Adapter" ],
2650         [ 0x01, "Changer" ],
2651         [ 0x02, "Removable Device" ],
2652         [ 0x03, "Device" ],
2653         [ 0x04, "Removable Media" ],
2654         [ 0x05, "Partition" ],
2655         [ 0x06, "Slot" ],
2656         [ 0x07, "Hotfix" ],
2657         [ 0x08, "Mirror" ],
2658         [ 0x09, "Parity" ],
2659         [ 0x0a, "Volume Segment" ],
2660         [ 0x0b, "Volume" ],
2661         [ 0x0c, "Clone" ],
2662         [ 0x0d, "Fixed Media" ],
2663         [ 0x0e, "Unknown" ],
2664 ])        
2665 MemberName                      = nstring8("member_name", "Member Name")
2666 MemberType                      = val_string16("member_type", "Member Type", [
2667         [ 0x0000,       "Unknown" ],
2668         [ 0x0001,       "User" ],
2669         [ 0x0002,       "User group" ],
2670         [ 0x0003,       "Print queue" ],
2671         [ 0x0004,       "NetWare file server" ],
2672         [ 0x0005,       "Job server" ],
2673         [ 0x0006,       "Gateway" ],
2674         [ 0x0007,       "Print server" ],
2675         [ 0x0008,       "Archive queue" ],
2676         [ 0x0009,       "Archive server" ],
2677         [ 0x000a,       "Job queue" ],
2678         [ 0x000b,       "Administration" ],
2679         [ 0x0021,       "NAS SNA gateway" ],
2680         [ 0x0026,       "Remote bridge server" ],
2681         [ 0x0027,       "TCP/IP gateway" ],
2682 ])
2683 MessageLanguage                 = uint32("message_language", "NLM Language")
2684 MigratedFiles                   = uint32("migrated_files", "Migrated Files")
2685 MigratedSectors                 = uint32("migrated_sectors", "Migrated Sectors")
2686 MinorVersion                    = uint32("minor_version", "Minor Version")
2687 Minute                          = uint8("s_minute", "Minutes")
2688 MixedModePathFlag               = uint8("mixed_mode_path_flag", "Mixed Mode Path Flag")
2689 ModifiedDate                    = uint16("modified_date", "Modified Date")
2690 ModifiedDate.NWDate()
2691 ModifiedTime                    = uint16("modified_time", "Modified Time")
2692 ModifiedTime.NWTime()
2693 ModifierID                      = uint32("modifier_id", "Modifier ID", BE)
2694 ModifierID.Display("BASE_HEX")
2695 ModifyDOSInfoMask               = bitfield16("modify_dos_info_mask", "Modify DOS Info Mask", [
2696         bf_boolean16(0x0002, "modify_dos_read", "Attributes"),
2697         bf_boolean16(0x0004, "modify_dos_write", "Creation Date"),
2698         bf_boolean16(0x0008, "modify_dos_open", "Creation Time"),
2699         bf_boolean16(0x0010, "modify_dos_create", "Creator ID"),
2700         bf_boolean16(0x0020, "modify_dos_delete", "Archive Date"),
2701         bf_boolean16(0x0040, "modify_dos_parent", "Archive Time"),
2702         bf_boolean16(0x0080, "modify_dos_search", "Archiver ID"),
2703         bf_boolean16(0x0100, "modify_dos_mdate", "Modify Date"),
2704         bf_boolean16(0x0200, "modify_dos_mtime", "Modify Time"),
2705         bf_boolean16(0x0400, "modify_dos_mid", "Modifier ID"),
2706         bf_boolean16(0x0800, "modify_dos_laccess", "Last Access"),
2707         bf_boolean16(0x1000, "modify_dos_inheritance", "Inheritance"),
2708         bf_boolean16(0x2000, "modify_dos_max_space", "Maximum Space"),
2709 ])      
2710 Month                           = val_string8("s_month", "Month", [
2711         [ 0x01, "January"],
2712         [ 0x02, "Febuary"],
2713         [ 0x03, "March"],
2714         [ 0x04, "April"],
2715         [ 0x05, "May"],
2716         [ 0x06, "June"],
2717         [ 0x07, "July"],
2718         [ 0x08, "August"],
2719         [ 0x09, "September"],
2720         [ 0x0a, "October"],
2721         [ 0x0b, "November"],
2722         [ 0x0c, "December"],
2723 ])
2724
2725 MoreFlag                        = val_string8("more_flag", "More Flag", [
2726         [ 0x00, "No More Segments/Entries Available" ],
2727         [ 0x01, "More Segments/Entries Available" ],
2728         [ 0xff, "More Segments/Entries Available" ],
2729 ])
2730 MoreProperties                  = val_string8("more_properties", "More Properties", [
2731         [ 0x00, "No More Properties Available" ],
2732         [ 0x01, "No More Properties Available" ],
2733         [ 0xff, "More Properties Available" ],
2734 ])
2735
2736 Name                            = nstring8("name", "Name")
2737 Name12                          = fw_string("name12", "Name", 12)
2738 NameLen                         = uint8("name_len", "Name Space Length")
2739 NameLength                      = uint8("name_length", "Name Length")
2740 NameList                        = uint32("name_list", "Name List")
2741 #
2742 # XXX - should this value be used to interpret the characters in names,
2743 # search patterns, and the like?
2744 #
2745 # We need to handle character sets better, e.g. translating strings
2746 # from whatever character set they are in the packet (DOS/Windows code
2747 # pages, ISO character sets, UNIX EUC character sets, UTF-8, UCS-2/Unicode,
2748 # Mac character sets, etc.) into UCS-4 or UTF-8 and storing them as such
2749 # in the protocol tree, and displaying them as best we can.
2750 #
2751 NameSpace                       = val_string8("name_space", "Name Space", [
2752         [ 0x00, "DOS" ],
2753         [ 0x01, "MAC" ],
2754         [ 0x02, "NFS" ],
2755         [ 0x03, "FTAM" ],
2756         [ 0x04, "OS/2, Long" ],
2757 ])
2758 NamesSpaceInfoMask                      = bitfield16("ns_info_mask", "Names Space Info Mask", [
2759         bf_boolean16(0x0001, "ns_info_mask_modify", "Modify Name"),
2760         bf_boolean16(0x0002, "ns_info_mask_fatt", "File Attributes"),
2761         bf_boolean16(0x0004, "ns_info_mask_cdate", "Creation Date"),
2762         bf_boolean16(0x0008, "ns_info_mask_ctime", "Creation Time"),
2763         bf_boolean16(0x0010, "ns_info_mask_owner", "Owner ID"),
2764         bf_boolean16(0x0020, "ns_info_mask_adate", "Archive Date"),
2765         bf_boolean16(0x0040, "ns_info_mask_atime", "Archive Time"),
2766         bf_boolean16(0x0080, "ns_info_mask_aid", "Archiver ID"),
2767         bf_boolean16(0x0100, "ns_info_mask_udate", "Update Date"),
2768         bf_boolean16(0x0200, "ns_info_mask_utime", "Update Time"),
2769         bf_boolean16(0x0400, "ns_info_mask_uid", "Update ID"),
2770         bf_boolean16(0x0800, "ns_info_mask_acc_date", "Access Date"),
2771         bf_boolean16(0x1000, "ns_info_mask_max_acc_mask", "Inheritance"),
2772         bf_boolean16(0x2000, "ns_info_mask_max_space", "Maximum Space"),
2773 ])
2774 NameSpaceName                   = nstring8("name_space_name", "Name Space Name")
2775 nameType                        = uint32("name_type", "nameType")
2776 NCPdataSize                     = uint32("ncp_data_size", "NCP Data Size")
2777 NCPextensionMajorVersion        = uint8("ncp_extension_major_version", "NCP Extension Major Version")
2778 NCPextensionMinorVersion        = uint8("ncp_extension_minor_version", "NCP Extension Minor Version")
2779 NCPextensionName                = nstring8("ncp_extension_name", "NCP Extension Name")
2780 NCPextensionNumber              = uint32("ncp_extension_number", "NCP Extension Number")
2781 NCPextensionNumber.Display("BASE_HEX")
2782 NCPExtensionNumbers             = uint32("ncp_extension_numbers", "NCP Extension Numbers")
2783 NCPextensionRevisionNumber      = uint8("ncp_extension_revision_number", "NCP Extension Revision Number")
2784 NCPPeakStaInUse                 = uint32("ncp_peak_sta_in_use", "Peak Number of Connections since Server was brought up")
2785 NCPStaInUseCnt                  = uint32("ncp_sta_in_use", "Number of Workstations Connected to Server")
2786 NDSRequestFlags                 = bitfield16("nds_request_flags", "NDS Request Flags", [
2787         bf_boolean16(0x0001, "nds_request_flags_output", "Output Fields"),
2788         bf_boolean16(0x0002, "nds_request_flags_no_such_entry", "No Such Entry"),
2789         bf_boolean16(0x0004, "nds_request_flags_local_entry", "Local Entry"),
2790         bf_boolean16(0x0008, "nds_request_flags_type_ref", "Type Referral"),
2791         bf_boolean16(0x0010, "nds_request_flags_alias_ref", "Alias Referral"),
2792         bf_boolean16(0x0020, "nds_request_flags_req_cnt", "Request Count"),
2793         bf_boolean16(0x0040, "nds_request_flags_req_data_size", "Request Data Size"),
2794         bf_boolean16(0x0080, "nds_request_flags_reply_data_size", "Reply Data Size"),
2795         bf_boolean16(0x0100, "nds_request_flags_trans_ref", "Transport Referral"),
2796         bf_boolean16(0x0200, "nds_request_flags_trans_ref2", "Transport Referral"),
2797         bf_boolean16(0x0400, "nds_request_flags_up_ref", "Up Referral"),
2798         bf_boolean16(0x0800, "nds_request_flags_dn_ref", "Down Referral"),
2799 ])      
2800 NDSStatus                       = uint32("nds_status", "NDS Status")
2801 NetBIOSBroadcastWasPropogated   = uint32("netbios_broadcast_was_propogated", "NetBIOS Broadcast Was Propogated")
2802 NetIDNumber                     = uint32("net_id_number", "Net ID Number")
2803 NetIDNumber.Display("BASE_HEX")
2804 NetAddress                      = nbytes32("address", "Address")
2805 NetStatus                       = uint16("net_status", "Network Status")
2806 NetWareAccessHandle             = bytes("netware_access_handle", "NetWare Access Handle", 6)
2807 NetworkAddress                  = uint32("network_address", "Network Address")
2808 NetworkAddress.Display("BASE_HEX")
2809 NetworkNodeAddress              = bytes("network_node_address", "Network Node Address", 6)
2810 NetworkNumber                   = uint32("network_number", "Network Number")
2811 NetworkNumber.Display("BASE_HEX")
2812 #
2813 # XXX - this should have the "ipx_socket_vals" value_string table
2814 # from "packet-ipx.c".
2815 #
2816 NetworkSocket                   = uint16("network_socket", "Network Socket")
2817 NetworkSocket.Display("BASE_HEX")
2818 NewAccessRights                 = bitfield16("new_access_rights_mask", "New Access Rights", [
2819         bf_boolean16(0x0001, "new_access_rights_read", "Read"),
2820         bf_boolean16(0x0002, "new_access_rights_write", "Write"),
2821         bf_boolean16(0x0004, "new_access_rights_open", "Open"),
2822         bf_boolean16(0x0008, "new_access_rights_create", "Create"),
2823         bf_boolean16(0x0010, "new_access_rights_delete", "Delete"),
2824         bf_boolean16(0x0020, "new_access_rights_parental", "Parental"),
2825         bf_boolean16(0x0040, "new_access_rights_search", "Search"),
2826         bf_boolean16(0x0080, "new_access_rights_modify", "Modify"),
2827         bf_boolean16(0x0100, "new_access_rights_supervisor", "Supervisor"),
2828 ])
2829 NewDirectoryID                  = uint32("new_directory_id", "New Directory ID")
2830 NewDirectoryID.Display("BASE_HEX")
2831 NewEAHandle                     = uint32("new_ea_handle", "New EA Handle")
2832 NewEAHandle.Display("BASE_HEX")
2833 NewFileName                     = fw_string("new_file_name", "New File Name", 14)
2834 NewFileNameLen                  = nstring8("new_file_name_len", "New File Name")
2835 NewFileSize                     = uint32("new_file_size", "New File Size")
2836 NewPassword                     = nstring8("new_password", "New Password")
2837 NewPath                         = nstring8("new_path", "New Path")
2838 NewPosition                     = uint8("new_position", "New Position")
2839 NewObjectName                   = nstring8("new_object_name", "New Object Name")
2840 NextCntBlock                    = uint32("next_cnt_block", "Next Count Block")
2841 NextHugeStateInfo               = bytes("next_huge_state_info", "Next Huge State Info", 16)
2842 nextLimbScanNum                 = uint32("next_limb_scan_num", "Next Limb Scan Number")
2843 NextObjectID                    = uint32("next_object_id", "Next Object ID", BE)
2844 NextObjectID.Display("BASE_HEX")
2845 NextRecord                      = uint32("next_record", "Next Record")
2846 NextRequestRecord               = uint16("next_request_record", "Next Request Record")
2847 NextSearchIndex                 = uint16("next_search_index", "Next Search Index")
2848 NextSearchNumber                = uint16("next_search_number", "Next Search Number")
2849 NextSearchNum                   = uint32("nxt_search_num", "Next Search Number")
2850 nextStartingNumber              = uint32("next_starting_number", "Next Starting Number")
2851 NextTrusteeEntry                = uint32("next_trustee_entry", "Next Trustee Entry")
2852 NextVolumeNumber                = uint32("next_volume_number", "Next Volume Number")
2853 NLMBuffer                       = nstring8("nlm_buffer", "Buffer")
2854 NLMcount                        = uint32("nlm_count", "NLM Count")
2855 NLMFlags                        = bitfield8("nlm_flags", "Flags", [
2856         bf_boolean8(0x01, "nlm_flags_reentrant", "ReEntrant"),
2857         bf_boolean8(0x02, "nlm_flags_multiple", "Can Load Multiple Times"),
2858         bf_boolean8(0x04, "nlm_flags_synchronize", "Synchronize Start"),
2859         bf_boolean8(0x08, "nlm_flags_pseudo", "PseudoPreemption"),
2860 ])
2861 NLMLoadOptions                  = uint32("nlm_load_options", "NLM Load Options")
2862 NLMName                         = stringz("nlm_name_stringz", "NLM Name")
2863 NLMNumber                       = uint32("nlm_number", "NLM Number")
2864 NLMNumbers                      = uint32("nlm_numbers", "NLM Numbers")
2865 NLMsInList                      = uint32("nlms_in_list", "NLM's in List")
2866 NLMStartNumber                  = uint32("nlm_start_num", "NLM Start Number")
2867 NLMType                         = val_string8("nlm_type", "NLM Type", [
2868         [ 0x00, "Generic NLM (.NLM)" ],
2869         [ 0x01, "LAN Driver (.LAN)" ],
2870         [ 0x02, "Disk Driver (.DSK)" ],
2871         [ 0x03, "Name Space Support Module (.NAM)" ],
2872         [ 0x04, "Utility or Support Program (.NLM)" ],
2873         [ 0x05, "Mirrored Server Link (.MSL)" ],
2874         [ 0x06, "OS NLM (.NLM)" ],
2875         [ 0x07, "Paged High OS NLM (.NLM)" ],
2876         [ 0x08, "Host Adapter Module (.HAM)" ],
2877         [ 0x09, "Custom Device Module (.CDM)" ],
2878         [ 0x0a, "File System Engine (.NLM)" ],
2879         [ 0x0b, "Real Mode NLM (.NLM)" ],
2880         [ 0x0c, "Hidden NLM (.NLM)" ],
2881         [ 0x15, "NICI Support (.NLM)" ],
2882         [ 0x16, "NICI Support (.NLM)" ],
2883         [ 0x17, "Cryptography (.NLM)" ],
2884         [ 0x18, "Encryption (.NLM)" ],
2885         [ 0x19, "NICI Support (.NLM)" ],
2886         [ 0x1c, "NICI Support (.NLM)" ],
2887 ])        
2888 nodeFlags                       = uint32("node_flags", "Node Flags")
2889 nodeFlags.Display("BASE_HEX")
2890 NoMoreMemAvlCnt                 = uint32("no_more_mem_avail", "No More Memory Available Count")
2891 NonDedFlag                      = boolean8("non_ded_flag", "Non Dedicated Flag")
2892 NonFreeableAvailableSubAllocSectors = uint32("non_freeable_avail_sub_alloc_sectors", "Non Freeable Available Sub Alloc Sectors")
2893 NonFreeableLimboSectors         = uint32("non_freeable_limbo_sectors", "Non Freeable Limbo Sectors")
2894 NotUsableSubAllocSectors        = uint32("not_usable_sub_alloc_sectors", "Not Usable Sub Alloc Sectors")
2895 NotYetPurgeableBlocks           = uint32("not_yet_purgeable_blocks", "Not Yet Purgeable Blocks")
2896 NSInfoBitMask                   = uint32("ns_info_bit_mask", "Name Space Info Bit Mask")
2897 NSSOAllInFlags                  = bitfield32("nsso_all_in_flags", "SecretStore All Input Flags",[
2898         bf_boolean32(0x00000010, "nsso_all_unicode", "Unicode Data"),
2899         bf_boolean32(0x00000080, "nsso_set_tree", "Set Tree"),
2900         bf_boolean32(0x00000200, "nsso_destroy_ctx", "Destroy Context"),
2901 ])
2902 NSSOGetServiceInFlags           = bitfield32("nsso_get_svc_in_flags", "SecretStore Get Service Flags",[
2903         bf_boolean32(0x00000100, "nsso_get_ctx", "Get Context"),
2904 ])
2905 NSSOReadInFlags                 = bitfield32("nsso_read_in_flags", "SecretStore Read Flags",[
2906         bf_boolean32(0x00000001, "nsso_rw_enh_prot", "Read/Write Enhanced Protection"),
2907         bf_boolean32(0x00000008, "nsso_repair", "Repair SecretStore"),
2908 ])
2909 NSSOReadOrUnlockInFlags         = bitfield32("nsso_read_or_unlock_in_flags", "SecretStore Read or Unlock Flags",[
2910         bf_boolean32(0x00000004, "nsso_ep_master_pwd", "Master Password used instead of ENH Password"),
2911 ])
2912 NSSOUnlockInFlags               = bitfield32("nsso_unlock_in_flags", "SecretStore Unlock Flags",[
2913         bf_boolean32(0x00000004, "nsso_rmv_lock", "Remove Lock from Store"),
2914 ])
2915 NSSOWriteInFlags                = bitfield32("nsso_write_in_flags", "SecretStore Write Flags",[
2916         bf_boolean32(0x00000001, "nsso_enh_prot", "Enhanced Protection"),
2917         bf_boolean32(0x00000002, "nsso_create_id", "Create ID"),
2918         bf_boolean32(0x00000040, "nsso_ep_pwd_used", "Enhanced Protection Password Used"),
2919 ])
2920 NSSOContextOutFlags             = bitfield32("nsso_cts_out_flags", "Type of Context",[ 
2921         bf_boolean32(0x00000001, "nsso_ds_ctx", "DSAPI Context"),
2922         bf_boolean32(0x00000080, "nsso_ldap_ctx", "LDAP Context"),
2923         bf_boolean32(0x00000200, "nsso_dc_ctx", "Reserved"),
2924 ])
2925 NSSOGetServiceOutFlags          = bitfield32("nsso_get_svc_out_flags", "SecretStore Status Flags",[ 
2926         bf_boolean32(0x00400000, "nsso_mstr_pwd", "Master Password Present"),
2927 ])
2928 NSSOGetServiceReadOutFlags      = bitfield32("nsso_get_svc_read_out_flags", "SecretStore Status Flags",[
2929         bf_boolean32(0x00800000, "nsso_mp_disabled", "Master Password Disabled"),
2930 ])
2931 NSSOReadOutFlags                = bitfield32("nsso_read_out_flags", "SecretStore Read Flags",[
2932         bf_boolean32(0x00010000, "nsso_secret_locked", "Enhanced Protection Lock on Secret"),
2933         bf_boolean32(0x00020000, "nsso_secret_not_init", "Secret Not Yet Initialized"),
2934         bf_boolean32(0x00040000, "nsso_secret_marked", "Secret Marked for Enhanced Protection"),
2935         bf_boolean32(0x00080000, "nsso_secret_not_sync", "Secret Not Yet Synchronized in NDS"),
2936         bf_boolean32(0x00200000, "nsso_secret_enh_pwd", "Enhanced Protection Password on Secret"),
2937 ])
2938 NSSOReadOutStatFlags            = bitfield32("nsso_read_out_stat_flags", "SecretStore Read Status Flags",[
2939         bf_boolean32(0x00100000, "nsso_admin_mod", "Admin Modified Secret Last"),
2940 ])
2941 NSSOVerb                        = val_string8("nsso_verb", "SecretStore Verb", [
2942         [ 0x00, "Query Server" ],
2943         [ 0x01, "Read App Secrets" ],
2944         [ 0x02, "Write App Secrets" ],
2945         [ 0x03, "Add Secret ID" ],
2946         [ 0x04, "Remove Secret ID" ],
2947         [ 0x05, "Remove SecretStore" ],
2948         [ 0x06, "Enumerate SecretID's" ],
2949         [ 0x07, "Unlock Store" ],
2950         [ 0x08, "Set Master Password" ],
2951         [ 0x09, "Get Service Information" ],
2952 ])        
2953 NSSpecificInfo                  = fw_string("ns_specific_info", "Name Space Specific Info", 512)                                         
2954 NumberOfAllocs                  = uint32("num_of_allocs", "Number of Allocations")
2955 NumberOfAttributes              = uint32("number_of_attributes", "Number of Attributes")
2956 NumberOfCPUs                    = uint32("number_of_cpus", "Number of CPU's")
2957 NumberOfDataStreams             = uint16("number_of_data_streams", "Number of Data Streams")
2958 NumberOfDynamicMemoryAreas      = uint16("number_of_dynamic_memory_areas", "Number Of Dynamic Memory Areas")
2959 NumberOfEntries                 = uint8("number_of_entries", "Number of Entries")
2960 NumberOfLocks                   = uint8("number_of_locks", "Number of Locks")
2961 NumberOfMinutesToDelay          = uint32("number_of_minutes_to_delay", "Number of Minutes to Delay")
2962 NumberOfNCPExtensions           = uint32("number_of_ncp_extensions", "Number Of NCP Extensions")
2963 NumberOfNSLoaded                = uint16("number_of_ns_loaded", "Number Of Name Spaces Loaded")
2964 NumberOfProtocols               = uint8("number_of_protocols", "Number of Protocols")
2965 NumberOfRecords                 = uint16("number_of_records", "Number of Records")
2966 NumberOfReferencedPublics       = uint32("num_of_ref_publics", "Number of Referenced Public Symbols") 
2967 NumberOfSemaphores              = uint16("number_of_semaphores", "Number Of Semaphores")
2968 NumberOfServiceProcesses        = uint8("number_of_service_processes", "Number Of Service Processes")
2969 NumberOfSetCategories           = uint32("number_of_set_categories", "Number Of Set Categories")
2970 NumberOfSMs                     = uint32("number_of_sms", "Number Of Storage Medias")
2971 NumberOfStations                = uint8("number_of_stations", "Number of Stations")
2972 NumBytes                        = uint16("num_bytes", "Number of Bytes")
2973 NumOfCCinPkt                    = uint32("num_of_cc_in_pkt", "Number of Custom Counters in Packet")
2974 NumOfChecks                     = uint32("num_of_checks", "Number of Checks")
2975 NumOfEntries                    = uint32("num_of_entries", "Number of Entries")
2976 NumOfFilesMigrated              = uint32("num_of_files_migrated", "Number Of Files Migrated")
2977 NumOfGarbageColl                = uint32("num_of_garb_coll", "Number of Garbage Collections")
2978 NumOfNCPReqs                    = uint32("num_of_ncp_reqs", "Number of NCP Requests since Server was brought up")
2979 NumOfSegments                   = uint32("num_of_segments", "Number of Segments")
2980
2981 ObjectCount                     = uint32("object_count", "Object Count")
2982 ObjectFlags                     = val_string8("object_flags", "Object Flags", [
2983         [ 0x00, "Dynamic object" ],
2984         [ 0x01, "Static object" ],
2985 ])
2986 ObjectHasProperties             = val_string8("object_has_properites", "Object Has Properties", [
2987         [ 0x00, "No properties" ],
2988         [ 0xff, "One or more properties" ],
2989 ])
2990 ObjectID                        = uint32("object_id", "Object ID", BE)
2991 ObjectID.Display('BASE_HEX')
2992 ObjectIDCount                   = uint16("object_id_count", "Object ID Count")
2993 ObjectIDInfo                    = uint32("object_id_info", "Object Information")
2994 ObjectInfoReturnCount           = uint32("object_info_rtn_count", "Object Information Count")
2995 ObjectName                      = nstring8("object_name", "Object Name")
2996 ObjectNameLen                   = fw_string("object_name_len", "Object Name", 48)
2997 ObjectNameStringz               = stringz("object_name_stringz", "Object Name")
2998 ObjectNumber                    = uint32("object_number", "Object Number")
2999 ObjectSecurity                  = val_string8("object_security", "Object Security", [
3000         [ 0x00, "Object Read (Anyone) / Object Write (Anyone)" ],
3001         [ 0x01, "Object Read (Logged in) / Object Write (Anyone)" ],
3002         [ 0x02, "Object Read (Logged in as Object) / Object Write (Anyone)" ],
3003         [ 0x03, "Object Read (Supervisor) / Object Write (Anyone)" ],
3004         [ 0x04, "Object Read (Operating System Only) / Object Write (Anyone)" ],
3005         [ 0x10, "Object Read (Anyone) / Object Write (Logged in)" ],
3006         [ 0x11, "Object Read (Logged in) / Object Write (Logged in)" ],
3007         [ 0x12, "Object Read (Logged in as Object) / Object Write (Logged in)" ],
3008         [ 0x13, "Object Read (Supervisor) / Object Write (Logged in)" ],
3009         [ 0x14, "Object Read (Operating System Only) / Object Write (Logged in)" ],
3010         [ 0x20, "Object Read (Anyone) / Object Write (Logged in as Object)" ],
3011         [ 0x21, "Object Read (Logged in) / Object Write (Logged in as Object)" ],
3012         [ 0x22, "Object Read (Logged in as Object) / Object Write (Logged in as Object)" ],
3013         [ 0x23, "Object Read (Supervisor) / Object Write (Logged in as Object)" ],
3014         [ 0x24, "Object Read (Operating System Only) / Object Write (Logged in as Object)" ],
3015         [ 0x30, "Object Read (Anyone) / Object Write (Supervisor)" ],
3016         [ 0x31, "Object Read (Logged in) / Object Write (Supervisor)" ],
3017         [ 0x32, "Object Read (Logged in as Object) / Object Write (Supervisor)" ],
3018         [ 0x33, "Object Read (Supervisor) / Object Write (Supervisor)" ],
3019         [ 0x34, "Object Read (Operating System Only) / Object Write (Supervisor)" ],
3020         [ 0x40, "Object Read (Anyone) / Object Write (Operating System Only)" ],
3021         [ 0x41, "Object Read (Logged in) / Object Write (Operating System Only)" ],
3022         [ 0x42, "Object Read (Logged in as Object) / Object Write (Operating System Only)" ],
3023         [ 0x43, "Object Read (Supervisor) / Object Write (Operating System Only)" ],
3024         [ 0x44, "Object Read (Operating System Only) / Object Write (Operating System Only)" ],
3025 ])
3026 #
3027 # XXX - should this use the "server_vals[]" value_string array from
3028 # "packet-ipx.c"?
3029 #
3030 # XXX - should this list be merged with that list?  There are some
3031 # oddities, e.g. this list has 0x03f5 for "Microsoft SQL Server", but
3032 # the list from "packet-ipx.c" has 0xf503 for that - is that just
3033 # byte-order confusion?
3034 #
3035 ObjectType                      = val_string16("object_type", "Object Type", [
3036         [ 0x0000,       "Unknown" ],
3037         [ 0x0001,       "User" ],
3038         [ 0x0002,       "User group" ],
3039         [ 0x0003,       "Print queue" ],
3040         [ 0x0004,       "NetWare file server" ],
3041         [ 0x0005,       "Job server" ],
3042         [ 0x0006,       "Gateway" ],
3043         [ 0x0007,       "Print server" ],
3044         [ 0x0008,       "Archive queue" ],
3045         [ 0x0009,       "Archive server" ],
3046         [ 0x000a,       "Job queue" ],
3047         [ 0x000b,       "Administration" ],
3048         [ 0x0021,       "NAS SNA gateway" ],
3049         [ 0x0026,       "Remote bridge server" ],
3050         [ 0x0027,       "TCP/IP gateway" ],
3051         [ 0x0047,       "Novell Print Server" ],
3052         [ 0x004b,       "Btrieve Server" ],
3053         [ 0x004c,       "NetWare SQL Server" ],
3054         [ 0x0064,       "ARCserve" ],
3055         [ 0x0066,       "ARCserve 3.0" ],
3056         [ 0x0076,       "NetWare SQL" ],
3057         [ 0x00a0,       "Gupta SQL Base Server" ],
3058         [ 0x00a1,       "Powerchute" ],
3059         [ 0x0107,       "NetWare Remote Console" ],
3060         [ 0x01cb,       "Shiva NetModem/E" ],
3061         [ 0x01cc,       "Shiva LanRover/E" ],
3062         [ 0x01cd,       "Shiva LanRover/T" ],
3063         [ 0x01d8,       "Castelle FAXPress Server" ],
3064         [ 0x01da,       "Castelle Print Server" ],
3065         [ 0x01dc,       "Castelle Fax Server" ],
3066         [ 0x0200,       "Novell SQL Server" ],
3067         [ 0x023a,       "NetWare Lanalyzer Agent" ],
3068         [ 0x023c,       "DOS Target Service Agent" ],
3069         [ 0x023f,       "NetWare Server Target Service Agent" ],
3070         [ 0x024f,       "Appletalk Remote Access Service" ],
3071         [ 0x0263,       "NetWare Management Agent" ],
3072         [ 0x0264,       "Global MHS" ],
3073         [ 0x0265,       "SNMP" ],
3074         [ 0x026a,       "NetWare Management/NMS Console" ],
3075         [ 0x026b,       "NetWare Time Synchronization" ],
3076         [ 0x0273,       "Nest Device" ],
3077         [ 0x0274,       "GroupWise Message Multiple Servers" ],
3078         [ 0x0278,       "NDS Replica Server" ],
3079         [ 0x0282,       "NDPS Service Registry Service" ],
3080         [ 0x028a,       "MPR/IPX Address Mapping Gateway" ],
3081         [ 0x028b,       "ManageWise" ],
3082         [ 0x0293,       "NetWare 6" ],
3083         [ 0x030c,       "HP JetDirect" ],
3084         [ 0x0328,       "Watcom SQL Server" ],
3085         [ 0x0355,       "Backup Exec" ],
3086         [ 0x039b,       "Lotus Notes" ],
3087         [ 0x03e1,       "Univel Server" ],
3088         [ 0x03f5,       "Microsoft SQL Server" ],
3089         [ 0x055e,       "Lexmark Print Server" ],
3090         [ 0x0640,       "Microsoft Gateway Services for NetWare" ],
3091         [ 0x064e,       "Microsoft Internet Information Server" ],
3092         [ 0x077b,       "Advantage Database Server" ],
3093         [ 0x07a7,       "Backup Exec Job Queue" ],
3094         [ 0x07a8,       "Backup Exec Job Manager" ],
3095         [ 0x07a9,       "Backup Exec Job Service" ],
3096         [ 0x8202,       "NDPS Broker" ],
3097         
3098 ])
3099 OCRetFlags                      = val_string8("o_c_ret_flags", "Open Create Return Flags", [
3100         [ 0x00, "No CallBack has been registered (No Op-Lock)" ],
3101         [ 0x01, "Request has been registered for CallBack (Op-Lock)" ],
3102 ])
3103 OldestDeletedFileAgeInTicks     = uint32("oldest_deleted_file_age_in_ticks", "Oldest Deleted File Age in Ticks")
3104 OldFileName                     = bytes("old_file_name", "Old File Name", 15)
3105 OldFileSize                     = uint32("old_file_size", "Old File Size")
3106 OpenCount                       = uint16("open_count", "Open Count")
3107 OpenCreateAction                = bitfield8("open_create_action", "Open Create Action", [
3108         bf_boolean8(0x01, "open_create_action_opened", "Opened"),
3109         bf_boolean8(0x02, "open_create_action_created", "Created"),
3110         bf_boolean8(0x04, "open_create_action_replaced", "Replaced"),
3111         bf_boolean8(0x08, "open_create_action_compressed", "Compressed"),
3112         bf_boolean8(0x80, "open_create_action_read_only", "Read Only"),
3113 ])      
3114 OpenCreateMode                  = bitfield8("open_create_mode", "Open Create Mode", [
3115         bf_boolean8(0x01, "open_create_mode_open", "Open existing file (file must exist)"),
3116         bf_boolean8(0x02, "open_create_mode_replace", "Replace existing file"),
3117         bf_boolean8(0x08, "open_create_mode_create", "Create new file or subdirectory (file or subdirectory cannot exist)"),
3118         bf_boolean8(0x80, "open_create_mode_oplock", "Open Callback (Op-Lock)"),
3119 ])
3120 OpenForReadCount                = uint16("open_for_read_count", "Open For Read Count")
3121 OpenForWriteCount               = uint16("open_for_write_count", "Open For Write Count")
3122 OpenRights                      = bitfield8("open_rights", "Open Rights", [
3123         bf_boolean8(0x01, "open_rights_read_only", "Read Only"),
3124         bf_boolean8(0x02, "open_rights_write_only", "Write Only"),
3125         bf_boolean8(0x04, "open_rights_deny_read", "Deny Read"),
3126         bf_boolean8(0x08, "open_rights_deny_write", "Deny Write"),
3127         bf_boolean8(0x10, "open_rights_compat", "Compatibility"),
3128         bf_boolean8(0x40, "open_rights_write_thru", "Write Through"),
3129 ])
3130 OptionNumber                    = uint8("option_number", "Option Number")
3131 originalSize                    = uint32("original_size", "Original Size")
3132 OSLanguageID                    = uint8("os_language_id", "OS Language ID")
3133 OSMajorVersion                  = uint8("os_major_version", "OS Major Version")
3134 OSMinorVersion                  = uint8("os_minor_version", "OS Minor Version")
3135 OSRevision                      = uint8("os_revision", "OS Revision")
3136 OtherFileForkSize               = uint32("other_file_fork_size", "Other File Fork Size")
3137 OtherFileForkFAT                = uint32("other_file_fork_fat", "Other File Fork FAT Entry")
3138 OutgoingPacketDiscardedNoTurboBuffer = uint16("outgoing_packet_discarded_no_turbo_buffer", "Outgoing Packet Discarded No Turbo Buffer")
3139
3140 PacketsDiscardedByHopCount      = uint16("packets_discarded_by_hop_count", "Packets Discarded By Hop Count")
3141 PacketsDiscardedUnknownNet      = uint16("packets_discarded_unknown_net", "Packets Discarded Unknown Net")
3142 PacketsFromInvalidConnection    = uint16("packets_from_invalid_connection", "Packets From Invalid Connection")
3143 PacketsReceivedDuringProcessing = uint16("packets_received_during_processing", "Packets Received During Processing")
3144 PacketsWithBadRequestType       = uint16("packets_with_bad_request_type", "Packets With Bad Request Type")
3145 PacketsWithBadSequenceNumber    = uint16("packets_with_bad_sequence_number", "Packets With Bad Sequence Number")
3146 PageTableOwnerFlag              = uint32("page_table_owner_flag", "Page Table Owner")
3147 ParentID                        = uint32("parent_id", "Parent ID")
3148 ParentID.Display("BASE_HEX")
3149 ParentBaseID                    = uint32("parent_base_id", "Parent Base ID")
3150 ParentBaseID.Display("BASE_HEX")
3151 ParentDirectoryBase             = uint32("parent_directory_base", "Parent Directory Base")
3152 ParentDOSDirectoryBase          = uint32("parent_dos_directory_base", "Parent DOS Directory Base")
3153 ParentObjectNumber              = uint32("parent_object_number", "Parent Object Number")
3154 ParentObjectNumber.Display("BASE_HEX")
3155 Password                        = nstring8("password", "Password")
3156 PathBase                        = uint8("path_base", "Path Base")
3157 PathComponentCount              = uint16("path_component_count", "Path Component Count")
3158 PathComponentSize               = uint16("path_component_size", "Path Component Size")
3159 PathCookieFlags                 = val_string16("path_cookie_flags", "Path Cookie Flags", [
3160         [ 0x0000, "Last component is Not a File Name" ],
3161         [ 0x0001, "Last component is a File Name" ],
3162 ])
3163 PathCount                       = uint8("path_count", "Path Count")
3164 Path                            = nstring8("path", "Path")
3165 PathAndName                     = stringz("path_and_name", "Path and Name")
3166 PendingIOCommands               = uint16("pending_io_commands", "Pending IO Commands")
3167 PhysicalDiskNumber              = uint8("physical_disk_number", "Physical Disk Number")
3168 PhysicalDriveCount              = uint8("physical_drive_count", "Physical Drive Count")
3169 PhysicalLockThreshold           = uint8("physical_lock_threshold", "Physical Lock Threshold")
3170 PingVersion                     = uint16("ping_version", "Ping Version")
3171 PositiveAcknowledgesSent        = uint16("positive_acknowledges_sent", "Positive Acknowledges Sent")
3172 PreCompressedSectors            = uint32("pre_compressed_sectors", "Precompressed Sectors")
3173 PreviousRecord                  = uint32("previous_record", "Previous Record")
3174 PrimaryEntry                    = uint32("primary_entry", "Primary Entry")
3175 PrintFlags                      = bitfield8("print_flags", "Print Flags", [
3176         bf_boolean8(0x08, "print_flags_ff", "Suppress Form Feeds"),
3177         bf_boolean8(0x10, "print_flags_cr", "Create"),
3178         bf_boolean8(0x20, "print_flags_del_spool", "Delete Spool File after Printing"),
3179         bf_boolean8(0x40, "print_flags_exp_tabs", "Expand Tabs in the File"),
3180         bf_boolean8(0x80, "print_flags_banner", "Print Banner Page"),
3181 ])
3182 PrinterHalted                   = val_string8("printer_halted", "Printer Halted", [
3183         [ 0x00, "Printer is not Halted" ],
3184         [ 0xff, "Printer is Halted" ],
3185 ])
3186 PrinterOffLine                  = val_string8( "printer_offline", "Printer Off-Line", [
3187         [ 0x00, "Printer is On-Line" ],
3188         [ 0xff, "Printer is Off-Line" ],
3189 ])
3190 PrintServerVersion              = uint8("print_server_version", "Print Server Version")
3191 Priority                        = uint32("priority", "Priority")
3192 Privileges                      = uint32("privileges", "Login Privileges")
3193 ProcessorType                   = val_string8("processor_type", "Processor Type", [
3194         [ 0x00, "Motorola 68000" ],
3195         [ 0x01, "Intel 8088 or 8086" ],
3196         [ 0x02, "Intel 80286" ],
3197 ])
3198 ProDOSInfo                      = bytes("pro_dos_info", "Pro DOS Info", 6)
3199 ProductMajorVersion             = uint16("product_major_version", "Product Major Version")
3200 ProductMinorVersion             = uint16("product_minor_version", "Product Minor Version")
3201 ProductRevisionVersion          = uint8("product_revision_version", "Product Revision Version")
3202 projectedCompSize               = uint32("projected_comp_size", "Projected Compression Size")
3203 PropertyHasMoreSegments         = val_string8("property_has_more_segments",
3204         "Property Has More Segments", [
3205         [ 0x00, "Is last segment" ],
3206         [ 0xff, "More segments are available" ],
3207 ])
3208 PropertyName                    = nstring8("property_name", "Property Name")
3209 PropertyName16                  = fw_string("property_name_16", "Property Name", 16)
3210 PropertyData                    = bytes("property_data", "Property Data", 128)
3211 PropertySegment                 = uint8("property_segment", "Property Segment")
3212 PropertyType                    = val_string8("property_type", "Property Type", [
3213         [ 0x00, "Display Static property" ],
3214         [ 0x01, "Display Dynamic property" ],
3215         [ 0x02, "Set Static property" ],
3216         [ 0x03, "Set Dynamic property" ],
3217 ])
3218 PropertyValue                   = fw_string("property_value", "Property Value", 128)
3219 ProposedMaxSize                 = uint16("proposed_max_size", "Proposed Max Size")
3220 protocolFlags                   = uint32("protocol_flags", "Protocol Flags")
3221 protocolFlags.Display("BASE_HEX")
3222 PurgeableBlocks                 = uint32("purgeable_blocks", "Purgeable Blocks")
3223 PurgeCcode                      = uint32("purge_c_code", "Purge Completion Code")
3224 PurgeCount                      = uint32("purge_count", "Purge Count")
3225 PurgeFlags                      = val_string16("purge_flags", "Purge Flags", [
3226         [ 0x0000, "Do not Purge All" ],
3227         [ 0x0001, "Purge All" ],
3228         [ 0xffff, "Do not Purge All" ],
3229 ])
3230 PurgeList                       = uint32("purge_list", "Purge List")
3231 PhysicalDiskChannel             = uint8("physical_disk_channel", "Physical Disk Channel")
3232 PhysicalDriveType               = val_string8("physical_drive_type", "Physical Drive Type", [
3233         [ 0x01, "XT" ],
3234         [ 0x02, "AT" ],
3235         [ 0x03, "SCSI" ],
3236         [ 0x04, "Disk Coprocessor" ],
3237         [ 0x05, "PS/2 with MFM Controller" ],
3238         [ 0x06, "PS/2 with ESDI Controller" ],
3239         [ 0x07, "Convergent Technology SBIC" ],
3240 ])      
3241 PhysicalReadErrors              = uint16("physical_read_errors", "Physical Read Errors")
3242 PhysicalReadRequests            = uint32("physical_read_requests", "Physical Read Requests")
3243 PhysicalWriteErrors             = uint16("physical_write_errors", "Physical Write Errors")
3244 PhysicalWriteRequests           = uint32("physical_write_requests", "Physical Write Requests")
3245 PrintToFileFlag                 = boolean8("print_to_file_flag", "Print to File Flag")
3246
3247 QueueID                         = uint32("queue_id", "Queue ID")
3248 QueueID.Display("BASE_HEX")
3249 QueueName                       = nstring8("queue_name", "Queue Name")
3250 QueueStartPosition              = uint32("queue_start_position", "Queue Start Position")
3251 QueueStatus                     = bitfield8("queue_status", "Queue Status", [
3252         bf_boolean8(0x01, "queue_status_new_jobs", "Operator does not want to add jobs to the queue"),
3253         bf_boolean8(0x02, "queue_status_pserver", "Operator does not want additional servers attaching"),
3254         bf_boolean8(0x04, "queue_status_svc_jobs", "Operator does not want servers to service jobs"),
3255 ])
3256 QueueType                       = uint16("queue_type", "Queue Type")
3257 QueueingVersion                 = uint8("qms_version", "QMS Version")
3258
3259 ReadBeyondWrite                 = uint16("read_beyond_write", "Read Beyond Write")
3260 RecordLockCount                 = uint16("rec_lock_count", "Record Lock Count")
3261 RecordStart                     = uint32("record_start", "Record Start")
3262 RecordEnd                       = uint32("record_end", "Record End")
3263 RecordInUseFlag                 = val_string16("record_in_use", "Record in Use", [
3264         [ 0x0000, "Record In Use" ],
3265         [ 0xffff, "Record Not In Use" ],
3266 ])      
3267 RedirectedPrinter               = uint8( "redirected_printer", "Redirected Printer" )
3268 ReferenceCount                  = uint32("reference_count", "Reference Count")
3269 RelationsCount                  = uint16("relations_count", "Relations Count")
3270 ReMirrorCurrentOffset           = uint32("re_mirror_current_offset", "ReMirror Current Offset")
3271 ReMirrorDriveNumber             = uint8("re_mirror_drive_number", "ReMirror Drive Number")
3272 RemoteMaxPacketSize             = uint32("remote_max_packet_size", "Remote Max Packet Size")
3273 RemoteTargetID                  = uint32("remote_target_id", "Remote Target ID")
3274 RemoteTargetID.Display("BASE_HEX")
3275 RemovableFlag                   = uint16("removable_flag", "Removable Flag")
3276 RemoveOpenRights                = bitfield8("remove_open_rights", "Remove Open Rights", [
3277         bf_boolean8(0x01, "remove_open_rights_ro", "Read Only"),
3278         bf_boolean8(0x02, "remove_open_rights_wo", "Write Only"),
3279         bf_boolean8(0x04, "remove_open_rights_dr", "Deny Read"),
3280         bf_boolean8(0x08, "remove_open_rights_dw", "Deny Write"),
3281         bf_boolean8(0x10, "remove_open_rights_comp", "Compatibility"),
3282         bf_boolean8(0x40, "remove_open_rights_write_thru", "Write Through"),
3283 ])
3284 RenameFlag                      = bitfield8("rename_flag", "Rename Flag", [
3285         bf_boolean8(0x01, "rename_flag_ren", "Rename to Myself allows file to be renamed to it's original name"),
3286         bf_boolean8(0x02, "rename_flag_comp", "Compatability allows files that are marked read only to be opened with read/write access"),
3287         bf_boolean8(0x04, "rename_flag_no", "Name Only renames only the specified name space entry name"),
3288 ])
3289 RepliesCancelled                = uint16("replies_cancelled", "Replies Cancelled")
3290 ReplyBuffer                     = nstring8("reply_buffer", "Reply Buffer")
3291 ReplyBufferSize                 = uint32("reply_buffer_size", "Reply Buffer Size")
3292 ReplyQueueJobNumbers            = uint32("reply_queue_job_numbers", "Reply Queue Job Numbers")
3293 RequestBitMap                   = bitfield16("request_bit_map", "Request Bit Map", [
3294         bf_boolean16(0x0001, "request_bit_map_ret_afp_ent", "AFP Entry ID"),
3295         bf_boolean16(0x0002, "request_bit_map_ret_data_fork", "Data Fork Length"),
3296         bf_boolean16(0x0004, "request_bit_map_ret_res_fork", "Resource Fork Length"),
3297         bf_boolean16(0x0008, "request_bit_map_ret_num_off", "Number of Offspring"),
3298         bf_boolean16(0x0010, "request_bit_map_ret_owner", "Owner ID"),
3299         bf_boolean16(0x0020, "request_bit_map_ret_short", "Short Name"),
3300         bf_boolean16(0x0040, "request_bit_map_ret_acc_priv", "Access Privileges"),
3301         bf_boolean16(0x0100, "request_bit_map_ratt", "Return Attributes"),
3302         bf_boolean16(0x0200, "request_bit_map_ret_afp_parent", "AFP Parent Entry ID"),
3303         bf_boolean16(0x0400, "request_bit_map_ret_cr_date", "Creation Date"),
3304         bf_boolean16(0x0800, "request_bit_map_ret_acc_date", "Access Date"),
3305         bf_boolean16(0x1000, "request_bit_map_ret_mod_date", "Modify Date&Time"),
3306         bf_boolean16(0x2000, "request_bit_map_ret_bak_date", "Backup Date&Time"),
3307         bf_boolean16(0x4000, "request_bit_map_ret_finder", "Finder Info"),
3308         bf_boolean16(0x8000, "request_bit_map_ret_long_nm", "Long Name"),
3309 ])              
3310 ResourceForkLen                 = uint32("resource_fork_len", "Resource Fork Len")
3311 RequestCode                     = val_string8("request_code", "Request Code", [
3312         [ 0x00, "Change Logged in to Temporary Authenticated" ],
3313         [ 0x01, "Change Temporary Authenticated to Logged in" ],
3314 ])
3315 RequestData                     = nstring8("request_data", "Request Data")
3316 RequestsReprocessed             = uint16("requests_reprocessed", "Requests Reprocessed")
3317 Reserved                        = uint8( "reserved", "Reserved" )
3318 Reserved2                       = bytes("reserved2", "Reserved", 2)
3319 Reserved3                       = bytes("reserved3", "Reserved", 3)
3320 Reserved4                       = bytes("reserved4", "Reserved", 4)
3321 Reserved6                       = bytes("reserved6", "Reserved", 6)
3322 Reserved8                       = bytes("reserved8", "Reserved", 8)
3323 Reserved10                      = bytes("reserved10", "Reserved", 10)
3324 Reserved12                      = bytes("reserved12", "Reserved", 12)
3325 Reserved16                      = bytes("reserved16", "Reserved", 16)
3326 Reserved20                      = bytes("reserved20", "Reserved", 20)
3327 Reserved28                      = bytes("reserved28", "Reserved", 28)
3328 Reserved36                      = bytes("reserved36", "Reserved", 36)
3329 Reserved44                      = bytes("reserved44", "Reserved", 44)
3330 Reserved48                      = bytes("reserved48", "Reserved", 48)
3331 Reserved51                      = bytes("reserved51", "Reserved", 51)
3332 Reserved56                      = bytes("reserved56", "Reserved", 56)
3333 Reserved64                      = bytes("reserved64", "Reserved", 64)
3334 Reserved120                     = bytes("reserved120", "Reserved", 120)                                  
3335 ReservedOrDirectoryNumber       = uint32("reserved_or_directory_number", "Reserved or Directory Number (see EAFlags)")
3336 ResourceCount                   = uint32("resource_count", "Resource Count")
3337 ResourceForkSize                = uint32("resource_fork_size", "Resource Fork Size")
3338 ResourceName                    = stringz("resource_name", "Resource Name")
3339 ResourceSignature               = fw_string("resource_sig", "Resource Signature", 4)
3340 RestoreTime                     = uint32("restore_time", "Restore Time")
3341 Restriction                     = uint32("restriction", "Disk Space Restriction")
3342 RestrictionsEnforced            = val_string8("restrictions_enforced", "Disk Restrictions Enforce Flag", [
3343         [ 0x00, "Enforced" ],
3344         [ 0xff, "Not Enforced" ],
3345 ])
3346 ReturnInfoCount                 = uint32("return_info_count", "Return Information Count")
3347 ReturnInfoMask                  = bitfield16("ret_info_mask", "Return Information", [
3348         bf_boolean16(0x0001, "ret_info_mask_fname", "Return File Name Information"),
3349         bf_boolean16(0x0002, "ret_info_mask_alloc", "Return Allocation Space Information"),
3350         bf_boolean16(0x0004, "ret_info_mask_attr", "Return Attribute Information"),
3351         bf_boolean16(0x0008, "ret_info_mask_size", "Return Size Information"),
3352         bf_boolean16(0x0010, "ret_info_mask_tspace", "Return Total Space Information"),
3353         bf_boolean16(0x0020, "ret_info_mask_eattr", "Return Extended Attributes Information"),
3354         bf_boolean16(0x0040, "ret_info_mask_arch", "Return Archive Information"),
3355         bf_boolean16(0x0080, "ret_info_mask_mod", "Return Modify Information"),
3356         bf_boolean16(0x0100, "ret_info_mask_create", "Return Creation Information"),
3357         bf_boolean16(0x0200, "ret_info_mask_ns", "Return Name Space Information"),
3358         bf_boolean16(0x0400, "ret_info_mask_dir", "Return Directory Information"),
3359         bf_boolean16(0x0800, "ret_info_mask_rights", "Return Rights Information"),
3360         bf_boolean16(0x1000, "ret_info_mask_id", "Return ID Information"),
3361         bf_boolean16(0x2000, "ret_info_mask_ns_attr", "Return Name Space Attributes Information"),
3362         bf_boolean16(0x4000, "ret_info_mask_actual", "Return Actual Information"),
3363         bf_boolean16(0x8000, "ret_info_mask_logical", "Return Logical Information"),
3364 ])
3365 ReturnedListCount               = uint32("returned_list_count", "Returned List Count")
3366 Revision                        = uint32("revision", "Revision")
3367 RevisionNumber                  = uint8("revision_number", "Revision")
3368 RevQueryFlag                    = val_string8("rev_query_flag", "Revoke Rights Query Flag", [
3369         [ 0x00, "Do not query the locks engine for access rights" ],
3370         [ 0x01, "Query the locks engine and return the access rights" ],
3371 ])
3372 RightsGrantMask                 = bitfield8("rights_grant_mask", "Grant Rights", [
3373         bf_boolean8(0x01, "rights_grant_mask_read", "Read"),
3374         bf_boolean8(0x02, "rights_grant_mask_write", "Write"),
3375         bf_boolean8(0x04, "rights_grant_mask_open", "Open"),
3376         bf_boolean8(0x08, "rights_grant_mask_create", "Create"),
3377         bf_boolean8(0x10, "rights_grant_mask_del", "Delete"),
3378         bf_boolean8(0x20, "rights_grant_mask_parent", "Parental"),
3379         bf_boolean8(0x40, "rights_grant_mask_search", "Search"),
3380         bf_boolean8(0x80, "rights_grant_mask_mod", "Modify"),
3381 ])
3382 RightsRevokeMask                = bitfield8("rights_revoke_mask", "Revoke Rights", [
3383         bf_boolean8(0x01, "rights_revoke_mask_read", "Read"),
3384         bf_boolean8(0x02, "rights_revoke_mask_write", "Write"),
3385         bf_boolean8(0x04, "rights_revoke_mask_open", "Open"),
3386         bf_boolean8(0x08, "rights_revoke_mask_create", "Create"),
3387         bf_boolean8(0x10, "rights_revoke_mask_del", "Delete"),
3388         bf_boolean8(0x20, "rights_revoke_mask_parent", "Parental"),
3389         bf_boolean8(0x40, "rights_revoke_mask_search", "Search"),
3390         bf_boolean8(0x80, "rights_revoke_mask_mod", "Modify"),
3391 ])
3392 RIPSocketNumber                 = uint16("rip_socket_num", "RIP Socket Number")
3393 RIPSocketNumber.Display("BASE_HEX")
3394 RouterDownFlag                  = boolean8("router_dn_flag", "Router Down Flag")
3395 RPCccode                        = val_string16("rpc_c_code", "RPC Completion Code", [
3396         [ 0x0000, "Successful" ],
3397 ])        
3398 RTagNumber                      = uint32("r_tag_num", "Resource Tag Number")
3399 RTagNumber.Display("BASE_HEX")
3400 RpyNearestSrvFlag               = boolean8("rpy_nearest_srv_flag", "Reply to Nearest Server Flag")
3401
3402 SalvageableFileEntryNumber      = uint32("salvageable_file_entry_number", "Salvageable File Entry Number")
3403 SalvageableFileEntryNumber.Display("BASE_HEX")
3404 SAPSocketNumber                 = uint16("sap_socket_number", "SAP Socket Number")
3405 SAPSocketNumber.Display("BASE_HEX")
3406 ScanItems                       = uint32("scan_items", "Number of Items returned from Scan")
3407 SearchAttributes                = bitfield8("sattr", "Search Attributes", [
3408         bf_boolean8(0x01, "sattr_hid", "Hidden"),
3409         bf_boolean8(0x02, "sattr_sys", "System"),
3410         bf_boolean8(0x04, "sattr_sub", "Subdirectory"),
3411 ])      
3412 SearchAttributesLow             = bitfield16("search_att_low", "Search Attributes", [
3413         bf_boolean16(0x0001, "search_att_read_only", "Read Only"),
3414         bf_boolean16(0x0002, "search_att_hidden", "Hidden"),
3415         bf_boolean16(0x0004, "search_att_system", "System"),
3416         bf_boolean16(0x0008, "search_att_execute_only", "Execute Only"),
3417         bf_boolean16(0x0010, "search_att_sub", "Subdirectory"),
3418         bf_boolean16(0x0020, "search_att_archive", "Archive"),
3419         bf_boolean16(0x0040, "search_att_execute_confrim", "Execute Confirm"),
3420         bf_boolean16(0x0080, "search_att_shareable", "Shareable"),
3421         bf_boolean16(0x8000, "search_attr_all_files", "All Files and Directories"),
3422 ])
3423 SearchBitMap                            = bitfield8("search_bit_map", "Search Bit Map", [
3424         bf_boolean8(0x01, "search_bit_map_hidden", "Hidden"),
3425         bf_boolean8(0x02, "search_bit_map_sys", "System"),
3426         bf_boolean8(0x04, "search_bit_map_sub", "Subdirectory"),
3427         bf_boolean8(0x08, "search_bit_map_files", "Files"),
3428 ])      
3429 SearchConnNumber                        = uint32("search_conn_number", "Search Connection Number")
3430 SearchInstance                          = uint32("search_instance", "Search Instance")
3431 SearchNumber                            = uint32("search_number", "Search Number")
3432 SearchPattern                           = nstring8("search_pattern", "Search Pattern")
3433 SearchSequence                          = bytes("search_sequence", "Search Sequence", 9)
3434 SearchSequenceWord                      = uint16("search_sequence_word", "Search Sequence")
3435 Second                                  = uint8("s_second", "Seconds")
3436 SecondsRelativeToTheYear2000            = uint32("sec_rel_to_y2k", "Seconds Relative to the Year 2000") 
3437 SecretStoreVerb                         = val_string8("ss_verb", "Secret Store Verb",[
3438         [ 0x00, "Query Server" ],
3439         [ 0x01, "Read App Secrets" ],
3440         [ 0x02, "Write App Secrets" ],
3441         [ 0x03, "Add Secret ID" ],
3442         [ 0x04, "Remove Secret ID" ],
3443         [ 0x05, "Remove SecretStore" ],
3444         [ 0x06, "Enumerate Secret IDs" ],
3445         [ 0x07, "Unlock Store" ],
3446         [ 0x08, "Set Master Password" ],
3447         [ 0x09, "Get Service Information" ],
3448 ])        
3449 SecurityEquivalentList                  = fw_string("security_equiv_list", "Security Equivalent List", 128) 
3450 SecurityFlag                            = bitfield8("security_flag", "Security Flag", [
3451         bf_boolean8(0x01, "checksuming", "Checksumming"),
3452         bf_boolean8(0x02, "signature", "Signature"),
3453         bf_boolean8(0x04, "complete_signatures", "Complete Signatures"),
3454         bf_boolean8(0x08, "encryption", "Encryption"),
3455         bf_boolean8(0x80, "large_internet_packets", "Large Internet Packets (LIP) Disabled"),
3456 ])      
3457 SecurityRestrictionVersion              = uint8("security_restriction_version", "Security Restriction Version")
3458 SectorsPerBlock                         = uint8("sectors_per_block", "Sectors Per Block")
3459 SectorsPerCluster                       = uint16("sectors_per_cluster", "Sectors Per Cluster" )
3460 SectorsPerClusterLong                   = uint32("sectors_per_cluster_long", "Sectors Per Cluster" )
3461 SectorsPerTrack                         = uint8("sectors_per_track", "Sectors Per Track")
3462 SectorSize                              = uint32("sector_size", "Sector Size")
3463 SemaphoreHandle                         = uint32("semaphore_handle", "Semaphore Handle")
3464 SemaphoreName                           = nstring8("semaphore_name", "Semaphore Name")
3465 SemaphoreNameLen                        = uint8("semaphore_name_len", "Semaphore Name Len")
3466 SemaphoreOpenCount                      = uint8("semaphore_open_count", "Semaphore Open Count")
3467 SemaphoreShareCount                     = uint8("semaphore_share_count", "Semaphore Share Count")
3468 SemaphoreTimeOut                        = uint16("semaphore_time_out", "Semaphore Time Out")
3469 SemaphoreValue                          = uint16("semaphore_value", "Semaphore Value")
3470 SendStatus                              = val_string8("send_status", "Send Status", [
3471         [ 0x00, "Successful" ],
3472         [ 0x01, "Illegal Station Number" ],
3473         [ 0x02, "Client Not Logged In" ],
3474         [ 0x03, "Client Not Accepting Messages" ],
3475         [ 0x04, "Client Already has a Message" ],
3476         [ 0x96, "No Alloc Space for the Message" ],
3477         [ 0xfd, "Bad Station Number" ],
3478         [ 0xff, "Failure" ],
3479 ])
3480 SequenceByte                    = uint8("sequence_byte", "Sequence")
3481 SequenceNumber                  = uint32("sequence_number", "Sequence Number")
3482 SequenceNumber.Display("BASE_HEX")
3483 ServerAddress                   = bytes("server_address", "Server Address", 12)
3484 ServerAppNumber                 = uint16("server_app_num", "Server App Number")
3485 ServerIDList                    = uint32("server_id_list", "Server ID List")
3486 ServerID                        = uint32("server_id_number", "Server ID", BE )
3487 ServerID.Display("BASE_HEX")
3488 ServerInfoFlags                 = val_string16("server_info_flags", "Server Information Flags", [
3489         [ 0x0000, "This server is not a member of a Cluster" ],
3490         [ 0x0001, "This server is a member of a Cluster" ],
3491 ])
3492 serverListFlags                 = uint32("server_list_flags", "Server List Flags")
3493 ServerName                      = fw_string("server_name", "Server Name", 48)
3494 serverName50                    = fw_string("server_name50", "Server Name", 50)
3495 ServerNameLen                   = nstring8("server_name_len", "Server Name")
3496 ServerNameStringz               = stringz("server_name_stringz", "Server Name")
3497 ServerNetworkAddress            = bytes("server_network_address", "Server Network Address", 10)
3498 ServerNode                      = bytes("server_node", "Server Node", 6)
3499 ServerSerialNumber              = uint32("server_serial_number", "Server Serial Number")
3500 ServerStation                   = uint8("server_station", "Server Station")
3501 ServerStationLong               = uint32("server_station_long", "Server Station")
3502 ServerStationList               = uint8("server_station_list", "Server Station List")
3503 ServerStatusRecord              = fw_string("server_status_record", "Server Status Record", 64)
3504 ServerTaskNumber                = uint8("server_task_number", "Server Task Number")
3505 ServerTaskNumberLong            = uint32("server_task_number_long", "Server Task Number")
3506 ServerType                      = uint16("server_type", "Server Type")
3507 ServerType.Display("BASE_HEX")
3508 ServerUtilization               = uint32("server_utilization", "Server Utilization")
3509 ServerUtilizationPercentage     = uint8("server_utilization_percentage", "Server Utilization Percentage")
3510 ServiceType                     = val_string16("Service_type", "Service Type", [
3511         [ 0x0000,       "Unknown" ],
3512         [ 0x0001,       "User" ],
3513         [ 0x0002,       "User group" ],
3514         [ 0x0003,       "Print queue" ],
3515         [ 0x0004,       "NetWare file server" ],
3516         [ 0x0005,       "Job server" ],
3517         [ 0x0006,       "Gateway" ],
3518         [ 0x0007,       "Print server" ],
3519         [ 0x0008,       "Archive queue" ],
3520         [ 0x0009,       "Archive server" ],
3521         [ 0x000a,       "Job queue" ],
3522         [ 0x000b,       "Administration" ],
3523         [ 0x0021,       "NAS SNA gateway" ],
3524         [ 0x0026,       "Remote bridge server" ],
3525         [ 0x0027,       "TCP/IP gateway" ],
3526 ])
3527 SetCmdCategory                  = val_string8("set_cmd_catagory", "Set Command Catagory", [
3528         [ 0x00, "Communications" ],
3529         [ 0x01, "Memory" ],
3530         [ 0x02, "File Cache" ],
3531         [ 0x03, "Directory Cache" ],
3532         [ 0x04, "File System" ],
3533         [ 0x05, "Locks" ],
3534         [ 0x06, "Transaction Tracking" ],
3535         [ 0x07, "Disk" ],
3536         [ 0x08, "Time" ],
3537         [ 0x09, "NCP" ],
3538         [ 0x0a, "Miscellaneous" ],
3539         [ 0x0b, "Error Handling" ],
3540         [ 0x0c, "Directory Services" ],
3541         [ 0x0d, "MultiProcessor" ],
3542         [ 0x0e, "Service Location Protocol" ],
3543         [ 0x0f, "Licensing Services" ],
3544 ])        
3545 SetCmdFlags                             = bitfield8("set_cmd_flags", "Set Command Flags", [
3546         bf_boolean8(0x01, "cmd_flags_startup_only", "Startup.ncf Only"),
3547         bf_boolean8(0x02, "cmd_flags_hidden", "Hidden"),
3548         bf_boolean8(0x04, "cmd_flags_advanced", "Advanced"),
3549         bf_boolean8(0x08, "cmd_flags_later", "Restart Server Required to Take Effect"),
3550         bf_boolean8(0x80, "cmd_flags_secure", "Console Secured"),
3551 ])
3552 SetCmdName                      = stringz("set_cmd_name", "Set Command Name")
3553 SetCmdType                      = val_string8("set_cmd_type", "Set Command Type", [
3554         [ 0x00, "Numeric Value" ],
3555         [ 0x01, "Boolean Value" ],
3556         [ 0x02, "Ticks Value" ],
3557         [ 0x04, "Time Value" ],
3558         [ 0x05, "String Value" ],
3559         [ 0x06, "Trigger Value" ],
3560         [ 0x07, "Numeric Value" ],
3561 ])        
3562 SetCmdValueNum                  = uint32("set_cmd_value_num", "Set Command Value")
3563 SetCmdValueString               = stringz("set_cmd_value_string", "Set Command Value")
3564 SetParmName                     = stringz("set_parm_name", "Set Parameter Name")
3565 SFTErrorTable                   = bytes("sft_error_table", "SFT Error Table", 60)
3566 SFTSupportLevel                 = val_string8("sft_support_level", "SFT Support Level", [
3567         [ 0x01, "Server Offers Hot Disk Error Fixing" ],
3568         [ 0x02, "Server Offers Disk Mirroring and Transaction Tracking" ],
3569         [ 0x03, "Server Offers Physical Server Mirroring" ],
3570 ])
3571 ShareableLockCount              = uint16("shareable_lock_count", "Shareable Lock Count")
3572 SharedMemoryAddresses           = bytes("shared_memory_addresses", "Shared Memory Addresses", 10)
3573 ShortName                       = fw_string("short_name", "Short Name", 12)
3574 ShortStkName                    = fw_string("short_stack_name", "Short Stack Name", 16)
3575 SiblingCount                    = uint32("sibling_count", "Sibling Count")
3576 SMIDs                           = uint32("smids", "Storage Media ID's")
3577 SoftwareDescription             = fw_string("software_description", "Software Description", 65)
3578 SoftwareDriverType              = uint8("software_driver_type", "Software Driver Type")
3579 SoftwareMajorVersionNumber      = uint8("software_major_version_number", "Software Major Version Number")
3580 SoftwareMinorVersionNumber      = uint8("software_minor_version_number", "Software Minor Version Number")
3581 SourceDirHandle                 = uint8("source_dir_handle", "Source Directory Handle")
3582 sourceOriginateTime             = bytes("source_originate_time", "Source Originate Time", 8)
3583 sourceOriginateTime.Display("BASE_HEX")
3584 SourcePath                      = nstring8("source_path", "Source Path")
3585 SourcePathComponentCount        = uint8("source_component_count", "Source Path Component Count")
3586 sourceReturnTime                = bytes("source_return_time", "Source Return Time", 8)
3587 sourceReturnTime.Display("BASE_HEX")
3588 SpaceUsed                       = uint32("space_used", "Space Used")
3589 SpaceMigrated                   = uint32("space_migrated", "Space Migrated")
3590 SrcNameSpace                    = val_string8("src_name_space", "Source Name Space", [
3591         [ 0x00, "DOS Name Space" ],
3592         [ 0x01, "MAC Name Space" ],
3593         [ 0x02, "NFS Name Space" ],
3594         [ 0x04, "Long Name Space" ],
3595 ])
3596 SupModID                        = uint32("sup_mod_id", "Sup Mod ID")
3597 StackCount                      = uint32("stack_count", "Stack Count")
3598 StackFullNameStr                = nstring8("stack_full_name_str", "Stack Full Name")
3599 StackMajorVN                    = uint8("stack_major_vn", "Stack Major Version Number")
3600 StackMinorVN                    = uint8("stack_minor_vn", "Stack Minor Version Number")
3601 StackNumber                     = uint32("stack_number", "Stack Number")
3602 StartConnNumber                 = uint32("start_conn_num", "Starting Connection Number")
3603 StartingBlock                   = uint16("starting_block", "Starting Block")
3604 StartingNumber                  = uint32("starting_number", "Starting Number")
3605 StartingSearchNumber            = uint16("start_search_number", "Start Search Number")
3606 StartNumber                     = uint32("start_number", "Start Number")
3607 startNumberFlag                 = uint16("start_number_flag", "Start Number Flag")
3608 StartVolumeNumber               = uint32("start_volume_number", "Starting Volume Number")
3609 StationList                     = uint32("station_list", "Station List")
3610 StationNumber                   = bytes("station_number", "Station Number", 3)
3611 StatMajorVersion                = uint8("stat_major_version", "Statistics Table Major Version")
3612 StatMinorVersion                = uint8("stat_minor_version", "Statistics Table Minor Version")
3613 Status                          = bitfield16("status", "Status", [
3614         bf_boolean16(0x0001, "user_info_logged_in", "Logged In"),
3615         bf_boolean16(0x0002, "user_info_being_abort", "Being Aborted"),
3616         bf_boolean16(0x0004, "user_info_audited", "Audited"),
3617         bf_boolean16(0x0008, "user_info_need_sec", "Needs Security Change"),
3618         bf_boolean16(0x0010, "user_info_mac_station", "MAC Station"),
3619         bf_boolean16(0x0020, "user_info_temp_authen", "Temporary Authenticated"),
3620         bf_boolean16(0x0040, "user_info_audit_conn", "Audit Connection Recorded"),
3621         bf_boolean16(0x0080, "user_info_dsaudit_conn", "DS Audit Connection Recorded"),
3622         bf_boolean16(0x0100, "user_info_logout", "Logout in Progress"),
3623         bf_boolean16(0x0200, "user_info_int_login", "Internal Login"),
3624         bf_boolean16(0x0400, "user_info_bindery", "Bindery Connection"),
3625 ])
3626 StatusFlagBits                  = bitfield32("status_flag_bits", "Status Flag", [
3627         bf_boolean32(0x00000001, "status_flag_bits_suballoc", "Sub Allocation"),
3628         bf_boolean32(0x00000002, "status_flag_bits_comp", "Compression"),
3629         bf_boolean32(0x00000004, "status_flag_bits_migrate", "Migration"),
3630         bf_boolean32(0x00000008, "status_flag_bits_audit", "Audit"),
3631         bf_boolean32(0x00000010, "status_flag_bits_ro", "Read Only"),
3632         bf_boolean32(0x00000020, "status_flag_bits_im_purge", "Immediate Purge"),
3633         bf_boolean32(0x80000000, "status_flag_bits_nss", "NSS Volume"),
3634 ])
3635 SubAllocClusters                = uint32("sub_alloc_clusters", "Sub Alloc Clusters")
3636 SubAllocFreeableClusters        = uint32("sub_alloc_freeable_clusters", "Sub Alloc Freeable Clusters")
3637 Subdirectory                    = uint32("sub_directory", "Subdirectory")
3638 Subdirectory.Display("BASE_HEX")
3639 SuggestedFileSize               = uint32("suggested_file_size", "Suggested File Size")
3640 SupportModuleID                 = uint32("support_module_id", "Support Module ID")
3641 SynchName                       = nstring8("synch_name", "Synch Name")
3642 SystemIntervalMarker            = uint32("system_interval_marker", "System Interval Marker")
3643
3644 TabSize                         = uint8( "tab_size", "Tab Size" )
3645 TargetClientList                = uint8("target_client_list", "Target Client List")
3646 TargetConnectionNumber          = uint16("target_connection_number", "Target Connection Number")
3647 TargetDirectoryBase             = uint32("target_directory_base", "Target Directory Base")
3648 TargetDirHandle                 = uint8("target_dir_handle", "Target Directory Handle")
3649 TargetEntryID                   = uint32("target_entry_id", "Target Entry ID")
3650 TargetEntryID.Display("BASE_HEX")
3651 TargetExecutionTime             = bytes("target_execution_time", "Target Execution Time", 6)
3652 TargetFileHandle                = bytes("target_file_handle", "Target File Handle", 6)
3653 TargetFileOffset                = uint32("target_file_offset", "Target File Offset")
3654 TargetMessage                   = nstring8("target_message", "Message")
3655 TargetPrinter                   = uint8( "target_ptr", "Target Printer" )
3656 targetReceiveTime               = bytes("target_receive_time", "Target Receive Time", 8)
3657 targetReceiveTime.Display("BASE_HEX")
3658 TargetServerIDNumber            = uint32("target_server_id_number", "Target Server ID Number", BE )
3659 TargetServerIDNumber.Display("BASE_HEX")
3660 targetTransmitTime              = bytes("target_transmit_time", "Target Transmit Time", 8)
3661 targetTransmitTime.Display("BASE_HEX")
3662 TaskNumByte                     = uint8("task_num_byte", "Task Number")
3663 TaskNumber                      = uint32("task_number", "Task Number")
3664 TaskNumberWord                  = uint16("task_number_word", "Task Number")
3665 TextJobDescription              = fw_string("text_job_description", "Text Job Description", 50)
3666 ThrashingCount                  = uint16("thrashing_count", "Thrashing Count")
3667 TimeoutLimit                    = uint16("timeout_limit", "Timeout Limit")
3668 TimesyncStatus                  = bitfield32("timesync_status_flags", "Timesync Status", [
3669         bf_boolean32(0x00000001, "timesync_status_sync", "Time is Synchronized"),
3670         bf_boolean32(0x00000002, "timesync_status_net_sync", "Time is Synchronized to the Network"), 
3671         bf_boolean32(0x00000004, "timesync_status_active", "Time Synchronization is Active"),
3672         bf_boolean32(0x00000008, "timesync_status_external", "External Time Synchronization Active"),
3673         bf_val_str32(0x00000700, "timesync_status_server_type", "Time Server Type", [
3674                 [ 0x01, "Client Time Server" ],
3675                 [ 0x02, "Secondary Time Server" ],
3676                 [ 0x03, "Primary Time Server" ],
3677                 [ 0x04, "Reference Time Server" ],
3678                 [ 0x05, "Single Reference Time Server" ],
3679         ]),
3680         bf_boolean32(0x000f0000, "timesync_status_ext_sync", "External Clock Status"),
3681 ])        
3682 TimeToNet                       = uint16("time_to_net", "Time To Net")
3683 TotalBlocks                     = uint32("total_blocks", "Total Blocks")        
3684 TotalBlocksToDecompress         = uint32("total_blks_to_dcompress", "Total Blocks To Decompress")
3685 TotalBytesRead                  = bytes("user_info_ttl_bytes_rd", "Total Bytes Read", 6)
3686 TotalBytesWritten               = bytes("user_info_ttl_bytes_wrt", "Total Bytes Written", 6)
3687 TotalCacheWrites                = uint32("total_cache_writes", "Total Cache Writes")
3688 TotalChangedFATs                = uint32("total_changed_fats", "Total Changed FAT Entries")
3689 TotalCommonCnts                 = uint32("total_common_cnts", "Total Common Counts")
3690 TotalCntBlocks                  = uint32("total_cnt_blocks", "Total Count Blocks")
3691 TotalDataStreamDiskSpaceAlloc   = uint32("total_stream_size_struct_space_alloc", "Total Data Stream Disk Space Alloc")
3692 TotalDirectorySlots             = uint16("total_directory_slots", "Total Directory Slots")
3693 TotalDirectoryEntries           = uint32("total_dir_entries", "Total Directory Entries")
3694 TotalDynamicSpace               = uint32("total_dynamic_space", "Total Dynamic Space")
3695 TotalExtendedDirectoryExtants   = uint32("total_extended_directory_extants", "Total Extended Directory Extants")
3696 TotalFileServicePackets         = uint32("total_file_service_packets", "Total File Service Packets")
3697 TotalFilesOpened                = uint32("total_files_opened", "Total Files Opened")
3698 TotalLFSCounters                = uint32("total_lfs_counters", "Total LFS Counters")
3699 TotalOffspring                  = uint16("total_offspring", "Total Offspring")
3700 TotalOtherPackets               = uint32("total_other_packets", "Total Other Packets")
3701 TotalQueueJobs                  = uint32("total_queue_jobs", "Total Queue Jobs")
3702 TotalReadRequests               = uint32("total_read_requests", "Total Read Requests")
3703 TotalRequest                    = uint32("total_request", "Total Requests")
3704 TotalRequestPackets             = uint32("total_request_packets", "Total Request Packets")
3705 TotalRoutedPackets              = uint32("total_routed_packets", "Total Routed Packets")
3706 TotalRxPkts                     = uint32("total_rx_pkts", "Total Receive Packets")
3707 TotalServerMemory               = uint16("total_server_memory", "Total Server Memory", BE)
3708 TotalTransactionsBackedOut      = uint32("total_trans_backed_out", "Total Transactions Backed Out")
3709 TotalTransactionsPerformed      = uint32("total_trans_performed", "Total Transactions Performed")
3710 TotalTxPkts                     = uint32("total_tx_pkts", "Total Transmit Packets")
3711 TotalUnfilledBackoutRequests    = uint16("total_unfilled_backout_requests", "Total Unfilled Backout Requests")
3712 TotalVolumeClusters             = uint16("total_volume_clusters", "Total Volume Clusters")
3713 TotalWriteRequests              = uint32("total_write_requests", "Total Write Requests")
3714 TotalWriteTransactionsPerformed = uint32("total_write_trans_performed", "Total Write Transactions Performed")
3715 TrackOnFlag                     = boolean8("track_on_flag", "Track On Flag")
3716 TransactionDiskSpace            = uint16("transaction_disk_space", "Transaction Disk Space")
3717 TransactionFATAllocations       = uint32("transaction_fat_allocations", "Transaction FAT Allocations")
3718 TransactionFileSizeChanges      = uint32("transaction_file_size_changes", "Transaction File Size Changes")
3719 TransactionFilesTruncated       = uint32("transaction_files_truncated", "Transaction Files Truncated")
3720 TransactionNumber               = uint32("transaction_number", "Transaction Number")
3721 TransactionTrackingEnabled      = uint8("transaction_tracking_enabled", "Transaction Tracking Enabled")
3722 TransactionTrackingFlag         = uint16("tts_flag", "Transaction Tracking Flag")
3723 TransactionTrackingSupported    = uint8("transaction_tracking_supported", "Transaction Tracking Supported")
3724 TransactionVolumeNumber         = uint16("transaction_volume_number", "Transaction Volume Number")
3725 TransportType                   = val_string8("transport_type", "Communications Type", [
3726         [ 0x01, "Internet Packet Exchange (IPX)" ],
3727         [ 0x05, "User Datagram Protocol (UDP)" ],
3728         [ 0x06, "Transmission Control Protocol (TCP)" ],
3729 ])
3730 TreeLength                      = uint32("tree_length", "Tree Length")
3731 TreeName                        = nstring32("tree_name", "Tree Name")
3732 TreeName.NWUnicode()
3733 TrusteeRights                   = bitfield16("trustee_rights_low", "Trustee Rights", [
3734         bf_boolean16(0x0001, "trustee_rights_read", "Read"),
3735         bf_boolean16(0x0002, "trustee_rights_write", "Write"),
3736         bf_boolean16(0x0004, "trustee_rights_open", "Open"),
3737         bf_boolean16(0x0008, "trustee_rights_create", "Create"),
3738         bf_boolean16(0x0010, "trustee_rights_del", "Delete"),
3739         bf_boolean16(0x0020, "trustee_rights_parent", "Parental"),
3740         bf_boolean16(0x0040, "trustee_rights_search", "Search"),
3741         bf_boolean16(0x0080, "trustee_rights_modify", "Modify"),
3742         bf_boolean16(0x0100, "trustee_rights_super", "Supervisor"),
3743 ])
3744 TTSLevel                        = uint8("tts_level", "TTS Level")
3745 TrusteeSetNumber                = uint8("trustee_set_number", "Trustee Set Number")
3746 TrusteeID                       = uint32("trustee_id_set", "Trustee ID")
3747 TrusteeID.Display("BASE_HEX")
3748 ttlCompBlks                     = uint32("ttl_comp_blks", "Total Compression Blocks")
3749 TtlDSDskSpaceAlloc              = uint32("ttl_ds_disk_space_alloc", "Total Streams Space Allocated")
3750 TtlEAs                          = uint32("ttl_eas", "Total EA's")
3751 TtlEAsDataSize                  = uint32("ttl_eas_data_size", "Total EA's Data Size")
3752 TtlEAsKeySize                   = uint32("ttl_eas_key_size", "Total EA's Key Size")
3753 ttlIntermediateBlks             = uint32("ttl_inter_blks", "Total Intermediate Blocks")
3754 TtlMigratedSize                 = uint32("ttl_migrated_size", "Total Migrated Size")
3755 TtlNumOfRTags                   = uint32("ttl_num_of_r_tags", "Total Number of Resource Tags")
3756 TtlNumOfSetCmds                 = uint32("ttl_num_of_set_cmds", "Total Number of Set Commands")
3757 TtlValuesLength                 = uint32("ttl_values_length", "Total Values Length")
3758 TtlWriteDataSize                = uint32("ttl_write_data_size", "Total Write Data Size")
3759 TurboUsedForFileService         = uint16("turbo_used_for_file_service", "Turbo Used For File Service")
3760
3761 UnclaimedPkts                   = uint32("un_claimed_packets", "Unclaimed Packets")
3762 UnCompressableDataStreamsCount  = uint32("un_compressable_data_streams_count", "Uncompressable Data Streams Count")
3763 Undefined8                      = bytes("undefined_8", "Undefined", 8)
3764 Undefined28                     = bytes("undefined_28", "Undefined", 28)
3765 UndefinedWord                   = uint16("undefined_word", "Undefined")
3766 UniqueID                        = uint8("unique_id", "Unique ID")
3767 UnknownByte                     = uint8("unknown_byte", "Unknown Byte")
3768 Unused                          = uint8("un_used", "Unused")
3769 UnusedBlocks                    = uint32("unused_blocks", "Unused Blocks")
3770 UnUsedDirectoryEntries          = uint32("un_used_directory_entries", "Unused Directory Entries")
3771 UnusedDiskBlocks                = uint32("unused_disk_blocks", "Unused Disk Blocks")
3772 UnUsedExtendedDirectoryExtants  = uint32("un_used_extended_directory_extants", "Unused Extended Directory Extants")
3773 UpdateDate                      = uint16("update_date", "Update Date")
3774 UpdateDate.NWDate()
3775 UpdateID                        = uint32("update_id", "Update ID", BE)
3776 UpdateID.Display("BASE_HEX")
3777 UpdateTime                      = uint16("update_time", "Update Time")
3778 UpdateTime.NWTime()
3779 UseCount                        = val_string16("user_info_use_count", "Use Count", [
3780         [ 0x0000, "Connection is not in use" ],
3781         [ 0x0001, "Connection is in use" ],
3782 ])
3783 UsedBlocks                      = uint32("used_blocks", "Used Blocks")
3784 UserID                          = uint32("user_id", "User ID", BE)
3785 UserID.Display("BASE_HEX")
3786 UserLoginAllowed                = val_string8("user_login_allowed", "Login Status", [
3787         [ 0x00, "Client Login Disabled" ],
3788         [ 0x01, "Client Login Enabled" ],
3789 ])
3790
3791 UserName                        = nstring8("user_name", "User Name")
3792 UserName16                      = fw_string("user_name_16", "User Name", 16)
3793 UserName48                      = fw_string("user_name_48", "User Name", 48)
3794 UserType                        = uint16("user_type", "User Type")
3795 UTCTimeInSeconds                = uint32("uts_time_in_seconds", "UTC Time in Seconds")
3796
3797 ValueAvailable                  = val_string8("value_available", "Value Available", [
3798         [ 0x00, "Has No Value" ],
3799         [ 0xff, "Has Value" ],
3800 ])
3801 VAPVersion                      = uint8("vap_version", "VAP Version")
3802 VariableBitMask                 = uint32("variable_bit_mask", "Variable Bit Mask")
3803 VariableBitsDefined             = uint16("variable_bits_defined", "Variable Bits Defined")
3804 VConsoleRevision                = uint8("vconsole_rev", "Console Revision")
3805 VConsoleVersion                 = uint8("vconsole_ver", "Console Version")
3806 Verb                            = uint32("verb", "Verb")
3807 VerbData                        = uint8("verb_data", "Verb Data")
3808 version                         = uint32("version", "Version")
3809 VersionNumber                   = uint8("version_number", "Version")
3810 VertLocation                    = uint16("vert_location", "Vertical Location")
3811 VirtualConsoleVersion           = uint8("virtual_console_version", "Virtual Console Version")
3812 VolumeID                        = uint32("volume_id", "Volume ID")
3813 VolumeID.Display("BASE_HEX")
3814 VolInfoReplyLen                 = uint16("vol_info_reply_len", "Volume Information Reply Length")
3815 VolumeCachedFlag                = val_string8("volume_cached_flag", "Volume Cached Flag", [
3816         [ 0x00, "Volume is Not Cached" ],
3817         [ 0xff, "Volume is Cached" ],
3818 ])      
3819 VolumeHashedFlag                = val_string8("volume_hashed_flag", "Volume Hashed Flag", [
3820         [ 0x00, "Volume is Not Hashed" ],
3821         [ 0xff, "Volume is Hashed" ],
3822 ])      
3823 VolumeLastModifiedDate          = uint16("volume_last_modified_date", "Volume Last Modified Date")
3824 VolumeLastModifiedDate.NWDate()
3825 VolumeLastModifiedTime          = uint16("volume_last_modified_time", "Volume Last Modified Time") 
3826 VolumeLastModifiedTime.NWTime()
3827 VolumeMountedFlag               = val_string8("volume_mounted_flag", "Volume Mounted Flag", [
3828         [ 0x00, "Volume is Not Mounted" ],
3829         [ 0xff, "Volume is Mounted" ],
3830 ])
3831 VolumeName                      = fw_string("volume_name", "Volume Name", 16)
3832 VolumeNameLen                   = nstring8("volume_name_len", "Volume Name")
3833 VolumeNameStringz               = stringz("volume_name_stringz", "Volume Name")
3834 VolumeNumber                    = uint8("volume_number", "Volume Number")
3835 VolumeNumberLong                = uint32("volume_number_long", "Volume Number")
3836 VolumeRemovableFlag             = val_string8("volume_removable_flag", "Volume Removable Flag", [
3837         [ 0x00, "Disk Cannot be Removed from Server" ],
3838         [ 0xff, "Disk Can be Removed from Server" ],
3839 ])
3840 VolumeRequestFlags              = val_string16("volume_request_flags", "Volume Request Flags", [
3841         [ 0x0000, "Return name with volume number" ],
3842         [ 0x0001, "Do not return name with volume number" ],
3843 ])
3844 VolumeSizeInClusters            = uint32("volume_size_in_clusters", "Volume Size in Clusters")
3845 VolumesSupportedMax             = uint16("volumes_supported_max", "Volumes Supported Max")
3846 VolumeType                      = val_string16("volume_type", "Volume Type", [
3847         [ 0x0000, "NetWare 386" ],
3848         [ 0x0001, "NetWare 286" ],
3849         [ 0x0002, "NetWare 386 Version 30" ],
3850         [ 0x0003, "NetWare 386 Version 31" ],
3851 ])
3852 WastedServerMemory              = uint16("wasted_server_memory", "Wasted Server Memory", BE)
3853 WaitTime                        = uint32("wait_time", "Wait Time")
3854
3855 Year                            = val_string8("year", "Year",[
3856         [ 0x50, "1980" ],
3857         [ 0x51, "1981" ],
3858         [ 0x52, "1982" ],
3859         [ 0x53, "1983" ],
3860         [ 0x54, "1984" ],
3861         [ 0x55, "1985" ],
3862         [ 0x56, "1986" ],
3863         [ 0x57, "1987" ],
3864         [ 0x58, "1988" ],
3865         [ 0x59, "1989" ],
3866         [ 0x5a, "1990" ],
3867         [ 0x5b, "1991" ],
3868         [ 0x5c, "1992" ],
3869         [ 0x5d, "1993" ],
3870         [ 0x5e, "1994" ],
3871         [ 0x5f, "1995" ],
3872         [ 0x60, "1996" ],
3873         [ 0x61, "1997" ],
3874         [ 0x62, "1998" ],
3875         [ 0x63, "1999" ],
3876         [ 0x64, "2000" ],
3877         [ 0x65, "2001" ],
3878         [ 0x66, "2002" ],
3879         [ 0x67, "2003" ],
3880         [ 0x68, "2004" ],
3881         [ 0x69, "2005" ],
3882         [ 0x6a, "2006" ],
3883         [ 0x6b, "2007" ],
3884         [ 0x6c, "2008" ],
3885         [ 0x6d, "2009" ],
3886         [ 0x6e, "2010" ],
3887         [ 0x6f, "2011" ],
3888         [ 0x70, "2012" ],
3889         [ 0x71, "2013" ],
3890         [ 0x72, "2014" ],
3891         [ 0x73, "2015" ],
3892         [ 0x74, "2016" ],
3893         [ 0x75, "2017" ],
3894         [ 0x76, "2018" ],
3895         [ 0x77, "2019" ],
3896         [ 0x78, "2020" ],
3897         [ 0x79, "2021" ],
3898         [ 0x7a, "2022" ],
3899         [ 0x7b, "2023" ],
3900         [ 0x7c, "2024" ],
3901         [ 0x7d, "2025" ],
3902         [ 0x7e, "2026" ],
3903         [ 0x7f, "2027" ],
3904         [ 0xc0, "1984" ],
3905         [ 0xc1, "1985" ],
3906         [ 0xc2, "1986" ],
3907         [ 0xc3, "1987" ],
3908         [ 0xc4, "1988" ],
3909         [ 0xc5, "1989" ],
3910         [ 0xc6, "1990" ],
3911         [ 0xc7, "1991" ],
3912         [ 0xc8, "1992" ],
3913         [ 0xc9, "1993" ],
3914         [ 0xca, "1994" ],
3915         [ 0xcb, "1995" ],
3916         [ 0xcc, "1996" ],
3917         [ 0xcd, "1997" ],
3918         [ 0xce, "1998" ],
3919         [ 0xcf, "1999" ],
3920         [ 0xd0, "2000" ],
3921         [ 0xd1, "2001" ],
3922         [ 0xd2, "2002" ],
3923         [ 0xd3, "2003" ],
3924         [ 0xd4, "2004" ],
3925         [ 0xd5, "2005" ],
3926         [ 0xd6, "2006" ],
3927         [ 0xd7, "2007" ],
3928         [ 0xd8, "2008" ],
3929         [ 0xd9, "2009" ],
3930         [ 0xda, "2010" ],
3931         [ 0xdb, "2011" ],
3932         [ 0xdc, "2012" ],
3933         [ 0xdd, "2013" ],
3934         [ 0xde, "2014" ],
3935         [ 0xdf, "2015" ],
3936 ])
3937 ##############################################################################
3938 # Structs
3939 ##############################################################################
3940                 
3941                 
3942 acctngInfo                      = struct("acctng_info_struct", [
3943         HoldTime,
3944         HoldAmount,
3945         ChargeAmount,
3946         HeldConnectTimeInMinutes,
3947         HeldRequests,
3948         HeldBytesRead,
3949         HeldBytesWritten,
3950 ],"Accounting Information")
3951 AFP10Struct                       = struct("afp_10_struct", [
3952         AFPEntryID,
3953         ParentID,
3954         AttributesDef16,
3955         DataForkLen,
3956         ResourceForkLen,
3957         TotalOffspring,
3958         CreationDate,
3959         LastAccessedDate,
3960         ModifiedDate,
3961         ModifiedTime,
3962         ArchivedDate,
3963         ArchivedTime,
3964         CreatorID,
3965         Reserved4,
3966         FinderAttr,
3967         HorizLocation,
3968         VertLocation,
3969         FileDirWindow,
3970         Reserved16,
3971         LongName,
3972         CreatorID,
3973         ShortName,
3974         AccessPrivileges,
3975 ], "AFP Information" )                
3976 AFP20Struct                       = struct("afp_20_struct", [
3977         AFPEntryID,
3978         ParentID,
3979         AttributesDef16,
3980         DataForkLen,
3981         ResourceForkLen,
3982         TotalOffspring,
3983         CreationDate,
3984         LastAccessedDate,
3985         ModifiedDate,
3986         ModifiedTime,
3987         ArchivedDate,
3988         ArchivedTime,
3989         CreatorID,
3990         Reserved4,
3991         FinderAttr,
3992         HorizLocation,
3993         VertLocation,
3994         FileDirWindow,
3995         Reserved16,
3996         LongName,
3997         CreatorID,
3998         ShortName,
3999         AccessPrivileges,
4000         Reserved,
4001         ProDOSInfo,
4002 ], "AFP Information" )                
4003 ArchiveDateStruct               = struct("archive_date_struct", [
4004         ArchivedDate,
4005 ])                
4006 ArchiveIdStruct                 = struct("archive_id_struct", [
4007         ArchiverID,
4008 ])                
4009 ArchiveInfoStruct               = struct("archive_info_struct", [
4010         ArchivedTime,
4011         ArchivedDate,
4012         ArchiverID,
4013 ], "Archive Information")
4014 ArchiveTimeStruct               = struct("archive_time_struct", [
4015         ArchivedTime,
4016 ])                
4017 AttributesStruct                = struct("attributes_struct", [
4018         AttributesDef32,
4019         FlagsDef,
4020 ], "Attributes")
4021 authInfo                        = struct("auth_info_struct", [
4022         Status,
4023         Reserved2,
4024         Privileges,
4025 ])
4026 BoardNameStruct                 = struct("board_name_struct", [
4027         DriverBoardName,
4028         DriverShortName,
4029         DriverLogicalName,
4030 ], "Board Name")        
4031 CacheInfo                       = struct("cache_info", [
4032         uint32("max_byte_cnt", "Maximum Byte Count"),
4033         uint32("min_num_of_cache_buff", "Minimum Number Of Cache Buffers"),
4034         uint32("min_cache_report_thresh", "Minimum Cache Report Threshold"),
4035         uint32("alloc_waiting", "Allocate Waiting Count"),
4036         uint32("ndirty_blocks", "Number of Dirty Blocks"),
4037         uint32("cache_dirty_wait_time", "Cache Dirty Wait Time"),
4038         uint32("cache_max_concur_writes", "Cache Maximum Concurrent Writes"),
4039         uint32("max_dirty_time", "Maximum Dirty Time"),
4040         uint32("num_dir_cache_buff", "Number Of Directory Cache Buffers"),
4041         uint32("cache_byte_to_block", "Cache Byte To Block Shift Factor"),
4042 ], "Cache Information")
4043 CommonLanStruc                  = struct("common_lan_struct", [
4044         boolean8("not_supported_mask", "Bit Counter Supported"),
4045         Reserved3,
4046         uint32("total_tx_packet_count", "Total Transmit Packet Count"),
4047         uint32("total_rx_packet_count", "Total Receive Packet Count"),
4048         uint32("no_ecb_available_count", "No ECB Available Count"),
4049         uint32("packet_tx_too_big_count", "Transmit Packet Too Big Count"),
4050         uint32("packet_tx_too_small_count", "Transmit Packet Too Small Count"),
4051         uint32("packet_rx_overflow_count", "Receive Packet Overflow Count"),
4052         uint32("packet_rx_too_big_count", "Receive Packet Too Big Count"),
4053         uint32("packet_rs_too_small_count", "Receive Packet Too Small Count"),
4054         uint32("packet_tx_misc_error_count", "Transmit Packet Misc Error Count"),
4055         uint32("packet_rx_misc_error_count", "Receive Packet Misc Error Count"),
4056         uint32("retry_tx_count", "Transmit Retry Count"),
4057         uint32("checksum_error_count", "Checksum Error Count"),
4058         uint32("hardware_rx_mismatch_count", "Hardware Receive Mismatch Count"),
4059 ], "Common LAN Information")
4060 CompDeCompStat                  = struct("comp_d_comp_stat", [ 
4061         uint32("cmphitickhigh", "Compress High Tick"),        
4062         uint32("cmphitickcnt", "Compress High Tick Count"),        
4063         uint32("cmpbyteincount", "Compress Byte In Count"),        
4064         uint32("cmpbyteoutcnt", "Compress Byte Out Count"),        
4065         uint32("cmphibyteincnt", "Compress High Byte In Count"),        
4066         uint32("cmphibyteoutcnt", "Compress High Byte Out Count"),        
4067         uint32("decphitickhigh", "DeCompress High Tick"),        
4068         uint32("decphitickcnt", "DeCompress High Tick Count"),        
4069         uint32("decpbyteincount", "DeCompress Byte In Count"),        
4070         uint32("decpbyteoutcnt", "DeCompress Byte Out Count"),        
4071         uint32("decphibyteincnt", "DeCompress High Byte In Count"),        
4072         uint32("decphibyteoutcnt", "DeCompress High Byte Out Count"),
4073 ], "Compression/Decompression Information")                
4074 ConnFileStruct                  = struct("conn_file_struct", [
4075         ConnectionNumberWord,
4076         TaskNumByte,
4077         LockType,
4078         AccessControl,
4079         LockFlag,
4080 ], "File Connection Information")
4081 ConnStruct                      = struct("conn_struct", [
4082         TaskNumByte,
4083         LockType,
4084         AccessControl,
4085         LockFlag,
4086         VolumeNumber,
4087         DirectoryEntryNumberWord,
4088         FileName14,
4089 ], "Connection Information")
4090 ConnTaskStruct                  = struct("conn_task_struct", [
4091         ConnectionNumberByte,
4092         TaskNumByte,
4093 ], "Task Information")
4094 Counters                        = struct("counters_struct", [
4095         uint32("read_exist_blck", "Read Existing Block Count"),
4096         uint32("read_exist_write_wait", "Read Existing Write Wait Count"),
4097         uint32("read_exist_part_read", "Read Existing Partial Read Count"),
4098         uint32("read_exist_read_err", "Read Existing Read Error Count"),
4099         uint32("wrt_blck_cnt", "Write Block Count"),
4100         uint32("wrt_entire_blck", "Write Entire Block Count"),
4101         uint32("internl_dsk_get", "Internal Disk Get Count"),
4102         uint32("internl_dsk_get_need_to_alloc", "Internal Disk Get Need To Allocate Count"),
4103         uint32("internl_dsk_get_someone_beat", "Internal Disk Get Someone Beat My Count"),
4104         uint32("internl_dsk_get_part_read", "Internal Disk Get Partial Read Count"),
4105         uint32("internl_dsk_get_read_err", "Internal Disk Get Read Error Count"),
4106         uint32("async_internl_dsk_get", "Async Internal Disk Get Count"),
4107         uint32("async_internl_dsk_get_need_to_alloc", "Async Internal Disk Get Need To Alloc"),
4108         uint32("async_internl_dsk_get_someone_beat", "Async Internal Disk Get Someone Beat Me"),
4109         uint32("err_doing_async_read", "Error Doing Async Read Count"),
4110         uint32("internl_dsk_get_no_read", "Internal Disk Get No Read Count"),
4111         uint32("internl_dsk_get_no_read_alloc", "Internal Disk Get No Read Allocate Count"),
4112         uint32("internl_dsk_get_no_read_someone_beat", "Internal Disk Get No Read Someone Beat Me Count"),
4113         uint32("internl_dsk_write", "Internal Disk Write Count"),
4114         uint32("internl_dsk_write_alloc", "Internal Disk Write Allocate Count"),
4115         uint32("internl_dsk_write_someone_beat", "Internal Disk Write Someone Beat Me Count"),
4116         uint32("write_err", "Write Error Count"),
4117         uint32("wait_on_sema", "Wait On Semaphore Count"),
4118         uint32("alloc_blck_i_had_to_wait_for", "Allocate Block I Had To Wait For Someone Count"),
4119         uint32("alloc_blck", "Allocate Block Count"),
4120         uint32("alloc_blck_i_had_to_wait", "Allocate Block I Had To Wait Count"),
4121 ], "Disk Counter Information")
4122 CPUInformation                  = struct("cpu_information", [
4123         PageTableOwnerFlag,
4124         CPUType,
4125         Reserved3,
4126         CoprocessorFlag,
4127         BusType,
4128         Reserved3,
4129         IOEngineFlag,
4130         Reserved3,
4131         FSEngineFlag,
4132         Reserved3, 
4133         NonDedFlag,
4134         Reserved3,
4135         CPUString,
4136         CoProcessorString,
4137         BusString,
4138 ], "CPU Information")
4139 CreationDateStruct              = struct("creation_date_struct", [
4140         CreationDate,
4141 ])                
4142 CreationInfoStruct              = struct("creation_info_struct", [
4143         CreationTime,
4144         CreationDate,
4145         CreatorID,
4146 ], "Creation Information")
4147 CreationTimeStruct              = struct("creation_time_struct", [
4148         CreationTime,
4149 ])
4150 CustomCntsInfo                  = struct("custom_cnts_info", [
4151         CustomVariableValue,
4152         CustomString,
4153 ], "Custom Counters" )        
4154 DataStreamSizeStruct            = struct("data_stream_size_struct", [
4155         DataStreamSize,
4156 ])
4157 DirCacheInfo                    = struct("dir_cache_info", [
4158         uint32("min_time_since_file_delete", "Minimum Time Since File Delete"),
4159         uint32("abs_min_time_since_file_delete", "Absolute Minimum Time Since File Delete"),
4160         uint32("min_num_of_dir_cache_buff", "Minimum Number Of Directory Cache Buffers"),
4161         uint32("max_num_of_dir_cache_buff", "Maximum Number Of Directory Cache Buffers"),
4162         uint32("num_of_dir_cache_buff", "Number Of Directory Cache Buffers"),
4163         uint32("dc_min_non_ref_time", "DC Minimum Non-Referenced Time"),
4164         uint32("dc_wait_time_before_new_buff", "DC Wait Time Before New Buffer"),
4165         uint32("dc_max_concurrent_writes", "DC Maximum Concurrent Writes"),
4166         uint32("dc_dirty_wait_time", "DC Dirty Wait Time"),
4167         uint32("dc_double_read_flag", "DC Double Read Flag"),
4168         uint32("map_hash_node_count", "Map Hash Node Count"),
4169         uint32("space_restriction_node_count", "Space Restriction Node Count"),
4170         uint32("trustee_list_node_count", "Trustee List Node Count"),
4171         uint32("percent_of_vol_used_by_dirs", "Percent Of Volume Used By Directories"),
4172 ], "Directory Cache Information")
4173 DirEntryStruct                  = struct("dir_entry_struct", [
4174         DirectoryEntryNumber,
4175         DOSDirectoryEntryNumber,
4176         VolumeNumberLong,
4177 ], "Directory Entry Information")
4178 #
4179 # XXX - CreationDate and CreationTime here appear to be big-endian,
4180 # but there's no way to say that *this* instance of a field is
4181 # big-endian but *other* instances are little-endian.
4182 #
4183 DirectoryInstance               = struct("directory_instance", [
4184         SearchSequenceWord,
4185         DirectoryID,
4186         DirectoryName14,
4187         DirectoryAttributes,
4188         DirectoryAccessRights,
4189         CreationDate,
4190         CreationTime,
4191         CreatorID,
4192         Reserved2,
4193         DirectoryStamp,
4194 ], "Directory Information")
4195 DMInfoLevel0                    = struct("dm_info_level_0", [
4196         uint32("io_flag", "IO Flag"),
4197         uint32("sm_info_size", "Storage Module Information Size"),
4198         uint32("avail_space", "Available Space"),
4199         uint32("used_space", "Used Space"),
4200         stringz("s_module_name", "Storage Module Name"),
4201         uint8("s_m_info", "Storage Media Information"),
4202 ])
4203 DMInfoLevel1                    = struct("dm_info_level_1", [
4204         NumberOfSMs,
4205         SMIDs,
4206 ])
4207 DMInfoLevel2                    = struct("dm_info_level_2", [
4208         Name,
4209 ])
4210 DOSDirectoryEntryStruct         = struct("dos_directory_entry_struct", [
4211         AttributesDef32,
4212         UniqueID,
4213         PurgeFlags,
4214         DestNameSpace,
4215         DirectoryNameLen,
4216         DirectoryName,
4217         CreationTime,
4218         CreationDate,
4219         CreatorID,
4220         ArchivedTime,
4221         ArchivedDate,
4222         ArchiverID,
4223         UpdateTime,
4224         UpdateDate,
4225         NextTrusteeEntry,
4226         Reserved48,
4227         InheritedRightsMask,
4228 ], "DOS Directory Information")
4229 DOSFileEntryStruct              = struct("dos_file_entry_struct", [
4230         AttributesDef32,
4231         UniqueID,
4232         PurgeFlags,
4233         DestNameSpace,
4234         NameLen,
4235         Name12,
4236         CreationTime,
4237         CreationDate,
4238         CreatorID,
4239         ArchivedTime,
4240         ArchivedDate,
4241         ArchiverID,
4242         UpdateTime,
4243         UpdateDate,
4244         UpdateID,
4245         FileSize,
4246         DataForkFirstFAT,
4247         NextTrusteeEntry,
4248         Reserved36,
4249         InheritedRightsMask,
4250         LastAccessedDate,
4251         Reserved28,
4252         PrimaryEntry,
4253         NameList,
4254 ], "DOS File Information")
4255 DSSpaceAllocateStruct           = struct("ds_space_alloc_struct", [
4256         DataStreamSpaceAlloc,
4257 ])
4258 DynMemStruct                    = struct("dyn_mem_struct", [
4259         uint32("dyn_mem_struct_total", "Total Dynamic Space" ),
4260         uint32("dyn_mem_struct_max", "Max Used Dynamic Space" ),
4261         uint32("dyn_mem_struct_cur", "Current Used Dynamic Space" ),
4262 ], "Dynamic Memory Information")
4263 EAInfoStruct                    = struct("ea_info_struct", [
4264         EADataSize,
4265         EACount,
4266         EAKeySize,
4267 ], "Extended Attribute Information")
4268 ExtraCacheCntrs                 = struct("extra_cache_cntrs", [
4269         uint32("internl_dsk_get_no_wait", "Internal Disk Get No Wait Count"),
4270         uint32("internl_dsk_get_no_wait_need", "Internal Disk Get No Wait Need To Allocate Count"),
4271         uint32("internl_dsk_get_no_wait_no_blk", "Internal Disk Get No Wait No Block Count"),
4272         uint32("id_get_no_read_no_wait", "ID Get No Read No Wait Count"),
4273         uint32("id_get_no_read_no_wait_sema", "ID Get No Read No Wait Semaphored Count"),
4274         uint32("id_get_no_read_no_wait_buffer", "ID Get No Read No Wait No Buffer Count"),
4275         uint32("id_get_no_read_no_wait_alloc", "ID Get No Read No Wait Allocate Count"),
4276         uint32("id_get_no_read_no_wait_no_alloc", "ID Get No Read No Wait No Alloc Count"),
4277         uint32("id_get_no_read_no_wait_no_alloc_sema", "ID Get No Read No Wait No Alloc Semaphored Count"),
4278         uint32("id_get_no_read_no_wait_no_alloc_alloc", "ID Get No Read No Wait No Alloc Allocate Count"),
4279 ], "Extra Cache Counters Information")
4280
4281
4282 ReferenceIDStruct               = struct("ref_id_struct", [
4283         CurrentReferenceID,
4284 ])
4285 NSAttributeStruct               = struct("ns_attrib_struct", [
4286         AttributesDef32,
4287 ])
4288 DStreamActual                   = struct("d_stream_actual", [
4289         Reserved12,
4290         # Need to look into how to format this correctly
4291 ])
4292 DStreamLogical                  = struct("d_string_logical", [
4293         Reserved12,
4294         # Need to look into how to format this correctly
4295 ])
4296 LastUpdatedInSecondsStruct      = struct("last_update_in_seconds_struct", [
4297         SecondsRelativeToTheYear2000,
4298 ]) 
4299 DOSNameStruct                   = struct("dos_name_struct", [
4300         FileName,
4301 ], "DOS File Name") 
4302 FlushTimeStruct                 = struct("flush_time_struct", [
4303         FlushTime,
4304 ]) 
4305 ParentBaseIDStruct              = struct("parent_base_id_struct", [
4306         ParentBaseID,
4307 ]) 
4308 MacFinderInfoStruct             = struct("mac_finder_info_struct", [
4309         MacFinderInfo,
4310 ]) 
4311 SiblingCountStruct              = struct("sibling_count_struct", [
4312         SiblingCount,
4313 ]) 
4314 EffectiveRightsStruct           = struct("eff_rights_struct", [
4315         EffectiveRights,
4316         Reserved3,     
4317 ]) 
4318 MacTimeStruct                   = struct("mac_time_struct", [
4319         MACCreateDate,
4320         MACCreateTime,
4321         MACBackupDate,
4322         MACBackupTime,
4323 ])
4324 LastAccessedTimeStruct          = struct("last_access_time_struct", [
4325         LastAccessedTime,      
4326 ])
4327
4328
4329
4330 FileAttributesStruct            = struct("file_attributes_struct", [
4331         AttributesDef32,
4332 ])
4333 FileInfoStruct                  = struct("file_info_struct", [
4334         ParentID,
4335         DirectoryEntryNumber,
4336         TotalBlocksToDecompress,
4337         CurrentBlockBeingDecompressed,
4338 ], "File Information")
4339 #
4340 # XXX - CreationDate, CreationTime, UpdateDate, and UpdateTime here
4341 # appear to be big-endian, but there's no way to say that *this*
4342 # instance of a field is big-endian but *other* instances are
4343 # little-endian.
4344 #
4345 FileInstance                    = struct("file_instance", [
4346         SearchSequenceWord,
4347         DirectoryID,
4348         FileName14,
4349         AttributesDef,
4350         FileMode,
4351         FileSize,
4352         CreationDate,
4353         CreationTime,
4354         UpdateDate,
4355         UpdateTime,
4356 ], "File Instance")
4357 FileNameStruct                  = struct("file_name_struct", [
4358         FileName,
4359 ], "File Name")       
4360 FileServerCounters              = struct("file_server_counters", [
4361         uint16("too_many_hops", "Too Many Hops"),
4362         uint16("unknown_network", "Unknown Network"),
4363         uint16("no_space_for_service", "No Space For Service"),
4364         uint16("no_receive_buff", "No Receive Buffers"),
4365         uint16("not_my_network", "Not My Network"),
4366         uint32("netbios_progated", "NetBIOS Propagated Count"),
4367         uint32("ttl_pckts_srvcd", "Total Packets Serviced"),
4368         uint32("ttl_pckts_routed", "Total Packets Routed"),
4369 ], "File Server Counters")
4370 FileSystemInfo                  = struct("file_system_info", [
4371         uint32("fat_moved", "Number of times the OS has move the location of FAT"),
4372         uint32("fat_write_err", "Number of write errors in both original and mirrored copies of FAT"),
4373         uint32("someone_else_did_it_0", "Someone Else Did It Count 0"),
4374         uint32("someone_else_did_it_1", "Someone Else Did It Count 1"),
4375         uint32("someone_else_did_it_2", "Someone Else Did It Count 2"),
4376         uint32("i_ran_out_someone_else_did_it_0", "I Ran Out Someone Else Did It Count 0"),
4377         uint32("i_ran_out_someone_else_did_it_1", "I Ran Out Someone Else Did It Count 1"),
4378         uint32("i_ran_out_someone_else_did_it_2", "I Ran Out Someone Else Did It Count 2"),
4379         uint32("turbo_fat_build_failed", "Turbo FAT Build Failed Count"),
4380         uint32("extra_use_count_node_count", "Errors allocating a use count node for TTS"),
4381         uint32("extra_extra_use_count_node_count", "Errors allocating an additional use count node for TTS"),
4382         uint32("error_read_last_fat", "Error Reading Last FAT Count"),
4383         uint32("someone_else_using_this_file", "Someone Else Using This File Count"),
4384 ], "File System Information")
4385 GenericInfoDef                  = struct("generic_info_def", [
4386         fw_string("generic_label", "Label", 64),
4387         uint32("generic_ident_type", "Identification Type"),
4388         uint32("generic_ident_time", "Identification Time"),
4389         uint32("generic_media_type", "Media Type"),
4390         uint32("generic_cartridge_type", "Cartridge Type"),
4391         uint32("generic_unit_size", "Unit Size"),
4392         uint32("generic_block_size", "Block Size"),
4393         uint32("generic_capacity", "Capacity"),
4394         uint32("generic_pref_unit_size", "Preferred Unit Size"),
4395         fw_string("generic_name", "Name",64),
4396         uint32("generic_type", "Type"),
4397         uint32("generic_status", "Status"),
4398         uint32("generic_func_mask", "Function Mask"),
4399         uint32("generic_ctl_mask", "Control Mask"),
4400         uint32("generic_parent_count", "Parent Count"),
4401         uint32("generic_sib_count", "Sibling Count"),
4402         uint32("generic_child_count", "Child Count"),
4403         uint32("generic_spec_info_sz", "Specific Information Size"),
4404         uint32("generic_object_uniq_id", "Unique Object ID"),
4405         uint32("generic_media_slot", "Media Slot"),
4406 ], "Generic Information")
4407 HandleInfoLevel0                = struct("handle_info_level_0", [
4408 #        DataStream,
4409 ])
4410 HandleInfoLevel1                = struct("handle_info_level_1", [
4411         DataStream,
4412 ])        
4413 HandleInfoLevel2                = struct("handle_info_level_2", [
4414         DOSDirectoryBase,
4415         NameSpace,
4416         DataStream,
4417 ])        
4418 HandleInfoLevel3                = struct("handle_info_level_3", [
4419         DOSDirectoryBase,
4420         NameSpace,
4421 ])        
4422 HandleInfoLevel4                = struct("handle_info_level_4", [
4423         DOSDirectoryBase,
4424         NameSpace,
4425         ParentDirectoryBase,
4426         ParentDOSDirectoryBase,
4427 ])        
4428 HandleInfoLevel5                = struct("handle_info_level_5", [
4429         DOSDirectoryBase,
4430         NameSpace,
4431         DataStream,
4432         ParentDirectoryBase,
4433         ParentDOSDirectoryBase,
4434 ])        
4435 IPXInformation                  = struct("ipx_information", [
4436         uint32("ipx_send_pkt", "IPX Send Packet Count"),
4437         uint16("ipx_malform_pkt", "IPX Malformed Packet Count"),
4438         uint32("ipx_get_ecb_req", "IPX Get ECB Request Count"),
4439         uint32("ipx_get_ecb_fail", "IPX Get ECB Fail Count"),
4440         uint32("ipx_aes_event", "IPX AES Event Count"),
4441         uint16("ipx_postponed_aes", "IPX Postponed AES Count"),
4442         uint16("ipx_max_conf_sock", "IPX Max Configured Socket Count"),
4443         uint16("ipx_max_open_sock", "IPX Max Open Socket Count"),
4444         uint16("ipx_open_sock_fail", "IPX Open Socket Fail Count"),
4445         uint32("ipx_listen_ecb", "IPX Listen ECB Count"),
4446         uint16("ipx_ecb_cancel_fail", "IPX ECB Cancel Fail Count"),
4447         uint16("ipx_get_lcl_targ_fail", "IPX Get Local Target Fail Count"),
4448 ], "IPX Information")
4449 JobEntryTime                    = struct("job_entry_time", [
4450         Year,
4451         Month,
4452         Day,
4453         Hour,
4454         Minute,
4455         Second,
4456 ], "Job Entry Time")
4457 JobStruct                       = struct("job_struct", [
4458         ClientStation,
4459         ClientTaskNumber,
4460         ClientIDNumber,
4461         TargetServerIDNumber,
4462         TargetExecutionTime,
4463         JobEntryTime,
4464         JobNumber,
4465         JobType,
4466         JobPosition,
4467         JobControlFlags,
4468         JobFileName,
4469         JobFileHandle,
4470         ServerStation,
4471         ServerTaskNumber,
4472         ServerID,
4473         TextJobDescription,
4474         ClientRecordArea,
4475 ], "Job Information")
4476 JobStructNew                    = struct("job_struct_new", [
4477         RecordInUseFlag,
4478         PreviousRecord,
4479         NextRecord,
4480         ClientStationLong,
4481         ClientTaskNumberLong,
4482         ClientIDNumber,
4483         TargetServerIDNumber,
4484         TargetExecutionTime,
4485         JobEntryTime,
4486         JobNumberLong,
4487         JobType,
4488         JobPositionWord,
4489         JobControlFlagsWord,
4490         JobFileName,
4491         JobFileHandleLong,
4492         ServerStationLong,
4493         ServerTaskNumberLong,
4494         ServerID,
4495 ], "Job Information")                
4496 KnownRoutes                     = struct("known_routes", [
4497         NetIDNumber,
4498         HopsToNet,
4499         NetStatus,
4500         TimeToNet,
4501 ], "Known Routes")
4502 KnownServStruc                  = struct("known_server_struct", [
4503         ServerAddress,
4504         HopsToNet,
4505         ServerNameStringz,
4506 ], "Known Servers")                
4507 LANConfigInfo                   = struct("lan_cfg_info", [
4508         LANdriverCFG_MajorVersion,
4509         LANdriverCFG_MinorVersion,
4510         LANdriverNodeAddress,
4511         Reserved,
4512         LANdriverModeFlags,
4513         LANdriverBoardNumber,
4514         LANdriverBoardInstance,
4515         LANdriverMaximumSize,
4516         LANdriverMaxRecvSize,
4517         LANdriverRecvSize,
4518         LANdriverCardID,
4519         LANdriverMediaID,
4520         LANdriverTransportTime,
4521         LANdriverSrcRouting,
4522         LANdriverLineSpeed,
4523         LANdriverReserved,
4524         LANdriverMajorVersion,
4525         LANdriverMinorVersion,
4526         LANdriverFlags,
4527         LANdriverSendRetries,
4528         LANdriverLink,
4529         LANdriverSharingFlags,
4530         LANdriverSlot,
4531         LANdriverIOPortsAndRanges1,
4532         LANdriverIOPortsAndRanges2,
4533         LANdriverIOPortsAndRanges3,
4534         LANdriverIOPortsAndRanges4,
4535         LANdriverMemoryDecode0,
4536         LANdriverMemoryLength0,
4537         LANdriverMemoryDecode1,
4538         LANdriverMemoryLength1,
4539         LANdriverInterrupt1,
4540         LANdriverInterrupt2,
4541         LANdriverDMAUsage1,
4542         LANdriverDMAUsage2,
4543         LANdriverLogicalName,
4544         LANdriverIOReserved,
4545         LANdriverCardName,
4546 ], "LAN Configuration Information")
4547 LastAccessStruct                = struct("last_access_struct", [
4548         LastAccessedDate,
4549 ])
4550 lockInfo                        = struct("lock_info_struct", [
4551         LogicalLockThreshold,
4552         PhysicalLockThreshold,
4553         FileLockCount,
4554         RecordLockCount,
4555 ], "Lock Information")
4556 LockStruct                      = struct("lock_struct", [
4557         TaskNumByte,
4558         LockType,
4559         RecordStart,
4560         RecordEnd,
4561 ], "Locks")
4562 LoginTime                       = struct("login_time", [
4563         Year,
4564         Month,
4565         Day,
4566         Hour,
4567         Minute,
4568         Second,
4569         DayOfWeek,
4570 ], "Login Time")
4571 LogLockStruct                   = struct("log_lock_struct", [
4572         TaskNumByte,
4573         LockStatus,
4574         LockName,
4575 ], "Logical Locks")
4576 LogRecStruct                    = struct("log_rec_struct", [
4577         ConnectionNumberWord,
4578         TaskNumByte,
4579         LockStatus,
4580 ], "Logical Record Locks")
4581 LSLInformation                  = struct("lsl_information", [
4582         uint32("rx_buffers", "Receive Buffers"),
4583         uint32("rx_buffers_75", "Receive Buffers Warning Level"),
4584         uint32("rx_buffers_checked_out", "Receive Buffers Checked Out Count"),
4585         uint32("rx_buffer_size", "Receive Buffer Size"),
4586         uint32("max_phy_packet_size", "Maximum Physical Packet Size"),
4587         uint32("last_time_rx_buff_was_alloc", "Last Time a Receive Buffer was Allocated"),
4588         uint32("max_num_of_protocols", "Maximum Number of Protocols"),
4589         uint32("max_num_of_media_types", "Maximum Number of Media Types"),
4590         uint32("total_tx_packets", "Total Transmit Packets"),
4591         uint32("get_ecb_buf", "Get ECB Buffers"),
4592         uint32("get_ecb_fails", "Get ECB Failures"),
4593         uint32("aes_event_count", "AES Event Count"),
4594         uint32("post_poned_events", "Postponed Events"),
4595         uint32("ecb_cxl_fails", "ECB Cancel Failures"),
4596         uint32("valid_bfrs_reused", "Valid Buffers Reused"),
4597         uint32("enqueued_send_cnt", "Enqueued Send Count"),
4598         uint32("total_rx_packets", "Total Receive Packets"),
4599         uint32("unclaimed_packets", "Unclaimed Packets"),
4600         uint8("stat_table_major_version", "Statistics Table Major Version"),
4601         uint8("stat_table_minor_version", "Statistics Table Minor Version"),
4602 ], "LSL Information")
4603 MaximumSpaceStruct              = struct("max_space_struct", [
4604         MaxSpace,
4605 ])
4606 MemoryCounters                  = struct("memory_counters", [
4607         uint32("orig_num_cache_buff", "Original Number Of Cache Buffers"),
4608         uint32("curr_num_cache_buff", "Current Number Of Cache Buffers"),
4609         uint32("cache_dirty_block_thresh", "Cache Dirty Block Threshold"),
4610         uint32("wait_node", "Wait Node Count"),
4611         uint32("wait_node_alloc_fail", "Wait Node Alloc Failure Count"),
4612         uint32("move_cache_node", "Move Cache Node Count"),
4613         uint32("move_cache_node_from_avai", "Move Cache Node From Avail Count"),
4614         uint32("accel_cache_node_write", "Accelerate Cache Node Write Count"),
4615         uint32("rem_cache_node", "Remove Cache Node Count"),
4616         uint32("rem_cache_node_from_avail", "Remove Cache Node From Avail Count"),
4617 ], "Memory Counters")
4618 MLIDBoardInfo                   = struct("mlid_board_info", [           
4619         uint32("protocol_board_num", "Protocol Board Number"),
4620         uint16("protocol_number", "Protocol Number"),
4621         bytes("protocol_id", "Protocol ID", 6),
4622         nstring8("protocol_name", "Protocol Name"),
4623 ], "MLID Board Information")        
4624 ModifyInfoStruct                = struct("modify_info_struct", [
4625         ModifiedTime,
4626         ModifiedDate,
4627         ModifierID,
4628         LastAccessedDate,
4629 ], "Modification Information")
4630 nameInfo                        = struct("name_info_struct", [
4631         ObjectType,
4632         nstring8("login_name", "Login Name"),
4633 ], "Name Information")
4634 NCPNetworkAddress               = struct("ncp_network_address_struct", [
4635         TransportType,
4636         Reserved3,
4637         NetAddress,
4638 ], "Network Address")
4639
4640 netAddr                         = struct("net_addr_struct", [
4641         TransportType,
4642         nbytes32("transport_addr", "Transport Address"),
4643 ], "Network Address")
4644
4645 NetWareInformationStruct        = struct("netware_information_struct", [
4646         DataStreamSpaceAlloc,           # (Data Stream Alloc Bit)
4647         AttributesDef32,                # (Attributes Bit)
4648         FlagsDef,
4649         DataStreamSize,                 # (Data Stream Size Bit)
4650         TotalDataStreamDiskSpaceAlloc,  # (Total Stream Size Bit)
4651         NumberOfDataStreams,
4652         CreationTime,                   # (Creation Bit)
4653         CreationDate,
4654         CreatorID,
4655         ModifiedTime,                   # (Modify Bit)
4656         ModifiedDate,
4657         ModifierID,
4658         LastAccessedDate,
4659         ArchivedTime,                   # (Archive Bit)
4660         ArchivedDate,
4661         ArchiverID,
4662         InheritedRightsMask,            # (Rights Bit)
4663         DirectoryEntryNumber,           # (Directory Entry Bit)
4664         DOSDirectoryEntryNumber,
4665         VolumeNumberLong,
4666         EADataSize,                     # (Extended Attribute Bit)
4667         EACount,
4668         EAKeySize,
4669         CreatorNameSpaceNumber,         # (Name Space Bit)
4670         Reserved3,
4671 ], "NetWare Information")
4672 NLMInformation                  = struct("nlm_information", [
4673         IdentificationNumber,
4674         NLMFlags,
4675         Reserved3,
4676         NLMType,
4677         Reserved3,
4678         ParentID,
4679         MajorVersion,
4680         MinorVersion,
4681         Revision,
4682         Year,
4683         Reserved3,
4684         Month,
4685         Reserved3,
4686         Day,
4687         Reserved3,
4688         AllocAvailByte,
4689         AllocFreeCount,
4690         LastGarbCollect,
4691         MessageLanguage,
4692         NumberOfReferencedPublics,
4693 ], "NLM Information")
4694 NSInfoStruct                    = struct("ns_info_struct", [
4695         NameSpace,
4696         Reserved3,
4697 ])
4698 NWAuditStatus                   = struct("nw_audit_status", [
4699         AuditVersionDate,
4700         AuditFileVersionDate,
4701         val_string16("audit_enable_flag", "Auditing Enabled Flag", [
4702                 [ 0x0000, "Auditing Disabled" ],
4703                 [ 0x0100, "Auditing Enabled" ],
4704         ]),
4705         Reserved2,
4706         uint32("audit_file_size", "Audit File Size"),
4707         uint32("modified_counter", "Modified Counter"),
4708         uint32("audit_file_max_size", "Audit File Maximum Size"),
4709         uint32("audit_file_size_threshold", "Audit File Size Threshold"),
4710         uint32("audit_record_count", "Audit Record Count"),
4711         uint32("auditing_flags", "Auditing Flags"),
4712 ], "NetWare Audit Status")
4713 ObjectSecurityStruct            = struct("object_security_struct", [
4714         ObjectSecurity,
4715 ])
4716 ObjectFlagsStruct               = struct("object_flags_struct", [
4717         ObjectFlags,
4718 ])
4719 ObjectTypeStruct                = struct("object_type_struct", [
4720         ObjectType,
4721         Reserved2,
4722 ])
4723 ObjectNameStruct                = struct("object_name_struct", [
4724         ObjectNameStringz,
4725 ])
4726 ObjectIDStruct                  = struct("object_id_struct", [
4727         ObjectID, 
4728         Restriction,
4729 ])
4730 OpnFilesStruct                  = struct("opn_files_struct", [
4731         TaskNumberWord,
4732         LockType,
4733         AccessControl,
4734         LockFlag,
4735         VolumeNumber,
4736         DOSParentDirectoryEntry,
4737         DOSDirectoryEntry,
4738         ForkCount,
4739         NameSpace,
4740         FileName,
4741 ], "Open Files Information")
4742 OwnerIDStruct                   = struct("owner_id_struct", [
4743         CreatorID,
4744 ])                
4745 PacketBurstInformation          = struct("packet_burst_information", [
4746         uint32("big_invalid_slot", "Big Invalid Slot Count"),
4747         uint32("big_forged_packet", "Big Forged Packet Count"),
4748         uint32("big_invalid_packet", "Big Invalid Packet Count"),
4749         uint32("big_still_transmitting", "Big Still Transmitting Count"),
4750         uint32("still_doing_the_last_req", "Still Doing The Last Request Count"),
4751         uint32("invalid_control_req", "Invalid Control Request Count"),
4752         uint32("control_invalid_message_number", "Control Invalid Message Number Count"),
4753         uint32("control_being_torn_down", "Control Being Torn Down Count"),
4754         uint32("big_repeat_the_file_read", "Big Repeat the File Read Count"),
4755         uint32("big_send_extra_cc_count", "Big Send Extra CC Count"),
4756         uint32("big_return_abort_mess", "Big Return Abort Message Count"),
4757         uint32("big_read_invalid_mess", "Big Read Invalid Message Number Count"),
4758         uint32("big_read_do_it_over", "Big Read Do It Over Count"),
4759         uint32("big_read_being_torn_down", "Big Read Being Torn Down Count"),
4760         uint32("previous_control_packet", "Previous Control Packet Count"),
4761         uint32("send_hold_off_message", "Send Hold Off Message Count"),
4762         uint32("big_read_no_data_avail", "Big Read No Data Available Count"),
4763         uint32("big_read_trying_to_read", "Big Read Trying To Read Too Much Count"),
4764         uint32("async_read_error", "Async Read Error Count"),
4765         uint32("big_read_phy_read_err", "Big Read Physical Read Error Count"),
4766         uint32("ctl_bad_ack_frag_list", "Control Bad ACK Fragment List Count"),
4767         uint32("ctl_no_data_read", "Control No Data Read Count"),
4768         uint32("write_dup_req", "Write Duplicate Request Count"),
4769         uint32("shouldnt_be_ack_here", "Shouldn't Be ACKing Here Count"),
4770         uint32("write_incon_packet_len", "Write Inconsistent Packet Lengths Count"),
4771         uint32("first_packet_isnt_a_write", "First Packet Isn't A Write Count"),
4772         uint32("write_trash_dup_req", "Write Trashed Duplicate Request Count"),
4773         uint32("big_write_inv_message_num", "Big Write Invalid Message Number Count"),
4774         uint32("big_write_being_torn_down", "Big Write Being Torn Down Count"),
4775         uint32("big_write_being_abort", "Big Write Being Aborted Count"),
4776         uint32("zero_ack_frag", "Zero ACK Fragment Count"),
4777         uint32("write_curr_trans", "Write Currently Transmitting Count"),
4778         uint32("try_to_write_too_much", "Trying To Write Too Much Count"),
4779         uint32("write_out_of_mem_for_ctl_nodes", "Write Out Of Memory For Control Nodes Count"),
4780         uint32("write_didnt_need_this_frag", "Write Didn't Need This Fragment Count"),
4781         uint32("write_too_many_buf_check", "Write Too Many Buffers Checked Out Count"),
4782         uint32("write_timeout", "Write Time Out Count"),
4783         uint32("write_got_an_ack0", "Write Got An ACK Count 0"),
4784         uint32("write_got_an_ack1", "Write Got An ACK Count 1"),
4785         uint32("poll_abort_conn", "Poller Aborted The Connnection Count"),
4786         uint32("may_had_out_of_order", "Maybe Had Out Of Order Writes Count"),
4787         uint32("had_an_out_of_order", "Had An Out Of Order Write Count"),
4788         uint32("moved_the_ack_bit_dn", "Moved The ACK Bit Down Count"),
4789         uint32("bumped_out_of_order", "Bumped Out Of Order Write Count"),
4790         uint32("poll_rem_old_out_of_order", "Poller Removed Old Out Of Order Count"),
4791         uint32("write_didnt_need_but_req_ack", "Write Didn't Need But Requested ACK Count"),
4792         uint32("write_trash_packet", "Write Trashed Packet Count"),
4793         uint32("too_many_ack_frag", "Too Many ACK Fragments Count"),
4794         uint32("saved_an_out_of_order_packet", "Saved An Out Of Order Packet Count"),
4795         uint32("conn_being_aborted", "Connection Being Aborted Count"),
4796 ], "Packet Burst Information")
4797
4798 PadDSSpaceAllocate              = struct("pad_ds_space_alloc", [
4799     Reserved4,
4800 ])
4801 PadAttributes                   = struct("pad_attributes", [
4802     Reserved6,
4803 ])
4804 PadDataStreamSize               = struct("pad_data_stream_size", [
4805     Reserved4,
4806 ])    
4807 PadTotalStreamSize              = struct("pad_total_stream_size", [
4808     Reserved6,
4809 ])
4810 PadCreationInfo                 = struct("pad_creation_info", [
4811     Reserved8,
4812 ])
4813 PadModifyInfo                   = struct("pad_modify_info", [
4814     Reserved10,
4815 ])
4816 PadArchiveInfo                  = struct("pad_archive_info", [
4817     Reserved8,
4818 ])
4819 PadRightsInfo                   = struct("pad_rights_info", [
4820     Reserved2,
4821 ])
4822 PadDirEntry                     = struct("pad_dir_entry", [
4823     Reserved12,
4824 ])
4825 PadEAInfo                       = struct("pad_ea_info", [
4826     Reserved12,
4827 ])
4828 PadNSInfo                       = struct("pad_ns_info", [
4829     Reserved4,
4830 ])
4831 PhyLockStruct                   = struct("phy_lock_struct", [
4832         LoggedCount,
4833         ShareableLockCount,
4834         RecordStart,
4835         RecordEnd,
4836         LogicalConnectionNumber,
4837         TaskNumByte,
4838         LockType,
4839 ], "Physical Locks")
4840 printInfo                       = struct("print_info_struct", [
4841         PrintFlags,
4842         TabSize,
4843         Copies,
4844         PrintToFileFlag,
4845         BannerName,
4846         TargetPrinter,
4847         FormType,
4848 ], "Print Information")
4849 RightsInfoStruct                = struct("rights_info_struct", [
4850         InheritedRightsMask,
4851 ])
4852 RoutersInfo                     = struct("routers_info", [
4853         bytes("node", "Node", 6),
4854         ConnectedLAN,
4855         uint16("route_hops", "Hop Count"),
4856         uint16("route_time", "Route Time"),
4857 ], "Router Information")        
4858 RTagStructure                   = struct("r_tag_struct", [
4859         RTagNumber,
4860         ResourceSignature,
4861         ResourceCount,
4862         ResourceName,
4863 ], "Resource Tag")
4864 ScanInfoFileName                = struct("scan_info_file_name", [
4865         SalvageableFileEntryNumber,
4866         FileName,
4867 ])
4868 ScanInfoFileNoName              = struct("scan_info_file_no_name", [
4869         SalvageableFileEntryNumber,        
4870 ])        
4871 Segments                        = struct("segments", [
4872         uint32("volume_segment_dev_num", "Volume Segment Device Number"),
4873         uint32("volume_segment_offset", "Volume Segment Offset"),
4874         uint32("volume_segment_size", "Volume Segment Size"),
4875 ], "Volume Segment Information")            
4876 SemaInfoStruct                  = struct("sema_info_struct", [
4877         LogicalConnectionNumber,
4878         TaskNumByte,
4879 ])
4880 SemaStruct                      = struct("sema_struct", [
4881         OpenCount,
4882         SemaphoreValue,
4883         TaskNumByte,
4884         SemaphoreName,
4885 ], "Semaphore Information")
4886 ServerInfo                      = struct("server_info", [
4887         uint32("reply_canceled", "Reply Canceled Count"),
4888         uint32("write_held_off", "Write Held Off Count"),
4889         uint32("write_held_off_with_dup", "Write Held Off With Duplicate Request"),
4890         uint32("invalid_req_type", "Invalid Request Type Count"),
4891         uint32("being_aborted", "Being Aborted Count"),
4892         uint32("already_doing_realloc", "Already Doing Re-Allocate Count"),
4893         uint32("dealloc_invalid_slot", "De-Allocate Invalid Slot Count"),
4894         uint32("dealloc_being_proc", "De-Allocate Being Processed Count"),
4895         uint32("dealloc_forged_packet", "De-Allocate Forged Packet Count"),
4896         uint32("dealloc_still_transmit", "De-Allocate Still Transmitting Count"),
4897         uint32("start_station_error", "Start Station Error Count"),
4898         uint32("invalid_slot", "Invalid Slot Count"),
4899         uint32("being_processed", "Being Processed Count"),
4900         uint32("forged_packet", "Forged Packet Count"),
4901         uint32("still_transmitting", "Still Transmitting Count"),
4902         uint32("reexecute_request", "Re-Execute Request Count"),
4903         uint32("invalid_sequence_number", "Invalid Sequence Number Count"),
4904         uint32("dup_is_being_sent", "Duplicate Is Being Sent Already Count"),
4905         uint32("sent_pos_ack", "Sent Positive Acknowledge Count"),
4906         uint32("sent_a_dup_reply", "Sent A Duplicate Reply Count"),
4907         uint32("no_mem_for_station", "No Memory For Station Control Count"),
4908         uint32("no_avail_conns", "No Available Connections Count"),
4909         uint32("realloc_slot", "Re-Allocate Slot Count"),
4910         uint32("realloc_slot_came_too_soon", "Re-Allocate Slot Came Too Soon Count"),
4911 ], "Server Information")
4912 ServersSrcInfo                  = struct("servers_src_info", [
4913         ServerNode,
4914         ConnectedLAN,
4915         HopsToNet,
4916 ], "Source Server Information")
4917 SpaceStruct                     = struct("space_struct", [        
4918         Level,
4919         MaxSpace,
4920         CurrentSpace,
4921 ], "Space Information")        
4922 SPXInformation                  = struct("spx_information", [
4923         uint16("spx_max_conn", "SPX Max Connections Count"),
4924         uint16("spx_max_used_conn", "SPX Max Used Connections"),
4925         uint16("spx_est_conn_req", "SPX Establish Connection Requests"),
4926         uint16("spx_est_conn_fail", "SPX Establish Connection Fail"),
4927         uint16("spx_listen_con_req", "SPX Listen Connect Request"),
4928         uint16("spx_listen_con_fail", "SPX Listen Connect Fail"),
4929         uint32("spx_send", "SPX Send Count"),
4930         uint32("spx_window_choke", "SPX Window Choke Count"),
4931         uint16("spx_bad_send", "SPX Bad Send Count"),
4932         uint16("spx_send_fail", "SPX Send Fail Count"),
4933         uint16("spx_abort_conn", "SPX Aborted Connection"),
4934         uint32("spx_listen_pkt", "SPX Listen Packet Count"),
4935         uint16("spx_bad_listen", "SPX Bad Listen Count"),
4936         uint32("spx_incoming_pkt", "SPX Incoming Packet Count"),
4937         uint16("spx_bad_in_pkt", "SPX Bad In Packet Count"),
4938         uint16("spx_supp_pkt", "SPX Suppressed Packet Count"),
4939         uint16("spx_no_ses_listen", "SPX No Session Listen ECB Count"),
4940         uint16("spx_watch_dog", "SPX Watch Dog Destination Session Count"),
4941 ], "SPX Information")
4942 StackInfo                       = struct("stack_info", [
4943         StackNumber,
4944         fw_string("stack_short_name", "Stack Short Name", 16),
4945 ], "Stack Information")        
4946 statsInfo                       = struct("stats_info_struct", [
4947         TotalBytesRead,
4948         TotalBytesWritten,
4949         TotalRequest,
4950 ], "Statistics")
4951 theTimeStruct                   = struct("the_time_struct", [
4952         UTCTimeInSeconds,
4953         FractionalSeconds,
4954         TimesyncStatus,
4955 ])        
4956 timeInfo                        = struct("time_info", [
4957         Year,
4958         Month,
4959         Day,
4960         Hour,
4961         Minute,
4962         Second,
4963         DayOfWeek,
4964         uint32("login_expiration_time", "Login Expiration Time"),
4965 ])              
4966 TotalStreamSizeStruct           = struct("total_stream_size_struct", [
4967         TotalDataStreamDiskSpaceAlloc,
4968         NumberOfDataStreams,
4969 ])
4970 TrendCounters                   = struct("trend_counters", [
4971         uint32("num_of_cache_checks", "Number Of Cache Checks"),
4972         uint32("num_of_cache_hits", "Number Of Cache Hits"),
4973         uint32("num_of_dirty_cache_checks", "Number Of Dirty Cache Checks"),
4974         uint32("num_of_cache_dirty_checks", "Number Of Cache Dirty Checks"),
4975         uint32("cache_used_while_check", "Cache Used While Checking"),
4976         uint32("wait_till_dirty_blcks_dec", "Wait Till Dirty Blocks Decrease Count"),
4977         uint32("alloc_blck_frm_avail", "Allocate Block From Available Count"),
4978         uint32("alloc_blck_frm_lru", "Allocate Block From LRU Count"),
4979         uint32("alloc_blck_already_wait", "Allocate Block Already Waiting"),
4980         uint32("lru_sit_time", "LRU Sitting Time"),
4981         uint32("num_of_cache_check_no_wait", "Number Of Cache Check No Wait"),
4982         uint32("num_of_cache_hits_no_wait", "Number Of Cache Hits No Wait"),
4983 ], "Trend Counters")
4984 TrusteeStruct                   = struct("trustee_struct", [
4985         ObjectID,
4986         AccessRightsMaskWord,
4987 ])
4988 UpdateDateStruct                = struct("update_date_struct", [
4989         UpdateDate,
4990 ])
4991 UpdateIDStruct                  = struct("update_id_struct", [
4992         UpdateID,
4993 ])        
4994 UpdateTimeStruct                = struct("update_time_struct", [
4995         UpdateTime,
4996 ])                
4997 UserInformation                 = struct("user_info", [
4998         ConnectionNumber,
4999         UseCount,
5000         Reserved2,
5001         ConnectionServiceType,
5002         Year,
5003         Month,
5004         Day,
5005         Hour,
5006         Minute,
5007         Second,
5008         DayOfWeek,
5009         Status,
5010         Reserved2,
5011         ExpirationTime,
5012         ObjectType,
5013         Reserved2,
5014         TransactionTrackingFlag,
5015         LogicalLockThreshold,
5016         FileWriteFlags,
5017         FileWriteState,
5018         Reserved,
5019         FileLockCount,
5020         RecordLockCount,
5021         TotalBytesRead,
5022         TotalBytesWritten,
5023         TotalRequest,
5024         HeldRequests,
5025         HeldBytesRead,
5026         HeldBytesWritten,
5027 ], "User Information")
5028 VolInfoStructure                = struct("vol_info_struct", [
5029         VolumeType,
5030         Reserved2,
5031         StatusFlagBits,
5032         SectorSize,
5033         SectorsPerClusterLong,
5034         VolumeSizeInClusters,
5035         FreedClusters,
5036         SubAllocFreeableClusters,
5037         FreeableLimboSectors,
5038         NonFreeableLimboSectors,
5039         NonFreeableAvailableSubAllocSectors,
5040         NotUsableSubAllocSectors,
5041         SubAllocClusters,
5042         DataStreamsCount,
5043         LimboDataStreamsCount,
5044         OldestDeletedFileAgeInTicks,
5045         CompressedDataStreamsCount,
5046         CompressedLimboDataStreamsCount,
5047         UnCompressableDataStreamsCount,
5048         PreCompressedSectors,
5049         CompressedSectors,
5050         MigratedFiles,
5051         MigratedSectors,
5052         ClustersUsedByFAT,
5053         ClustersUsedByDirectories,
5054         ClustersUsedByExtendedDirectories,
5055         TotalDirectoryEntries,
5056         UnUsedDirectoryEntries,
5057         TotalExtendedDirectoryExtants,
5058         UnUsedExtendedDirectoryExtants,
5059         ExtendedAttributesDefined,
5060         ExtendedAttributeExtantsUsed,
5061         DirectoryServicesObjectID,
5062         VolumeLastModifiedTime,
5063         VolumeLastModifiedDate,
5064 ], "Volume Information")
5065 VolInfo2Struct                  = struct("vol_info_struct_2", [
5066         uint32("volume_active_count", "Volume Active Count"),
5067         uint32("volume_use_count", "Volume Use Count"),
5068         uint32("mac_root_ids", "MAC Root IDs"),
5069         VolumeLastModifiedTime,
5070         VolumeLastModifiedDate,
5071         uint32("volume_reference_count", "Volume Reference Count"),
5072         uint32("compression_lower_limit", "Compression Lower Limit"),
5073         uint32("outstanding_ios", "Outstanding IOs"),
5074         uint32("outstanding_compression_ios", "Outstanding Compression IOs"),
5075         uint32("compression_ios_limit", "Compression IOs Limit"),
5076 ], "Extended Volume Information")        
5077 VolumeStruct                    = struct("volume_struct", [
5078         VolumeNumberLong,
5079         VolumeNameLen,
5080 ])
5081
5082
5083 ##############################################################################
5084 # NCP Groups
5085 ##############################################################################
5086 def define_groups():
5087         groups['accounting']    = "Accounting"
5088         groups['afp']           = "AFP"
5089         groups['auditing']      = "Auditing"
5090         groups['bindery']       = "Bindery"
5091         groups['comm']          = "Communication"
5092         groups['connection']    = "Connection"
5093         groups['directory']     = "Directory"
5094         groups['extended']      = "Extended Attribute"
5095         groups['file']          = "File"
5096         groups['fileserver']    = "File Server"
5097         groups['message']       = "Message"
5098         groups['migration']     = "Data Migration"
5099         groups['misc']          = "Miscellaneous"
5100         groups['name']          = "Name Space"
5101         groups['nds']           = "NetWare Directory"
5102         groups['print']         = "Print"
5103         groups['queue']         = "Queue"
5104         groups['sync']          = "Synchronization"
5105         groups['tts']           = "Transaction Tracking"
5106         groups['qms']           = "Queue Management System (QMS)"
5107         groups['stats']         = "Server Statistics"
5108         groups['unknown']       = "Unknown"
5109
5110 ##############################################################################
5111 # NCP Errors
5112 ##############################################################################
5113 def define_errors():
5114         errors[0x0000] = "Ok"
5115         errors[0x0001] = "Transaction tracking is available"
5116         errors[0x0002] = "Ok. The data has been written"
5117         errors[0x0003] = "Calling Station is a Manager"
5118     
5119         errors[0x0100] = "One or more of the ConnectionNumbers in the send list are invalid"
5120         errors[0x0101] = "Invalid space limit"
5121         errors[0x0102] = "Insufficient disk space"
5122         errors[0x0103] = "Queue server cannot add jobs"
5123         errors[0x0104] = "Out of disk space"
5124         errors[0x0105] = "Semaphore overflow"
5125         errors[0x0106] = "Invalid Parameter"
5126         errors[0x0107] = "Invalid Number of Minutes to Delay"
5127         errors[0x0108] = "Invalid Start or Network Number"
5128         errors[0x0109] = "Cannot Obtain License"
5129     
5130         errors[0x0200] = "One or more clients in the send list are not logged in"
5131         errors[0x0201] = "Queue server cannot attach"
5132     
5133         errors[0x0300] = "One or more clients in the send list are not accepting messages"
5134     
5135         errors[0x0400] = "Client already has message"
5136         errors[0x0401] = "Queue server cannot service job"
5137     
5138         errors[0x7300] = "Revoke Handle Rights Not Found"
5139         errors[0x7900] = "Invalid Parameter in Request Packet"
5140         errors[0x7901] = "Nothing being Compressed"
5141         errors[0x7a00] = "Connection Already Temporary"
5142         errors[0x7b00] = "Connection Already Logged in"
5143         errors[0x7c00] = "Connection Not Authenticated"
5144         
5145         errors[0x7e00] = "NCP failed boundary check"
5146         errors[0x7e01] = "Invalid Length"
5147     
5148         errors[0x7f00] = "Lock Waiting"
5149         errors[0x8000] = "Lock fail"
5150         errors[0x8001] = "File in Use"
5151     
5152         errors[0x8100] = "A file handle could not be allocated by the file server"
5153         errors[0x8101] = "Out of File Handles"
5154         
5155         errors[0x8200] = "Unauthorized to open the file"
5156         errors[0x8300] = "Unable to read/write the volume. Possible bad sector on the file server"
5157         errors[0x8301] = "Hard I/O Error"
5158     
5159         errors[0x8400] = "Unauthorized to create the directory"
5160         errors[0x8401] = "Unauthorized to create the file"
5161     
5162         errors[0x8500] = "Unauthorized to delete the specified file"
5163         errors[0x8501] = "Unauthorized to overwrite an existing file in this directory"
5164     
5165         errors[0x8700] = "An unexpected character was encountered in the filename"
5166         errors[0x8701] = "Create Filename Error"
5167     
5168         errors[0x8800] = "Invalid file handle"
5169         errors[0x8900] = "Unauthorized to search this file/directory"
5170         errors[0x8a00] = "Unauthorized to delete this file/directory"
5171         errors[0x8b00] = "Unauthorized to rename a file in this directory"
5172     
5173         errors[0x8c00] = "No set privileges"
5174         errors[0x8c01] = "Unauthorized to modify a file in this directory"
5175         errors[0x8c02] = "Unauthorized to change the restriction on this volume"
5176     
5177         errors[0x8d00] = "Some of the affected files are in use by another client"
5178         errors[0x8d01] = "The affected file is in use"
5179     
5180         errors[0x8e00] = "All of the affected files are in use by another client"
5181         errors[0x8f00] = "Some of the affected files are read-only"
5182     
5183         errors[0x9000] = "An attempt to modify a read-only volume occurred"
5184         errors[0x9001] = "All of the affected files are read-only"
5185         errors[0x9002] = "Read Only Access to Volume"
5186     
5187         errors[0x9100] = "Some of the affected files already exist"
5188         errors[0x9101] = "Some Names Exist"
5189     
5190         errors[0x9200] = "Directory with the new name already exists"
5191         errors[0x9201] = "All of the affected files already exist"
5192     
5193         errors[0x9300] = "Unauthorized to read from this file"
5194         errors[0x9400] = "Unauthorized to write to this file"
5195         errors[0x9500] = "The affected file is detached"
5196     
5197         errors[0x9600] = "The file server has run out of memory to service this request"
5198         errors[0x9601] = "No alloc space for message"
5199         errors[0x9602] = "Server Out of Space"
5200     
5201         errors[0x9800] = "The affected volume is not mounted"
5202         errors[0x9801] = "The volume associated with Volume Number is not mounted"
5203         errors[0x9802] = "The resulting volume does not exist"
5204         errors[0x9803] = "The destination volume is not mounted"
5205         errors[0x9804] = "Disk Map Error"
5206     
5207         errors[0x9900] = "The file server has run out of directory space on the affected volume"
5208         errors[0x9a00] = "The request attempted to rename the affected file to another volume"
5209     
5210         errors[0x9b00] = "DirHandle is not associated with a valid directory path"
5211         errors[0x9b01] = "A resulting directory handle is not associated with a valid directory path"
5212         errors[0x9b02] = "The directory associated with DirHandle does not exist"
5213         errors[0x9b03] = "Bad directory handle"
5214     
5215         errors[0x9c00] = "The resulting path is not valid"
5216         errors[0x9c01] = "The resulting file path is not valid"
5217         errors[0x9c02] = "The resulting directory path is not valid"
5218         errors[0x9c03] = "Invalid path"
5219     
5220         errors[0x9d00] = "A directory handle was not available for allocation"
5221     
5222         errors[0x9e00] = "The name of the directory does not conform to a legal name for this name space"
5223         errors[0x9e01] = "The new directory name does not conform to a legal name for this name space"
5224         errors[0x9e02] = "Bad File Name"
5225     
5226         errors[0x9f00] = "The request attempted to delete a directory that is in use by another client"
5227     
5228         errors[0xa000] = "The request attempted to delete a directory that is not empty"
5229         errors[0xa100] = "An unrecoverable error occured on the affected directory"
5230     
5231         errors[0xa200] = "The request attempted to read from a file region that is physically locked"
5232         errors[0xa201] = "I/O Lock Error"
5233     
5234         errors[0xa400] = "Invalid directory rename attempted"
5235         errors[0xa500] = "Invalid open create mode"
5236         errors[0xa600] = "Auditor Access has been Removed"
5237         errors[0xa700] = "Error Auditing Version"
5238             
5239         errors[0xa800] = "Invalid Support Module ID"
5240         errors[0xa801] = "No Auditing Access Rights"
5241             
5242         errors[0xbe00] = "Invalid Data Stream"
5243         errors[0xbf00] = "Requests for this name space are not valid on this volume"
5244     
5245         errors[0xc000] = "Unauthorized to retrieve accounting data"
5246         
5247         errors[0xc100] = "The ACCOUNT_BALANCE property does not exist"
5248         errors[0xc101] = "No Account Balance"
5249         
5250         errors[0xc200] = "The object has exceeded its credit limit"
5251         errors[0xc300] = "Too many holds have been placed against this account"
5252         errors[0xc400] = "The client account has been disabled"
5253     
5254         errors[0xc500] = "Access to the account has been denied because of intruder detection"
5255         errors[0xc501] = "Login lockout"
5256         errors[0xc502] = "Server Login Locked"
5257     
5258         errors[0xc600] = "The caller does not have operator priviliges"
5259         errors[0xc601] = "The client does not have operator priviliges"
5260     
5261         errors[0xc800] = "Missing EA Key"
5262         errors[0xc900] = "EA Not Found"
5263         errors[0xca00] = "Invalid EA Handle Type"
5264         errors[0xcb00] = "EA No Key No Data"
5265         errors[0xcc00] = "EA Number Mismatch"
5266         errors[0xcd00] = "Extent Number Out of Range"
5267         errors[0xce00] = "EA Bad Directory Number"
5268         errors[0xcf00] = "Invalid EA Handle"
5269     
5270         errors[0xd000] = "Queue error"
5271         errors[0xd001] = "EA Position Out of Range"
5272         
5273         errors[0xd100] = "The queue does not exist"
5274         errors[0xd101] = "EA Access Denied"
5275     
5276         errors[0xd200] = "A queue server is not associated with this queue"
5277         errors[0xd201] = "A queue server is not associated with the selected queue"
5278         errors[0xd202] = "No queue server"
5279         errors[0xd203] = "Data Page Odd Size"
5280     
5281         errors[0xd300] = "No queue rights"
5282         errors[0xd301] = "EA Volume Not Mounted"
5283     
5284         errors[0xd400] = "The queue is full and cannot accept another request"
5285         errors[0xd401] = "The queue associated with ObjectId is full and cannot accept another request"
5286         errors[0xd402] = "Bad Page Boundary"
5287     
5288         errors[0xd500] = "A job does not exist in this queue"
5289         errors[0xd501] = "No queue job"
5290         errors[0xd502] = "The job associated with JobNumber does not exist in this queue"
5291         errors[0xd503] = "Inspect Failure"
5292     
5293         errors[0xd600] = "The file server does not allow unencrypted passwords"
5294         errors[0xd601] = "No job right"
5295         errors[0xd602] = "EA Already Claimed"
5296     
5297         errors[0xd700] = "Bad account"
5298         errors[0xd701] = "The old and new password strings are identical"
5299         errors[0xd702] = "The job is currently being serviced"
5300         errors[0xd703] = "The queue is currently servicing a job"
5301         errors[0xd704] = "Queue servicing"
5302         errors[0xd705] = "Odd Buffer Size"
5303     
5304         errors[0xd800] = "Queue not active"
5305         errors[0xd801] = "No Scorecards"
5306         
5307         errors[0xd900] = "The file server cannot accept another connection as it has reached its limit"
5308         errors[0xd901] = "The client is not security equivalent to one of the objects in the Q_SERVERS group property of the target queue"
5309         errors[0xd902] = "Station is not a server"
5310         errors[0xd903] = "Bad EDS Signature"
5311     
5312         errors[0xda00] = "Attempted to login to the file server during a restricted time period"
5313         errors[0xda01] = "Queue halted"
5314         errors[0xda02] = "EA Space Limit"
5315     
5316         errors[0xdb00] = "Attempted to login to the file server from an unauthorized workstation or network"
5317         errors[0xdb01] = "The queue cannot attach another queue server"
5318         errors[0xdb02] = "Maximum queue servers"
5319         errors[0xdb03] = "EA Key Corrupt"
5320     
5321         errors[0xdc00] = "Account Expired"
5322         errors[0xdc01] = "EA Key Limit"
5323         
5324         errors[0xdd00] = "Tally Corrupt"
5325         errors[0xde00] = "Attempted to login to the file server with an incorrect password"
5326         errors[0xdf00] = "Attempted to login to the file server with a password that has expired"
5327     
5328         errors[0xe000] = "No Login Connections Available"
5329         errors[0xe700] = "No disk track"
5330         errors[0xe800] = "Write to group"
5331         errors[0xe900] = "The object is already a member of the group property"
5332     
5333         errors[0xea00] = "No such member"
5334         errors[0xea01] = "The bindery object is not a member of the set"
5335         errors[0xea02] = "Non-existent member"
5336     
5337         errors[0xeb00] = "The property is not a set property"
5338     
5339         errors[0xec00] = "No such set"
5340         errors[0xec01] = "The set property does not exist"
5341     
5342         errors[0xed00] = "Property exists"
5343         errors[0xed01] = "The property already exists"
5344         errors[0xed02] = "An attempt was made to create a bindery object property that already exists"
5345     
5346         errors[0xee00] = "The object already exists"
5347         errors[0xee01] = "The bindery object already exists"
5348     
5349         errors[0xef00] = "Illegal name"
5350         errors[0xef01] = "Illegal characters in ObjectName field"
5351         errors[0xef02] = "Invalid name"
5352     
5353         errors[0xf000] = "A wildcard was detected in a field that does not support wildcards"
5354         errors[0xf001] = "An illegal wildcard was detected in ObjectName"
5355     
5356         errors[0xf100] = "The client does not have the rights to access this bindery object"
5357         errors[0xf101] = "Bindery security"
5358         errors[0xf102] = "Invalid bindery security"
5359     
5360         errors[0xf200] = "Unauthorized to read from this object"
5361         errors[0xf300] = "Unauthorized to rename this object"
5362     
5363         errors[0xf400] = "Unauthorized to delete this object"
5364         errors[0xf401] = "No object delete privileges"
5365         errors[0xf402] = "Unauthorized to delete this queue"
5366     
5367         errors[0xf500] = "Unauthorized to create this object"
5368         errors[0xf501] = "No object create"
5369     
5370         errors[0xf600] = "No property delete"
5371         errors[0xf601] = "Unauthorized to delete the property of this object"
5372         errors[0xf602] = "Unauthorized to delete this property"
5373     
5374         errors[0xf700] = "Unauthorized to create this property"
5375         errors[0xf701] = "No property create privilege"
5376     
5377         errors[0xf800] = "Unauthorized to write to this property"
5378         errors[0xf900] = "Unauthorized to read this property"
5379         errors[0xfa00] = "Temporary remap error"
5380     
5381         errors[0xfb00] = "No such property"
5382         errors[0xfb01] = "The file server does not support this request"
5383         errors[0xfb02] = "The specified property does not exist"
5384         errors[0xfb03] = "The PASSWORD property does not exist for this bindery object"
5385         errors[0xfb04] = "NDS NCP not available"
5386         errors[0xfb05] = "Bad Directory Handle"
5387         errors[0xfb06] = "Unknown Request"
5388         errors[0xfb07] = "Invalid Subfunction Request"
5389         errors[0xfb08] = "Attempt to use an invalid parameter (drive number, path, or flag value) during a set drive path call"
5390         errors[0xfb09] = "NMAS not installed on this server, NCP NOT Supported"
5391         errors[0xfb0a] = "Station Not Logged In"
5392     
5393         errors[0xfc00] = "The message queue cannot accept another message"
5394         errors[0xfc01] = "The trustee associated with ObjectId does not exist"
5395         errors[0xfc02] = "The specified bindery object does not exist"
5396         errors[0xfc03] = "The bindery object associated with ObjectID does not exist"
5397         errors[0xfc04] = "A bindery object does not exist that matches"
5398         errors[0xfc05] = "The specified queue does not exist"
5399         errors[0xfc06] = "No such object"
5400         errors[0xfc07] = "The queue associated with ObjectID does not exist"
5401     
5402         errors[0xfd00] = "Bad station number"
5403         errors[0xfd01] = "The connection associated with ConnectionNumber is not active"
5404         errors[0xfd02] = "Lock collision"
5405         errors[0xfd03] = "Transaction tracking is disabled"
5406     
5407         errors[0xfe00] = "I/O failure"
5408         errors[0xfe01] = "The files containing the bindery on the file server are locked"
5409         errors[0xfe02] = "A file with the specified name already exists in this directory"
5410         errors[0xfe03] = "No more restrictions were found"
5411         errors[0xfe04] = "The file server was unable to lock the file within the specified time limit"
5412         errors[0xfe05] = "The file server was unable to lock all files within the specified time limit"
5413         errors[0xfe06] = "The bindery object associated with ObjectID is not a valid trustee"
5414         errors[0xfe07] = "Directory locked"
5415         errors[0xfe08] = "Bindery locked"
5416         errors[0xfe09] = "Invalid semaphore name length"
5417         errors[0xfe0a] = "The file server was unable to complete the operation within the specified time limit"
5418         errors[0xfe0b] = "Transaction restart"
5419         errors[0xfe0c] = "Bad packet"
5420         errors[0xfe0d] = "Timeout"
5421         errors[0xfe0e] = "User Not Found"
5422         errors[0xfe0f] = "Trustee Not Found"
5423     
5424         errors[0xff00] = "Failure"
5425         errors[0xff01] = "Lock error"
5426         errors[0xff02] = "File not found"
5427         errors[0xff03] = "The file not found or cannot be unlocked"
5428         errors[0xff04] = "Record not found"
5429         errors[0xff05] = "The logical record was not found"
5430         errors[0xff06] = "The printer associated with Printer Number does not exist"
5431         errors[0xff07] = "No such printer"
5432         errors[0xff08] = "Unable to complete the request"
5433         errors[0xff09] = "Unauthorized to change privileges of this trustee"
5434         errors[0xff0a] = "No files matching the search criteria were found"
5435         errors[0xff0b] = "A file matching the search criteria was not found"
5436         errors[0xff0c] = "Verification failed"
5437         errors[0xff0d] = "Object associated with ObjectID is not a manager"
5438         errors[0xff0e] = "Invalid initial semaphore value"
5439         errors[0xff0f] = "The semaphore handle is not valid"
5440         errors[0xff10] = "SemaphoreHandle is not associated with a valid sempahore"
5441         errors[0xff11] = "Invalid semaphore handle"
5442         errors[0xff12] = "Transaction tracking is not available"
5443         errors[0xff13] = "The transaction has not yet been written to disk"
5444         errors[0xff14] = "Directory already exists"
5445         errors[0xff15] = "The file already exists and the deletion flag was not set"
5446         errors[0xff16] = "No matching files or directories were found"
5447         errors[0xff17] = "A file or directory matching the search criteria was not found"
5448         errors[0xff18] = "The file already exists"
5449         errors[0xff19] = "Failure, No files found"
5450         errors[0xff1a] = "Unlock Error"
5451         errors[0xff1b] = "I/O Bound Error"
5452         errors[0xff1c] = "Not Accepting Messages"
5453         errors[0xff1d] = "No More Salvageable Files in Directory"
5454         errors[0xff1e] = "Calling Station is Not a Manager"
5455         errors[0xff1f] = "Bindery Failure"
5456         errors[0xff20] = "NCP Extension Not Found"
5457
5458 ##############################################################################
5459 # Produce C code
5460 ##############################################################################
5461 def ExamineVars(vars, structs_hash, vars_hash):
5462         for var in vars:
5463                 if isinstance(var, struct):
5464                         structs_hash[var.HFName()] = var
5465                         struct_vars = var.Variables()
5466                         ExamineVars(struct_vars, structs_hash, vars_hash)
5467                 else:
5468                         vars_hash[repr(var)] = var
5469                         if isinstance(var, bitfield):
5470                                 sub_vars = var.SubVariables()
5471                                 ExamineVars(sub_vars, structs_hash, vars_hash)
5472
5473 def produce_code():
5474
5475         global errors
5476
5477         print "/*"
5478         print " * Generated automatically from %s" % (sys.argv[0])
5479         print " * Do not edit this file manually, as all changes will be lost."
5480         print " */\n"
5481
5482         print """
5483 /*
5484  * This program is free software; you can redistribute it and/or
5485  * modify it under the terms of the GNU General Public License
5486  * as published by the Free Software Foundation; either version 2
5487  * of the License, or (at your option) any later version.
5488  * 
5489  * This program is distributed in the hope that it will be useful,
5490  * but WITHOUT ANY WARRANTY; without even the implied warranty of
5491  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5492  * GNU General Public License for more details.
5493  * 
5494  * You should have received a copy of the GNU General Public License
5495  * along with this program; if not, write to the Free Software
5496  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
5497  */
5498
5499 #ifdef HAVE_CONFIG_H
5500 # include "config.h"
5501 #endif
5502
5503 #include <string.h>
5504 #include <glib.h>
5505 #include <epan/packet.h>
5506 #include <epan/conversation.h>
5507 #include "ptvcursor.h"
5508 #include "packet-ncp-int.h"
5509
5510 /* Function declarations for functions used in proto_register_ncp2222() */
5511 static void ncp_init_protocol(void);
5512 static void ncp_postseq_cleanup(void);
5513
5514 /* Endianness macros */
5515 #define BE              0
5516 #define LE              1
5517 #define NO_ENDIANNESS   0
5518
5519 #define NO_LENGTH       -1
5520
5521 /* We use this int-pointer as a special flag in ptvc_record's */
5522 static int ptvc_struct_int_storage;
5523 #define PTVC_STRUCT     (&ptvc_struct_int_storage)
5524
5525 /* Values used in the count-variable ("var"/"repeat") logic. */"""
5526
5527
5528         if global_highest_var > -1:
5529                 print "#define NUM_REPEAT_VARS\t%d" % (global_highest_var + 1)
5530                 print "guint repeat_vars[NUM_REPEAT_VARS];",
5531         else:
5532                 print "#define NUM_REPEAT_VARS\t0"
5533                 print "guint *repeat_vars = NULL;",
5534
5535         print """
5536 #define NO_VAR          NUM_REPEAT_VARS
5537 #define NO_REPEAT       NUM_REPEAT_VARS
5538
5539 #define REQ_COND_SIZE_CONSTANT  0
5540 #define REQ_COND_SIZE_VARIABLE  1
5541 #define NO_REQ_COND_SIZE        0
5542
5543
5544 #define NTREE   0x00020000
5545 #define NDEPTH  0x00000002
5546 #define NREV    0x00000004
5547 #define NFLAGS  0x00000008
5548
5549
5550
5551 static int hf_ncp_func = -1;
5552 static int hf_ncp_length = -1;
5553 static int hf_ncp_subfunc = -1;
5554 static int hf_ncp_fragment_handle = -1;
5555 static int hf_ncp_completion_code = -1;
5556 static int hf_ncp_connection_status = -1;
5557 static int hf_ncp_req_frame_num = -1;
5558 static int hf_ncp_req_frame_time = -1;
5559 static int hf_ncp_fragment_size = -1;
5560 static int hf_ncp_message_size = -1;
5561 static int hf_ncp_nds_flag = -1;
5562 static int hf_ncp_nds_verb = -1; 
5563 static int hf_ping_version = -1;
5564 static int hf_nds_version = -1;
5565 static int hf_nds_flags = -1;
5566 static int hf_nds_reply_depth = -1;
5567 static int hf_nds_reply_rev = -1;
5568 static int hf_nds_reply_flags = -1;
5569 static int hf_nds_p1type = -1;
5570 static int hf_nds_uint32value = -1;
5571 static int hf_nds_bit1 = -1;
5572 static int hf_nds_bit2 = -1;
5573 static int hf_nds_bit3 = -1;
5574 static int hf_nds_bit4 = -1;
5575 static int hf_nds_bit5 = -1;
5576 static int hf_nds_bit6 = -1;
5577 static int hf_nds_bit7 = -1;
5578 static int hf_nds_bit8 = -1;
5579 static int hf_nds_bit9 = -1;
5580 static int hf_nds_bit10 = -1;
5581 static int hf_nds_bit11 = -1;
5582 static int hf_nds_bit12 = -1;
5583 static int hf_nds_bit13 = -1;
5584 static int hf_nds_bit14 = -1;
5585 static int hf_nds_bit15 = -1;
5586 static int hf_nds_bit16 = -1;
5587 static int hf_bit1outflags = -1;
5588 static int hf_bit2outflags = -1;
5589 static int hf_bit3outflags = -1;
5590 static int hf_bit4outflags = -1;
5591 static int hf_bit5outflags = -1;
5592 static int hf_bit6outflags = -1;
5593 static int hf_bit7outflags = -1;
5594 static int hf_bit8outflags = -1;
5595 static int hf_bit9outflags = -1;
5596 static int hf_bit10outflags = -1;
5597 static int hf_bit11outflags = -1;
5598 static int hf_bit12outflags = -1;
5599 static int hf_bit13outflags = -1;
5600 static int hf_bit14outflags = -1;
5601 static int hf_bit15outflags = -1;
5602 static int hf_bit16outflags = -1;
5603 static int hf_bit1nflags = -1;
5604 static int hf_bit2nflags = -1;
5605 static int hf_bit3nflags = -1;
5606 static int hf_bit4nflags = -1;
5607 static int hf_bit5nflags = -1;
5608 static int hf_bit6nflags = -1;
5609 static int hf_bit7nflags = -1;
5610 static int hf_bit8nflags = -1;
5611 static int hf_bit9nflags = -1;
5612 static int hf_bit10nflags = -1;
5613 static int hf_bit11nflags = -1;
5614 static int hf_bit12nflags = -1;
5615 static int hf_bit13nflags = -1;
5616 static int hf_bit14nflags = -1;
5617 static int hf_bit15nflags = -1;
5618 static int hf_bit16nflags = -1;
5619 static int hf_bit1rflags = -1;
5620 static int hf_bit2rflags = -1;
5621 static int hf_bit3rflags = -1;
5622 static int hf_bit4rflags = -1;
5623 static int hf_bit5rflags = -1;
5624 static int hf_bit6rflags = -1;
5625 static int hf_bit7rflags = -1;
5626 static int hf_bit8rflags = -1;
5627 static int hf_bit9rflags = -1;
5628 static int hf_bit10rflags = -1;
5629 static int hf_bit11rflags = -1;
5630 static int hf_bit12rflags = -1;
5631 static int hf_bit13rflags = -1;
5632 static int hf_bit14rflags = -1;
5633 static int hf_bit15rflags = -1;
5634 static int hf_bit16rflags = -1;
5635 static int hf_bit1cflags = -1;
5636 static int hf_bit2cflags = -1;
5637 static int hf_bit3cflags = -1;
5638 static int hf_bit4cflags = -1;
5639 static int hf_bit5cflags = -1;
5640 static int hf_bit6cflags = -1;
5641 static int hf_bit7cflags = -1;
5642 static int hf_bit8cflags = -1;
5643 static int hf_bit9cflags = -1;
5644 static int hf_bit10cflags = -1;
5645 static int hf_bit11cflags = -1;
5646 static int hf_bit12cflags = -1;
5647 static int hf_bit13cflags = -1;
5648 static int hf_bit14cflags = -1;
5649 static int hf_bit15cflags = -1;
5650 static int hf_bit16cflags = -1;
5651 static int hf_bit1acflags = -1;
5652 static int hf_bit2acflags = -1;
5653 static int hf_bit3acflags = -1;
5654 static int hf_bit4acflags = -1;
5655 static int hf_bit5acflags = -1;
5656 static int hf_bit6acflags = -1;
5657 static int hf_bit7acflags = -1;
5658 static int hf_bit8acflags = -1;
5659 static int hf_bit9acflags = -1;
5660 static int hf_bit10acflags = -1;
5661 static int hf_bit11acflags = -1;
5662 static int hf_bit12acflags = -1;
5663 static int hf_bit13acflags = -1;
5664 static int hf_bit14acflags = -1;
5665 static int hf_bit15acflags = -1;
5666 static int hf_bit16acflags = -1;
5667 static int hf_bit1vflags = -1;
5668 static int hf_bit2vflags = -1;
5669 static int hf_bit3vflags = -1;
5670 static int hf_bit4vflags = -1;
5671 static int hf_bit5vflags = -1;
5672 static int hf_bit6vflags = -1;
5673 static int hf_bit7vflags = -1;
5674 static int hf_bit8vflags = -1;
5675 static int hf_bit9vflags = -1;
5676 static int hf_bit10vflags = -1;
5677 static int hf_bit11vflags = -1;
5678 static int hf_bit12vflags = -1;
5679 static int hf_bit13vflags = -1;
5680 static int hf_bit14vflags = -1;
5681 static int hf_bit15vflags = -1;
5682 static int hf_bit16vflags = -1;
5683 static int hf_bit1eflags = -1;
5684 static int hf_bit2eflags = -1;
5685 static int hf_bit3eflags = -1;
5686 static int hf_bit4eflags = -1;
5687 static int hf_bit5eflags = -1;
5688 static int hf_bit6eflags = -1;
5689 static int hf_bit7eflags = -1;
5690 static int hf_bit8eflags = -1;
5691 static int hf_bit9eflags = -1;
5692 static int hf_bit10eflags = -1;
5693 static int hf_bit11eflags = -1;
5694 static int hf_bit12eflags = -1;
5695 static int hf_bit13eflags = -1;
5696 static int hf_bit14eflags = -1;
5697 static int hf_bit15eflags = -1;
5698 static int hf_bit16eflags = -1;
5699 static int hf_bit1infoflagsl = -1;
5700 static int hf_bit2infoflagsl = -1;
5701 static int hf_bit3infoflagsl = -1;
5702 static int hf_bit4infoflagsl = -1;
5703 static int hf_bit5infoflagsl = -1;
5704 static int hf_bit6infoflagsl = -1;
5705 static int hf_bit7infoflagsl = -1;
5706 static int hf_bit8infoflagsl = -1;
5707 static int hf_bit9infoflagsl = -1;
5708 static int hf_bit10infoflagsl = -1;
5709 static int hf_bit11infoflagsl = -1;
5710 static int hf_bit12infoflagsl = -1;
5711 static int hf_bit13infoflagsl = -1;
5712 static int hf_bit14infoflagsl = -1;
5713 static int hf_bit15infoflagsl = -1;
5714 static int hf_bit16infoflagsl = -1;
5715 static int hf_bit1infoflagsh = -1;
5716 static int hf_bit2infoflagsh = -1;
5717 static int hf_bit3infoflagsh = -1;
5718 static int hf_bit4infoflagsh = -1;
5719 static int hf_bit5infoflagsh = -1;
5720 static int hf_bit6infoflagsh = -1;
5721 static int hf_bit7infoflagsh = -1;
5722 static int hf_bit8infoflagsh = -1;
5723 static int hf_bit9infoflagsh = -1;
5724 static int hf_bit10infoflagsh = -1;
5725 static int hf_bit11infoflagsh = -1;
5726 static int hf_bit12infoflagsh = -1;
5727 static int hf_bit13infoflagsh = -1;
5728 static int hf_bit14infoflagsh = -1;
5729 static int hf_bit15infoflagsh = -1;
5730 static int hf_bit16infoflagsh = -1;
5731 static int hf_bit1lflags = -1;
5732 static int hf_bit2lflags = -1;
5733 static int hf_bit3lflags = -1;
5734 static int hf_bit4lflags = -1;
5735 static int hf_bit5lflags = -1;
5736 static int hf_bit6lflags = -1;
5737 static int hf_bit7lflags = -1;
5738 static int hf_bit8lflags = -1;
5739 static int hf_bit9lflags = -1;
5740 static int hf_bit10lflags = -1;
5741 static int hf_bit11lflags = -1;
5742 static int hf_bit12lflags = -1;
5743 static int hf_bit13lflags = -1;
5744 static int hf_bit14lflags = -1;
5745 static int hf_bit15lflags = -1;
5746 static int hf_bit16lflags = -1;
5747 static int hf_bit1l1flagsl = -1;
5748 static int hf_bit2l1flagsl = -1;
5749 static int hf_bit3l1flagsl = -1;
5750 static int hf_bit4l1flagsl = -1;
5751 static int hf_bit5l1flagsl = -1;
5752 static int hf_bit6l1flagsl = -1;
5753 static int hf_bit7l1flagsl = -1;
5754 static int hf_bit8l1flagsl = -1;
5755 static int hf_bit9l1flagsl = -1;
5756 static int hf_bit10l1flagsl = -1;
5757 static int hf_bit11l1flagsl = -1;
5758 static int hf_bit12l1flagsl = -1;
5759 static int hf_bit13l1flagsl = -1;
5760 static int hf_bit14l1flagsl = -1;
5761 static int hf_bit15l1flagsl = -1;
5762 static int hf_bit16l1flagsl = -1;
5763 static int hf_bit1l1flagsh = -1;
5764 static int hf_bit2l1flagsh = -1;
5765 static int hf_bit3l1flagsh = -1;
5766 static int hf_bit4l1flagsh = -1;
5767 static int hf_bit5l1flagsh = -1;
5768 static int hf_bit6l1flagsh = -1;
5769 static int hf_bit7l1flagsh = -1;
5770 static int hf_bit8l1flagsh = -1;
5771 static int hf_bit9l1flagsh = -1;
5772 static int hf_bit10l1flagsh = -1;
5773 static int hf_bit11l1flagsh = -1;
5774 static int hf_bit12l1flagsh = -1;
5775 static int hf_bit13l1flagsh = -1;
5776 static int hf_bit14l1flagsh = -1;
5777 static int hf_bit15l1flagsh = -1;
5778 static int hf_bit16l1flagsh = -1;
5779 static int hf_nds_tree_name = -1;
5780 static int hf_nds_reply_error = -1;
5781 static int hf_nds_net = -1;
5782 static int hf_nds_node = -1;
5783 static int hf_nds_socket = -1;
5784 static int hf_add_ref_ip = -1;
5785 static int hf_add_ref_udp = -1;                                                     
5786 static int hf_add_ref_tcp = -1;
5787 static int hf_referral_record = -1;
5788 static int hf_referral_addcount = -1;
5789 static int hf_nds_port = -1;
5790 static int hf_mv_string = -1;
5791 static int hf_nds_syntax = -1;
5792 static int hf_value_string = -1;
5793 static int hf_nds_buffer_size = -1;
5794 static int hf_nds_ver = -1;
5795 static int hf_nds_nflags = -1;
5796 static int hf_nds_scope = -1;
5797 static int hf_nds_name = -1;
5798 static int hf_nds_comm_trans = -1;
5799 static int hf_nds_tree_trans = -1;
5800 static int hf_nds_iteration = -1;
5801 static int hf_nds_eid = -1;
5802 static int hf_nds_info_type = -1;
5803 static int hf_nds_all_attr = -1;
5804 static int hf_nds_req_flags = -1;
5805 static int hf_nds_attr = -1;
5806 static int hf_nds_crc = -1;
5807 static int hf_nds_referrals = -1;
5808 static int hf_nds_result_flags = -1;
5809 static int hf_nds_tag_string = -1;
5810 static int hf_value_bytes = -1;
5811 static int hf_replica_type = -1;
5812 static int hf_replica_state = -1;
5813 static int hf_replica_number = -1;
5814 static int hf_min_nds_ver = -1;
5815 static int hf_nds_ver_include = -1;
5816 static int hf_nds_ver_exclude = -1;
5817 static int hf_nds_es = -1;
5818 static int hf_es_type = -1;
5819 static int hf_delim_string = -1;
5820 static int hf_rdn_string = -1;
5821 static int hf_nds_revent = -1;
5822 static int hf_nds_rnum = -1; 
5823 static int hf_nds_name_type = -1;
5824 static int hf_nds_rflags = -1;
5825 static int hf_nds_eflags = -1;
5826 static int hf_nds_depth = -1;
5827 static int hf_nds_class_def_type = -1;
5828 static int hf_nds_classes = -1;
5829 static int hf_nds_return_all_classes = -1;
5830 static int hf_nds_stream_flags = -1;
5831 static int hf_nds_stream_name = -1;
5832 static int hf_nds_file_handle = -1;
5833 static int hf_nds_file_size = -1;
5834 static int hf_nds_dn_output_type = -1;
5835 static int hf_nds_nested_output_type = -1;
5836 static int hf_nds_output_delimiter = -1;
5837 static int hf_nds_output_entry_specifier = -1;
5838 static int hf_es_value = -1;
5839 static int hf_es_rdn_count = -1;
5840 static int hf_nds_replica_num = -1;
5841 static int hf_nds_event_num = -1;
5842 static int hf_es_seconds = -1;
5843 static int hf_nds_compare_results = -1;
5844 static int hf_nds_parent = -1;
5845 static int hf_nds_name_filter = -1;
5846 static int hf_nds_class_filter = -1;
5847 static int hf_nds_time_filter = -1;
5848 static int hf_nds_partition_root_id = -1;
5849 static int hf_nds_replicas = -1;
5850 static int hf_nds_purge = -1;
5851 static int hf_nds_local_partition = -1;
5852 static int hf_partition_busy = -1;
5853 static int hf_nds_number_of_changes = -1;
5854 static int hf_sub_count = -1;
5855 static int hf_nds_revision = -1;
5856 static int hf_nds_base_class = -1;
5857 static int hf_nds_relative_dn = -1;
5858 static int hf_nds_root_dn = -1;
5859 static int hf_nds_parent_dn = -1;
5860 static int hf_deref_base = -1;
5861 static int hf_nds_entry_info = -1;
5862 static int hf_nds_base = -1;
5863 static int hf_nds_privileges = -1;
5864 static int hf_nds_vflags = -1;
5865 static int hf_nds_value_len = -1;
5866 static int hf_nds_cflags = -1;
5867 static int hf_nds_acflags = -1;
5868 static int hf_nds_asn1 = -1;
5869 static int hf_nds_upper = -1;
5870 static int hf_nds_lower = -1;
5871 static int hf_nds_trustee_dn = -1;
5872 static int hf_nds_attribute_dn = -1;
5873 static int hf_nds_acl_add = -1;
5874 static int hf_nds_acl_del = -1;
5875 static int hf_nds_att_add = -1;
5876 static int hf_nds_att_del = -1;
5877 static int hf_nds_keep = -1;
5878 static int hf_nds_new_rdn = -1;
5879 static int hf_nds_time_delay = -1;
5880 static int hf_nds_root_name = -1;
5881 static int hf_nds_new_part_id = -1;
5882 static int hf_nds_child_part_id = -1;
5883 static int hf_nds_master_part_id = -1;
5884 static int hf_nds_target_name = -1;
5885 static int hf_nds_super = -1;
5886 static int hf_bit1pingflags2 = -1;
5887 static int hf_bit2pingflags2 = -1;
5888 static int hf_bit3pingflags2 = -1;
5889 static int hf_bit4pingflags2 = -1;
5890 static int hf_bit5pingflags2 = -1;
5891 static int hf_bit6pingflags2 = -1;
5892 static int hf_bit7pingflags2 = -1;
5893 static int hf_bit8pingflags2 = -1;
5894 static int hf_bit9pingflags2 = -1;
5895 static int hf_bit10pingflags2 = -1;
5896 static int hf_bit11pingflags2 = -1;
5897 static int hf_bit12pingflags2 = -1;
5898 static int hf_bit13pingflags2 = -1;
5899 static int hf_bit14pingflags2 = -1;
5900 static int hf_bit15pingflags2 = -1;
5901 static int hf_bit16pingflags2 = -1;
5902 static int hf_bit1pingflags1 = -1;
5903 static int hf_bit2pingflags1 = -1;
5904 static int hf_bit3pingflags1 = -1;
5905 static int hf_bit4pingflags1 = -1;
5906 static int hf_bit5pingflags1 = -1;
5907 static int hf_bit6pingflags1 = -1;
5908 static int hf_bit7pingflags1 = -1;
5909 static int hf_bit8pingflags1 = -1;
5910 static int hf_bit9pingflags1 = -1;
5911 static int hf_bit10pingflags1 = -1;
5912 static int hf_bit11pingflags1 = -1;
5913 static int hf_bit12pingflags1 = -1;
5914 static int hf_bit13pingflags1 = -1;
5915 static int hf_bit14pingflags1 = -1;
5916 static int hf_bit15pingflags1 = -1;
5917 static int hf_bit16pingflags1 = -1;
5918 static int hf_bit1pingpflags1 = -1;
5919 static int hf_bit2pingpflags1 = -1;
5920 static int hf_bit3pingpflags1 = -1;
5921 static int hf_bit4pingpflags1 = -1;
5922 static int hf_bit5pingpflags1 = -1;
5923 static int hf_bit6pingpflags1 = -1;
5924 static int hf_bit7pingpflags1 = -1;
5925 static int hf_bit8pingpflags1 = -1;
5926 static int hf_bit9pingpflags1 = -1;
5927 static int hf_bit10pingpflags1 = -1;
5928 static int hf_bit11pingpflags1 = -1;
5929 static int hf_bit12pingpflags1 = -1;
5930 static int hf_bit13pingpflags1 = -1;
5931 static int hf_bit14pingpflags1 = -1;
5932 static int hf_bit15pingpflags1 = -1;
5933 static int hf_bit16pingpflags1 = -1;
5934 static int hf_bit1pingvflags1 = -1;
5935 static int hf_bit2pingvflags1 = -1;
5936 static int hf_bit3pingvflags1 = -1;
5937 static int hf_bit4pingvflags1 = -1;
5938 static int hf_bit5pingvflags1 = -1;
5939 static int hf_bit6pingvflags1 = -1;
5940 static int hf_bit7pingvflags1 = -1;
5941 static int hf_bit8pingvflags1 = -1;
5942 static int hf_bit9pingvflags1 = -1;
5943 static int hf_bit10pingvflags1 = -1;
5944 static int hf_bit11pingvflags1 = -1;
5945 static int hf_bit12pingvflags1 = -1;
5946 static int hf_bit13pingvflags1 = -1;
5947 static int hf_bit14pingvflags1 = -1;
5948 static int hf_bit15pingvflags1 = -1;
5949 static int hf_bit16pingvflags1 = -1;
5950 static int hf_nds_letter_ver = -1;
5951 static int hf_nds_os_ver = -1;
5952 static int hf_nds_lic_flags = -1;
5953 static int hf_nds_ds_time = -1;
5954 static int hf_nds_ping_version = -1;
5955
5956
5957         """
5958                
5959         # Look at all packet types in the packets collection, and cull information
5960         # from them.
5961         errors_used_list = []
5962         errors_used_hash = {}
5963         groups_used_list = []
5964         groups_used_hash = {}
5965         variables_used_hash = {}
5966         structs_used_hash = {}
5967
5968         for pkt in packets:
5969                 # Determine which error codes are used.
5970                 codes = pkt.CompletionCodes()
5971                 for code in codes.Records():
5972                         if not errors_used_hash.has_key(code):
5973                                 errors_used_hash[code] = len(errors_used_list)
5974                                 errors_used_list.append(code)
5975
5976                 # Determine which groups are used.
5977                 group = pkt.Group()
5978                 if not groups_used_hash.has_key(group):
5979                         groups_used_hash[group] = len(groups_used_list)
5980                         groups_used_list.append(group)
5981
5982                 # Determine which variables are used.
5983                 vars = pkt.Variables()
5984                 ExamineVars(vars, structs_used_hash, variables_used_hash)
5985
5986
5987         # Print the hf variable declarations
5988         sorted_vars = variables_used_hash.values()
5989         sorted_vars.sort()
5990         for var in sorted_vars:
5991                 print "static int " + var.HFName() + " = -1;"
5992
5993
5994         # Print the value_string's
5995         for var in sorted_vars:
5996                 if isinstance(var, val_string):
5997                         print ""
5998                         print var.Code()
5999                            
6000         # Determine which error codes are not used
6001         errors_not_used = {}
6002         # Copy the keys from the error list...
6003         for code in errors.keys():
6004                 errors_not_used[code] = 1
6005         # ... and remove the ones that *were* used.
6006         for code in errors_used_list:
6007                 del errors_not_used[code]
6008
6009         # Print a remark showing errors not used
6010         list_errors_not_used = errors_not_used.keys()
6011         list_errors_not_used.sort()
6012         for code in list_errors_not_used:
6013                 print "/* Error 0x%04x not used: %s */" % (code, errors[code])
6014         print "\n"
6015
6016         # Print the errors table
6017         print "/* Error strings. */"
6018         print "static const char *ncp_errors[] = {"
6019         for code in errors_used_list:
6020                 print '\t/* %02d (0x%04x) */ "%s",' % (errors_used_hash[code], code, errors[code])
6021         print "};\n"
6022
6023
6024
6025
6026         # Determine which groups are not used
6027         groups_not_used = {}
6028         # Copy the keys from the group list...
6029         for group in groups.keys():
6030                 groups_not_used[group] = 1
6031         # ... and remove the ones that *were* used.
6032         for group in groups_used_list:
6033                 del groups_not_used[group]
6034
6035         # Print a remark showing groups not used
6036         list_groups_not_used = groups_not_used.keys()
6037         list_groups_not_used.sort()
6038         for group in list_groups_not_used:
6039                 print "/* Group not used: %s = %s */" % (group, groups[group])
6040         print "\n"
6041
6042         # Print the groups table
6043         print "/* Group strings. */"
6044         print "static const char *ncp_groups[] = {"
6045         for group in groups_used_list:
6046                 print '\t/* %02d (%s) */ "%s",' % (groups_used_hash[group], group, groups[group])
6047         print "};\n"
6048
6049         # Print the group macros
6050         for group in groups_used_list:
6051                 name = string.upper(group)
6052                 print "#define NCP_GROUP_%s\t%d" % (name, groups_used_hash[group])
6053         print "\n"
6054
6055
6056         # Print the conditional_records for all Request Conditions.
6057         num = 0
6058         print "/* Request-Condition dfilter records. The NULL pointer"
6059         print "   is replaced by a pointer to the created dfilter_t. */"
6060         if len(global_req_cond) == 0:
6061                 print "static conditional_record req_conds = NULL;"
6062         else:
6063                 print "static conditional_record req_conds[] = {"
6064                 for req_cond in global_req_cond.keys():
6065                         print "\t{ \"%s\", NULL }," % (req_cond,)
6066                         global_req_cond[req_cond] = num
6067                         num = num + 1
6068                 print "};"
6069         print "#define NUM_REQ_CONDS %d" % (num,)
6070         print "#define NO_REQ_COND   NUM_REQ_CONDS\n\n"
6071
6072
6073
6074         # Print PTVC's for bitfields
6075         ett_list = []
6076         print "/* PTVC records for bit-fields. */"
6077         for var in sorted_vars:
6078                 if isinstance(var, bitfield):
6079                         sub_vars_ptvc = var.SubVariablesPTVC()
6080                         print "/* %s */" % (sub_vars_ptvc.Name())
6081                         print sub_vars_ptvc.Code()
6082                         ett_list.append(sub_vars_ptvc.ETTName())
6083
6084
6085         # Print the PTVC's for structures
6086         print "/* PTVC records for structs. */"
6087         # Sort them
6088         svhash = {}
6089         for svar in structs_used_hash.values():
6090                 svhash[svar.HFName()] = svar
6091                 if svar.descr:
6092                         ett_list.append(svar.ETTName())
6093
6094         struct_vars = svhash.keys()
6095         struct_vars.sort()
6096         for varname in struct_vars:
6097                 var = svhash[varname]
6098                 print var.Code()
6099
6100         ett_list.sort()
6101
6102         # Print regular PTVC's
6103         print "/* PTVC records. These are re-used to save space. */"
6104         for ptvc in ptvc_lists.Members():
6105                 if not ptvc.Null() and not ptvc.Empty():
6106                         print ptvc.Code()
6107
6108         # Print error_equivalency tables
6109         print "/* Error-Equivalency Tables. These are re-used to save space. */"
6110         for compcodes in compcode_lists.Members():
6111                 errors = compcodes.Records()
6112                 # Make sure the record for error = 0x00 comes last.
6113                 print "static const error_equivalency %s[] = {" % (compcodes.Name())
6114                 for error in errors:
6115                         error_in_packet = error >> 8;
6116                         ncp_error_index = errors_used_hash[error]
6117                         print "\t{ 0x%02x, %d }, /* 0x%04x */" % (error_in_packet,
6118                                 ncp_error_index, error)
6119                 print "\t{ 0x00, -1 }\n};\n"
6120
6121
6122
6123         # Print integer arrays for all ncp_records that need
6124         # a list of req_cond_indexes. Do it "uniquely" to save space;
6125         # if multiple packets share the same set of req_cond's,
6126         # then they'll share the same integer array
6127         print "/* Request Condition Indexes */"
6128         # First, make them unique
6129         req_cond_collection = UniqueCollection("req_cond_collection")
6130         for pkt in packets:
6131                 req_conds = pkt.CalculateReqConds()
6132                 if req_conds:
6133                         unique_list = req_cond_collection.Add(req_conds)
6134                         pkt.SetReqConds(unique_list)
6135                 else:
6136                         pkt.SetReqConds(None)
6137
6138         # Print them
6139         for req_cond in req_cond_collection.Members():
6140                 print "static const int %s[] = {" % (req_cond.Name(),)
6141                 print "\t",
6142                 vals = []
6143                 for text in req_cond.Records():
6144                         vals.append(global_req_cond[text])
6145                 vals.sort()
6146                 for val in vals:
6147                         print "%s, " % (val,),
6148
6149                 print "-1 };"
6150                 print ""    
6151
6152
6153
6154         # Functions without length parameter
6155         funcs_without_length = {}
6156
6157         # Print info string structures
6158         print "/* Info Strings */"
6159         for pkt in packets:
6160                 if pkt.req_info_str:
6161                         name = pkt.InfoStrName() + "_req"
6162                         var = pkt.req_info_str[0]
6163                         print "static const info_string_t %s = {" % (name,)
6164                         print "\t&%s," % (var.HFName(),)
6165                         print '\t"%s",' % (pkt.req_info_str[1],)
6166                         print '\t"%s"' % (pkt.req_info_str[2],)
6167                         print "};\n"
6168
6169
6170
6171         # Print ncp_record packet records
6172         print "#define SUBFUNC_WITH_LENGTH      0x02"
6173         print "#define SUBFUNC_NO_LENGTH        0x01"
6174         print "#define NO_SUBFUNC               0x00"
6175
6176         print "/* ncp_record structs for packets */"
6177         print "static const ncp_record ncp_packets[] = {" 
6178         for pkt in packets:
6179                 if pkt.HasSubFunction():
6180                         func = pkt.FunctionCode('high')
6181                         if pkt.HasLength():
6182                                 subfunc_string = "SUBFUNC_WITH_LENGTH"
6183                                 # Ensure that the function either has a length param or not
6184                                 if funcs_without_length.has_key(func):
6185                                         sys.exit("Function 0x%04x sometimes has length param, sometimes not." \
6186                                                 % (pkt.FunctionCode(),))
6187                         else:
6188                                 subfunc_string = "SUBFUNC_NO_LENGTH"
6189                                 funcs_without_length[func] = 1
6190                 else:
6191                         subfunc_string = "NO_SUBFUNC"
6192                 print '\t{ 0x%02x, 0x%02x, %s, "%s",' % (pkt.FunctionCode('high'),
6193                         pkt.FunctionCode('low'), subfunc_string, pkt.Description()),
6194
6195                 print '\t%d /* %s */,' % (groups_used_hash[pkt.Group()], pkt.Group())
6196
6197                 ptvc = pkt.PTVCRequest()
6198                 if not ptvc.Null() and not ptvc.Empty():
6199                         ptvc_request = ptvc.Name()
6200                 else:
6201                         ptvc_request = 'NULL'
6202
6203                 ptvc = pkt.PTVCReply()
6204                 if not ptvc.Null() and not ptvc.Empty():
6205                         ptvc_reply = ptvc.Name()
6206                 else:
6207                         ptvc_reply = 'NULL'
6208
6209                 errors = pkt.CompletionCodes()
6210
6211                 req_conds_obj = pkt.GetReqConds()
6212                 if req_conds_obj:
6213                         req_conds = req_conds_obj.Name()
6214                 else:
6215                         req_conds = "NULL"
6216
6217                 if not req_conds_obj:
6218                         req_cond_size = "NO_REQ_COND_SIZE"
6219                 else:
6220                         req_cond_size = pkt.ReqCondSize()
6221                         if req_cond_size == None:
6222                                 msg.write("NCP packet %s nees a ReqCondSize*() call\n" \
6223                                         % (pkt.CName(),))
6224                                 sys.exit(1)
6225                 
6226                 if pkt.req_info_str:
6227                         req_info_str = "&" + pkt.InfoStrName() + "_req"
6228                 else:
6229                         req_info_str = "NULL"
6230
6231                 print '\t\t%s, %s, %s, %s, %s, %s },\n' % \
6232                         (ptvc_request, ptvc_reply, errors.Name(), req_conds,
6233                         req_cond_size, req_info_str)
6234
6235         print '\t{ 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NO_REQ_COND_SIZE, NULL }'
6236         print "};\n"
6237
6238         print "/* ncp funcs that require a subfunc */"
6239         print "static const guint8 ncp_func_requires_subfunc[] = {"
6240         hi_seen = {}
6241         for pkt in packets:
6242                 if pkt.HasSubFunction():
6243                         hi_func = pkt.FunctionCode('high')
6244                         if not hi_seen.has_key(hi_func):
6245                                 print "\t0x%02x," % (hi_func)
6246                                 hi_seen[hi_func] = 1
6247         print "\t0"
6248         print "};\n"
6249
6250
6251         print "/* ncp funcs that have no length parameter */"
6252         print "static const guint8 ncp_func_has_no_length_parameter[] = {"
6253         funcs = funcs_without_length.keys()
6254         funcs.sort()
6255         for func in funcs:
6256                 print "\t0x%02x," % (func,)
6257         print "\t0"
6258         print "};\n"
6259
6260         # final_registration_ncp2222()
6261         print """
6262 void
6263 final_registration_ncp2222(void)
6264 {
6265         int i;
6266         """
6267
6268         # Create dfilter_t's for conditional_record's  
6269         print """
6270         for (i = 0; i < NUM_REQ_CONDS; i++) {
6271                 if (!dfilter_compile((const gchar*)req_conds[i].dfilter_text,
6272                         &req_conds[i].dfilter)) {
6273                         g_message("NCP dissector failed to compiler dfilter: %s\\n",
6274                         req_conds[i].dfilter_text);
6275                         g_assert_not_reached();
6276                 }
6277         }
6278 }
6279         """
6280
6281         # proto_register_ncp2222()
6282         print """
6283 static const value_string ncp_nds_verb_vals[] = {
6284         { 1, "Resolve Name" },
6285         { 2, "Read Entry Information" },
6286         { 3, "Read" },
6287         { 4, "Compare" },
6288         { 5, "List" },
6289         { 6, "Search Entries" },
6290         { 7, "Add Entry" },
6291         { 8, "Remove Entry" },
6292         { 9, "Modify Entry" },
6293         { 10, "Modify RDN" },
6294         { 11, "Create Attribute" },
6295         { 12, "Read Attribute Definition" },
6296         { 13, "Remove Attribute Definition" },
6297         { 14, "Define Class" },
6298         { 15, "Read Class Definition" },
6299         { 16, "Modify Class Definition" },
6300         { 17, "Remove Class Definition" },
6301         { 18, "List Containable Classes" },
6302         { 19, "Get Effective Rights" },
6303         { 20, "Add Partition" },
6304         { 21, "Remove Partition" },
6305         { 22, "List Partitions" },
6306         { 23, "Split Partition" },
6307         { 24, "Join Partitions" },
6308         { 25, "Add Replica" },
6309         { 26, "Remove Replica" },
6310         { 27, "Open Stream" },
6311         { 28, "Search Filter" },
6312         { 29, "Create Subordinate Reference" },
6313         { 30, "Link Replica" },
6314         { 31, "Change Replica Type" },
6315         { 32, "Start Update Schema" },
6316         { 33, "End Update Schema" },
6317         { 34, "Update Schema" },
6318         { 35, "Start Update Replica" },
6319         { 36, "End Update Replica" },
6320         { 37, "Update Replica" },
6321         { 38, "Synchronize Partition" },
6322         { 39, "Synchronize Schema" },
6323         { 40, "Read Syntaxes" },
6324         { 41, "Get Replica Root ID" },
6325         { 42, "Begin Move Entry" },
6326         { 43, "Finish Move Entry" },
6327         { 44, "Release Moved Entry" },
6328         { 45, "Backup Entry" },
6329         { 46, "Restore Entry" },
6330         { 47, "Save DIB" },
6331         { 50, "Close Iteration" },
6332         { 51, "Unused" },
6333         { 52, "Audit Skulking" },
6334         { 53, "Get Server Address" },
6335         { 54, "Set Keys" },
6336         { 55, "Change Password" },
6337         { 56, "Verify Password" },
6338         { 57, "Begin Login" },
6339         { 58, "Finish Login" },
6340         { 59, "Begin Authentication" },
6341         { 60, "Finish Authentication" },
6342         { 61, "Logout" },
6343         { 62, "Repair Ring" },
6344         { 63, "Repair Timestamps" },
6345         { 64, "Create Back Link" },
6346         { 65, "Delete External Reference" },
6347         { 66, "Rename External Reference" },
6348         { 67, "Create Directory Entry" },
6349         { 68, "Remove Directory Entry" },
6350         { 69, "Designate New Master" },
6351         { 70, "Change Tree Name" },
6352         { 71, "Partition Entry Count" },
6353         { 72, "Check Login Restrictions" },
6354         { 73, "Start Join" },
6355         { 74, "Low Level Split" },
6356         { 75, "Low Level Join" },
6357         { 76, "Abort Low Level Join" },
6358         { 77, "Get All Servers" },
6359         { 255, "EDirectory Call" },
6360         { 0,  NULL }
6361 };
6362
6363 void
6364 proto_register_ncp2222(void)
6365 {
6366
6367         static hf_register_info hf[] = {
6368         { &hf_ncp_func,
6369         { "Function", "ncp.func", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6370
6371         { &hf_ncp_length,
6372         { "Packet Length", "ncp.length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
6373
6374         { &hf_ncp_subfunc,
6375         { "SubFunction", "ncp.subfunc", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6376
6377         { &hf_ncp_completion_code,
6378         { "Completion Code", "ncp.completion_code", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6379
6380         { &hf_ncp_fragment_handle,
6381         { "NDS Fragment Handle", "ncp.ndsfrag", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6382         
6383         { &hf_ncp_fragment_size,
6384         { "NDS Fragment Size", "ncp.ndsfragsize", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6385
6386         { &hf_ncp_message_size,
6387         { "Message Size", "ncp.ndsmessagesize", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6388         
6389         { &hf_ncp_nds_flag,
6390         { "Flags", "ncp.ndsflag", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6391         
6392         { &hf_ncp_nds_verb,      
6393         { "NDS Verb", "ncp.ndsverb", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6394         
6395         { &hf_ping_version,
6396         { "NDS Version", "ncp.ping_version", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
6397         
6398         { &hf_nds_version,
6399         { "NDS Version", "ncp.nds_version", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6400         
6401         { &hf_nds_tree_name,                             
6402         { "Tree Name", "ncp.nds_tree_name", FT_STRING, BASE_DEC, NULL, 0x0, "", HFILL }},
6403                         
6404         /*
6405          * XXX - the page at
6406          *
6407          *      http://www.odyssea.com/whats_new/tcpipnet/tcpipnet.html
6408          *
6409          * says of the connection status "The Connection Code field may
6410          * contain values that indicate the status of the client host to
6411          * server connection.  A value of 1 in the fourth bit of this data
6412          * byte indicates that the server is unavailable (server was
6413          * downed).
6414          *
6415          * The page at
6416          *
6417          *      http://www.unm.edu/~network/presentations/course/appendix/appendix_f/tsld088.htm
6418          *
6419          * says that bit 0 is "bad service", bit 2 is "no connection
6420          * available", bit 4 is "service down", and bit 6 is "server
6421          * has a broadcast message waiting for the client".
6422          *
6423          * Should it be displayed in hex, and should those bits (and any
6424          * other bits with significance) be displayed as bitfields
6425          * underneath it?
6426          */
6427         { &hf_ncp_connection_status,
6428         { "Connection Status", "ncp.connection_status", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }},
6429
6430         { &hf_ncp_req_frame_num,
6431         { "Response to Request in Frame Number", "ncp.req_frame_num", FT_UINT32, BASE_DEC,
6432                 NULL, 0x0, "", HFILL }},
6433         
6434         { &hf_ncp_req_frame_time,
6435         { "Time from Request", "ncp.time", FT_RELATIVE_TIME, BASE_NONE,
6436                 NULL, 0x0, "Time between request and response in seconds", HFILL }},
6437         
6438         { &hf_nds_flags, 
6439         { "NDS Return Flags", "ncp.nds_flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6440         
6441        
6442         { &hf_nds_reply_depth,
6443         { "Distance from Root", "ncp.ndsdepth", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6444         
6445         { &hf_nds_reply_rev,
6446         { "NDS Revision", "ncp.ndsrev", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6447         
6448         { &hf_nds_reply_flags,
6449         { "Flags", "ncp.ndsflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6450         
6451         { &hf_nds_p1type, 
6452         { "NDS Parameter Type", "ncp.p1type", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }},
6453         
6454         { &hf_nds_uint32value, 
6455         { "NDS Value", "ncp.uint32value", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6456
6457         { &hf_nds_bit1, 
6458         { "Typeless", "ncp.nds_bit1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6459
6460         { &hf_nds_bit2, 
6461         { "All Containers", "ncp.nds_bit2", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6462                      
6463         { &hf_nds_bit3, 
6464         { "Slashed", "ncp.nds_bit3", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6465         
6466         { &hf_nds_bit4, 
6467         { "Dotted", "ncp.nds_bit4", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6468         
6469         { &hf_nds_bit5, 
6470         { "Tuned", "ncp.nds_bit5", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6471         
6472         { &hf_nds_bit6, 
6473         { "Not Defined", "ncp.nds_bit6", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6474         
6475         { &hf_nds_bit7, 
6476         { "Not Defined", "ncp.nds_bit7", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6477         
6478         { &hf_nds_bit8, 
6479         { "Not Defined", "ncp.nds_bit8", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6480         
6481         { &hf_nds_bit9, 
6482         { "Not Defined", "ncp.nds_bit9", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6483         
6484         { &hf_nds_bit10, 
6485         { "Not Defined", "ncp.nds_bit10", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6486         
6487         { &hf_nds_bit11, 
6488         { "Not Defined", "ncp.nds_bit11", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6489         
6490         { &hf_nds_bit12, 
6491         { "Not Defined", "ncp.nds_bit12", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6492         
6493         { &hf_nds_bit13, 
6494         { "Not Defined", "ncp.nds_bit13", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6495         
6496         { &hf_nds_bit14, 
6497         { "Not Defined", "ncp.nds_bit14", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6498         
6499         { &hf_nds_bit15, 
6500         { "Not Defined", "ncp.nds_bit15", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6501         
6502         { &hf_nds_bit16, 
6503         { "Not Defined", "ncp.nds_bit16", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6504         
6505         { &hf_bit1outflags, 
6506         { "Output Flags", "ncp.bit1outflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6507
6508         { &hf_bit2outflags, 
6509         { "Entry ID", "ncp.bit2outflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6510                      
6511         { &hf_bit3outflags, 
6512         { "Replica State", "ncp.bit3outflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6513         
6514         { &hf_bit4outflags, 
6515         { "Modification Timestamp", "ncp.bit4outflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6516         
6517         { &hf_bit5outflags, 
6518         { "Purge Time", "ncp.bit5outflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6519         
6520         { &hf_bit6outflags, 
6521         { "Local Partition ID", "ncp.bit6outflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6522         
6523         { &hf_bit7outflags, 
6524         { "Distinguished Name", "ncp.bit7outflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6525         
6526         { &hf_bit8outflags, 
6527         { "Replica Type", "ncp.bit8outflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6528         
6529         { &hf_bit9outflags, 
6530         { "Partition Busy", "ncp.bit9outflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6531         
6532         { &hf_bit10outflags, 
6533         { "Not Defined", "ncp.bit10outflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6534         
6535         { &hf_bit11outflags, 
6536         { "Not Defined", "ncp.bit11outflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6537         
6538         { &hf_bit12outflags, 
6539         { "Not Defined", "ncp.bit12outflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6540         
6541         { &hf_bit13outflags, 
6542         { "Not Defined", "ncp.bit13outflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6543         
6544         { &hf_bit14outflags, 
6545         { "Not Defined", "ncp.bit14outflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6546         
6547         { &hf_bit15outflags, 
6548         { "Not Defined", "ncp.bit15outflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6549         
6550         { &hf_bit16outflags, 
6551         { "Not Defined", "ncp.bit16outflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6552         
6553         { &hf_bit1nflags, 
6554         { "Entry ID", "ncp.bit1nflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6555
6556         { &hf_bit2nflags, 
6557         { "Readable", "ncp.bit2nflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6558                      
6559         { &hf_bit3nflags, 
6560         { "Writeable", "ncp.bit3nflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6561         
6562         { &hf_bit4nflags, 
6563         { "Master", "ncp.bit4nflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6564         
6565         { &hf_bit5nflags, 
6566         { "Create ID", "ncp.bit5nflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6567         
6568         { &hf_bit6nflags, 
6569         { "Walk Tree", "ncp.bit6nflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6570         
6571         { &hf_bit7nflags, 
6572         { "Dereference Alias", "ncp.bit7nflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6573         
6574         { &hf_bit8nflags, 
6575         { "Not Defined", "ncp.bit8nflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6576         
6577         { &hf_bit9nflags, 
6578         { "Not Defined", "ncp.bit9nflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6579         
6580         { &hf_bit10nflags, 
6581         { "Not Defined", "ncp.bit10nflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6582         
6583         { &hf_bit11nflags, 
6584         { "Not Defined", "ncp.bit11nflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6585         
6586         { &hf_bit12nflags, 
6587         { "Not Defined", "ncp.bit12nflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6588         
6589         { &hf_bit13nflags, 
6590         { "Not Defined", "ncp.bit13nflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6591         
6592         { &hf_bit14nflags, 
6593         { "Prefer Referrals", "ncp.bit14nflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6594         
6595         { &hf_bit15nflags, 
6596         { "Prefer Only Referrals", "ncp.bit15nflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6597         
6598         { &hf_bit16nflags, 
6599         { "Not Defined", "ncp.bit16nflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6600         
6601         { &hf_bit1rflags, 
6602         { "Typeless", "ncp.bit1rflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6603
6604         { &hf_bit2rflags, 
6605         { "Slashed", "ncp.bit2rflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6606                      
6607         { &hf_bit3rflags, 
6608         { "Dotted", "ncp.bit3rflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6609         
6610         { &hf_bit4rflags, 
6611         { "Tuned", "ncp.bit4rflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6612         
6613         { &hf_bit5rflags, 
6614         { "Not Defined", "ncp.bit5rflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6615         
6616         { &hf_bit6rflags, 
6617         { "Not Defined", "ncp.bit6rflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6618         
6619         { &hf_bit7rflags, 
6620         { "Not Defined", "ncp.bit7rflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6621         
6622         { &hf_bit8rflags, 
6623         { "Not Defined", "ncp.bit8rflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6624         
6625         { &hf_bit9rflags, 
6626         { "Not Defined", "ncp.bit9rflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6627         
6628         { &hf_bit10rflags, 
6629         { "Not Defined", "ncp.bit10rflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6630         
6631         { &hf_bit11rflags, 
6632         { "Not Defined", "ncp.bit11rflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6633         
6634         { &hf_bit12rflags, 
6635         { "Not Defined", "ncp.bit12rflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6636         
6637         { &hf_bit13rflags, 
6638         { "Not Defined", "ncp.bit13rflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6639         
6640         { &hf_bit14rflags, 
6641         { "Not Defined", "ncp.bit14rflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6642         
6643         { &hf_bit15rflags, 
6644         { "Not Defined", "ncp.bit15rflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6645         
6646         { &hf_bit16rflags, 
6647         { "Not Defined", "ncp.bit16rflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6648         
6649         { &hf_bit1eflags, 
6650         { "Alias Entry", "ncp.bit1eflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6651
6652         { &hf_bit2eflags, 
6653         { "Partition Root", "ncp.bit2eflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6654                      
6655         { &hf_bit3eflags, 
6656         { "Container Entry", "ncp.bit3eflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6657         
6658         { &hf_bit4eflags, 
6659         { "Container Alias", "ncp.bit4eflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6660         
6661         { &hf_bit5eflags, 
6662         { "Matches List Filter", "ncp.bit5eflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6663         
6664         { &hf_bit6eflags, 
6665         { "Reference Entry", "ncp.bit6eflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6666         
6667         { &hf_bit7eflags, 
6668         { "40x Reference Entry", "ncp.bit7eflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6669         
6670         { &hf_bit8eflags, 
6671         { "Back Linked", "ncp.bit8eflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6672         
6673         { &hf_bit9eflags, 
6674         { "New Entry", "ncp.bit9eflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6675         
6676         { &hf_bit10eflags, 
6677         { "Temporary Reference", "ncp.bit10eflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6678         
6679         { &hf_bit11eflags, 
6680         { "Audited", "ncp.bit11eflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6681         
6682         { &hf_bit12eflags, 
6683         { "Entry Not Present", "ncp.bit12eflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6684         
6685         { &hf_bit13eflags, 
6686         { "Entry Verify CTS", "ncp.bit13eflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6687         
6688         { &hf_bit14eflags, 
6689         { "Entry Damaged", "ncp.bit14eflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6690         
6691         { &hf_bit15eflags, 
6692         { "Not Defined", "ncp.bit15rflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6693         
6694         { &hf_bit16eflags, 
6695         { "Not Defined", "ncp.bit16rflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6696
6697         { &hf_bit1infoflagsl, 
6698         { "Output Flags", "ncp.bit1infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6699
6700         { &hf_bit2infoflagsl, 
6701         { "Entry ID", "ncp.bit2infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6702                      
6703         { &hf_bit3infoflagsl, 
6704         { "Entry Flags", "ncp.bit3infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6705         
6706         { &hf_bit4infoflagsl, 
6707         { "Subordinate Count", "ncp.bit4infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6708         
6709         { &hf_bit5infoflagsl, 
6710         { "Modification Time", "ncp.bit5infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6711         
6712         { &hf_bit6infoflagsl, 
6713         { "Modification Timestamp", "ncp.bit6infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6714         
6715         { &hf_bit7infoflagsl, 
6716         { "Creation Timestamp", "ncp.bit7infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6717         
6718         { &hf_bit8infoflagsl, 
6719         { "Partition Root ID", "ncp.bit8infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6720         
6721         { &hf_bit9infoflagsl, 
6722         { "Parent ID", "ncp.bit9infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6723         
6724         { &hf_bit10infoflagsl, 
6725         { "Revision Count", "ncp.bit10infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6726         
6727         { &hf_bit11infoflagsl, 
6728         { "Replica Type", "ncp.bit11infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6729         
6730         { &hf_bit12infoflagsl, 
6731         { "Base Class", "ncp.bit12infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6732         
6733         { &hf_bit13infoflagsl, 
6734         { "Relative Distinguished Name", "ncp.bit13infoflagsl", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6735         
6736         { &hf_bit14infoflagsl, 
6737         { "Distinguished Name", "ncp.bit14infoflagsl", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6738         
6739         { &hf_bit15infoflagsl, 
6740         { "Root Distinguished Name", "ncp.bit15infoflagsl", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6741         
6742         { &hf_bit16infoflagsl, 
6743         { "Parent Distinguished Name", "ncp.bit16infoflagsl", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6744
6745         { &hf_bit1infoflagsh, 
6746         { "Purge Time", "ncp.bit1infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6747
6748         { &hf_bit2infoflagsh, 
6749         { "Dereference Base Class", "ncp.bit2infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6750                      
6751         { &hf_bit3infoflagsh, 
6752         { "Not Defined", "ncp.bit3infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6753         
6754         { &hf_bit4infoflagsh, 
6755         { "Not Defined", "ncp.bit4infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6756         
6757         { &hf_bit5infoflagsh, 
6758         { "Not Defined", "ncp.bit5infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6759         
6760         { &hf_bit6infoflagsh, 
6761         { "Not Defined", "ncp.bit6infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6762         
6763         { &hf_bit7infoflagsh, 
6764         { "Not Defined", "ncp.bit7infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6765         
6766         { &hf_bit8infoflagsh, 
6767         { "Not Defined", "ncp.bit8infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6768         
6769         { &hf_bit9infoflagsh, 
6770         { "Not Defined", "ncp.bit9infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6771         
6772         { &hf_bit10infoflagsh, 
6773         { "Not Defined", "ncp.bit10infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6774         
6775         { &hf_bit11infoflagsh, 
6776         { "Not Defined", "ncp.bit11infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6777         
6778         { &hf_bit12infoflagsh, 
6779         { "Not Defined", "ncp.bit12infoflagshs", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6780         
6781         { &hf_bit13infoflagsh, 
6782         { "Not Defined", "ncp.bit13infoflagsh", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6783         
6784         { &hf_bit14infoflagsh, 
6785         { "Not Defined", "ncp.bit14infoflagsh", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6786         
6787         { &hf_bit15infoflagsh, 
6788         { "Not Defined", "ncp.bit15infoflagsh", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6789         
6790         { &hf_bit16infoflagsh, 
6791         { "Not Defined", "ncp.bit16infoflagsh", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6792         
6793         { &hf_bit1lflags, 
6794         { "List Typeless", "ncp.bit1lflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6795
6796         { &hf_bit2lflags, 
6797         { "List Containers", "ncp.bit2lflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6798                      
6799         { &hf_bit3lflags, 
6800         { "List Slashed", "ncp.bit3lflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6801         
6802         { &hf_bit4lflags, 
6803         { "List Dotted", "ncp.bit4lflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6804         
6805         { &hf_bit5lflags, 
6806         { "Dereference Alias", "ncp.bit5lflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6807         
6808         { &hf_bit6lflags, 
6809         { "List All Containers", "ncp.bit6lflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6810         
6811         { &hf_bit7lflags, 
6812         { "List Obsolete", "ncp.bit7lflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6813         
6814         { &hf_bit8lflags, 
6815         { "List Tuned Output", "ncp.bit8lflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6816         
6817         { &hf_bit9lflags, 
6818         { "List External Reference", "ncp.bit9lflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6819         
6820         { &hf_bit10lflags, 
6821         { "Not Defined", "ncp.bit10lflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6822         
6823         { &hf_bit11lflags, 
6824         { "Not Defined", "ncp.bit11lflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6825         
6826         { &hf_bit12lflags, 
6827         { "Not Defined", "ncp.bit12lflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6828         
6829         { &hf_bit13lflags, 
6830         { "Not Defined", "ncp.bit13lflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6831         
6832         { &hf_bit14lflags, 
6833         { "Not Defined", "ncp.bit14lflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6834         
6835         { &hf_bit15lflags, 
6836         { "Not Defined", "ncp.bit15lflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6837         
6838         { &hf_bit16lflags, 
6839         { "Not Defined", "ncp.bit16lflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6840         
6841         { &hf_bit1l1flagsl, 
6842         { "Output Flags", "ncp.bit1l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6843
6844         { &hf_bit2l1flagsl, 
6845         { "Entry ID", "ncp.bit2l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6846                      
6847         { &hf_bit3l1flagsl, 
6848         { "Replica State", "ncp.bit3l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6849         
6850         { &hf_bit4l1flagsl, 
6851         { "Modification Timestamp", "ncp.bit4l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6852         
6853         { &hf_bit5l1flagsl, 
6854         { "Purge Time", "ncp.bit5l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6855         
6856         { &hf_bit6l1flagsl, 
6857         { "Local Partition ID", "ncp.bit6l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6858         
6859         { &hf_bit7l1flagsl, 
6860         { "Distinguished Name", "ncp.bit7l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6861         
6862         { &hf_bit8l1flagsl, 
6863         { "Replica Type", "ncp.bit8l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6864         
6865         { &hf_bit9l1flagsl, 
6866         { "Partition Busy", "ncp.bit9l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6867         
6868         { &hf_bit10l1flagsl, 
6869         { "Not Defined", "ncp.bit10l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6870         
6871         { &hf_bit11l1flagsl, 
6872         { "Not Defined", "ncp.bit11l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6873         
6874         { &hf_bit12l1flagsl, 
6875         { "Not Defined", "ncp.bit12l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6876         
6877         { &hf_bit13l1flagsl, 
6878         { "Not Defined", "ncp.bit13l1flagsl", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6879         
6880         { &hf_bit14l1flagsl, 
6881         { "Not Defined", "ncp.bit14l1flagsl", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6882         
6883         { &hf_bit15l1flagsl, 
6884         { "Not Defined", "ncp.bit15l1flagsl", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6885         
6886         { &hf_bit16l1flagsl, 
6887         { "Not Defined", "ncp.bit16l1flagsl", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6888
6889         { &hf_bit1l1flagsh, 
6890         { "Not Defined", "ncp.bit1l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6891
6892         { &hf_bit2l1flagsh, 
6893         { "Not Defined", "ncp.bit2l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6894                      
6895         { &hf_bit3l1flagsh, 
6896         { "Not Defined", "ncp.bit3l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6897         
6898         { &hf_bit4l1flagsh, 
6899         { "Not Defined", "ncp.bit4l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6900         
6901         { &hf_bit5l1flagsh, 
6902         { "Not Defined", "ncp.bit5l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6903         
6904         { &hf_bit6l1flagsh, 
6905         { "Not Defined", "ncp.bit6l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6906         
6907         { &hf_bit7l1flagsh, 
6908         { "Not Defined", "ncp.bit7l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6909         
6910         { &hf_bit8l1flagsh, 
6911         { "Not Defined", "ncp.bit8l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6912         
6913         { &hf_bit9l1flagsh, 
6914         { "Not Defined", "ncp.bit9l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6915         
6916         { &hf_bit10l1flagsh, 
6917         { "Not Defined", "ncp.bit10l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6918         
6919         { &hf_bit11l1flagsh, 
6920         { "Not Defined", "ncp.bit11l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6921         
6922         { &hf_bit12l1flagsh, 
6923         { "Not Defined", "ncp.bit12l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6924         
6925         { &hf_bit13l1flagsh, 
6926         { "Not Defined", "ncp.bit13l1flagsh", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6927         
6928         { &hf_bit14l1flagsh, 
6929         { "Not Defined", "ncp.bit14l1flagsh", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6930         
6931         { &hf_bit15l1flagsh, 
6932         { "Not Defined", "ncp.bit15l1flagsh", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6933         
6934         { &hf_bit16l1flagsh, 
6935         { "Not Defined", "ncp.bit16l1flagsh", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6936         
6937         { &hf_bit1vflags, 
6938         { "Naming", "ncp.bit1vflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6939
6940         { &hf_bit2vflags, 
6941         { "Base Class", "ncp.bit2vflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6942                      
6943         { &hf_bit3vflags, 
6944         { "Present", "ncp.bit3vflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6945         
6946         { &hf_bit4vflags, 
6947         { "Value Damaged", "ncp.bit4vflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6948         
6949         { &hf_bit5vflags, 
6950         { "Not Defined", "ncp.bit5vflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6951         
6952         { &hf_bit6vflags, 
6953         { "Not Defined", "ncp.bit6vflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6954         
6955         { &hf_bit7vflags, 
6956         { "Not Defined", "ncp.bit7vflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6957         
6958         { &hf_bit8vflags, 
6959         { "Not Defined", "ncp.bit8vflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6960         
6961         { &hf_bit9vflags, 
6962         { "Not Defined", "ncp.bit9vflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6963         
6964         { &hf_bit10vflags, 
6965         { "Not Defined", "ncp.bit10vflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6966         
6967         { &hf_bit11vflags, 
6968         { "Not Defined", "ncp.bit11vflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6969         
6970         { &hf_bit12vflags, 
6971         { "Not Defined", "ncp.bit12vflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6972         
6973         { &hf_bit13vflags, 
6974         { "Not Defined", "ncp.bit13vflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6975         
6976         { &hf_bit14vflags, 
6977         { "Not Defined", "ncp.bit14vflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6978         
6979         { &hf_bit15vflags, 
6980         { "Not Defined", "ncp.bit15vflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6981         
6982         { &hf_bit16vflags, 
6983         { "Not Defined", "ncp.bit16vflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6984         
6985         { &hf_bit1cflags, 
6986         { "Ambiguous Containment", "ncp.bit1cflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6987
6988         { &hf_bit2cflags, 
6989         { "Ambiguous Naming", "ncp.bit2cflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6990                      
6991         { &hf_bit3cflags, 
6992         { "Class Definition Cannot be Removed", "ncp.bit3cflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6993         
6994         { &hf_bit4cflags, 
6995         { "Effective Class", "ncp.bit4cflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6996         
6997         { &hf_bit5cflags, 
6998         { "Container Class", "ncp.bit5cflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6999         
7000         { &hf_bit6cflags, 
7001         { "Not Defined", "ncp.bit6cflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7002         
7003         { &hf_bit7cflags, 
7004         { "Not Defined", "ncp.bit7cflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7005         
7006         { &hf_bit8cflags, 
7007         { "Not Defined", "ncp.bit8cflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7008         
7009         { &hf_bit9cflags, 
7010         { "Not Defined", "ncp.bit9cflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7011         
7012         { &hf_bit10cflags, 
7013         { "Not Defined", "ncp.bit10cflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7014         
7015         { &hf_bit11cflags, 
7016         { "Not Defined", "ncp.bit11cflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7017         
7018         { &hf_bit12cflags, 
7019         { "Not Defined", "ncp.bit12cflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7020         
7021         { &hf_bit13cflags, 
7022         { "Not Defined", "ncp.bit13cflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7023         
7024         { &hf_bit14cflags, 
7025         { "Not Defined", "ncp.bit14cflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7026         
7027         { &hf_bit15cflags, 
7028         { "Not Defined", "ncp.bit15cflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7029         
7030         { &hf_bit16cflags, 
7031         { "Not Defined", "ncp.bit16cflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7032         
7033         { &hf_bit1acflags, 
7034         { "Single Valued", "ncp.bit1acflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7035
7036         { &hf_bit2acflags, 
7037         { "Sized", "ncp.bit2acflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7038                      
7039         { &hf_bit3acflags, 
7040         { "Non-Removable", "ncp.bit3acflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7041         
7042         { &hf_bit4acflags, 
7043         { "Read Only", "ncp.bit4acflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7044         
7045         { &hf_bit5acflags, 
7046         { "Hidden", "ncp.bit5acflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7047         
7048         { &hf_bit6acflags, 
7049         { "String", "ncp.bit6acflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7050         
7051         { &hf_bit7acflags, 
7052         { "Synchronize Immediate", "ncp.bit7acflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7053         
7054         { &hf_bit8acflags, 
7055         { "Public Read", "ncp.bit8acflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7056         
7057         { &hf_bit9acflags, 
7058         { "Server Read", "ncp.bit9acflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7059         
7060         { &hf_bit10acflags, 
7061         { "Write Managed", "ncp.bit10acflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7062         
7063         { &hf_bit11acflags, 
7064         { "Per Replica", "ncp.bit11acflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7065         
7066         { &hf_bit12acflags, 
7067         { "Never Schedule Synchronization", "ncp.bit12acflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7068         
7069         { &hf_bit13acflags, 
7070         { "Operational", "ncp.bit13acflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7071         
7072         { &hf_bit14acflags, 
7073         { "Not Defined", "ncp.bit14acflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7074         
7075         { &hf_bit15acflags, 
7076         { "Not Defined", "ncp.bit15acflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7077         
7078         { &hf_bit16acflags, 
7079         { "Not Defined", "ncp.bit16acflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7080         
7081         
7082         { &hf_nds_reply_error,
7083         { "NDS Error", "ncp.ndsreplyerror", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7084         
7085         { &hf_nds_net,
7086         { "Network","ncp.ndsnet", FT_IPXNET, BASE_NONE, NULL, 0x0, "", HFILL }},
7087
7088         { &hf_nds_node,
7089         { "Node",       "ncp.ndsnode", FT_ETHER, BASE_NONE, NULL, 0x0, "", HFILL }},
7090
7091         { &hf_nds_socket, 
7092         { "Socket",     "ncp.ndssocket", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }},
7093         
7094         { &hf_add_ref_ip,
7095         { "Address Referral", "ncp.ipref", FT_IPv4, BASE_DEC, NULL, 0x0, "", HFILL }},
7096         
7097         { &hf_add_ref_udp,
7098         { "Address Referral", "ncp.udpref", FT_IPv4, BASE_DEC, NULL, 0x0, "", HFILL }},
7099         
7100         { &hf_add_ref_tcp,
7101         { "Address Referral", "ncp.tcpref", FT_IPv4, BASE_DEC, NULL, 0x0, "", HFILL }},
7102         
7103         { &hf_referral_record,
7104         { "Referral Record", "ncp.ref_rec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7105         
7106         { &hf_referral_addcount,
7107         { "Address Count", "ncp.ref_addcount", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7108         
7109         { &hf_nds_port,                                                                    
7110         { "Port", "ncp.ndsport", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7111         
7112         { &hf_mv_string,                                
7113         { "Attribute Name ", "ncp.mv_string", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7114                           
7115         { &hf_nds_syntax,                                
7116         { "Attribute Syntax ", "ncp.nds_syntax", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7117
7118         { &hf_value_string,                                
7119         { "Value ", "ncp.value_string", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7120         
7121     { &hf_nds_stream_name,                                
7122         { "Stream Name ", "ncp.nds_stream_name", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7123         
7124         { &hf_nds_buffer_size,
7125         { "NDS Reply Buffer Size", "ncp.nds_reply_buf", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7126         
7127         { &hf_nds_ver,
7128         { "NDS Version", "ncp.nds_ver", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7129         
7130         { &hf_nds_nflags,
7131         { "Flags", "ncp.nds_nflags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7132         
7133     { &hf_nds_rflags,
7134         { "Request Flags", "ncp.nds_rflags", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7135     
7136     { &hf_nds_eflags,
7137         { "Entry Flags", "ncp.nds_eflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7138         
7139         { &hf_nds_scope,
7140         { "Scope", "ncp.nds_scope", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7141         
7142         { &hf_nds_name,
7143         { "Name", "ncp.nds_name", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7144         
7145     { &hf_nds_name_type,
7146         { "Name Type", "ncp.nds_name_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7147         
7148         { &hf_nds_comm_trans,
7149         { "Communications Transport", "ncp.nds_comm_trans", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7150         
7151         { &hf_nds_tree_trans,
7152         { "Tree Walker Transport", "ncp.nds_tree_trans", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7153         
7154         { &hf_nds_iteration,
7155         { "Iteration Handle", "ncp.nds_iteration", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7156         
7157     { &hf_nds_file_handle,
7158         { "File Handle", "ncp.nds_file_handle", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7159         
7160     { &hf_nds_file_size,
7161         { "File Size", "ncp.nds_file_size", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7162         
7163         { &hf_nds_eid,
7164         { "NDS EID", "ncp.nds_eid", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7165         
7166     { &hf_nds_depth,
7167         { "Distance object is from Root", "ncp.nds_depth", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7168         
7169         { &hf_nds_info_type,
7170         { "Info Type", "ncp.nds_info_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7171         
7172     { &hf_nds_class_def_type,
7173         { "Class Definition Type", "ncp.nds_class_def_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7174         
7175         { &hf_nds_all_attr,
7176         { "All Attributes", "ncp.nds_all_attr", FT_UINT32, BASE_DEC, NULL, 0x0, "Return all Attributes?", HFILL }},
7177         
7178     { &hf_nds_return_all_classes,
7179         { "All Classes", "ncp.nds_return_all_classes", FT_STRING, BASE_NONE, NULL, 0x0, "Return all Classes?", HFILL }},
7180         
7181         { &hf_nds_req_flags,                                       
7182         { "Request Flags", "ncp.nds_req_flags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7183         
7184         { &hf_nds_attr,
7185         { "Attributes", "ncp.nds_attributes", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7186         
7187     { &hf_nds_classes,
7188         { "Classes", "ncp.nds_classes", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7189
7190         { &hf_nds_crc,
7191         { "CRC", "ncp.nds_crc", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7192         
7193         { &hf_nds_referrals,
7194         { "Referrals", "ncp.nds_referrals", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7195         
7196         { &hf_nds_result_flags,
7197         { "Result Flags", "ncp.nds_result_flags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7198         
7199     { &hf_nds_stream_flags,
7200         { "Streams Flags", "ncp.nds_stream_flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7201         
7202         { &hf_nds_tag_string,
7203         { "Tags", "ncp.nds_tags", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7204
7205         { &hf_value_bytes,
7206         { "Bytes", "ncp.value_bytes", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }},
7207
7208         { &hf_replica_type,
7209         { "Replica Type", "ncp.rtype", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7210
7211         { &hf_replica_state,
7212         { "Replica State", "ncp.rstate", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7213         
7214     { &hf_nds_rnum,
7215         { "Replica Number", "ncp.rnum", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7216
7217         { &hf_nds_revent,
7218         { "Event", "ncp.revent", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7219
7220         { &hf_replica_number,
7221         { "Replica Number", "ncp.rnum", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7222  
7223         { &hf_min_nds_ver,
7224         { "Minimum NDS Version", "ncp.min_nds_version", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7225
7226         { &hf_nds_ver_include,
7227         { "Include NDS Version", "ncp.inc_nds_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7228  
7229         { &hf_nds_ver_exclude,
7230         { "Exclude NDS Version", "ncp.exc_nds_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7231
7232         { &hf_nds_es,
7233         { "Input Entry Specifier", "ncp.nds_es", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7234         
7235         { &hf_es_type,
7236         { "Entry Specifier Type", "ncp.nds_es_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7237
7238         { &hf_rdn_string,
7239         { "RDN", "ncp.nds_rdn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7240
7241         { &hf_delim_string,
7242         { "Delimeter", "ncp.nds_delim", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7243                                  
7244     { &hf_nds_dn_output_type,
7245         { "Output Entry Specifier Type", "ncp.nds_out_es_type", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7246     
7247     { &hf_nds_nested_output_type,
7248         { "Nested Output Entry Specifier Type", "ncp.nds_nested_out_es", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7249     
7250     { &hf_nds_output_delimiter,
7251         { "Output Delimiter", "ncp.nds_out_delimiter", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7252     
7253     { &hf_nds_output_entry_specifier,
7254         { "Output Entry Specifier", "ncp.nds_out_es", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7255     
7256     { &hf_es_value,
7257         { "Entry Specifier Value", "ncp.nds_es_value", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7258
7259     { &hf_es_rdn_count,
7260         { "RDN Count", "ncp.nds_es_rdn_count", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7261     
7262     { &hf_nds_replica_num,
7263         { "Replica Number", "ncp.nds_replica_num", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7264     
7265     { &hf_es_seconds,
7266         { "Seconds", "ncp.nds_es_seconds", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7267
7268     { &hf_nds_event_num,
7269         { "Event Number", "ncp.nds_event_num", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7270
7271     { &hf_nds_compare_results,
7272         { "Compare Results", "ncp.nds_compare_results", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7273     
7274     { &hf_nds_parent,
7275         { "Parent ID", "ncp.nds_parent", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7276
7277     { &hf_nds_name_filter,
7278         { "Name Filter", "ncp.nds_name_filter", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7279
7280     { &hf_nds_class_filter,
7281         { "Class Filter", "ncp.nds_class_filter", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7282
7283     { &hf_nds_time_filter,
7284         { "Time Filter", "ncp.nds_time_filter", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7285
7286     { &hf_nds_partition_root_id,
7287         { "Partition Root ID", "ncp.nds_partition_root_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7288
7289     { &hf_nds_replicas,
7290         { "Replicas", "ncp.nds_replicas", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7291
7292     { &hf_nds_purge,
7293         { "Purge Time", "ncp.nds_purge", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7294
7295     { &hf_nds_local_partition,
7296         { "Local Partition ID", "ncp.nds_local_partition", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7297
7298     { &hf_partition_busy, 
7299     { "Partition Busy", "ncp.nds_partition_busy", FT_BOOLEAN, 16, NULL, 0x0, "", HFILL }},
7300
7301     { &hf_nds_number_of_changes,
7302         { "Number of Attribute Changes", "ncp.nds_number_of_changes", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7303     
7304     { &hf_sub_count,
7305         { "Subordinate Count", "ncp.sub_count", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7306     
7307     { &hf_nds_revision,
7308         { "Revision Count", "ncp.nds_rev_count", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7309     
7310     { &hf_nds_base_class,
7311         { "Base Class", "ncp.nds_base_class", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7312     
7313     { &hf_nds_relative_dn,
7314         { "Relative Distinguished Name", "ncp.nds_relative_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7315     
7316     { &hf_nds_root_dn,
7317         { "Root Distinguished Name", "ncp.nds_root_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7318     
7319     { &hf_nds_parent_dn,
7320         { "Parent Distinguished Name", "ncp.nds_parent_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7321     
7322     { &hf_deref_base, 
7323     { "Dereference Base Class", "ncp.nds_deref_base", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7324     
7325     { &hf_nds_base, 
7326     { "Base Class", "ncp.nds_base", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7327     
7328     { &hf_nds_super, 
7329     { "Super Class", "ncp.nds_super", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7330     
7331     { &hf_nds_entry_info, 
7332     { "Entry Information", "ncp.nds_entry_info", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7333     
7334     { &hf_nds_privileges, 
7335     { "Privileges", "ncp.nds_privileges", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7336     
7337     { &hf_nds_vflags, 
7338     { "Value Flags", "ncp.nds_vflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7339     
7340     { &hf_nds_value_len, 
7341     { "Value Length", "ncp.nds_vlength", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7342     
7343     { &hf_nds_cflags, 
7344     { "Class Flags", "ncp.nds_cflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7345         
7346     { &hf_nds_asn1,
7347         { "ASN.1 ID", "ncp.nds_asn1", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }},
7348
7349     { &hf_nds_acflags, 
7350     { "Attribute Constraint Flags", "ncp.nds_acflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7351     
7352     { &hf_nds_upper, 
7353     { "Upper Limit Value", "ncp.nds_upper", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7354     
7355     { &hf_nds_lower, 
7356     { "Lower Limit Value", "ncp.nds_lower", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7357     
7358     { &hf_nds_trustee_dn,
7359         { "Trustee Distinguished Name", "ncp.nds_trustee_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7360     
7361     { &hf_nds_attribute_dn,
7362         { "Attribute Name", "ncp.nds_attribute_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7363     
7364     { &hf_nds_acl_add,
7365         { "Access Control Lists to Add", "ncp.nds_acl_add", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7366     
7367     { &hf_nds_acl_del,
7368         { "Access Control Lists to Delete", "ncp.nds_acl_del", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7369     
7370     { &hf_nds_att_add,
7371         { "Attribute to Add", "ncp.nds_att_add", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7372     
7373     { &hf_nds_att_del,
7374         { "Attribute to Delete", "ncp.nds_att_del", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7375     
7376     { &hf_nds_keep, 
7377     { "Delete Original RDN", "ncp.nds_keep", FT_BOOLEAN, 32, NULL, 0x0, "", HFILL }},
7378     
7379     { &hf_nds_new_rdn,
7380         { "New Relative Distinguished Name", "ncp.nds_new_rdn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7381     
7382     { &hf_nds_time_delay,
7383         { "Time Delay", "ncp.nds_time_delay", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7384     
7385     { &hf_nds_root_name,
7386         { "Root Most Object Name", "ncp.nds_root_name", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7387     
7388     { &hf_nds_new_part_id,
7389         { "New Partition Root ID", "ncp.nds_new_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7390     
7391     { &hf_nds_child_part_id,
7392         { "Child Partition Root ID", "ncp.nds_child_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7393     
7394     { &hf_nds_master_part_id,
7395         { "Master Partition Root ID", "ncp.nds_master_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7396     
7397     { &hf_nds_target_name,
7398         { "Target Server Name", "ncp.nds_target_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7399
7400
7401         { &hf_bit1pingflags1, 
7402         { "Supported Fields", "ncp.bit1pingflags1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7403
7404         { &hf_bit2pingflags1, 
7405         { "Depth", "ncp.bit2pingflags1", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7406                      
7407         { &hf_bit3pingflags1, 
7408         { "Revision", "ncp.bit3pingflags1", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7409         
7410         { &hf_bit4pingflags1, 
7411         { "Flags", "ncp.bit4pingflags1", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7412         
7413         { &hf_bit5pingflags1, 
7414         { "Verification Flags", "ncp.bit5pingflags1", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7415         
7416         { &hf_bit6pingflags1, 
7417         { "Letter Version", "ncp.bit6pingflags1", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7418         
7419         { &hf_bit7pingflags1, 
7420         { "OS Version", "ncp.bit7pingflags1", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7421         
7422         { &hf_bit8pingflags1, 
7423         { "License Flags", "ncp.bit8pingflags1", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7424         
7425         { &hf_bit9pingflags1, 
7426         { "DS Time", "ncp.bit9pingflags1", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7427         
7428         { &hf_bit10pingflags1, 
7429         { "Not Defined", "ncp.bit10pingflags1", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7430         
7431         { &hf_bit11pingflags1, 
7432         { "Not Defined", "ncp.bit11pingflags1", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7433         
7434         { &hf_bit12pingflags1, 
7435         { "Not Defined", "ncp.bit12pingflags1", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7436         
7437         { &hf_bit13pingflags1, 
7438         { "Not Defined", "ncp.bit13pingflags1", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7439         
7440         { &hf_bit14pingflags1, 
7441         { "Not Defined", "ncp.bit14pingflags1", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7442         
7443         { &hf_bit15pingflags1, 
7444         { "Not Defined", "ncp.bit15pingflags1", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7445         
7446         { &hf_bit16pingflags1, 
7447         { "Not Defined", "ncp.bit16pingflags1", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7448
7449         { &hf_bit1pingflags2, 
7450         { "Sap Name", "ncp.bit1pingflags2", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7451
7452         { &hf_bit2pingflags2, 
7453         { "Tree Name", "ncp.bit2pingflags2", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7454                      
7455         { &hf_bit3pingflags2, 
7456         { "OS Name", "ncp.bit3pingflags2", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7457         
7458         { &hf_bit4pingflags2, 
7459         { "Hardware Name", "ncp.bit4pingflags2", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7460         
7461         { &hf_bit5pingflags2, 
7462         { "Vendor Name", "ncp.bit5pingflags2", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7463         
7464         { &hf_bit6pingflags2, 
7465         { "Not Defined", "ncp.bit6pingflags2", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7466         
7467         { &hf_bit7pingflags2, 
7468         { "Not Defined", "ncp.bit7pingflags2", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7469         
7470         { &hf_bit8pingflags2, 
7471         { "Not Defined", "ncp.bit8pingflags2", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7472         
7473         { &hf_bit9pingflags2, 
7474         { "Not Defined", "ncp.bit9pingflags2", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7475         
7476         { &hf_bit10pingflags2, 
7477         { "Not Defined", "ncp.bit10pingflags2", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7478         
7479         { &hf_bit11pingflags2, 
7480         { "Not Defined", "ncp.bit11pingflags2", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7481         
7482         { &hf_bit12pingflags2, 
7483         { "Not Defined", "ncp.bit12pingflags2", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7484         
7485         { &hf_bit13pingflags2, 
7486         { "Not Defined", "ncp.bit13pingflags2", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7487         
7488         { &hf_bit14pingflags2, 
7489         { "Not Defined", "ncp.bit14pingflags2", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7490         
7491         { &hf_bit15pingflags2, 
7492         { "Not Defined", "ncp.bit15pingflags2", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7493         
7494         { &hf_bit16pingflags2, 
7495         { "Not Defined", "ncp.bit16pingflags2", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7496      
7497         { &hf_bit1pingpflags1, 
7498         { "Root Most Master Replica", "ncp.bit1pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7499
7500         { &hf_bit2pingpflags1, 
7501         { "Time Synchronized", "ncp.bit2pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7502                      
7503         { &hf_bit3pingpflags1, 
7504         { "Not Defined", "ncp.bit3pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7505         
7506         { &hf_bit4pingpflags1, 
7507         { "Not Defined", "ncp.bit4pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7508         
7509         { &hf_bit5pingpflags1, 
7510         { "Not Defined", "ncp.bit5pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7511         
7512         { &hf_bit6pingpflags1, 
7513         { "Not Defined", "ncp.bit6pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7514         
7515         { &hf_bit7pingpflags1, 
7516         { "Not Defined", "ncp.bit7pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7517         
7518         { &hf_bit8pingpflags1, 
7519         { "Not Defined", "ncp.bit8pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7520         
7521         { &hf_bit9pingpflags1, 
7522         { "Not Defined", "ncp.bit9pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7523         
7524         { &hf_bit10pingpflags1, 
7525         { "Not Defined", "ncp.bit10pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7526         
7527         { &hf_bit11pingpflags1, 
7528         { "Not Defined", "ncp.bit11pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7529         
7530         { &hf_bit12pingpflags1, 
7531         { "Not Defined", "ncp.bit12pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7532         
7533         { &hf_bit13pingpflags1, 
7534         { "Not Defined", "ncp.bit13pingpflags1", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7535         
7536         { &hf_bit14pingpflags1, 
7537         { "Not Defined", "ncp.bit14pingpflags1", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7538         
7539         { &hf_bit15pingpflags1, 
7540         { "Not Defined", "ncp.bit15pingpflags1", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7541         
7542         { &hf_bit16pingpflags1, 
7543         { "Not Defined", "ncp.bit16pingpflags1", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7544     
7545         { &hf_bit1pingvflags1, 
7546         { "Checksum", "ncp.bit1pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7547
7548         { &hf_bit2pingvflags1, 
7549         { "CRC32", "ncp.bit2pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7550                      
7551         { &hf_bit3pingvflags1, 
7552         { "Not Defined", "ncp.bit3pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7553         
7554         { &hf_bit4pingvflags1, 
7555         { "Not Defined", "ncp.bit4pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7556         
7557         { &hf_bit5pingvflags1, 
7558         { "Not Defined", "ncp.bit5pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7559         
7560         { &hf_bit6pingvflags1, 
7561         { "Not Defined", "ncp.bit6pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7562         
7563         { &hf_bit7pingvflags1, 
7564         { "Not Defined", "ncp.bit7pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7565         
7566         { &hf_bit8pingvflags1, 
7567         { "Not Defined", "ncp.bit8pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7568         
7569         { &hf_bit9pingvflags1, 
7570         { "Not Defined", "ncp.bit9pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7571         
7572         { &hf_bit10pingvflags1, 
7573         { "Not Defined", "ncp.bit10pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7574         
7575         { &hf_bit11pingvflags1, 
7576         { "Not Defined", "ncp.bit11pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7577         
7578         { &hf_bit12pingvflags1, 
7579         { "Not Defined", "ncp.bit12pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7580         
7581         { &hf_bit13pingvflags1, 
7582         { "Not Defined", "ncp.bit13pingvflags1", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7583         
7584         { &hf_bit14pingvflags1, 
7585         { "Not Defined", "ncp.bit14pingvflags1", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7586         
7587         { &hf_bit15pingvflags1, 
7588         { "Not Defined", "ncp.bit15pingvflags1", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7589         
7590         { &hf_bit16pingvflags1, 
7591         { "Not Defined", "ncp.bit16pingvflags1", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7592
7593     { &hf_nds_letter_ver,
7594         { "Letter Version", "ncp.nds_letter_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7595     
7596     { &hf_nds_os_ver,
7597         { "OS Version", "ncp.nds_os_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7598     
7599     { &hf_nds_lic_flags,
7600         { "License Flags", "ncp.nds_lic_flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7601     
7602     { &hf_nds_ds_time,
7603         { "DS Time", "ncp.nds_ds_time", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7604     
7605     { &hf_nds_ping_version,
7606         { "Ping Version", "ncp.nds_ping_version", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7607
7608
7609   
7610  """                
7611         # Print the registration code for the hf variables
7612         for var in sorted_vars:
7613                 print "\t{ &%s," % (var.HFName())
7614                 print "\t{ \"%s\", \"%s\", %s, %s, %s, 0x%x, \"\", HFILL }},\n" % \
7615                         (var.Description(), var.DFilter(),
7616                         var.EtherealFType(), var.Display(), var.ValuesName(),
7617                         var.Mask())
7618
7619         print "\t};\n"
7620  
7621         if ett_list:
7622                 print "\tstatic gint *ett[] = {"
7623
7624                 for ett in ett_list:
7625                         print "\t\t&%s," % (ett,)
7626
7627                 print "\t};\n"
7628                        
7629         print """
7630         proto_register_field_array(proto_ncp, hf, array_length(hf));
7631         """
7632
7633         if ett_list:
7634                 print """
7635         proto_register_subtree_array(ett, array_length(ett));
7636                 """
7637
7638         print """
7639         register_init_routine(&ncp_init_protocol);
7640         register_postseq_cleanup_routine(&ncp_postseq_cleanup);
7641         register_final_registration_routine(final_registration_ncp2222);
7642         """
7643
7644         
7645         # End of proto_register_ncp2222()
7646         print "}"
7647         print ""
7648         print '#include "packet-ncp2222.inc"'
7649
7650 def usage():
7651         print "Usage: ncp2222.py -o output_file"
7652         sys.exit(1)
7653
7654 def main():
7655         global compcode_lists
7656         global ptvc_lists
7657         global msg
7658
7659         optstring = "o:"
7660         out_filename = None
7661
7662         try:
7663                 opts, args = getopt.getopt(sys.argv[1:], optstring)
7664         except getopt.error:
7665                 usage()
7666
7667         for opt, arg in opts:
7668                 if opt == "-o":
7669                         out_filename = arg
7670                 else:
7671                         usage()
7672
7673         if len(args) != 0:
7674                 usage()
7675
7676         if not out_filename:
7677                 usage()
7678
7679         # Create the output file
7680         try:
7681                 out_file = open(out_filename, "w")
7682         except IOError, err:
7683                 sys.exit("Could not open %s for writing: %s" % (out_filename,
7684                         err))
7685
7686         # Set msg to current stdout
7687         msg = sys.stdout
7688
7689         # Set stdout to the output file
7690         sys.stdout = out_file
7691
7692         msg.write("Processing NCP definitions...\n")
7693         # Run the code, and if we catch any exception,
7694         # erase the output file.
7695         try:
7696                 compcode_lists  = UniqueCollection('Completion Code Lists')
7697                 ptvc_lists      = UniqueCollection('PTVC Lists')
7698
7699                 define_errors()
7700                 define_groups()         
7701                 
7702                 define_ncp2222()
7703
7704                 msg.write("Defined %d NCP types.\n" % (len(packets),))
7705                 produce_code()
7706         except:
7707                 traceback.print_exc(20, msg)
7708                 try:
7709                         out_file.close()
7710                 except IOError, err:
7711                         msg.write("Could not close %s: %s\n" % (out_filename, err))
7712
7713                 try:
7714                         if os.path.exists(out_filename):
7715                                 os.remove(out_filename)
7716                 except OSError, err:
7717                         msg.write("Could not remove %s: %s\n" % (out_filename, err))
7718
7719                 sys.exit(1)
7720
7721
7722
7723 def define_ncp2222():
7724         ##############################################################################
7725         # NCP Packets. Here I list functions and subfunctions in hexadecimal like the
7726         # NCP book (and I believe LanAlyzer does this too).
7727         # However, Novell lists these in decimal in their on-line documentation.
7728         ##############################################################################
7729         # 2222/01
7730         pkt = NCP(0x01, "File Set Lock", 'file')
7731         pkt.Request(7)
7732         pkt.Reply(8)
7733         pkt.CompletionCodes([0x0000])
7734         # 2222/02
7735         pkt = NCP(0x02, "File Release Lock", 'file')
7736         pkt.Request(7)
7737         pkt.Reply(8)
7738         pkt.CompletionCodes([0x0000, 0xff00])
7739         # 2222/03
7740         pkt = NCP(0x03, "Log File Exclusive", 'file')
7741         pkt.Request( (12, 267), [
7742                 rec( 7, 1, DirHandle ),
7743                 rec( 8, 1, LockFlag ),
7744                 rec( 9, 2, TimeoutLimit, BE ),
7745                 rec( 11, (1, 256), FilePath ),
7746         ])
7747         pkt.Reply(8)
7748         pkt.CompletionCodes([0x0000, 0x8200, 0x9600, 0xfe0d, 0xff01])
7749         # 2222/04
7750         pkt = NCP(0x04, "Lock File Set", 'file')
7751         pkt.Request( 9, [
7752                 rec( 7, 2, TimeoutLimit ),
7753         ])
7754         pkt.Reply(8)
7755         pkt.CompletionCodes([0x0000, 0xfe0d, 0xff01])
7756         ## 2222/05
7757         pkt = NCP(0x05, "Release File", 'file')
7758         pkt.Request( (9, 264), [
7759                 rec( 7, 1, DirHandle ),
7760                 rec( 8, (1, 256), FilePath ),
7761         ])
7762         pkt.Reply(8)
7763         pkt.CompletionCodes([0x0000, 0x9b00, 0x9c03, 0xff1a])
7764         # 2222/06
7765         pkt = NCP(0x06, "Release File Set", 'file')
7766         pkt.Request( 8, [
7767                 rec( 7, 1, LockFlag ),
7768         ])
7769         pkt.Reply(8)
7770         pkt.CompletionCodes([0x0000])
7771         # 2222/07
7772         pkt = NCP(0x07, "Clear File", 'file')
7773         pkt.Request( (9, 264), [
7774                 rec( 7, 1, DirHandle ),
7775                 rec( 8, (1, 256), FilePath ),
7776         ])
7777         pkt.Reply(8)
7778         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03,
7779                 0xa100, 0xfd00, 0xff1a])
7780         # 2222/08
7781         pkt = NCP(0x08, "Clear File Set", 'file')
7782         pkt.Request( 8, [
7783                 rec( 7, 1, LockFlag ),
7784         ])
7785         pkt.Reply(8)
7786         pkt.CompletionCodes([0x0000])
7787         # 2222/09
7788         pkt = NCP(0x09, "Log Logical Record", 'file')
7789         pkt.Request( (11, 138), [
7790                 rec( 7, 1, LockFlag ),
7791                 rec( 8, 2, TimeoutLimit, BE ),
7792                 rec( 10, (1, 128), LogicalRecordName ),
7793         ], info_str=(LogicalRecordName, "Log Logical Record: %s", ", %s"))
7794         pkt.Reply(8)
7795         pkt.CompletionCodes([0x0000, 0x9600, 0xfe0d, 0xff1a])
7796         # 2222/0A, 10
7797         pkt = NCP(0x0A, "Lock Logical Record Set", 'file')
7798         pkt.Request( 10, [
7799                 rec( 7, 1, LockFlag ),
7800                 rec( 8, 2, TimeoutLimit ),
7801         ])
7802         pkt.Reply(8)
7803         pkt.CompletionCodes([0x0000, 0xfe0d, 0xff1a])
7804         # 2222/0B, 11
7805         pkt = NCP(0x0B, "Clear Logical Record", 'file')
7806         pkt.Request( (8, 135), [
7807                 rec( 7, (1, 128), LogicalRecordName ),
7808         ], info_str=(LogicalRecordName, "Clear Logical Record: %s", ", %s"))
7809         pkt.Reply(8)
7810         pkt.CompletionCodes([0x0000, 0xff1a])
7811         # 2222/0C, 12
7812         pkt = NCP(0x0C, "Release Logical Record", 'file')
7813         pkt.Request( (8, 135), [
7814                 rec( 7, (1, 128), LogicalRecordName ),
7815         ], info_str=(LogicalRecordName, "Release Logical Record: %s", ", %s"))
7816         pkt.Reply(8)
7817         pkt.CompletionCodes([0x0000, 0xff1a])
7818         # 2222/0D, 13
7819         pkt = NCP(0x0D, "Release Logical Record Set", 'file')
7820         pkt.Request( 8, [
7821                 rec( 7, 1, LockFlag ),
7822         ])
7823         pkt.Reply(8)
7824         pkt.CompletionCodes([0x0000])
7825         # 2222/0E, 14
7826         pkt = NCP(0x0E, "Clear Logical Record Set", 'file')
7827         pkt.Request( 8, [
7828                 rec( 7, 1, LockFlag ),
7829         ])
7830         pkt.Reply(8)
7831         pkt.CompletionCodes([0x0000])
7832         # 2222/1100, 17/00
7833         pkt = NCP(0x1100, "Write to Spool File", 'qms')
7834         pkt.Request( (11, 16), [
7835                 rec( 10, ( 1, 6 ), Data ),
7836         ], info_str=(Data, "Write to Spool File: %s", ", %s"))
7837         pkt.Reply(8)
7838         pkt.CompletionCodes([0x0000, 0x0104, 0x8000, 0x8101, 0x8701, 0x8800,
7839                              0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9400, 0x9500,
7840                              0x9600, 0x9804, 0x9900, 0xa100, 0xa201, 0xff19])
7841         # 2222/1101, 17/01
7842         pkt = NCP(0x1101, "Close Spool File", 'qms')
7843         pkt.Request( 11, [
7844                 rec( 10, 1, AbortQueueFlag ),
7845         ])
7846         pkt.Reply(8)      
7847         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8701, 0x8800, 0x8d00,
7848                              0x8e00, 0x8f00, 0x9001, 0x9300, 0x9400, 0x9500,
7849                              0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03, 0x9d00,
7850                              0xa100, 0xd000, 0xd100, 0xd202, 0xd300, 0xd400,
7851                              0xda01, 0xe800, 0xea00, 0xeb00, 0xec00, 0xfc06,
7852                              0xfd00, 0xfe07, 0xff06])
7853         # 2222/1102, 17/02
7854         pkt = NCP(0x1102, "Set Spool File Flags", 'qms')
7855         pkt.Request( 30, [
7856                 rec( 10, 1, PrintFlags ),
7857                 rec( 11, 1, TabSize ),
7858                 rec( 12, 1, TargetPrinter ),
7859                 rec( 13, 1, Copies ),
7860                 rec( 14, 1, FormType ),
7861                 rec( 15, 1, Reserved ),
7862                 rec( 16, 14, BannerName ),
7863         ])
7864         pkt.Reply(8)
7865         pkt.CompletionCodes([0x0000, 0x9600, 0xd202, 0xd300, 0xe800, 0xea00,
7866                              0xeb00, 0xec00, 0xfc06, 0xfe07, 0xff06])
7867
7868         # 2222/1103, 17/03
7869         pkt = NCP(0x1103, "Spool A Disk File", 'qms')
7870         pkt.Request( (12, 23), [
7871                 rec( 10, 1, DirHandle ),
7872                 rec( 11, (1, 12), Data ),
7873         ], info_str=(Data, "Spool a Disk File: %s", ", %s"))
7874         pkt.Reply(8)
7875         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8701, 0x8800, 0x8d00,
7876                              0x8e00, 0x8f00, 0x9001, 0x9300, 0x9400, 0x9500,
7877                              0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03, 0x9d00,
7878                              0xa100, 0xd000, 0xd100, 0xd202, 0xd300, 0xd400,
7879                              0xda01, 0xe800, 0xea00, 0xeb00, 0xec00, 0xfc06,
7880                              0xfd00, 0xfe07, 0xff06])
7881
7882         # 2222/1106, 17/06
7883         pkt = NCP(0x1106, "Get Printer Status", 'qms')
7884         pkt.Request( 11, [
7885                 rec( 10, 1, TargetPrinter ),
7886         ])
7887         pkt.Reply(12, [
7888                 rec( 8, 1, PrinterHalted ),
7889                 rec( 9, 1, PrinterOffLine ),
7890                 rec( 10, 1, CurrentFormType ),
7891                 rec( 11, 1, RedirectedPrinter ),
7892         ])
7893         pkt.CompletionCodes([0x0000, 0x9600, 0xfb05, 0xfd00, 0xff06])
7894
7895         # 2222/1109, 17/09
7896         pkt = NCP(0x1109, "Create Spool File", 'qms')
7897         pkt.Request( (12, 23), [
7898                 rec( 10, 1, DirHandle ),
7899                 rec( 11, (1, 12), Data ),
7900         ], info_str=(Data, "Create Spool File: %s", ", %s"))
7901         pkt.Reply(8)
7902         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8400, 0x8701, 0x8d00,
7903                              0x8f00, 0x9001, 0x9400, 0x9600, 0x9804, 0x9900,
7904                              0x9b03, 0x9c03, 0xa100, 0xd000, 0xd100, 0xd202,
7905                              0xd300, 0xd400, 0xda01, 0xe800, 0xea00, 0xeb00,
7906                              0xec00, 0xfc06, 0xfd00, 0xfe07, 0xff06])
7907
7908         # 2222/110A, 17/10
7909         pkt = NCP(0x110A, "Get Printer's Queue", 'qms')
7910         pkt.Request( 11, [
7911                 rec( 10, 1, TargetPrinter ),
7912         ])
7913         pkt.Reply( 12, [
7914                 rec( 8, 4, ObjectID, BE ),
7915         ])
7916         pkt.CompletionCodes([0x0000, 0x9600, 0xff06])
7917
7918         # 2222/12, 18
7919         pkt = NCP(0x12, "Get Volume Info with Number", 'file')
7920         pkt.Request( 8, [
7921                 rec( 7, 1, VolumeNumber )
7922         ],info_str=(VolumeNumber, "Get Volume Information for Volume %d", ", %d"))
7923         pkt.Reply( 36, [
7924                 rec( 8, 2, SectorsPerCluster, BE ),
7925                 rec( 10, 2, TotalVolumeClusters, BE ),
7926                 rec( 12, 2, AvailableClusters, BE ),
7927                 rec( 14, 2, TotalDirectorySlots, BE ),
7928                 rec( 16, 2, AvailableDirectorySlots, BE ),
7929                 rec( 18, 16, VolumeName ),
7930                 rec( 34, 2, RemovableFlag, BE ),
7931         ])
7932         pkt.CompletionCodes([0x0000, 0x9804])
7933
7934         # 2222/13, 19
7935         pkt = NCP(0x13, "Get Station Number", 'connection')
7936         pkt.Request(7)
7937         pkt.Reply(11, [
7938                 rec( 8, 3, StationNumber )
7939         ])
7940         pkt.CompletionCodes([0x0000, 0xff00])
7941
7942         # 2222/14, 20
7943         pkt = NCP(0x14, "Get File Server Date And Time", 'fileserver')
7944         pkt.Request(7)
7945         pkt.Reply(15, [
7946                 rec( 8, 1, Year ),
7947                 rec( 9, 1, Month ),
7948                 rec( 10, 1, Day ),
7949                 rec( 11, 1, Hour ),
7950                 rec( 12, 1, Minute ),
7951                 rec( 13, 1, Second ),
7952                 rec( 14, 1, DayOfWeek ),
7953         ])
7954         pkt.CompletionCodes([0x0000])
7955
7956         # 2222/1500, 21/00
7957         pkt = NCP(0x1500, "Send Broadcast Message", 'message')
7958         pkt.Request((13, 70), [
7959                 rec( 10, 1, ClientListLen, var="x" ),
7960                 rec( 11, 1, TargetClientList, repeat="x" ),
7961                 rec( 12, (1, 58), TargetMessage ),
7962         ], info_str=(TargetMessage, "Send Broadcast Message: %s", ", %s"))
7963         pkt.Reply(10, [
7964                 rec( 8, 1, ClientListLen, var="x" ),
7965                 rec( 9, 1, SendStatus, repeat="x" )
7966         ])
7967         pkt.CompletionCodes([0x0000, 0xfd00])
7968
7969         # 2222/1501, 21/01
7970         pkt = NCP(0x1501, "Get Broadcast Message", 'message')
7971         pkt.Request(10)
7972         pkt.Reply((9,66), [
7973                 rec( 8, (1, 58), TargetMessage )
7974         ])
7975         pkt.CompletionCodes([0x0000, 0xfd00])
7976
7977         # 2222/1502, 21/02
7978         pkt = NCP(0x1502, "Disable Broadcasts", 'message')
7979         pkt.Request(10)
7980         pkt.Reply(8)
7981         pkt.CompletionCodes([0x0000])
7982
7983         # 2222/1503, 21/03
7984         pkt = NCP(0x1503, "Enable Broadcasts", 'message')
7985         pkt.Request(10)
7986         pkt.Reply(8)
7987         pkt.CompletionCodes([0x0000])
7988
7989         # 2222/1509, 21/09
7990         pkt = NCP(0x1509, "Broadcast To Console", 'message')
7991         pkt.Request((11, 68), [
7992                 rec( 10, (1, 58), TargetMessage )
7993         ], info_str=(TargetMessage, "Broadcast to Console: %s", ", %s"))
7994         pkt.Reply(8)
7995         pkt.CompletionCodes([0x0000])
7996         # 2222/150A, 21/10
7997         pkt = NCP(0x150A, "Send Broadcast Message", 'message')
7998         pkt.Request((17, 74), [
7999                 rec( 10, 2, ClientListCount, LE, var="x" ),
8000                 rec( 12, 4, ClientList, LE, repeat="x" ),
8001                 rec( 16, (1, 58), TargetMessage ),
8002         ], info_str=(TargetMessage, "Send Broadcast Message: %s", ", %s"))
8003         pkt.Reply(14, [
8004                 rec( 8, 2, ClientListCount, LE, var="x" ),
8005                 rec( 10, 4, ClientCompFlag, LE, repeat="x" ),
8006         ])
8007         pkt.CompletionCodes([0x0000, 0xfd00])
8008
8009         # 2222/150B, 21/11
8010         pkt = NCP(0x150B, "Get Broadcast Message", 'message')
8011         pkt.Request(10)
8012         pkt.Reply((9,66), [
8013                 rec( 8, (1, 58), TargetMessage )
8014         ])
8015         pkt.CompletionCodes([0x0000, 0xfd00])
8016
8017         # 2222/150C, 21/12
8018         pkt = NCP(0x150C, "Connection Message Control", 'message')
8019         pkt.Request(22, [
8020                 rec( 10, 1, ConnectionControlBits ),
8021                 rec( 11, 3, Reserved3 ),
8022                 rec( 14, 4, ConnectionListCount, LE, var="x" ),
8023                 rec( 18, 4, ConnectionList, LE, repeat="x" ),
8024         ])
8025         pkt.Reply(8)
8026         pkt.CompletionCodes([0x0000, 0xff00])
8027
8028         # 2222/1600, 22/0
8029         pkt = NCP(0x1600, "Set Directory Handle", 'fileserver')
8030         pkt.Request((13,267), [
8031                 rec( 10, 1, TargetDirHandle ),
8032                 rec( 11, 1, DirHandle ),
8033                 rec( 12, (1, 255), Path ),
8034         ], info_str=(Path, "Set Directory Handle to: %s", ", %s"))
8035         pkt.Reply(8)
8036         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8037                              0xfd00, 0xff00])
8038
8039
8040         # 2222/1601, 22/1
8041         pkt = NCP(0x1601, "Get Directory Path", 'fileserver')
8042         pkt.Request(11, [
8043                 rec( 10, 1, DirHandle ),
8044         ],info_str=(DirHandle, "Get Directory Path for Directory Handle %d", ", %d"))
8045         pkt.Reply((9,263), [
8046                 rec( 8, (1,255), Path ),
8047         ])
8048         pkt.CompletionCodes([0x0000, 0x9600, 0x9b00, 0x9c00, 0xa100])
8049
8050         # 2222/1602, 22/2
8051         pkt = NCP(0x1602, "Scan Directory Information", 'fileserver')
8052         pkt.Request((14,268), [
8053                 rec( 10, 1, DirHandle ),
8054                 rec( 11, 2, StartingSearchNumber, BE ),
8055                 rec( 13, (1, 255), Path ),
8056         ], info_str=(Path, "Scan Directory Information: %s", ", %s"))
8057         pkt.Reply(36, [
8058                 rec( 8, 16, DirectoryPath ),
8059                 rec( 24, 2, CreationDate, BE ),
8060                 rec( 26, 2, CreationTime, BE ),
8061                 rec( 28, 4, CreatorID, BE ),
8062                 rec( 32, 1, AccessRightsMask ),
8063                 rec( 33, 1, Reserved ),
8064                 rec( 34, 2, NextSearchNumber, BE ),
8065         ])
8066         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8067                              0xfd00, 0xff00])
8068
8069         # 2222/1603, 22/3
8070         pkt = NCP(0x1603, "Get Effective Directory Rights", 'fileserver')
8071         pkt.Request((14,268), [
8072                 rec( 10, 1, DirHandle ),
8073                 rec( 11, 2, StartingSearchNumber ),
8074                 rec( 13, (1, 255), Path ),
8075         ], info_str=(Path, "Get Effective Directory Rights: %s", ", %s"))
8076         pkt.Reply(9, [
8077                 rec( 8, 1, AccessRightsMask ),
8078         ])
8079         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8080                              0xfd00, 0xff00])
8081
8082         # 2222/1604, 22/4
8083         pkt = NCP(0x1604, "Modify Maximum Rights Mask", 'fileserver')
8084         pkt.Request((14,268), [
8085                 rec( 10, 1, DirHandle ),
8086                 rec( 11, 1, RightsGrantMask ),
8087                 rec( 12, 1, RightsRevokeMask ),
8088                 rec( 13, (1, 255), Path ),
8089         ], info_str=(Path, "Modify Maximum Rights Mask: %s", ", %s"))
8090         pkt.Reply(8)
8091         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8092                              0xfd00, 0xff00])
8093
8094         # 2222/1605, 22/5
8095         pkt = NCP(0x1605, "Get Volume Number", 'fileserver')
8096         pkt.Request((11, 265), [
8097                 rec( 10, (1,255), VolumeNameLen ),
8098         ], info_str=(VolumeNameLen, "Get Volume Number for: %s", ", %s"))
8099         pkt.Reply(9, [
8100                 rec( 8, 1, VolumeNumber ),
8101         ])
8102         pkt.CompletionCodes([0x0000, 0x9600, 0x9804])
8103
8104         # 2222/1606, 22/6
8105         pkt = NCP(0x1606, "Get Volume Name", 'fileserver')
8106         pkt.Request(11, [
8107                 rec( 10, 1, VolumeNumber ),
8108         ],info_str=(VolumeNumber, "Get Name for Volume %d", ", %d"))
8109         pkt.Reply((9, 263), [
8110                 rec( 8, (1,255), VolumeNameLen ),
8111         ])
8112         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0xff00])
8113
8114         # 2222/160A, 22/10
8115         pkt = NCP(0x160A, "Create Directory", 'fileserver')
8116         pkt.Request((13,267), [
8117                 rec( 10, 1, DirHandle ),
8118                 rec( 11, 1, AccessRightsMask ),
8119                 rec( 12, (1, 255), Path ),
8120         ], info_str=(Path, "Create Directory: %s", ", %s"))
8121         pkt.Reply(8)
8122         pkt.CompletionCodes([0x0000, 0x8400, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8123                              0x9e00, 0xa100, 0xfd00, 0xff00])
8124
8125         # 2222/160B, 22/11
8126         pkt = NCP(0x160B, "Delete Directory", 'fileserver')
8127         pkt.Request((13,267), [
8128                 rec( 10, 1, DirHandle ),
8129                 rec( 11, 1, Reserved ),
8130                 rec( 12, (1, 255), Path ),
8131         ], info_str=(Path, "Delete Directory: %s", ", %s"))
8132         pkt.Reply(8)
8133         pkt.CompletionCodes([0x0000, 0x8a00, 0x9600, 0x9804, 0x9b03, 0x9c03,
8134                              0x9f00, 0xa000, 0xa100, 0xfd00, 0xff00])
8135
8136         # 2222/160C, 22/12
8137         pkt = NCP(0x160C, "Scan Directory for Trustees", 'fileserver')
8138         pkt.Request((13,267), [
8139                 rec( 10, 1, DirHandle ),
8140                 rec( 11, 1, TrusteeSetNumber ),
8141                 rec( 12, (1, 255), Path ),
8142         ], info_str=(Path, "Scan Directory for Trustees: %s", ", %s"))
8143         pkt.Reply(57, [
8144                 rec( 8, 16, DirectoryPath ),
8145                 rec( 24, 2, CreationDate, BE ),
8146                 rec( 26, 2, CreationTime, BE ),
8147                 rec( 28, 4, CreatorID ),
8148                 rec( 32, 4, TrusteeID, BE ),
8149                 rec( 36, 4, TrusteeID, BE ),
8150                 rec( 40, 4, TrusteeID, BE ),
8151                 rec( 44, 4, TrusteeID, BE ),
8152                 rec( 48, 4, TrusteeID, BE ),
8153                 rec( 52, 1, AccessRightsMask ),
8154                 rec( 53, 1, AccessRightsMask ),
8155                 rec( 54, 1, AccessRightsMask ),
8156                 rec( 55, 1, AccessRightsMask ),
8157                 rec( 56, 1, AccessRightsMask ),
8158         ])
8159         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c03,
8160                              0xa100, 0xfd00, 0xff00])
8161
8162         # 2222/160D, 22/13
8163         pkt = NCP(0x160D, "Add Trustee to Directory", 'fileserver')
8164         pkt.Request((17,271), [
8165                 rec( 10, 1, DirHandle ),
8166                 rec( 11, 4, TrusteeID, BE ),
8167                 rec( 15, 1, AccessRightsMask ),
8168                 rec( 16, (1, 255), Path ),
8169         ], info_str=(Path, "Add Trustee to Directory: %s", ", %s"))
8170         pkt.Reply(8)
8171         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8172                              0xa100, 0xfc06, 0xfd00, 0xff00])
8173
8174         # 2222/160E, 22/14
8175         pkt = NCP(0x160E, "Delete Trustee from Directory", 'fileserver')
8176         pkt.Request((17,271), [
8177                 rec( 10, 1, DirHandle ),
8178                 rec( 11, 4, TrusteeID, BE ),
8179                 rec( 15, 1, Reserved ),
8180                 rec( 16, (1, 255), Path ),
8181         ], info_str=(Path, "Delete Trustee from Directory: %s", ", %s"))
8182         pkt.Reply(8)
8183         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8184                              0xa100, 0xfc06, 0xfd00, 0xfe07, 0xff00])
8185
8186         # 2222/160F, 22/15
8187         pkt = NCP(0x160F, "Rename Directory", 'fileserver')
8188         pkt.Request((13, 521), [
8189                 rec( 10, 1, DirHandle ),
8190                 rec( 11, (1, 255), Path ),
8191                 rec( -1, (1, 255), NewPath ),
8192         ], info_str=(Path, "Rename Directory: %s", ", %s"))
8193         pkt.Reply(8)
8194         pkt.CompletionCodes([0x0000, 0x8b00, 0x9200, 0x9600, 0x9804, 0x9b03, 0x9c03,
8195                              0x9e00, 0xa100, 0xef00, 0xfd00, 0xff00])
8196                                                                         
8197         # 2222/1610, 22/16
8198         pkt = NCP(0x1610, "Purge Erased Files", 'file')
8199         pkt.Request(10)
8200         pkt.Reply(8)
8201         pkt.CompletionCodes([0x0000, 0x8100, 0x9600, 0x9804, 0xa100, 0xff00])
8202
8203         # 2222/1611, 22/17
8204         pkt = NCP(0x1611, "Recover Erased File", 'fileserver')
8205         pkt.Request(11, [
8206                 rec( 10, 1, DirHandle ),
8207         ],info_str=(DirHandle, "Recover Erased File from Directory Handle %d", ", %d"))
8208         pkt.Reply(38, [
8209                 rec( 8, 15, OldFileName ),
8210                 rec( 23, 15, NewFileName ),
8211         ])
8212         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03,
8213                              0xa100, 0xfd00, 0xff00])
8214         # 2222/1612, 22/18
8215         pkt = NCP(0x1612, "Alloc Permanent Directory Handle", 'fileserver')
8216         pkt.Request((13, 267), [
8217                 rec( 10, 1, DirHandle ),
8218                 rec( 11, 1, DirHandleName ),
8219                 rec( 12, (1,255), Path ),
8220         ], info_str=(Path, "Allocate Permanent Directory Handle: %s", ", %s"))
8221         pkt.Reply(10, [
8222                 rec( 8, 1, DirHandle ),
8223                 rec( 9, 1, AccessRightsMask ),
8224         ])
8225         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8226                              0xa100, 0xfd00, 0xff00])
8227         # 2222/1613, 22/19
8228         pkt = NCP(0x1613, "Alloc Temporary Directory Handle", 'fileserver')
8229         pkt.Request((13, 267), [
8230                 rec( 10, 1, DirHandle ),
8231                 rec( 11, 1, DirHandleName ),
8232                 rec( 12, (1,255), Path ),
8233         ], info_str=(Path, "Allocate Temporary Directory Handle: %s", ", %s"))
8234         pkt.Reply(10, [
8235                 rec( 8, 1, DirHandle ),
8236                 rec( 9, 1, AccessRightsMask ),
8237         ])
8238         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8239                              0xa100, 0xfd00, 0xff00])
8240         # 2222/1614, 22/20
8241         pkt = NCP(0x1614, "Deallocate Directory Handle", 'fileserver')
8242         pkt.Request(11, [
8243                 rec( 10, 1, DirHandle ),
8244         ],info_str=(DirHandle, "Deallocate Directory Handle %d", ", %d"))
8245         pkt.Reply(8)
8246         pkt.CompletionCodes([0x0000, 0x9b03])
8247         # 2222/1615, 22/21
8248         pkt = NCP(0x1615, "Get Volume Info with Handle", 'file')
8249         pkt.Request( 11, [
8250                 rec( 10, 1, DirHandle )
8251         ],info_str=(DirHandle, "Get Volume Information with Handle %d", ", %d"))
8252         pkt.Reply( 36, [
8253                 rec( 8, 2, SectorsPerCluster, BE ),
8254                 rec( 10, 2, TotalVolumeClusters, BE ),
8255                 rec( 12, 2, AvailableClusters, BE ),
8256                 rec( 14, 2, TotalDirectorySlots, BE ),
8257                 rec( 16, 2, AvailableDirectorySlots, BE ),
8258                 rec( 18, 16, VolumeName ),
8259                 rec( 34, 2, RemovableFlag, BE ),
8260         ])
8261         pkt.CompletionCodes([0x0000, 0xff00])
8262         # 2222/1616, 22/22
8263         pkt = NCP(0x1616, "Alloc Special Temporary Directory Handle", 'fileserver')
8264         pkt.Request((13, 267), [
8265                 rec( 10, 1, DirHandle ),
8266                 rec( 11, 1, DirHandleName ),
8267                 rec( 12, (1,255), Path ),
8268         ], info_str=(Path, "Allocate Special Temporary Directory Handle: %s", ", %s"))
8269         pkt.Reply(10, [
8270                 rec( 8, 1, DirHandle ),
8271                 rec( 9, 1, AccessRightsMask ),
8272         ])
8273         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8274                              0xa100, 0xfd00, 0xff00])
8275         # 2222/1617, 22/23
8276         pkt = NCP(0x1617, "Extract a Base Handle", 'fileserver')
8277         pkt.Request(11, [
8278                 rec( 10, 1, DirHandle ),
8279         ],info_str=(DirHandle, "Extract a Base Handle from Directory Handle %d", ", %d"))
8280         pkt.Reply(22, [
8281                 rec( 8, 10, ServerNetworkAddress ),
8282                 rec( 18, 4, DirHandleLong ),
8283         ])
8284         pkt.CompletionCodes([0x0000, 0x9600, 0x9b03])
8285         # 2222/1618, 22/24
8286         pkt = NCP(0x1618, "Restore an Extracted Base Handle", 'fileserver')
8287         pkt.Request(24, [
8288                 rec( 10, 10, ServerNetworkAddress ),
8289                 rec( 20, 4, DirHandleLong ),
8290         ])
8291         pkt.Reply(10, [
8292                 rec( 8, 1, DirHandle ),
8293                 rec( 9, 1, AccessRightsMask ),
8294         ])
8295         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c00, 0x9d00, 0xa100,
8296                              0xfd00, 0xff00])
8297         # 2222/1619, 22/25
8298         pkt = NCP(0x1619, "Set Directory Information", 'fileserver')
8299         pkt.Request((21, 275), [
8300                 rec( 10, 1, DirHandle ),
8301                 rec( 11, 2, CreationDate ),
8302                 rec( 13, 2, CreationTime ),
8303                 rec( 15, 4, CreatorID, BE ),
8304                 rec( 19, 1, AccessRightsMask ),
8305                 rec( 20, (1,255), Path ),
8306         ], info_str=(Path, "Set Directory Information: %s", ", %s"))
8307         pkt.Reply(8)
8308         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c00, 0xa100,
8309                              0xff16])
8310         # 2222/161A, 22/26
8311         pkt = NCP(0x161A, "Get Path Name of a Volume-Directory Number Pair", 'fileserver')
8312         pkt.Request(13, [
8313                 rec( 10, 1, VolumeNumber ),
8314                 rec( 11, 2, DirectoryEntryNumberWord ),
8315         ])
8316         pkt.Reply((9,263), [
8317                 rec( 8, (1,255), Path ),
8318                 ])
8319         pkt.CompletionCodes([0x0000, 0x9804, 0x9c00, 0xa100])
8320         # 2222/161B, 22/27
8321         pkt = NCP(0x161B, "Scan Salvageable Files", 'fileserver')
8322         pkt.Request(15, [
8323                 rec( 10, 1, DirHandle ),
8324                 rec( 11, 4, SequenceNumber ),
8325         ])
8326         pkt.Reply(140, [
8327                 rec( 8, 4, SequenceNumber ),
8328                 rec( 12, 2, Subdirectory ),
8329                 rec( 14, 2, Reserved2 ),
8330                 rec( 16, 4, AttributesDef32 ),
8331                 rec( 20, 1, UniqueID ),
8332                 rec( 21, 1, FlagsDef ),
8333                 rec( 22, 1, DestNameSpace ),
8334                 rec( 23, 1, FileNameLen ),
8335                 rec( 24, 12, FileName12 ),
8336                 rec( 36, 2, CreationTime ),
8337                 rec( 38, 2, CreationDate ),
8338                 rec( 40, 4, CreatorID, BE ),
8339                 rec( 44, 2, ArchivedTime ),
8340                 rec( 46, 2, ArchivedDate ),
8341                 rec( 48, 4, ArchiverID, BE ),
8342                 rec( 52, 2, UpdateTime ),
8343                 rec( 54, 2, UpdateDate ),
8344                 rec( 56, 4, UpdateID, BE ),
8345                 rec( 60, 4, FileSize, BE ),
8346                 rec( 64, 44, Reserved44 ),
8347                 rec( 108, 2, InheritedRightsMask ),
8348                 rec( 110, 2, LastAccessedDate ),
8349                 rec( 112, 4, DeletedFileTime ),
8350                 rec( 116, 2, DeletedTime ),
8351                 rec( 118, 2, DeletedDate ),
8352                 rec( 120, 4, DeletedID, BE ),
8353                 rec( 124, 16, Reserved16 ),
8354         ])
8355         pkt.CompletionCodes([0x0000, 0xfb01, 0xff1d])
8356         # 2222/161C, 22/28
8357         pkt = NCP(0x161C, "Recover Salvageable File", 'fileserver')
8358         pkt.Request((17,525), [
8359                 rec( 10, 1, DirHandle ),
8360                 rec( 11, 4, SequenceNumber ),
8361                 rec( 15, (1, 255), FileName ),
8362                 rec( -1, (1, 255), NewFileNameLen ),
8363         ], info_str=(FileName, "Recover File: %s", ", %s"))
8364         pkt.Reply(8)
8365         pkt.CompletionCodes([0x0000, 0x8401, 0x9c03, 0xfe02])
8366         # 2222/161D, 22/29
8367         pkt = NCP(0x161D, "Purge Salvageable File", 'fileserver')
8368         pkt.Request(15, [
8369                 rec( 10, 1, DirHandle ),
8370                 rec( 11, 4, SequenceNumber ),
8371         ])
8372         pkt.Reply(8)
8373         pkt.CompletionCodes([0x0000, 0x8500, 0x9c03])
8374         # 2222/161E, 22/30
8375         pkt = NCP(0x161E, "Scan a Directory", 'fileserver')
8376         pkt.Request((17, 271), [
8377                 rec( 10, 1, DirHandle ),
8378                 rec( 11, 1, DOSFileAttributes ),
8379                 rec( 12, 4, SequenceNumber ),
8380                 rec( 16, (1, 255), SearchPattern ),
8381         ], info_str=(SearchPattern, "Scan a Directory: %s", ", %s"))
8382         pkt.Reply(140, [
8383                 rec( 8, 4, SequenceNumber ),
8384                 rec( 12, 4, Subdirectory ),
8385                 rec( 16, 4, AttributesDef32 ),
8386                 rec( 20, 1, UniqueID, LE ),
8387                 rec( 21, 1, PurgeFlags ),
8388                 rec( 22, 1, DestNameSpace ),
8389                 rec( 23, 1, NameLen ),
8390                 rec( 24, 12, Name12 ),
8391                 rec( 36, 2, CreationTime ),
8392                 rec( 38, 2, CreationDate ),
8393                 rec( 40, 4, CreatorID, BE ),
8394                 rec( 44, 2, ArchivedTime ),
8395                 rec( 46, 2, ArchivedDate ),
8396                 rec( 48, 4, ArchiverID, BE ),
8397                 rec( 52, 2, UpdateTime ),
8398                 rec( 54, 2, UpdateDate ),
8399                 rec( 56, 4, UpdateID, BE ),
8400                 rec( 60, 4, FileSize, BE ),
8401                 rec( 64, 44, Reserved44 ),
8402                 rec( 108, 2, InheritedRightsMask ),
8403                 rec( 110, 2, LastAccessedDate ),
8404                 rec( 112, 28, Reserved28 ),
8405         ])
8406         pkt.CompletionCodes([0x0000, 0x8500, 0x9c03])
8407         # 2222/161F, 22/31
8408         pkt = NCP(0x161F, "Get Directory Entry", 'fileserver')
8409         pkt.Request(11, [
8410                 rec( 10, 1, DirHandle ),
8411         ])
8412         pkt.Reply(136, [
8413                 rec( 8, 4, Subdirectory ),
8414                 rec( 12, 4, AttributesDef32 ),
8415                 rec( 16, 1, UniqueID, LE ),
8416                 rec( 17, 1, PurgeFlags ),
8417                 rec( 18, 1, DestNameSpace ),
8418                 rec( 19, 1, NameLen ),
8419                 rec( 20, 12, Name12 ),
8420                 rec( 32, 2, CreationTime ),
8421                 rec( 34, 2, CreationDate ),
8422                 rec( 36, 4, CreatorID, BE ),
8423                 rec( 40, 2, ArchivedTime ),
8424                 rec( 42, 2, ArchivedDate ), 
8425                 rec( 44, 4, ArchiverID, BE ),
8426                 rec( 48, 2, UpdateTime ),
8427                 rec( 50, 2, UpdateDate ),
8428                 rec( 52, 4, NextTrusteeEntry, BE ),
8429                 rec( 56, 48, Reserved48 ),
8430                 rec( 104, 2, MaximumSpace ),
8431                 rec( 106, 2, InheritedRightsMask ),
8432                 rec( 108, 28, Undefined28 ),
8433         ])
8434         pkt.CompletionCodes([0x0000, 0x8900, 0xbf00, 0xfb00])
8435         # 2222/1620, 22/32
8436         pkt = NCP(0x1620, "Scan Volume's User Disk Restrictions", 'fileserver')
8437         pkt.Request(15, [
8438                 rec( 10, 1, VolumeNumber ),
8439                 rec( 11, 4, SequenceNumber ),
8440         ])
8441         pkt.Reply(17, [
8442                 rec( 8, 1, NumberOfEntries, var="x" ),
8443                 rec( 9, 8, ObjectIDStruct, repeat="x" ),
8444         ])
8445         pkt.CompletionCodes([0x0000, 0x9800])
8446         # 2222/1621, 22/33
8447         pkt = NCP(0x1621, "Add User Disk Space Restriction", 'fileserver')
8448         pkt.Request(19, [
8449                 rec( 10, 1, VolumeNumber ),
8450                 rec( 11, 4, ObjectID ),
8451                 rec( 15, 4, DiskSpaceLimit ),
8452         ])
8453         pkt.Reply(8)
8454         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9800])
8455         # 2222/1622, 22/34
8456         pkt = NCP(0x1622, "Remove User Disk Space Restrictions", 'fileserver')
8457         pkt.Request(15, [
8458                 rec( 10, 1, VolumeNumber ),
8459                 rec( 11, 4, ObjectID ),
8460         ])
8461         pkt.Reply(8)
8462         pkt.CompletionCodes([0x0000, 0x8c00, 0xfe0e])
8463         # 2222/1623, 22/35
8464         pkt = NCP(0x1623, "Get Directory Disk Space Restriction", 'fileserver')
8465         pkt.Request(11, [
8466                 rec( 10, 1, DirHandle ),
8467         ])
8468         pkt.Reply(18, [
8469                 rec( 8, 1, NumberOfEntries ),
8470                 rec( 9, 1, Level ),
8471                 rec( 10, 4, MaxSpace ),
8472                 rec( 14, 4, CurrentSpace ),
8473         ])
8474         pkt.CompletionCodes([0x0000])
8475         # 2222/1624, 22/36
8476         pkt = NCP(0x1624, "Set Directory Disk Space Restriction", 'fileserver')
8477         pkt.Request(15, [
8478                 rec( 10, 1, DirHandle ),
8479                 rec( 11, 4, DiskSpaceLimit ),
8480         ])
8481         pkt.Reply(8)
8482         pkt.CompletionCodes([0x0000, 0x0101, 0x8c00, 0xbf00])
8483         # 2222/1625, 22/37
8484         pkt = NCP(0x1625, "Set Directory Entry Information", 'fileserver')
8485         pkt.Request(NO_LENGTH_CHECK, [
8486                 rec( 10, 1, DirHandle ),
8487                 rec( 11, 2, SearchAttributesLow ),
8488                 rec( 13, 4, SequenceNumber ),
8489                 rec( 17, 2, ChangeBits ),
8490                 rec( 19, 2, Reserved2 ),
8491                 rec( 21, 4, Subdirectory ),
8492                 srec(DOSDirectoryEntryStruct, req_cond="ncp.search_att_sub == TRUE"),
8493                 srec(DOSFileEntryStruct, req_cond="ncp.search_att_sub == FALSE"),
8494         ])
8495         pkt.Reply(8)
8496         pkt.ReqCondSizeConstant()
8497         pkt.CompletionCodes([0x0000, 0x0106, 0x8c00, 0xbf00])
8498         # 2222/1626, 22/38
8499         pkt = NCP(0x1626, "Scan File or Directory for Extended Trustees", 'fileserver')
8500         pkt.Request((13,267), [
8501                 rec( 10, 1, DirHandle ),
8502                 rec( 11, 1, SequenceByte ),
8503                 rec( 12, (1, 255), Path ),
8504         ], info_str=(Path, "Scan for Extended Trustees: %s", ", %s"))
8505         pkt.Reply(91, [
8506                 rec( 8, 1, NumberOfEntries, var="x" ),
8507                 rec( 9, 4, ObjectID ),
8508                 rec( 13, 4, ObjectID ),
8509                 rec( 17, 4, ObjectID ),
8510                 rec( 21, 4, ObjectID ),
8511                 rec( 25, 4, ObjectID ),
8512                 rec( 29, 4, ObjectID ),
8513                 rec( 33, 4, ObjectID ),
8514                 rec( 37, 4, ObjectID ),
8515                 rec( 41, 4, ObjectID ),
8516                 rec( 45, 4, ObjectID ),
8517                 rec( 49, 4, ObjectID ),
8518                 rec( 53, 4, ObjectID ),
8519                 rec( 57, 4, ObjectID ),
8520                 rec( 61, 4, ObjectID ),
8521                 rec( 65, 4, ObjectID ),
8522                 rec( 69, 4, ObjectID ),
8523                 rec( 73, 4, ObjectID ),
8524                 rec( 77, 4, ObjectID ),
8525                 rec( 81, 4, ObjectID ),
8526                 rec( 85, 4, ObjectID ),
8527                 rec( 89, 2, AccessRightsMaskWord, repeat="x" ),
8528         ])
8529         pkt.CompletionCodes([0x0000, 0x9800, 0x9b00, 0x9c00])
8530         # 2222/1627, 22/39
8531         pkt = NCP(0x1627, "Add Extended Trustee to Directory or File", 'fileserver')
8532         pkt.Request((18,272), [
8533                 rec( 10, 1, DirHandle ),
8534                 rec( 11, 4, ObjectID, BE ),
8535                 rec( 15, 2, TrusteeRights ),
8536                 rec( 17, (1, 255), Path ),
8537         ], info_str=(Path, "Add Extended Trustee: %s", ", %s"))
8538         pkt.Reply(8)
8539         pkt.CompletionCodes([0x0000, 0x9000])
8540         # 2222/1628, 22/40
8541         pkt = NCP(0x1628, "Scan Directory Disk Space", 'fileserver')
8542         pkt.Request((15,269), [
8543                 rec( 10, 1, DirHandle ),
8544                 rec( 11, 2, SearchAttributesLow ),
8545                 rec( 13, 1, SequenceByte ),
8546                 rec( 14, (1, 255), SearchPattern ),
8547         ], info_str=(SearchPattern, "Scan Directory Disk Space: %s", ", %s"))
8548         pkt.Reply((148), [
8549                 rec( 8, 4, SequenceNumber ),
8550                 rec( 12, 4, Subdirectory ),
8551                 rec( 16, 4, AttributesDef32 ),
8552                 rec( 20, 1, UniqueID ),
8553                 rec( 21, 1, PurgeFlags ),
8554                 rec( 22, 1, DestNameSpace ),
8555                 rec( 23, 1, NameLen ),
8556                 rec( 24, 12, Name12 ),
8557                 rec( 36, 2, CreationTime ),
8558                 rec( 38, 2, CreationDate ),
8559                 rec( 40, 4, CreatorID, BE ),
8560                 rec( 44, 2, ArchivedTime ),
8561                 rec( 46, 2, ArchivedDate ),
8562                 rec( 48, 4, ArchiverID, BE ),
8563                 rec( 52, 2, UpdateTime ),
8564                 rec( 54, 2, UpdateDate ),
8565                 rec( 56, 4, UpdateID, BE ),
8566                 rec( 60, 4, DataForkSize, BE ),
8567                 rec( 64, 4, DataForkFirstFAT, BE ),
8568                 rec( 68, 4, NextTrusteeEntry, BE ),
8569                 rec( 72, 36, Reserved36 ),
8570                 rec( 108, 2, InheritedRightsMask ),
8571                 rec( 110, 2, LastAccessedDate ),
8572                 rec( 112, 4, DeletedFileTime ),
8573                 rec( 116, 2, DeletedTime ),
8574                 rec( 118, 2, DeletedDate ),
8575                 rec( 120, 4, DeletedID, BE ),
8576                 rec( 124, 8, Undefined8 ),
8577                 rec( 132, 4, PrimaryEntry, LE ),
8578                 rec( 136, 4, NameList, LE ),
8579                 rec( 140, 4, OtherFileForkSize, BE ),
8580                 rec( 144, 4, OtherFileForkFAT, BE ),
8581         ])
8582         pkt.CompletionCodes([0x0000, 0x8900, 0x9c03, 0xfb01, 0xff00])
8583         # 2222/1629, 22/41
8584         pkt = NCP(0x1629, "Get Object Disk Usage and Restrictions", 'fileserver')
8585         pkt.Request(15, [
8586                 rec( 10, 1, VolumeNumber ),
8587                 rec( 11, 4, ObjectID, BE ),
8588         ])
8589         pkt.Reply(16, [
8590                 rec( 8, 4, Restriction ),
8591                 rec( 12, 4, InUse ),
8592         ])
8593         pkt.CompletionCodes([0x0000, 0x9802])
8594         # 2222/162A, 22/42
8595         pkt = NCP(0x162A, "Get Effective Rights for Directory Entry", 'fileserver')
8596         pkt.Request((12,266), [
8597                 rec( 10, 1, DirHandle ),
8598                 rec( 11, (1, 255), Path ),
8599         ], info_str=(Path, "Get Effective Rights: %s", ", %s"))
8600         pkt.Reply(10, [
8601                 rec( 8, 2, AccessRightsMaskWord ),
8602         ])
8603         pkt.CompletionCodes([0x0000, 0x9804, 0x9c03])
8604         # 2222/162B, 22/43
8605         pkt = NCP(0x162B, "Remove Extended Trustee from Dir or File", 'fileserver')
8606         pkt.Request((17,271), [
8607                 rec( 10, 1, DirHandle ),
8608                 rec( 11, 4, ObjectID, BE ),
8609                 rec( 15, 1, Unused ),
8610                 rec( 16, (1, 255), Path ),
8611         ], info_str=(Path, "Remove Extended Trustee from %s", ", %s"))
8612         pkt.Reply(8)
8613         pkt.CompletionCodes([0x0000, 0x9002, 0x9c03, 0xfe0f, 0xff09])
8614         # 2222/162C, 22/44
8615         pkt = NCP(0x162C, "Get Volume and Purge Information", 'file')
8616         pkt.Request( 11, [
8617                 rec( 10, 1, VolumeNumber )
8618         ],info_str=(VolumeNumber, "Get Volume and Purge Information for Volume %d", ", %d"))
8619         pkt.Reply( (38,53), [
8620                 rec( 8, 4, TotalBlocks ),
8621                 rec( 12, 4, FreeBlocks ),
8622                 rec( 16, 4, PurgeableBlocks ),
8623                 rec( 20, 4, NotYetPurgeableBlocks ),
8624                 rec( 24, 4, TotalDirectoryEntries ),
8625                 rec( 28, 4, AvailableDirEntries ),
8626                 rec( 32, 4, Reserved4 ),
8627                 rec( 36, 1, SectorsPerBlock ),
8628                 rec( 37, (1,16), VolumeNameLen ),
8629         ])
8630         pkt.CompletionCodes([0x0000])
8631         # 2222/162D, 22/45
8632         pkt = NCP(0x162D, "Get Directory Information", 'file')
8633         pkt.Request( 11, [
8634                 rec( 10, 1, DirHandle )
8635         ])
8636         pkt.Reply( (30, 45), [
8637                 rec( 8, 4, TotalBlocks ),
8638                 rec( 12, 4, AvailableBlocks ),
8639                 rec( 16, 4, TotalDirectoryEntries ),
8640                 rec( 20, 4, AvailableDirEntries ),
8641                 rec( 24, 4, Reserved4 ),
8642                 rec( 28, 1, SectorsPerBlock ),
8643                 rec( 29, (1,16), VolumeNameLen ),
8644         ])
8645         pkt.CompletionCodes([0x0000, 0x9b03])
8646         # 2222/162E, 22/46
8647         pkt = NCP(0x162E, "Rename Or Move", 'file')
8648         pkt.Request( (17,525), [
8649                 rec( 10, 1, SourceDirHandle ),
8650                 rec( 11, 1, SearchAttributesLow ),
8651                 rec( 12, 1, SourcePathComponentCount ),
8652                 rec( 13, (1,255), SourcePath ),
8653                 rec( -1, 1, DestDirHandle ),
8654                 rec( -1, 1, DestPathComponentCount ),
8655                 rec( -1, (1,255), DestPath ),
8656         ], info_str=(SourcePath, "Rename or Move: %s", ", %s"))
8657         pkt.Reply(8)
8658         pkt.CompletionCodes([0x0000, 0x0102, 0x8701, 0x8b00, 0x8d00, 0x8e00,
8659                              0x8f00, 0x9001, 0x9101, 0x9201, 0x9a00, 0x9b03,
8660                              0x9c03, 0xa400, 0xff17])
8661         # 2222/162F, 22/47
8662         pkt = NCP(0x162F, "Get Name Space Information", 'file')
8663         pkt.Request( 11, [
8664                 rec( 10, 1, VolumeNumber )
8665         ],info_str=(VolumeNumber, "Get Name Space Information for Volume %d", ", %d"))
8666         pkt.Reply( (13,521), [
8667                 rec( 8, 1, DefinedNameSpaces ),
8668                 #
8669                 # XXX - there's actually a sequence of DefinedNameSpaces
8670                 # NameSpaceNames here, not just one.
8671                 #
8672                 rec( 9, (1,255), NameSpaceName ),
8673                 rec( -1, 1, DefinedDataStreams ),
8674                 rec( -1, 1, AssociatedNameSpace ),
8675                 #
8676                 # XXX - there's actually a sequence of DefinedDataStreams
8677                 # DataStreamNames here, not just one.
8678                 #
8679                 rec( -1, (1,255), DataStreamName ),
8680         ])
8681         pkt.CompletionCodes([0x0000])
8682         # 2222/1630, 22/48
8683         pkt = NCP(0x1630, "Get Name Space Directory Entry", 'file')
8684         pkt.Request( 16, [
8685                 rec( 10, 1, VolumeNumber ),
8686                 rec( 11, 4, DOSSequence ),
8687                 rec( 15, 1, SrcNameSpace ),
8688         ])
8689         pkt.Reply( 112, [
8690                 rec( 8, 4, SequenceNumber ),
8691                 rec( 12, 4, Subdirectory ),
8692                 rec( 16, 4, AttributesDef32 ),
8693                 rec( 20, 1, UniqueID ),
8694                 rec( 21, 1, Flags ),
8695                 rec( 22, 1, SrcNameSpace ),
8696                 rec( 23, 1, NameLength ),
8697                 rec( 24, 12, Name12 ),
8698                 rec( 36, 2, CreationTime ),
8699                 rec( 38, 2, CreationDate ),
8700                 rec( 40, 4, CreatorID, BE ),
8701                 rec( 44, 2, ArchivedTime ),
8702                 rec( 46, 2, ArchivedDate ),
8703                 rec( 48, 4, ArchiverID ),
8704                 rec( 52, 2, UpdateTime ),
8705                 rec( 54, 2, UpdateDate ),
8706                 rec( 56, 4, UpdateID ),
8707                 rec( 60, 4, FileSize ),
8708                 rec( 64, 44, Reserved44 ),
8709                 rec( 108, 2, InheritedRightsMask ),
8710                 rec( 110, 2, LastAccessedDate ),
8711         ])
8712         pkt.CompletionCodes([0x0000, 0x8900, 0x9802, 0xbf00])
8713         # 2222/1631, 22/49
8714         pkt = NCP(0x1631, "Open Data Stream", 'file')
8715         pkt.Request( (15,269), [
8716                 rec( 10, 1, DataStream ),
8717                 rec( 11, 1, DirHandle ),
8718                 rec( 12, 1, AttributesDef ),
8719                 rec( 13, 1, OpenRights ),
8720                 rec( 14, (1, 255), FileName ),
8721         ], info_str=(FileName, "Open Data Stream: %s", ", %s"))
8722         pkt.Reply( 12, [
8723                 rec( 8, 4, CCFileHandle, BE ),
8724         ])
8725         pkt.CompletionCodes([0x0000, 0x8000, 0x8200, 0x9002, 0xbe00, 0xff00])
8726         # 2222/1632, 22/50
8727         pkt = NCP(0x1632, "Get Object Effective Rights for Directory Entry", 'file')
8728         pkt.Request( (16,270), [
8729                 rec( 10, 4, ObjectID, BE ),
8730                 rec( 14, 1, DirHandle ),
8731                 rec( 15, (1, 255), Path ),
8732         ], info_str=(Path, "Get Object Effective Rights: %s", ", %s"))
8733         pkt.Reply( 10, [
8734                 rec( 8, 2, TrusteeRights ),
8735         ])
8736         pkt.CompletionCodes([0x0000, 0x7e01, 0x9b00, 0x9c03])
8737         # 2222/1633, 22/51
8738         pkt = NCP(0x1633, "Get Extended Volume Information", 'file')
8739         pkt.Request( 11, [
8740                 rec( 10, 1, VolumeNumber ),
8741         ],info_str=(VolumeNumber, "Get Extended Volume Information for Volume %d", ", %d"))
8742         pkt.Reply( (139,266), [
8743                 rec( 8, 2, VolInfoReplyLen ),
8744                 rec( 10, 128, VolInfoStructure),
8745                 rec( 138, (1,128), VolumeNameLen ),
8746         ])
8747         pkt.CompletionCodes([0x0000, 0x7e01, 0x9804, 0xfb08, 0xff00])
8748         # 2222/1634, 22/52
8749         pkt = NCP(0x1634, "Get Mount Volume List", 'file')
8750         pkt.Request( 22, [
8751                 rec( 10, 4, StartVolumeNumber ),
8752                 rec( 14, 4, VolumeRequestFlags, LE ),
8753                 rec( 18, 4, SrcNameSpace ),
8754         ])
8755         pkt.Reply( 34, [
8756                 rec( 8, 4, ItemsInPacket, var="x" ),
8757                 rec( 12, 4, NextVolumeNumber ),
8758                 rec( 16, 18, VolumeStruct, repeat="x"),
8759         ])
8760         pkt.CompletionCodes([0x0000])
8761         # 2222/1700, 23/00
8762         pkt = NCP(0x1700, "Login User", 'file')
8763         pkt.Request( (12, 58), [
8764                 rec( 10, (1,16), UserName ),
8765                 rec( -1, (1,32), Password ),
8766         ], info_str=(UserName, "Login User: %s", ", %s"))
8767         pkt.Reply(8)
8768         pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc501, 0xd700,
8769                              0xd900, 0xda00, 0xdb00, 0xde00, 0xdf00, 0xe800,
8770                              0xec00, 0xed00, 0xef00, 0xf001, 0xf100, 0xf200,
8771                              0xf600, 0xfb00, 0xfc06, 0xfe07, 0xff00])
8772         # 2222/1701, 23/01
8773         pkt = NCP(0x1701, "Change User Password", 'file')
8774         pkt.Request( (13, 90), [
8775                 rec( 10, (1,16), UserName ),
8776                 rec( -1, (1,32), Password ),
8777                 rec( -1, (1,32), NewPassword ),
8778         ], info_str=(UserName, "Change Password for User: %s", ", %s"))
8779         pkt.Reply(8)
8780         pkt.CompletionCodes([0x0000, 0x9600, 0xd600, 0xf001, 0xf101, 0xf501,
8781                              0xfc06, 0xfe07, 0xff00])
8782         # 2222/1702, 23/02
8783         pkt = NCP(0x1702, "Get User Connection List", 'file')
8784         pkt.Request( (11, 26), [
8785                 rec( 10, (1,16), UserName ),
8786         ], info_str=(UserName, "Get User Connection: %s", ", %s"))
8787         pkt.Reply( (9, 136), [
8788                 rec( 8, (1, 128), ConnectionNumberList ),
8789         ])
8790         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
8791         # 2222/1703, 23/03
8792         pkt = NCP(0x1703, "Get User Number", 'file')
8793         pkt.Request( (11, 26), [
8794                 rec( 10, (1,16), UserName ),
8795         ], info_str=(UserName, "Get User Number: %s", ", %s"))
8796         pkt.Reply( 12, [
8797                 rec( 8, 4, ObjectID, BE ),
8798         ])
8799         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
8800         # 2222/1705, 23/05
8801         pkt = NCP(0x1705, "Get Station's Logged Info", 'file')
8802         pkt.Request( 11, [
8803                 rec( 10, 1, TargetConnectionNumber ),
8804         ],info_str=(TargetConnectionNumber, "Get Station's Logged Information on Connection %d", ", %d")) 
8805         pkt.Reply( 266, [
8806                 rec( 8, 16, UserName16 ),
8807                 rec( 24, 7, LoginTime ),
8808                 rec( 31, 39, FullName ),
8809                 rec( 70, 4, UserID, BE ),
8810                 rec( 74, 128, SecurityEquivalentList ),
8811                 rec( 202, 64, Reserved64 ),
8812         ])
8813         pkt.CompletionCodes([0x0000, 0x9602, 0xfc06, 0xfd00, 0xfe07, 0xff00])
8814         # 2222/1707, 23/07
8815         pkt = NCP(0x1707, "Get Group Number", 'file')
8816         pkt.Request( 14, [
8817                 rec( 10, 4, ObjectID, BE ),
8818         ])
8819         pkt.Reply( 62, [
8820                 rec( 8, 4, ObjectID, BE ),
8821                 rec( 12, 2, ObjectType, BE ),
8822                 rec( 14, 48, ObjectNameLen ),
8823         ])
8824         pkt.CompletionCodes([0x0000, 0x9602, 0xf101, 0xfc06, 0xfe07, 0xff00])
8825         # 2222/170C, 23/12
8826         pkt = NCP(0x170C, "Verify Serialization", 'file')
8827         pkt.Request( 14, [
8828                 rec( 10, 4, ServerSerialNumber ),
8829         ])
8830         pkt.Reply(8)
8831         pkt.CompletionCodes([0x0000, 0xff00])
8832         # 2222/170D, 23/13
8833         pkt = NCP(0x170D, "Log Network Message", 'file')
8834         pkt.Request( (11, 68), [
8835                 rec( 10, (1, 58), TargetMessage ),
8836         ], info_str=(TargetMessage, "Log Network Message: %s", ", %s"))
8837         pkt.Reply(8)
8838         pkt.CompletionCodes([0x0000, 0x8000, 0x8100, 0x8800, 0x8d00, 0x8e00, 0x8f00,
8839                              0x9001, 0x9400, 0x9600, 0x9804, 0x9900, 0x9b00, 0xa100,
8840                              0xa201, 0xff00])
8841         # 2222/170E, 23/14
8842         pkt = NCP(0x170E, "Get Disk Utilization", 'file')
8843         pkt.Request( 15, [
8844                 rec( 10, 1, VolumeNumber ),
8845                 rec( 11, 4, TrusteeID, BE ),
8846         ])
8847         pkt.Reply( 19, [
8848                 rec( 8, 1, VolumeNumber ),
8849                 rec( 9, 4, TrusteeID, BE ),
8850                 rec( 13, 2, DirectoryCount, BE ),
8851                 rec( 15, 2, FileCount, BE ),
8852                 rec( 17, 2, ClusterCount, BE ),
8853         ])
8854         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0xa100, 0xf200])
8855         # 2222/170F, 23/15
8856         pkt = NCP(0x170F, "Scan File Information", 'file')
8857         pkt.Request((15,269), [
8858                 rec( 10, 2, LastSearchIndex ),
8859                 rec( 12, 1, DirHandle ),
8860                 rec( 13, 1, SearchAttributesLow ),
8861                 rec( 14, (1, 255), FileName ),
8862         ], info_str=(FileName, "Scan File Information: %s", ", %s"))
8863         pkt.Reply( 102, [
8864                 rec( 8, 2, NextSearchIndex ),
8865                 rec( 10, 14, FileName14 ),
8866                 rec( 24, 2, AttributesDef16 ),
8867                 rec( 26, 4, FileSize, BE ),
8868                 rec( 30, 2, CreationDate, BE ),
8869                 rec( 32, 2, LastAccessedDate, BE ),
8870                 rec( 34, 2, ModifiedDate, BE ),
8871                 rec( 36, 2, ModifiedTime, BE ),
8872                 rec( 38, 4, CreatorID, BE ),
8873                 rec( 42, 2, ArchivedDate, BE ),
8874                 rec( 44, 2, ArchivedTime, BE ),
8875                 rec( 46, 56, Reserved56 ),
8876         ])
8877         pkt.CompletionCodes([0x0000, 0x8800, 0x8900, 0x9300, 0x9400, 0x9804, 0x9b00, 0x9c00,
8878                              0xa100, 0xfd00, 0xff17])
8879         # 2222/1710, 23/16
8880         pkt = NCP(0x1710, "Set File Information", 'file')
8881         pkt.Request((91,345), [
8882                 rec( 10, 2, AttributesDef16 ),
8883                 rec( 12, 4, FileSize, BE ),
8884                 rec( 16, 2, CreationDate, BE ),
8885                 rec( 18, 2, LastAccessedDate, BE ),
8886                 rec( 20, 2, ModifiedDate, BE ),
8887                 rec( 22, 2, ModifiedTime, BE ),
8888                 rec( 24, 4, CreatorID, BE ),
8889                 rec( 28, 2, ArchivedDate, BE ),
8890                 rec( 30, 2, ArchivedTime, BE ),
8891                 rec( 32, 56, Reserved56 ),
8892                 rec( 88, 1, DirHandle ),
8893                 rec( 89, 1, SearchAttributesLow ),
8894                 rec( 90, (1, 255), FileName ),
8895         ], info_str=(FileName, "Set Information for File: %s", ", %s"))
8896         pkt.Reply(8)
8897         pkt.CompletionCodes([0x0000, 0x8800, 0x8c00, 0x8e00, 0x9400, 0x9600, 0x9804,
8898                              0x9b03, 0x9c00, 0xa100, 0xa201, 0xfc06, 0xfd00, 0xfe07,
8899                              0xff17])
8900         # 2222/1711, 23/17
8901         pkt = NCP(0x1711, "Get File Server Information", 'fileserver')
8902         pkt.Request(10)
8903         pkt.Reply(136, [
8904                 rec( 8, 48, ServerName ),
8905                 rec( 56, 1, OSMajorVersion ),
8906                 rec( 57, 1, OSMinorVersion ),
8907                 rec( 58, 2, ConnectionsSupportedMax, BE ),
8908                 rec( 60, 2, ConnectionsInUse, BE ),
8909                 rec( 62, 2, VolumesSupportedMax, BE ),
8910                 rec( 64, 1, OSRevision ),
8911                 rec( 65, 1, SFTSupportLevel ),
8912                 rec( 66, 1, TTSLevel ),
8913                 rec( 67, 2, ConnectionsMaxUsed, BE ),
8914                 rec( 69, 1, AccountVersion ),
8915                 rec( 70, 1, VAPVersion ),
8916                 rec( 71, 1, QueueingVersion ),
8917                 rec( 72, 1, PrintServerVersion ),
8918                 rec( 73, 1, VirtualConsoleVersion ),
8919                 rec( 74, 1, SecurityRestrictionVersion ),
8920                 rec( 75, 1, InternetBridgeVersion ),
8921                 rec( 76, 1, MixedModePathFlag ),
8922                 rec( 77, 1, LocalLoginInfoCcode ),
8923                 rec( 78, 2, ProductMajorVersion, BE ),
8924                 rec( 80, 2, ProductMinorVersion, BE ),
8925                 rec( 82, 2, ProductRevisionVersion, BE ),
8926                 rec( 84, 1, OSLanguageID, LE ),
8927                 rec( 85, 51, Reserved51 ),
8928         ])
8929         pkt.CompletionCodes([0x0000, 0x9600])
8930         # 2222/1712, 23/18
8931         pkt = NCP(0x1712, "Get Network Serial Number", 'fileserver')
8932         pkt.Request(10)
8933         pkt.Reply(14, [
8934                 rec( 8, 4, ServerSerialNumber ),
8935                 rec( 12, 2, ApplicationNumber ),
8936         ])
8937         pkt.CompletionCodes([0x0000, 0x9600])
8938         # 2222/1713, 23/19
8939         pkt = NCP(0x1713, "Get Internet Address", 'fileserver')
8940         pkt.Request(11, [
8941                 rec( 10, 1, TargetConnectionNumber ),
8942         ],info_str=(TargetConnectionNumber, "Get Internet Address for Connection %d", ", %d"))
8943         pkt.Reply(20, [
8944                 rec( 8, 4, NetworkAddress, BE ),
8945                 rec( 12, 6, NetworkNodeAddress ),
8946                 rec( 18, 2, NetworkSocket, BE ),
8947         ])
8948         pkt.CompletionCodes([0x0000, 0xff00])
8949         # 2222/1714, 23/20
8950         pkt = NCP(0x1714, "Login Object", 'file')
8951         pkt.Request( (14, 60), [
8952                 rec( 10, 2, ObjectType, BE ),
8953                 rec( 12, (1,16), ClientName ),
8954                 rec( -1, (1,32), Password ),
8955         ], info_str=(UserName, "Login Object: %s", ", %s"))
8956         pkt.Reply(8)
8957         pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc501, 0xd600, 0xd700,
8958                              0xd900, 0xda00, 0xdb00, 0xde00, 0xdf00, 0xe800, 0xec00,
8959                              0xed00, 0xef00, 0xf001, 0xf100, 0xf200, 0xf600, 0xfb00,
8960                              0xfc06, 0xfe07, 0xff00])
8961         # 2222/1715, 23/21
8962         pkt = NCP(0x1715, "Get Object Connection List", 'file')
8963         pkt.Request( (13, 28), [
8964                 rec( 10, 2, ObjectType, BE ),
8965                 rec( 12, (1,16), ObjectName ),
8966         ], info_str=(UserName, "Get Object Connection List: %s", ", %s"))
8967         pkt.Reply( (9, 136), [
8968                 rec( 8, (1, 128), ConnectionNumberList ),
8969         ])
8970         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
8971         # 2222/1716, 23/22
8972         pkt = NCP(0x1716, "Get Station's Logged Info", 'file')
8973         pkt.Request( 11, [
8974                 rec( 10, 1, TargetConnectionNumber ),
8975         ])
8976         pkt.Reply( 70, [
8977                 rec( 8, 4, UserID, BE ),
8978                 rec( 12, 2, ObjectType, BE ),
8979                 rec( 14, 48, ObjectNameLen ),
8980                 rec( 62, 7, LoginTime ),       
8981                 rec( 69, 1, Reserved ),
8982         ])
8983         pkt.CompletionCodes([0x0000, 0x9602, 0xfb0a, 0xfc06, 0xfd00, 0xfe07, 0xff00])
8984         # 2222/1717, 23/23
8985         pkt = NCP(0x1717, "Get Login Key", 'file')
8986         pkt.Request(10)
8987         pkt.Reply( 16, [
8988                 rec( 8, 8, LoginKey ),
8989         ])
8990         pkt.CompletionCodes([0x0000, 0x9602])
8991         # 2222/1718, 23/24
8992         pkt = NCP(0x1718, "Keyed Object Login", 'file')
8993         pkt.Request( (21, 68), [
8994                 rec( 10, 8, LoginKey ),
8995                 rec( 18, 2, ObjectType, BE ),
8996                 rec( 20, (1,48), ObjectName ),
8997         ], info_str=(ObjectName, "Keyed Object Login: %s", ", %s"))
8998         pkt.Reply(8)
8999         pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc500, 0xd900, 0xda00,
9000                              0xdb00, 0xdc00, 0xde00])
9001         # 2222/171A, 23/26
9002         #
9003         # XXX - for NCP-over-IP, the NetworkAddress field appears to be
9004         # an IP address, rather than an IPX network address, and should
9005         # be dissected as an FT_IPv4 value; the NetworkNodeAddress and
9006         # NetworkSocket are 0.
9007         #
9008         # For NCP-over-IPX, it should probably be dissected as an
9009         # FT_IPXNET value.
9010         #
9011         pkt = NCP(0x171A, "Get Internet Address", 'fileserver')
9012         pkt.Request(11, [
9013                 rec( 10, 1, TargetConnectionNumber ),
9014         ])
9015         pkt.Reply(21, [
9016                 rec( 8, 4, NetworkAddress, BE ),
9017                 rec( 12, 6, NetworkNodeAddress ),
9018                 rec( 18, 2, NetworkSocket, BE ),
9019                 rec( 20, 1, ConnectionType ),
9020         ])
9021         pkt.CompletionCodes([0x0000])
9022         # 2222/171B, 23/27
9023         pkt = NCP(0x171B, "Get Object Connection List", 'file')
9024         pkt.Request( (17,64), [
9025                 rec( 10, 4, SearchConnNumber ),
9026                 rec( 14, 2, ObjectType, BE ),
9027                 rec( 16, (1,48), ObjectName ),
9028         ], info_str=(ObjectName, "Get Object Connection List: %s", ", %s"))
9029         pkt.Reply( (10,137), [
9030                 rec( 8, 1, ConnListLen, var="x" ),
9031                 rec( 9, (1,128), ConnectionNumberList, repeat="x" ),
9032         ])
9033         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9034         # 2222/171C, 23/28
9035         pkt = NCP(0x171C, "Get Station's Logged Info", 'file')
9036         pkt.Request( 14, [
9037                 rec( 10, 4, TargetConnectionNumber ),
9038         ])
9039         pkt.Reply( 70, [
9040                 rec( 8, 4, UserID, BE ),
9041                 rec( 12, 2, ObjectType, BE ),
9042                 rec( 14, 48, ObjectNameLen ),
9043                 rec( 62, 7, LoginTime ),
9044                 rec( 69, 1, Reserved ),
9045         ])
9046         pkt.CompletionCodes([0x0000, 0x9602, 0xfb02, 0xfc06, 0xfd00, 0xfe07, 0xff00])
9047         # 2222/171D, 23/29
9048         pkt = NCP(0x171D, "Change Connection State", 'file')
9049         pkt.Request( 11, [
9050                 rec( 10, 1, RequestCode ),
9051         ])
9052         pkt.Reply(8)
9053         pkt.CompletionCodes([0x0000, 0x0109, 0x7a00, 0x7b00, 0x7c00, 0xe000, 0xfb06, 0xfd00])
9054         # 2222/171E, 23/30
9055         pkt = NCP(0x171E, "Set Watchdog Delay Interval", 'file')
9056         pkt.Request( 14, [
9057                 rec( 10, 4, NumberOfMinutesToDelay ),
9058         ])
9059         pkt.Reply(8)
9060         pkt.CompletionCodes([0x0000, 0x0107])
9061         # 2222/171F, 23/31
9062         pkt = NCP(0x171F, "Get Connection List From Object", 'file')
9063         pkt.Request( 18, [
9064                 rec( 10, 4, ObjectID, BE ),
9065                 rec( 14, 4, ConnectionNumber ),
9066         ])
9067         pkt.Reply( (9, 136), [
9068                 rec( 8, (1, 128), ConnectionNumberList ),
9069         ])
9070         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9071         # 2222/1720, 23/32
9072         pkt = NCP(0x1720, "Scan Bindery Object (List)", 'bindery')
9073         pkt.Request((23,70), [
9074                 rec( 10, 4, NextObjectID, BE ),
9075                 rec( 14, 4, ObjectType, BE ),
9076                 rec( 18, 4, InfoFlags ),
9077                 rec( 22, (1,48), ObjectName ),
9078         ], info_str=(ObjectName, "Scan Bindery Object: %s", ", %s"))
9079         pkt.Reply(NO_LENGTH_CHECK, [
9080                 rec( 8, 4, ObjectInfoReturnCount ),
9081                 rec( 12, 4, NextObjectID, BE ),
9082                 rec( 16, 4, ObjectIDInfo ),
9083                 srec(ObjectTypeStruct, req_cond="ncp.info_flags_type == TRUE"),
9084                 srec(ObjectSecurityStruct, req_cond="ncp.info_flags_security == TRUE"),
9085                 srec(ObjectFlagsStruct, req_cond="ncp.info_flags_flags == TRUE"),
9086                 srec(ObjectNameStruct, req_cond="ncp.info_flags_name == TRUE"),
9087         ])
9088         pkt.ReqCondSizeVariable()
9089         pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xfc02, 0xfe01, 0xff00])
9090         # 2222/1721, 23/33
9091         pkt = NCP(0x1721, "Generate GUIDs", 'nds')
9092         pkt.Request( 14, [
9093                 rec( 10, 4, ReturnInfoCount ),
9094         ])
9095         pkt.Reply(28, [
9096                 rec( 8, 4, ReturnInfoCount, var="x" ),
9097                 rec( 12, 16, GUID, repeat="x" ),
9098         ])
9099         pkt.CompletionCodes([0x0000])
9100         # 2222/1732, 23/50
9101         pkt = NCP(0x1732, "Create Bindery Object", 'bindery')
9102         pkt.Request( (15,62), [
9103                 rec( 10, 1, ObjectFlags ),
9104                 rec( 11, 1, ObjectSecurity ),
9105                 rec( 12, 2, ObjectType, BE ),
9106                 rec( 14, (1,48), ObjectName ),
9107         ], info_str=(ObjectName, "Create Bindery Object: %s", ", %s"))
9108         pkt.Reply(8)
9109         pkt.CompletionCodes([0x0000, 0x9600, 0xe700, 0xee00, 0xef00, 0xf101, 0xf501,
9110                              0xfc06, 0xfe07, 0xff00])
9111         # 2222/1733, 23/51
9112         pkt = NCP(0x1733, "Delete Bindery Object", 'bindery')
9113         pkt.Request( (13,60), [
9114                 rec( 10, 2, ObjectType, BE ),
9115                 rec( 12, (1,48), ObjectName ),
9116         ], info_str=(ObjectName, "Delete Bindery Object: %s", ", %s"))
9117         pkt.Reply(8)
9118         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf200, 0xf400, 0xf600, 0xfb00,
9119                              0xfc06, 0xfe07, 0xff00])
9120         # 2222/1734, 23/52
9121         pkt = NCP(0x1734, "Rename Bindery Object", 'bindery')
9122         pkt.Request( (14,108), [
9123                 rec( 10, 2, ObjectType, BE ),
9124                 rec( 12, (1,48), ObjectName ),
9125                 rec( -1, (1,48), NewObjectName ),
9126         ], info_str=(ObjectName, "Rename Bindery Object: %s", ", %s"))
9127         pkt.Reply(8)
9128         pkt.CompletionCodes([0x0000, 0x9600, 0xee00, 0xf000, 0xf300, 0xfc06, 0xfe07, 0xff00])
9129         # 2222/1735, 23/53
9130         pkt = NCP(0x1735, "Get Bindery Object ID", 'bindery')
9131         pkt.Request((13,60), [
9132                 rec( 10, 2, ObjectType, BE ),
9133                 rec( 12, (1,48), ObjectName ),
9134         ], info_str=(ObjectName, "Get Bindery Object: %s", ", %s"))
9135         pkt.Reply(62, [
9136                 rec( 8, 4, ObjectID, BE ),
9137                 rec( 12, 2, ObjectType, BE ),
9138                 rec( 14, 48, ObjectNameLen ),
9139         ])
9140         pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xf000, 0xfc02, 0xfe01, 0xff00])
9141         # 2222/1736, 23/54
9142         pkt = NCP(0x1736, "Get Bindery Object Name", 'bindery')
9143         pkt.Request( 14, [
9144                 rec( 10, 4, ObjectID, BE ),
9145         ])
9146         pkt.Reply( 62, [
9147                 rec( 8, 4, ObjectID, BE ),
9148                 rec( 12, 2, ObjectType, BE ),
9149                 rec( 14, 48, ObjectNameLen ),
9150         ])
9151         pkt.CompletionCodes([0x0000, 0x9600, 0xf101, 0xfc02, 0xfe01, 0xff00])
9152         # 2222/1737, 23/55
9153         pkt = NCP(0x1737, "Scan Bindery Object", 'bindery')
9154         pkt.Request((17,64), [
9155                 rec( 10, 4, ObjectID, BE ),
9156                 rec( 14, 2, ObjectType, BE ),
9157                 rec( 16, (1,48), ObjectName ),
9158         ], info_str=(ObjectName, "Scan Bindery Object: %s", ", %s"))
9159         pkt.Reply(65, [
9160                 rec( 8, 4, ObjectID, BE ),
9161                 rec( 12, 2, ObjectType, BE ),
9162                 rec( 14, 48, ObjectNameLen ),
9163                 rec( 62, 1, ObjectFlags ),
9164                 rec( 63, 1, ObjectSecurity ),
9165                 rec( 64, 1, ObjectHasProperties ),
9166         ])
9167         pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xfc02,
9168                              0xfe01, 0xff00])
9169         # 2222/1738, 23/56
9170         pkt = NCP(0x1738, "Change Bindery Object Security", 'bindery')
9171         pkt.Request((14,61), [
9172                 rec( 10, 1, ObjectSecurity ),
9173                 rec( 11, 2, ObjectType, BE ),
9174                 rec( 13, (1,48), ObjectName ),
9175         ], info_str=(ObjectName, "Change Bindery Object Security: %s", ", %s"))
9176         pkt.Reply(8)
9177         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf501, 0xfc02, 0xfe01, 0xff00])
9178         # 2222/1739, 23/57
9179         pkt = NCP(0x1739, "Create Property", 'bindery')
9180         pkt.Request((16,78), [
9181                 rec( 10, 2, ObjectType, BE ),
9182                 rec( 12, (1,48), ObjectName ),
9183                 rec( -1, 1, PropertyType ),
9184                 rec( -1, 1, ObjectSecurity ),
9185                 rec( -1, (1,16), PropertyName ),
9186         ], info_str=(PropertyName, "Create Property: %s", ", %s"))
9187         pkt.Reply(8)
9188         pkt.CompletionCodes([0x0000, 0x9600, 0xed00, 0xef00, 0xf000, 0xf101,
9189                              0xf200, 0xf600, 0xf700, 0xfb00, 0xfc02, 0xfe01,
9190                              0xff00])
9191         # 2222/173A, 23/58
9192         pkt = NCP(0x173A, "Delete Property", 'bindery')
9193         pkt.Request((14,76), [
9194                 rec( 10, 2, ObjectType, BE ),
9195                 rec( 12, (1,48), ObjectName ),
9196                 rec( -1, (1,16), PropertyName ),
9197         ], info_str=(PropertyName, "Delete Property: %s", ", %s"))
9198         pkt.Reply(8)
9199         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf600, 0xfb00, 0xfc02,
9200                              0xfe01, 0xff00])
9201         # 2222/173B, 23/59
9202         pkt = NCP(0x173B, "Change Property Security", 'bindery')
9203         pkt.Request((15,77), [
9204                 rec( 10, 2, ObjectType, BE ),
9205                 rec( 12, (1,48), ObjectName ),
9206                 rec( -1, 1, ObjectSecurity ),
9207                 rec( -1, (1,16), PropertyName ),
9208         ], info_str=(PropertyName, "Change Property Security: %s", ", %s"))
9209         pkt.Reply(8)
9210         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf200, 0xf600, 0xfb00,
9211                              0xfc02, 0xfe01, 0xff00])
9212         # 2222/173C, 23/60
9213         pkt = NCP(0x173C, "Scan Property", 'bindery')
9214         pkt.Request((18,80), [
9215                 rec( 10, 2, ObjectType, BE ),
9216                 rec( 12, (1,48), ObjectName ),
9217                 rec( -1, 4, LastInstance, BE ),
9218                 rec( -1, (1,16), PropertyName ),
9219         ], info_str=(PropertyName, "Scan Property: %s", ", %s"))
9220         pkt.Reply( 32, [
9221                 rec( 8, 16, PropertyName16 ),
9222                 rec( 24, 1, ObjectFlags ),
9223                 rec( 25, 1, ObjectSecurity ),
9224                 rec( 26, 4, SearchInstance, BE ),
9225                 rec( 30, 1, ValueAvailable ),
9226                 rec( 31, 1, MoreProperties ),
9227         ])
9228         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf200, 0xf600, 0xfb00,
9229                              0xfc02, 0xfe01, 0xff00])
9230         # 2222/173D, 23/61
9231         pkt = NCP(0x173D, "Read Property Value", 'bindery')
9232         pkt.Request((15,77), [
9233                 rec( 10, 2, ObjectType, BE ),
9234                 rec( 12, (1,48), ObjectName ),
9235                 rec( -1, 1, PropertySegment ),
9236                 rec( -1, (1,16), PropertyName ),
9237         ], info_str=(PropertyName, "Read Property Value: %s", ", %s"))
9238         pkt.Reply(138, [
9239                 rec( 8, 128, PropertyData ),
9240                 rec( 136, 1, PropertyHasMoreSegments ),
9241                 rec( 137, 1, PropertyType ),
9242         ])
9243         pkt.CompletionCodes([0x0000, 0x8800, 0x9300, 0x9600, 0xec01,
9244                              0xf000, 0xf100, 0xf900, 0xfb02, 0xfc02,
9245                              0xfe01, 0xff00])
9246         # 2222/173E, 23/62
9247         pkt = NCP(0x173E, "Write Property Value", 'bindery')
9248         pkt.Request((144,206), [
9249                 rec( 10, 2, ObjectType, BE ),
9250                 rec( 12, (1,48), ObjectName ),
9251                 rec( -1, 1, PropertySegment ),
9252                 rec( -1, 1, MoreFlag ),
9253                 rec( -1, (1,16), PropertyName ),
9254                 rec( -1, 128, PropertyValue ),
9255         ], info_str=(PropertyName, "Write Property Value: %s", ", %s"))
9256         pkt.Reply(8)
9257         pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xec01, 0xf000, 0xf800,
9258                              0xfb02, 0xfc03, 0xfe01, 0xff00 ])
9259         # 2222/173F, 23/63
9260         pkt = NCP(0x173F, "Verify Bindery Object Password", 'bindery')
9261         pkt.Request((14,92), [
9262                 rec( 10, 2, ObjectType, BE ),
9263                 rec( 12, (1,48), ObjectName ),
9264                 rec( -1, (1,32), Password ),
9265         ], info_str=(ObjectName, "Verify Bindery Object Password: %s", ", %s"))
9266         pkt.Reply(8)
9267         pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xec01, 0xf000, 0xf101,
9268                              0xfb02, 0xfc03, 0xfe01, 0xff00 ])
9269         # 2222/1740, 23/64
9270         pkt = NCP(0x1740, "Change Bindery Object Password", 'bindery')
9271         pkt.Request((15,124), [
9272                 rec( 10, 2, ObjectType, BE ),
9273                 rec( 12, (1,48), ObjectName ),
9274                 rec( -1, (1,32), Password ),
9275                 rec( -1, (1,32), NewPassword ),
9276         ], info_str=(ObjectName, "Change Bindery Object Password: %s", ", %s"))
9277         pkt.Reply(8)
9278         pkt.CompletionCodes([0x0000, 0x9600, 0xc501, 0xd701, 0xe800, 0xec01, 0xf001,
9279                              0xf100, 0xf800, 0xfb02, 0xfc03, 0xfe01, 0xff00])
9280         # 2222/1741, 23/65
9281         pkt = NCP(0x1741, "Add Bindery Object To Set", 'bindery')
9282         pkt.Request((17,126), [
9283                 rec( 10, 2, ObjectType, BE ),
9284                 rec( 12, (1,48), ObjectName ),
9285                 rec( -1, (1,16), PropertyName ),
9286                 rec( -1, 2, MemberType, BE ),
9287                 rec( -1, (1,48), MemberName ),
9288         ], info_str=(MemberName, "Add Bindery Object to Set: %s", ", %s"))
9289         pkt.Reply(8)
9290         pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xe900, 0xea00, 0xeb00,
9291                              0xec01, 0xf000, 0xf800, 0xfb02, 0xfc03, 0xfe01,
9292                              0xff00])
9293         # 2222/1742, 23/66
9294         pkt = NCP(0x1742, "Delete Bindery Object From Set", 'bindery')
9295         pkt.Request((17,126), [
9296                 rec( 10, 2, ObjectType, BE ),
9297                 rec( 12, (1,48), ObjectName ),
9298                 rec( -1, (1,16), PropertyName ),
9299                 rec( -1, 2, MemberType, BE ),
9300                 rec( -1, (1,48), MemberName ),
9301         ], info_str=(MemberName, "Delete Bindery Object from Set: %s", ", %s"))
9302         pkt.Reply(8)
9303         pkt.CompletionCodes([0x0000, 0x9600, 0xeb00, 0xf000, 0xf800, 0xfb02,
9304                              0xfc03, 0xfe01, 0xff00])
9305         # 2222/1743, 23/67
9306         pkt = NCP(0x1743, "Is Bindery Object In Set", 'bindery')
9307         pkt.Request((17,126), [
9308                 rec( 10, 2, ObjectType, BE ),
9309                 rec( 12, (1,48), ObjectName ),
9310                 rec( -1, (1,16), PropertyName ),
9311                 rec( -1, 2, MemberType, BE ),
9312                 rec( -1, (1,48), MemberName ),
9313         ], info_str=(MemberName, "Is Bindery Object in Set: %s", ", %s"))
9314         pkt.Reply(8)
9315         pkt.CompletionCodes([0x0000, 0x9600, 0xea00, 0xeb00, 0xec01, 0xf000,
9316                              0xfb02, 0xfc03, 0xfe01, 0xff00])
9317         # 2222/1744, 23/68
9318         pkt = NCP(0x1744, "Close Bindery", 'bindery')
9319         pkt.Request(10)
9320         pkt.Reply(8)
9321         pkt.CompletionCodes([0x0000, 0xff00])
9322         # 2222/1745, 23/69
9323         pkt = NCP(0x1745, "Open Bindery", 'bindery')
9324         pkt.Request(10)
9325         pkt.Reply(8)
9326         pkt.CompletionCodes([0x0000, 0xff00])
9327         # 2222/1746, 23/70
9328         pkt = NCP(0x1746, "Get Bindery Access Level", 'bindery')
9329         pkt.Request(10)
9330         pkt.Reply(13, [
9331                 rec( 8, 1, ObjectSecurity ),
9332                 rec( 9, 4, LoggedObjectID, BE ),
9333         ])
9334         pkt.CompletionCodes([0x0000, 0x9600])
9335         # 2222/1747, 23/71
9336         pkt = NCP(0x1747, "Scan Bindery Object Trustee Paths", 'bindery')
9337         pkt.Request(17, [
9338                 rec( 10, 1, VolumeNumber ),
9339                 rec( 11, 2, LastSequenceNumber, BE ),
9340                 rec( 13, 4, ObjectID, BE ),
9341         ])
9342         pkt.Reply((16,270), [
9343                 rec( 8, 2, LastSequenceNumber, BE),
9344                 rec( 10, 4, ObjectID, BE ),
9345                 rec( 14, 1, ObjectSecurity ),
9346                 rec( 15, (1,255), Path ),
9347         ])
9348         pkt.CompletionCodes([0x0000, 0x9300, 0x9600, 0xa100, 0xf000, 0xf100,
9349                              0xf200, 0xfc02, 0xfe01, 0xff00])
9350         # 2222/1748, 23/72
9351         pkt = NCP(0x1748, "Get Bindery Object Access Level", 'bindery')
9352         pkt.Request(14, [
9353                 rec( 10, 4, ObjectID, BE ),
9354         ])
9355         pkt.Reply(9, [
9356                 rec( 8, 1, ObjectSecurity ),
9357         ])
9358         pkt.CompletionCodes([0x0000, 0x9600])
9359         # 2222/1749, 23/73
9360         pkt = NCP(0x1749, "Is Calling Station a Manager", 'bindery')
9361         pkt.Request(10)
9362         pkt.Reply(8)
9363         pkt.CompletionCodes([0x0003, 0xff1e])
9364         # 2222/174A, 23/74
9365         pkt = NCP(0x174A, "Keyed Verify Password", 'bindery')
9366         pkt.Request((21,68), [
9367                 rec( 10, 8, LoginKey ),
9368                 rec( 18, 2, ObjectType, BE ),
9369                 rec( 20, (1,48), ObjectName ),
9370         ], info_str=(ObjectName, "Keyed Verify Password: %s", ", %s"))
9371         pkt.Reply(8)
9372         pkt.CompletionCodes([0x0000, 0xc500, 0xfe01, 0xff0c])
9373         # 2222/174B, 23/75
9374         pkt = NCP(0x174B, "Keyed Change Password", 'bindery')
9375         pkt.Request((22,100), [
9376                 rec( 10, 8, LoginKey ),
9377                 rec( 18, 2, ObjectType, BE ),
9378                 rec( 20, (1,48), ObjectName ),
9379                 rec( -1, (1,32), Password ),
9380         ], info_str=(ObjectName, "Keyed Change Password: %s", ", %s"))
9381         pkt.Reply(8)
9382         pkt.CompletionCodes([0x0000, 0xc500, 0xfe01, 0xff0c])
9383         # 2222/174C, 23/76
9384         pkt = NCP(0x174C, "List Relations Of an Object", 'bindery')
9385         pkt.Request((18,80), [
9386                 rec( 10, 4, LastSeen, BE ),
9387                 rec( 14, 2, ObjectType, BE ),
9388                 rec( 16, (1,48), ObjectName ),
9389                 rec( -1, (1,16), PropertyName ),
9390         ], info_str=(ObjectName, "List Relations of an Object: %s", ", %s"))
9391         pkt.Reply(14, [
9392                 rec( 8, 2, RelationsCount, BE, var="x" ),
9393                 rec( 10, 4, ObjectID, BE, repeat="x" ),
9394         ])
9395         pkt.CompletionCodes([0x0000, 0xf000, 0xf200, 0xfe01, 0xff00])
9396         # 2222/1764, 23/100
9397         pkt = NCP(0x1764, "Create Queue", 'qms')
9398         pkt.Request((15,316), [
9399                 rec( 10, 2, QueueType, BE ),
9400                 rec( 12, (1,48), QueueName ),
9401                 rec( -1, 1, PathBase ),
9402                 rec( -1, (1,255), Path ),
9403         ], info_str=(QueueName, "Create Queue: %s", ", %s"))
9404         pkt.Reply(12, [
9405                 rec( 8, 4, QueueID, BE ),
9406         ])
9407         pkt.CompletionCodes([0x0000, 0x9600, 0x9900, 0xd000, 0xd100,
9408                              0xd200, 0xd300, 0xd400, 0xd500, 0xd601,
9409                              0xd703, 0xd800, 0xd902, 0xda01, 0xdb02,
9410                              0xee00, 0xff00])
9411         # 2222/1765, 23/101
9412         pkt = NCP(0x1765, "Destroy Queue", 'qms')
9413         pkt.Request(14, [
9414                 rec( 10, 4, QueueID, BE ),
9415         ])
9416         pkt.Reply(8)
9417         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9418                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9419                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9420         # 2222/1766, 23/102
9421         pkt = NCP(0x1766, "Read Queue Current Status", 'qms')
9422         pkt.Request(14, [
9423                 rec( 10, 4, QueueID, BE ),
9424         ])
9425         pkt.Reply(20, [
9426                 rec( 8, 4, QueueID, BE ),
9427                 rec( 12, 1, QueueStatus ),
9428                 rec( 13, 1, CurrentEntries ),
9429                 rec( 14, 1, CurrentServers, var="x" ),
9430                 rec( 15, 4, ServerIDList, repeat="x" ),
9431                 rec( 19, 1, ServerStationList, repeat="x" ),
9432         ])
9433         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9434                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9435                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9436         # 2222/1767, 23/103
9437         pkt = NCP(0x1767, "Set Queue Current Status", 'qms')
9438         pkt.Request(15, [
9439                 rec( 10, 4, QueueID, BE ),
9440                 rec( 14, 1, QueueStatus ),
9441         ])
9442         pkt.Reply(8)
9443         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9444                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9445                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07,
9446                              0xff00])
9447         # 2222/1768, 23/104
9448         pkt = NCP(0x1768, "Create Queue Job And File", 'qms')
9449         pkt.Request(264, [
9450                 rec( 10, 4, QueueID, BE ),
9451                 rec( 14, 250, JobStruct ),
9452         ])
9453         pkt.Reply(62, [
9454                 rec( 8, 1, ClientStation ),
9455                 rec( 9, 1, ClientTaskNumber ),
9456                 rec( 10, 4, ClientIDNumber, BE ),
9457                 rec( 14, 4, TargetServerIDNumber, BE ),
9458                 rec( 18, 6, TargetExecutionTime ),
9459                 rec( 24, 6, JobEntryTime ),
9460                 rec( 30, 2, JobNumber, BE ),
9461                 rec( 32, 2, JobType, BE ),
9462                 rec( 34, 1, JobPosition ),
9463                 rec( 35, 1, JobControlFlags ),
9464                 rec( 36, 14, JobFileName ),
9465                 rec( 50, 6, JobFileHandle ),
9466                 rec( 56, 1, ServerStation ),
9467                 rec( 57, 1, ServerTaskNumber ),
9468                 rec( 58, 4, ServerID, BE ),
9469         ])              
9470         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9471                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9472                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07,
9473                              0xff00])
9474         # 2222/1769, 23/105
9475         pkt = NCP(0x1769, "Close File And Start Queue Job", 'qms')
9476         pkt.Request(16, [
9477                 rec( 10, 4, QueueID, BE ),
9478                 rec( 14, 2, JobNumber, BE ),
9479         ])
9480         pkt.Reply(8)
9481         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9482                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9483                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9484         # 2222/176A, 23/106
9485         pkt = NCP(0x176A, "Remove Job From Queue", 'qms')
9486         pkt.Request(16, [
9487                 rec( 10, 4, QueueID, BE ),
9488                 rec( 14, 2, JobNumber, BE ),
9489         ])
9490         pkt.Reply(8)
9491         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9492                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9493                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9494         # 2222/176B, 23/107
9495         pkt = NCP(0x176B, "Get Queue Job List", 'qms')
9496         pkt.Request(14, [
9497                 rec( 10, 4, QueueID, BE ),
9498         ])
9499         pkt.Reply(12, [
9500                 rec( 8, 2, JobCount, BE, var="x" ),
9501                 rec( 10, 2, JobNumber, BE, repeat="x" ),
9502         ])
9503         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9504                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9505                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9506         # 2222/176C, 23/108
9507         pkt = NCP(0x176C, "Read Queue Job Entry", 'qms')
9508         pkt.Request(16, [
9509                 rec( 10, 4, QueueID, BE ),
9510                 rec( 14, 2, JobNumber, BE ),
9511         ])
9512         pkt.Reply(258, [
9513             rec( 8, 250, JobStruct ),
9514         ])              
9515         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9516                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9517                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9518         # 2222/176D, 23/109
9519         pkt = NCP(0x176D, "Change Queue Job Entry", 'qms')
9520         pkt.Request(260, [
9521             rec( 14, 250, JobStruct ),
9522         ])
9523         pkt.Reply(8)            
9524         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9525                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9526                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9527         # 2222/176E, 23/110
9528         pkt = NCP(0x176E, "Change Queue Job Position", 'qms')
9529         pkt.Request(17, [
9530                 rec( 10, 4, QueueID, BE ),
9531                 rec( 14, 2, JobNumber, BE ),
9532                 rec( 16, 1, NewPosition ),
9533         ])
9534         pkt.Reply(8)
9535         pkt.CompletionCodes([0x0000, 0x9600, 0xd000, 0xd100, 0xd500,
9536                              0xd601, 0xfe07, 0xff1f])
9537         # 2222/176F, 23/111
9538         pkt = NCP(0x176F, "Attach Queue Server To Queue", 'qms')
9539         pkt.Request(14, [
9540                 rec( 10, 4, QueueID, BE ),
9541         ])
9542         pkt.Reply(8)
9543         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9544                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9545                              0xd800, 0xd902, 0xda01, 0xdb02, 0xea00,
9546                              0xfc06, 0xff00])
9547         # 2222/1770, 23/112
9548         pkt = NCP(0x1770, "Detach Queue Server From Queue", 'qms')
9549         pkt.Request(14, [
9550                 rec( 10, 4, QueueID, BE ),
9551         ])
9552         pkt.Reply(8)
9553         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9554                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9555                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9556         # 2222/1771, 23/113
9557         pkt = NCP(0x1771, "Service Queue Job", 'qms')
9558         pkt.Request(16, [
9559                 rec( 10, 4, QueueID, BE ),
9560                 rec( 14, 2, ServiceType, BE ),
9561         ])
9562         pkt.Reply(62, [
9563                 rec( 8, 1, ClientStation ),
9564                 rec( 9, 1, ClientTaskNumber ),
9565                 rec( 10, 4, ClientIDNumber, BE ),
9566                 rec( 14, 4, TargetServerIDNumber, BE ),
9567                 rec( 18, 6, TargetExecutionTime ),
9568                 rec( 24, 6, JobEntryTime ),
9569                 rec( 30, 2, JobNumber, BE ),
9570                 rec( 32, 2, JobType, BE ),
9571                 rec( 34, 1, JobPosition ),
9572                 rec( 35, 1, JobControlFlags ),
9573                 rec( 36, 14, JobFileName ),
9574                 rec( 50, 6, JobFileHandle ),
9575                 rec( 56, 1, ServerStation ),
9576                 rec( 57, 1, ServerTaskNumber ),
9577                 rec( 58, 4, ServerID, BE ),
9578         ])              
9579         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9580                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9581                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9582         # 2222/1772, 23/114
9583         pkt = NCP(0x1772, "Finish Servicing Queue Job", 'qms')
9584         pkt.Request(20, [
9585                 rec( 10, 4, QueueID, BE ),
9586                 rec( 14, 2, JobNumber, BE ),
9587                 rec( 16, 4, ChargeInformation, BE ),
9588         ])
9589         pkt.Reply(8)            
9590         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9591                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9592                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9593         # 2222/1773, 23/115
9594         pkt = NCP(0x1773, "Abort Servicing Queue Job", 'qms')
9595         pkt.Request(16, [
9596                 rec( 10, 4, QueueID, BE ),
9597                 rec( 14, 2, JobNumber, BE ),
9598         ])
9599         pkt.Reply(8)            
9600         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9601                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9602                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9603         # 2222/1774, 23/116
9604         pkt = NCP(0x1774, "Change To Client Rights", 'qms')
9605         pkt.Request(16, [
9606                 rec( 10, 4, QueueID, BE ),
9607                 rec( 14, 2, JobNumber, BE ),
9608         ])
9609         pkt.Reply(8)            
9610         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9611                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9612                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9613         # 2222/1775, 23/117
9614         pkt = NCP(0x1775, "Restore Queue Server Rights", 'qms')
9615         pkt.Request(10)
9616         pkt.Reply(8)            
9617         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9618                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9619                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9620         # 2222/1776, 23/118
9621         pkt = NCP(0x1776, "Read Queue Server Current Status", 'qms')
9622         pkt.Request(19, [
9623                 rec( 10, 4, QueueID, BE ),
9624                 rec( 14, 4, ServerID, BE ),
9625                 rec( 18, 1, ServerStation ),
9626         ])
9627         pkt.Reply(72, [
9628                 rec( 8, 64, ServerStatusRecord ),
9629         ])
9630         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9631                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9632                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9633         # 2222/1777, 23/119
9634         pkt = NCP(0x1777, "Set Queue Server Current Status", 'qms')
9635         pkt.Request(78, [
9636                 rec( 10, 4, QueueID, BE ),
9637                 rec( 14, 64, ServerStatusRecord ),
9638         ])
9639         pkt.Reply(8)
9640         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9641                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9642                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9643         # 2222/1778, 23/120
9644         pkt = NCP(0x1778, "Get Queue Job File Size", 'qms')
9645         pkt.Request(16, [
9646                 rec( 10, 4, QueueID, BE ),
9647                 rec( 14, 2, JobNumber, BE ),
9648         ])
9649         pkt.Reply(20, [
9650                 rec( 8, 4, QueueID, BE ),
9651                 rec( 12, 4, JobNumberLong ),
9652                 rec( 16, 4, FileSize, BE ),
9653         ])
9654         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9655                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9656                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9657         # 2222/1779, 23/121
9658         pkt = NCP(0x1779, "Create Queue Job And File", 'qms')
9659         pkt.Request(264, [
9660                 rec( 10, 4, QueueID, BE ),
9661                 rec( 14, 250, JobStruct ),
9662         ])
9663         pkt.Reply(94, [
9664                 rec( 8, 86, JobStructNew ),
9665         ])              
9666         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9667                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9668                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9669         # 2222/177A, 23/122
9670         pkt = NCP(0x177A, "Read Queue Job Entry", 'qms')
9671         pkt.Request(18, [
9672                 rec( 10, 4, QueueID, BE ),
9673                 rec( 14, 4, JobNumberLong ),
9674         ])
9675         pkt.Reply(258, [
9676             rec( 8, 250, JobStruct ),
9677         ])              
9678         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9679                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9680                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9681         # 2222/177B, 23/123
9682         pkt = NCP(0x177B, "Change Queue Job Entry", 'qms')
9683         pkt.Request(264, [
9684                 rec( 10, 4, QueueID, BE ),
9685                 rec( 14, 250, JobStruct ),
9686         ])
9687         pkt.Reply(8)            
9688         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9689                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9690                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff00])
9691         # 2222/177C, 23/124
9692         pkt = NCP(0x177C, "Service Queue Job", 'qms')
9693         pkt.Request(16, [
9694                 rec( 10, 4, QueueID, BE ),
9695                 rec( 14, 2, ServiceType ),
9696         ])
9697         pkt.Reply(94, [
9698             rec( 8, 86, JobStructNew ),
9699         ])              
9700         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9701                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9702                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9703         # 2222/177D, 23/125
9704         pkt = NCP(0x177D, "Read Queue Current Status", 'qms')
9705         pkt.Request(14, [
9706                 rec( 10, 4, QueueID, BE ),
9707         ])
9708         pkt.Reply(32, [
9709                 rec( 8, 4, QueueID, BE ),
9710                 rec( 12, 1, QueueStatus ),
9711                 rec( 13, 3, Reserved3 ),
9712                 rec( 16, 4, CurrentEntries ),
9713                 rec( 20, 4, CurrentServers, var="x" ),
9714                 rec( 24, 4, ServerIDList, repeat="x" ),
9715                 rec( 28, 4, ServerStationList, repeat="x" ),
9716         ])
9717         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9718                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9719                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9720         # 2222/177E, 23/126
9721         pkt = NCP(0x177E, "Set Queue Current Status", 'qms')
9722         pkt.Request(15, [
9723                 rec( 10, 4, QueueID, BE ),
9724                 rec( 14, 1, QueueStatus ),
9725         ])
9726         pkt.Reply(8)
9727         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9728                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9729                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9730         # 2222/177F, 23/127
9731         pkt = NCP(0x177F, "Close File And Start Queue Job", 'qms')
9732         pkt.Request(18, [
9733                 rec( 10, 4, QueueID, BE ),
9734                 rec( 14, 4, JobNumberLong ),
9735         ])
9736         pkt.Reply(8)
9737         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9738                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9739                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9740         # 2222/1780, 23/128
9741         pkt = NCP(0x1780, "Remove Job From Queue", 'qms')
9742         pkt.Request(18, [
9743                 rec( 10, 4, QueueID, BE ),
9744                 rec( 14, 4, JobNumberLong ),
9745         ])
9746         pkt.Reply(8)
9747         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9748                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9749                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9750         # 2222/1781, 23/129
9751         pkt = NCP(0x1781, "Get Queue Job List", 'qms')
9752         pkt.Request(18, [
9753                 rec( 10, 4, QueueID, BE ),
9754                 rec( 14, 4, JobNumberLong ),
9755         ])
9756         pkt.Reply(20, [
9757                 rec( 8, 4, TotalQueueJobs ),
9758                 rec( 12, 4, ReplyQueueJobNumbers, var="x" ),
9759                 rec( 16, 4, JobNumberList, repeat="x" ),
9760         ])
9761         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9762                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9763                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9764         # 2222/1782, 23/130
9765         pkt = NCP(0x1782, "Change Job Priority", 'qms')
9766         pkt.Request(22, [
9767                 rec( 10, 4, QueueID, BE ),
9768                 rec( 14, 4, JobNumberLong ),
9769                 rec( 18, 4, Priority ),
9770         ])
9771         pkt.Reply(8)
9772         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9773                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9774                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9775         # 2222/1783, 23/131
9776         pkt = NCP(0x1783, "Finish Servicing Queue Job", 'qms')
9777         pkt.Request(22, [
9778                 rec( 10, 4, QueueID, BE ),
9779                 rec( 14, 4, JobNumberLong ),
9780                 rec( 18, 4, ChargeInformation ),
9781         ])
9782         pkt.Reply(8)            
9783         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9784                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9785                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9786         # 2222/1784, 23/132
9787         pkt = NCP(0x1784, "Abort Servicing Queue Job", 'qms')
9788         pkt.Request(18, [
9789                 rec( 10, 4, QueueID, BE ),
9790                 rec( 14, 4, JobNumberLong ),
9791         ])
9792         pkt.Reply(8)            
9793         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9794                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9795                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9796         # 2222/1785, 23/133
9797         pkt = NCP(0x1785, "Change To Client Rights", 'qms')
9798         pkt.Request(18, [
9799                 rec( 10, 4, QueueID, BE ),
9800                 rec( 14, 4, JobNumberLong ),
9801         ])
9802         pkt.Reply(8)            
9803         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9804                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9805                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9806         # 2222/1786, 23/134
9807         pkt = NCP(0x1786, "Read Queue Server Current Status", 'qms')
9808         pkt.Request(22, [
9809                 rec( 10, 4, QueueID, BE ),
9810                 rec( 14, 4, ServerID, BE ),
9811                 rec( 18, 4, ServerStation ),
9812         ])
9813         pkt.Reply(72, [
9814                 rec( 8, 64, ServerStatusRecord ),
9815         ])
9816         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9817                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9818                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9819         # 2222/1787, 23/135
9820         pkt = NCP(0x1787, "Get Queue Job File Size", 'qms')
9821         pkt.Request(18, [
9822                 rec( 10, 4, QueueID, BE ),
9823                 rec( 14, 4, JobNumberLong ),
9824         ])
9825         pkt.Reply(20, [
9826                 rec( 8, 4, QueueID, BE ),
9827                 rec( 12, 4, JobNumberLong ),
9828                 rec( 16, 4, FileSize, BE ),
9829         ])
9830         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9831                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9832                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9833         # 2222/1788, 23/136
9834         pkt = NCP(0x1788, "Move Queue Job From Src Q to Dst Q", 'qms')
9835         pkt.Request(22, [
9836                 rec( 10, 4, QueueID, BE ),
9837                 rec( 14, 4, JobNumberLong ),
9838                 rec( 18, 4, DstQueueID, BE ),
9839         ])
9840         pkt.Reply(12, [
9841                 rec( 8, 4, JobNumberLong ),
9842         ])
9843         pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
9844         # 2222/1789, 23/137
9845         pkt = NCP(0x1789, "Get Queue Jobs From Form List", 'qms')
9846         pkt.Request(24, [
9847                 rec( 10, 4, QueueID, BE ),
9848                 rec( 14, 4, QueueStartPosition ),
9849                 rec( 18, 4, FormTypeCnt, var="x" ),
9850                 rec( 22, 2, FormType, repeat="x" ),
9851         ])
9852         pkt.Reply(20, [
9853                 rec( 8, 4, TotalQueueJobs ),
9854                 rec( 12, 4, JobCount, var="x" ),
9855                 rec( 16, 4, JobNumberList, repeat="x" ),
9856         ])
9857         pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
9858         # 2222/178A, 23/138
9859         pkt = NCP(0x178A, "Service Queue Job By Form List", 'qms')
9860         pkt.Request(24, [
9861                 rec( 10, 4, QueueID, BE ),
9862                 rec( 14, 4, QueueStartPosition ),
9863                 rec( 18, 4, FormTypeCnt, var= "x" ),
9864                 rec( 22, 2, FormType, repeat="x" ),
9865         ])
9866         pkt.Reply(94, [
9867            rec( 8, 86, JobStructNew ),
9868         ])              
9869         pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
9870         # 2222/1796, 23/150
9871         pkt = NCP(0x1796, "Get Current Account Status", 'accounting')
9872         pkt.Request((13,60), [
9873                 rec( 10, 2, ObjectType, BE ),
9874                 rec( 12, (1,48), ObjectName ),
9875         ], info_str=(ObjectName, "Get Current Account Status: %s", ", %s"))
9876         pkt.Reply(264, [
9877                 rec( 8, 4, AccountBalance, BE ),
9878                 rec( 12, 4, CreditLimit, BE ),
9879                 rec( 16, 120, Reserved120 ),
9880                 rec( 136, 4, HolderID, BE ),
9881                 rec( 140, 4, HoldAmount, BE ),
9882                 rec( 144, 4, HolderID, BE ),
9883                 rec( 148, 4, HoldAmount, BE ),
9884                 rec( 152, 4, HolderID, BE ),
9885                 rec( 156, 4, HoldAmount, BE ),
9886                 rec( 160, 4, HolderID, BE ),
9887                 rec( 164, 4, HoldAmount, BE ),
9888                 rec( 168, 4, HolderID, BE ),
9889                 rec( 172, 4, HoldAmount, BE ),
9890                 rec( 176, 4, HolderID, BE ),
9891                 rec( 180, 4, HoldAmount, BE ),
9892                 rec( 184, 4, HolderID, BE ),
9893                 rec( 188, 4, HoldAmount, BE ),
9894                 rec( 192, 4, HolderID, BE ),
9895                 rec( 196, 4, HoldAmount, BE ),
9896                 rec( 200, 4, HolderID, BE ),
9897                 rec( 204, 4, HoldAmount, BE ),
9898                 rec( 208, 4, HolderID, BE ),
9899                 rec( 212, 4, HoldAmount, BE ),
9900                 rec( 216, 4, HolderID, BE ),
9901                 rec( 220, 4, HoldAmount, BE ),
9902                 rec( 224, 4, HolderID, BE ),
9903                 rec( 228, 4, HoldAmount, BE ),
9904                 rec( 232, 4, HolderID, BE ),
9905                 rec( 236, 4, HoldAmount, BE ),
9906                 rec( 240, 4, HolderID, BE ),
9907                 rec( 244, 4, HoldAmount, BE ),
9908                 rec( 248, 4, HolderID, BE ),
9909                 rec( 252, 4, HoldAmount, BE ),
9910                 rec( 256, 4, HolderID, BE ),
9911                 rec( 260, 4, HoldAmount, BE ),
9912         ])              
9913         pkt.CompletionCodes([0x0000, 0x9600, 0xc000, 0xc101, 0xc400, 0xe800,
9914                              0xea00, 0xeb00, 0xec00, 0xfc06, 0xfe07, 0xff00])
9915         # 2222/1797, 23/151
9916         pkt = NCP(0x1797, "Submit Account Charge", 'accounting')
9917         pkt.Request((26,327), [
9918                 rec( 10, 2, ServiceType, BE ),
9919                 rec( 12, 4, ChargeAmount, BE ),
9920                 rec( 16, 4, HoldCancelAmount, BE ),
9921                 rec( 20, 2, ObjectType, BE ),
9922                 rec( 22, 2, CommentType, BE ),
9923                 rec( 24, (1,48), ObjectName ),
9924                 rec( -1, (1,255), Comment ),
9925         ], info_str=(ObjectName, "Submit Account Charge: %s", ", %s"))
9926         pkt.Reply(8)            
9927         pkt.CompletionCodes([0x0000, 0x0102, 0x8800, 0x9400, 0x9600, 0xa201,
9928                              0xc000, 0xc101, 0xc200, 0xc400, 0xe800, 0xea00,
9929                              0xeb00, 0xec00, 0xfe07, 0xff00])
9930         # 2222/1798, 23/152
9931         pkt = NCP(0x1798, "Submit Account Hold", 'accounting')
9932         pkt.Request((17,64), [
9933                 rec( 10, 4, HoldCancelAmount, BE ),
9934                 rec( 14, 2, ObjectType, BE ),
9935                 rec( 16, (1,48), ObjectName ),
9936         ], info_str=(ObjectName, "Submit Account Hold: %s", ", %s"))
9937         pkt.Reply(8)            
9938         pkt.CompletionCodes([0x0000, 0x0102, 0x8800, 0x9400, 0x9600, 0xa201,
9939                              0xc000, 0xc101, 0xc200, 0xc400, 0xe800, 0xea00,
9940                              0xeb00, 0xec00, 0xfe07, 0xff00])
9941         # 2222/1799, 23/153
9942         pkt = NCP(0x1799, "Submit Account Note", 'accounting')
9943         pkt.Request((18,319), [
9944                 rec( 10, 2, ServiceType, BE ),
9945                 rec( 12, 2, ObjectType, BE ),
9946                 rec( 14, 2, CommentType, BE ),
9947                 rec( 16, (1,48), ObjectName ),
9948                 rec( -1, (1,255), Comment ),
9949         ], info_str=(ObjectName, "Submit Account Note: %s", ", %s"))
9950         pkt.Reply(8)            
9951         pkt.CompletionCodes([0x0000, 0x0102, 0x9600, 0xc000, 0xc101, 0xc400,
9952                              0xe800, 0xea00, 0xeb00, 0xec00, 0xf000, 0xfc06,
9953                              0xff00])
9954         # 2222/17c8, 23/200
9955         pkt = NCP(0x17c8, "Check Console Privileges", 'stats')
9956         pkt.Request(10)
9957         pkt.Reply(8)            
9958         pkt.CompletionCodes([0x0000, 0xc601])
9959         # 2222/17c9, 23/201
9960         pkt = NCP(0x17c9, "Get File Server Description Strings", 'stats')
9961         pkt.Request(10)
9962         pkt.Reply(520, [
9963                 rec( 8, 512, DescriptionStrings ),
9964         ])
9965         pkt.CompletionCodes([0x0000, 0x9600])
9966         # 2222/17CA, 23/202
9967         pkt = NCP(0x17CA, "Set File Server Date And Time", 'stats')
9968         pkt.Request(16, [
9969                 rec( 10, 1, Year ),
9970                 rec( 11, 1, Month ),
9971                 rec( 12, 1, Day ),
9972                 rec( 13, 1, Hour ),
9973                 rec( 14, 1, Minute ),
9974                 rec( 15, 1, Second ),
9975         ])
9976         pkt.Reply(8)
9977         pkt.CompletionCodes([0x0000, 0xc601])
9978         # 2222/17CB, 23/203
9979         pkt = NCP(0x17CB, "Disable File Server Login", 'stats')
9980         pkt.Request(10)
9981         pkt.Reply(8)
9982         pkt.CompletionCodes([0x0000, 0xc601])
9983         # 2222/17CC, 23/204
9984         pkt = NCP(0x17CC, "Enable File Server Login", 'stats')
9985         pkt.Request(10)
9986         pkt.Reply(8)
9987         pkt.CompletionCodes([0x0000, 0xc601])
9988         # 2222/17CD, 23/205
9989         pkt = NCP(0x17CD, "Get File Server Login Status", 'stats')
9990         pkt.Request(10)
9991         pkt.Reply(12, [
9992                 rec( 8, 4, UserLoginAllowed ),
9993         ])
9994         pkt.CompletionCodes([0x0000, 0x9600, 0xfb01])
9995         # 2222/17CF, 23/207
9996         pkt = NCP(0x17CF, "Disable Transaction Tracking", 'stats')
9997         pkt.Request(10)
9998         pkt.Reply(8)
9999         pkt.CompletionCodes([0x0000, 0xc601])
10000         # 2222/17D0, 23/208
10001         pkt = NCP(0x17D0, "Enable Transaction Tracking", 'stats')
10002         pkt.Request(10)
10003         pkt.Reply(8)
10004         pkt.CompletionCodes([0x0000, 0xc601])
10005         # 2222/17D1, 23/209
10006         pkt = NCP(0x17D1, "Send Console Broadcast", 'stats')
10007         pkt.Request((13,267), [
10008                 rec( 10, 1, NumberOfStations, var="x" ),
10009                 rec( 11, 1, StationList, repeat="x" ),
10010                 rec( 12, (1, 255), TargetMessage ),
10011         ], info_str=(TargetMessage, "Send Console Broadcast: %s", ", %s"))
10012         pkt.Reply(8)
10013         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10014         # 2222/17D2, 23/210
10015         pkt = NCP(0x17D2, "Clear Connection Number", 'stats')
10016         pkt.Request(11, [
10017                 rec( 10, 1, ConnectionNumber ),
10018         ],info_str=(ConnectionNumber, "Clear Connection Number %d", ", %d"))
10019         pkt.Reply(8)
10020         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10021         # 2222/17D3, 23/211
10022         pkt = NCP(0x17D3, "Down File Server", 'stats')
10023         pkt.Request(11, [
10024                 rec( 10, 1, ForceFlag ),
10025         ])
10026         pkt.Reply(8)
10027         pkt.CompletionCodes([0x0000, 0xc601, 0xff00])
10028         # 2222/17D4, 23/212
10029         pkt = NCP(0x17D4, "Get File System Statistics", 'stats')
10030         pkt.Request(10)
10031         pkt.Reply(50, [
10032                 rec( 8, 4, SystemIntervalMarker, BE ),
10033                 rec( 12, 2, ConfiguredMaxOpenFiles ),
10034                 rec( 14, 2, ActualMaxOpenFiles ),
10035                 rec( 16, 2, CurrentOpenFiles ),
10036                 rec( 18, 4, TotalFilesOpened ),
10037                 rec( 22, 4, TotalReadRequests ),
10038                 rec( 26, 4, TotalWriteRequests ),
10039                 rec( 30, 2, CurrentChangedFATs ),
10040                 rec( 32, 4, TotalChangedFATs ),
10041                 rec( 36, 2, FATWriteErrors ),
10042                 rec( 38, 2, FatalFATWriteErrors ),
10043                 rec( 40, 2, FATScanErrors ),
10044                 rec( 42, 2, ActualMaxIndexedFiles ),
10045                 rec( 44, 2, ActiveIndexedFiles ),
10046                 rec( 46, 2, AttachedIndexedFiles ),
10047                 rec( 48, 2, AvailableIndexedFiles ),
10048         ])
10049         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10050         # 2222/17D5, 23/213
10051         pkt = NCP(0x17D5, "Get Transaction Tracking Statistics", 'stats')
10052         pkt.Request((13,267), [
10053                 rec( 10, 2, LastRecordSeen ),
10054                 rec( 12, (1,255), SemaphoreName ),
10055         ])
10056         pkt.Reply(53, [
10057                 rec( 8, 4, SystemIntervalMarker, BE ),
10058                 rec( 12, 1, TransactionTrackingSupported ),
10059                 rec( 13, 1, TransactionTrackingEnabled ),
10060                 rec( 14, 2, TransactionVolumeNumber ),
10061                 rec( 16, 2, ConfiguredMaxSimultaneousTransactions ),
10062                 rec( 18, 2, ActualMaxSimultaneousTransactions ),
10063                 rec( 20, 2, CurrentTransactionCount ),
10064                 rec( 22, 4, TotalTransactionsPerformed ),
10065                 rec( 26, 4, TotalWriteTransactionsPerformed ),
10066                 rec( 30, 4, TotalTransactionsBackedOut ),
10067                 rec( 34, 2, TotalUnfilledBackoutRequests ),
10068                 rec( 36, 2, TransactionDiskSpace ),
10069                 rec( 38, 4, TransactionFATAllocations ),
10070                 rec( 42, 4, TransactionFileSizeChanges ),
10071                 rec( 46, 4, TransactionFilesTruncated ),
10072                 rec( 50, 1, NumberOfEntries, var="x" ),
10073                 rec( 51, 2, ConnTaskStruct, repeat="x" ),
10074         ])
10075         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10076         # 2222/17D6, 23/214
10077         pkt = NCP(0x17D6, "Read Disk Cache Statistics", 'stats')
10078         pkt.Request(10)
10079         pkt.Reply(86, [
10080                 rec( 8, 4, SystemIntervalMarker, BE ),
10081                 rec( 12, 2, CacheBufferCount ),
10082                 rec( 14, 2, CacheBufferSize ),
10083                 rec( 16, 2, DirtyCacheBuffers ),
10084                 rec( 18, 4, CacheReadRequests ),
10085                 rec( 22, 4, CacheWriteRequests ),
10086                 rec( 26, 4, CacheHits ),
10087                 rec( 30, 4, CacheMisses ),
10088                 rec( 34, 4, PhysicalReadRequests ),
10089                 rec( 38, 4, PhysicalWriteRequests ),
10090                 rec( 42, 2, PhysicalReadErrors ),
10091                 rec( 44, 2, PhysicalWriteErrors ),
10092                 rec( 46, 4, CacheGetRequests ),
10093                 rec( 50, 4, CacheFullWriteRequests ),
10094                 rec( 54, 4, CachePartialWriteRequests ),
10095                 rec( 58, 4, BackgroundDirtyWrites ),
10096                 rec( 62, 4, BackgroundAgedWrites ),
10097                 rec( 66, 4, TotalCacheWrites ),
10098                 rec( 70, 4, CacheAllocations ),
10099                 rec( 74, 2, ThrashingCount ),
10100                 rec( 76, 2, LRUBlockWasDirty ),
10101                 rec( 78, 2, ReadBeyondWrite ),
10102                 rec( 80, 2, FragmentWriteOccurred ),
10103                 rec( 82, 2, CacheHitOnUnavailableBlock ),
10104                 rec( 84, 2, CacheBlockScrapped ),
10105         ])
10106         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10107         # 2222/17D7, 23/215
10108         pkt = NCP(0x17D7, "Get Drive Mapping Table", 'stats')
10109         pkt.Request(10)
10110         pkt.Reply(184, [
10111                 rec( 8, 4, SystemIntervalMarker, BE ),
10112                 rec( 12, 1, SFTSupportLevel ),
10113                 rec( 13, 1, LogicalDriveCount ),
10114                 rec( 14, 1, PhysicalDriveCount ),
10115                 rec( 15, 1, DiskChannelTable ),
10116                 rec( 16, 4, Reserved4 ),
10117                 rec( 20, 2, PendingIOCommands, BE ),
10118                 rec( 22, 32, DriveMappingTable ),
10119                 rec( 54, 32, DriveMirrorTable ),
10120                 rec( 86, 32, DeadMirrorTable ),
10121                 rec( 118, 1, ReMirrorDriveNumber ),
10122                 rec( 119, 1, Filler ),
10123                 rec( 120, 4, ReMirrorCurrentOffset, BE ),
10124                 rec( 124, 60, SFTErrorTable ),
10125         ])
10126         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10127         # 2222/17D8, 23/216
10128         pkt = NCP(0x17D8, "Read Physical Disk Statistics", 'stats')
10129         pkt.Request(11, [
10130                 rec( 10, 1, PhysicalDiskNumber ),
10131         ])
10132         pkt.Reply(101, [
10133                 rec( 8, 4, SystemIntervalMarker, BE ),
10134                 rec( 12, 1, PhysicalDiskChannel ),
10135                 rec( 13, 1, DriveRemovableFlag ),
10136                 rec( 14, 1, PhysicalDriveType ),
10137                 rec( 15, 1, ControllerDriveNumber ),
10138                 rec( 16, 1, ControllerNumber ),
10139                 rec( 17, 1, ControllerType ),
10140                 rec( 18, 4, DriveSize ),
10141                 rec( 22, 2, DriveCylinders ),
10142                 rec( 24, 1, DriveHeads ),
10143                 rec( 25, 1, SectorsPerTrack ),
10144                 rec( 26, 64, DriveDefinitionString ),
10145                 rec( 90, 2, IOErrorCount ),
10146                 rec( 92, 4, HotFixTableStart ),
10147                 rec( 96, 2, HotFixTableSize ),
10148                 rec( 98, 2, HotFixBlocksAvailable ),
10149                 rec( 100, 1, HotFixDisabled ),
10150         ])
10151         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10152         # 2222/17D9, 23/217
10153         pkt = NCP(0x17D9, "Get Disk Channel Statistics", 'stats')
10154         pkt.Request(11, [
10155                 rec( 10, 1, DiskChannelNumber ),
10156         ])
10157         pkt.Reply(192, [
10158                 rec( 8, 4, SystemIntervalMarker, BE ),
10159                 rec( 12, 2, ChannelState, BE ),
10160                 rec( 14, 2, ChannelSynchronizationState, BE ),
10161                 rec( 16, 1, SoftwareDriverType ),
10162                 rec( 17, 1, SoftwareMajorVersionNumber ),
10163                 rec( 18, 1, SoftwareMinorVersionNumber ),
10164                 rec( 19, 65, SoftwareDescription ),
10165                 rec( 84, 8, IOAddressesUsed ),
10166                 rec( 92, 10, SharedMemoryAddresses ),
10167                 rec( 102, 4, InterruptNumbersUsed ),
10168                 rec( 106, 4, DMAChannelsUsed ),
10169                 rec( 110, 1, FlagBits ),
10170                 rec( 111, 1, Reserved ),
10171                 rec( 112, 80, ConfigurationDescription ),
10172         ])
10173         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10174         # 2222/17DB, 23/219
10175         pkt = NCP(0x17DB, "Get Connection's Open Files", 'file')
10176         pkt.Request(14, [
10177                 rec( 10, 2, ConnectionNumber ),
10178                 rec( 12, 2, LastRecordSeen, BE ),
10179         ])
10180         pkt.Reply(32, [
10181                 rec( 8, 2, NextRequestRecord ),
10182                 rec( 10, 1, NumberOfRecords, var="x" ),
10183                 rec( 11, 21, ConnStruct, repeat="x" ),
10184         ])
10185         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10186         # 2222/17DC, 23/220
10187         pkt = NCP(0x17DC, "Get Connection Using A File", 'file')
10188         pkt.Request((14,268), [
10189                 rec( 10, 2, LastRecordSeen, BE ),
10190                 rec( 12, 1, DirHandle ),
10191                 rec( 13, (1,255), Path ),
10192         ], info_str=(Path, "Get Connection Using File: %s", ", %s"))
10193         pkt.Reply(30, [
10194                 rec( 8, 2, UseCount, BE ),
10195                 rec( 10, 2, OpenCount, BE ),
10196                 rec( 12, 2, OpenForReadCount, BE ),
10197                 rec( 14, 2, OpenForWriteCount, BE ),
10198                 rec( 16, 2, DenyReadCount, BE ),
10199                 rec( 18, 2, DenyWriteCount, BE ),
10200                 rec( 20, 2, NextRequestRecord, BE ),
10201                 rec( 22, 1, Locked ),
10202                 rec( 23, 1, NumberOfRecords, var="x" ),
10203                 rec( 24, 6, ConnFileStruct, repeat="x" ),
10204         ])
10205         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10206         # 2222/17DD, 23/221
10207         pkt = NCP(0x17DD, "Get Physical Record Locks By Connection And File", 'file')
10208         pkt.Request(31, [
10209                 rec( 10, 2, TargetConnectionNumber ),
10210                 rec( 12, 2, LastRecordSeen, BE ),
10211                 rec( 14, 1, VolumeNumber ),
10212                 rec( 15, 2, DirectoryID ),
10213                 rec( 17, 14, FileName14 ),
10214         ], info_str=(FileName14, "Get Physical Record Locks by Connection and File: %s", ", %s"))
10215         pkt.Reply(22, [
10216                 rec( 8, 2, NextRequestRecord ),
10217                 rec( 10, 1, NumberOfLocks, var="x" ),
10218                 rec( 11, 1, Reserved ),
10219                 rec( 12, 10, LockStruct, repeat="x" ),
10220         ])
10221         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10222         # 2222/17DE, 23/222
10223         pkt = NCP(0x17DE, "Get Physical Record Locks By File", 'file')
10224         pkt.Request((14,268), [
10225                 rec( 10, 2, TargetConnectionNumber ),
10226                 rec( 12, 1, DirHandle ),
10227                 rec( 13, (1,255), Path ),
10228         ], info_str=(Path, "Get Physical Record Locks by File: %s", ", %s"))
10229         pkt.Reply(28, [
10230                 rec( 8, 2, NextRequestRecord ),
10231                 rec( 10, 1, NumberOfLocks, var="x" ),
10232                 rec( 11, 1, Reserved ),
10233                 rec( 12, 16, PhyLockStruct, repeat="x" ),
10234         ])
10235         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10236         # 2222/17DF, 23/223
10237         pkt = NCP(0x17DF, "Get Logical Records By Connection", 'file')
10238         pkt.Request(14, [
10239                 rec( 10, 2, TargetConnectionNumber ),
10240                 rec( 12, 2, LastRecordSeen, BE ),
10241         ])
10242         pkt.Reply((14,268), [
10243                 rec( 8, 2, NextRequestRecord ),
10244                 rec( 10, 1, NumberOfRecords, var="x" ),
10245                 rec( 11, (3, 257), LogLockStruct, repeat="x" ),
10246         ])
10247         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10248         # 2222/17E0, 23/224
10249         pkt = NCP(0x17E0, "Get Logical Record Information", 'file')
10250         pkt.Request((13,267), [
10251                 rec( 10, 2, LastRecordSeen ),
10252                 rec( 12, (1,255), LogicalRecordName ),
10253         ], info_str=(LogicalRecordName, "Get Logical Record Information: %s", ", %s"))
10254         pkt.Reply(20, [
10255                 rec( 8, 2, UseCount, BE ),
10256                 rec( 10, 2, ShareableLockCount, BE ),
10257                 rec( 12, 2, NextRequestRecord ),
10258                 rec( 14, 1, Locked ),
10259                 rec( 15, 1, NumberOfRecords, var="x" ),
10260                 rec( 16, 4, LogRecStruct, repeat="x" ),
10261         ])
10262         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10263         # 2222/17E1, 23/225
10264         pkt = NCP(0x17E1, "Get Connection's Semaphores", 'file')
10265         pkt.Request(14, [
10266                 rec( 10, 2, ConnectionNumber ),
10267                 rec( 12, 2, LastRecordSeen ),
10268         ])
10269         pkt.Reply((18,272), [
10270                 rec( 8, 2, NextRequestRecord ),
10271                 rec( 10, 2, NumberOfSemaphores, var="x" ),
10272                 rec( 12, (6,260), SemaStruct, repeat="x" ),
10273         ])
10274         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10275         # 2222/17E2, 23/226
10276         pkt = NCP(0x17E2, "Get Semaphore Information", 'file')
10277         pkt.Request((13,267), [
10278                 rec( 10, 2, LastRecordSeen ),
10279                 rec( 12, (1,255), SemaphoreName ),
10280         ], info_str=(SemaphoreName, "Get Semaphore Information: %s", ", %s"))
10281         pkt.Reply(17, [
10282                 rec( 8, 2, NextRequestRecord, BE ),
10283                 rec( 10, 2, OpenCount, BE ),
10284                 rec( 12, 1, SemaphoreValue ),
10285                 rec( 13, 1, NumberOfRecords, var="x" ),
10286                 rec( 14, 3, SemaInfoStruct, repeat="x" ),
10287         ])
10288         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10289         # 2222/17E3, 23/227
10290         pkt = NCP(0x17E3, "Get LAN Driver Configuration Information", 'stats')
10291         pkt.Request(11, [
10292                 rec( 10, 1, LANDriverNumber ),
10293         ])
10294         pkt.Reply(180, [
10295                 rec( 8, 4, NetworkAddress, BE ),
10296                 rec( 12, 6, HostAddress ),
10297                 rec( 18, 1, BoardInstalled ),
10298                 rec( 19, 1, OptionNumber ),
10299                 rec( 20, 160, ConfigurationText ),
10300         ])
10301         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10302         # 2222/17E5, 23/229
10303         pkt = NCP(0x17E5, "Get Connection Usage Statistics", 'stats')
10304         pkt.Request(12, [
10305                 rec( 10, 2, ConnectionNumber ),
10306         ])
10307         pkt.Reply(26, [
10308                 rec( 8, 2, NextRequestRecord ),
10309                 rec( 10, 6, BytesRead ),
10310                 rec( 16, 6, BytesWritten ),
10311                 rec( 22, 4, TotalRequestPackets ),
10312          ])
10313         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10314         # 2222/17E6, 23/230
10315         pkt = NCP(0x17E6, "Get Object's Remaining Disk Space", 'stats')
10316         pkt.Request(14, [
10317                 rec( 10, 4, ObjectID, BE ),
10318         ])
10319         pkt.Reply(21, [
10320                 rec( 8, 4, SystemIntervalMarker, BE ),
10321                 rec( 12, 4, ObjectID ),
10322                 rec( 16, 4, UnusedDiskBlocks, BE ),
10323                 rec( 20, 1, RestrictionsEnforced ),
10324          ])
10325         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])  
10326         # 2222/17E7, 23/231
10327         pkt = NCP(0x17E7, "Get File Server LAN I/O Statistics", 'stats')
10328         pkt.Request(10)
10329         pkt.Reply(74, [
10330                 rec( 8, 4, SystemIntervalMarker, BE ),
10331                 rec( 12, 2, ConfiguredMaxRoutingBuffers ),
10332                 rec( 14, 2, ActualMaxUsedRoutingBuffers ),
10333                 rec( 16, 2, CurrentlyUsedRoutingBuffers ),
10334                 rec( 18, 4, TotalFileServicePackets ),
10335                 rec( 22, 2, TurboUsedForFileService ),
10336                 rec( 24, 2, PacketsFromInvalidConnection ),
10337                 rec( 26, 2, BadLogicalConnectionCount ),
10338                 rec( 28, 2, PacketsReceivedDuringProcessing ),
10339                 rec( 30, 2, RequestsReprocessed ),
10340                 rec( 32, 2, PacketsWithBadSequenceNumber ),
10341                 rec( 34, 2, DuplicateRepliesSent ),
10342                 rec( 36, 2, PositiveAcknowledgesSent ),
10343                 rec( 38, 2, PacketsWithBadRequestType ),
10344                 rec( 40, 2, AttachDuringProcessing ),
10345                 rec( 42, 2, AttachWhileProcessingAttach ),
10346                 rec( 44, 2, ForgedDetachedRequests ),
10347                 rec( 46, 2, DetachForBadConnectionNumber ),
10348                 rec( 48, 2, DetachDuringProcessing ),
10349                 rec( 50, 2, RepliesCancelled ),
10350                 rec( 52, 2, PacketsDiscardedByHopCount ),
10351                 rec( 54, 2, PacketsDiscardedUnknownNet ),
10352                 rec( 56, 2, IncomingPacketDiscardedNoDGroup ),
10353                 rec( 58, 2, OutgoingPacketDiscardedNoTurboBuffer ),
10354                 rec( 60, 2, IPXNotMyNetwork ),
10355                 rec( 62, 4, NetBIOSBroadcastWasPropogated ),
10356                 rec( 66, 4, TotalOtherPackets ),
10357                 rec( 70, 4, TotalRoutedPackets ),
10358          ])
10359         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10360         # 2222/17E8, 23/232
10361         pkt = NCP(0x17E8, "Get File Server Misc Information", 'stats')
10362         pkt.Request(10)
10363         pkt.Reply(40, [
10364                 rec( 8, 4, SystemIntervalMarker, BE ),
10365                 rec( 12, 1, ProcessorType ),
10366                 rec( 13, 1, Reserved ),
10367                 rec( 14, 1, NumberOfServiceProcesses ),
10368                 rec( 15, 1, ServerUtilizationPercentage ),
10369                 rec( 16, 2, ConfiguredMaxBinderyObjects ),
10370                 rec( 18, 2, ActualMaxBinderyObjects ),
10371                 rec( 20, 2, CurrentUsedBinderyObjects ),
10372                 rec( 22, 2, TotalServerMemory ),
10373                 rec( 24, 2, WastedServerMemory ),
10374                 rec( 26, 2, NumberOfDynamicMemoryAreas, var="x" ),
10375                 rec( 28, 12, DynMemStruct, repeat="x" ),
10376          ])
10377         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10378         # 2222/17E9, 23/233
10379         pkt = NCP(0x17E9, "Get Volume Information", 'stats')
10380         pkt.Request(11, [
10381                 rec( 10, 1, VolumeNumber ),
10382         ],info_str=(VolumeNumber, "Get Information on Volume %d", ", %d"))
10383         pkt.Reply(48, [
10384                 rec( 8, 4, SystemIntervalMarker, BE ),
10385                 rec( 12, 1, VolumeNumber ),
10386                 rec( 13, 1, LogicalDriveNumber ),
10387                 rec( 14, 2, BlockSize ),
10388                 rec( 16, 2, StartingBlock ),
10389                 rec( 18, 2, TotalBlocks ),
10390                 rec( 20, 2, FreeBlocks ),
10391                 rec( 22, 2, TotalDirectoryEntries ),
10392                 rec( 24, 2, FreeDirectoryEntries ),
10393                 rec( 26, 2, ActualMaxUsedDirectoryEntries ),
10394                 rec( 28, 1, VolumeHashedFlag ),
10395                 rec( 29, 1, VolumeCachedFlag ),
10396                 rec( 30, 1, VolumeRemovableFlag ),
10397                 rec( 31, 1, VolumeMountedFlag ),
10398                 rec( 32, 16, VolumeName ),
10399          ])
10400         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10401         # 2222/17EA, 23/234
10402         pkt = NCP(0x17EA, "Get Connection's Task Information", 'stats')
10403         pkt.Request(12, [
10404                 rec( 10, 2, ConnectionNumber ),
10405         ])
10406         pkt.Reply(18, [
10407                 rec( 8, 2, NextRequestRecord ),
10408                 rec( 10, 4, NumberOfAttributes, var="x" ),
10409                 rec( 14, 4, Attributes, repeat="x" ),
10410          ])
10411         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10412         # 2222/17EB, 23/235
10413         pkt = NCP(0x17EB, "Get Connection's Open Files", 'file')
10414         pkt.Request(14, [
10415                 rec( 10, 2, ConnectionNumber ),
10416                 rec( 12, 2, LastRecordSeen ),
10417         ])
10418         pkt.Reply((29,283), [
10419                 rec( 8, 2, NextRequestRecord ),
10420                 rec( 10, 2, NumberOfRecords, var="x" ),
10421                 rec( 12, (17, 271), OpnFilesStruct, repeat="x" ),
10422         ])
10423         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10424         # 2222/17EC, 23/236
10425         pkt = NCP(0x17EC, "Get Connection Using A File", 'file')
10426         pkt.Request(18, [
10427                 rec( 10, 1, DataStreamNumber ),
10428                 rec( 11, 1, VolumeNumber ),
10429                 rec( 12, 4, DirectoryBase, LE ),
10430                 rec( 16, 2, LastRecordSeen ),
10431         ])
10432         pkt.Reply(33, [
10433                 rec( 8, 2, NextRequestRecord ),
10434                 rec( 10, 2, UseCount ),
10435                 rec( 12, 2, OpenCount ),
10436                 rec( 14, 2, OpenForReadCount ),
10437                 rec( 16, 2, OpenForWriteCount ),
10438                 rec( 18, 2, DenyReadCount ),
10439                 rec( 20, 2, DenyWriteCount ),
10440                 rec( 22, 1, Locked ),
10441                 rec( 23, 1, ForkCount ),
10442                 rec( 24, 2, NumberOfRecords, var="x" ),
10443                 rec( 26, 7, ConnStruct, repeat="x" ),
10444         ])
10445         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10446         # 2222/17ED, 23/237
10447         pkt = NCP(0x17ED, "Get Physical Record Locks By Connection And File", 'file')
10448         pkt.Request(20, [
10449                 rec( 10, 2, TargetConnectionNumber ),
10450                 rec( 12, 1, DataStreamNumber ),
10451                 rec( 13, 1, VolumeNumber ),
10452                 rec( 14, 4, DirectoryBase, LE ),
10453                 rec( 18, 2, LastRecordSeen ),
10454         ])
10455         pkt.Reply(23, [
10456                 rec( 8, 2, NextRequestRecord ),
10457                 rec( 10, 2, NumberOfLocks, var="x" ),
10458                 rec( 12, 11, LockStruct, repeat="x" ),
10459         ])
10460         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10461         # 2222/17EE, 23/238
10462         pkt = NCP(0x17EE, "Get Physical Record Locks By File", 'file')
10463         pkt.Request(18, [
10464                 rec( 10, 1, DataStreamNumber ),
10465                 rec( 11, 1, VolumeNumber ),
10466                 rec( 12, 4, DirectoryBase ),
10467                 rec( 16, 2, LastRecordSeen ),
10468         ])
10469         pkt.Reply(30, [
10470                 rec( 8, 2, NextRequestRecord ),
10471                 rec( 10, 2, NumberOfLocks, var="x" ),
10472                 rec( 12, 18, PhyLockStruct, repeat="x" ),
10473         ])
10474         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10475         # 2222/17EF, 23/239
10476         pkt = NCP(0x17EF, "Get Logical Records By Connection", 'file')
10477         pkt.Request(14, [
10478                 rec( 10, 2, TargetConnectionNumber ),
10479                 rec( 12, 2, LastRecordSeen ),
10480         ])
10481         pkt.Reply((16,270), [
10482                 rec( 8, 2, NextRequestRecord ),
10483                 rec( 10, 2, NumberOfRecords, var="x" ),
10484                 rec( 12, (4, 258), LogLockStruct, repeat="x" ),
10485         ])
10486         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10487         # 2222/17F0, 23/240
10488         pkt = NCP(0x17F0, "Get Logical Record Information (old)", 'file')
10489         pkt.Request((13,267), [
10490                 rec( 10, 2, LastRecordSeen ),
10491                 rec( 12, (1,255), LogicalRecordName ),
10492         ])
10493         pkt.Reply(22, [
10494                 rec( 8, 2, ShareableLockCount ),
10495                 rec( 10, 2, UseCount ),
10496                 rec( 12, 1, Locked ),
10497                 rec( 13, 2, NextRequestRecord ),
10498                 rec( 15, 2, NumberOfRecords, var="x" ),
10499                 rec( 17, 5, LogRecStruct, repeat="x" ),
10500         ])
10501         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10502         # 2222/17F1, 23/241
10503         pkt = NCP(0x17F1, "Get Connection's Semaphores", 'file')
10504         pkt.Request(14, [
10505                 rec( 10, 2, ConnectionNumber ),
10506                 rec( 12, 2, LastRecordSeen ),
10507         ])
10508         pkt.Reply((19,273), [
10509                 rec( 8, 2, NextRequestRecord ),
10510                 rec( 10, 2, NumberOfSemaphores, var="x" ),
10511                 rec( 12, (7, 261), SemaStruct, repeat="x" ),
10512         ])
10513         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10514         # 2222/17F2, 23/242
10515         pkt = NCP(0x17F2, "Get Semaphore Information", 'file')
10516         pkt.Request((13,267), [
10517                 rec( 10, 2, LastRecordSeen ),
10518                 rec( 12, (1,255), SemaphoreName ),
10519         ], info_str=(SemaphoreName, "Get Semaphore Information: %s", ", %s"))
10520         pkt.Reply(20, [
10521                 rec( 8, 2, NextRequestRecord ),
10522                 rec( 10, 2, OpenCount ),
10523                 rec( 12, 2, SemaphoreValue ),
10524                 rec( 14, 2, NumberOfRecords, var="x" ),
10525                 rec( 16, 4, SemaInfoStruct, repeat="x" ),
10526         ])
10527         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10528         # 2222/17F3, 23/243
10529         pkt = NCP(0x17F3, "Map Directory Number to Path", 'file')
10530         pkt.Request(16, [
10531                 rec( 10, 1, VolumeNumber ),
10532                 rec( 11, 4, DirectoryNumber ),
10533                 rec( 15, 1, NameSpace ),
10534         ])
10535         pkt.Reply((9,263), [
10536                 rec( 8, (1,255), Path ),
10537         ])
10538         pkt.CompletionCodes([0x0000, 0x9600, 0x9c00, 0xc601, 0xfd00, 0xff00])
10539         # 2222/17F4, 23/244
10540         pkt = NCP(0x17F4, "Convert Path to Dir Entry", 'file')
10541         pkt.Request((12,266), [
10542                 rec( 10, 1, DirHandle ),
10543                 rec( 11, (1,255), Path ),
10544         ], info_str=(Path, "Convert Path to Directory Entry: %s", ", %s"))
10545         pkt.Reply(13, [
10546                 rec( 8, 1, VolumeNumber ),
10547                 rec( 9, 4, DirectoryNumber ),
10548         ])
10549         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10550         # 2222/17FD, 23/253
10551         pkt = NCP(0x17FD, "Send Console Broadcast", 'stats')
10552         pkt.Request((16, 270), [
10553                 rec( 10, 1, NumberOfStations, var="x" ),
10554                 rec( 11, 4, StationList, repeat="x" ),
10555                 rec( 15, (1, 255), TargetMessage ),
10556         ], info_str=(TargetMessage, "Send Console Broadcast: %s", ", %s"))
10557         pkt.Reply(8)
10558         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10559         # 2222/17FE, 23/254
10560         pkt = NCP(0x17FE, "Clear Connection Number", 'stats')
10561         pkt.Request(14, [
10562                 rec( 10, 4, ConnectionNumber ),
10563         ])
10564         pkt.Reply(8)
10565         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10566         # 2222/18, 24
10567         pkt = NCP(0x18, "End of Job", 'connection')
10568         pkt.Request(7)
10569         pkt.Reply(8)
10570         pkt.CompletionCodes([0x0000])
10571         # 2222/19, 25
10572         pkt = NCP(0x19, "Logout", 'connection')
10573         pkt.Request(7)
10574         pkt.Reply(8)
10575         pkt.CompletionCodes([0x0000])
10576         # 2222/1A, 26
10577         pkt = NCP(0x1A, "Log Physical Record", 'file')
10578         pkt.Request(24, [
10579                 rec( 7, 1, LockFlag ),
10580                 rec( 8, 6, FileHandle ),
10581                 rec( 14, 4, LockAreasStartOffset, BE ),
10582                 rec( 18, 4, LockAreaLen, BE ),
10583                 rec( 22, 2, LockTimeout ),
10584         ])
10585         pkt.Reply(8)
10586         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
10587         # 2222/1B, 27
10588         pkt = NCP(0x1B, "Lock Physical Record Set", 'file')
10589         pkt.Request(10, [
10590                 rec( 7, 1, LockFlag ),
10591                 rec( 8, 2, LockTimeout ),
10592         ])
10593         pkt.Reply(8)
10594         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
10595         # 2222/1C, 28
10596         pkt = NCP(0x1C, "Release Physical Record", 'file')
10597         pkt.Request(22, [
10598                 rec( 7, 1, Reserved ),
10599                 rec( 8, 6, FileHandle ),
10600                 rec( 14, 4, LockAreasStartOffset ),
10601                 rec( 18, 4, LockAreaLen ),
10602         ])
10603         pkt.Reply(8)
10604         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10605         # 2222/1D, 29
10606         pkt = NCP(0x1D, "Release Physical Record Set", 'file')
10607         pkt.Request(8, [
10608                 rec( 7, 1, LockFlag ),
10609         ])
10610         pkt.Reply(8)
10611         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10612         # 2222/1E, 30   #Tested and fixed 6-14-02 GM
10613         pkt = NCP(0x1E, "Clear Physical Record", 'file')
10614         pkt.Request(22, [
10615                 rec( 7, 1, Reserved ),
10616                 rec( 8, 6, FileHandle ),
10617                 rec( 14, 4, LockAreasStartOffset, BE ),
10618                 rec( 18, 4, LockAreaLen, BE ),
10619         ])
10620         pkt.Reply(8)
10621         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10622         # 2222/1F, 31
10623         pkt = NCP(0x1F, "Clear Physical Record Set", 'file')
10624         pkt.Request(8, [
10625                 rec( 7, 1, LockFlag ),
10626         ])
10627         pkt.Reply(8)
10628         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10629         # 2222/2000, 32/00
10630         pkt = NCP(0x2000, "Open Semaphore", 'file', has_length=0)
10631         pkt.Request(10, [
10632                 rec( 8, 1, InitialSemaphoreValue ),
10633                 rec( 9, 1, SemaphoreNameLen ),
10634         ])
10635         pkt.Reply(13, [
10636                   rec( 8, 4, SemaphoreHandle, BE ),
10637                   rec( 12, 1, SemaphoreOpenCount ),
10638         ])
10639         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10640         # 2222/2001, 32/01
10641         pkt = NCP(0x2001, "Examine Semaphore", 'file', has_length=0)
10642         pkt.Request(12, [
10643                 rec( 8, 4, SemaphoreHandle, BE ),
10644         ])
10645         pkt.Reply(10, [
10646                   rec( 8, 1, SemaphoreValue ),
10647                   rec( 9, 1, SemaphoreOpenCount ),
10648         ])
10649         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10650         # 2222/2002, 32/02
10651         pkt = NCP(0x2002, "Wait On Semaphore", 'file', has_length=0)
10652         pkt.Request(14, [
10653                 rec( 8, 4, SemaphoreHandle, BE ),
10654                 rec( 12, 2, SemaphoreTimeOut, BE ), 
10655         ])
10656         pkt.Reply(8)
10657         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10658         # 2222/2003, 32/03
10659         pkt = NCP(0x2003, "Signal Semaphore", 'file', has_length=0)
10660         pkt.Request(12, [
10661                 rec( 8, 4, SemaphoreHandle, BE ),
10662         ])
10663         pkt.Reply(8)
10664         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10665         # 2222/2004, 32/04
10666         pkt = NCP(0x2004, "Close Semaphore", 'file', has_length=0)
10667         pkt.Request(12, [
10668                 rec( 8, 4, SemaphoreHandle, BE ),
10669         ])
10670         pkt.Reply(8)
10671         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10672         # 2222/21, 33
10673         pkt = NCP(0x21, "Negotiate Buffer Size", 'connection')
10674         pkt.Request(9, [
10675                 rec( 7, 2, BufferSize, BE ),
10676         ])
10677         pkt.Reply(10, [
10678                 rec( 8, 2, BufferSize, BE ),
10679         ])
10680         pkt.CompletionCodes([0x0000])
10681         # 2222/2200, 34/00
10682         pkt = NCP(0x2200, "TTS Is Available", 'tts', has_length=0)
10683         pkt.Request(8)
10684         pkt.Reply(8)
10685         pkt.CompletionCodes([0x0001, 0xfd03, 0xff12])
10686         # 2222/2201, 34/01
10687         pkt = NCP(0x2201, "TTS Begin Transaction", 'tts', has_length=0)
10688         pkt.Request(8)
10689         pkt.Reply(8)
10690         pkt.CompletionCodes([0x0000])
10691         # 2222/2202, 34/02
10692         pkt = NCP(0x2202, "TTS End Transaction", 'tts', has_length=0)
10693         pkt.Request(8)
10694         pkt.Reply(12, [
10695                   rec( 8, 4, TransactionNumber, BE ),
10696         ])                
10697         pkt.CompletionCodes([0x0000, 0xff01])
10698         # 2222/2203, 34/03
10699         pkt = NCP(0x2203, "TTS Abort Transaction", 'tts', has_length=0)
10700         pkt.Request(8)
10701         pkt.Reply(8)
10702         pkt.CompletionCodes([0x0000, 0xfd03, 0xfe0b, 0xff01])
10703         # 2222/2204, 34/04
10704         pkt = NCP(0x2204, "TTS Transaction Status", 'tts', has_length=0)
10705         pkt.Request(12, [
10706                   rec( 8, 4, TransactionNumber, BE ),
10707         ])              
10708         pkt.Reply(8)
10709         pkt.CompletionCodes([0x0000])
10710         # 2222/2205, 34/05
10711         pkt = NCP(0x2205, "TTS Get Application Thresholds", 'tts', has_length=0)
10712         pkt.Request(8)          
10713         pkt.Reply(10, [
10714                   rec( 8, 1, LogicalLockThreshold ),
10715                   rec( 9, 1, PhysicalLockThreshold ),
10716         ])
10717         pkt.CompletionCodes([0x0000])
10718         # 2222/2206, 34/06
10719         pkt = NCP(0x2206, "TTS Set Application Thresholds", 'tts', has_length=0)
10720         pkt.Request(10, [               
10721                   rec( 8, 1, LogicalLockThreshold ),
10722                   rec( 9, 1, PhysicalLockThreshold ),
10723         ])
10724         pkt.Reply(8)
10725         pkt.CompletionCodes([0x0000, 0x9600])
10726         # 2222/2207, 34/07
10727         pkt = NCP(0x2207, "TTS Get Workstation Thresholds", 'tts', has_length=0)
10728         pkt.Request(10, [               
10729                   rec( 8, 1, LogicalLockThreshold ),
10730                   rec( 9, 1, PhysicalLockThreshold ),
10731         ])
10732         pkt.Reply(8)
10733         pkt.CompletionCodes([0x0000])
10734         # 2222/2208, 34/08
10735         pkt = NCP(0x2208, "TTS Set Workstation Thresholds", 'tts', has_length=0)
10736         pkt.Request(10, [               
10737                   rec( 8, 1, LogicalLockThreshold ),
10738                   rec( 9, 1, PhysicalLockThreshold ),
10739         ])
10740         pkt.Reply(8)
10741         pkt.CompletionCodes([0x0000])
10742         # 2222/2209, 34/09
10743         pkt = NCP(0x2209, "TTS Get Transaction Bits", 'tts', has_length=0)
10744         pkt.Request(8)
10745         pkt.Reply(9, [
10746                 rec( 8, 1, ControlFlags ),
10747         ])
10748         pkt.CompletionCodes([0x0000])
10749         # 2222/220A, 34/10
10750         pkt = NCP(0x220A, "TTS Set Transaction Bits", 'tts', has_length=0)
10751         pkt.Request(9, [
10752                 rec( 8, 1, ControlFlags ),
10753         ])
10754         pkt.Reply(8)
10755         pkt.CompletionCodes([0x0000])
10756         # 2222/2301, 35/01
10757         pkt = NCP(0x2301, "AFP Create Directory", 'afp')
10758         pkt.Request((49, 303), [
10759                 rec( 10, 1, VolumeNumber ),
10760                 rec( 11, 4, BaseDirectoryID, BE ),
10761                 rec( 15, 1, Reserved ),
10762                 rec( 16, 4, CreatorID ),
10763                 rec( 20, 4, Reserved4 ),
10764                 rec( 24, 2, FinderAttr ),
10765                 rec( 26, 2, HorizLocation ),
10766                 rec( 28, 2, VertLocation ),
10767                 rec( 30, 2, FileDirWindow ),
10768                 rec( 32, 16, Reserved16 ),
10769                 rec( 48, (1,255), Path ),
10770         ], info_str=(Path, "AFP Create Directory: %s", ", %s"))
10771         pkt.Reply(12, [
10772                 rec( 8, 4, NewDirectoryID, BE ),
10773         ])
10774         pkt.CompletionCodes([0x0000, 0x8301, 0x8400, 0x8800, 0x9300, 0x9600, 0x9804,
10775                              0x9900, 0x9c03, 0x9e02, 0xa100, 0xa201, 0xfd00, 0xff18])
10776         # 2222/2302, 35/02
10777         pkt = NCP(0x2302, "AFP Create File", 'afp')
10778         pkt.Request((49, 303), [
10779                 rec( 10, 1, VolumeNumber ),
10780                 rec( 11, 4, BaseDirectoryID, BE ),
10781                 rec( 15, 1, DeleteExistingFileFlag ),
10782                 rec( 16, 4, CreatorID, BE ),
10783                 rec( 20, 4, Reserved4 ),
10784                 rec( 24, 2, FinderAttr ),
10785                 rec( 26, 2, HorizLocation, BE ),
10786                 rec( 28, 2, VertLocation, BE ),
10787                 rec( 30, 2, FileDirWindow, BE ),
10788                 rec( 32, 16, Reserved16 ),
10789                 rec( 48, (1,255), Path ),
10790         ], info_str=(Path, "AFP Create File: %s", ", %s"))
10791         pkt.Reply(12, [
10792                 rec( 8, 4, NewDirectoryID, BE ),
10793         ])
10794         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8400, 0x8701, 0x8800,
10795                              0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9300, 0x9600, 0x9804,
10796                              0x9900, 0x9b03, 0x9c03, 0x9e02, 0xa100, 0xa201, 0xfd00,
10797                              0xff18])
10798         # 2222/2303, 35/03
10799         pkt = NCP(0x2303, "AFP Delete", 'afp')
10800         pkt.Request((16,270), [
10801                 rec( 10, 1, VolumeNumber ),
10802                 rec( 11, 4, BaseDirectoryID, BE ),
10803                 rec( 15, (1,255), Path ),
10804         ], info_str=(Path, "AFP Delete: %s", ", %s"))
10805         pkt.Reply(8)
10806         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x8a00, 0x8d00, 0x8e00, 0x8f00,
10807                              0x9000, 0x9300, 0x9600, 0x9804, 0x9b03, 0x9c03, 0x9e02,
10808                              0xa000, 0xa100, 0xa201, 0xfd00, 0xff19])
10809         # 2222/2304, 35/04
10810         pkt = NCP(0x2304, "AFP Get Entry ID From Name", 'afp')
10811         pkt.Request((16,270), [
10812                 rec( 10, 1, VolumeNumber ),
10813                 rec( 11, 4, BaseDirectoryID, BE ),
10814                 rec( 15, (1,255), Path ),
10815         ], info_str=(Path, "AFP Get Entry from Name: %s", ", %s"))
10816         pkt.Reply(12, [
10817                 rec( 8, 4, TargetEntryID, BE ),
10818         ])
10819         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
10820                              0xa100, 0xa201, 0xfd00, 0xff19])
10821         # 2222/2305, 35/05
10822         pkt = NCP(0x2305, "AFP Get File Information", 'afp')
10823         pkt.Request((18,272), [
10824                 rec( 10, 1, VolumeNumber ),
10825                 rec( 11, 4, BaseDirectoryID, BE ),
10826                 rec( 15, 2, RequestBitMap, BE ),
10827                 rec( 17, (1,255), Path ),
10828         ], info_str=(Path, "AFP Get File Information: %s", ", %s"))
10829         pkt.Reply(121, [
10830                 rec( 8, 4, AFPEntryID, BE ),
10831                 rec( 12, 4, ParentID, BE ),
10832                 rec( 16, 2, AttributesDef16, LE ),
10833                 rec( 18, 4, DataForkLen, BE ),
10834                 rec( 22, 4, ResourceForkLen, BE ),
10835                 rec( 26, 2, TotalOffspring, BE  ),
10836                 rec( 28, 2, CreationDate, BE ),
10837                 rec( 30, 2, LastAccessedDate, BE ),
10838                 rec( 32, 2, ModifiedDate, BE ),
10839                 rec( 34, 2, ModifiedTime, BE ),
10840                 rec( 36, 2, ArchivedDate, BE ),
10841                 rec( 38, 2, ArchivedTime, BE ),
10842                 rec( 40, 4, CreatorID, BE ),
10843                 rec( 44, 4, Reserved4 ),
10844                 rec( 48, 2, FinderAttr ),
10845                 rec( 50, 2, HorizLocation ),
10846                 rec( 52, 2, VertLocation ),
10847                 rec( 54, 2, FileDirWindow ),
10848                 rec( 56, 16, Reserved16 ),
10849                 rec( 72, 32, LongName ),
10850                 rec( 104, 4, CreatorID, BE ),
10851                 rec( 108, 12, ShortName ),
10852                 rec( 120, 1, AccessPrivileges ),
10853         ])              
10854         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
10855                              0xa100, 0xa201, 0xfd00, 0xff19])
10856         # 2222/2306, 35/06
10857         pkt = NCP(0x2306, "AFP Get Entry ID From NetWare Handle", 'afp')
10858         pkt.Request(16, [
10859                 rec( 10, 6, FileHandle ),
10860         ])
10861         pkt.Reply(14, [
10862                 rec( 8, 1, VolumeID ),
10863                 rec( 9, 4, TargetEntryID, BE ),
10864                 rec( 13, 1, ForkIndicator ),
10865         ])              
10866         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0xa201])
10867         # 2222/2307, 35/07
10868         pkt = NCP(0x2307, "AFP Rename", 'afp')
10869         pkt.Request((21, 529), [
10870                 rec( 10, 1, VolumeNumber ),
10871                 rec( 11, 4, MacSourceBaseID, BE ),
10872                 rec( 15, 4, MacDestinationBaseID, BE ),
10873                 rec( 19, (1,255), Path ),
10874                 rec( -1, (1,255), NewFileNameLen ),
10875         ], info_str=(Path, "AFP Rename: %s", ", %s"))
10876         pkt.Reply(8)            
10877         pkt.CompletionCodes([0x0000, 0x8301, 0x8401, 0x8800, 0x8b00, 0x8e00,
10878                              0x9001, 0x9201, 0x9300, 0x9600, 0x9804, 0x9900,
10879                              0x9c03, 0x9e00, 0xa100, 0xa201, 0xfd00, 0xff0a])
10880         # 2222/2308, 35/08
10881         pkt = NCP(0x2308, "AFP Open File Fork", 'afp')
10882         pkt.Request((18, 272), [
10883                 rec( 10, 1, VolumeNumber ),
10884                 rec( 11, 4, MacBaseDirectoryID, BE ),
10885                 rec( 15, 1, ForkIndicator ),
10886                 rec( 16, 1, AccessMode ),
10887                 rec( 17, (1,255), Path ),
10888         ], info_str=(Path, "AFP Open File Fork: %s", ", %s"))
10889         pkt.Reply(22, [
10890                 rec( 8, 4, AFPEntryID, BE ),
10891                 rec( 12, 4, DataForkLen, BE ),
10892                 rec( 16, 6, NetWareAccessHandle ),
10893         ])
10894         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8800, 0x9300,
10895                              0x9400, 0x9600, 0x9804, 0x9900, 0x9c03, 0xa100,
10896                              0xa201, 0xfd00, 0xff16])
10897         # 2222/2309, 35/09
10898         pkt = NCP(0x2309, "AFP Set File Information", 'afp')
10899         pkt.Request((64, 318), [
10900                 rec( 10, 1, VolumeNumber ),
10901                 rec( 11, 4, MacBaseDirectoryID, BE ),
10902                 rec( 15, 2, RequestBitMap, BE ),
10903                 rec( 17, 2, MacAttr, BE ),
10904                 rec( 19, 2, CreationDate, BE ),
10905                 rec( 21, 2, LastAccessedDate, BE ),
10906                 rec( 23, 2, ModifiedDate, BE ),
10907                 rec( 25, 2, ModifiedTime, BE ),
10908                 rec( 27, 2, ArchivedDate, BE ),
10909                 rec( 29, 2, ArchivedTime, BE ),
10910                 rec( 31, 4, CreatorID, BE ),
10911                 rec( 35, 4, Reserved4 ),
10912                 rec( 39, 2, FinderAttr ),
10913                 rec( 41, 2, HorizLocation ),
10914                 rec( 43, 2, VertLocation ),
10915                 rec( 45, 2, FileDirWindow ),
10916                 rec( 47, 16, Reserved16 ),
10917                 rec( 63, (1,255), Path ),
10918         ], info_str=(Path, "AFP Set File Information: %s", ", %s"))
10919         pkt.Reply(8)            
10920         pkt.CompletionCodes([0x0000, 0x0104, 0x8301, 0x8800, 0x9300, 0x9400,
10921                              0x9500, 0x9600, 0x9804, 0x9c03, 0xa100, 0xa201,
10922                              0xfd00, 0xff16])
10923         # 2222/230A, 35/10
10924         pkt = NCP(0x230A, "AFP Scan File Information", 'afp')
10925         pkt.Request((26, 280), [
10926                 rec( 10, 1, VolumeNumber ),
10927                 rec( 11, 4, MacBaseDirectoryID, BE ),
10928                 rec( 15, 4, MacLastSeenID, BE ),
10929                 rec( 19, 2, DesiredResponseCount, BE ),
10930                 rec( 21, 2, SearchBitMap, BE ),
10931                 rec( 23, 2, RequestBitMap, BE ),
10932                 rec( 25, (1,255), Path ),
10933         ], info_str=(Path, "AFP Scan File Information: %s", ", %s"))
10934         pkt.Reply(123, [
10935                 rec( 8, 2, ActualResponseCount, BE, var="x" ),
10936                 rec( 10, 113, AFP10Struct, repeat="x" ),
10937         ])      
10938         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804,
10939                              0x9c03, 0xa100, 0xa201, 0xfd00, 0xff16])
10940         # 2222/230B, 35/11
10941         pkt = NCP(0x230B, "AFP Alloc Temporary Directory Handle", 'afp')
10942         pkt.Request((16,270), [
10943                 rec( 10, 1, VolumeNumber ),
10944                 rec( 11, 4, MacBaseDirectoryID, BE ),
10945                 rec( 15, (1,255), Path ),
10946         ], info_str=(Path, "AFP Allocate Temporary Directory Handle: %s", ", %s"))
10947         pkt.Reply(10, [
10948                 rec( 8, 1, DirHandle ),
10949                 rec( 9, 1, AccessRightsMask ),
10950         ])
10951         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600,
10952                              0x9804, 0x9b03, 0x9c03, 0x9d00, 0xa100,
10953                              0xa201, 0xfd00, 0xff00])
10954         # 2222/230C, 35/12
10955         pkt = NCP(0x230C, "AFP Get Entry ID From Path Name", 'afp')
10956         pkt.Request((12,266), [
10957                 rec( 10, 1, DirHandle ),
10958                 rec( 11, (1,255), Path ),
10959         ], info_str=(Path, "AFP Get Entry ID from Path Name: %s", ", %s"))
10960         pkt.Reply(12, [
10961                 rec( 8, 4, AFPEntryID, BE ),
10962         ])
10963         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600,
10964                              0x9804, 0x9b03, 0x9c03, 0xa100, 0xa201,
10965                              0xfd00, 0xff00])
10966         # 2222/230D, 35/13
10967         pkt = NCP(0x230D, "AFP 2.0 Create Directory", 'afp')
10968         pkt.Request((55,309), [
10969                 rec( 10, 1, VolumeNumber ),
10970                 rec( 11, 4, BaseDirectoryID, BE ),
10971                 rec( 15, 1, Reserved ),
10972                 rec( 16, 4, CreatorID, BE ),
10973                 rec( 20, 4, Reserved4 ),
10974                 rec( 24, 2, FinderAttr ),
10975                 rec( 26, 2, HorizLocation ),
10976                 rec( 28, 2, VertLocation ),
10977                 rec( 30, 2, FileDirWindow ),
10978                 rec( 32, 16, Reserved16 ),
10979                 rec( 48, 6, ProDOSInfo ),
10980                 rec( 54, (1,255), Path ),
10981         ], info_str=(Path, "AFP 2.0 Create Directory: %s", ", %s"))
10982         pkt.Reply(12, [
10983                 rec( 8, 4, NewDirectoryID, BE ),
10984         ])
10985         pkt.CompletionCodes([0x0000, 0x8301, 0x8400, 0x8800, 0x9300,
10986                              0x9600, 0x9804, 0x9900, 0x9c03, 0x9e00,
10987                              0xa100, 0xa201, 0xfd00, 0xff00])
10988         # 2222/230E, 35/14
10989         pkt = NCP(0x230E, "AFP 2.0 Create File", 'afp')
10990         pkt.Request((55,309), [
10991                 rec( 10, 1, VolumeNumber ),
10992                 rec( 11, 4, BaseDirectoryID, BE ),
10993                 rec( 15, 1, DeleteExistingFileFlag ),
10994                 rec( 16, 4, CreatorID, BE ),
10995                 rec( 20, 4, Reserved4 ),
10996                 rec( 24, 2, FinderAttr ),
10997                 rec( 26, 2, HorizLocation ),
10998                 rec( 28, 2, VertLocation ),
10999                 rec( 30, 2, FileDirWindow ),
11000                 rec( 32, 16, Reserved16 ),
11001                 rec( 48, 6, ProDOSInfo ),
11002                 rec( 54, (1,255), Path ),
11003         ], info_str=(Path, "AFP 2.0 Create File: %s", ", %s"))
11004         pkt.Reply(12, [
11005                 rec( 8, 4, NewDirectoryID, BE ),
11006         ])
11007         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8400,
11008                              0x8701, 0x8800, 0x8a00, 0x8d00, 0x8e00,
11009                              0x8f00, 0x9001, 0x9300, 0x9600, 0x9804,
11010                              0x9900, 0x9b03, 0x9c03, 0x9e00, 0xa100,
11011                              0xa201, 0xfd00, 0xff00])
11012         # 2222/230F, 35/15
11013         pkt = NCP(0x230F, "AFP 2.0 Get File Or Directory Information", 'afp')
11014         pkt.Request((18,272), [
11015                 rec( 10, 1, VolumeNumber ),
11016                 rec( 11, 4, BaseDirectoryID, BE ),
11017                 rec( 15, 2, RequestBitMap, BE ),
11018                 rec( 17, (1,255), Path ),
11019         ], info_str=(Path, "AFP 2.0 Get Information: %s", ", %s"))
11020         pkt.Reply(128, [
11021                 rec( 8, 4, AFPEntryID, BE ),
11022                 rec( 12, 4, ParentID, BE ),
11023                 rec( 16, 2, AttributesDef16 ),
11024                 rec( 18, 4, DataForkLen, BE ),
11025                 rec( 22, 4, ResourceForkLen, BE ),
11026                 rec( 26, 2, TotalOffspring, BE ),
11027                 rec( 28, 2, CreationDate, BE ),
11028                 rec( 30, 2, LastAccessedDate, BE ),
11029                 rec( 32, 2, ModifiedDate, BE ),
11030                 rec( 34, 2, ModifiedTime, BE ),
11031                 rec( 36, 2, ArchivedDate, BE ),
11032                 rec( 38, 2, ArchivedTime, BE ),
11033                 rec( 40, 4, CreatorID, BE ),
11034                 rec( 44, 4, Reserved4 ),
11035                 rec( 48, 2, FinderAttr ),
11036                 rec( 50, 2, HorizLocation ),
11037                 rec( 52, 2, VertLocation ),
11038                 rec( 54, 2, FileDirWindow ),
11039                 rec( 56, 16, Reserved16 ),
11040                 rec( 72, 32, LongName ),
11041                 rec( 104, 4, CreatorID, BE ),
11042                 rec( 108, 12, ShortName ),
11043                 rec( 120, 1, AccessPrivileges ),
11044                 rec( 121, 1, Reserved ),
11045                 rec( 122, 6, ProDOSInfo ),
11046         ])              
11047         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
11048                              0xa100, 0xa201, 0xfd00, 0xff19])
11049         # 2222/2310, 35/16
11050         pkt = NCP(0x2310, "AFP 2.0 Set File Information", 'afp')
11051         pkt.Request((70, 324), [
11052                 rec( 10, 1, VolumeNumber ),
11053                 rec( 11, 4, MacBaseDirectoryID, BE ),
11054                 rec( 15, 2, RequestBitMap, BE ),
11055                 rec( 17, 2, AttributesDef16 ),
11056                 rec( 19, 2, CreationDate, BE ),
11057                 rec( 21, 2, LastAccessedDate, BE ),
11058                 rec( 23, 2, ModifiedDate, BE ),
11059                 rec( 25, 2, ModifiedTime, BE ),
11060                 rec( 27, 2, ArchivedDate, BE ),
11061                 rec( 29, 2, ArchivedTime, BE ),
11062                 rec( 31, 4, CreatorID, BE ),
11063                 rec( 35, 4, Reserved4 ),
11064                 rec( 39, 2, FinderAttr ),
11065                 rec( 41, 2, HorizLocation ),
11066                 rec( 43, 2, VertLocation ),
11067                 rec( 45, 2, FileDirWindow ),
11068                 rec( 47, 16, Reserved16 ),
11069                 rec( 63, 6, ProDOSInfo ),
11070                 rec( 69, (1,255), Path ),
11071         ], info_str=(Path, "AFP 2.0 Set File Information: %s", ", %s"))
11072         pkt.Reply(8)            
11073         pkt.CompletionCodes([0x0000, 0x0104, 0x8301, 0x8800, 0x9300, 0x9400,
11074                              0x9500, 0x9600, 0x9804, 0x9c03, 0xa100, 0xa201,
11075                              0xfd00, 0xff16])
11076         # 2222/2311, 35/17
11077         pkt = NCP(0x2311, "AFP 2.0 Scan File Information", 'afp')
11078         pkt.Request((26, 280), [
11079                 rec( 10, 1, VolumeNumber ),
11080                 rec( 11, 4, MacBaseDirectoryID, BE ),
11081                 rec( 15, 4, MacLastSeenID, BE ),
11082                 rec( 19, 2, DesiredResponseCount, BE ),
11083                 rec( 21, 2, SearchBitMap, BE ),
11084                 rec( 23, 2, RequestBitMap, BE ),
11085                 rec( 25, (1,255), Path ),
11086         ], info_str=(Path, "AFP 2.0 Scan File Information: %s", ", %s"))
11087         pkt.Reply(14, [
11088                 rec( 8, 2, ActualResponseCount, var="x" ),
11089                 rec( 10, 4, AFP20Struct, repeat="x" ),
11090         ])      
11091         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804,
11092                              0x9c03, 0xa100, 0xa201, 0xfd00, 0xff16])
11093         # 2222/2312, 35/18
11094         pkt = NCP(0x2312, "AFP Get DOS Name From Entry ID", 'afp')
11095         pkt.Request(15, [
11096                 rec( 10, 1, VolumeNumber ),
11097                 rec( 11, 4, AFPEntryID, BE ),
11098         ])
11099         pkt.Reply((9,263), [
11100                 rec( 8, (1,255), Path ),
11101         ])      
11102         pkt.CompletionCodes([0x0000, 0x8900, 0x9600, 0xbf00])
11103         # 2222/2313, 35/19
11104         pkt = NCP(0x2313, "AFP Get Macintosh Info On Deleted File", 'afp')
11105         pkt.Request(15, [
11106                 rec( 10, 1, VolumeNumber ),
11107                 rec( 11, 4, DirectoryNumber, BE ),
11108         ])
11109         pkt.Reply((51,305), [
11110                 rec( 8, 4, CreatorID, BE ),
11111                 rec( 12, 4, Reserved4 ),
11112                 rec( 16, 2, FinderAttr ),
11113                 rec( 18, 2, HorizLocation ),
11114                 rec( 20, 2, VertLocation ),
11115                 rec( 22, 2, FileDirWindow ),
11116                 rec( 24, 16, Reserved16 ),
11117                 rec( 40, 6, ProDOSInfo ),
11118                 rec( 46, 4, ResourceForkSize, BE ),
11119                 rec( 50, (1,255), FileName ),
11120         ])      
11121         pkt.CompletionCodes([0x0000, 0x9c03, 0xbf00])
11122         # 2222/2400, 36/00
11123         pkt = NCP(0x2400, "Get NCP Extension Information", 'fileserver')
11124         pkt.Request(14, [
11125                 rec( 10, 4, NCPextensionNumber, LE ),
11126         ])
11127         pkt.Reply((16,270), [
11128                 rec( 8, 4, NCPextensionNumber ),
11129                 rec( 12, 1, NCPextensionMajorVersion ),
11130                 rec( 13, 1, NCPextensionMinorVersion ),
11131                 rec( 14, 1, NCPextensionRevisionNumber ),
11132                 rec( 15, (1, 255), NCPextensionName ),
11133         ])      
11134         pkt.CompletionCodes([0x0000, 0xfe00])
11135         # 2222/2401, 36/01
11136         pkt = NCP(0x2401, "Get NCP Extension Maximum Data Size", 'fileserver')
11137         pkt.Request(10)
11138         pkt.Reply(10, [
11139                 rec( 8, 2, NCPdataSize ),
11140         ])      
11141         pkt.CompletionCodes([0x0000, 0xfe00])
11142         # 2222/2402, 36/02
11143         pkt = NCP(0x2402, "Get NCP Extension Information by Name", 'fileserver')
11144         pkt.Request((11, 265), [
11145                 rec( 10, (1,255), NCPextensionName ),
11146         ], info_str=(NCPextensionName, "Get NCP Extension Information by Name: %s", ", %s"))
11147         pkt.Reply((16,270), [
11148                 rec( 8, 4, NCPextensionNumber ),
11149                 rec( 12, 1, NCPextensionMajorVersion ),
11150                 rec( 13, 1, NCPextensionMinorVersion ),
11151                 rec( 14, 1, NCPextensionRevisionNumber ),
11152                 rec( 15, (1, 255), NCPextensionName ),
11153         ])      
11154         pkt.CompletionCodes([0x0000, 0xfe00, 0xff20])
11155         # 2222/2403, 36/03
11156         pkt = NCP(0x2403, "Get Number of Registered NCP Extensions", 'fileserver')
11157         pkt.Request(10)
11158         pkt.Reply(12, [
11159                 rec( 8, 4, NumberOfNCPExtensions ),
11160         ])      
11161         pkt.CompletionCodes([0x0000, 0xfe00])
11162         # 2222/2404, 36/04
11163         pkt = NCP(0x2404, "Get NCP Extension Registered Verbs List", 'fileserver')
11164         pkt.Request(14, [
11165                 rec( 10, 4, StartingNumber ),
11166         ])
11167         pkt.Reply(20, [
11168                 rec( 8, 4, ReturnedListCount, var="x" ),
11169                 rec( 12, 4, nextStartingNumber ),
11170                 rec( 16, 4, NCPExtensionNumbers, repeat="x" ),
11171         ])      
11172         pkt.CompletionCodes([0x0000, 0xfe00])
11173         # 2222/2405, 36/05
11174         pkt = NCP(0x2405, "Return NCP Extension Information", 'fileserver')
11175         pkt.Request(14, [
11176                 rec( 10, 4, NCPextensionNumber ),
11177         ])
11178         pkt.Reply((16,270), [
11179                 rec( 8, 4, NCPextensionNumber ),
11180                 rec( 12, 1, NCPextensionMajorVersion ),
11181                 rec( 13, 1, NCPextensionMinorVersion ),
11182                 rec( 14, 1, NCPextensionRevisionNumber ),
11183                 rec( 15, (1, 255), NCPextensionName ),
11184         ])      
11185         pkt.CompletionCodes([0x0000, 0xfe00])
11186         # 2222/2406, 36/06
11187         pkt = NCP(0x2406, "Return NCP Extension Maximum Data Size", 'fileserver')
11188         pkt.Request(10)
11189         pkt.Reply(12, [
11190                 rec( 8, 4, NCPdataSize ),
11191         ])      
11192         pkt.CompletionCodes([0x0000, 0xfe00])
11193         # 2222/25, 37
11194         pkt = NCP(0x25, "Execute NCP Extension", 'fileserver')
11195         pkt.Request(11, [
11196                 rec( 7, 4, NCPextensionNumber ),
11197                 # The following value is Unicode
11198                 #rec[ 13, (1,255), RequestData ],
11199         ])
11200         pkt.Reply(8)
11201                 # The following value is Unicode
11202                 #[ 8, (1, 255), ReplyBuffer ],
11203         pkt.CompletionCodes([0x0000, 0xee00, 0xfe00])
11204         # 2222/3B, 59
11205         pkt = NCP(0x3B, "Commit File", 'file', has_length=0 )
11206         pkt.Request(14, [
11207                 rec( 7, 1, Reserved ),
11208                 rec( 8, 6, FileHandle ),
11209         ])
11210         pkt.Reply(8)    
11211         pkt.CompletionCodes([0x0000, 0x8800, 0x9804, 0xff00])
11212         # 2222/3E, 62
11213         pkt = NCP(0x3E, "File Search Initialize", 'file', has_length=0 )
11214         pkt.Request((9, 263), [
11215                 rec( 7, 1, DirHandle ),
11216                 rec( 8, (1,255), Path ),
11217         ], info_str=(Path, "Initialize File Search: %s", ", %s"))
11218         pkt.Reply(14, [
11219                 rec( 8, 1, VolumeNumber ),
11220                 rec( 9, 2, DirectoryID, BE ),
11221                 rec( 11, 2, SequenceNumber, BE ),
11222                 rec( 13, 1, AccessRightsMask ),
11223         ])
11224         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100,
11225                              0xfd00, 0xff16])
11226         # 2222/3F, 63
11227         pkt = NCP(0x3F, "File Search Continue", 'file', has_length=0 )
11228         pkt.Request((14, 268), [
11229                 rec( 7, 1, VolumeNumber ),
11230                 rec( 8, 2, DirectoryID, BE ),
11231                 rec( 10, 2, SequenceNumber, BE ),
11232                 rec( 12, 1, SearchAttributes ),
11233                 rec( 13, (1,255), Path ),
11234         ], info_str=(Path, "File Search Continue: %s", ", %s"))
11235         pkt.Reply( NO_LENGTH_CHECK, [
11236                 #
11237                 # XXX - don't show this if we got back a non-zero
11238                 # completion code?  For example, 255 means "No
11239                 # matching files or directories were found", so
11240                 # presumably it can't show you a matching file or
11241                 # directory instance - it appears to just leave crap
11242                 # there.
11243                 #
11244                 srec( DirectoryInstance, req_cond="ncp.sattr_sub==TRUE"),
11245                 srec( FileInstance, req_cond="ncp.sattr_sub!=TRUE"),
11246         ])
11247         pkt.ReqCondSizeVariable()
11248         pkt.CompletionCodes([0x0000, 0xff16])
11249         # 2222/40, 64
11250         pkt = NCP(0x40, "Search for a File", 'file')
11251         pkt.Request((12, 266), [
11252                 rec( 7, 2, SequenceNumber, BE ),
11253                 rec( 9, 1, DirHandle ),
11254                 rec( 10, 1, SearchAttributes ),
11255                 rec( 11, (1,255), FileName ),
11256         ], info_str=(FileName, "Search for File: %s", ", %s"))
11257         pkt.Reply(40, [
11258                 rec( 8, 2, SequenceNumber, BE ),
11259                 rec( 10, 2, Reserved2 ),
11260                 rec( 12, 14, FileName14 ),
11261                 rec( 26, 1, AttributesDef ),
11262                 rec( 27, 1, FileExecuteType ),
11263                 rec( 28, 4, FileSize ),
11264                 rec( 32, 2, CreationDate, BE ),
11265                 rec( 34, 2, LastAccessedDate, BE ),
11266                 rec( 36, 2, ModifiedDate, BE ),
11267                 rec( 38, 2, ModifiedTime, BE ),
11268         ])
11269         pkt.CompletionCodes([0x0000, 0x8900, 0x9600, 0x9804, 0x9b03,
11270                              0x9c03, 0xa100, 0xfd00, 0xff16])
11271         # 2222/41, 65
11272         pkt = NCP(0x41, "Open File", 'file')
11273         pkt.Request((10, 264), [
11274                 rec( 7, 1, DirHandle ),
11275                 rec( 8, 1, SearchAttributes ),
11276                 rec( 9, (1,255), FileName ),
11277         ], info_str=(FileName, "Open File: %s", ", %s"))
11278         pkt.Reply(44, [
11279                 rec( 8, 6, FileHandle ),
11280                 rec( 14, 2, Reserved2 ),
11281                 rec( 16, 14, FileName14 ),
11282                 rec( 30, 1, AttributesDef ),
11283                 rec( 31, 1, FileExecuteType ),
11284                 rec( 32, 4, FileSize, BE ),
11285                 rec( 36, 2, CreationDate, BE ),
11286                 rec( 38, 2, LastAccessedDate, BE ),
11287                 rec( 40, 2, ModifiedDate, BE ),
11288                 rec( 42, 2, ModifiedTime, BE ),
11289         ])
11290         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8200, 0x9400,
11291                              0x9600, 0x9804, 0x9c03, 0xa100, 0xfd00,
11292                              0xff16])
11293         # 2222/42, 66
11294         pkt = NCP(0x42, "Close File", 'file')
11295         pkt.Request(14, [
11296                 rec( 7, 1, Reserved ),
11297                 rec( 8, 6, FileHandle ),
11298         ])
11299         pkt.Reply(8)
11300         pkt.CompletionCodes([0x0000, 0x8800, 0xff1a])
11301         # 2222/43, 67
11302         pkt = NCP(0x43, "Create File", 'file')
11303         pkt.Request((10, 264), [
11304                 rec( 7, 1, DirHandle ),
11305                 rec( 8, 1, AttributesDef ),
11306                 rec( 9, (1,255), FileName ),
11307         ], info_str=(FileName, "Create File: %s", ", %s"))
11308         pkt.Reply(44, [
11309                 rec( 8, 6, FileHandle ),
11310                 rec( 14, 2, Reserved2 ),
11311                 rec( 16, 14, FileName14 ),
11312                 rec( 30, 1, AttributesDef ),
11313                 rec( 31, 1, FileExecuteType ),
11314                 rec( 32, 4, FileSize, BE ),
11315                 rec( 36, 2, CreationDate, BE ),
11316                 rec( 38, 2, LastAccessedDate, BE ),
11317                 rec( 40, 2, ModifiedDate, BE ),
11318                 rec( 42, 2, ModifiedTime, BE ),
11319         ])
11320         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11321                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11322                              0x9804, 0x9900, 0x9b03, 0x9c03, 0xfd00,
11323                              0xff00])
11324         # 2222/44, 68
11325         pkt = NCP(0x44, "Erase File", 'file')
11326         pkt.Request((10, 264), [
11327                 rec( 7, 1, DirHandle ),
11328                 rec( 8, 1, SearchAttributes ),
11329                 rec( 9, (1,255), FileName ),
11330         ], info_str=(FileName, "Erase File: %s", ", %s"))
11331         pkt.Reply(8)
11332         pkt.CompletionCodes([0x0000, 0x8a00, 0x8d00, 0x8e00, 0x8f00,
11333                              0x9001, 0x9600, 0x9804, 0x9b03, 0x9c03,
11334                              0xa100, 0xfd00, 0xff00])
11335         # 2222/45, 69
11336         pkt = NCP(0x45, "Rename File", 'file')
11337         pkt.Request((12, 520), [
11338                 rec( 7, 1, DirHandle ),
11339                 rec( 8, 1, SearchAttributes ),
11340                 rec( 9, (1,255), FileName ),
11341                 rec( -1, 1, TargetDirHandle ),
11342                 rec( -1, (1, 255), NewFileNameLen ),
11343         ], info_str=(FileName, "Rename File: %s", ", %s"))
11344         pkt.Reply(8)
11345         pkt.CompletionCodes([0x0000, 0x8701, 0x8b00, 0x8d00, 0x8e00,
11346                              0x8f00, 0x9001, 0x9101, 0x9201, 0x9600,
11347                              0x9804, 0x9a00, 0x9b03, 0x9c03, 0xa100,
11348                              0xfd00, 0xff16])
11349         # 2222/46, 70
11350         pkt = NCP(0x46, "Set File Attributes", 'file')
11351         pkt.Request((11, 265), [
11352                 rec( 7, 1, AttributesDef ),
11353                 rec( 8, 1, DirHandle ),
11354                 rec( 9, 1, SearchAttributes ),
11355                 rec( 10, (1,255), FileName ),
11356         ], info_str=(FileName, "Set File Attributes: %s", ", %s"))
11357         pkt.Reply(8)
11358         pkt.CompletionCodes([0x0000, 0x8c00, 0x8d00, 0x8e00, 0x9600,
11359                              0x9804, 0x9b03, 0x9c03, 0xa100, 0xfd00,
11360                              0xff16])
11361         # 2222/47, 71
11362         pkt = NCP(0x47, "Get Current Size of File", 'file')
11363         pkt.Request(13, [
11364                 rec( 7, 6, FileHandle ),
11365         ])
11366         pkt.Reply(12, [
11367                 rec( 8, 4, FileSize, BE ),
11368         ])
11369         pkt.CompletionCodes([0x0000, 0x8800])
11370         # 2222/48, 72
11371         pkt = NCP(0x48, "Read From A File", 'file')
11372         pkt.Request(20, [
11373                 rec( 7, 1, Reserved ),
11374                 rec( 8, 6, FileHandle ),
11375                 rec( 14, 4, FileOffset, BE ), 
11376                 rec( 18, 2, MaxBytes, BE ),     
11377         ])
11378         pkt.Reply(10, [ 
11379                 rec( 8, 2, NumBytes, BE ),      
11380         ])
11381         pkt.CompletionCodes([0x0000, 0x8300, 0x8800, 0x9300, 0xff00])
11382         # 2222/49, 73
11383         pkt = NCP(0x49, "Write to a File", 'file')
11384         pkt.Request(20, [
11385                 rec( 7, 1, Reserved ),
11386                 rec( 8, 6, FileHandle ),
11387                 rec( 14, 4, FileOffset, BE ),
11388                 rec( 18, 2, MaxBytes, BE ),     
11389         ])
11390         pkt.Reply(8)
11391         pkt.CompletionCodes([0x0000, 0x0104, 0x8300, 0x8800, 0x9400, 0x9500, 0xa201, 0xff1b])
11392         # 2222/4A, 74
11393         pkt = NCP(0x4A, "Copy from One File to Another", 'file')
11394         pkt.Request(30, [
11395                 rec( 7, 1, Reserved ),
11396                 rec( 8, 6, FileHandle ),
11397                 rec( 14, 6, TargetFileHandle ),
11398                 rec( 20, 4, FileOffset, BE ),
11399                 rec( 24, 4, TargetFileOffset, BE ),
11400                 rec( 28, 2, BytesToCopy, BE ),
11401         ])
11402         pkt.Reply(12, [
11403                 rec( 8, 4, BytesActuallyTransferred, BE ),
11404         ])
11405         pkt.CompletionCodes([0x0000, 0x0104, 0x8300, 0x8800, 0x9300, 0x9400,
11406                              0x9500, 0x9600, 0xa201, 0xff1b])
11407         # 2222/4B, 75
11408         pkt = NCP(0x4B, "Set File Time Date Stamp", 'file')
11409         pkt.Request(18, [
11410                 rec( 7, 1, Reserved ),
11411                 rec( 8, 6, FileHandle ),
11412                 rec( 14, 2, FileTime, BE ),
11413                 rec( 16, 2, FileDate, BE ),
11414         ])
11415         pkt.Reply(8)
11416         pkt.CompletionCodes([0x0000, 0x8800, 0x9600])
11417         # 2222/4C, 76
11418         pkt = NCP(0x4C, "Open File", 'file')
11419         pkt.Request((11, 265), [
11420                 rec( 7, 1, DirHandle ),
11421                 rec( 8, 1, SearchAttributes ),
11422                 rec( 9, 1, AccessRightsMask ),
11423                 rec( 10, (1,255), FileName ),
11424         ], info_str=(FileName, "Open File: %s", ", %s"))
11425         pkt.Reply(44, [
11426                 rec( 8, 6, FileHandle ),
11427                 rec( 14, 2, Reserved2 ),
11428                 rec( 16, 14, FileName14 ),
11429                 rec( 30, 1, AttributesDef ),
11430                 rec( 31, 1, FileExecuteType ),
11431                 rec( 32, 4, FileSize, BE ),
11432                 rec( 36, 2, CreationDate, BE ),
11433                 rec( 38, 2, LastAccessedDate, BE ),
11434                 rec( 40, 2, ModifiedDate, BE ),
11435                 rec( 42, 2, ModifiedTime, BE ),
11436         ])
11437         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8200, 0x9400,
11438                              0x9600, 0x9804, 0x9c03, 0xa100, 0xfd00,
11439                              0xff16])
11440         # 2222/4D, 77
11441         pkt = NCP(0x4D, "Create File", 'file')
11442         pkt.Request((10, 264), [
11443                 rec( 7, 1, DirHandle ),
11444                 rec( 8, 1, AttributesDef ),
11445                 rec( 9, (1,255), FileName ),
11446         ], info_str=(FileName, "Create File: %s", ", %s"))
11447         pkt.Reply(44, [
11448                 rec( 8, 6, FileHandle ),
11449                 rec( 14, 2, Reserved2 ),
11450                 rec( 16, 14, FileName14 ),
11451                 rec( 30, 1, AttributesDef ),
11452                 rec( 31, 1, FileExecuteType ),
11453                 rec( 32, 4, FileSize, BE ),
11454                 rec( 36, 2, CreationDate, BE ),
11455                 rec( 38, 2, LastAccessedDate, BE ),
11456                 rec( 40, 2, ModifiedDate, BE ),
11457                 rec( 42, 2, ModifiedTime, BE ),
11458         ])
11459         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11460                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11461                              0x9804, 0x9900, 0x9b03, 0x9c03, 0xfd00,
11462                              0xff00])
11463         # 2222/4F, 79
11464         pkt = NCP(0x4F, "Set File Extended Attributes", 'file')
11465         pkt.Request((11, 265), [
11466                 rec( 7, 1, AttributesDef ),
11467                 rec( 8, 1, DirHandle ),
11468                 rec( 9, 1, AccessRightsMask ),
11469                 rec( 10, (1,255), FileName ),
11470         ], info_str=(FileName, "Set File Extended Attributes: %s", ", %s"))
11471         pkt.Reply(8)
11472         pkt.CompletionCodes([0x0000, 0x8c00, 0x8d00, 0x8e00, 0x9600,
11473                              0x9804, 0x9b03, 0x9c03, 0xa100, 0xfd00,
11474                              0xff16])
11475         # 2222/54, 84
11476         pkt = NCP(0x54, "Open/Create File", 'file')
11477         pkt.Request((12, 266), [
11478                 rec( 7, 1, DirHandle ),
11479                 rec( 8, 1, AttributesDef ),
11480                 rec( 9, 1, AccessRightsMask ),
11481                 rec( 10, 1, ActionFlag ),
11482                 rec( 11, (1,255), FileName ),
11483         ], info_str=(FileName, "Open/Create File: %s", ", %s"))
11484         pkt.Reply(44, [
11485                 rec( 8, 6, FileHandle ),
11486                 rec( 14, 2, Reserved2 ),
11487                 rec( 16, 14, FileName14 ),
11488                 rec( 30, 1, AttributesDef ),
11489                 rec( 31, 1, FileExecuteType ),
11490                 rec( 32, 4, FileSize, BE ),
11491                 rec( 36, 2, CreationDate, BE ),
11492                 rec( 38, 2, LastAccessedDate, BE ),
11493                 rec( 40, 2, ModifiedDate, BE ),
11494                 rec( 42, 2, ModifiedTime, BE ),
11495         ])
11496         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11497                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11498                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
11499         # 2222/55, 85
11500         pkt = NCP(0x55, "Get Sparse File Data Block Bit Map", 'file')
11501         pkt.Request(17, [
11502                 rec( 7, 6, FileHandle ),
11503                 rec( 13, 4, FileOffset ),
11504         ])
11505         pkt.Reply(528, [
11506                 rec( 8, 4, AllocationBlockSize ),
11507                 rec( 12, 4, Reserved4 ),
11508                 rec( 16, 512, BitMap ),
11509         ])
11510         pkt.CompletionCodes([0x0000, 0x8800])
11511         # 2222/5601, 86/01
11512         pkt = NCP(0x5601, "Close Extended Attribute Handle", 'file', has_length=0 )
11513         pkt.Request(14, [
11514                 rec( 8, 2, Reserved2 ),
11515                 rec( 10, 4, EAHandle ),
11516         ])
11517         pkt.Reply(8)
11518         pkt.CompletionCodes([0x0000, 0xcf00, 0xd301])
11519         # 2222/5602, 86/02
11520         pkt = NCP(0x5602, "Write Extended Attribute", 'file', has_length=0 )
11521         pkt.Request((35,97), [
11522                 rec( 8, 2, EAFlags ),
11523                 rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
11524                 rec( 14, 4, ReservedOrDirectoryNumber ),
11525                 rec( 18, 4, TtlWriteDataSize ),
11526                 rec( 22, 4, FileOffset ),
11527                 rec( 26, 4, EAAccessFlag ),
11528                 rec( 30, 2, EAValueLength, var='x' ),
11529                 rec( 32, (2,64), EAKey ),
11530                 rec( -1, 1, EAValueRep, repeat='x' ),
11531         ], info_str=(EAKey, "Write Extended Attribute: %s", ", %s"))
11532         pkt.Reply(20, [
11533                 rec( 8, 4, EAErrorCodes ),
11534                 rec( 12, 4, EABytesWritten ),
11535                 rec( 16, 4, NewEAHandle ),
11536         ])
11537         pkt.CompletionCodes([0x0000, 0xc800, 0xc900, 0xcb00, 0xce00, 0xcf00, 0xd101,
11538                              0xd203, 0xd301, 0xd402])
11539         # 2222/5603, 86/03
11540         pkt = NCP(0x5603, "Read Extended Attribute", 'file', has_length=0 )
11541         pkt.Request((28,538), [
11542                 rec( 8, 2, EAFlags ),
11543                 rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
11544                 rec( 14, 4, ReservedOrDirectoryNumber ),
11545                 rec( 18, 4, FileOffset ),
11546                 rec( 22, 4, InspectSize ),
11547                 rec( 26, (2,512), EAKey ),
11548         ], info_str=(EAKey, "Read Extended Attribute: %s", ", %s"))
11549         pkt.Reply((26,536), [
11550                 rec( 8, 4, EAErrorCodes ),
11551                 rec( 12, 4, TtlValuesLength ),
11552                 rec( 16, 4, NewEAHandle ),
11553                 rec( 20, 4, EAAccessFlag ),
11554                 rec( 24, (2,512), EAValue ),
11555         ])
11556         pkt.CompletionCodes([0x0000, 0xc900, 0xce00, 0xcf00, 0xd101,
11557                              0xd301])
11558         # 2222/5604, 86/04
11559         pkt = NCP(0x5604, "Enumerate Extended Attribute", 'file', has_length=0 )
11560         pkt.Request((26,536), [
11561                 rec( 8, 2, EAFlags ),
11562                 rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
11563                 rec( 14, 4, ReservedOrDirectoryNumber ),
11564                 rec( 18, 4, InspectSize ),
11565                 rec( 22, 2, SequenceNumber ),
11566                 rec( 24, (2,512), EAKey ),
11567         ], info_str=(EAKey, "Enumerate Extended Attribute: %s", ", %s"))
11568         pkt.Reply(28, [
11569                 rec( 8, 4, EAErrorCodes ),
11570                 rec( 12, 4, TtlEAs ),
11571                 rec( 16, 4, TtlEAsDataSize ),
11572                 rec( 20, 4, TtlEAsKeySize ),
11573                 rec( 24, 4, NewEAHandle ),
11574         ])
11575         pkt.CompletionCodes([0x0000, 0x8800, 0xc900, 0xce00, 0xcf00, 0xd101,
11576                              0xd301])
11577         # 2222/5605, 86/05
11578         pkt = NCP(0x5605, "Duplicate Extended Attributes", 'file', has_length=0 )
11579         pkt.Request(28, [
11580                 rec( 8, 2, EAFlags ),
11581                 rec( 10, 2, DstEAFlags ),
11582                 rec( 12, 4, EAHandleOrNetWareHandleOrVolume ),
11583                 rec( 16, 4, ReservedOrDirectoryNumber ),
11584                 rec( 20, 4, EAHandleOrNetWareHandleOrVolume ),
11585                 rec( 24, 4, ReservedOrDirectoryNumber ),
11586         ])
11587         pkt.Reply(20, [
11588                 rec( 8, 4, EADuplicateCount ),
11589                 rec( 12, 4, EADataSizeDuplicated ),
11590                 rec( 16, 4, EAKeySizeDuplicated ),
11591         ])
11592         pkt.CompletionCodes([0x0000, 0xd101])
11593         # 2222/5701, 87/01
11594         pkt = NCP(0x5701, "Open/Create File or Subdirectory", 'file', has_length=0)
11595         pkt.Request((30, 284), [
11596                 rec( 8, 1, NameSpace  ),
11597                 rec( 9, 1, OpenCreateMode ),
11598                 rec( 10, 2, SearchAttributesLow ),
11599                 rec( 12, 2, ReturnInfoMask ),
11600                 rec( 14, 2, ExtendedInfo ),
11601                 rec( 16, 4, AttributesDef32 ),
11602                 rec( 20, 2, DesiredAccessRights ),
11603                 rec( 22, 1, VolumeNumber ),
11604                 rec( 23, 4, DirectoryBase ),
11605                 rec( 27, 1, HandleFlag ),
11606                 rec( 28, 1, PathCount, var="x" ),
11607                 rec( 29, (1,255), Path, repeat="x" ),
11608         ], info_str=(Path, "Open or Create: %s", "/%s"))
11609         pkt.Reply( NO_LENGTH_CHECK, [
11610                 rec( 8, 4, FileHandle ),
11611                 rec( 12, 1, OpenCreateAction ),
11612                 rec( 13, 1, Reserved ),
11613                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
11614                 srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
11615                 srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
11616                 srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
11617                 srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
11618                 srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
11619                 srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
11620                 srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
11621                 srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
11622                 srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
11623                 srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
11624                 srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
11625                 srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
11626                 srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
11627                 srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
11628                 srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
11629                 srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
11630                 srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
11631                 srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
11632                 srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
11633                 srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
11634                 srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
11635                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
11636                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
11637                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
11638                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
11639                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
11640                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
11641                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
11642                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
11643                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
11644                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
11645                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
11646                 srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
11647                 srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
11648                 srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
11649                 srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
11650                 srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
11651                 srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
11652                 srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
11653                 srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
11654                 srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
11655                 srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
11656                 srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
11657                 srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
11658                 srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
11659                 srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
11660         ])
11661         pkt.ReqCondSizeVariable()
11662         pkt.CompletionCodes([0x0000, 0x8001, 0x8101, 0x8401, 0x8501,
11663                              0x8701, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
11664                              0x9804, 0x9b03, 0x9c03, 0xa500, 0xbf00, 0xfd00, 0xff16])
11665         # 2222/5702, 87/02
11666         pkt = NCP(0x5702, "Initialize Search", 'file', has_length=0)
11667         pkt.Request( (18,272), [
11668                 rec( 8, 1, NameSpace  ),
11669                 rec( 9, 1, Reserved ),
11670                 rec( 10, 1, VolumeNumber ),
11671                 rec( 11, 4, DirectoryBase ),
11672                 rec( 15, 1, HandleFlag ),
11673                 rec( 16, 1, PathCount, var="x" ),
11674                 rec( 17, (1,255), Path, repeat="x" ),
11675         ], info_str=(Path, "Set Search Pointer to: %s", "/%s"))
11676         pkt.Reply(17, [
11677                 rec( 8, 1, VolumeNumber ),
11678                 rec( 9, 4, DirectoryNumber ),
11679                 rec( 13, 4, DirectoryEntryNumber ),
11680         ])
11681         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11682                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11683                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11684         # 2222/5703, 87/03
11685         pkt = NCP(0x5703, "Search for File or Subdirectory", 'file', has_length=0)
11686         pkt.Request((26, 280), [
11687                 rec( 8, 1, NameSpace  ),
11688                 rec( 9, 1, DataStream ),
11689                 rec( 10, 2, SearchAttributesLow ),
11690                 rec( 12, 2, ReturnInfoMask ),
11691                 rec( 14, 2, ExtendedInfo ),
11692                 rec( 16, 9, SearchSequence ),
11693                 rec( 25, (1,255), SearchPattern ),
11694         ], info_str=(SearchPattern, "Search for: %s", "/%s"))
11695         pkt.Reply( NO_LENGTH_CHECK, [
11696                 rec( 8, 9, SearchSequence ),
11697                 rec( 17, 1, Reserved ),
11698                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
11699                 srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
11700                 srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
11701                 srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
11702                 srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
11703                 srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
11704                 srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
11705                 srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
11706                 srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
11707                 srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
11708                 srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
11709                 srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
11710                 srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
11711                 srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
11712                 srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
11713                 srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
11714                 srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
11715                 srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
11716                 srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
11717                 srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
11718                 srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
11719                 srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
11720                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
11721                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
11722                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
11723                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
11724                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
11725                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
11726                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
11727                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
11728                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
11729                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
11730                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
11731                 srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
11732                 srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
11733                 srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
11734                 srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
11735                 srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
11736                 srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
11737                 srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
11738                 srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
11739                 srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
11740                 srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
11741                 srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
11742                 srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
11743                 srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
11744                 srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
11745         ])
11746         pkt.ReqCondSizeVariable()
11747         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11748                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11749                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11750         # 2222/5704, 87/04
11751         pkt = NCP(0x5704, "Rename Or Move a File or Subdirectory", 'file', has_length=0)
11752         pkt.Request((28, 536), [
11753                 rec( 8, 1, NameSpace  ),
11754                 rec( 9, 1, RenameFlag ),
11755                 rec( 10, 2, SearchAttributesLow ),
11756                 rec( 12, 1, VolumeNumber ),
11757                 rec( 13, 4, DirectoryBase ),
11758                 rec( 17, 1, HandleFlag ),
11759                 rec( 18, 1, PathCount, var="x" ),
11760                 rec( 19, 1, VolumeNumber ),
11761                 rec( 20, 4, DirectoryBase ),
11762                 rec( 24, 1, HandleFlag ),
11763                 rec( 25, 1, PathCount, var="y" ),
11764                 rec( 26, (1, 255), Path, repeat="x" ),
11765                 rec( -1, (1,255), Path, repeat="y" ),
11766         ], info_str=(Path, "Rename or Move: %s", "/%s"))
11767         pkt.Reply(8)
11768         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11769                              0x8701, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9200, 0x9600,
11770                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11771         # 2222/5705, 87/05
11772         pkt = NCP(0x5705, "Scan File or Subdirectory for Trustees", 'file', has_length=0)
11773         pkt.Request((24, 278), [
11774                 rec( 8, 1, NameSpace  ),
11775                 rec( 9, 1, Reserved ),
11776                 rec( 10, 2, SearchAttributesLow ),
11777                 rec( 12, 4, SequenceNumber ),
11778                 rec( 16, 1, VolumeNumber ),
11779                 rec( 17, 4, DirectoryBase ),
11780                 rec( 21, 1, HandleFlag ),
11781                 rec( 22, 1, PathCount, var="x" ),
11782                 rec( 23, (1, 255), Path, repeat="x" ),
11783         ], info_str=(Path, "Scan Trustees for: %s", "/%s"))
11784         pkt.Reply(20, [
11785                 rec( 8, 4, SequenceNumber ),
11786                 rec( 12, 2, ObjectIDCount, var="x" ),
11787                 rec( 14, 6, TrusteeStruct, repeat="x" ),
11788         ])
11789         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11790                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11791                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11792         # 2222/5706, 87/06
11793         pkt = NCP(0x5706, "Obtain File or SubDirectory Information", 'file', has_length=0)
11794         pkt.Request((24,278), [
11795                 rec( 10, 1, SrcNameSpace ),
11796                 rec( 11, 1, DestNameSpace ),
11797                 rec( 12, 2, SearchAttributesLow ),
11798                 rec( 14, 2, ReturnInfoMask, LE ),
11799                 rec( 16, 2, ExtendedInfo ),
11800                 rec( 18, 1, VolumeNumber ),
11801                 rec( 19, 4, DirectoryBase ),
11802                 rec( 23, 1, HandleFlag ),
11803                 rec( 24, 1, PathCount, var="x" ),
11804                 rec( 25, (1,255), Path, repeat="x",),
11805         ], info_str=(Path, "Obtain Info for: %s", "/%s"))
11806         pkt.Reply(NO_LENGTH_CHECK, [
11807             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
11808             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
11809             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
11810             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
11811             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
11812             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
11813             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
11814             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
11815             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
11816             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
11817             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
11818             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
11819             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
11820             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
11821             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
11822             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
11823             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
11824             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
11825             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
11826             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
11827             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
11828             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
11829             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
11830             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
11831             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
11832             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
11833             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
11834             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
11835             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
11836             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
11837             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
11838             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
11839             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
11840             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
11841             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
11842             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
11843             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
11844             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
11845             srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
11846             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
11847             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
11848             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
11849             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
11850             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
11851             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
11852             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
11853             srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
11854         ])
11855         pkt.ReqCondSizeVariable()
11856         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11857                              0x8701, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
11858                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11859         # 2222/5707, 87/07
11860         pkt = NCP(0x5707, "Modify File or Subdirectory DOS Information", 'file', has_length=0)
11861         pkt.Request((62,316), [
11862                 rec( 8, 1, NameSpace ),
11863                 rec( 9, 1, Reserved ),
11864                 rec( 10, 2, SearchAttributesLow ),
11865                 rec( 12, 2, ModifyDOSInfoMask ),
11866                 rec( 14, 2, Reserved2 ),
11867                 rec( 16, 2, AttributesDef16 ),
11868                 rec( 18, 1, FileMode ),
11869                 rec( 19, 1, FileExtendedAttributes ),
11870                 rec( 20, 2, CreationDate ),
11871                 rec( 22, 2, CreationTime ),
11872                 rec( 24, 4, CreatorID, BE ),
11873                 rec( 28, 2, ModifiedDate ),
11874                 rec( 30, 2, ModifiedTime ),
11875                 rec( 32, 4, ModifierID, BE ),
11876                 rec( 36, 2, ArchivedDate ),
11877                 rec( 38, 2, ArchivedTime ),
11878                 rec( 40, 4, ArchiverID, BE ),
11879                 rec( 44, 2, LastAccessedDate ),
11880                 rec( 46, 2, InheritedRightsMask ),
11881                 rec( 48, 2, InheritanceRevokeMask ),
11882                 rec( 50, 4, MaxSpace ),
11883                 rec( 54, 1, VolumeNumber ),
11884                 rec( 55, 4, DirectoryBase ),
11885                 rec( 59, 1, HandleFlag ),
11886                 rec( 60, 1, PathCount, var="x" ),
11887                 rec( 61, (1,255), Path, repeat="x" ),
11888         ], info_str=(Path, "Modify DOS Information for: %s", "/%s"))
11889         pkt.Reply(8)
11890         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11891                              0x8701, 0x8c01, 0x8d00, 0x8f00, 0x9001, 0x9600,
11892                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11893         # 2222/5708, 87/08
11894         pkt = NCP(0x5708, "Delete a File or Subdirectory", 'file', has_length=0)
11895         pkt.Request((20,274), [
11896                 rec( 8, 1, NameSpace ),
11897                 rec( 9, 1, Reserved ),
11898                 rec( 10, 2, SearchAttributesLow ),
11899                 rec( 12, 1, VolumeNumber ),
11900                 rec( 13, 4, DirectoryBase ),
11901                 rec( 17, 1, HandleFlag ),
11902                 rec( 18, 1, PathCount, var="x" ),
11903                 rec( 19, (1,255), Path, repeat="x" ),
11904         ], info_str=(Path, "Delete: %s", "/%s"))
11905         pkt.Reply(8)
11906         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,  
11907                              0x8701, 0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
11908                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11909         # 2222/5709, 87/09
11910         pkt = NCP(0x5709, "Set Short Directory Handle", 'file', has_length=0)
11911         pkt.Request((20,274), [
11912                 rec( 8, 1, NameSpace ),
11913                 rec( 9, 1, DataStream ),
11914                 rec( 10, 1, DestDirHandle ),
11915                 rec( 11, 1, Reserved ),
11916                 rec( 12, 1, VolumeNumber ),
11917                 rec( 13, 4, DirectoryBase ),
11918                 rec( 17, 1, HandleFlag ),
11919                 rec( 18, 1, PathCount, var="x" ),
11920                 rec( 19, (1,255), Path, repeat="x" ),
11921         ], info_str=(Path, "Set Short Directory Handle to: %s", "/%s"))
11922         pkt.Reply(8)
11923         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11924                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11925                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11926         # 2222/570A, 87/10
11927         pkt = NCP(0x570A, "Add Trustee Set to File or Subdirectory", 'file', has_length=0)
11928         pkt.Request((31,285), [
11929                 rec( 8, 1, NameSpace ),
11930                 rec( 9, 1, Reserved ),
11931                 rec( 10, 2, SearchAttributesLow ),
11932                 rec( 12, 2, AccessRightsMaskWord ),
11933                 rec( 14, 2, ObjectIDCount, var="y" ),
11934                 rec( 16, 1, VolumeNumber ),
11935                 rec( 17, 4, DirectoryBase ),
11936                 rec( 21, 1, HandleFlag ),
11937                 rec( 22, 1, PathCount, var="x" ),
11938                 rec( 23, (1,255), Path, repeat="x" ),
11939                 rec( -1, 7, TrusteeStruct, repeat="y" ),
11940         ], info_str=(Path, "Add Trustee Set to: %s", "/%s"))
11941         pkt.Reply(8)
11942         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11943                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11944                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfc01, 0xfd00, 0xff16])
11945         # 2222/570B, 87/11
11946         pkt = NCP(0x570B, "Delete Trustee Set from File or SubDirectory", 'file', has_length=0)
11947         pkt.Request((27,281), [
11948                 rec( 8, 1, NameSpace ),
11949                 rec( 9, 1, Reserved ),
11950                 rec( 10, 2, ObjectIDCount, var="y" ),
11951                 rec( 12, 1, VolumeNumber ),
11952                 rec( 13, 4, DirectoryBase ),
11953                 rec( 17, 1, HandleFlag ),
11954                 rec( 18, 1, PathCount, var="x" ),
11955                 rec( 19, (1,255), Path, repeat="x" ),
11956                 rec( -1, 7, TrusteeStruct, repeat="y" ),
11957         ], info_str=(Path, "Delete Trustee Set from: %s", "/%s"))
11958         pkt.Reply(8)
11959         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11960                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11961                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11962         # 2222/570C, 87/12
11963         pkt = NCP(0x570C, "Allocate Short Directory Handle", 'file', has_length=0)
11964         pkt.Request((20,274), [
11965                 rec( 8, 1, NameSpace ),
11966                 rec( 9, 1, Reserved ),
11967                 rec( 10, 2, AllocateMode ),
11968                 rec( 12, 1, VolumeNumber ),
11969                 rec( 13, 4, DirectoryBase ),
11970                 rec( 17, 1, HandleFlag ),
11971                 rec( 18, 1, PathCount, var="x" ),
11972                 rec( 19, (1,255), Path, repeat="x" ),
11973         ], info_str=(Path, "Allocate Short Directory Handle to: %s", "/%s"))
11974         pkt.Reply(14, [
11975                 rec( 8, 1, DirHandle ),
11976                 rec( 9, 1, VolumeNumber ),
11977                 rec( 10, 4, Reserved4 ),
11978         ])
11979         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11980                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11981                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11982         # 2222/5710, 87/16
11983         pkt = NCP(0x5710, "Scan Salvageable Files", 'file', has_length=0)
11984         pkt.Request((26,280), [
11985                 rec( 8, 1, NameSpace ),
11986                 rec( 9, 1, DataStream ),
11987                 rec( 10, 2, ReturnInfoMask ),
11988                 rec( 12, 2, ExtendedInfo ),
11989                 rec( 14, 4, SequenceNumber ),
11990                 rec( 18, 1, VolumeNumber ),
11991                 rec( 19, 4, DirectoryBase ),
11992                 rec( 23, 1, HandleFlag ),
11993                 rec( 24, 1, PathCount, var="x" ),
11994                 rec( 25, (1,255), Path, repeat="x" ),
11995         ], info_str=(Path, "Scan for Deleted Files in: %s", "/%s"))
11996         pkt.Reply(NO_LENGTH_CHECK, [
11997                 rec( 8, 4, SequenceNumber ),
11998                 rec( 12, 2, DeletedTime ),
11999                 rec( 14, 2, DeletedDate ),
12000                 rec( 16, 4, DeletedID, BE ),
12001                 rec( 20, 4, VolumeID ),
12002                 rec( 24, 4, DirectoryBase ),
12003                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12004                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12005                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12006                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12007                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12008                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12009                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12010                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12011                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12012                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12013                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12014                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12015                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12016                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12017                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12018                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12019                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12020                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12021                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12022                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12023                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12024                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12025                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12026                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12027                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12028                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12029                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12030                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12031                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12032                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12033                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12034                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12035                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12036                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12037                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12038         ])
12039         pkt.ReqCondSizeVariable()
12040         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12041                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12042                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12043         # 2222/5711, 87/17
12044         pkt = NCP(0x5711, "Recover Salvageable File", 'file', has_length=0)
12045         pkt.Request((23,277), [
12046                 rec( 8, 1, NameSpace ),
12047                 rec( 9, 1, Reserved ),
12048                 rec( 10, 4, SequenceNumber ),
12049                 rec( 14, 4, VolumeID ),
12050                 rec( 18, 4, DirectoryBase ),
12051                 rec( 22, (1,255), FileName ),
12052         ], info_str=(FileName, "Recover Deleted File: %s", ", %s"))
12053         pkt.Reply(8)
12054         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12055                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12056                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12057         # 2222/5712, 87/18
12058         pkt = NCP(0x5712, "Purge Salvageable Files", 'file', has_length=0)
12059         pkt.Request(22, [
12060                 rec( 8, 1, NameSpace ),
12061                 rec( 9, 1, Reserved ),
12062                 rec( 10, 4, SequenceNumber ),
12063                 rec( 14, 4, VolumeID ),
12064                 rec( 18, 4, DirectoryBase ),
12065         ])
12066         pkt.Reply(8)
12067         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12068                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12069                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12070         # 2222/5713, 87/19
12071         pkt = NCP(0x5713, "Get Name Space Information", 'file', has_length=0)
12072         pkt.Request(18, [
12073                 rec( 8, 1, SrcNameSpace ),
12074                 rec( 9, 1, DestNameSpace ),
12075                 rec( 10, 1, Reserved ),
12076                 rec( 11, 1, VolumeNumber ),
12077                 rec( 12, 4, DirectoryBase ),
12078                 rec( 16, 2, NamesSpaceInfoMask ),
12079         ])
12080         pkt.Reply(NO_LENGTH_CHECK, [
12081             srec( FileNameStruct, req_cond="ncp.ns_info_mask_modify == TRUE" ),
12082             srec( FileAttributesStruct, req_cond="ncp.ns_info_mask_fatt == TRUE" ),
12083             srec( CreationDateStruct, req_cond="ncp.ns_info_mask_cdate == TRUE" ),
12084             srec( CreationTimeStruct, req_cond="ncp.ns_info_mask_ctime == TRUE" ),
12085             srec( OwnerIDStruct, req_cond="ncp.ns_info_mask_owner == TRUE" ),
12086             srec( ArchiveDateStruct, req_cond="ncp.ns_info_mask_adate == TRUE" ),
12087             srec( ArchiveTimeStruct, req_cond="ncp.ns_info_mask_atime == TRUE" ),
12088             srec( ArchiveIdStruct, req_cond="ncp.ns_info_mask_aid == TRUE" ),
12089             srec( UpdateDateStruct, req_cond="ncp.ns_info_mask_udate == TRUE" ),
12090             srec( UpdateTimeStruct, req_cond="ncp.ns_info_mask_utime == TRUE" ),
12091             srec( UpdateIDStruct, req_cond="ncp.ns_info_mask_uid == TRUE" ),
12092             srec( LastAccessStruct, req_cond="ncp.ns_info_mask_acc_date == TRUE" ),
12093             srec( RightsInfoStruct, req_cond="ncp.ns_info_mask_max_acc_mask == TRUE" ),
12094         ])
12095         pkt.ReqCondSizeVariable()
12096         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12097                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12098                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12099         # 2222/5714, 87/20
12100         pkt = NCP(0x5714, "Search for File or Subdirectory Set", 'file', has_length=0)
12101         pkt.Request((28, 282), [
12102                 rec( 8, 1, NameSpace  ),
12103                 rec( 9, 1, DataStream ),
12104                 rec( 10, 2, SearchAttributesLow ),
12105                 rec( 12, 2, ReturnInfoMask ),
12106                 rec( 14, 2, ExtendedInfo ),
12107                 rec( 16, 2, ReturnInfoCount ),
12108                 rec( 18, 9, SearchSequence ),
12109                 rec( 27, (1,255), SearchPattern ),
12110         ], info_str=(SearchPattern, "Search for: %s", ", %s"))
12111         pkt.Reply(NO_LENGTH_CHECK, [
12112                 rec( 8, 9, SearchSequence ),
12113                 rec( 17, 1, MoreFlag ),
12114                 rec( 18, 2, InfoCount ),
12115             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12116             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12117             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12118             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12119             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12120             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12121             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12122             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12123             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12124             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12125             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12126             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12127             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12128             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12129             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12130             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12131             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12132             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12133             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12134             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12135             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12136             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12137             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12138             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12139             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12140             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12141             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12142             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12143             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12144             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12145             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12146             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12147             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12148             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
12149             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12150             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
12151             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
12152             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
12153             srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
12154             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
12155             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
12156             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
12157             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
12158             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
12159             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12160             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
12161             srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12162         ])
12163         pkt.ReqCondSizeVariable()
12164         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12165                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12166                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12167         # 2222/5715, 87/21
12168         pkt = NCP(0x5715, "Get Path String from Short Directory Handle", 'file', has_length=0)
12169         pkt.Request(10, [
12170                 rec( 8, 1, NameSpace ),
12171                 rec( 9, 1, DirHandle ),
12172         ])
12173         pkt.Reply((9,263), [
12174                 rec( 8, (1,255), Path ),
12175         ])
12176         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12177                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12178                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
12179         # 2222/5716, 87/22
12180         pkt = NCP(0x5716, "Generate Directory Base and Volume Number", 'file', has_length=0)
12181         pkt.Request((20,274), [
12182                 rec( 8, 1, SrcNameSpace ),
12183                 rec( 9, 1, DestNameSpace ),
12184                 rec( 10, 2, dstNSIndicator ),
12185                 rec( 12, 1, VolumeNumber ),
12186                 rec( 13, 4, DirectoryBase ),
12187                 rec( 17, 1, HandleFlag ),
12188                 rec( 18, 1, PathCount, var="x" ),
12189                 rec( 19, (1,255), Path, repeat="x" ),
12190         ], info_str=(Path, "Get Volume and Directory Base from: %s", "/%s"))
12191         pkt.Reply(17, [
12192                 rec( 8, 4, DirectoryBase ),
12193                 rec( 12, 4, DOSDirectoryBase ),
12194                 rec( 16, 1, VolumeNumber ),
12195         ])
12196         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12197                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12198                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12199         # 2222/5717, 87/23
12200         pkt = NCP(0x5717, "Query Name Space Information Format", 'file', has_length=0)
12201         pkt.Request(10, [
12202                 rec( 8, 1, NameSpace ),
12203                 rec( 9, 1, VolumeNumber ),
12204         ])
12205         pkt.Reply(58, [
12206                 rec( 8, 4, FixedBitMask ),
12207                 rec( 12, 4, VariableBitMask ),
12208                 rec( 16, 4, HugeBitMask ),
12209                 rec( 20, 2, FixedBitsDefined ),
12210                 rec( 22, 2, VariableBitsDefined ),
12211                 rec( 24, 2, HugeBitsDefined ),
12212                 rec( 26, 32, FieldsLenTable ),
12213         ])
12214         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12215                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12216                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12217         # 2222/5718, 87/24
12218         pkt = NCP(0x5718, "Get Name Spaces Loaded List from Volume Number", 'file', has_length=0)
12219         pkt.Request(10, [
12220                 rec( 8, 1, Reserved ),
12221                 rec( 9, 1, VolumeNumber ),
12222         ])
12223         pkt.Reply(11, [
12224                 rec( 8, 2, NumberOfNSLoaded, var="x" ),
12225                 rec( 10, 1, NameSpace, repeat="x" ),
12226         ])
12227         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12228                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12229                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12230         # 2222/5719, 87/25
12231         pkt = NCP(0x5719, "Set Name Space Information", 'file', has_length=0)
12232         pkt.Request(531, [
12233                 rec( 8, 1, SrcNameSpace ),
12234                 rec( 9, 1, DestNameSpace ),
12235                 rec( 10, 1, VolumeNumber ),
12236                 rec( 11, 4, DirectoryBase ),
12237                 rec( 15, 2, NamesSpaceInfoMask ),
12238                 rec( 17, 2, Reserved2 ),
12239                 rec( 19, 512, NSSpecificInfo ),
12240         ])
12241         pkt.Reply(8)
12242         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12243                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12244                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12245                              0xff16])
12246         # 2222/571A, 87/26
12247         pkt = NCP(0x571A, "Get Huge Name Space Information", 'file', has_length=0)
12248         pkt.Request(34, [
12249                 rec( 8, 1, NameSpace ),
12250                 rec( 9, 1, VolumeNumber ),
12251                 rec( 10, 4, DirectoryBase ),
12252                 rec( 14, 4, HugeBitMask ),
12253                 rec( 18, 16, HugeStateInfo ),
12254         ])
12255         pkt.Reply((25,279), [
12256                 rec( 8, 16, NextHugeStateInfo ),
12257                 rec( 24, (1,255), HugeData ),
12258         ])
12259         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12260                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12261                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12262                              0xff16])
12263         # 2222/571B, 87/27
12264         pkt = NCP(0x571B, "Set Huge Name Space Information", 'file', has_length=0)
12265         pkt.Request((35,289), [
12266                 rec( 8, 1, NameSpace ),
12267                 rec( 9, 1, VolumeNumber ),
12268                 rec( 10, 4, DirectoryBase ),
12269                 rec( 14, 4, HugeBitMask ),
12270                 rec( 18, 16, HugeStateInfo ),
12271                 rec( 34, (1,255), HugeData ),
12272         ])
12273         pkt.Reply(28, [
12274                 rec( 8, 16, NextHugeStateInfo ),
12275                 rec( 24, 4, HugeDataUsed ),
12276         ])
12277         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12278                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12279                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12280                              0xff16])
12281         # 2222/571C, 87/28
12282         pkt = NCP(0x571C, "Get Full Path String", 'file', has_length=0)
12283         pkt.Request((28,282), [
12284                 rec( 8, 1, SrcNameSpace ),
12285                 rec( 9, 1, DestNameSpace ),
12286                 rec( 10, 2, PathCookieFlags ),
12287                 rec( 12, 4, Cookie1 ),
12288                 rec( 16, 4, Cookie2 ),
12289                 rec( 20, 1, VolumeNumber ),
12290                 rec( 21, 4, DirectoryBase ),
12291                 rec( 25, 1, HandleFlag ),
12292                 rec( 26, 1, PathCount, var="x" ),
12293                 rec( 27, (1,255), Path, repeat="x" ),
12294         ], info_str=(Path, "Get Full Path from: %s", "/%s"))
12295         pkt.Reply((23,277), [
12296                 rec( 8, 2, PathCookieFlags ),
12297                 rec( 10, 4, Cookie1 ),
12298                 rec( 14, 4, Cookie2 ),
12299                 rec( 18, 2, PathComponentSize ),
12300                 rec( 20, 2, PathComponentCount, var='x' ),
12301                 rec( 22, (1,255), Path, repeat='x' ),
12302         ])
12303         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12304                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12305                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12306                              0xff16])
12307         # 2222/571D, 87/29
12308         pkt = NCP(0x571D, "Get Effective Directory Rights", 'file', has_length=0)
12309         pkt.Request((24, 278), [
12310                 rec( 8, 1, NameSpace  ),
12311                 rec( 9, 1, DestNameSpace ),
12312                 rec( 10, 2, SearchAttributesLow ),
12313                 rec( 12, 2, ReturnInfoMask ),
12314                 rec( 14, 2, ExtendedInfo ),
12315                 rec( 16, 1, VolumeNumber ),
12316                 rec( 17, 4, DirectoryBase ),
12317                 rec( 21, 1, HandleFlag ),
12318                 rec( 22, 1, PathCount, var="x" ),
12319                 rec( 23, (1,255), Path, repeat="x" ),
12320         ], info_str=(Path, "Get Effective Rights for: %s", "/%s"))
12321         pkt.Reply(NO_LENGTH_CHECK, [
12322                 rec( 8, 2, EffectiveRights ),
12323                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12324                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12325                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12326                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12327                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12328                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12329                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12330                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12331                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12332                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12333                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12334                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12335                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12336                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12337                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12338                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12339                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12340                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12341                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12342                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12343                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12344                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12345                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12346                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12347                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12348                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12349                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12350                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12351                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12352                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12353                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12354                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12355                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12356                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12357                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12358         ])
12359         pkt.ReqCondSizeVariable()
12360         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12361                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12362                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12363         # 2222/571E, 87/30
12364         pkt = NCP(0x571E, "Open/Create File or Subdirectory", 'file', has_length=0)
12365         pkt.Request((34, 288), [
12366                 rec( 8, 1, NameSpace  ),
12367                 rec( 9, 1, DataStream ),
12368                 rec( 10, 1, OpenCreateMode ),
12369                 rec( 11, 1, Reserved ),
12370                 rec( 12, 2, SearchAttributesLow ),
12371                 rec( 14, 2, Reserved2 ),
12372                 rec( 16, 2, ReturnInfoMask ),
12373                 rec( 18, 2, ExtendedInfo ),
12374                 rec( 20, 4, AttributesDef32 ),
12375                 rec( 24, 2, DesiredAccessRights ),
12376                 rec( 26, 1, VolumeNumber ),
12377                 rec( 27, 4, DirectoryBase ),
12378                 rec( 31, 1, HandleFlag ),
12379                 rec( 32, 1, PathCount, var="x" ),
12380                 rec( 33, (1,255), Path, repeat="x" ),
12381         ], info_str=(Path, "Open or Create File: %s", "/%s"))
12382         pkt.Reply(NO_LENGTH_CHECK, [
12383                 rec( 8, 4, FileHandle, BE ),
12384                 rec( 12, 1, OpenCreateAction ),
12385                 rec( 13, 1, Reserved ),
12386                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12387                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12388                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12389                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12390                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12391                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12392                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12393                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12394                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12395                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12396                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12397                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12398                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12399                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12400                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12401                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12402                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12403                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12404                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12405                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12406                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12407                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12408                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12409                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12410                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12411                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12412                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12413                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12414                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12415                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12416                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12417                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12418                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12419                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12420                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12421         ])
12422         pkt.ReqCondSizeVariable()
12423         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12424                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12425                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12426         # 2222/571F, 87/31
12427         pkt = NCP(0x571F, "Get File Information", 'file', has_length=0)
12428         pkt.Request(16, [
12429                 rec( 8, 6, FileHandle  ),
12430                 rec( 14, 1, HandleInfoLevel ),
12431                 rec( 15, 1, NameSpace ),
12432         ])
12433         pkt.Reply(NO_LENGTH_CHECK, [
12434                 rec( 8, 4, VolumeNumberLong ),
12435                 rec( 12, 4, DirectoryBase ),
12436                 srec(HandleInfoLevel0, req_cond="ncp.handle_info_level==0x00" ),
12437                 srec(HandleInfoLevel1, req_cond="ncp.handle_info_level==0x01" ),
12438                 srec(HandleInfoLevel2, req_cond="ncp.handle_info_level==0x02" ),
12439                 srec(HandleInfoLevel3, req_cond="ncp.handle_info_level==0x03" ),
12440                 srec(HandleInfoLevel4, req_cond="ncp.handle_info_level==0x04" ),
12441                 srec(HandleInfoLevel5, req_cond="ncp.handle_info_level==0x05" ),
12442         ])
12443         pkt.ReqCondSizeVariable()
12444         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12445                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12446                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12447         # 2222/5720, 87/32 
12448         pkt = NCP(0x5720, "Open/Create File or Subdirectory with Callback", 'file', has_length=0)
12449         pkt.Request((30, 284), [
12450                 rec( 8, 1, NameSpace  ),
12451                 rec( 9, 1, OpenCreateMode ),
12452                 rec( 10, 2, SearchAttributesLow ),
12453                 rec( 12, 2, ReturnInfoMask ),
12454                 rec( 14, 2, ExtendedInfo ),
12455                 rec( 16, 4, AttributesDef32 ),
12456                 rec( 20, 2, DesiredAccessRights ),
12457                 rec( 22, 1, VolumeNumber ),
12458                 rec( 23, 4, DirectoryBase ),
12459                 rec( 27, 1, HandleFlag ),
12460                 rec( 28, 1, PathCount, var="x" ),
12461                 rec( 29, (1,255), Path, repeat="x" ),
12462         ], info_str=(Path, "Open or Create with Op-Lock: %s", "/%s"))
12463         pkt.Reply( NO_LENGTH_CHECK, [
12464                 rec( 8, 4, FileHandle, BE ),
12465                 rec( 12, 1, OpenCreateAction ),
12466                 rec( 13, 1, OCRetFlags ),
12467                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12468                 srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12469                 srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12470                 srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12471                 srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12472                 srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12473                 srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12474                 srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12475                 srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12476                 srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12477                 srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12478                 srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12479                 srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12480                 srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12481                 srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12482                 srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12483                 srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12484                 srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12485                 srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12486                 srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12487                 srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12488                 srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12489                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12490                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12491                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12492                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12493                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12494                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12495                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12496                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12497                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12498                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12499                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12500                 srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
12501                 srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12502                 srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
12503                 srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
12504                 srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
12505                 srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
12506                 srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
12507                 srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
12508                 srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
12509                 srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
12510                 srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
12511                 srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12512                 srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
12513                 srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12514         ])
12515         pkt.ReqCondSizeVariable()
12516         pkt.CompletionCodes([0x0000, 0x7f00, 0x8000, 0x8101, 0x8401, 0x8501,
12517                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12518                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12519         # 2222/5721, 87/33
12520         pkt = NCP(0x5721, "Open/Create File or Subdirectory II with Callback", 'file', has_length=0)
12521         pkt.Request((34, 288), [
12522                 rec( 8, 1, NameSpace  ),
12523                 rec( 9, 1, DataStream ),
12524                 rec( 10, 1, OpenCreateMode ),
12525                 rec( 11, 1, Reserved ),
12526                 rec( 12, 2, SearchAttributesLow ),
12527                 rec( 14, 2, Reserved2 ),
12528                 rec( 16, 2, ReturnInfoMask ),
12529                 rec( 18, 2, ExtendedInfo ),
12530                 rec( 20, 4, AttributesDef32 ),
12531                 rec( 24, 2, DesiredAccessRights ),
12532                 rec( 26, 1, VolumeNumber ),
12533                 rec( 27, 4, DirectoryBase ),
12534                 rec( 31, 1, HandleFlag ),
12535                 rec( 32, 1, PathCount, var="x" ),
12536                 rec( 33, (1,255), Path, repeat="x" ),
12537         ], info_str=(FilePath, "Open or Create II with Op-Lock: %s", "/%s"))
12538         pkt.Reply((91,345), [
12539                 rec( 8, 4, FileHandle ),
12540                 rec( 12, 1, OpenCreateAction ),
12541                 rec( 13, 1, OCRetFlags ),
12542                 rec( 14, 4, DataStreamSpaceAlloc ),
12543                 rec( 18, 6, AttributesStruct ),
12544                 rec( 24, 4, DataStreamSize ),
12545                 rec( 28, 4, TtlDSDskSpaceAlloc ),
12546                 rec( 32, 2, NumberOfDataStreams ),
12547                 rec( 34, 2, CreationTime ),
12548                 rec( 36, 2, CreationDate ),
12549                 rec( 38, 4, CreatorID, BE ),
12550                 rec( 42, 2, ModifiedTime ),
12551                 rec( 44, 2, ModifiedDate ),
12552                 rec( 46, 4, ModifierID, BE ),
12553                 rec( 50, 2, LastAccessedDate ),
12554                 rec( 52, 2, ArchivedTime ),
12555                 rec( 54, 2, ArchivedDate ),
12556                 rec( 56, 4, ArchiverID, BE ),
12557                 rec( 60, 2, InheritedRightsMask ),
12558                 rec( 62, 4, DirectoryEntryNumber ),
12559                 rec( 66, 4, DOSDirectoryEntryNumber ),
12560                 rec( 70, 4, VolumeNumberLong ),
12561                 rec( 74, 4, EADataSize ),
12562                 rec( 78, 4, EACount ),
12563                 rec( 82, 4, EAKeySize ),
12564                 rec( 86, 1, CreatorNameSpaceNumber ),
12565                 rec( 87, 3, Reserved3 ),
12566                 rec( 90, (1,255), FileName ),
12567         ])
12568         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12569                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12570                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12571         # 2222/5722, 87/34
12572         pkt = NCP(0x5722, "Open CallBack Control (Op-Lock)", 'file', has_length=0)
12573         pkt.Request(13, [
12574                 rec( 10, 4, CCFileHandle ),
12575                 rec( 14, 1, CCFunction ),
12576         ])
12577         pkt.Reply(8)
12578         pkt.CompletionCodes([0x0000, 0x8800])
12579         # 2222/5723, 87/35
12580         pkt = NCP(0x5723, "Modify DOS Attributes on a File or Subdirectory", 'file', has_length=0)
12581         pkt.Request((28, 282), [
12582                 rec( 8, 1, NameSpace  ),
12583                 rec( 9, 1, Flags ),
12584                 rec( 10, 2, SearchAttributesLow ),
12585                 rec( 12, 2, ReturnInfoMask ),
12586                 rec( 14, 2, ExtendedInfo ),
12587                 rec( 16, 4, AttributesDef32 ),
12588                 rec( 20, 1, VolumeNumber ),
12589                 rec( 21, 4, DirectoryBase ),
12590                 rec( 25, 1, HandleFlag ),
12591                 rec( 26, 1, PathCount, var="x" ),
12592                 rec( 27, (1,255), Path, repeat="x" ),
12593         ], info_str=(Path, "Modify DOS Attributes for: %s", "/%s"))
12594         pkt.Reply(24, [
12595                 rec( 8, 4, ItemsChecked ),
12596                 rec( 12, 4, ItemsChanged ),
12597                 rec( 16, 4, AttributeValidFlag ),
12598                 rec( 20, 4, AttributesDef32 ),
12599         ])
12600         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12601                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12602                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12603         # 2222/5724, 87/36
12604         pkt = NCP(0x5724, "Log File", 'file', has_length=0)
12605         pkt.Request((28, 282), [
12606                 rec( 8, 1, NameSpace  ),
12607                 rec( 9, 1, Reserved ),
12608                 rec( 10, 2, Reserved2 ),
12609                 rec( 12, 1, LogFileFlagLow ),
12610                 rec( 13, 1, LogFileFlagHigh ),
12611                 rec( 14, 2, Reserved2 ),
12612                 rec( 16, 4, WaitTime ),
12613                 rec( 20, 1, VolumeNumber ),
12614                 rec( 21, 4, DirectoryBase ),
12615                 rec( 25, 1, HandleFlag ),
12616                 rec( 26, 1, PathCount, var="x" ),
12617                 rec( 27, (1,255), Path, repeat="x" ),
12618         ], info_str=(Path, "Lock File: %s", "/%s"))
12619         pkt.Reply(8)
12620         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12621                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12622                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12623         # 2222/5725, 87/37
12624         pkt = NCP(0x5725, "Release File", 'file', has_length=0)
12625         pkt.Request((20, 274), [
12626                 rec( 8, 1, NameSpace  ),
12627                 rec( 9, 1, Reserved ),
12628                 rec( 10, 2, Reserved2 ),
12629                 rec( 12, 1, VolumeNumber ),
12630                 rec( 13, 4, DirectoryBase ),
12631                 rec( 17, 1, HandleFlag ),
12632                 rec( 18, 1, PathCount, var="x" ),
12633                 rec( 19, (1,255), Path, repeat="x" ),
12634         ], info_str=(Path, "Release Lock on: %s", "/%s"))
12635         pkt.Reply(8)
12636         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12637                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12638                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12639         # 2222/5726, 87/38
12640         pkt = NCP(0x5726, "Clear File", 'file', has_length=0)
12641         pkt.Request((20, 274), [
12642                 rec( 8, 1, NameSpace  ),
12643                 rec( 9, 1, Reserved ),
12644                 rec( 10, 2, Reserved2 ),
12645                 rec( 12, 1, VolumeNumber ),
12646                 rec( 13, 4, DirectoryBase ),
12647                 rec( 17, 1, HandleFlag ),
12648                 rec( 18, 1, PathCount, var="x" ),
12649                 rec( 19, (1,255), Path, repeat="x" ),
12650         ], info_str=(Path, "Clear File: %s", "/%s"))
12651         pkt.Reply(8)
12652         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12653                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12654                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12655         # 2222/5727, 87/39
12656         pkt = NCP(0x5727, "Get Directory Disk Space Restriction", 'file', has_length=0)
12657         pkt.Request((19, 273), [
12658                 rec( 8, 1, NameSpace  ),
12659                 rec( 9, 2, Reserved2 ),
12660                 rec( 11, 1, VolumeNumber ),
12661                 rec( 12, 4, DirectoryBase ),
12662                 rec( 16, 1, HandleFlag ),
12663                 rec( 17, 1, PathCount, var="x" ),
12664                 rec( 18, (1,255), Path, repeat="x" ),
12665         ], info_str=(Path, "Get Disk Space Restriction for: %s", "/%s"))
12666         pkt.Reply(18, [
12667                 rec( 8, 1, NumberOfEntries, var="x" ),
12668                 rec( 9, 9, SpaceStruct, repeat="x" ),
12669         ])
12670         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12671                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12672                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12673                              0xff16])
12674         # 2222/5728, 87/40
12675         pkt = NCP(0x5728, "Search for File or Subdirectory Set (Extended Errors)", 'file', has_length=0)
12676         pkt.Request((28, 282), [
12677                 rec( 8, 1, NameSpace  ),
12678                 rec( 9, 1, DataStream ),
12679                 rec( 10, 2, SearchAttributesLow ),
12680                 rec( 12, 2, ReturnInfoMask ),
12681                 rec( 14, 2, ExtendedInfo ),
12682                 rec( 16, 2, ReturnInfoCount ),
12683                 rec( 18, 9, SearchSequence ),
12684                 rec( 27, (1,255), SearchPattern ),
12685         ], info_str=(SearchPattern, "Search for: %s", ", %s"))
12686         pkt.Reply(NO_LENGTH_CHECK, [
12687                 rec( 8, 9, SearchSequence ),
12688                 rec( 17, 1, MoreFlag ),
12689                 rec( 18, 2, InfoCount ),
12690                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12691                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12692                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12693                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12694                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12695                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12696                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12697                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12698                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12699                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12700                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12701                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12702                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12703                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12704                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12705                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12706                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12707                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12708                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12709                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12710                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12711                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12712                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12713                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12714                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12715                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12716                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12717                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12718                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12719                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12720                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12721                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12722                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12723                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12724                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12725         ])
12726         pkt.ReqCondSizeVariable()
12727         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12728                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12729                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12730         # 2222/5729, 87/41
12731         pkt = NCP(0x5729, "Scan Salvageable Files", 'file', has_length=0)
12732         pkt.Request((24,278), [
12733                 rec( 8, 1, NameSpace ),
12734                 rec( 9, 1, Reserved ),
12735                 rec( 10, 2, CtrlFlags, LE ),
12736                 rec( 12, 4, SequenceNumber ),
12737                 rec( 16, 1, VolumeNumber ),
12738                 rec( 17, 4, DirectoryBase ),
12739                 rec( 21, 1, HandleFlag ),
12740                 rec( 22, 1, PathCount, var="x" ),
12741                 rec( 23, (1,255), Path, repeat="x" ),
12742         ], info_str=(Path, "Scan Deleted Files: %s", "/%s"))
12743         pkt.Reply(NO_LENGTH_CHECK, [
12744                 rec( 8, 4, SequenceNumber ),
12745                 rec( 12, 4, DirectoryBase ),
12746                 rec( 16, 4, ScanItems, var="x" ),
12747                 srec(ScanInfoFileName, req_cond="ncp.ctrl_flags==0x0001", repeat="x" ),
12748                 srec(ScanInfoFileNoName, req_cond="ncp.ctrl_flags==0x0000", repeat="x" ),
12749         ])
12750         pkt.ReqCondSizeVariable()
12751         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12752                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12753                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12754         # 2222/572A, 87/42
12755         pkt = NCP(0x572A, "Purge Salvageable File List", 'file', has_length=0)
12756         pkt.Request(28, [
12757                 rec( 8, 1, NameSpace ),
12758                 rec( 9, 1, Reserved ),
12759                 rec( 10, 2, PurgeFlags ),
12760                 rec( 12, 4, VolumeNumberLong ),
12761                 rec( 16, 4, DirectoryBase ),
12762                 rec( 20, 4, PurgeCount, var="x" ),
12763                 rec( 24, 4, PurgeList, repeat="x" ),
12764         ])
12765         pkt.Reply(16, [
12766                 rec( 8, 4, PurgeCount, var="x" ),
12767                 rec( 12, 4, PurgeCcode, repeat="x" ),
12768         ])
12769         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12770                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12771                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12772         # 2222/572B, 87/43
12773         pkt = NCP(0x572B, "Revoke File Handle Rights", 'file', has_length=0)
12774         pkt.Request(17, [
12775                 rec( 8, 3, Reserved3 ),
12776                 rec( 11, 1, RevQueryFlag ),
12777                 rec( 12, 4, FileHandle ),
12778                 rec( 16, 1, RemoveOpenRights ),
12779         ])
12780         pkt.Reply(13, [
12781                 rec( 8, 4, FileHandle ),
12782                 rec( 12, 1, OpenRights ),
12783         ])
12784         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12785                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12786                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12787         # 2222/572C, 87/44
12788         pkt = NCP(0x572C, "Update File Handle Rights", 'file', has_length=0)
12789         pkt.Request(24, [
12790                 rec( 8, 2, Reserved2 ),
12791                 rec( 10, 1, VolumeNumber ),
12792                 rec( 11, 1, NameSpace ),
12793                 rec( 12, 4, DirectoryNumber ),
12794                 rec( 16, 2, AccessRightsMaskWord ),
12795                 rec( 18, 2, NewAccessRights ),
12796                 rec( 20, 4, FileHandle, BE ),
12797         ])
12798         pkt.Reply(16, [
12799                 rec( 8, 4, FileHandle, BE ),
12800                 rec( 12, 4, EffectiveRights ),
12801         ])
12802         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12803                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12804                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12805         # 2222/5742, 87/66
12806         pkt = NCP(0x5742, "Novell Advanced Auditing Service (NAAS)", 'auditing', has_length=0)
12807         pkt.Request(8)
12808         pkt.Reply(8)
12809         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12810                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12811                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12812         # 2222/5801, 8801
12813         pkt = NCP(0x5801, "Query Volume Audit Status", "auditing", has_length=0)
12814         pkt.Request(12, [
12815                 rec( 8, 4, ConnectionNumber ),
12816         ])
12817         pkt.Reply(40, [
12818                 rec(8, 32, NWAuditStatus ),
12819         ])
12820         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12821                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12822                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12823         # 2222/5802, 8802
12824         pkt = NCP(0x5802, "Add User Audit Property", "auditing", has_length=0)
12825         pkt.Request(25, [
12826                 rec(8, 4, AuditIDType ),
12827                 rec(12, 4, AuditID ),
12828                 rec(16, 4, AuditHandle ),
12829                 rec(20, 4, ObjectID ),
12830                 rec(24, 1, AuditFlag ),
12831         ])
12832         pkt.Reply(8)
12833         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12834                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12835                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12836         # 2222/5803, 8803
12837         pkt = NCP(0x5803, "Add Auditor Access", "auditing", has_length=0)
12838         pkt.Request(8)
12839         pkt.Reply(8)
12840         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12841                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12842                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12843         # 2222/5804, 8804
12844         pkt = NCP(0x5804, "Change Auditor Volume Password", "auditing", has_length=0)
12845         pkt.Request(8)
12846         pkt.Reply(8)
12847         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12848                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12849                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12850         # 2222/5805, 8805
12851         pkt = NCP(0x5805, "Check Auditor Access", "auditing", has_length=0)
12852         pkt.Request(8)
12853         pkt.Reply(8)
12854         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12855                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12856                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12857         # 2222/5806, 8806
12858         pkt = NCP(0x5806, "Delete User Audit Property", "auditing", has_length=0)
12859         pkt.Request(8)
12860         pkt.Reply(8)
12861         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12862                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12863                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12864         # 2222/5807, 8807
12865         pkt = NCP(0x5807, "Disable Auditing On A Volume", "auditing", has_length=0)
12866         pkt.Request(8)
12867         pkt.Reply(8)
12868         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12869                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12870                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12871         # 2222/5808, 8808
12872         pkt = NCP(0x5808, "Enable Auditing On A Volume", "auditing", has_length=0)
12873         pkt.Request(8)
12874         pkt.Reply(8)
12875         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12876                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12877                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12878         # 2222/5809, 8809
12879         pkt = NCP(0x5809, "Query User Being Audited", "auditing", has_length=0)
12880         pkt.Request(8)
12881         pkt.Reply(8)
12882         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12883                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12884                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12885         # 2222/580A, 88,10
12886         pkt = NCP(0x580A, "Read Audit Bit Map", "auditing", has_length=0)
12887         pkt.Request(8)
12888         pkt.Reply(8)
12889         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12890                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12891                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12892         # 2222/580B, 88,11
12893         pkt = NCP(0x580B, "Read Audit File Configuration Header", "auditing", has_length=0)
12894         pkt.Request(8)
12895         pkt.Reply(8)
12896         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12897                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12898                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12899         # 2222/580D, 88,13
12900         pkt = NCP(0x580D, "Remove Auditor Access", "auditing", has_length=0)
12901         pkt.Request(8)
12902         pkt.Reply(8)
12903         pkt.CompletionCodes([0x0000, 0x300, 0x8000, 0x8101, 0x8401, 0x8501,
12904                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12905                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12906         # 2222/580E, 88,14
12907         pkt = NCP(0x580E, "Reset Audit File", "auditing", has_length=0)
12908         pkt.Request(8)
12909         pkt.Reply(8)
12910         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12911                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12912                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12913                              
12914         # 2222/580F, 88,15
12915         pkt = NCP(0x580F, "Auditing NCP", "auditing", has_length=0)
12916         pkt.Request(8)
12917         pkt.Reply(8)
12918         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12919                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12920                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12921         # 2222/5810, 88,16
12922         pkt = NCP(0x5810, "Write Audit Bit Map", "auditing", has_length=0)
12923         pkt.Request(8)
12924         pkt.Reply(8)
12925         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12926                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12927                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12928         # 2222/5811, 88,17
12929         pkt = NCP(0x5811, "Write Audit File Configuration Header", "auditing", has_length=0)
12930         pkt.Request(8)
12931         pkt.Reply(8)
12932         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12933                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12934                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12935         # 2222/5812, 88,18
12936         pkt = NCP(0x5812, "Change Auditor Volume Password2", "auditing", has_length=0)
12937         pkt.Request(8)
12938         pkt.Reply(8)
12939         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12940                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12941                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12942         # 2222/5813, 88,19
12943         pkt = NCP(0x5813, "Return Audit Flags", "auditing", has_length=0)
12944         pkt.Request(8)
12945         pkt.Reply(8)
12946         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12947                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12948                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12949         # 2222/5814, 88,20
12950         pkt = NCP(0x5814, "Close Old Audit File", "auditing", has_length=0)
12951         pkt.Request(8)
12952         pkt.Reply(8)
12953         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12954                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12955                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12956         # 2222/5816, 88,22
12957         pkt = NCP(0x5816, "Check Level Two Access", "auditing", has_length=0)
12958         pkt.Request(8)
12959         pkt.Reply(8)
12960         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12961                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12962                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12963         # 2222/5817, 88,23
12964         pkt = NCP(0x5817, "Return Old Audit File List", "auditing", has_length=0)
12965         pkt.Request(8)
12966         pkt.Reply(8)
12967         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12968                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12969                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12970         # 2222/5818, 88,24
12971         pkt = NCP(0x5818, "Init Audit File Reads", "auditing", has_length=0)
12972         pkt.Request(8)
12973         pkt.Reply(8)
12974         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12975                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12976                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12977         # 2222/5819, 88,25
12978         pkt = NCP(0x5819, "Read Auditing File", "auditing", has_length=0)
12979         pkt.Request(8)
12980         pkt.Reply(8)
12981         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12982                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12983                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12984         # 2222/581A, 88,26
12985         pkt = NCP(0x581A, "Delete Old Audit File", "auditing", has_length=0)
12986         pkt.Request(8)
12987         pkt.Reply(8)
12988         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12989                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12990                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12991         # 2222/581E, 88,30
12992         pkt = NCP(0x581E, "Restart Volume auditing", "auditing", has_length=0)
12993         pkt.Request(8)
12994         pkt.Reply(8)
12995         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12996                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12997                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12998         # 2222/581F, 88,31
12999         pkt = NCP(0x581F, "Set Volume Password", "auditing", has_length=0)
13000         pkt.Request(8)
13001         pkt.Reply(8)
13002         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13003                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13004                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13005         # 2222/5A01, 90/00
13006         pkt = NCP(0x5A01, "Parse Tree", 'file')
13007         pkt.Request(26, [
13008                 rec( 10, 4, InfoMask ),
13009                 rec( 14, 4, Reserved4 ),
13010                 rec( 18, 4, Reserved4 ),
13011                 rec( 22, 4, limbCount ),
13012         ])
13013         pkt.Reply(32, [
13014                 rec( 8, 4, limbCount ),
13015                 rec( 12, 4, ItemsCount ),
13016                 rec( 16, 4, nextLimbScanNum ),
13017                 rec( 20, 4, CompletionCode ),
13018                 rec( 24, 1, FolderFlag ),
13019                 rec( 25, 3, Reserved ),
13020                 rec( 28, 4, DirectoryBase ),
13021         ])
13022         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13023                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13024                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13025         # 2222/5A0A, 90/10
13026         pkt = NCP(0x5A0A, "Get Reference Count from Dir Entry Number", 'file')
13027         pkt.Request(19, [
13028                 rec( 10, 4, VolumeNumberLong ),
13029                 rec( 14, 4, DirectoryBase ),
13030                 rec( 18, 1, NameSpace ),
13031         ])
13032         pkt.Reply(12, [
13033                 rec( 8, 4, ReferenceCount ),
13034         ])
13035         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13036                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13037                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13038         # 2222/5A0B, 90/11
13039         pkt = NCP(0x5A0B, "Get Reference Count from Dir Handle", 'file')
13040         pkt.Request(14, [
13041                 rec( 10, 4, DirHandle ),
13042         ])
13043         pkt.Reply(12, [
13044                 rec( 8, 4, ReferenceCount ),
13045         ])
13046         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13047                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13048                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13049         # 2222/5A0C, 90/12
13050         pkt = NCP(0x5A0C, "Set Compressed File Size", 'file')
13051         pkt.Request(20, [
13052                 rec( 10, 6, FileHandle ),
13053                 rec( 16, 4, SuggestedFileSize ),
13054         ])
13055         pkt.Reply(16, [
13056                 rec( 8, 4, OldFileSize ),
13057                 rec( 12, 4, NewFileSize ),
13058         ])
13059         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13060                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13061                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13062         # 2222/5A80, 90/128
13063         pkt = NCP(0x5A80, "Move File Data To Data Migration", 'file')
13064         pkt.Request(27, [
13065                 rec( 10, 4, VolumeNumberLong ),
13066                 rec( 14, 4, DirectoryEntryNumber ),
13067                 rec( 18, 1, NameSpace ),
13068                 rec( 19, 3, Reserved ),
13069                 rec( 22, 4, SupportModuleID ),
13070                 rec( 26, 1, DMFlags ),
13071         ])
13072         pkt.Reply(8)
13073         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13074                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13075                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13076         # 2222/5A81, 90/129
13077         pkt = NCP(0x5A81, "Data Migration File Information", 'file')
13078         pkt.Request(19, [
13079                 rec( 10, 4, VolumeNumberLong ),
13080                 rec( 14, 4, DirectoryEntryNumber ),
13081                 rec( 18, 1, NameSpace ),
13082         ])
13083         pkt.Reply(24, [
13084                 rec( 8, 4, SupportModuleID ),
13085                 rec( 12, 4, RestoreTime ),
13086                 rec( 16, 4, DMInfoEntries, var="x" ),
13087                 rec( 20, 4, DataSize, repeat="x" ),
13088         ])
13089         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13090                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13091                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13092         # 2222/5A82, 90/130
13093         pkt = NCP(0x5A82, "Volume Data Migration Status", 'file')
13094         pkt.Request(18, [
13095                 rec( 10, 4, VolumeNumberLong ),
13096                 rec( 14, 4, SupportModuleID ),
13097         ])
13098         pkt.Reply(32, [
13099                 rec( 8, 4, NumOfFilesMigrated ),
13100                 rec( 12, 4, TtlMigratedSize ),
13101                 rec( 16, 4, SpaceUsed ),
13102                 rec( 20, 4, LimboUsed ),
13103                 rec( 24, 4, SpaceMigrated ),
13104                 rec( 28, 4, FileLimbo ),
13105         ])
13106         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13107                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13108                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13109         # 2222/5A83, 90/131
13110         pkt = NCP(0x5A83, "Migrator Status Info", 'file')
13111         pkt.Request(10)
13112         pkt.Reply(20, [
13113                 rec( 8, 1, DMPresentFlag ),
13114                 rec( 9, 3, Reserved3 ),
13115                 rec( 12, 4, DMmajorVersion ),
13116                 rec( 16, 4, DMminorVersion ),
13117         ])
13118         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13119                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13120                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13121         # 2222/5A84, 90/132
13122         pkt = NCP(0x5A84, "Data Migration Support Module Information", 'file')
13123         pkt.Request(18, [
13124                 rec( 10, 1, DMInfoLevel ),
13125                 rec( 11, 3, Reserved3),
13126                 rec( 14, 4, SupportModuleID ),
13127         ])
13128         pkt.Reply(NO_LENGTH_CHECK, [
13129                 srec( DMInfoLevel0, req_cond="ncp.dm_info_level == 0x00" ),
13130                 srec( DMInfoLevel1, req_cond="ncp.dm_info_level == 0x01" ),
13131                 srec( DMInfoLevel2, req_cond="ncp.dm_info_level == 0x02" ),
13132         ])
13133         pkt.ReqCondSizeVariable()
13134         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13135                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13136                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13137         # 2222/5A85, 90/133
13138         pkt = NCP(0x5A85, "Move File Data From Data Migration", 'file')
13139         pkt.Request(19, [
13140                 rec( 10, 4, VolumeNumberLong ),
13141                 rec( 14, 4, DirectoryEntryNumber ),
13142                 rec( 18, 1, NameSpace ),
13143         ])
13144         pkt.Reply(8)
13145         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13146                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13147                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13148         # 2222/5A86, 90/134
13149         pkt = NCP(0x5A86, "Get/Set Default Read-Write Support Module ID", 'file')
13150         pkt.Request(18, [
13151                 rec( 10, 1, GetSetFlag ),
13152                 rec( 11, 3, Reserved3 ),
13153                 rec( 14, 4, SupportModuleID ),
13154         ])
13155         pkt.Reply(12, [
13156                 rec( 8, 4, SupportModuleID ),
13157         ])
13158         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13159                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13160                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13161         # 2222/5A87, 90/135
13162         pkt = NCP(0x5A87, "Data Migration Support Module Capacity Request", 'file')
13163         pkt.Request(22, [
13164                 rec( 10, 4, SupportModuleID ),
13165                 rec( 14, 4, VolumeNumberLong ),
13166                 rec( 18, 4, DirectoryBase ),
13167         ])
13168         pkt.Reply(20, [
13169                 rec( 8, 4, BlockSizeInSectors ),
13170                 rec( 12, 4, TotalBlocks ),
13171                 rec( 16, 4, UsedBlocks ),
13172         ])
13173         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13174                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13175                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13176         # 2222/5A88, 90/136
13177         pkt = NCP(0x5A88, "RTDM Request", 'file')
13178         pkt.Request(15, [
13179                 rec( 10, 4, Verb ),
13180                 rec( 14, 1, VerbData ),
13181         ])
13182         pkt.Reply(8)
13183         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13184                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13185                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13186         # 2222/5C, 92
13187         pkt = NCP(0x5C, "SecretStore Services", 'file')
13188         #Need info on this packet structure and SecretStore Verbs
13189         pkt.Request(7)
13190         pkt.Reply(8)
13191         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13192                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13193                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13194                              
13195         # 2222/5E, 94   
13196         pkt = NCP(0x5e, "NMAS Communications Packet", 'comm')
13197         pkt.Request(7)
13198         pkt.Reply(8)
13199         pkt.CompletionCodes([0x0000, 0xfb09])
13200         # 2222/61, 97
13201         pkt = NCP(0x61, "Get Big Packet NCP Max Packet Size", 'comm')
13202         pkt.Request(10, [
13203                 rec( 7, 2, ProposedMaxSize, BE ),
13204                 rec( 9, 1, SecurityFlag ),
13205         ],info_str=(ProposedMaxSize, "Get Big Max Packet Size - %d", ", %d"))
13206         pkt.Reply(13, [
13207                 rec( 8, 2, AcceptedMaxSize, BE ),
13208                 rec( 10, 2, EchoSocket, BE ),
13209                 rec( 12, 1, SecurityFlag ),
13210         ])
13211         pkt.CompletionCodes([0x0000])
13212         # 2222/63, 99
13213         pkt = NCP(0x63, "Undocumented Packet Burst", 'comm')
13214         pkt.Request(7)
13215         pkt.Reply(8)
13216         pkt.CompletionCodes([0x0000])
13217         # 2222/64, 100
13218         pkt = NCP(0x64, "Undocumented Packet Burst", 'comm')
13219         pkt.Request(7)
13220         pkt.Reply(8)
13221         pkt.CompletionCodes([0x0000])
13222         # 2222/65, 101
13223         pkt = NCP(0x65, "Packet Burst Connection Request", 'comm')
13224         pkt.Request(25, [
13225                 rec( 7, 4, LocalConnectionID ),
13226                 rec( 11, 4, LocalMaxPacketSize ),
13227                 rec( 15, 2, LocalTargetSocket ),
13228                 rec( 17, 4, LocalMaxSendSize ),
13229                 rec( 21, 4, LocalMaxRecvSize ),
13230         ])
13231         pkt.Reply(16, [
13232                 rec( 8, 4, RemoteTargetID ),
13233                 rec( 12, 4, RemoteMaxPacketSize ),
13234         ])
13235         pkt.CompletionCodes([0x0000])
13236         # 2222/66, 102
13237         pkt = NCP(0x66, "Undocumented Packet Burst", 'comm')
13238         pkt.Request(7)
13239         pkt.Reply(8)
13240         pkt.CompletionCodes([0x0000])
13241         # 2222/67, 103
13242         pkt = NCP(0x67, "Undocumented Packet Burst", 'comm')
13243         pkt.Request(7)
13244         pkt.Reply(8)
13245         pkt.CompletionCodes([0x0000])
13246         # 2222/6801, 104/01
13247         pkt = NCP(0x6801, "Ping for NDS NCP", "nds", has_length=0)
13248         pkt.Request(8)
13249         pkt.Reply(8)
13250         pkt.ReqCondSizeVariable()
13251         pkt.CompletionCodes([0x0000, 0x8100, 0xfb04, 0xfe0c])
13252         # 2222/6802, 104/02
13253         #
13254         # XXX - if FraggerHandle is not 0xffffffff, this is not the
13255         # first fragment, so we can only dissect this by reassembling;
13256         # the fields after "Fragment Handle" are bogus for non-0xffffffff
13257         # fragments, so we shouldn't dissect them.
13258         #
13259         # XXX - are there TotalRequest requests in the packet, and
13260         # does each of them have NDSFlags and NDSVerb fields, or
13261         # does only the first one have it?
13262         #
13263         pkt = NCP(0x6802, "Send NDS Fragmented Request/Reply", "nds", has_length=0)
13264         pkt.Request(8)
13265         pkt.Reply(8)
13266         pkt.ReqCondSizeVariable()
13267         pkt.CompletionCodes([0x0000])
13268         # 2222/6803, 104/03
13269         pkt = NCP(0x6803, "Fragment Close", "nds", has_length=0)
13270         pkt.Request(12, [
13271                 rec( 8, 4, FraggerHandle ),
13272         ])
13273         pkt.Reply(8)
13274         pkt.CompletionCodes([0x0000, 0xff00])
13275         # 2222/6804, 104/04
13276         pkt = NCP(0x6804, "Return Bindery Context", "nds", has_length=0)
13277         pkt.Request(8)
13278         pkt.Reply((9, 263), [
13279                 rec( 8, (1,255), binderyContext ),
13280         ])
13281         pkt.CompletionCodes([0x0000, 0xfe0c, 0xff00])
13282         # 2222/6805, 104/05
13283         pkt = NCP(0x6805, "Monitor NDS Connection", "nds", has_length=0)
13284         pkt.Request(8)
13285         pkt.Reply(8)
13286         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13287         # 2222/6806, 104/06
13288         pkt = NCP(0x6806, "Return NDS Statistics", "nds", has_length=0)
13289         pkt.Request(10, [
13290                 rec( 8, 2, NDSRequestFlags ),
13291         ])
13292         pkt.Reply(8)
13293         #Need to investigate how to decode Statistics Return Value
13294         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13295         # 2222/6807, 104/07
13296         pkt = NCP(0x6807, "Clear NDS Statistics", "nds", has_length=0)
13297         pkt.Request(8)
13298         pkt.Reply(8)
13299         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13300         # 2222/6808, 104/08
13301         pkt = NCP(0x6808, "Reload NDS Software", "nds", has_length=0)
13302         pkt.Request(8)
13303         pkt.Reply(12, [
13304                 rec( 8, 4, NDSStatus ),
13305         ])
13306         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13307         # 2222/68C8, 104/200
13308         pkt = NCP(0x68C8, "Query Container Audit Status", "auditing", has_length=0)
13309         pkt.Request(12, [
13310                 rec( 8, 4, ConnectionNumber ),
13311 #               rec( 12, 4, AuditIDType, LE ),
13312 #               rec( 16, 4, AuditID ),
13313 #               rec( 20, 2, BufferSize ),
13314         ])
13315         pkt.Reply(40, [
13316                 rec(8, 32, NWAuditStatus ),
13317         ])
13318         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13319         # 2222/68CA, 104/202
13320         pkt = NCP(0x68CA, "Add Auditor Access", "auditing", has_length=0)
13321         pkt.Request(8)
13322         pkt.Reply(8)
13323         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13324         # 2222/68CB, 104/203
13325         pkt = NCP(0x68CB, "Change Auditor Container Password", "auditing", has_length=0)
13326         pkt.Request(8)
13327         pkt.Reply(8)
13328         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13329         # 2222/68CC, 104/204
13330         pkt = NCP(0x68CC, "Check Auditor Access", "auditing", has_length=0)
13331         pkt.Request(8)
13332         pkt.Reply(8)
13333         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13334         # 2222/68CE, 104/206
13335         pkt = NCP(0x680CE, "Disable Container Auditing", "auditing", has_length=0)
13336         pkt.Request(8)
13337         pkt.Reply(8)
13338         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13339         # 2222/68CF, 104/207
13340         pkt = NCP(0x68CF, "Enable Container Auditing", "auditing", has_length=0)
13341         pkt.Request(8)
13342         pkt.Reply(8)
13343         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13344         # 2222/68D1, 104/209
13345         pkt = NCP(0x68D1, "Read Audit File Header", "auditing", has_length=0)
13346         pkt.Request(8)
13347         pkt.Reply(8)
13348         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13349         # 2222/68D3, 104/211
13350         pkt = NCP(0x68D3, "Remove Auditor Access", "auditing", has_length=0)
13351         pkt.Request(8)
13352         pkt.Reply(8)
13353         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13354         # 2222/68D4, 104/212
13355         pkt = NCP(0x68D4, "Reset Audit File", "auditing", has_length=0)
13356         pkt.Request(8)
13357         pkt.Reply(8)
13358         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13359         # 2222/68D6, 104/214
13360         pkt = NCP(0x68D6, "Write Audit File Configuration Header", "auditing", has_length=0)
13361         pkt.Request(8)
13362         pkt.Reply(8)
13363         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13364         # 2222/68D7, 104/215
13365         pkt = NCP(0x68D7, "Change Auditor Container Password2", "auditing", has_length=0)
13366         pkt.Request(8)
13367         pkt.Reply(8)
13368         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13369         # 2222/68D8, 104/216
13370         pkt = NCP(0x68D8, "Return Audit Flags", "auditing", has_length=0)
13371         pkt.Request(8)
13372         pkt.Reply(8)
13373         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13374         # 2222/68D9, 104/217
13375         pkt = NCP(0x68D9, "Close Old Audit File", "auditing", has_length=0)
13376         pkt.Request(8)
13377         pkt.Reply(8)
13378         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13379         # 2222/68DB, 104/219
13380         pkt = NCP(0x68DB, "Check Level Two Access", "auditing", has_length=0)
13381         pkt.Request(8)
13382         pkt.Reply(8)
13383         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13384         # 2222/68DC, 104/220
13385         pkt = NCP(0x68DC, "Check Object Audited", "auditing", has_length=0)
13386         pkt.Request(8)
13387         pkt.Reply(8)
13388         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13389         # 2222/68DD, 104/221
13390         pkt = NCP(0x68DD, "Change Object Audited", "auditing", has_length=0)
13391         pkt.Request(8)
13392         pkt.Reply(8)
13393         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13394         # 2222/68DE, 104/222
13395         pkt = NCP(0x68DE, "Return Old Audit File List", "auditing", has_length=0)
13396         pkt.Request(8)
13397         pkt.Reply(8)
13398         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13399         # 2222/68DF, 104/223
13400         pkt = NCP(0x68DF, "Init Audit File Reads", "auditing", has_length=0)
13401         pkt.Request(8)
13402         pkt.Reply(8)
13403         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13404         # 2222/68E0, 104/224
13405         pkt = NCP(0x68E0, "Read Auditing File", "auditing", has_length=0)
13406         pkt.Request(8)
13407         pkt.Reply(8)
13408         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13409         # 2222/68E1, 104/225
13410         pkt = NCP(0x68E1, "Delete Old Audit File", "auditing", has_length=0)
13411         pkt.Request(8)
13412         pkt.Reply(8)
13413         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13414         # 2222/68E5, 104/229
13415         pkt = NCP(0x68E5, "Set Audit Password", "auditing", has_length=0)
13416         pkt.Request(8)
13417         pkt.Reply(8)
13418         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13419         # 2222/68E7, 104/231
13420         pkt = NCP(0x68E7, "External Audit Append To File", "auditing", has_length=0)
13421         pkt.Request(8)
13422         pkt.Reply(8)
13423         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13424         # 2222/69, 105
13425         pkt = NCP(0x69, "Log File", 'file')
13426         pkt.Request( (12, 267), [
13427                 rec( 7, 1, DirHandle ),
13428                 rec( 8, 1, LockFlag ),
13429                 rec( 9, 2, TimeoutLimit ),
13430                 rec( 11, (1, 256), FilePath ),
13431         ], info_str=(FilePath, "Log File: %s", "/%s"))
13432         pkt.Reply(8)
13433         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x9600, 0xfe0d, 0xff01])
13434         # 2222/6A, 106
13435         pkt = NCP(0x6A, "Lock File Set", 'file')
13436         pkt.Request( 9, [
13437                 rec( 7, 2, TimeoutLimit ),
13438         ])
13439         pkt.Reply(8)
13440         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x9600, 0xfe0d, 0xff01])
13441         # 2222/6B, 107
13442         pkt = NCP(0x6B, "Log Logical Record", 'file')
13443         pkt.Request( (11, 266), [
13444                 rec( 7, 1, LockFlag ),
13445                 rec( 8, 2, TimeoutLimit ),
13446                 rec( 10, (1, 256), SynchName ),
13447         ], info_str=(SynchName, "Log Logical Record: %s", ", %s"))
13448         pkt.Reply(8)
13449         pkt.CompletionCodes([0x0000, 0x7f00, 0x9600, 0xfe0d, 0xff01])
13450         # 2222/6C, 108
13451         pkt = NCP(0x6C, "Log Logical Record", 'file')
13452         pkt.Request( 10, [
13453                 rec( 7, 1, LockFlag ),
13454                 rec( 8, 2, TimeoutLimit ),
13455         ])
13456         pkt.Reply(8)
13457         pkt.CompletionCodes([0x0000, 0x7f00, 0x9600, 0xfe0d, 0xff01])
13458         # 2222/6D, 109
13459         pkt = NCP(0x6D, "Log Physical Record", 'file')
13460         pkt.Request(24, [
13461                 rec( 7, 1, LockFlag ),
13462                 rec( 8, 6, FileHandle ),
13463                 rec( 14, 4, LockAreasStartOffset ),
13464                 rec( 18, 4, LockAreaLen ),
13465                 rec( 22, 2, LockTimeout ),
13466         ])
13467         pkt.Reply(8)
13468         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
13469         # 2222/6E, 110
13470         pkt = NCP(0x6E, "Lock Physical Record Set", 'file')
13471         pkt.Request(10, [
13472                 rec( 7, 1, LockFlag ),
13473                 rec( 8, 2, LockTimeout ),
13474         ])
13475         pkt.Reply(8)
13476         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
13477         # 2222/6F00, 111/00
13478         pkt = NCP(0x6F00, "Open/Create a Semaphore", 'file', has_length=0)
13479         pkt.Request((10,521), [
13480                 rec( 8, 1, InitialSemaphoreValue ),
13481                 rec( 9, (1, 512), SemaphoreName ),
13482         ], info_str=(SemaphoreName, "Open/Create Semaphore: %s", ", %s"))
13483         pkt.Reply(13, [
13484                   rec( 8, 4, SemaphoreHandle ),
13485                   rec( 12, 1, SemaphoreOpenCount ),
13486         ])
13487         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
13488         # 2222/6F01, 111/01
13489         pkt = NCP(0x6F01, "Examine Semaphore", 'file', has_length=0)
13490         pkt.Request(12, [
13491                 rec( 8, 4, SemaphoreHandle ),
13492         ])
13493         pkt.Reply(10, [
13494                   rec( 8, 1, SemaphoreValue ),
13495                   rec( 9, 1, SemaphoreOpenCount ),
13496         ])
13497         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
13498         # 2222/6F02, 111/02
13499         pkt = NCP(0x6F02, "Wait On (P) Semaphore", 'file', has_length=0)
13500         pkt.Request(14, [
13501                 rec( 8, 4, SemaphoreHandle ),
13502                 rec( 12, 2, LockTimeout ),
13503         ])
13504         pkt.Reply(8)
13505         pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
13506         # 2222/6F03, 111/03
13507         pkt = NCP(0x6F03, "Signal (V) Semaphore", 'file', has_length=0)
13508         pkt.Request(12, [
13509                 rec( 8, 4, SemaphoreHandle ),
13510         ])
13511         pkt.Reply(8)
13512         pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
13513         # 2222/6F04, 111/04
13514         pkt = NCP(0x6F04, "Close Semaphore", 'file', has_length=0)
13515         pkt.Request(12, [
13516                 rec( 8, 4, SemaphoreHandle ),
13517         ])
13518         pkt.Reply(10, [
13519                 rec( 8, 1, SemaphoreOpenCount ),
13520                 rec( 9, 1, SemaphoreShareCount ),
13521         ])
13522         pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
13523         # 2222/7201, 114/01
13524         pkt = NCP(0x7201, "Timesync Get Time", 'file')
13525         pkt.Request(10)
13526         pkt.Reply(32,[
13527                 rec( 8, 12, theTimeStruct ),
13528                 rec(20, 8, eventOffset ),
13529                 rec(28, 4, eventTime ),
13530         ])                
13531         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13532         # 2222/7202, 114/02
13533         pkt = NCP(0x7202, "Timesync Exchange Time", 'file')
13534         pkt.Request((63,112), [
13535                 rec( 10, 4, protocolFlags ),
13536                 rec( 14, 4, nodeFlags ),
13537                 rec( 18, 8, sourceOriginateTime ),
13538                 rec( 26, 8, targetReceiveTime ),
13539                 rec( 34, 8, targetTransmitTime ),
13540                 rec( 42, 8, sourceReturnTime ),
13541                 rec( 50, 8, eventOffset ),
13542                 rec( 58, 4, eventTime ),
13543                 rec( 62, (1,50), ServerNameLen ),
13544         ], info_str=(ServerNameLen, "Timesync Exchange Time: %s", ", %s"))
13545         pkt.Reply((64,113), [
13546                 rec( 8, 3, Reserved3 ),
13547                 rec( 11, 4, protocolFlags ),
13548                 rec( 15, 4, nodeFlags ),
13549                 rec( 19, 8, sourceOriginateTime ),
13550                 rec( 27, 8, targetReceiveTime ),
13551                 rec( 35, 8, targetTransmitTime ),
13552                 rec( 43, 8, sourceReturnTime ),
13553                 rec( 51, 8, eventOffset ),
13554                 rec( 59, 4, eventTime ),
13555                 rec( 63, (1,50), ServerNameLen ),
13556         ])
13557         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13558         # 2222/7205, 114/05
13559         pkt = NCP(0x7205, "Timesync Get Server List", 'file')
13560         pkt.Request(14, [
13561                 rec( 10, 4, StartNumber ),
13562         ])
13563         pkt.Reply(66, [
13564                 rec( 8, 4, nameType ),
13565                 rec( 12, 48, ServerName ),
13566                 rec( 60, 4, serverListFlags ),
13567                 rec( 64, 2, startNumberFlag ),
13568         ])
13569         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13570         # 2222/7206, 114/06
13571         pkt = NCP(0x7206, "Timesync Set Server List", 'file')
13572         pkt.Request(14, [
13573                 rec( 10, 4, StartNumber ),
13574         ])
13575         pkt.Reply(66, [
13576                 rec( 8, 4, nameType ),
13577                 rec( 12, 48, ServerName ),
13578                 rec( 60, 4, serverListFlags ),
13579                 rec( 64, 2, startNumberFlag ),
13580         ])
13581         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13582         # 2222/720C, 114/12
13583         pkt = NCP(0x720C, "Timesync Get Version", 'file')
13584         pkt.Request(10)
13585         pkt.Reply(12, [
13586                 rec( 8, 4, version ),
13587         ])
13588         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13589         # 2222/7B01, 123/01
13590         pkt = NCP(0x7B01, "Get Cache Information", 'stats')
13591         pkt.Request(12, [
13592                 rec(10, 1, VersionNumber),
13593                 rec(11, 1, RevisionNumber),
13594         ])
13595         pkt.Reply(288, [
13596                 rec(8, 4, CurrentServerTime, LE),
13597                 rec(12, 1, VConsoleVersion ),
13598                 rec(13, 1, VConsoleRevision ),
13599                 rec(14, 2, Reserved2 ),
13600                 rec(16, 104, Counters ),
13601                 rec(120, 40, ExtraCacheCntrs ),
13602                 rec(160, 40, MemoryCounters ),
13603                 rec(200, 48, TrendCounters ),
13604                 rec(248, 40, CacheInfo ),
13605         ])
13606         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xff00])
13607         # 2222/7B02, 123/02
13608         pkt = NCP(0x7B02, "Get File Server Information", 'stats')
13609         pkt.Request(10)
13610         pkt.Reply(150, [
13611                 rec(8, 4, CurrentServerTime ),
13612                 rec(12, 1, VConsoleVersion ),
13613                 rec(13, 1, VConsoleRevision ),
13614                 rec(14, 2, Reserved2 ),
13615                 rec(16, 4, NCPStaInUseCnt ),
13616                 rec(20, 4, NCPPeakStaInUse ),
13617                 rec(24, 4, NumOfNCPReqs ),
13618                 rec(28, 4, ServerUtilization ),
13619                 rec(32, 96, ServerInfo ),
13620                 rec(128, 22, FileServerCounters ),
13621         ])
13622         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13623         # 2222/7B03, 123/03
13624         pkt = NCP(0x7B03, "NetWare File System Information", 'stats')
13625         pkt.Request(11, [
13626                 rec(10, 1, FileSystemID ),
13627         ])
13628         pkt.Reply(68, [
13629                 rec(8, 4, CurrentServerTime ),
13630                 rec(12, 1, VConsoleVersion ),
13631                 rec(13, 1, VConsoleRevision ),
13632                 rec(14, 2, Reserved2 ),
13633                 rec(16, 52, FileSystemInfo ),
13634         ])
13635         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13636         # 2222/7B04, 123/04
13637         pkt = NCP(0x7B04, "User Information", 'stats')
13638         pkt.Request(14, [
13639                 rec(10, 4, ConnectionNumber ),
13640         ])
13641         pkt.Reply((85, 132), [
13642                 rec(8, 4, CurrentServerTime ),
13643                 rec(12, 1, VConsoleVersion ),
13644                 rec(13, 1, VConsoleRevision ),
13645                 rec(14, 2, Reserved2 ),
13646                 rec(16, 68, UserInformation ),
13647                 rec(84, (1, 48), UserName ),
13648         ])
13649         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13650         # 2222/7B05, 123/05
13651         pkt = NCP(0x7B05, "Packet Burst Information", 'stats')
13652         pkt.Request(10)
13653         pkt.Reply(216, [
13654                 rec(8, 4, CurrentServerTime ),
13655                 rec(12, 1, VConsoleVersion ),
13656                 rec(13, 1, VConsoleRevision ),
13657                 rec(14, 2, Reserved2 ),
13658                 rec(16, 200, PacketBurstInformation ),
13659         ])
13660         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13661         # 2222/7B06, 123/06
13662         pkt = NCP(0x7B06, "IPX SPX Information", 'stats')
13663         pkt.Request(10)
13664         pkt.Reply(94, [
13665                 rec(8, 4, CurrentServerTime ),
13666                 rec(12, 1, VConsoleVersion ),
13667                 rec(13, 1, VConsoleRevision ),
13668                 rec(14, 2, Reserved2 ),
13669                 rec(16, 34, IPXInformation ),
13670                 rec(50, 44, SPXInformation ),
13671         ])
13672         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13673         # 2222/7B07, 123/07
13674         pkt = NCP(0x7B07, "Garbage Collection Information", 'stats')
13675         pkt.Request(10)
13676         pkt.Reply(40, [
13677                 rec(8, 4, CurrentServerTime ),
13678                 rec(12, 1, VConsoleVersion ),
13679                 rec(13, 1, VConsoleRevision ),
13680                 rec(14, 2, Reserved2 ),
13681                 rec(16, 4, FailedAllocReqCnt ),
13682                 rec(20, 4, NumberOfAllocs ),
13683                 rec(24, 4, NoMoreMemAvlCnt ),
13684                 rec(28, 4, NumOfGarbageColl ),
13685                 rec(32, 4, FoundSomeMem ),
13686                 rec(36, 4, NumOfChecks ),
13687         ])
13688         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13689         # 2222/7B08, 123/08
13690         pkt = NCP(0x7B08, "CPU Information", 'stats')
13691         pkt.Request(14, [
13692                 rec(10, 4, CPUNumber ),
13693         ])
13694         pkt.Reply(51, [
13695                 rec(8, 4, CurrentServerTime ),
13696                 rec(12, 1, VConsoleVersion ),
13697                 rec(13, 1, VConsoleRevision ),
13698                 rec(14, 2, Reserved2 ),
13699                 rec(16, 4, NumberOfCPUs ),
13700                 rec(20, 31, CPUInformation ),
13701         ])      
13702         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13703         # 2222/7B09, 123/09
13704         pkt = NCP(0x7B09, "Volume Switch Information", 'stats')
13705         pkt.Request(14, [
13706                 rec(10, 4, StartNumber )
13707         ])
13708         pkt.Reply(28, [
13709                 rec(8, 4, CurrentServerTime ),
13710                 rec(12, 1, VConsoleVersion ),
13711                 rec(13, 1, VConsoleRevision ),
13712                 rec(14, 2, Reserved2 ),
13713                 rec(16, 4, TotalLFSCounters ),
13714                 rec(20, 4, CurrentLFSCounters, var="x"),
13715                 rec(24, 4, LFSCounters, repeat="x"),
13716         ])
13717         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13718         # 2222/7B0A, 123/10
13719         pkt = NCP(0x7B0A, "Get NLM Loaded List", 'stats')
13720         pkt.Request(14, [
13721                 rec(10, 4, StartNumber )
13722         ])
13723         pkt.Reply(28, [
13724                 rec(8, 4, CurrentServerTime ),
13725                 rec(12, 1, VConsoleVersion ),
13726                 rec(13, 1, VConsoleRevision ),
13727                 rec(14, 2, Reserved2 ),
13728                 rec(16, 4, NLMcount ),
13729                 rec(20, 4, NLMsInList, var="x" ),
13730                 rec(24, 4, NLMNumbers, repeat="x" ),
13731         ])
13732         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13733         # 2222/7B0B, 123/11
13734         pkt = NCP(0x7B0B, "NLM Information", 'stats')
13735         pkt.Request(14, [
13736                 rec(10, 4, NLMNumber ),
13737         ])
13738         pkt.Reply((79,841), [
13739                 rec(8, 4, CurrentServerTime ),
13740                 rec(12, 1, VConsoleVersion ),
13741                 rec(13, 1, VConsoleRevision ),
13742                 rec(14, 2, Reserved2 ),
13743                 rec(16, 60, NLMInformation ),
13744                 rec(76, (1,255), FileName ),
13745                 rec(-1, (1,255), Name ),
13746                 rec(-1, (1,255), Copyright ),
13747         ])
13748         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13749         # 2222/7B0C, 123/12
13750         pkt = NCP(0x7B0C, "Get Directory Cache Information", 'stats')
13751         pkt.Request(10)
13752         pkt.Reply(72, [
13753                 rec(8, 4, CurrentServerTime ),
13754                 rec(12, 1, VConsoleVersion ),
13755                 rec(13, 1, VConsoleRevision ),
13756                 rec(14, 2, Reserved2 ),
13757                 rec(16, 56, DirCacheInfo ),
13758         ])
13759         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13760         # 2222/7B0D, 123/13
13761         pkt = NCP(0x7B0D, "Get Operating System Version Information", 'stats')
13762         pkt.Request(10)
13763         pkt.Reply(70, [
13764                 rec(8, 4, CurrentServerTime ),
13765                 rec(12, 1, VConsoleVersion ),
13766                 rec(13, 1, VConsoleRevision ),
13767                 rec(14, 2, Reserved2 ),
13768                 rec(16, 1, OSMajorVersion ),
13769                 rec(17, 1, OSMinorVersion ),
13770                 rec(18, 1, OSRevision ),
13771                 rec(19, 1, AccountVersion ),
13772                 rec(20, 1, VAPVersion ),
13773                 rec(21, 1, QueueingVersion ),
13774                 rec(22, 1, SecurityRestrictionVersion ),
13775                 rec(23, 1, InternetBridgeVersion ),
13776                 rec(24, 4, MaxNumOfVol ),
13777                 rec(28, 4, MaxNumOfConn ),
13778                 rec(32, 4, MaxNumOfUsers ),
13779                 rec(36, 4, MaxNumOfNmeSps ),
13780                 rec(40, 4, MaxNumOfLANS ),
13781                 rec(44, 4, MaxNumOfMedias ),
13782                 rec(48, 4, MaxNumOfStacks ),
13783                 rec(52, 4, MaxDirDepth ),
13784                 rec(56, 4, MaxDataStreams ),
13785                 rec(60, 4, MaxNumOfSpoolPr ),
13786                 rec(64, 4, ServerSerialNumber ),
13787                 rec(68, 2, ServerAppNumber ),
13788         ])
13789         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13790         # 2222/7B0E, 123/14
13791         pkt = NCP(0x7B0E, "Get Active Connection List by Type", 'stats')
13792         pkt.Request(15, [
13793                 rec(10, 4, StartConnNumber ),
13794                 rec(14, 1, ConnectionType ),
13795         ])
13796         pkt.Reply(528, [
13797                 rec(8, 4, CurrentServerTime ),
13798                 rec(12, 1, VConsoleVersion ),
13799                 rec(13, 1, VConsoleRevision ),
13800                 rec(14, 2, Reserved2 ),
13801                 rec(16, 512, ActiveConnBitList ),
13802         ])
13803         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfd01, 0xff00])
13804         # 2222/7B0F, 123/15
13805         pkt = NCP(0x7B0F, "Get NLM Resource Tag List", 'stats')
13806         pkt.Request(18, [
13807                 rec(10, 4, NLMNumber ),
13808                 rec(14, 4, NLMStartNumber ),
13809         ])
13810         pkt.Reply(37, [
13811                 rec(8, 4, CurrentServerTime ),
13812                 rec(12, 1, VConsoleVersion ),
13813                 rec(13, 1, VConsoleRevision ),
13814                 rec(14, 2, Reserved2 ),
13815                 rec(16, 4, TtlNumOfRTags ),
13816                 rec(20, 4, CurNumOfRTags ),
13817                 rec(24, 13, RTagStructure ),
13818         ])
13819         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13820         # 2222/7B10, 123/16
13821         pkt = NCP(0x7B10, "Enumerate Connection Information from Connection List", 'stats')
13822         pkt.Request(22, [
13823                 rec(10, 1, EnumInfoMask),
13824                 rec(11, 3, Reserved3),
13825                 rec(14, 4, itemsInList, var="x"),
13826                 rec(18, 4, connList, repeat="x"),
13827         ])
13828         pkt.Reply(NO_LENGTH_CHECK, [
13829                 rec(8, 4, CurrentServerTime ),
13830                 rec(12, 1, VConsoleVersion ),
13831                 rec(13, 1, VConsoleRevision ),
13832                 rec(14, 2, Reserved2 ),
13833                 rec(16, 4, ItemsInPacket ),
13834                 srec(netAddr, req_cond="ncp.enum_info_transport==TRUE"),
13835                 srec(timeInfo, req_cond="ncp.enum_info_time==TRUE"),
13836                 srec(nameInfo, req_cond="ncp.enum_info_name==TRUE"),
13837                 srec(lockInfo, req_cond="ncp.enum_info_lock==TRUE"),
13838                 srec(printInfo, req_cond="ncp.enum_info_print==TRUE"),
13839                 srec(statsInfo, req_cond="ncp.enum_info_stats==TRUE"),
13840                 srec(acctngInfo, req_cond="ncp.enum_info_account==TRUE"),
13841                 srec(authInfo, req_cond="ncp.enum_info_auth==TRUE"),
13842         ])                
13843         pkt.ReqCondSizeVariable()
13844         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13845         # 2222/7B11, 123/17
13846         pkt = NCP(0x7B11, "Enumerate NCP Service Network Addresses", 'stats')
13847         pkt.Request(14, [
13848                 rec(10, 4, SearchNumber ),
13849         ])                
13850         pkt.Reply(60, [
13851                 rec(8, 4, CurrentServerTime ),
13852                 rec(12, 1, VConsoleVersion ),
13853                 rec(13, 1, VConsoleRevision ),
13854                 rec(14, 2, ServerInfoFlags ),
13855                 rec(16, 16, GUID ),
13856                 rec(32, 4, NextSearchNum ),
13857                 rec(36, 4, ItemsInPacket, var="x"), 
13858                 rec(40, 20, NCPNetworkAddress, repeat="x" ),
13859         ])
13860         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13861         # 2222/7B14, 123/20
13862         pkt = NCP(0x7B14, "Active LAN Board List", 'stats')
13863         pkt.Request(14, [
13864                 rec(10, 4, StartNumber ),
13865         ])               
13866         pkt.Reply(28, [
13867                 rec(8, 4, CurrentServerTime ),
13868                 rec(12, 1, VConsoleVersion ),
13869                 rec(13, 1, VConsoleRevision ),
13870                 rec(14, 2, Reserved2 ),
13871                 rec(16, 4, MaxNumOfLANS ),
13872                 rec(20, 4, ItemsInPacket, var="x"),
13873                 rec(24, 4, BoardNumbers, repeat="x"),
13874         ])                
13875         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13876         # 2222/7B15, 123/21
13877         pkt = NCP(0x7B15, "LAN Configuration Information", 'stats')
13878         pkt.Request(14, [
13879                 rec(10, 4, BoardNumber ),
13880         ])                
13881         pkt.Reply(152, [
13882                 rec(8, 4, CurrentServerTime ),
13883                 rec(12, 1, VConsoleVersion ),
13884                 rec(13, 1, VConsoleRevision ),
13885                 rec(14, 2, Reserved2 ),
13886                 rec(16,136, LANConfigInfo ),
13887         ])                
13888         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13889         # 2222/7B16, 123/22
13890         pkt = NCP(0x7B16, "LAN Common Counters Information", 'stats')
13891         pkt.Request(18, [
13892                 rec(10, 4, BoardNumber ),
13893                 rec(14, 4, BlockNumber ),
13894         ])                
13895         pkt.Reply(86, [
13896                 rec(8, 4, CurrentServerTime ),
13897                 rec(12, 1, VConsoleVersion ),
13898                 rec(13, 1, VConsoleRevision ),
13899                 rec(14, 1, StatMajorVersion ),
13900                 rec(15, 1, StatMinorVersion ),
13901                 rec(16, 4, TotalCommonCnts ),
13902                 rec(20, 4, TotalCntBlocks ),
13903                 rec(24, 4, CustomCounters ),
13904                 rec(28, 4, NextCntBlock ),
13905                 rec(32, 54, CommonLanStruc ),
13906         ])                
13907         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13908         # 2222/7B17, 123/23
13909         pkt = NCP(0x7B17, "LAN Custom Counters Information", 'stats')
13910         pkt.Request(18, [
13911                 rec(10, 4, BoardNumber ),
13912                 rec(14, 4, StartNumber ),
13913         ])                
13914         pkt.Reply(25, [
13915                 rec(8, 4, CurrentServerTime ),
13916                 rec(12, 1, VConsoleVersion ),
13917                 rec(13, 1, VConsoleRevision ),
13918                 rec(14, 2, Reserved2 ),
13919                 rec(16, 4, NumOfCCinPkt, var="x"),
13920                 rec(20, 5, CustomCntsInfo, repeat="x"),
13921         ])                
13922         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13923         # 2222/7B18, 123/24
13924         pkt = NCP(0x7B18, "LAN Name Information", 'stats')
13925         pkt.Request(14, [
13926                 rec(10, 4, BoardNumber ),
13927         ])                
13928         pkt.Reply(19, [
13929                 rec(8, 4, CurrentServerTime ),
13930                 rec(12, 1, VConsoleVersion ),
13931                 rec(13, 1, VConsoleRevision ),
13932                 rec(14, 2, Reserved2 ),
13933                 rec(16, 3, BoardNameStruct ),
13934         ])
13935         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13936         # 2222/7B19, 123/25
13937         pkt = NCP(0x7B19, "LSL Information", 'stats')
13938         pkt.Request(10)
13939         pkt.Reply(90, [
13940                 rec(8, 4, CurrentServerTime ),
13941                 rec(12, 1, VConsoleVersion ),
13942                 rec(13, 1, VConsoleRevision ),
13943                 rec(14, 2, Reserved2 ),
13944                 rec(16, 74, LSLInformation ),
13945         ])                
13946         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13947         # 2222/7B1A, 123/26
13948         pkt = NCP(0x7B1A, "LSL Logical Board Statistics", 'stats')
13949         pkt.Request(14, [
13950                 rec(10, 4, BoardNumber ),
13951         ])                
13952         pkt.Reply(28, [
13953                 rec(8, 4, CurrentServerTime ),
13954                 rec(12, 1, VConsoleVersion ),
13955                 rec(13, 1, VConsoleRevision ),
13956                 rec(14, 2, Reserved2 ),
13957                 rec(16, 4, LogTtlTxPkts ),
13958                 rec(20, 4, LogTtlRxPkts ),
13959                 rec(24, 4, UnclaimedPkts ),
13960         ])                
13961         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13962         # 2222/7B1B, 123/27
13963         pkt = NCP(0x7B1B, "MLID Board Information", 'stats')
13964         pkt.Request(14, [
13965                 rec(10, 4, BoardNumber ),
13966         ])                
13967         pkt.Reply(44, [
13968                 rec(8, 4, CurrentServerTime ),
13969                 rec(12, 1, VConsoleVersion ),
13970                 rec(13, 1, VConsoleRevision ),
13971                 rec(14, 1, Reserved ),
13972                 rec(15, 1, NumberOfProtocols ),
13973                 rec(16, 28, MLIDBoardInfo ),
13974         ])                        
13975         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13976         # 2222/7B1E, 123/30
13977         pkt = NCP(0x7B1E, "Get Media Manager Object Information", 'stats')
13978         pkt.Request(14, [
13979                 rec(10, 4, ObjectNumber ),
13980         ])                
13981         pkt.Reply(212, [
13982                 rec(8, 4, CurrentServerTime ),
13983                 rec(12, 1, VConsoleVersion ),
13984                 rec(13, 1, VConsoleRevision ),
13985                 rec(14, 2, Reserved2 ),
13986                 rec(16, 196, GenericInfoDef ),
13987         ])                
13988         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13989         # 2222/7B1F, 123/31
13990         pkt = NCP(0x7B1F, "Get Media Manager Objects List", 'stats')
13991         pkt.Request(15, [
13992                 rec(10, 4, StartNumber ),
13993                 rec(14, 1, MediaObjectType ),
13994         ])                
13995         pkt.Reply(28, [
13996                 rec(8, 4, CurrentServerTime ),
13997                 rec(12, 1, VConsoleVersion ),
13998                 rec(13, 1, VConsoleRevision ),
13999                 rec(14, 2, Reserved2 ),
14000                 rec(16, 4, nextStartingNumber ),
14001                 rec(20, 4, ObjectCount, var="x"),
14002                 rec(24, 4, ObjectID, repeat="x"),
14003         ])                
14004         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14005         # 2222/7B20, 123/32
14006         pkt = NCP(0x7B20, "Get Media Manager Object Childrens List", 'stats')
14007         pkt.Request(22, [
14008                 rec(10, 4, StartNumber ),
14009                 rec(14, 1, MediaObjectType ),
14010                 rec(15, 3, Reserved3 ),
14011                 rec(18, 4, ParentObjectNumber ),
14012         ])                
14013         pkt.Reply(28, [
14014                 rec(8, 4, CurrentServerTime ),
14015                 rec(12, 1, VConsoleVersion ),
14016                 rec(13, 1, VConsoleRevision ),
14017                 rec(14, 2, Reserved2 ),
14018                 rec(16, 4, nextStartingNumber ),
14019                 rec(20, 4, ObjectCount, var="x" ),
14020                 rec(24, 4, ObjectID, repeat="x" ),
14021         ])                
14022         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14023         # 2222/7B21, 123/33
14024         pkt = NCP(0x7B21, "Get Volume Segment List", 'stats')
14025         pkt.Request(14, [
14026                 rec(10, 4, VolumeNumberLong ),
14027         ])                
14028         pkt.Reply(32, [
14029                 rec(8, 4, CurrentServerTime ),
14030                 rec(12, 1, VConsoleVersion ),
14031                 rec(13, 1, VConsoleRevision ),
14032                 rec(14, 2, Reserved2 ),
14033                 rec(16, 4, NumOfSegments, var="x" ),
14034                 rec(20, 12, Segments, repeat="x" ),
14035         ])                
14036         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14037         # 2222/7B22, 123/34
14038         pkt = NCP(0x7B22, "Get Volume Information by Level", 'stats')
14039         pkt.Request(15, [
14040                 rec(10, 4, VolumeNumberLong ),
14041                 rec(14, 1, InfoLevelNumber ),
14042         ])                
14043         pkt.Reply(NO_LENGTH_CHECK, [
14044                 rec(8, 4, CurrentServerTime ),
14045                 rec(12, 1, VConsoleVersion ),
14046                 rec(13, 1, VConsoleRevision ),
14047                 rec(14, 2, Reserved2 ),
14048                 rec(16, 1, InfoLevelNumber ),
14049                 rec(17, 3, Reserved3 ),
14050                 srec(VolInfoStructure, req_cond="ncp.info_level_num==0x01"),
14051                 srec(VolInfo2Struct, req_cond="ncp.info_level_num==0x02"),
14052         ])                
14053         pkt.ReqCondSizeVariable()
14054         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14055         # 2222/7B28, 123/40
14056         pkt = NCP(0x7B28, "Active Protocol Stacks", 'stats')
14057         pkt.Request(14, [
14058                 rec(10, 4, StartNumber ),
14059         ])                
14060         pkt.Reply(48, [
14061                 rec(8, 4, CurrentServerTime ),
14062                 rec(12, 1, VConsoleVersion ),
14063                 rec(13, 1, VConsoleRevision ),
14064                 rec(14, 2, Reserved2 ),
14065                 rec(16, 4, MaxNumOfLANS ),
14066                 rec(20, 4, StackCount, var="x" ),
14067                 rec(24, 4, nextStartingNumber ),
14068                 rec(28, 20, StackInfo, repeat="x" ),
14069         ])                
14070         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14071         # 2222/7B29, 123/41
14072         pkt = NCP(0x7B29, "Get Protocol Stack Configuration Information", 'stats')
14073         pkt.Request(14, [
14074                 rec(10, 4, StackNumber ),
14075         ])                
14076         pkt.Reply((37,164), [
14077                 rec(8, 4, CurrentServerTime ),
14078                 rec(12, 1, VConsoleVersion ),
14079                 rec(13, 1, VConsoleRevision ),
14080                 rec(14, 2, Reserved2 ),
14081                 rec(16, 1, ConfigMajorVN ),
14082                 rec(17, 1, ConfigMinorVN ),
14083                 rec(18, 1, StackMajorVN ),
14084                 rec(19, 1, StackMinorVN ),
14085                 rec(20, 16, ShortStkName ),
14086                 rec(36, (1,128), StackFullNameStr ),
14087         ])                
14088         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14089         # 2222/7B2A, 123/42
14090         pkt = NCP(0x7B2A, "Get Protocol Stack Statistics Information", 'stats')
14091         pkt.Request(14, [
14092                 rec(10, 4, StackNumber ),
14093         ])                
14094         pkt.Reply(38, [
14095                 rec(8, 4, CurrentServerTime ),
14096                 rec(12, 1, VConsoleVersion ),
14097                 rec(13, 1, VConsoleRevision ),
14098                 rec(14, 2, Reserved2 ),
14099                 rec(16, 1, StatMajorVersion ),
14100                 rec(17, 1, StatMinorVersion ),
14101                 rec(18, 2, ComCnts ),
14102                 rec(20, 4, CounterMask ),
14103                 rec(24, 4, TotalTxPkts ),
14104                 rec(28, 4, TotalRxPkts ),
14105                 rec(32, 4, IgnoredRxPkts ),
14106                 rec(36, 2, CustomCnts ),
14107         ])                
14108         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14109         # 2222/7B2B, 123/43
14110         pkt = NCP(0x7B2B, "Get Protocol Stack Custom Information", 'stats')
14111         pkt.Request(18, [
14112                 rec(10, 4, StackNumber ),
14113                 rec(14, 4, StartNumber ),
14114         ])                
14115         pkt.Reply(25, [
14116                 rec(8, 4, CurrentServerTime ),
14117                 rec(12, 1, VConsoleVersion ),
14118                 rec(13, 1, VConsoleRevision ),
14119                 rec(14, 2, Reserved2 ),
14120                 rec(16, 4, CustomCount, var="x" ),
14121                 rec(20, 5, CustomCntsInfo, repeat="x" ),
14122         ])                
14123         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14124         # 2222/7B2C, 123/44
14125         pkt = NCP(0x7B2C, "Get Protocol Stack Numbers by Media Number", 'stats')
14126         pkt.Request(14, [
14127                 rec(10, 4, MediaNumber ),
14128         ])                
14129         pkt.Reply(24, [
14130                 rec(8, 4, CurrentServerTime ),
14131                 rec(12, 1, VConsoleVersion ),
14132                 rec(13, 1, VConsoleRevision ),
14133                 rec(14, 2, Reserved2 ),
14134                 rec(16, 4, StackCount, var="x" ),
14135                 rec(20, 4, StackNumber, repeat="x" ),
14136         ])                
14137         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14138         # 2222/7B2D, 123/45
14139         pkt = NCP(0x7B2D, "Get Protocol Stack Numbers by LAN Board Number", 'stats')
14140         pkt.Request(14, [
14141                 rec(10, 4, BoardNumber ),
14142         ])                
14143         pkt.Reply(24, [
14144                 rec(8, 4, CurrentServerTime ),
14145                 rec(12, 1, VConsoleVersion ),
14146                 rec(13, 1, VConsoleRevision ),
14147                 rec(14, 2, Reserved2 ),
14148                 rec(16, 4, StackCount, var="x" ),
14149                 rec(20, 4, StackNumber, repeat="x" ),
14150         ])                
14151         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14152         # 2222/7B2E, 123/46
14153         pkt = NCP(0x7B2E, "Get Media Name by Media Number", 'stats')
14154         pkt.Request(14, [
14155                 rec(10, 4, MediaNumber ),
14156         ])                
14157         pkt.Reply((17,144), [
14158                 rec(8, 4, CurrentServerTime ),
14159                 rec(12, 1, VConsoleVersion ),
14160                 rec(13, 1, VConsoleRevision ),
14161                 rec(14, 2, Reserved2 ),
14162                 rec(16, (1,128), MediaName ),
14163         ])                
14164         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14165         # 2222/7B2F, 123/47
14166         pkt = NCP(0x7B2F, "Get Loaded Media Number", 'stats')
14167         pkt.Request(10)
14168         pkt.Reply(28, [
14169                 rec(8, 4, CurrentServerTime ),
14170                 rec(12, 1, VConsoleVersion ),
14171                 rec(13, 1, VConsoleRevision ),
14172                 rec(14, 2, Reserved2 ),
14173                 rec(16, 4, MaxNumOfMedias ),
14174                 rec(20, 4, MediaListCount, var="x" ),
14175                 rec(24, 4, MediaList, repeat="x" ),
14176         ])                
14177         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14178         # 2222/7B32, 123/50
14179         pkt = NCP(0x7B32, "Get General Router and SAP Information", 'stats')
14180         pkt.Request(10)
14181         pkt.Reply(37, [
14182                 rec(8, 4, CurrentServerTime ),
14183                 rec(12, 1, VConsoleVersion ),
14184                 rec(13, 1, VConsoleRevision ),
14185                 rec(14, 2, Reserved2 ),
14186                 rec(16, 2, RIPSocketNumber ),
14187                 rec(18, 2, Reserved2 ),
14188                 rec(20, 1, RouterDownFlag ),
14189                 rec(21, 3, Reserved3 ),
14190                 rec(24, 1, TrackOnFlag ),
14191                 rec(25, 3, Reserved3 ),
14192                 rec(28, 1, ExtRouterActiveFlag ),
14193                 rec(29, 3, Reserved3 ),
14194                 rec(32, 2, SAPSocketNumber ),
14195                 rec(34, 2, Reserved2 ),
14196                 rec(36, 1, RpyNearestSrvFlag ),
14197         ])                
14198         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14199         # 2222/7B33, 123/51
14200         pkt = NCP(0x7B33, "Get Network Router Information", 'stats')
14201         pkt.Request(14, [
14202                 rec(10, 4, NetworkNumber ),
14203         ])                
14204         pkt.Reply(26, [
14205                 rec(8, 4, CurrentServerTime ),
14206                 rec(12, 1, VConsoleVersion ),
14207                 rec(13, 1, VConsoleRevision ),
14208                 rec(14, 2, Reserved2 ),
14209                 rec(16, 10, KnownRoutes ),
14210         ])                
14211         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14212         # 2222/7B34, 123/52
14213         pkt = NCP(0x7B34, "Get Network Routers Information", 'stats')
14214         pkt.Request(18, [
14215                 rec(10, 4, NetworkNumber),
14216                 rec(14, 4, StartNumber ),
14217         ])                
14218         pkt.Reply(34, [
14219                 rec(8, 4, CurrentServerTime ),
14220                 rec(12, 1, VConsoleVersion ),
14221                 rec(13, 1, VConsoleRevision ),
14222                 rec(14, 2, Reserved2 ),
14223                 rec(16, 4, NumOfEntries, var="x" ),
14224                 rec(20, 14, RoutersInfo, repeat="x" ),
14225         ])                
14226         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14227         # 2222/7B35, 123/53
14228         pkt = NCP(0x7B35, "Get Known Networks Information", 'stats')
14229         pkt.Request(14, [
14230                 rec(10, 4, StartNumber ),
14231         ])                
14232         pkt.Reply(30, [
14233                 rec(8, 4, CurrentServerTime ),
14234                 rec(12, 1, VConsoleVersion ),
14235                 rec(13, 1, VConsoleRevision ),
14236                 rec(14, 2, Reserved2 ),
14237                 rec(16, 4, NumOfEntries, var="x" ),
14238                 rec(20, 10, KnownRoutes, repeat="x" ),
14239         ])                
14240         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14241         # 2222/7B36, 123/54
14242         pkt = NCP(0x7B36, "Get Server Information", 'stats')
14243         pkt.Request((15,64), [
14244                 rec(10, 2, ServerType ),
14245                 rec(12, 2, Reserved2 ),
14246                 rec(14, (1,50), ServerNameLen ),
14247         ], info_str=(ServerNameLen, "Get Server Information: %s", ", %s"))
14248         pkt.Reply(30, [
14249                 rec(8, 4, CurrentServerTime ),
14250                 rec(12, 1, VConsoleVersion ),
14251                 rec(13, 1, VConsoleRevision ),
14252                 rec(14, 2, Reserved2 ),
14253                 rec(16, 12, ServerAddress ),
14254                 rec(28, 2, HopsToNet ),
14255         ])                
14256         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14257         # 2222/7B37, 123/55
14258         pkt = NCP(0x7B37, "Get Server Sources Information", 'stats')
14259         pkt.Request((19,68), [
14260                 rec(10, 4, StartNumber ),
14261                 rec(14, 2, ServerType ),
14262                 rec(16, 2, Reserved2 ),
14263                 rec(18, (1,50), ServerNameLen ),
14264         ], info_str=(ServerNameLen, "Get Server Sources Info: %s", ", %s"))                
14265         pkt.Reply(32, [
14266                 rec(8, 4, CurrentServerTime ),
14267                 rec(12, 1, VConsoleVersion ),
14268                 rec(13, 1, VConsoleRevision ),
14269                 rec(14, 2, Reserved2 ),
14270                 rec(16, 4, NumOfEntries, var="x" ),
14271                 rec(20, 12, ServersSrcInfo, repeat="x" ),
14272         ])                
14273         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14274         # 2222/7B38, 123/56
14275         pkt = NCP(0x7B38, "Get Known Servers Information", 'stats')
14276         pkt.Request(16, [
14277                 rec(10, 4, StartNumber ),
14278                 rec(14, 2, ServerType ),
14279         ])                
14280         pkt.Reply(35, [
14281                 rec(8, 4, CurrentServerTime ),
14282                 rec(12, 1, VConsoleVersion ),
14283                 rec(13, 1, VConsoleRevision ),
14284                 rec(14, 2, Reserved2 ),
14285                 rec(16, 4, NumOfEntries, var="x" ),
14286                 rec(20, 15, KnownServStruc, repeat="x" ),
14287         ])                
14288         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14289         # 2222/7B3C, 123/60
14290         pkt = NCP(0x7B3C, "Get Server Set Commands Information", 'stats')
14291         pkt.Request(14, [
14292                 rec(10, 4, StartNumber ),
14293         ])                
14294         pkt.Reply(NO_LENGTH_CHECK, [
14295                 rec(8, 4, CurrentServerTime ),
14296                 rec(12, 1, VConsoleVersion ),
14297                 rec(13, 1, VConsoleRevision ),
14298                 rec(14, 2, Reserved2 ),
14299                 rec(16, 4, TtlNumOfSetCmds ),
14300                 rec(20, 4, nextStartingNumber ),
14301                 rec(24, 1, SetCmdType ),
14302                 rec(25, 3, Reserved3 ),
14303                 rec(28, 1, SetCmdCategory ),
14304                 rec(29, 3, Reserved3 ),
14305                 rec(32, 1, SetCmdFlags ),
14306                 rec(33, 3, Reserved3 ),
14307                 rec(36, 100, SetCmdName ),
14308                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x00"),
14309                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x01"),
14310                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x02"),
14311                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x04"),
14312                 srec(SetCmdValueString, req_cond="ncp.set_cmd_type==0x05"),
14313                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x06"),
14314                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x07"),
14315         ])                
14316         pkt.ReqCondSizeVariable()
14317         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14318         # 2222/7B3D, 123/61
14319         pkt = NCP(0x7B3D, "Get Server Set Categories", 'stats')
14320         pkt.Request(14, [
14321                 rec(10, 4, StartNumber ),
14322         ])                
14323         pkt.Reply(124, [
14324                 rec(8, 4, CurrentServerTime ),
14325                 rec(12, 1, VConsoleVersion ),
14326                 rec(13, 1, VConsoleRevision ),
14327                 rec(14, 2, Reserved2 ),
14328                 rec(16, 4, NumberOfSetCategories ),
14329                 rec(20, 4, nextStartingNumber ),
14330                 rec(24, 100, CategoryName ),
14331         ])                
14332         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14333         # 2222/7B3E, 123/62
14334         pkt = NCP(0x7B3E, "Get Server Set Commands Information By Name", 'stats')
14335         pkt.Request(110, [
14336                 rec(10, 100, SetParmName ),
14337         ], info_str=(SetParmName, "Get Server Set Command Info for: %s", ", %s"))                
14338         pkt.Reply(NO_LENGTH_CHECK, [
14339                 rec(8, 4, CurrentServerTime ),
14340                 rec(12, 1, VConsoleVersion ),
14341                 rec(13, 1, VConsoleRevision ),
14342                 rec(14, 2, Reserved2 ),
14343                 rec(16, 4, TtlNumOfSetCmds ),
14344                 rec(20, 4, nextStartingNumber ),
14345                 rec(24, 1, SetCmdType ),
14346                 rec(25, 3, Reserved3 ),
14347                 rec(28, 1, SetCmdCategory ),
14348                 rec(29, 3, Reserved3 ),
14349                 rec(32, 1, SetCmdFlags ),
14350                 rec(33, 3, Reserved3 ),
14351                 rec(36, 100, SetCmdName ),
14352                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x00"),
14353                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x01"),
14354                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x02"),
14355                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x04"),
14356                 srec(SetCmdValueString, req_cond="ncp.set_cmd_type==0x05"),
14357                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x06"),
14358                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x07"),
14359         ])                
14360         pkt.ReqCondSizeVariable()
14361         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14362         # 2222/7B46, 123/70
14363         pkt = NCP(0x7B46, "Get Current Compressing File", 'stats')
14364         pkt.Request(14, [
14365                 rec(10, 4, VolumeNumberLong ),
14366         ])                
14367         pkt.Reply(56, [
14368                 rec(8, 4, ParentID ),
14369                 rec(12, 4, DirectoryEntryNumber ),
14370                 rec(16, 4, compressionStage ),
14371                 rec(20, 4, ttlIntermediateBlks ),
14372                 rec(24, 4, ttlCompBlks ),
14373                 rec(28, 4, curIntermediateBlks ),
14374                 rec(32, 4, curCompBlks ),
14375                 rec(36, 4, curInitialBlks ),
14376                 rec(40, 4, fileFlags ),
14377                 rec(44, 4, projectedCompSize ),
14378                 rec(48, 4, originalSize ),
14379                 rec(52, 4, compressVolume ),
14380         ])                
14381         pkt.CompletionCodes([0x0000, 0x7e00, 0x7901, 0xfb06, 0xff00])
14382         # 2222/7B47, 123/71
14383         pkt = NCP(0x7B47, "Get Current DeCompressing File Info List", 'stats')
14384         pkt.Request(14, [
14385                 rec(10, 4, VolumeNumberLong ),
14386         ])                
14387         pkt.Reply(28, [
14388                 rec(8, 4, FileListCount ),
14389                 rec(12, 16, FileInfoStruct ),
14390         ])                
14391         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
14392         # 2222/7B48, 123/72
14393         pkt = NCP(0x7B48, "Get Compression and Decompression Time and Counts", 'stats')
14394         pkt.Request(14, [
14395                 rec(10, 4, VolumeNumberLong ),
14396         ])                
14397         pkt.Reply(64, [
14398                 rec(8, 56, CompDeCompStat ),
14399         ])
14400         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
14401         # 2222/8301, 131/01
14402         pkt = NCP(0x8301, "RPC Load an NLM", 'fileserver')
14403         pkt.Request(285, [
14404                 rec(10, 4, NLMLoadOptions ),
14405                 rec(14, 16, Reserved16 ),
14406                 rec(30, 255, PathAndName ),
14407         ], info_str=(PathAndName, "RPC Load NLM: %s", ", %s"))                
14408         pkt.Reply(12, [
14409                 rec(8, 4, RPCccode ),
14410         ])                
14411         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14412         # 2222/8302, 131/02
14413         pkt = NCP(0x8302, "RPC Unload an NLM", 'fileserver')
14414         pkt.Request(100, [
14415                 rec(10, 20, Reserved20 ),
14416                 rec(30, 70, NLMName ),
14417         ], info_str=(NLMName, "RPC Unload NLM: %s", ", %s"))                
14418         pkt.Reply(12, [
14419                 rec(8, 4, RPCccode ),
14420         ])                
14421         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14422         # 2222/8303, 131/03
14423         pkt = NCP(0x8303, "RPC Mount Volume", 'fileserver')
14424         pkt.Request(100, [
14425                 rec(10, 20, Reserved20 ),
14426                 rec(30, 70, VolumeNameStringz ),
14427         ], info_str=(VolumeNameStringz, "RPC Mount Volume: %s", ", %s"))                
14428         pkt.Reply(32, [
14429                 rec(8, 4, RPCccode),
14430                 rec(12, 16, Reserved16 ),
14431                 rec(28, 4, VolumeNumberLong ),
14432         ])                
14433         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14434         # 2222/8304, 131/04
14435         pkt = NCP(0x8304, "RPC Dismount Volume", 'fileserver')
14436         pkt.Request(100, [
14437                 rec(10, 20, Reserved20 ),
14438                 rec(30, 70, VolumeNameStringz ),
14439         ], info_str=(VolumeNameStringz, "RPC Dismount Volume: %s", ", %s"))                
14440         pkt.Reply(12, [
14441                 rec(8, 4, RPCccode ), 
14442         ])                
14443         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14444         # 2222/8305, 131/05
14445         pkt = NCP(0x8305, "RPC Add Name Space To Volume", 'fileserver')
14446         pkt.Request(100, [
14447                 rec(10, 20, Reserved20 ),
14448                 rec(30, 70, AddNameSpaceAndVol ),
14449         ], info_str=(AddNameSpaceAndVol, "RPC Add Name Space to Volume: %s", ", %s"))                
14450         pkt.Reply(12, [
14451                 rec(8, 4, RPCccode ),
14452         ])                
14453         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14454         # 2222/8306, 131/06
14455         pkt = NCP(0x8306, "RPC Set Command Value", 'fileserver')
14456         pkt.Request(100, [
14457                 rec(10, 1, SetCmdType ),
14458                 rec(11, 3, Reserved3 ),
14459                 rec(14, 4, SetCmdValueNum ),
14460                 rec(18, 12, Reserved12 ),
14461                 rec(30, 70, SetCmdName ),
14462         ], info_str=(SetCmdName, "RPC Set Command Value: %s", ", %s"))                
14463         pkt.Reply(12, [
14464                 rec(8, 4, RPCccode ),
14465         ])                
14466         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14467         # 2222/8307, 131/07
14468         pkt = NCP(0x8307, "RPC Execute NCF File", 'fileserver')
14469         pkt.Request(285, [
14470                 rec(10, 20, Reserved20 ),
14471                 rec(30, 255, PathAndName ),
14472         ], info_str=(PathAndName, "RPC Execute NCF File: %s", ", %s"))                
14473         pkt.Reply(12, [
14474                 rec(8, 4, RPCccode ),
14475         ])                
14476         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14477 if __name__ == '__main__':
14478 #       import profile
14479 #       filename = "ncp.pstats"
14480 #       profile.run("main()", filename)
14481 #
14482 #       import pstats
14483 #       sys.stdout = msg
14484 #       p = pstats.Stats(filename)
14485 #
14486 #       print "Stats sorted by cumulative time"
14487 #       p.strip_dirs().sort_stats('cumulative').print_stats()
14488 #
14489 #       print "Function callees"
14490 #       p.print_callees()
14491         main()