Fix some comments.
[metze/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.47 2003/02/05 20:52:48 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", "Subdirectory"),
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", "Subdirectory"),
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", "Subdirectory"),
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", BE)
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 #
1620 # XXX - what do the bits mean here?
1621 #
1622 DirectoryAttributes             = uint8("directory_attributes", "Directory Attributes")
1623 DirectoryBase                   = uint32("dir_base", "Directory Base")
1624 DirectoryBase.Display("BASE_HEX")
1625 DirectoryCount                  = uint16("dir_count", "Directory Count")
1626 DirectoryEntryNumber            = uint32("directory_entry_number", "Directory Entry Number")
1627 DirectoryEntryNumber.Display('BASE_HEX')
1628 DirectoryEntryNumberWord        = uint16("directory_entry_number_word", "Directory Entry Number")
1629 DirectoryID                     = uint16("directory_id", "Directory ID", BE)
1630 DirectoryID.Display("BASE_HEX")
1631 DirectoryName                   = fw_string("directory_name", "Directory Name",12)
1632 DirectoryName14                 = fw_string("directory_name_14", "Directory Name", 14)
1633 DirectoryNameLen                = uint8("directory_name_len", "Directory Name Length")
1634 DirectoryNumber                 = uint32("directory_number", "Directory Number")
1635 DirectoryNumber.Display("BASE_HEX")
1636 DirectoryPath                   = fw_string("directory_path", "Directory Path", 16)
1637 DirectoryServicesObjectID       = uint32("directory_services_object_id", "Directory Services Object ID")
1638 DirectoryServicesObjectID.Display("BASE_HEX")
1639 DirectoryStamp                  = uint16("directory_stamp", "Directory Stamp (0xD1D1)")
1640 DirtyCacheBuffers               = uint16("dirty_cache_buffers", "Dirty Cache Buffers")
1641 DiskChannelNumber               = uint8("disk_channel_number", "Disk Channel Number")
1642 DiskChannelTable                = val_string8("disk_channel_table", "Disk Channel Table", [
1643         [ 0x01, "XT" ],
1644         [ 0x02, "AT" ],
1645         [ 0x03, "SCSI" ],
1646         [ 0x04, "Disk Coprocessor" ],
1647 ])
1648 DiskSpaceLimit                  = uint32("disk_space_limit", "Disk Space Limit")
1649 DMAChannelsUsed                 = uint32("dma_channels_used", "DMA Channels Used")
1650 DMInfoEntries                   = uint32("dm_info_entries", "DM Info Entries")
1651 DMInfoLevel                     = val_string8("dm_info_level", "DM Info Level", [
1652         [ 0x00, "Return Detailed DM Support Module Information" ],
1653         [ 0x01, "Return Number of DM Support Modules" ],
1654         [ 0x02, "Return DM Support Modules Names" ],
1655 ])      
1656 DMFlags                         = val_string8("dm_flags", "DM Flags", [
1657         [ 0x00, "OnLine Media" ],
1658         [ 0x01, "OffLine Media" ],
1659 ])
1660 DMmajorVersion                  = uint32("dm_major_version", "DM Major Version")
1661 DMminorVersion                  = uint32("dm_minor_version", "DM Minor Version")
1662 DMPresentFlag                   = val_string8("dm_present_flag", "Data Migration Present Flag", [
1663         [ 0x00, "Data Migration NLM is not loaded" ],
1664         [ 0x01, "Data Migration NLM has been loaded and is running" ],
1665 ])      
1666 DOSDirectoryBase                = uint32("dos_directory_base", "DOS Directory Base")
1667 DOSDirectoryBase.Display("BASE_HEX")
1668 DOSDirectoryEntry               = uint32("dos_directory_entry", "DOS Directory Entry")
1669 DOSDirectoryEntry.Display("BASE_HEX")
1670 DOSDirectoryEntryNumber         = uint32("dos_directory_entry_number", "DOS Directory Entry Number")
1671 DOSDirectoryEntryNumber.Display('BASE_HEX')
1672 DOSFileAttributes               = uint8("dos_file_attributes", "DOS File Attributes")
1673 DOSParentDirectoryEntry         = uint32("dos_parent_directory_entry", "DOS Parent Directory Entry")
1674 DOSParentDirectoryEntry.Display('BASE_HEX')
1675 DOSSequence                     = uint32("dos_sequence", "DOS Sequence")
1676 DriveCylinders                  = uint16("drive_cylinders", "Drive Cylinders")
1677 DriveDefinitionString           = fw_string("drive_definition_string", "Drive Definition", 64)
1678 DriveHeads                      = uint8("drive_heads", "Drive Heads")
1679 DriveMappingTable               = bytes("drive_mapping_table", "Drive Mapping Table", 32)
1680 DriveMirrorTable                = bytes("drive_mirror_table", "Drive Mirror Table", 32)
1681 DriverBoardName                 = stringz("driver_board_name", "Driver Board Name")
1682 DriveRemovableFlag              = val_string8("drive_removable_flag", "Drive Removable Flag", [
1683         [ 0x00, "Nonremovable" ],
1684         [ 0xff, "Removable" ],
1685 ])
1686 DriverLogicalName               = stringz("driver_log_name", "Driver Logical Name")
1687 DriverShortName                 = stringz("driver_short_name", "Driver Short Name")
1688 DriveSize                       = uint32("drive_size", "Drive Size")
1689 DstEAFlags                      = val_string16("dst_ea_flags", "Destination EA Flags", [
1690         [ 0x0000, "Return EAHandle,Information Level 0" ],
1691         [ 0x0001, "Return NetWareHandle,Information Level 0" ],
1692         [ 0x0002, "Return Volume/Directory Number,Information Level 0" ],
1693         [ 0x0004, "Return EAHandle,Close Handle on Error,Information Level 0" ],
1694         [ 0x0005, "Return NetWareHandle,Close Handle on Error,Information Level 0" ],
1695         [ 0x0006, "Return Volume/Directory Number,Close Handle on Error,Information Level 0" ],
1696         [ 0x0010, "Return EAHandle,Information Level 1" ],
1697         [ 0x0011, "Return NetWareHandle,Information Level 1" ],
1698         [ 0x0012, "Return Volume/Directory Number,Information Level 1" ],
1699         [ 0x0014, "Return EAHandle,Close Handle on Error,Information Level 1" ],
1700         [ 0x0015, "Return NetWareHandle,Close Handle on Error,Information Level 1" ],
1701         [ 0x0016, "Return Volume/Directory Number,Close Handle on Error,Information Level 1" ],
1702         [ 0x0020, "Return EAHandle,Information Level 2" ],
1703         [ 0x0021, "Return NetWareHandle,Information Level 2" ],
1704         [ 0x0022, "Return Volume/Directory Number,Information Level 2" ],
1705         [ 0x0024, "Return EAHandle,Close Handle on Error,Information Level 2" ],
1706         [ 0x0025, "Return NetWareHandle,Close Handle on Error,Information Level 2" ],
1707         [ 0x0026, "Return Volume/Directory Number,Close Handle on Error,Information Level 2" ],
1708         [ 0x0030, "Return EAHandle,Information Level 3" ],
1709         [ 0x0031, "Return NetWareHandle,Information Level 3" ],
1710         [ 0x0032, "Return Volume/Directory Number,Information Level 3" ],
1711         [ 0x0034, "Return EAHandle,Close Handle on Error,Information Level 3" ],
1712         [ 0x0035, "Return NetWareHandle,Close Handle on Error,Information Level 3" ],
1713         [ 0x0036, "Return Volume/Directory Number,Close Handle on Error,Information Level 3" ],
1714         [ 0x0040, "Return EAHandle,Information Level 4" ],
1715         [ 0x0041, "Return NetWareHandle,Information Level 4" ],
1716         [ 0x0042, "Return Volume/Directory Number,Information Level 4" ],
1717         [ 0x0044, "Return EAHandle,Close Handle on Error,Information Level 4" ],
1718         [ 0x0045, "Return NetWareHandle,Close Handle on Error,Information Level 4" ],
1719         [ 0x0046, "Return Volume/Directory Number,Close Handle on Error,Information Level 4" ],
1720         [ 0x0050, "Return EAHandle,Information Level 5" ],
1721         [ 0x0051, "Return NetWareHandle,Information Level 5" ],
1722         [ 0x0052, "Return Volume/Directory Number,Information Level 5" ],
1723         [ 0x0054, "Return EAHandle,Close Handle on Error,Information Level 5" ],
1724         [ 0x0055, "Return NetWareHandle,Close Handle on Error,Information Level 5" ],
1725         [ 0x0056, "Return Volume/Directory Number,Close Handle on Error,Information Level 5" ],
1726         [ 0x0060, "Return EAHandle,Information Level 6" ],
1727         [ 0x0061, "Return NetWareHandle,Information Level 6" ],
1728         [ 0x0062, "Return Volume/Directory Number,Information Level 6" ],
1729         [ 0x0064, "Return EAHandle,Close Handle on Error,Information Level 6" ],
1730         [ 0x0065, "Return NetWareHandle,Close Handle on Error,Information Level 6" ],
1731         [ 0x0066, "Return Volume/Directory Number,Close Handle on Error,Information Level 6" ],
1732         [ 0x0070, "Return EAHandle,Information Level 7" ],
1733         [ 0x0071, "Return NetWareHandle,Information Level 7" ],
1734         [ 0x0072, "Return Volume/Directory Number,Information Level 7" ],
1735         [ 0x0074, "Return EAHandle,Close Handle on Error,Information Level 7" ],
1736         [ 0x0075, "Return NetWareHandle,Close Handle on Error,Information Level 7" ],
1737         [ 0x0076, "Return Volume/Directory Number,Close Handle on Error,Information Level 7" ],
1738         [ 0x0080, "Return EAHandle,Information Level 0,Immediate Close Handle" ],
1739         [ 0x0081, "Return NetWareHandle,Information Level 0,Immediate Close Handle" ],
1740         [ 0x0082, "Return Volume/Directory Number,Information Level 0,Immediate Close Handle" ],
1741         [ 0x0084, "Return EAHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1742         [ 0x0085, "Return NetWareHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1743         [ 0x0086, "Return Volume/Directory Number,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1744         [ 0x0090, "Return EAHandle,Information Level 1,Immediate Close Handle" ],
1745         [ 0x0091, "Return NetWareHandle,Information Level 1,Immediate Close Handle" ],
1746         [ 0x0092, "Return Volume/Directory Number,Information Level 1,Immediate Close Handle" ],
1747         [ 0x0094, "Return EAHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1748         [ 0x0095, "Return NetWareHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1749         [ 0x0096, "Return Volume/Directory Number,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1750         [ 0x00a0, "Return EAHandle,Information Level 2,Immediate Close Handle" ],
1751         [ 0x00a1, "Return NetWareHandle,Information Level 2,Immediate Close Handle" ],
1752         [ 0x00a2, "Return Volume/Directory Number,Information Level 2,Immediate Close Handle" ],
1753         [ 0x00a4, "Return EAHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1754         [ 0x00a5, "Return NetWareHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1755         [ 0x00a6, "Return Volume/Directory Number,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1756         [ 0x00b0, "Return EAHandle,Information Level 3,Immediate Close Handle" ],
1757         [ 0x00b1, "Return NetWareHandle,Information Level 3,Immediate Close Handle" ],
1758         [ 0x00b2, "Return Volume/Directory Number,Information Level 3,Immediate Close Handle" ],
1759         [ 0x00b4, "Return EAHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1760         [ 0x00b5, "Return NetWareHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1761         [ 0x00b6, "Return Volume/Directory Number,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1762         [ 0x00c0, "Return EAHandle,Information Level 4,Immediate Close Handle" ],
1763         [ 0x00c1, "Return NetWareHandle,Information Level 4,Immediate Close Handle" ],
1764         [ 0x00c2, "Return Volume/Directory Number,Information Level 4,Immediate Close Handle" ],
1765         [ 0x00c4, "Return EAHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1766         [ 0x00c5, "Return NetWareHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1767         [ 0x00c6, "Return Volume/Directory Number,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1768         [ 0x00d0, "Return EAHandle,Information Level 5,Immediate Close Handle" ],
1769         [ 0x00d1, "Return NetWareHandle,Information Level 5,Immediate Close Handle" ],
1770         [ 0x00d2, "Return Volume/Directory Number,Information Level 5,Immediate Close Handle" ],
1771         [ 0x00d4, "Return EAHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1772         [ 0x00d5, "Return NetWareHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1773         [ 0x00d6, "Return Volume/Directory Number,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1774         [ 0x00e0, "Return EAHandle,Information Level 6,Immediate Close Handle" ],
1775         [ 0x00e1, "Return NetWareHandle,Information Level 6,Immediate Close Handle" ],
1776         [ 0x00e2, "Return Volume/Directory Number,Information Level 6,Immediate Close Handle" ],
1777         [ 0x00e4, "Return EAHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1778         [ 0x00e5, "Return NetWareHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1779         [ 0x00e6, "Return Volume/Directory Number,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1780         [ 0x00f0, "Return EAHandle,Information Level 7,Immediate Close Handle" ],
1781         [ 0x00f1, "Return NetWareHandle,Information Level 7,Immediate Close Handle" ],
1782         [ 0x00f2, "Return Volume/Directory Number,Information Level 7,Immediate Close Handle" ],
1783         [ 0x00f4, "Return EAHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1784         [ 0x00f5, "Return NetWareHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1785         [ 0x00f6, "Return Volume/Directory Number,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1786 ])
1787 dstNSIndicator                  = val_string16("dst_ns_indicator", "Destination Name Space Indicator", [
1788         [ 0x0000, "Return Source Name Space Information" ],
1789         [ 0x0001, "Return Destination Name Space Information" ],
1790 ])      
1791 DstQueueID                      = uint32("dst_queue_id", "Destination Queue ID")
1792 DuplicateRepliesSent            = uint16("duplicate_replies_sent", "Duplicate Replies Sent")
1793
1794 EAAccessFlag                    = bitfield16("ea_access_flag", "EA Access Flag", [
1795         bf_boolean16(0x0001, "ea_permanent_memory", "Permanent Memory"),
1796         bf_boolean16(0x0002, "ea_deep_freeze", "Deep Freeze"),
1797         bf_boolean16(0x0004, "ea_in_progress", "In Progress"),
1798         bf_boolean16(0x0008, "ea_header_being_enlarged", "Header Being Enlarged"),
1799         bf_boolean16(0x0010, "ea_new_tally_used", "New Tally Used"),
1800         bf_boolean16(0x0020, "ea_tally_need_update", "Tally Need Update"),
1801         bf_boolean16(0x0040, "ea_score_card_present", "Score Card Present"),
1802         bf_boolean16(0x0080, "ea_need_bit_flag", "EA Need Bit Flag"),
1803         bf_boolean16(0x0100, "ea_write_privileges", "Write Privileges"),
1804         bf_boolean16(0x0200, "ea_read_privileges", "Read Privileges"),
1805         bf_boolean16(0x0400, "ea_delete_privileges", "Delete Privileges"),
1806         bf_boolean16(0x0800, "ea_system_ea_only", "System EA Only"),
1807         bf_boolean16(0x1000, "ea_write_in_progress", "Write In Progress"),
1808 ])
1809 EABytesWritten                  = uint32("ea_bytes_written", "Bytes Written")
1810 EACount                         = uint32("ea_count", "Count")
1811 EADataSize                      = uint32("ea_data_size", "Data Size")
1812 EADataSizeDuplicated            = uint32("ea_data_size_duplicated", "Data Size Duplicated")
1813 EADuplicateCount                = uint32("ea_duplicate_count", "Duplicate Count")
1814 EAErrorCodes                    = val_string16("ea_error_codes", "EA Error Codes", [
1815         [ 0x0000, "SUCCESSFUL" ],
1816         [ 0x00c8, "ERR_MISSING_EA_KEY" ],
1817         [ 0x00c9, "ERR_EA_NOT_FOUND" ],
1818         [ 0x00ca, "ERR_INVALID_EA_HANDLE_TYPE" ],
1819         [ 0x00cb, "ERR_EA_NO_KEY_NO_DATA" ],
1820         [ 0x00cc, "ERR_EA_NUMBER_MISMATCH" ],
1821         [ 0x00cd, "ERR_EXTENT_NUMBER_OUT_OF_RANGE" ],
1822         [ 0x00ce, "ERR_EA_BAD_DIR_NUM" ],
1823         [ 0x00cf, "ERR_INVALID_EA_HANDLE" ],
1824         [ 0x00d0, "ERR_EA_POSITION_OUT_OF_RANGE" ],
1825         [ 0x00d1, "ERR_EA_ACCESS_DENIED" ],
1826         [ 0x00d2, "ERR_DATA_PAGE_ODD_SIZE" ],
1827         [ 0x00d3, "ERR_EA_VOLUME_NOT_MOUNTED" ],
1828         [ 0x00d4, "ERR_BAD_PAGE_BOUNDARY" ],
1829         [ 0x00d5, "ERR_INSPECT_FAILURE" ],
1830         [ 0x00d6, "ERR_EA_ALREADY_CLAIMED" ],
1831         [ 0x00d7, "ERR_ODD_BUFFER_SIZE" ],
1832         [ 0x00d8, "ERR_NO_SCORECARDS" ],
1833         [ 0x00d9, "ERR_BAD_EDS_SIGNATURE" ],
1834         [ 0x00da, "ERR_EA_SPACE_LIMIT" ],
1835         [ 0x00db, "ERR_EA_KEY_CORRUPT" ],
1836         [ 0x00dc, "ERR_EA_KEY_LIMIT" ],
1837         [ 0x00dd, "ERR_TALLY_CORRUPT" ],
1838 ])
1839 EAFlags                         = val_string16("ea_flags", "EA Flags", [
1840         [ 0x0000, "Return EAHandle,Information Level 0" ],
1841         [ 0x0001, "Return NetWareHandle,Information Level 0" ],
1842         [ 0x0002, "Return Volume/Directory Number,Information Level 0" ],
1843         [ 0x0004, "Return EAHandle,Close Handle on Error,Information Level 0" ],
1844         [ 0x0005, "Return NetWareHandle,Close Handle on Error,Information Level 0" ],
1845         [ 0x0006, "Return Volume/Directory Number,Close Handle on Error,Information Level 0" ],
1846         [ 0x0010, "Return EAHandle,Information Level 1" ],
1847         [ 0x0011, "Return NetWareHandle,Information Level 1" ],
1848         [ 0x0012, "Return Volume/Directory Number,Information Level 1" ],
1849         [ 0x0014, "Return EAHandle,Close Handle on Error,Information Level 1" ],
1850         [ 0x0015, "Return NetWareHandle,Close Handle on Error,Information Level 1" ],
1851         [ 0x0016, "Return Volume/Directory Number,Close Handle on Error,Information Level 1" ],
1852         [ 0x0020, "Return EAHandle,Information Level 2" ],
1853         [ 0x0021, "Return NetWareHandle,Information Level 2" ],
1854         [ 0x0022, "Return Volume/Directory Number,Information Level 2" ],
1855         [ 0x0024, "Return EAHandle,Close Handle on Error,Information Level 2" ],
1856         [ 0x0025, "Return NetWareHandle,Close Handle on Error,Information Level 2" ],
1857         [ 0x0026, "Return Volume/Directory Number,Close Handle on Error,Information Level 2" ],
1858         [ 0x0030, "Return EAHandle,Information Level 3" ],
1859         [ 0x0031, "Return NetWareHandle,Information Level 3" ],
1860         [ 0x0032, "Return Volume/Directory Number,Information Level 3" ],
1861         [ 0x0034, "Return EAHandle,Close Handle on Error,Information Level 3" ],
1862         [ 0x0035, "Return NetWareHandle,Close Handle on Error,Information Level 3" ],
1863         [ 0x0036, "Return Volume/Directory Number,Close Handle on Error,Information Level 3" ],
1864         [ 0x0040, "Return EAHandle,Information Level 4" ],
1865         [ 0x0041, "Return NetWareHandle,Information Level 4" ],
1866         [ 0x0042, "Return Volume/Directory Number,Information Level 4" ],
1867         [ 0x0044, "Return EAHandle,Close Handle on Error,Information Level 4" ],
1868         [ 0x0045, "Return NetWareHandle,Close Handle on Error,Information Level 4" ],
1869         [ 0x0046, "Return Volume/Directory Number,Close Handle on Error,Information Level 4" ],
1870         [ 0x0050, "Return EAHandle,Information Level 5" ],
1871         [ 0x0051, "Return NetWareHandle,Information Level 5" ],
1872         [ 0x0052, "Return Volume/Directory Number,Information Level 5" ],
1873         [ 0x0054, "Return EAHandle,Close Handle on Error,Information Level 5" ],
1874         [ 0x0055, "Return NetWareHandle,Close Handle on Error,Information Level 5" ],
1875         [ 0x0056, "Return Volume/Directory Number,Close Handle on Error,Information Level 5" ],
1876         [ 0x0060, "Return EAHandle,Information Level 6" ],
1877         [ 0x0061, "Return NetWareHandle,Information Level 6" ],
1878         [ 0x0062, "Return Volume/Directory Number,Information Level 6" ],
1879         [ 0x0064, "Return EAHandle,Close Handle on Error,Information Level 6" ],
1880         [ 0x0065, "Return NetWareHandle,Close Handle on Error,Information Level 6" ],
1881         [ 0x0066, "Return Volume/Directory Number,Close Handle on Error,Information Level 6" ],
1882         [ 0x0070, "Return EAHandle,Information Level 7" ],
1883         [ 0x0071, "Return NetWareHandle,Information Level 7" ],
1884         [ 0x0072, "Return Volume/Directory Number,Information Level 7" ],
1885         [ 0x0074, "Return EAHandle,Close Handle on Error,Information Level 7" ],
1886         [ 0x0075, "Return NetWareHandle,Close Handle on Error,Information Level 7" ],
1887         [ 0x0076, "Return Volume/Directory Number,Close Handle on Error,Information Level 7" ],
1888         [ 0x0080, "Return EAHandle,Information Level 0,Immediate Close Handle" ],
1889         [ 0x0081, "Return NetWareHandle,Information Level 0,Immediate Close Handle" ],
1890         [ 0x0082, "Return Volume/Directory Number,Information Level 0,Immediate Close Handle" ],
1891         [ 0x0084, "Return EAHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1892         [ 0x0085, "Return NetWareHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1893         [ 0x0086, "Return Volume/Directory Number,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1894         [ 0x0090, "Return EAHandle,Information Level 1,Immediate Close Handle" ],
1895         [ 0x0091, "Return NetWareHandle,Information Level 1,Immediate Close Handle" ],
1896         [ 0x0092, "Return Volume/Directory Number,Information Level 1,Immediate Close Handle" ],
1897         [ 0x0094, "Return EAHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1898         [ 0x0095, "Return NetWareHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1899         [ 0x0096, "Return Volume/Directory Number,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1900         [ 0x00a0, "Return EAHandle,Information Level 2,Immediate Close Handle" ],
1901         [ 0x00a1, "Return NetWareHandle,Information Level 2,Immediate Close Handle" ],
1902         [ 0x00a2, "Return Volume/Directory Number,Information Level 2,Immediate Close Handle" ],
1903         [ 0x00a4, "Return EAHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1904         [ 0x00a5, "Return NetWareHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1905         [ 0x00a6, "Return Volume/Directory Number,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1906         [ 0x00b0, "Return EAHandle,Information Level 3,Immediate Close Handle" ],
1907         [ 0x00b1, "Return NetWareHandle,Information Level 3,Immediate Close Handle" ],
1908         [ 0x00b2, "Return Volume/Directory Number,Information Level 3,Immediate Close Handle" ],
1909         [ 0x00b4, "Return EAHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1910         [ 0x00b5, "Return NetWareHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1911         [ 0x00b6, "Return Volume/Directory Number,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1912         [ 0x00c0, "Return EAHandle,Information Level 4,Immediate Close Handle" ],
1913         [ 0x00c1, "Return NetWareHandle,Information Level 4,Immediate Close Handle" ],
1914         [ 0x00c2, "Return Volume/Directory Number,Information Level 4,Immediate Close Handle" ],
1915         [ 0x00c4, "Return EAHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1916         [ 0x00c5, "Return NetWareHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1917         [ 0x00c6, "Return Volume/Directory Number,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1918         [ 0x00d0, "Return EAHandle,Information Level 5,Immediate Close Handle" ],
1919         [ 0x00d1, "Return NetWareHandle,Information Level 5,Immediate Close Handle" ],
1920         [ 0x00d2, "Return Volume/Directory Number,Information Level 5,Immediate Close Handle" ],
1921         [ 0x00d4, "Return EAHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1922         [ 0x00d5, "Return NetWareHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1923         [ 0x00d6, "Return Volume/Directory Number,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1924         [ 0x00e0, "Return EAHandle,Information Level 6,Immediate Close Handle" ],
1925         [ 0x00e1, "Return NetWareHandle,Information Level 6,Immediate Close Handle" ],
1926         [ 0x00e2, "Return Volume/Directory Number,Information Level 6,Immediate Close Handle" ],
1927         [ 0x00e4, "Return EAHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1928         [ 0x00e5, "Return NetWareHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1929         [ 0x00e6, "Return Volume/Directory Number,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1930         [ 0x00f0, "Return EAHandle,Information Level 7,Immediate Close Handle" ],
1931         [ 0x00f1, "Return NetWareHandle,Information Level 7,Immediate Close Handle" ],
1932         [ 0x00f2, "Return Volume/Directory Number,Information Level 7,Immediate Close Handle" ],
1933         [ 0x00f4, "Return EAHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1934         [ 0x00f5, "Return NetWareHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1935         [ 0x00f6, "Return Volume/Directory Number,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1936 ])
1937 EAHandle                        = uint32("ea_handle", "EA Handle")
1938 EAHandle.Display("BASE_HEX")
1939 EAHandleOrNetWareHandleOrVolume = uint32("ea_handle_or_netware_handle_or_volume", "EAHandle or NetWare Handle or Volume (see EAFlags)")
1940 EAHandleOrNetWareHandleOrVolume.Display("BASE_HEX")
1941 EAKey                           = nstring16("ea_key", "EA Key")
1942 EAKeySize                       = uint32("ea_key_size", "Key Size")
1943 EAKeySizeDuplicated             = uint32("ea_key_size_duplicated", "Key Size Duplicated")
1944 EAValue                         = nstring16("ea_value", "EA Value")
1945 EAValueRep                      = fw_string("ea_value_rep", "EA Value", 1)
1946 EAValueLength                   = uint16("ea_value_length", "Value Length")
1947 EchoSocket                      = uint16("echo_socket", "Echo Socket")
1948 EchoSocket.Display('BASE_HEX')
1949 EffectiveRights                 = bitfield8("effective_rights", "Effective Rights", [
1950         bf_boolean8(0x01, "effective_rights_read", "Read Rights"),
1951         bf_boolean8(0x02, "effective_rights_write", "Write Rights"),
1952         bf_boolean8(0x04, "effective_rights_open", "Open Rights"),
1953         bf_boolean8(0x08, "effective_rights_create", "Create Rights"),
1954         bf_boolean8(0x10, "effective_rights_delete", "Delete Rights"),
1955         bf_boolean8(0x20, "effective_rights_parental", "Parental Rights"),
1956         bf_boolean8(0x40, "effective_rights_search", "Search Rights"),
1957         bf_boolean8(0x80, "effective_rights_modify", "Modify Rights"),
1958 ])
1959 EnumInfoMask                    = bitfield8("enum_info_mask", "Return Information Mask", [
1960         bf_boolean8(0x01, "enum_info_transport", "Transport Information"),
1961         bf_boolean8(0x02, "enum_info_time", "Time Information"),
1962         bf_boolean8(0x04, "enum_info_name", "Name Information"),
1963         bf_boolean8(0x08, "enum_info_lock", "Lock Information"),
1964         bf_boolean8(0x10, "enum_info_print", "Print Information"),
1965         bf_boolean8(0x20, "enum_info_stats", "Statistical Information"),
1966         bf_boolean8(0x40, "enum_info_account", "Accounting Information"),
1967         bf_boolean8(0x80, "enum_info_auth", "Authentication Information"),
1968 ])
1969
1970 eventOffset                     = bytes("event_offset", "Event Offset", 8)
1971 eventOffset.Display("BASE_HEX")
1972 eventTime                       = uint32("event_time", "Event Time")
1973 eventTime.Display("BASE_HEX")
1974 ExpirationTime                  = uint32("expiration_time", "Expiration Time")
1975 ExpirationTime.Display('BASE_HEX')
1976 ExtAttrDataSize                 = uint32("ext_attr_data_size", "Extended Attributes Data Size")
1977 ExtAttrCount                    = uint32("ext_attr_count", "Extended Attributes Count")
1978 ExtAttrKeySize                  = uint32("ext_attr_key_size", "Extended Attributes Key Size")
1979 ExtendedAttributesDefined       = uint32("extended_attributes_defined", "Extended Attributes Defined")
1980 ExtendedAttributeExtantsUsed    = uint32("extended_attribute_extants_used", "Extended Attribute Extants Used")
1981 ExtendedInfo                    = bitfield16("ext_info", "Extended Return Information", [
1982         bf_boolean16(0x0001, "ext_info_update", "Update"),
1983         bf_boolean16(0x0002, "ext_info_dos_name", "DOS Name"),
1984         bf_boolean16(0x0004, "ext_info_flush", "Flush"),
1985         bf_boolean16(0x0008, "ext_info_parental", "Parental"),
1986         bf_boolean16(0x0010, "ext_info_mac_finder", "MAC Finder"),
1987         bf_boolean16(0x0020, "ext_info_sibling", "Sibling"),
1988         bf_boolean16(0x0040, "ext_info_effective", "Effective"),
1989         bf_boolean16(0x0080, "ext_info_mac_date", "MAC Date"),
1990         bf_boolean16(0x0100, "ext_info_access", "Last Access"),
1991         bf_boolean16(0x0400, "ext_info_64_bit_fs", "64 Bit File Sizes"),
1992         bf_boolean16(0x8000, "ext_info_newstyle", "New Style"),
1993 ])
1994 ExtRouterActiveFlag             = boolean8("ext_router_active_flag", "External Router Active Flag")
1995
1996 FailedAllocReqCnt               = uint32("failed_alloc_req", "Failed Alloc Request Count")
1997 FatalFATWriteErrors             = uint16("fatal_fat_write_errors", "Fatal FAT Write Errors")
1998 FATScanErrors                   = uint16("fat_scan_errors", "FAT Scan Errors")
1999 FATWriteErrors                  = uint16("fat_write_errors", "FAT Write Errors")
2000 FieldsLenTable                  = bytes("fields_len_table", "Fields Len Table", 32)
2001 FileCount                       = uint16("file_count", "File Count")
2002 FileDate                        = uint16("file_date", "File Date")
2003 FileDate.NWDate()
2004 FileDirWindow                   = uint16("file_dir_win", "File/Dir Window")
2005 FileDirWindow.Display("BASE_HEX")
2006 FileExecuteType                 = uint8("file_execute_type", "File Execute Type")
2007 FileExtendedAttributes          = val_string8("file_ext_attr", "File Extended Attributes", [
2008         [ 0x00, "Search On All Read Only Opens" ],
2009         [ 0x01, "Search On Read Only Opens With No Path" ],
2010         [ 0x02, "Shell Default Search Mode" ],
2011         [ 0x03, "Search On All Opens With No Path" ],
2012         [ 0x04, "Do Not Search" ],
2013         [ 0x05, "Reserved" ],
2014         [ 0x06, "Search On All Opens" ],
2015         [ 0x07, "Reserved" ],
2016         [ 0x08, "Search On All Read Only Opens/Indexed" ],
2017         [ 0x09, "Search On Read Only Opens With No Path/Indexed" ],
2018         [ 0x0a, "Shell Default Search Mode/Indexed" ],
2019         [ 0x0b, "Search On All Opens With No Path/Indexed" ],
2020         [ 0x0c, "Do Not Search/Indexed" ],
2021         [ 0x0d, "Indexed" ],
2022         [ 0x0e, "Search On All Opens/Indexed" ],
2023         [ 0x0f, "Indexed" ],
2024         [ 0x10, "Search On All Read Only Opens/Transactional" ],
2025         [ 0x11, "Search On Read Only Opens With No Path/Transactional" ],
2026         [ 0x12, "Shell Default Search Mode/Transactional" ],
2027         [ 0x13, "Search On All Opens With No Path/Transactional" ],
2028         [ 0x14, "Do Not Search/Transactional" ],
2029         [ 0x15, "Transactional" ],
2030         [ 0x16, "Search On All Opens/Transactional" ],
2031         [ 0x17, "Transactional" ],
2032         [ 0x18, "Search On All Read Only Opens/Indexed/Transactional" ],
2033         [ 0x19, "Search On Read Only Opens With No Path/Indexed/Transactional" ],
2034         [ 0x1a, "Shell Default Search Mode/Indexed/Transactional" ],
2035         [ 0x1b, "Search On All Opens With No Path/Indexed/Transactional" ],
2036         [ 0x1c, "Do Not Search/Indexed/Transactional" ],
2037         [ 0x1d, "Indexed/Transactional" ],
2038         [ 0x1e, "Search On All Opens/Indexed/Transactional" ],
2039         [ 0x1f, "Indexed/Transactional" ],
2040         [ 0x40, "Search On All Read Only Opens/Read Audit" ],
2041         [ 0x41, "Search On Read Only Opens With No Path/Read Audit" ],
2042         [ 0x42, "Shell Default Search Mode/Read Audit" ],
2043         [ 0x43, "Search On All Opens With No Path/Read Audit" ],
2044         [ 0x44, "Do Not Search/Read Audit" ],
2045         [ 0x45, "Read Audit" ],
2046         [ 0x46, "Search On All Opens/Read Audit" ],
2047         [ 0x47, "Read Audit" ],
2048         [ 0x48, "Search On All Read Only Opens/Indexed/Read Audit" ],
2049         [ 0x49, "Search On Read Only Opens With No Path/Indexed/Read Audit" ],
2050         [ 0x4a, "Shell Default Search Mode/Indexed/Read Audit" ],
2051         [ 0x4b, "Search On All Opens With No Path/Indexed/Read Audit" ],
2052         [ 0x4c, "Do Not Search/Indexed/Read Audit" ],
2053         [ 0x4d, "Indexed/Read Audit" ],
2054         [ 0x4e, "Search On All Opens/Indexed/Read Audit" ],
2055         [ 0x4f, "Indexed/Read Audit" ],
2056         [ 0x50, "Search On All Read Only Opens/Transactional/Read Audit" ],
2057         [ 0x51, "Search On Read Only Opens With No Path/Transactional/Read Audit" ],
2058         [ 0x52, "Shell Default Search Mode/Transactional/Read Audit" ],
2059         [ 0x53, "Search On All Opens With No Path/Transactional/Read Audit" ],
2060         [ 0x54, "Do Not Search/Transactional/Read Audit" ],
2061         [ 0x55, "Transactional/Read Audit" ],
2062         [ 0x56, "Search On All Opens/Transactional/Read Audit" ],
2063         [ 0x57, "Transactional/Read Audit" ],
2064         [ 0x58, "Search On All Read Only Opens/Indexed/Transactional/Read Audit" ],
2065         [ 0x59, "Search On Read Only Opens With No Path/Indexed/Transactional/Read Audit" ],
2066         [ 0x5a, "Shell Default Search Mode/Indexed/Transactional/Read Audit" ],
2067         [ 0x5b, "Search On All Opens With No Path/Indexed/Transactional/Read Audit" ],
2068         [ 0x5c, "Do Not Search/Indexed/Transactional/Read Audit" ],
2069         [ 0x5d, "Indexed/Transactional/Read Audit" ],
2070         [ 0x5e, "Search On All Opens/Indexed/Transactional/Read Audit" ],
2071         [ 0x5f, "Indexed/Transactional/Read Audit" ],
2072         [ 0x80, "Search On All Read Only Opens/Write Audit" ],
2073         [ 0x81, "Search On Read Only Opens With No Path/Write Audit" ],
2074         [ 0x82, "Shell Default Search Mode/Write Audit" ],
2075         [ 0x83, "Search On All Opens With No Path/Write Audit" ],
2076         [ 0x84, "Do Not Search/Write Audit" ],
2077         [ 0x85, "Write Audit" ],
2078         [ 0x86, "Search On All Opens/Write Audit" ],
2079         [ 0x87, "Write Audit" ],
2080         [ 0x88, "Search On All Read Only Opens/Indexed/Write Audit" ],
2081         [ 0x89, "Search On Read Only Opens With No Path/Indexed/Write Audit" ],
2082         [ 0x8a, "Shell Default Search Mode/Indexed/Write Audit" ],
2083         [ 0x8b, "Search On All Opens With No Path/Indexed/Write Audit" ],
2084         [ 0x8c, "Do Not Search/Indexed/Write Audit" ],
2085         [ 0x8d, "Indexed/Write Audit" ],
2086         [ 0x8e, "Search On All Opens/Indexed/Write Audit" ],
2087         [ 0x8f, "Indexed/Write Audit" ],
2088         [ 0x90, "Search On All Read Only Opens/Transactional/Write Audit" ],
2089         [ 0x91, "Search On Read Only Opens With No Path/Transactional/Write Audit" ],
2090         [ 0x92, "Shell Default Search Mode/Transactional/Write Audit" ],
2091         [ 0x93, "Search On All Opens With No Path/Transactional/Write Audit" ],
2092         [ 0x94, "Do Not Search/Transactional/Write Audit" ],
2093         [ 0x95, "Transactional/Write Audit" ],
2094         [ 0x96, "Search On All Opens/Transactional/Write Audit" ],
2095         [ 0x97, "Transactional/Write Audit" ],
2096         [ 0x98, "Search On All Read Only Opens/Indexed/Transactional/Write Audit" ],
2097         [ 0x99, "Search On Read Only Opens With No Path/Indexed/Transactional/Write Audit" ],
2098         [ 0x9a, "Shell Default Search Mode/Indexed/Transactional/Write Audit" ],
2099         [ 0x9b, "Search On All Opens With No Path/Indexed/Transactional/Write Audit" ],
2100         [ 0x9c, "Do Not Search/Indexed/Transactional/Write Audit" ],
2101         [ 0x9d, "Indexed/Transactional/Write Audit" ],
2102         [ 0x9e, "Search On All Opens/Indexed/Transactional/Write Audit" ],
2103         [ 0x9f, "Indexed/Transactional/Write Audit" ],
2104         [ 0xa0, "Search On All Read Only Opens/Read Audit/Write Audit" ],
2105         [ 0xa1, "Search On Read Only Opens With No Path/Read Audit/Write Audit" ],
2106         [ 0xa2, "Shell Default Search Mode/Read Audit/Write Audit" ],
2107         [ 0xa3, "Search On All Opens With No Path/Read Audit/Write Audit" ],
2108         [ 0xa4, "Do Not Search/Read Audit/Write Audit" ],
2109         [ 0xa5, "Read Audit/Write Audit" ],
2110         [ 0xa6, "Search On All Opens/Read Audit/Write Audit" ],
2111         [ 0xa7, "Read Audit/Write Audit" ],
2112         [ 0xa8, "Search On All Read Only Opens/Indexed/Read Audit/Write Audit" ],
2113         [ 0xa9, "Search On Read Only Opens With No Path/Indexed/Read Audit/Write Audit" ],
2114         [ 0xaa, "Shell Default Search Mode/Indexed/Read Audit/Write Audit" ],
2115         [ 0xab, "Search On All Opens With No Path/Indexed/Read Audit/Write Audit" ],
2116         [ 0xac, "Do Not Search/Indexed/Read Audit/Write Audit" ],
2117         [ 0xad, "Indexed/Read Audit/Write Audit" ],
2118         [ 0xae, "Search On All Opens/Indexed/Read Audit/Write Audit" ],
2119         [ 0xaf, "Indexed/Read Audit/Write Audit" ],
2120         [ 0xb0, "Search On All Read Only Opens/Transactional/Read Audit/Write Audit" ],
2121         [ 0xb1, "Search On Read Only Opens With No Path/Transactional/Read Audit/Write Audit" ],
2122         [ 0xb2, "Shell Default Search Mode/Transactional/Read Audit/Write Audit" ],
2123         [ 0xb3, "Search On All Opens With No Path/Transactional/Read Audit/Write Audit" ],
2124         [ 0xb4, "Do Not Search/Transactional/Read Audit/Write Audit" ],
2125         [ 0xb5, "Transactional/Read Audit/Write Audit" ],
2126         [ 0xb6, "Search On All Opens/Transactional/Read Audit/Write Audit" ],
2127         [ 0xb7, "Transactional/Read Audit/Write Audit" ],
2128         [ 0xb8, "Search On All Read Only Opens/Indexed/Transactional/Read Audit/Write Audit" ],
2129         [ 0xb9, "Search On Read Only Opens With No Path/Indexed/Transactional/Read Audit/Write Audit" ],
2130         [ 0xba, "Shell Default Search Mode/Indexed/Transactional/Read Audit/Write Audit" ],
2131         [ 0xbb, "Search On All Opens With No Path/Indexed/Transactional/Read Audit/Write Audit" ],
2132         [ 0xbc, "Do Not Search/Indexed/Transactional/Read Audit/Write Audit" ],
2133         [ 0xbd, "Indexed/Transactional/Read Audit/Write Audit" ],
2134         [ 0xbe, "Search On All Opens/Indexed/Transactional/Read Audit/Write Audit" ],
2135         [ 0xbf, "Indexed/Transactional/Read Audit/Write Audit" ],
2136 ])
2137 fileFlags                       = uint32("file_flags", "File Flags")
2138 FileHandle                      = bytes("file_handle", "File Handle", 6)
2139 FileLimbo                       = uint32("file_limbo", "File Limbo")
2140 FileListCount                   = uint32("file_list_count", "File List Count")
2141 FileLock                        = val_string8("file_lock", "File Lock", [
2142         [ 0x00, "Not Locked" ],
2143         [ 0xfe, "Locked by file lock" ],
2144         [ 0xff, "Unknown" ],
2145 ])
2146 FileLockCount                   = uint16("file_lock_count", "File Lock Count")
2147 FileMode                        = uint8("file_mode", "File Mode")
2148 FileName                        = nstring8("file_name", "Filename")
2149 FileName12                      = fw_string("file_name_12", "Filename", 12)
2150 FileName14                      = fw_string("file_name_14", "Filename", 14)
2151 FileNameLen                     = uint8("file_name_len", "Filename Length")
2152 FileOffset                      = uint32("file_offset", "File Offset")
2153 FilePath                        = nstring8("file_path", "File Path")
2154 FileSize                        = uint32("file_size", "File Size", BE)
2155 FileSystemID                    = uint8("file_system_id", "File System ID")
2156 FileTime                        = uint16("file_time", "File Time")
2157 FileTime.NWTime()
2158 FileWriteFlags                  = val_string8("file_write_flags", "File Write Flags", [
2159         [ 0x01, "Writing" ],
2160         [ 0x02, "Write aborted" ],
2161 ])
2162 FileWriteState                  = val_string8("file_write_state", "File Write State", [
2163         [ 0x00, "Not Writing" ],
2164         [ 0x01, "Write in Progress" ],
2165         [ 0x02, "Write Being Stopped" ],
2166 ])
2167 Filler                          = uint8("filler", "Filler")
2168 FinderAttr                      = bitfield16("finder_attr", "Finder Info Attributes", [
2169         bf_boolean16(0x0001, "finder_attr_desktop", "Object on Desktop"),
2170         bf_boolean16(0x2000, "finder_attr_invisible", "Object is Invisible"),
2171         bf_boolean16(0x4000, "finder_attr_bundle", "Object Has Bundle"),
2172 ])
2173 FixedBitMask                    = uint32("fixed_bit_mask", "Fixed Bit Mask")
2174 FixedBitsDefined                = uint16("fixed_bits_defined", "Fixed Bits Defined")
2175 FlagBits                        = uint8("flag_bits", "Flag Bits")
2176 Flags                           = uint8("flags", "Flags")
2177 FlagsDef                        = uint16("flags_def", "Flags")
2178 FlushTime                       = uint32("flush_time", "Flush Time")
2179 FolderFlag                      = val_string8("folder_flag", "Folder Flag", [
2180         [ 0x00, "Not a Folder" ],
2181         [ 0x01, "Folder" ],
2182 ])
2183 ForkCount                       = uint8("fork_count", "Fork Count")
2184 ForkIndicator                   = val_string8("fork_indicator", "Fork Indicator", [
2185         [ 0x00, "Data Fork" ],
2186         [ 0x01, "Resource Fork" ],
2187 ])
2188 ForceFlag                       = val_string8("force_flag", "Force Server Down Flag", [
2189         [ 0x00, "Down Server if No Files Are Open" ],
2190         [ 0xff, "Down Server Immediately, Auto-Close Open Files" ],
2191 ])
2192 ForgedDetachedRequests          = uint16("forged_detached_requests", "Forged Detached Requests")
2193 FormType                        = uint16( "form_type", "Form Type" )
2194 FormTypeCnt                     = uint32("form_type_count", "Form Types Count")
2195 FoundSomeMem                    = uint32("found_some_mem", "Found Some Memory")
2196 FractionalSeconds               = uint32("fractional_time", "Fractional Time in Seconds")
2197 FraggerHandle                   = uint32("fragger_handle", "Fragment Handle")
2198 FraggerHandle.Display('BASE_HEX')
2199 FragmentWriteOccurred           = uint16("fragment_write_occurred", "Fragment Write Occurred")
2200 FragSize                        = uint32("frag_size", "Fragment Size")
2201 FreeableLimboSectors            = uint32("freeable_limbo_sectors", "Freeable Limbo Sectors")
2202 FreeBlocks                      = uint32("free_blocks", "Free Blocks")
2203 FreedClusters                   = uint32("freed_clusters", "Freed Clusters")
2204 FreeDirectoryEntries            = uint16("free_directory_entries", "Free Directory Entries")
2205 FSEngineFlag                    = boolean8("fs_engine_flag", "FS Engine Flag")
2206 FullName                        = fw_string("full_name", "Full Name", 39)
2207
2208 GetSetFlag                      = val_string8("get_set_flag", "Get Set Flag", [
2209         [ 0x00, "Get the default support module ID" ],
2210         [ 0x01, "Set the default support module ID" ],
2211 ])      
2212 GUID                            = bytes("guid", "GUID", 16)
2213 GUID.Display("BASE_HEX")
2214
2215 HandleFlag                      = val_string8("handle_flag", "Handle Flag", [
2216         [ 0x00, "Short Directory Handle" ],
2217         [ 0x01, "Directory Base" ],
2218         [ 0xFF, "No Handle Present" ],
2219 ])
2220 HandleInfoLevel                 = val_string8("handle_info_level", "Handle Info Level", [
2221         [ 0x00, "Get Limited Information from a File Handle" ],
2222         [ 0x01, "Get Limited Information from a File Handle Using a Name Space" ],
2223         [ 0x02, "Get Information from a File Handle" ],
2224         [ 0x03, "Get Information from a Directory Handle" ],
2225         [ 0x04, "Get Complete Information from a Directory Handle" ],
2226         [ 0x05, "Get Complete Information from a File Handle" ],
2227 ])
2228 HeldBytesRead                   = bytes("held_bytes_read", "Held Bytes Read", 6)
2229 HeldBytesWritten                = bytes("held_bytes_write", "Held Bytes Written", 6)
2230 HeldConnectTimeInMinutes        = uint32("held_conn_time", "Held Connect Time in Minutes")
2231 HeldRequests                    = uint32("user_info_held_req", "Held Requests")
2232 HoldAmount                      = uint32("hold_amount", "Hold Amount")
2233 HoldCancelAmount                = uint32("hold_cancel_amount", "Hold Cancel Amount")
2234 HolderID                        = uint32("holder_id", "Holder ID")
2235 HolderID.Display("BASE_HEX")
2236 HoldTime                        = uint32("hold_time", "Hold Time")
2237 HopsToNet                       = uint16("hops_to_net", "Hop Count")
2238 HorizLocation                   = uint16("horiz_location", "Horizontal Location")
2239 HostAddress                     = bytes("host_address", "Host Address", 6)
2240 HotFixBlocksAvailable           = uint16("hot_fix_blocks_available", "Hot Fix Blocks Available")
2241 HotFixDisabled                  = val_string8("hot_fix_disabled", "Hot Fix Disabled", [
2242         [ 0x00, "Enabled" ],
2243         [ 0x01, "Disabled" ],
2244 ])
2245 HotFixTableSize                 = uint16("hot_fix_table_size", "Hot Fix Table Size")
2246 HotFixTableStart                = uint32("hot_fix_table_start", "Hot Fix Table Start")
2247 Hour                            = uint8("s_hour", "Hour")
2248 HugeBitMask                     = uint32("huge_bit_mask", "Huge Bit Mask")
2249 HugeBitsDefined                 = uint16("huge_bits_defined", "Huge Bits Defined")
2250 HugeData                        = nstring8("huge_data", "Huge Data")
2251 HugeDataUsed                    = uint32("huge_data_used", "Huge Data Used")
2252 HugeStateInfo                   = bytes("huge_state_info", "Huge State Info", 16)
2253
2254 IdentificationNumber            = uint32("identification_number", "Identification Number")
2255 IgnoredRxPkts                   = uint32("ignored_rx_pkts", "Ignored Receive Packets")
2256 IncomingPacketDiscardedNoDGroup = uint16("incoming_packet_discarded_no_dgroup", "Incoming Packet Discarded No DGroup")
2257 InfoCount                       = uint16("info_count", "Info Count")
2258 InfoFlags                       = bitfield32("info_flags", "Info Flags", [
2259         bf_boolean32(0x10000000, "info_flags_security", "Return Object Security"),
2260         bf_boolean32(0x20000000, "info_flags_flags", "Return Object Flags"),
2261         bf_boolean32(0x40000000, "info_flags_type", "Return Object Type"),
2262         bf_boolean32(0x80000000, "info_flags_name", "Return Object Name"),
2263 ])
2264 InfoLevelNumber                 = val_string8("info_level_num", "Information Level Number", [
2265         [ 0x01, "Volume Information Definition" ],
2266         [ 0x02, "Volume Information 2 Definition" ],
2267 ])        
2268 InfoMask                        = bitfield32("info_mask", "Information Mask", [
2269         bf_boolean32(0x00000001, "info_flags_dos_time", "DOS Time"),
2270         bf_boolean32(0x00000002, "info_flags_ref_count", "Reference Count"),
2271         bf_boolean32(0x00000004, "info_flags_dos_attr", "DOS Attributes"),
2272         bf_boolean32(0x00000008, "info_flags_ids", "ID's"),
2273         bf_boolean32(0x00000010, "info_flags_ds_sizes", "Data Stream Sizes"),
2274         bf_boolean32(0x00000020, "info_flags_ns_attr", "Name Space Attributes"),
2275         bf_boolean32(0x00000040, "info_flags_ea_present", "EA Present Flag"),
2276         bf_boolean32(0x00000080, "info_flags_all_attr", "All Attributes"),
2277         bf_boolean32(0x00000100, "info_flags_all_dirbase_num", "All Directory Base Numbers"),
2278         bf_boolean32(0x00000200, "info_flags_max_access_mask", "Maximum Access Mask"),
2279         bf_boolean32(0x00000400, "info_flags_flush_time", "Flush Time"),
2280         bf_boolean32(0x00000800, "info_flags_prnt_base_id", "Parent Base ID"),
2281         bf_boolean32(0x00001000, "info_flags_mac_finder", "Mac Finder Information"),
2282         bf_boolean32(0x00002000, "info_flags_sibling_cnt", "Sibling Count"),
2283         bf_boolean32(0x00004000, "info_flags_effect_rights", "Effective Rights"),
2284         bf_boolean32(0x00008000, "info_flags_mac_time", "Mac Time"),
2285         bf_boolean32(0x20000000, "info_mask_dosname", "DOS Name"),
2286         bf_boolean32(0x40000000, "info_mask_c_name_space", "Creator Name Space & Name"),
2287         bf_boolean32(0x80000000, "info_mask_name", "Name"),
2288 ])
2289 InheritedRightsMask             = bitfield16("inherited_rights_mask", "Inherited Rights Mask", [ 
2290         bf_boolean16(0x0001, "inh_rights_read", "Read Rights"),
2291         bf_boolean16(0x0002, "inh_rights_write", "Write Rights"),
2292         bf_boolean16(0x0004, "inh_rights_open", "Open Rights"),
2293         bf_boolean16(0x0008, "inh_rights_create", "Create Rights"),
2294         bf_boolean16(0x0010, "inh_rights_delete", "Delete Rights"),
2295         bf_boolean16(0x0020, "inh_rights_parent", "Change Access"),
2296         bf_boolean16(0x0040, "inh_rights_search", "See Files Flag"),
2297         bf_boolean16(0x0080, "inh_rights_modify", "Modify Rights"),
2298         bf_boolean16(0x0100, "inh_rights_supervisor", "Supervisor"),
2299 ])
2300 InheritanceRevokeMask           = bitfield16("inheritance_revoke_mask", "Revoke Rights Mask", [
2301         bf_boolean16(0x0001, "inh_revoke_read", "Read Rights"),
2302         bf_boolean16(0x0002, "inh_revoke_write", "Write Rights"),
2303         bf_boolean16(0x0004, "inh_revoke_open", "Open Rights"),
2304         bf_boolean16(0x0008, "inh_revoke_create", "Create Rights"),
2305         bf_boolean16(0x0010, "inh_revoke_delete", "Delete Rights"),
2306         bf_boolean16(0x0020, "inh_revoke_parent", "Change Access"),
2307         bf_boolean16(0x0040, "inh_revoke_search", "See Files Flag"),
2308         bf_boolean16(0x0080, "inh_revoke_modify", "Modify Rights"),
2309         bf_boolean16(0x0100, "inh_revoke_supervisor", "Supervisor"),
2310 ])
2311 InitialSemaphoreValue           = uint8("initial_semaphore_value", "Initial Semaphore Value")
2312 InspectSize                     = uint32("inspect_size", "Inspect Size")
2313 InternetBridgeVersion           = uint8("internet_bridge_version", "Internet Bridge Version")
2314 InterruptNumbersUsed            = uint32("interrupt_numbers_used", "Interrupt Numbers Used")
2315 InUse                           = uint32("in_use", "Bytes in Use")
2316 IOAddressesUsed                 = bytes("io_addresses_used", "IO Addresses Used", 8)
2317 IOErrorCount                    = uint16("io_error_count", "IO Error Count")
2318 IOEngineFlag                    = boolean8("io_engine_flag", "IO Engine Flag")
2319 IPXNotMyNetwork                 = uint16("ipx_not_my_network", "IPX Not My Network")
2320 ItemsChanged                    = uint32("items_changed", "Items Changed")
2321 ItemsChecked                    = uint32("items_checked", "Items Checked")
2322 ItemsCount                      = uint32("items_count", "Items Count")
2323 itemsInList                     = uint32("items_in_list", "Items in List")
2324 ItemsInPacket                   = uint32("items_in_packet", "Items in Packet")
2325
2326 JobControlFlags                 = bitfield8("job_control_flags", "Job Control Flags", [
2327         bf_boolean8(0x08, "job_control_job_recovery", "Job Recovery"),
2328         bf_boolean8(0x10, "job_control_reservice", "ReService Job"),
2329         bf_boolean8(0x20, "job_control_file_open", "File Open"),
2330         bf_boolean8(0x40, "job_control_user_hold", "User Hold"),
2331         bf_boolean8(0x80, "job_control_operator_hold", "Operator Hold"),
2332
2333 ])
2334 JobControlFlagsWord             = bitfield16("job_control_flags_word", "Job Control Flags", [
2335         bf_boolean16(0x0008, "job_control1_job_recovery", "Job Recovery"),
2336         bf_boolean16(0x0010, "job_control1_reservice", "ReService Job"),
2337         bf_boolean16(0x0020, "job_control1_file_open", "File Open"),
2338         bf_boolean16(0x0040, "job_control1_user_hold", "User Hold"),
2339         bf_boolean16(0x0080, "job_control1_operator_hold", "Operator Hold"),
2340
2341 ])
2342 JobCount                        = uint32("job_count", "Job Count")
2343 JobFileHandle                   = bytes("job_file_handle", "Job File Handle", 6)
2344 JobFileHandleLong               = uint32("job_file_handle_long", "Job File Handle")
2345 JobFileHandleLong.Display("BASE_HEX")
2346 JobFileName                     = fw_string("job_file_name", "Job File Name", 14)
2347 JobPosition                     = uint8("job_position", "Job Position")
2348 JobPositionWord                 = uint16("job_position_word", "Job Position")
2349 JobNumber                       = uint16("job_number", "Job Number", BE )
2350 JobNumberLong                   = uint32("job_number_long", "Job Number", BE )
2351 JobNumberList                   = uint32("job_number_list", "Job Number List")
2352 JobType                         = uint16("job_type", "Job Type", BE )
2353
2354 LANCustomVariablesCount         = uint32("lan_cust_var_count", "LAN Custom Variables Count")
2355 LANdriverBoardInstance          = uint16("lan_drv_bd_inst", "LAN Driver Board Instance")
2356 LANdriverBoardNumber            = uint16("lan_drv_bd_num", "LAN Driver Board Number")
2357 LANdriverCardID                 = uint16("lan_drv_card_id", "LAN Driver Card ID")
2358 LANdriverCardName               = fw_string("lan_drv_card_name", "LAN Driver Card Name", 28)
2359 LANdriverCFG_MajorVersion       = uint8("lan_dvr_cfg_major_vrs", "LAN Driver Config - Major Version")
2360 LANdriverCFG_MinorVersion       = uint8("lan_dvr_cfg_minor_vrs", "LAN Driver Config - Minor Version")
2361 LANdriverDMAUsage1              = uint8("lan_drv_dma_usage1", "Primary DMA Channel")
2362 LANdriverDMAUsage2              = uint8("lan_drv_dma_usage2", "Secondary DMA Channel")
2363 LANdriverFlags                  = uint16("lan_drv_flags", "LAN Driver Flags")
2364 LANdriverFlags.Display("BASE_HEX")        
2365 LANdriverInterrupt1             = uint8("lan_drv_interrupt1", "Primary Interrupt Vector")
2366 LANdriverInterrupt2             = uint8("lan_drv_interrupt2", "Secondary Interrupt Vector")
2367 LANdriverIOPortsAndRanges1      = uint16("lan_drv_io_ports_and_ranges_1", "Primary Base I/O Port")
2368 LANdriverIOPortsAndRanges2      = uint16("lan_drv_io_ports_and_ranges_2", "Number of I/O Ports")
2369 LANdriverIOPortsAndRanges3      = uint16("lan_drv_io_ports_and_ranges_3", "Secondary Base I/O Port")
2370 LANdriverIOPortsAndRanges4      = uint16("lan_drv_io_ports_and_ranges_4", "Number of I/O Ports")
2371 LANdriverIOReserved             = bytes("lan_drv_io_reserved", "LAN Driver IO Reserved", 14)
2372 LANdriverLineSpeed              = uint16("lan_drv_line_speed", "LAN Driver Line Speed")
2373 LANdriverLink                   = uint32("lan_drv_link", "LAN Driver Link")
2374 LANdriverLogicalName            = bytes("lan_drv_log_name", "LAN Driver Logical Name", 18)
2375 LANdriverMajorVersion           = uint8("lan_drv_major_ver", "LAN Driver Major Version")
2376 LANdriverMaximumSize            = uint32("lan_drv_max_size", "LAN Driver Maximum Size")
2377 LANdriverMaxRecvSize            = uint32("lan_drv_max_rcv_size", "LAN Driver Maximum Receive Size")
2378 LANdriverMediaID                = uint16("lan_drv_media_id", "LAN Driver Media ID")
2379 LANdriverMediaType              = fw_string("lan_drv_media_type", "LAN Driver Media Type", 40)
2380 LANdriverMemoryDecode0          = uint32("lan_drv_mem_decode_0", "LAN Driver Memory Decode 0")
2381 LANdriverMemoryDecode1          = uint32("lan_drv_mem_decode_1", "LAN Driver Memory Decode 1")
2382 LANdriverMemoryLength0          = uint16("lan_drv_mem_length_0", "LAN Driver Memory Length 0")
2383 LANdriverMemoryLength1          = uint16("lan_drv_mem_length_1", "LAN Driver Memory Length 1")
2384 LANdriverMinorVersion           = uint8("lan_drv_minor_ver", "LAN Driver Minor Version")
2385 LANdriverModeFlags              = val_string8("lan_dvr_mode_flags", "LAN Driver Mode Flags", [
2386         [0x80, "Canonical Address" ],
2387         [0x81, "Canonical Address" ],
2388         [0x82, "Canonical Address" ],
2389         [0x83, "Canonical Address" ],
2390         [0x84, "Canonical Address" ],
2391         [0x85, "Canonical Address" ],
2392         [0x86, "Canonical Address" ],
2393         [0x87, "Canonical Address" ],
2394         [0x88, "Canonical Address" ],
2395         [0x89, "Canonical Address" ],
2396         [0x8a, "Canonical Address" ],
2397         [0x8b, "Canonical Address" ],
2398         [0x8c, "Canonical Address" ],
2399         [0x8d, "Canonical Address" ],
2400         [0x8e, "Canonical Address" ],
2401         [0x8f, "Canonical Address" ],
2402         [0x90, "Canonical Address" ],
2403         [0x91, "Canonical Address" ],
2404         [0x92, "Canonical Address" ],
2405         [0x93, "Canonical Address" ],
2406         [0x94, "Canonical Address" ],
2407         [0x95, "Canonical Address" ],
2408         [0x96, "Canonical Address" ],
2409         [0x97, "Canonical Address" ],
2410         [0x98, "Canonical Address" ],
2411         [0x99, "Canonical Address" ],
2412         [0x9a, "Canonical Address" ],
2413         [0x9b, "Canonical Address" ],
2414         [0x9c, "Canonical Address" ],
2415         [0x9d, "Canonical Address" ],
2416         [0x9e, "Canonical Address" ],
2417         [0x9f, "Canonical Address" ],
2418         [0xa0, "Canonical Address" ],
2419         [0xa1, "Canonical Address" ],
2420         [0xa2, "Canonical Address" ],
2421         [0xa3, "Canonical Address" ],
2422         [0xa4, "Canonical Address" ],
2423         [0xa5, "Canonical Address" ],
2424         [0xa6, "Canonical Address" ],
2425         [0xa7, "Canonical Address" ],
2426         [0xa8, "Canonical Address" ],
2427         [0xa9, "Canonical Address" ],
2428         [0xaa, "Canonical Address" ],
2429         [0xab, "Canonical Address" ],
2430         [0xac, "Canonical Address" ],
2431         [0xad, "Canonical Address" ],
2432         [0xae, "Canonical Address" ],
2433         [0xaf, "Canonical Address" ],
2434         [0xb0, "Canonical Address" ],
2435         [0xb1, "Canonical Address" ],
2436         [0xb2, "Canonical Address" ],
2437         [0xb3, "Canonical Address" ],
2438         [0xb4, "Canonical Address" ],
2439         [0xb5, "Canonical Address" ],
2440         [0xb6, "Canonical Address" ],
2441         [0xb7, "Canonical Address" ],
2442         [0xb8, "Canonical Address" ],
2443         [0xb9, "Canonical Address" ],
2444         [0xba, "Canonical Address" ],
2445         [0xbb, "Canonical Address" ],
2446         [0xbc, "Canonical Address" ],
2447         [0xbd, "Canonical Address" ],
2448         [0xbe, "Canonical Address" ],
2449         [0xbf, "Canonical Address" ],
2450         [0xc0, "Non-Canonical Address" ],
2451         [0xc1, "Non-Canonical Address" ],
2452         [0xc2, "Non-Canonical Address" ],
2453         [0xc3, "Non-Canonical Address" ],
2454         [0xc4, "Non-Canonical Address" ],
2455         [0xc5, "Non-Canonical Address" ],
2456         [0xc6, "Non-Canonical Address" ],
2457         [0xc7, "Non-Canonical Address" ],
2458         [0xc8, "Non-Canonical Address" ],
2459         [0xc9, "Non-Canonical Address" ],
2460         [0xca, "Non-Canonical Address" ],
2461         [0xcb, "Non-Canonical Address" ],
2462         [0xcc, "Non-Canonical Address" ],
2463         [0xcd, "Non-Canonical Address" ],
2464         [0xce, "Non-Canonical Address" ],
2465         [0xcf, "Non-Canonical Address" ],
2466         [0xd0, "Non-Canonical Address" ],
2467         [0xd1, "Non-Canonical Address" ],
2468         [0xd2, "Non-Canonical Address" ],
2469         [0xd3, "Non-Canonical Address" ],
2470         [0xd4, "Non-Canonical Address" ],
2471         [0xd5, "Non-Canonical Address" ],
2472         [0xd6, "Non-Canonical Address" ],
2473         [0xd7, "Non-Canonical Address" ],
2474         [0xd8, "Non-Canonical Address" ],
2475         [0xd9, "Non-Canonical Address" ],
2476         [0xda, "Non-Canonical Address" ],
2477         [0xdb, "Non-Canonical Address" ],
2478         [0xdc, "Non-Canonical Address" ],
2479         [0xdd, "Non-Canonical Address" ],
2480         [0xde, "Non-Canonical Address" ],
2481         [0xdf, "Non-Canonical Address" ],
2482         [0xe0, "Non-Canonical Address" ],
2483         [0xe1, "Non-Canonical Address" ],
2484         [0xe2, "Non-Canonical Address" ],
2485         [0xe3, "Non-Canonical Address" ],
2486         [0xe4, "Non-Canonical Address" ],
2487         [0xe5, "Non-Canonical Address" ],
2488         [0xe6, "Non-Canonical Address" ],
2489         [0xe7, "Non-Canonical Address" ],
2490         [0xe8, "Non-Canonical Address" ],
2491         [0xe9, "Non-Canonical Address" ],
2492         [0xea, "Non-Canonical Address" ],
2493         [0xeb, "Non-Canonical Address" ],
2494         [0xec, "Non-Canonical Address" ],
2495         [0xed, "Non-Canonical Address" ],
2496         [0xee, "Non-Canonical Address" ],
2497         [0xef, "Non-Canonical Address" ],
2498         [0xf0, "Non-Canonical Address" ],
2499         [0xf1, "Non-Canonical Address" ],
2500         [0xf2, "Non-Canonical Address" ],
2501         [0xf3, "Non-Canonical Address" ],
2502         [0xf4, "Non-Canonical Address" ],
2503         [0xf5, "Non-Canonical Address" ],
2504         [0xf6, "Non-Canonical Address" ],
2505         [0xf7, "Non-Canonical Address" ],
2506         [0xf8, "Non-Canonical Address" ],
2507         [0xf9, "Non-Canonical Address" ],
2508         [0xfa, "Non-Canonical Address" ],
2509         [0xfb, "Non-Canonical Address" ],
2510         [0xfc, "Non-Canonical Address" ],
2511         [0xfd, "Non-Canonical Address" ],
2512         [0xfe, "Non-Canonical Address" ],
2513         [0xff, "Non-Canonical Address" ],
2514 ])        
2515 LANDriverNumber                 = uint8("lan_driver_number", "LAN Driver Number")
2516 LANdriverNodeAddress            = bytes("lan_dvr_node_addr", "LAN Driver Node Address", 6)
2517 LANdriverRecvSize               = uint32("lan_drv_rcv_size", "LAN Driver Receive Size")
2518 LANdriverReserved               = uint16("lan_drv_reserved", "LAN Driver Reserved")
2519 LANdriverSendRetries            = uint16("lan_drv_snd_retries", "LAN Driver Send Retries")
2520 LANdriverSharingFlags           = uint16("lan_drv_share", "LAN Driver Sharing Flags")
2521 LANdriverShortName              = fw_string("lan_drv_short_name", "LAN Driver Short Name", 40)
2522 LANdriverSlot                   = uint16("lan_drv_slot", "LAN Driver Slot")
2523 LANdriverSrcRouting             = uint32("lan_drv_src_route", "LAN Driver Source Routing")
2524 LANdriverTransportTime          = uint16("lan_drv_trans_time", "LAN Driver Transport Time")
2525 LastAccessedDate                = uint16("last_access_date", "Last Accessed Date")
2526 LastAccessedDate.NWDate()
2527 LastAccessedTime                = uint16("last_access_time", "Last Accessed Time")
2528 LastAccessedTime.NWTime()
2529 LastGarbCollect                 = uint32("last_garbage_collect", "Last Garbage Collection")
2530 LastInstance                    = uint32("last_instance", "Last Instance")
2531 LastRecordSeen                  = uint16("last_record_seen", "Last Record Seen")
2532 LastSearchIndex                 = uint16("last_search_index", "Search Index")
2533 LastSeen                        = uint32("last_seen", "Last Seen")
2534 LastSequenceNumber              = uint16("last_sequence_number", "Sequence Number")
2535 Level                           = uint8("level", "Level")
2536 LFSCounters                     = uint32("lfs_counters", "LFS Counters")
2537 LimboDataStreamsCount           = uint32("limbo_data_streams_count", "Limbo Data Streams Count")
2538 limbCount                       = uint32("limb_count", "Limb Count")
2539 LimboUsed                       = uint32("limbo_used", "Limbo Used")
2540 LocalConnectionID               = uint32("local_connection_id", "Local Connection ID")
2541 LocalConnectionID.Display("BASE_HEX")
2542 LocalMaxPacketSize              = uint32("local_max_packet_size", "Local Max Packet Size")
2543 LocalMaxSendSize                = uint32("local_max_send_size", "Local Max Send Size")
2544 LocalMaxRecvSize                = uint32("local_max_recv_size", "Local Max Recv Size")
2545 LocalLoginInfoCcode             = uint8("local_login_info_ccode", "Local Login Info C Code")
2546 LocalTargetSocket               = uint32("local_target_socket", "Local Target Socket")
2547 LocalTargetSocket.Display("BASE_HEX")
2548 LockAreaLen                     = uint32("lock_area_len", "Lock Area Length")
2549 LockAreasStartOffset            = uint32("lock_areas_start_offset", "Lock Areas Start Offset")
2550 LockTimeout                     = uint16("lock_timeout", "Lock Timeout")
2551 Locked                          = val_string8("locked", "Locked Flag", [
2552         [ 0x00, "Not Locked Exclusively" ],
2553         [ 0x01, "Locked Exclusively" ],
2554 ])
2555 LockFlag                        = val_string8("lock_flag", "Lock Flag", [
2556         [ 0x00, "Not Locked, Log for Future Exclusive Lock" ],
2557         [ 0x01, "Exclusive Lock (Read/Write)" ],
2558         [ 0x02, "Log for Future Shared Lock"],
2559         [ 0x03, "Shareable Lock (Read-Only)" ],
2560         [ 0xfe, "Locked by a File Lock" ],
2561         [ 0xff, "Locked by Begin Share File Set" ],
2562 ])
2563 LockName                        = nstring8("lock_name", "Lock Name")
2564 LockStatus                      = val_string8("lock_status", "Lock Status", [
2565         [ 0x00, "Locked Exclusive" ],
2566         [ 0x01, "Locked Shareable" ],
2567         [ 0x02, "Logged" ],
2568         [ 0x06, "Lock is Held by TTS"],
2569 ])
2570 LockType                        = val_string8("lock_type", "Lock Type", [
2571         [ 0x00, "Locked" ],
2572         [ 0x01, "Open Shareable" ],
2573         [ 0x02, "Logged" ],
2574         [ 0x03, "Open Normal" ],
2575         [ 0x06, "TTS Holding Lock" ],
2576         [ 0x07, "Transaction Flag Set on This File" ],
2577 ])
2578 LogFileFlagHigh                 = bitfield8("log_file_flag_high", "Log File Flag (byte 2)", [
2579         bf_boolean8(0x80, "log_flag_call_back", "Call Back Requested" ),
2580 ])
2581 LogFileFlagLow                  = bitfield8("log_file_flag_low", "Log File Flag", [
2582         bf_boolean8(0x01, "log_flag_lock_file", "Lock File Immediately" ), 
2583 ])      
2584 LoggedObjectID                  = uint32("logged_object_id", "Logged in Object ID")
2585 LoggedObjectID.Display("BASE_HEX")
2586 LoggedCount                     = uint16("logged_count", "Logged Count")
2587 LogicalConnectionNumber         = uint16("logical_connection_number", "Logical Connection Number", BE)
2588 LogicalDriveCount               = uint8("logical_drive_count", "Logical Drive Count")
2589 LogicalDriveNumber              = uint8("logical_drive_number", "Logical Drive Number")
2590 LogicalLockThreshold            = uint8("logical_lock_threshold", "LogicalLockThreshold")
2591 LogicalRecordName               = nstring8("logical_record_name", "Logical Record Name")
2592 LoginKey                        = bytes("login_key", "Login Key", 8)
2593 LogLockType                     = uint8("log_lock_type", "Log Lock Type")
2594 LogTtlRxPkts                    = uint32("log_ttl_rx_pkts", "Total Received Packets")
2595 LogTtlTxPkts                    = uint32("log_ttl_tx_pkts", "Total Transmitted Packets")
2596 LongName                        = fw_string("long_name", "Long Name", 32)
2597 LRUBlockWasDirty                = uint16("lru_block_was_dirty", "LRU Block Was Dirty")
2598
2599 MacAttr                         = bitfield16("mac_attr", "Attributes", [
2600         bf_boolean16(0x0001, "mac_attr_smode1", "Search Mode"),
2601         bf_boolean16(0x0002, "mac_attr_smode2", "Search Mode"),
2602         bf_boolean16(0x0004, "mac_attr_smode3", "Search Mode"),
2603         bf_boolean16(0x0010, "mac_attr_transaction", "Transaction"),
2604         bf_boolean16(0x0020, "mac_attr_index", "Index"),
2605         bf_boolean16(0x0040, "mac_attr_r_audit", "Read Audit"),
2606         bf_boolean16(0x0080, "mac_attr_w_audit", "Write Audit"),
2607         bf_boolean16(0x0100, "mac_attr_r_only", "Read Only"),
2608         bf_boolean16(0x0200, "mac_attr_hidden", "Hidden"),
2609         bf_boolean16(0x0400, "mac_attr_system", "System"),
2610         bf_boolean16(0x0800, "mac_attr_execute_only", "Execute Only"),
2611         bf_boolean16(0x1000, "mac_attr_subdirectory", "Subdirectory"),
2612         bf_boolean16(0x2000, "mac_attr_archive", "Archive"),
2613         bf_boolean16(0x8000, "mac_attr_share", "Shareable File"),
2614 ])
2615 MACBackupDate                   = uint16("mac_backup_date", "Mac Backup Date")
2616 MACBackupDate.NWDate()
2617 MACBackupTime                   = uint16("mac_backup_time", "Mac Backup Time")
2618 MACBackupTime.NWTime()
2619 MacBaseDirectoryID              = uint32("mac_base_directory_id", "Mac Base Directory ID", BE)
2620 MacBaseDirectoryID.Display("BASE_HEX")
2621 MACCreateDate                   = uint16("mac_create_date", "Mac Create Date")
2622 MACCreateDate.NWDate()
2623 MACCreateTime                   = uint16("mac_create_time", "Mac Create Time")
2624 MACCreateTime.NWTime()
2625 MacDestinationBaseID            = uint32("mac_destination_base_id", "Mac Destination Base ID")
2626 MacDestinationBaseID.Display("BASE_HEX")
2627 MacFinderInfo                   = bytes("mac_finder_info", "Mac Finder Information", 32)
2628 MacLastSeenID                   = uint32("mac_last_seen_id", "Mac Last Seen ID")
2629 MacLastSeenID.Display("BASE_HEX")
2630 MacSourceBaseID                 = uint32("mac_source_base_id", "Mac Source Base ID")
2631 MacSourceBaseID.Display("BASE_HEX")
2632 MajorVersion                    = uint32("major_version", "Major Version")
2633 MaxBytes                        = uint16("max_bytes", "Maximum Number of Bytes")
2634 MaxDataStreams                  = uint32("max_data_streams", "Maximum Data Streams")
2635 MaxDirDepth                     = uint32("max_dir_depth", "Maximum Directory Depth")
2636 MaximumSpace                    = uint16("max_space", "Maximum Space")
2637 MaxNumOfConn                    = uint32("max_num_of_conn", "Maximum Number of Connections")
2638 MaxNumOfLANS                    = uint32("max_num_of_lans", "Maximum Number Of LAN's")
2639 MaxNumOfMedias                  = uint32("max_num_of_medias", "Maximum Number Of Media's")
2640 MaxNumOfNmeSps                  = uint32("max_num_of_nme_sps", "Maximum Number Of Name Spaces")
2641 MaxNumOfSpoolPr                 = uint32("max_num_of_spool_pr", "Maximum Number Of Spool Printers")
2642 MaxNumOfStacks                  = uint32("max_num_of_stacks", "Maximum Number Of Stacks")
2643 MaxNumOfUsers                   = uint32("max_num_of_users", "Maximum Number Of Users")
2644 MaxNumOfVol                     = uint32("max_num_of_vol", "Maximum Number of Volumes")
2645 MaxSpace                        = uint32("maxspace", "Maximum Space")
2646 MaxUsedDynamicSpace             = uint32("max_used_dynamic_space", "Max Used Dynamic Space")
2647 MediaList                       = uint32("media_list", "Media List")
2648 MediaListCount                  = uint32("media_list_count", "Media List Count")
2649 MediaName                       = nstring8("media_name", "Media Name")
2650 MediaNumber                     = uint32("media_number", "Media Number")
2651 MediaObjectType                 = val_string8("media_object_type", "Object Type", [
2652         [ 0x00, "Adapter" ],
2653         [ 0x01, "Changer" ],
2654         [ 0x02, "Removable Device" ],
2655         [ 0x03, "Device" ],
2656         [ 0x04, "Removable Media" ],
2657         [ 0x05, "Partition" ],
2658         [ 0x06, "Slot" ],
2659         [ 0x07, "Hotfix" ],
2660         [ 0x08, "Mirror" ],
2661         [ 0x09, "Parity" ],
2662         [ 0x0a, "Volume Segment" ],
2663         [ 0x0b, "Volume" ],
2664         [ 0x0c, "Clone" ],
2665         [ 0x0d, "Fixed Media" ],
2666         [ 0x0e, "Unknown" ],
2667 ])        
2668 MemberName                      = nstring8("member_name", "Member Name")
2669 MemberType                      = val_string16("member_type", "Member Type", [
2670         [ 0x0000,       "Unknown" ],
2671         [ 0x0001,       "User" ],
2672         [ 0x0002,       "User group" ],
2673         [ 0x0003,       "Print queue" ],
2674         [ 0x0004,       "NetWare file server" ],
2675         [ 0x0005,       "Job server" ],
2676         [ 0x0006,       "Gateway" ],
2677         [ 0x0007,       "Print server" ],
2678         [ 0x0008,       "Archive queue" ],
2679         [ 0x0009,       "Archive server" ],
2680         [ 0x000a,       "Job queue" ],
2681         [ 0x000b,       "Administration" ],
2682         [ 0x0021,       "NAS SNA gateway" ],
2683         [ 0x0026,       "Remote bridge server" ],
2684         [ 0x0027,       "TCP/IP gateway" ],
2685 ])
2686 MessageLanguage                 = uint32("message_language", "NLM Language")
2687 MigratedFiles                   = uint32("migrated_files", "Migrated Files")
2688 MigratedSectors                 = uint32("migrated_sectors", "Migrated Sectors")
2689 MinorVersion                    = uint32("minor_version", "Minor Version")
2690 Minute                          = uint8("s_minute", "Minutes")
2691 MixedModePathFlag               = uint8("mixed_mode_path_flag", "Mixed Mode Path Flag")
2692 ModifiedDate                    = uint16("modified_date", "Modified Date")
2693 ModifiedDate.NWDate()
2694 ModifiedTime                    = uint16("modified_time", "Modified Time")
2695 ModifiedTime.NWTime()
2696 ModifierID                      = uint32("modifier_id", "Modifier ID", BE)
2697 ModifierID.Display("BASE_HEX")
2698 ModifyDOSInfoMask               = bitfield16("modify_dos_info_mask", "Modify DOS Info Mask", [
2699         bf_boolean16(0x0002, "modify_dos_read", "Attributes"),
2700         bf_boolean16(0x0004, "modify_dos_write", "Creation Date"),
2701         bf_boolean16(0x0008, "modify_dos_open", "Creation Time"),
2702         bf_boolean16(0x0010, "modify_dos_create", "Creator ID"),
2703         bf_boolean16(0x0020, "modify_dos_delete", "Archive Date"),
2704         bf_boolean16(0x0040, "modify_dos_parent", "Archive Time"),
2705         bf_boolean16(0x0080, "modify_dos_search", "Archiver ID"),
2706         bf_boolean16(0x0100, "modify_dos_mdate", "Modify Date"),
2707         bf_boolean16(0x0200, "modify_dos_mtime", "Modify Time"),
2708         bf_boolean16(0x0400, "modify_dos_mid", "Modifier ID"),
2709         bf_boolean16(0x0800, "modify_dos_laccess", "Last Access"),
2710         bf_boolean16(0x1000, "modify_dos_inheritance", "Inheritance"),
2711         bf_boolean16(0x2000, "modify_dos_max_space", "Maximum Space"),
2712 ])      
2713 Month                           = val_string8("s_month", "Month", [
2714         [ 0x01, "January"],
2715         [ 0x02, "Febuary"],
2716         [ 0x03, "March"],
2717         [ 0x04, "April"],
2718         [ 0x05, "May"],
2719         [ 0x06, "June"],
2720         [ 0x07, "July"],
2721         [ 0x08, "August"],
2722         [ 0x09, "September"],
2723         [ 0x0a, "October"],
2724         [ 0x0b, "November"],
2725         [ 0x0c, "December"],
2726 ])
2727
2728 MoreFlag                        = val_string8("more_flag", "More Flag", [
2729         [ 0x00, "No More Segments/Entries Available" ],
2730         [ 0x01, "More Segments/Entries Available" ],
2731         [ 0xff, "More Segments/Entries Available" ],
2732 ])
2733 MoreProperties                  = val_string8("more_properties", "More Properties", [
2734         [ 0x00, "No More Properties Available" ],
2735         [ 0x01, "No More Properties Available" ],
2736         [ 0xff, "More Properties Available" ],
2737 ])
2738
2739 Name                            = nstring8("name", "Name")
2740 Name12                          = fw_string("name12", "Name", 12)
2741 NameLen                         = uint8("name_len", "Name Space Length")
2742 NameLength                      = uint8("name_length", "Name Length")
2743 NameList                        = uint32("name_list", "Name List")
2744 #
2745 # XXX - should this value be used to interpret the characters in names,
2746 # search patterns, and the like?
2747 #
2748 # We need to handle character sets better, e.g. translating strings
2749 # from whatever character set they are in the packet (DOS/Windows code
2750 # pages, ISO character sets, UNIX EUC character sets, UTF-8, UCS-2/Unicode,
2751 # Mac character sets, etc.) into UCS-4 or UTF-8 and storing them as such
2752 # in the protocol tree, and displaying them as best we can.
2753 #
2754 NameSpace                       = val_string8("name_space", "Name Space", [
2755         [ 0x00, "DOS" ],
2756         [ 0x01, "MAC" ],
2757         [ 0x02, "NFS" ],
2758         [ 0x03, "FTAM" ],
2759         [ 0x04, "OS/2, Long" ],
2760 ])
2761 NamesSpaceInfoMask                      = bitfield16("ns_info_mask", "Names Space Info Mask", [
2762         bf_boolean16(0x0001, "ns_info_mask_modify", "Modify Name"),
2763         bf_boolean16(0x0002, "ns_info_mask_fatt", "File Attributes"),
2764         bf_boolean16(0x0004, "ns_info_mask_cdate", "Creation Date"),
2765         bf_boolean16(0x0008, "ns_info_mask_ctime", "Creation Time"),
2766         bf_boolean16(0x0010, "ns_info_mask_owner", "Owner ID"),
2767         bf_boolean16(0x0020, "ns_info_mask_adate", "Archive Date"),
2768         bf_boolean16(0x0040, "ns_info_mask_atime", "Archive Time"),
2769         bf_boolean16(0x0080, "ns_info_mask_aid", "Archiver ID"),
2770         bf_boolean16(0x0100, "ns_info_mask_udate", "Update Date"),
2771         bf_boolean16(0x0200, "ns_info_mask_utime", "Update Time"),
2772         bf_boolean16(0x0400, "ns_info_mask_uid", "Update ID"),
2773         bf_boolean16(0x0800, "ns_info_mask_acc_date", "Access Date"),
2774         bf_boolean16(0x1000, "ns_info_mask_max_acc_mask", "Inheritance"),
2775         bf_boolean16(0x2000, "ns_info_mask_max_space", "Maximum Space"),
2776 ])
2777 NameSpaceName                   = nstring8("name_space_name", "Name Space Name")
2778 nameType                        = uint32("name_type", "nameType")
2779 NCPdataSize                     = uint32("ncp_data_size", "NCP Data Size")
2780 NCPextensionMajorVersion        = uint8("ncp_extension_major_version", "NCP Extension Major Version")
2781 NCPextensionMinorVersion        = uint8("ncp_extension_minor_version", "NCP Extension Minor Version")
2782 NCPextensionName                = nstring8("ncp_extension_name", "NCP Extension Name")
2783 NCPextensionNumber              = uint32("ncp_extension_number", "NCP Extension Number")
2784 NCPextensionNumber.Display("BASE_HEX")
2785 NCPExtensionNumbers             = uint32("ncp_extension_numbers", "NCP Extension Numbers")
2786 NCPextensionRevisionNumber      = uint8("ncp_extension_revision_number", "NCP Extension Revision Number")
2787 NCPPeakStaInUse                 = uint32("ncp_peak_sta_in_use", "Peak Number of Connections since Server was brought up")
2788 NCPStaInUseCnt                  = uint32("ncp_sta_in_use", "Number of Workstations Connected to Server")
2789 NDSRequestFlags                 = bitfield16("nds_request_flags", "NDS Request Flags", [
2790         bf_boolean16(0x0001, "nds_request_flags_output", "Output Fields"),
2791         bf_boolean16(0x0002, "nds_request_flags_no_such_entry", "No Such Entry"),
2792         bf_boolean16(0x0004, "nds_request_flags_local_entry", "Local Entry"),
2793         bf_boolean16(0x0008, "nds_request_flags_type_ref", "Type Referral"),
2794         bf_boolean16(0x0010, "nds_request_flags_alias_ref", "Alias Referral"),
2795         bf_boolean16(0x0020, "nds_request_flags_req_cnt", "Request Count"),
2796         bf_boolean16(0x0040, "nds_request_flags_req_data_size", "Request Data Size"),
2797         bf_boolean16(0x0080, "nds_request_flags_reply_data_size", "Reply Data Size"),
2798         bf_boolean16(0x0100, "nds_request_flags_trans_ref", "Transport Referral"),
2799         bf_boolean16(0x0200, "nds_request_flags_trans_ref2", "Transport Referral"),
2800         bf_boolean16(0x0400, "nds_request_flags_up_ref", "Up Referral"),
2801         bf_boolean16(0x0800, "nds_request_flags_dn_ref", "Down Referral"),
2802 ])      
2803 NDSStatus                       = uint32("nds_status", "NDS Status")
2804 NetBIOSBroadcastWasPropogated   = uint32("netbios_broadcast_was_propogated", "NetBIOS Broadcast Was Propogated")
2805 NetIDNumber                     = uint32("net_id_number", "Net ID Number")
2806 NetIDNumber.Display("BASE_HEX")
2807 NetAddress                      = nbytes32("address", "Address")
2808 NetStatus                       = uint16("net_status", "Network Status")
2809 NetWareAccessHandle             = bytes("netware_access_handle", "NetWare Access Handle", 6)
2810 NetworkAddress                  = uint32("network_address", "Network Address")
2811 NetworkAddress.Display("BASE_HEX")
2812 NetworkNodeAddress              = bytes("network_node_address", "Network Node Address", 6)
2813 NetworkNumber                   = uint32("network_number", "Network Number")
2814 NetworkNumber.Display("BASE_HEX")
2815 #
2816 # XXX - this should have the "ipx_socket_vals" value_string table
2817 # from "packet-ipx.c".
2818 #
2819 NetworkSocket                   = uint16("network_socket", "Network Socket")
2820 NetworkSocket.Display("BASE_HEX")
2821 NewAccessRights                 = bitfield16("new_access_rights_mask", "New Access Rights", [
2822         bf_boolean16(0x0001, "new_access_rights_read", "Read"),
2823         bf_boolean16(0x0002, "new_access_rights_write", "Write"),
2824         bf_boolean16(0x0004, "new_access_rights_open", "Open"),
2825         bf_boolean16(0x0008, "new_access_rights_create", "Create"),
2826         bf_boolean16(0x0010, "new_access_rights_delete", "Delete"),
2827         bf_boolean16(0x0020, "new_access_rights_parental", "Parental"),
2828         bf_boolean16(0x0040, "new_access_rights_search", "Search"),
2829         bf_boolean16(0x0080, "new_access_rights_modify", "Modify"),
2830         bf_boolean16(0x0100, "new_access_rights_supervisor", "Supervisor"),
2831 ])
2832 NewDirectoryID                  = uint32("new_directory_id", "New Directory ID", BE)
2833 NewDirectoryID.Display("BASE_HEX")
2834 NewEAHandle                     = uint32("new_ea_handle", "New EA Handle")
2835 NewEAHandle.Display("BASE_HEX")
2836 NewFileName                     = fw_string("new_file_name", "New File Name", 14)
2837 NewFileNameLen                  = nstring8("new_file_name_len", "New File Name")
2838 NewFileSize                     = uint32("new_file_size", "New File Size")
2839 NewPassword                     = nstring8("new_password", "New Password")
2840 NewPath                         = nstring8("new_path", "New Path")
2841 NewPosition                     = uint8("new_position", "New Position")
2842 NewObjectName                   = nstring8("new_object_name", "New Object Name")
2843 NextCntBlock                    = uint32("next_cnt_block", "Next Count Block")
2844 NextHugeStateInfo               = bytes("next_huge_state_info", "Next Huge State Info", 16)
2845 nextLimbScanNum                 = uint32("next_limb_scan_num", "Next Limb Scan Number")
2846 NextObjectID                    = uint32("next_object_id", "Next Object ID", BE)
2847 NextObjectID.Display("BASE_HEX")
2848 NextRecord                      = uint32("next_record", "Next Record")
2849 NextRequestRecord               = uint16("next_request_record", "Next Request Record")
2850 NextSearchIndex                 = uint16("next_search_index", "Next Search Index")
2851 NextSearchNumber                = uint16("next_search_number", "Next Search Number")
2852 NextSearchNum                   = uint32("nxt_search_num", "Next Search Number")
2853 nextStartingNumber              = uint32("next_starting_number", "Next Starting Number")
2854 NextTrusteeEntry                = uint32("next_trustee_entry", "Next Trustee Entry")
2855 NextVolumeNumber                = uint32("next_volume_number", "Next Volume Number")
2856 NLMBuffer                       = nstring8("nlm_buffer", "Buffer")
2857 NLMcount                        = uint32("nlm_count", "NLM Count")
2858 NLMFlags                        = bitfield8("nlm_flags", "Flags", [
2859         bf_boolean8(0x01, "nlm_flags_reentrant", "ReEntrant"),
2860         bf_boolean8(0x02, "nlm_flags_multiple", "Can Load Multiple Times"),
2861         bf_boolean8(0x04, "nlm_flags_synchronize", "Synchronize Start"),
2862         bf_boolean8(0x08, "nlm_flags_pseudo", "PseudoPreemption"),
2863 ])
2864 NLMLoadOptions                  = uint32("nlm_load_options", "NLM Load Options")
2865 NLMName                         = stringz("nlm_name_stringz", "NLM Name")
2866 NLMNumber                       = uint32("nlm_number", "NLM Number")
2867 NLMNumbers                      = uint32("nlm_numbers", "NLM Numbers")
2868 NLMsInList                      = uint32("nlms_in_list", "NLM's in List")
2869 NLMStartNumber                  = uint32("nlm_start_num", "NLM Start Number")
2870 NLMType                         = val_string8("nlm_type", "NLM Type", [
2871         [ 0x00, "Generic NLM (.NLM)" ],
2872         [ 0x01, "LAN Driver (.LAN)" ],
2873         [ 0x02, "Disk Driver (.DSK)" ],
2874         [ 0x03, "Name Space Support Module (.NAM)" ],
2875         [ 0x04, "Utility or Support Program (.NLM)" ],
2876         [ 0x05, "Mirrored Server Link (.MSL)" ],
2877         [ 0x06, "OS NLM (.NLM)" ],
2878         [ 0x07, "Paged High OS NLM (.NLM)" ],
2879         [ 0x08, "Host Adapter Module (.HAM)" ],
2880         [ 0x09, "Custom Device Module (.CDM)" ],
2881         [ 0x0a, "File System Engine (.NLM)" ],
2882         [ 0x0b, "Real Mode NLM (.NLM)" ],
2883         [ 0x0c, "Hidden NLM (.NLM)" ],
2884         [ 0x15, "NICI Support (.NLM)" ],
2885         [ 0x16, "NICI Support (.NLM)" ],
2886         [ 0x17, "Cryptography (.NLM)" ],
2887         [ 0x18, "Encryption (.NLM)" ],
2888         [ 0x19, "NICI Support (.NLM)" ],
2889         [ 0x1c, "NICI Support (.NLM)" ],
2890 ])        
2891 nodeFlags                       = uint32("node_flags", "Node Flags")
2892 nodeFlags.Display("BASE_HEX")
2893 NoMoreMemAvlCnt                 = uint32("no_more_mem_avail", "No More Memory Available Count")
2894 NonDedFlag                      = boolean8("non_ded_flag", "Non Dedicated Flag")
2895 NonFreeableAvailableSubAllocSectors = uint32("non_freeable_avail_sub_alloc_sectors", "Non Freeable Available Sub Alloc Sectors")
2896 NonFreeableLimboSectors         = uint32("non_freeable_limbo_sectors", "Non Freeable Limbo Sectors")
2897 NotUsableSubAllocSectors        = uint32("not_usable_sub_alloc_sectors", "Not Usable Sub Alloc Sectors")
2898 NotYetPurgeableBlocks           = uint32("not_yet_purgeable_blocks", "Not Yet Purgeable Blocks")
2899 NSInfoBitMask                   = uint32("ns_info_bit_mask", "Name Space Info Bit Mask")
2900 NSSOAllInFlags                  = bitfield32("nsso_all_in_flags", "SecretStore All Input Flags",[
2901         bf_boolean32(0x00000010, "nsso_all_unicode", "Unicode Data"),
2902         bf_boolean32(0x00000080, "nsso_set_tree", "Set Tree"),
2903         bf_boolean32(0x00000200, "nsso_destroy_ctx", "Destroy Context"),
2904 ])
2905 NSSOGetServiceInFlags           = bitfield32("nsso_get_svc_in_flags", "SecretStore Get Service Flags",[
2906         bf_boolean32(0x00000100, "nsso_get_ctx", "Get Context"),
2907 ])
2908 NSSOReadInFlags                 = bitfield32("nsso_read_in_flags", "SecretStore Read Flags",[
2909         bf_boolean32(0x00000001, "nsso_rw_enh_prot", "Read/Write Enhanced Protection"),
2910         bf_boolean32(0x00000008, "nsso_repair", "Repair SecretStore"),
2911 ])
2912 NSSOReadOrUnlockInFlags         = bitfield32("nsso_read_or_unlock_in_flags", "SecretStore Read or Unlock Flags",[
2913         bf_boolean32(0x00000004, "nsso_ep_master_pwd", "Master Password used instead of ENH Password"),
2914 ])
2915 NSSOUnlockInFlags               = bitfield32("nsso_unlock_in_flags", "SecretStore Unlock Flags",[
2916         bf_boolean32(0x00000004, "nsso_rmv_lock", "Remove Lock from Store"),
2917 ])
2918 NSSOWriteInFlags                = bitfield32("nsso_write_in_flags", "SecretStore Write Flags",[
2919         bf_boolean32(0x00000001, "nsso_enh_prot", "Enhanced Protection"),
2920         bf_boolean32(0x00000002, "nsso_create_id", "Create ID"),
2921         bf_boolean32(0x00000040, "nsso_ep_pwd_used", "Enhanced Protection Password Used"),
2922 ])
2923 NSSOContextOutFlags             = bitfield32("nsso_cts_out_flags", "Type of Context",[ 
2924         bf_boolean32(0x00000001, "nsso_ds_ctx", "DSAPI Context"),
2925         bf_boolean32(0x00000080, "nsso_ldap_ctx", "LDAP Context"),
2926         bf_boolean32(0x00000200, "nsso_dc_ctx", "Reserved"),
2927 ])
2928 NSSOGetServiceOutFlags          = bitfield32("nsso_get_svc_out_flags", "SecretStore Status Flags",[ 
2929         bf_boolean32(0x00400000, "nsso_mstr_pwd", "Master Password Present"),
2930 ])
2931 NSSOGetServiceReadOutFlags      = bitfield32("nsso_get_svc_read_out_flags", "SecretStore Status Flags",[
2932         bf_boolean32(0x00800000, "nsso_mp_disabled", "Master Password Disabled"),
2933 ])
2934 NSSOReadOutFlags                = bitfield32("nsso_read_out_flags", "SecretStore Read Flags",[
2935         bf_boolean32(0x00010000, "nsso_secret_locked", "Enhanced Protection Lock on Secret"),
2936         bf_boolean32(0x00020000, "nsso_secret_not_init", "Secret Not Yet Initialized"),
2937         bf_boolean32(0x00040000, "nsso_secret_marked", "Secret Marked for Enhanced Protection"),
2938         bf_boolean32(0x00080000, "nsso_secret_not_sync", "Secret Not Yet Synchronized in NDS"),
2939         bf_boolean32(0x00200000, "nsso_secret_enh_pwd", "Enhanced Protection Password on Secret"),
2940 ])
2941 NSSOReadOutStatFlags            = bitfield32("nsso_read_out_stat_flags", "SecretStore Read Status Flags",[
2942         bf_boolean32(0x00100000, "nsso_admin_mod", "Admin Modified Secret Last"),
2943 ])
2944 NSSOVerb                        = val_string8("nsso_verb", "SecretStore Verb", [
2945         [ 0x00, "Query Server" ],
2946         [ 0x01, "Read App Secrets" ],
2947         [ 0x02, "Write App Secrets" ],
2948         [ 0x03, "Add Secret ID" ],
2949         [ 0x04, "Remove Secret ID" ],
2950         [ 0x05, "Remove SecretStore" ],
2951         [ 0x06, "Enumerate SecretID's" ],
2952         [ 0x07, "Unlock Store" ],
2953         [ 0x08, "Set Master Password" ],
2954         [ 0x09, "Get Service Information" ],
2955 ])        
2956 NSSpecificInfo                  = fw_string("ns_specific_info", "Name Space Specific Info", 512)                                         
2957 NumberOfAllocs                  = uint32("num_of_allocs", "Number of Allocations")
2958 NumberOfAttributes              = uint32("number_of_attributes", "Number of Attributes")
2959 NumberOfCPUs                    = uint32("number_of_cpus", "Number of CPU's")
2960 NumberOfDataStreams             = uint16("number_of_data_streams", "Number of Data Streams")
2961 NumberOfDynamicMemoryAreas      = uint16("number_of_dynamic_memory_areas", "Number Of Dynamic Memory Areas")
2962 NumberOfEntries                 = uint8("number_of_entries", "Number of Entries")
2963 NumberOfLocks                   = uint8("number_of_locks", "Number of Locks")
2964 NumberOfMinutesToDelay          = uint32("number_of_minutes_to_delay", "Number of Minutes to Delay")
2965 NumberOfNCPExtensions           = uint32("number_of_ncp_extensions", "Number Of NCP Extensions")
2966 NumberOfNSLoaded                = uint16("number_of_ns_loaded", "Number Of Name Spaces Loaded")
2967 NumberOfProtocols               = uint8("number_of_protocols", "Number of Protocols")
2968 NumberOfRecords                 = uint16("number_of_records", "Number of Records")
2969 NumberOfReferencedPublics       = uint32("num_of_ref_publics", "Number of Referenced Public Symbols") 
2970 NumberOfSemaphores              = uint16("number_of_semaphores", "Number Of Semaphores")
2971 NumberOfServiceProcesses        = uint8("number_of_service_processes", "Number Of Service Processes")
2972 NumberOfSetCategories           = uint32("number_of_set_categories", "Number Of Set Categories")
2973 NumberOfSMs                     = uint32("number_of_sms", "Number Of Storage Medias")
2974 NumberOfStations                = uint8("number_of_stations", "Number of Stations")
2975 NumBytes                        = uint16("num_bytes", "Number of Bytes")
2976 NumOfCCinPkt                    = uint32("num_of_cc_in_pkt", "Number of Custom Counters in Packet")
2977 NumOfChecks                     = uint32("num_of_checks", "Number of Checks")
2978 NumOfEntries                    = uint32("num_of_entries", "Number of Entries")
2979 NumOfFilesMigrated              = uint32("num_of_files_migrated", "Number Of Files Migrated")
2980 NumOfGarbageColl                = uint32("num_of_garb_coll", "Number of Garbage Collections")
2981 NumOfNCPReqs                    = uint32("num_of_ncp_reqs", "Number of NCP Requests since Server was brought up")
2982 NumOfSegments                   = uint32("num_of_segments", "Number of Segments")
2983
2984 ObjectCount                     = uint32("object_count", "Object Count")
2985 ObjectFlags                     = val_string8("object_flags", "Object Flags", [
2986         [ 0x00, "Dynamic object" ],
2987         [ 0x01, "Static object" ],
2988 ])
2989 ObjectHasProperties             = val_string8("object_has_properites", "Object Has Properties", [
2990         [ 0x00, "No properties" ],
2991         [ 0xff, "One or more properties" ],
2992 ])
2993 ObjectID                        = uint32("object_id", "Object ID", BE)
2994 ObjectID.Display('BASE_HEX')
2995 ObjectIDCount                   = uint16("object_id_count", "Object ID Count")
2996 ObjectIDInfo                    = uint32("object_id_info", "Object Information")
2997 ObjectInfoReturnCount           = uint32("object_info_rtn_count", "Object Information Count")
2998 ObjectName                      = nstring8("object_name", "Object Name")
2999 ObjectNameLen                   = fw_string("object_name_len", "Object Name", 48)
3000 ObjectNameStringz               = stringz("object_name_stringz", "Object Name")
3001 ObjectNumber                    = uint32("object_number", "Object Number")
3002 ObjectSecurity                  = val_string8("object_security", "Object Security", [
3003         [ 0x00, "Object Read (Anyone) / Object Write (Anyone)" ],
3004         [ 0x01, "Object Read (Logged in) / Object Write (Anyone)" ],
3005         [ 0x02, "Object Read (Logged in as Object) / Object Write (Anyone)" ],
3006         [ 0x03, "Object Read (Supervisor) / Object Write (Anyone)" ],
3007         [ 0x04, "Object Read (Operating System Only) / Object Write (Anyone)" ],
3008         [ 0x10, "Object Read (Anyone) / Object Write (Logged in)" ],
3009         [ 0x11, "Object Read (Logged in) / Object Write (Logged in)" ],
3010         [ 0x12, "Object Read (Logged in as Object) / Object Write (Logged in)" ],
3011         [ 0x13, "Object Read (Supervisor) / Object Write (Logged in)" ],
3012         [ 0x14, "Object Read (Operating System Only) / Object Write (Logged in)" ],
3013         [ 0x20, "Object Read (Anyone) / Object Write (Logged in as Object)" ],
3014         [ 0x21, "Object Read (Logged in) / Object Write (Logged in as Object)" ],
3015         [ 0x22, "Object Read (Logged in as Object) / Object Write (Logged in as Object)" ],
3016         [ 0x23, "Object Read (Supervisor) / Object Write (Logged in as Object)" ],
3017         [ 0x24, "Object Read (Operating System Only) / Object Write (Logged in as Object)" ],
3018         [ 0x30, "Object Read (Anyone) / Object Write (Supervisor)" ],
3019         [ 0x31, "Object Read (Logged in) / Object Write (Supervisor)" ],
3020         [ 0x32, "Object Read (Logged in as Object) / Object Write (Supervisor)" ],
3021         [ 0x33, "Object Read (Supervisor) / Object Write (Supervisor)" ],
3022         [ 0x34, "Object Read (Operating System Only) / Object Write (Supervisor)" ],
3023         [ 0x40, "Object Read (Anyone) / Object Write (Operating System Only)" ],
3024         [ 0x41, "Object Read (Logged in) / Object Write (Operating System Only)" ],
3025         [ 0x42, "Object Read (Logged in as Object) / Object Write (Operating System Only)" ],
3026         [ 0x43, "Object Read (Supervisor) / Object Write (Operating System Only)" ],
3027         [ 0x44, "Object Read (Operating System Only) / Object Write (Operating System Only)" ],
3028 ])
3029 #
3030 # XXX - should this use the "server_vals[]" value_string array from
3031 # "packet-ipx.c"?
3032 #
3033 # XXX - should this list be merged with that list?  There are some
3034 # oddities, e.g. this list has 0x03f5 for "Microsoft SQL Server", but
3035 # the list from "packet-ipx.c" has 0xf503 for that - is that just
3036 # byte-order confusion?
3037 #
3038 ObjectType                      = val_string16("object_type", "Object Type", [
3039         [ 0x0000,       "Unknown" ],
3040         [ 0x0001,       "User" ],
3041         [ 0x0002,       "User group" ],
3042         [ 0x0003,       "Print queue" ],
3043         [ 0x0004,       "NetWare file server" ],
3044         [ 0x0005,       "Job server" ],
3045         [ 0x0006,       "Gateway" ],
3046         [ 0x0007,       "Print server" ],
3047         [ 0x0008,       "Archive queue" ],
3048         [ 0x0009,       "Archive server" ],
3049         [ 0x000a,       "Job queue" ],
3050         [ 0x000b,       "Administration" ],
3051         [ 0x0021,       "NAS SNA gateway" ],
3052         [ 0x0026,       "Remote bridge server" ],
3053         [ 0x0027,       "TCP/IP gateway" ],
3054         [ 0x0047,       "Novell Print Server" ],
3055         [ 0x004b,       "Btrieve Server" ],
3056         [ 0x004c,       "NetWare SQL Server" ],
3057         [ 0x0064,       "ARCserve" ],
3058         [ 0x0066,       "ARCserve 3.0" ],
3059         [ 0x0076,       "NetWare SQL" ],
3060         [ 0x00a0,       "Gupta SQL Base Server" ],
3061         [ 0x00a1,       "Powerchute" ],
3062         [ 0x0107,       "NetWare Remote Console" ],
3063         [ 0x01cb,       "Shiva NetModem/E" ],
3064         [ 0x01cc,       "Shiva LanRover/E" ],
3065         [ 0x01cd,       "Shiva LanRover/T" ],
3066         [ 0x01d8,       "Castelle FAXPress Server" ],
3067         [ 0x01da,       "Castelle Print Server" ],
3068         [ 0x01dc,       "Castelle Fax Server" ],
3069         [ 0x0200,       "Novell SQL Server" ],
3070         [ 0x023a,       "NetWare Lanalyzer Agent" ],
3071         [ 0x023c,       "DOS Target Service Agent" ],
3072         [ 0x023f,       "NetWare Server Target Service Agent" ],
3073         [ 0x024f,       "Appletalk Remote Access Service" ],
3074         [ 0x0263,       "NetWare Management Agent" ],
3075         [ 0x0264,       "Global MHS" ],
3076         [ 0x0265,       "SNMP" ],
3077         [ 0x026a,       "NetWare Management/NMS Console" ],
3078         [ 0x026b,       "NetWare Time Synchronization" ],
3079         [ 0x0273,       "Nest Device" ],
3080         [ 0x0274,       "GroupWise Message Multiple Servers" ],
3081         [ 0x0278,       "NDS Replica Server" ],
3082         [ 0x0282,       "NDPS Service Registry Service" ],
3083         [ 0x028a,       "MPR/IPX Address Mapping Gateway" ],
3084         [ 0x028b,       "ManageWise" ],
3085         [ 0x0293,       "NetWare 6" ],
3086         [ 0x030c,       "HP JetDirect" ],
3087         [ 0x0328,       "Watcom SQL Server" ],
3088         [ 0x0355,       "Backup Exec" ],
3089         [ 0x039b,       "Lotus Notes" ],
3090         [ 0x03e1,       "Univel Server" ],
3091         [ 0x03f5,       "Microsoft SQL Server" ],
3092         [ 0x055e,       "Lexmark Print Server" ],
3093         [ 0x0640,       "Microsoft Gateway Services for NetWare" ],
3094         [ 0x064e,       "Microsoft Internet Information Server" ],
3095         [ 0x077b,       "Advantage Database Server" ],
3096         [ 0x07a7,       "Backup Exec Job Queue" ],
3097         [ 0x07a8,       "Backup Exec Job Manager" ],
3098         [ 0x07a9,       "Backup Exec Job Service" ],
3099         [ 0x5555,       "Site Lock" ],
3100         [ 0x8202,       "NDPS Broker" ],
3101 ])
3102 OCRetFlags                      = val_string8("o_c_ret_flags", "Open Create Return Flags", [
3103         [ 0x00, "No CallBack has been registered (No Op-Lock)" ],
3104         [ 0x01, "Request has been registered for CallBack (Op-Lock)" ],
3105 ])
3106 OldestDeletedFileAgeInTicks     = uint32("oldest_deleted_file_age_in_ticks", "Oldest Deleted File Age in Ticks")
3107 OldFileName                     = bytes("old_file_name", "Old File Name", 15)
3108 OldFileSize                     = uint32("old_file_size", "Old File Size")
3109 OpenCount                       = uint16("open_count", "Open Count")
3110 OpenCreateAction                = bitfield8("open_create_action", "Open Create Action", [
3111         bf_boolean8(0x01, "open_create_action_opened", "Opened"),
3112         bf_boolean8(0x02, "open_create_action_created", "Created"),
3113         bf_boolean8(0x04, "open_create_action_replaced", "Replaced"),
3114         bf_boolean8(0x08, "open_create_action_compressed", "Compressed"),
3115         bf_boolean8(0x80, "open_create_action_read_only", "Read Only"),
3116 ])      
3117 OpenCreateMode                  = bitfield8("open_create_mode", "Open Create Mode", [
3118         bf_boolean8(0x01, "open_create_mode_open", "Open existing file (file must exist)"),
3119         bf_boolean8(0x02, "open_create_mode_replace", "Replace existing file"),
3120         bf_boolean8(0x08, "open_create_mode_create", "Create new file or subdirectory (file or subdirectory cannot exist)"),
3121         bf_boolean8(0x80, "open_create_mode_oplock", "Open Callback (Op-Lock)"),
3122 ])
3123 OpenForReadCount                = uint16("open_for_read_count", "Open For Read Count")
3124 OpenForWriteCount               = uint16("open_for_write_count", "Open For Write Count")
3125 OpenRights                      = bitfield8("open_rights", "Open Rights", [
3126         bf_boolean8(0x01, "open_rights_read_only", "Read Only"),
3127         bf_boolean8(0x02, "open_rights_write_only", "Write Only"),
3128         bf_boolean8(0x04, "open_rights_deny_read", "Deny Read"),
3129         bf_boolean8(0x08, "open_rights_deny_write", "Deny Write"),
3130         bf_boolean8(0x10, "open_rights_compat", "Compatibility"),
3131         bf_boolean8(0x40, "open_rights_write_thru", "Write Through"),
3132 ])
3133 OptionNumber                    = uint8("option_number", "Option Number")
3134 originalSize                    = uint32("original_size", "Original Size")
3135 OSLanguageID                    = uint8("os_language_id", "OS Language ID")
3136 OSMajorVersion                  = uint8("os_major_version", "OS Major Version")
3137 OSMinorVersion                  = uint8("os_minor_version", "OS Minor Version")
3138 OSRevision                      = uint8("os_revision", "OS Revision")
3139 OtherFileForkSize               = uint32("other_file_fork_size", "Other File Fork Size")
3140 OtherFileForkFAT                = uint32("other_file_fork_fat", "Other File Fork FAT Entry")
3141 OutgoingPacketDiscardedNoTurboBuffer = uint16("outgoing_packet_discarded_no_turbo_buffer", "Outgoing Packet Discarded No Turbo Buffer")
3142
3143 PacketsDiscardedByHopCount      = uint16("packets_discarded_by_hop_count", "Packets Discarded By Hop Count")
3144 PacketsDiscardedUnknownNet      = uint16("packets_discarded_unknown_net", "Packets Discarded Unknown Net")
3145 PacketsFromInvalidConnection    = uint16("packets_from_invalid_connection", "Packets From Invalid Connection")
3146 PacketsReceivedDuringProcessing = uint16("packets_received_during_processing", "Packets Received During Processing")
3147 PacketsWithBadRequestType       = uint16("packets_with_bad_request_type", "Packets With Bad Request Type")
3148 PacketsWithBadSequenceNumber    = uint16("packets_with_bad_sequence_number", "Packets With Bad Sequence Number")
3149 PageTableOwnerFlag              = uint32("page_table_owner_flag", "Page Table Owner")
3150 ParentID                        = uint32("parent_id", "Parent ID")
3151 ParentID.Display("BASE_HEX")
3152 ParentBaseID                    = uint32("parent_base_id", "Parent Base ID")
3153 ParentBaseID.Display("BASE_HEX")
3154 ParentDirectoryBase             = uint32("parent_directory_base", "Parent Directory Base")
3155 ParentDOSDirectoryBase          = uint32("parent_dos_directory_base", "Parent DOS Directory Base")
3156 ParentObjectNumber              = uint32("parent_object_number", "Parent Object Number")
3157 ParentObjectNumber.Display("BASE_HEX")
3158 Password                        = nstring8("password", "Password")
3159 PathBase                        = uint8("path_base", "Path Base")
3160 PathComponentCount              = uint16("path_component_count", "Path Component Count")
3161 PathComponentSize               = uint16("path_component_size", "Path Component Size")
3162 PathCookieFlags                 = val_string16("path_cookie_flags", "Path Cookie Flags", [
3163         [ 0x0000, "Last component is Not a File Name" ],
3164         [ 0x0001, "Last component is a File Name" ],
3165 ])
3166 PathCount                       = uint8("path_count", "Path Count")
3167 Path                            = nstring8("path", "Path")
3168 PathAndName                     = stringz("path_and_name", "Path and Name")
3169 PendingIOCommands               = uint16("pending_io_commands", "Pending IO Commands")
3170 PhysicalDiskNumber              = uint8("physical_disk_number", "Physical Disk Number")
3171 PhysicalDriveCount              = uint8("physical_drive_count", "Physical Drive Count")
3172 PhysicalLockThreshold           = uint8("physical_lock_threshold", "Physical Lock Threshold")
3173 PingVersion                     = uint16("ping_version", "Ping Version")
3174 PositiveAcknowledgesSent        = uint16("positive_acknowledges_sent", "Positive Acknowledges Sent")
3175 PreCompressedSectors            = uint32("pre_compressed_sectors", "Precompressed Sectors")
3176 PreviousRecord                  = uint32("previous_record", "Previous Record")
3177 PrimaryEntry                    = uint32("primary_entry", "Primary Entry")
3178 PrintFlags                      = bitfield8("print_flags", "Print Flags", [
3179         bf_boolean8(0x08, "print_flags_ff", "Suppress Form Feeds"),
3180         bf_boolean8(0x10, "print_flags_cr", "Create"),
3181         bf_boolean8(0x20, "print_flags_del_spool", "Delete Spool File after Printing"),
3182         bf_boolean8(0x40, "print_flags_exp_tabs", "Expand Tabs in the File"),
3183         bf_boolean8(0x80, "print_flags_banner", "Print Banner Page"),
3184 ])
3185 PrinterHalted                   = val_string8("printer_halted", "Printer Halted", [
3186         [ 0x00, "Printer is not Halted" ],
3187         [ 0xff, "Printer is Halted" ],
3188 ])
3189 PrinterOffLine                  = val_string8( "printer_offline", "Printer Off-Line", [
3190         [ 0x00, "Printer is On-Line" ],
3191         [ 0xff, "Printer is Off-Line" ],
3192 ])
3193 PrintServerVersion              = uint8("print_server_version", "Print Server Version")
3194 Priority                        = uint32("priority", "Priority")
3195 Privileges                      = uint32("privileges", "Login Privileges")
3196 ProcessorType                   = val_string8("processor_type", "Processor Type", [
3197         [ 0x00, "Motorola 68000" ],
3198         [ 0x01, "Intel 8088 or 8086" ],
3199         [ 0x02, "Intel 80286" ],
3200 ])
3201 ProDOSInfo                      = bytes("pro_dos_info", "Pro DOS Info", 6)
3202 ProductMajorVersion             = uint16("product_major_version", "Product Major Version")
3203 ProductMinorVersion             = uint16("product_minor_version", "Product Minor Version")
3204 ProductRevisionVersion          = uint8("product_revision_version", "Product Revision Version")
3205 projectedCompSize               = uint32("projected_comp_size", "Projected Compression Size")
3206 PropertyHasMoreSegments         = val_string8("property_has_more_segments",
3207         "Property Has More Segments", [
3208         [ 0x00, "Is last segment" ],
3209         [ 0xff, "More segments are available" ],
3210 ])
3211 PropertyName                    = nstring8("property_name", "Property Name")
3212 PropertyName16                  = fw_string("property_name_16", "Property Name", 16)
3213 PropertyData                    = bytes("property_data", "Property Data", 128)
3214 PropertySegment                 = uint8("property_segment", "Property Segment")
3215 PropertyType                    = val_string8("property_type", "Property Type", [
3216         [ 0x00, "Display Static property" ],
3217         [ 0x01, "Display Dynamic property" ],
3218         [ 0x02, "Set Static property" ],
3219         [ 0x03, "Set Dynamic property" ],
3220 ])
3221 PropertyValue                   = fw_string("property_value", "Property Value", 128)
3222 ProposedMaxSize                 = uint16("proposed_max_size", "Proposed Max Size")
3223 protocolFlags                   = uint32("protocol_flags", "Protocol Flags")
3224 protocolFlags.Display("BASE_HEX")
3225 PurgeableBlocks                 = uint32("purgeable_blocks", "Purgeable Blocks")
3226 PurgeCcode                      = uint32("purge_c_code", "Purge Completion Code")
3227 PurgeCount                      = uint32("purge_count", "Purge Count")
3228 PurgeFlags                      = val_string16("purge_flags", "Purge Flags", [
3229         [ 0x0000, "Do not Purge All" ],
3230         [ 0x0001, "Purge All" ],
3231         [ 0xffff, "Do not Purge All" ],
3232 ])
3233 PurgeList                       = uint32("purge_list", "Purge List")
3234 PhysicalDiskChannel             = uint8("physical_disk_channel", "Physical Disk Channel")
3235 PhysicalDriveType               = val_string8("physical_drive_type", "Physical Drive Type", [
3236         [ 0x01, "XT" ],
3237         [ 0x02, "AT" ],
3238         [ 0x03, "SCSI" ],
3239         [ 0x04, "Disk Coprocessor" ],
3240         [ 0x05, "PS/2 with MFM Controller" ],
3241         [ 0x06, "PS/2 with ESDI Controller" ],
3242         [ 0x07, "Convergent Technology SBIC" ],
3243 ])      
3244 PhysicalReadErrors              = uint16("physical_read_errors", "Physical Read Errors")
3245 PhysicalReadRequests            = uint32("physical_read_requests", "Physical Read Requests")
3246 PhysicalWriteErrors             = uint16("physical_write_errors", "Physical Write Errors")
3247 PhysicalWriteRequests           = uint32("physical_write_requests", "Physical Write Requests")
3248 PrintToFileFlag                 = boolean8("print_to_file_flag", "Print to File Flag")
3249
3250 QueueID                         = uint32("queue_id", "Queue ID")
3251 QueueID.Display("BASE_HEX")
3252 QueueName                       = nstring8("queue_name", "Queue Name")
3253 QueueStartPosition              = uint32("queue_start_position", "Queue Start Position")
3254 QueueStatus                     = bitfield8("queue_status", "Queue Status", [
3255         bf_boolean8(0x01, "queue_status_new_jobs", "Operator does not want to add jobs to the queue"),
3256         bf_boolean8(0x02, "queue_status_pserver", "Operator does not want additional servers attaching"),
3257         bf_boolean8(0x04, "queue_status_svc_jobs", "Operator does not want servers to service jobs"),
3258 ])
3259 QueueType                       = uint16("queue_type", "Queue Type")
3260 QueueingVersion                 = uint8("qms_version", "QMS Version")
3261
3262 ReadBeyondWrite                 = uint16("read_beyond_write", "Read Beyond Write")
3263 RecordLockCount                 = uint16("rec_lock_count", "Record Lock Count")
3264 RecordStart                     = uint32("record_start", "Record Start")
3265 RecordEnd                       = uint32("record_end", "Record End")
3266 RecordInUseFlag                 = val_string16("record_in_use", "Record in Use", [
3267         [ 0x0000, "Record In Use" ],
3268         [ 0xffff, "Record Not In Use" ],
3269 ])      
3270 RedirectedPrinter               = uint8( "redirected_printer", "Redirected Printer" )
3271 ReferenceCount                  = uint32("reference_count", "Reference Count")
3272 RelationsCount                  = uint16("relations_count", "Relations Count")
3273 ReMirrorCurrentOffset           = uint32("re_mirror_current_offset", "ReMirror Current Offset")
3274 ReMirrorDriveNumber             = uint8("re_mirror_drive_number", "ReMirror Drive Number")
3275 RemoteMaxPacketSize             = uint32("remote_max_packet_size", "Remote Max Packet Size")
3276 RemoteTargetID                  = uint32("remote_target_id", "Remote Target ID")
3277 RemoteTargetID.Display("BASE_HEX")
3278 RemovableFlag                   = uint16("removable_flag", "Removable Flag")
3279 RemoveOpenRights                = bitfield8("remove_open_rights", "Remove Open Rights", [
3280         bf_boolean8(0x01, "remove_open_rights_ro", "Read Only"),
3281         bf_boolean8(0x02, "remove_open_rights_wo", "Write Only"),
3282         bf_boolean8(0x04, "remove_open_rights_dr", "Deny Read"),
3283         bf_boolean8(0x08, "remove_open_rights_dw", "Deny Write"),
3284         bf_boolean8(0x10, "remove_open_rights_comp", "Compatibility"),
3285         bf_boolean8(0x40, "remove_open_rights_write_thru", "Write Through"),
3286 ])
3287 RenameFlag                      = bitfield8("rename_flag", "Rename Flag", [
3288         bf_boolean8(0x01, "rename_flag_ren", "Rename to Myself allows file to be renamed to it's original name"),
3289         bf_boolean8(0x02, "rename_flag_comp", "Compatability allows files that are marked read only to be opened with read/write access"),
3290         bf_boolean8(0x04, "rename_flag_no", "Name Only renames only the specified name space entry name"),
3291 ])
3292 RepliesCancelled                = uint16("replies_cancelled", "Replies Cancelled")
3293 ReplyBuffer                     = nstring8("reply_buffer", "Reply Buffer")
3294 ReplyBufferSize                 = uint32("reply_buffer_size", "Reply Buffer Size")
3295 ReplyQueueJobNumbers            = uint32("reply_queue_job_numbers", "Reply Queue Job Numbers")
3296 RequestBitMap                   = bitfield16("request_bit_map", "Request Bit Map", [
3297         bf_boolean16(0x0001, "request_bit_map_ret_afp_ent", "AFP Entry ID"),
3298         bf_boolean16(0x0002, "request_bit_map_ret_data_fork", "Data Fork Length"),
3299         bf_boolean16(0x0004, "request_bit_map_ret_res_fork", "Resource Fork Length"),
3300         bf_boolean16(0x0008, "request_bit_map_ret_num_off", "Number of Offspring"),
3301         bf_boolean16(0x0010, "request_bit_map_ret_owner", "Owner ID"),
3302         bf_boolean16(0x0020, "request_bit_map_ret_short", "Short Name"),
3303         bf_boolean16(0x0040, "request_bit_map_ret_acc_priv", "Access Privileges"),
3304         bf_boolean16(0x0100, "request_bit_map_ratt", "Return Attributes"),
3305         bf_boolean16(0x0200, "request_bit_map_ret_afp_parent", "AFP Parent Entry ID"),
3306         bf_boolean16(0x0400, "request_bit_map_ret_cr_date", "Creation Date"),
3307         bf_boolean16(0x0800, "request_bit_map_ret_acc_date", "Access Date"),
3308         bf_boolean16(0x1000, "request_bit_map_ret_mod_date", "Modify Date&Time"),
3309         bf_boolean16(0x2000, "request_bit_map_ret_bak_date", "Backup Date&Time"),
3310         bf_boolean16(0x4000, "request_bit_map_ret_finder", "Finder Info"),
3311         bf_boolean16(0x8000, "request_bit_map_ret_long_nm", "Long Name"),
3312 ])              
3313 ResourceForkLen                 = uint32("resource_fork_len", "Resource Fork Len")
3314 RequestCode                     = val_string8("request_code", "Request Code", [
3315         [ 0x00, "Change Logged in to Temporary Authenticated" ],
3316         [ 0x01, "Change Temporary Authenticated to Logged in" ],
3317 ])
3318 RequestData                     = nstring8("request_data", "Request Data")
3319 RequestsReprocessed             = uint16("requests_reprocessed", "Requests Reprocessed")
3320 Reserved                        = uint8( "reserved", "Reserved" )
3321 Reserved2                       = bytes("reserved2", "Reserved", 2)
3322 Reserved3                       = bytes("reserved3", "Reserved", 3)
3323 Reserved4                       = bytes("reserved4", "Reserved", 4)
3324 Reserved6                       = bytes("reserved6", "Reserved", 6)
3325 Reserved8                       = bytes("reserved8", "Reserved", 8)
3326 Reserved10                      = bytes("reserved10", "Reserved", 10)
3327 Reserved12                      = bytes("reserved12", "Reserved", 12)
3328 Reserved16                      = bytes("reserved16", "Reserved", 16)
3329 Reserved20                      = bytes("reserved20", "Reserved", 20)
3330 Reserved28                      = bytes("reserved28", "Reserved", 28)
3331 Reserved36                      = bytes("reserved36", "Reserved", 36)
3332 Reserved44                      = bytes("reserved44", "Reserved", 44)
3333 Reserved48                      = bytes("reserved48", "Reserved", 48)
3334 Reserved51                      = bytes("reserved51", "Reserved", 51)
3335 Reserved56                      = bytes("reserved56", "Reserved", 56)
3336 Reserved64                      = bytes("reserved64", "Reserved", 64)
3337 Reserved120                     = bytes("reserved120", "Reserved", 120)                                  
3338 ReservedOrDirectoryNumber       = uint32("reserved_or_directory_number", "Reserved or Directory Number (see EAFlags)")
3339 ResourceCount                   = uint32("resource_count", "Resource Count")
3340 ResourceForkSize                = uint32("resource_fork_size", "Resource Fork Size")
3341 ResourceName                    = stringz("resource_name", "Resource Name")
3342 ResourceSignature               = fw_string("resource_sig", "Resource Signature", 4)
3343 RestoreTime                     = uint32("restore_time", "Restore Time")
3344 Restriction                     = uint32("restriction", "Disk Space Restriction")
3345 RestrictionsEnforced            = val_string8("restrictions_enforced", "Disk Restrictions Enforce Flag", [
3346         [ 0x00, "Enforced" ],
3347         [ 0xff, "Not Enforced" ],
3348 ])
3349 ReturnInfoCount                 = uint32("return_info_count", "Return Information Count")
3350 ReturnInfoMask                  = bitfield16("ret_info_mask", "Return Information", [
3351         bf_boolean16(0x0001, "ret_info_mask_fname", "Return File Name Information"),
3352         bf_boolean16(0x0002, "ret_info_mask_alloc", "Return Allocation Space Information"),
3353         bf_boolean16(0x0004, "ret_info_mask_attr", "Return Attribute Information"),
3354         bf_boolean16(0x0008, "ret_info_mask_size", "Return Size Information"),
3355         bf_boolean16(0x0010, "ret_info_mask_tspace", "Return Total Space Information"),
3356         bf_boolean16(0x0020, "ret_info_mask_eattr", "Return Extended Attributes Information"),
3357         bf_boolean16(0x0040, "ret_info_mask_arch", "Return Archive Information"),
3358         bf_boolean16(0x0080, "ret_info_mask_mod", "Return Modify Information"),
3359         bf_boolean16(0x0100, "ret_info_mask_create", "Return Creation Information"),
3360         bf_boolean16(0x0200, "ret_info_mask_ns", "Return Name Space Information"),
3361         bf_boolean16(0x0400, "ret_info_mask_dir", "Return Directory Information"),
3362         bf_boolean16(0x0800, "ret_info_mask_rights", "Return Rights Information"),
3363         bf_boolean16(0x1000, "ret_info_mask_id", "Return ID Information"),
3364         bf_boolean16(0x2000, "ret_info_mask_ns_attr", "Return Name Space Attributes Information"),
3365         bf_boolean16(0x4000, "ret_info_mask_actual", "Return Actual Information"),
3366         bf_boolean16(0x8000, "ret_info_mask_logical", "Return Logical Information"),
3367 ])
3368 ReturnedListCount               = uint32("returned_list_count", "Returned List Count")
3369 Revision                        = uint32("revision", "Revision")
3370 RevisionNumber                  = uint8("revision_number", "Revision")
3371 RevQueryFlag                    = val_string8("rev_query_flag", "Revoke Rights Query Flag", [
3372         [ 0x00, "Do not query the locks engine for access rights" ],
3373         [ 0x01, "Query the locks engine and return the access rights" ],
3374 ])
3375 RightsGrantMask                 = bitfield8("rights_grant_mask", "Grant Rights", [
3376         bf_boolean8(0x01, "rights_grant_mask_read", "Read"),
3377         bf_boolean8(0x02, "rights_grant_mask_write", "Write"),
3378         bf_boolean8(0x04, "rights_grant_mask_open", "Open"),
3379         bf_boolean8(0x08, "rights_grant_mask_create", "Create"),
3380         bf_boolean8(0x10, "rights_grant_mask_del", "Delete"),
3381         bf_boolean8(0x20, "rights_grant_mask_parent", "Parental"),
3382         bf_boolean8(0x40, "rights_grant_mask_search", "Search"),
3383         bf_boolean8(0x80, "rights_grant_mask_mod", "Modify"),
3384 ])
3385 RightsRevokeMask                = bitfield8("rights_revoke_mask", "Revoke Rights", [
3386         bf_boolean8(0x01, "rights_revoke_mask_read", "Read"),
3387         bf_boolean8(0x02, "rights_revoke_mask_write", "Write"),
3388         bf_boolean8(0x04, "rights_revoke_mask_open", "Open"),
3389         bf_boolean8(0x08, "rights_revoke_mask_create", "Create"),
3390         bf_boolean8(0x10, "rights_revoke_mask_del", "Delete"),
3391         bf_boolean8(0x20, "rights_revoke_mask_parent", "Parental"),
3392         bf_boolean8(0x40, "rights_revoke_mask_search", "Search"),
3393         bf_boolean8(0x80, "rights_revoke_mask_mod", "Modify"),
3394 ])
3395 RIPSocketNumber                 = uint16("rip_socket_num", "RIP Socket Number")
3396 RIPSocketNumber.Display("BASE_HEX")
3397 RouterDownFlag                  = boolean8("router_dn_flag", "Router Down Flag")
3398 RPCccode                        = val_string16("rpc_c_code", "RPC Completion Code", [
3399         [ 0x0000, "Successful" ],
3400 ])        
3401 RTagNumber                      = uint32("r_tag_num", "Resource Tag Number")
3402 RTagNumber.Display("BASE_HEX")
3403 RpyNearestSrvFlag               = boolean8("rpy_nearest_srv_flag", "Reply to Nearest Server Flag")
3404
3405 SalvageableFileEntryNumber      = uint32("salvageable_file_entry_number", "Salvageable File Entry Number")
3406 SalvageableFileEntryNumber.Display("BASE_HEX")
3407 SAPSocketNumber                 = uint16("sap_socket_number", "SAP Socket Number")
3408 SAPSocketNumber.Display("BASE_HEX")
3409 ScanItems                       = uint32("scan_items", "Number of Items returned from Scan")
3410 SearchAttributes                = bitfield8("sattr", "Search Attributes", [
3411         bf_boolean8(0x01, "sattr_ronly", "Read-Only Files Allowed"),
3412         bf_boolean8(0x02, "sattr_hid", "Hidden Files Allowed"),
3413         bf_boolean8(0x04, "sattr_sys", "System Files Allowed"),
3414         bf_boolean8(0x08, "sattr_exonly", "Execute-Only Files Allowed"),
3415         bf_boolean8(0x10, "sattr_sub", "Subdirectories Only"),
3416         bf_boolean8(0x20, "sattr_archive", "Archive"),
3417         bf_boolean8(0x40, "sattr_execute_confirm", "Execute Confirm"),
3418         bf_boolean8(0x80, "sattr_shareable", "Shareable"),
3419 ])      
3420 SearchAttributesLow             = bitfield16("search_att_low", "Search Attributes", [
3421         bf_boolean16(0x0001, "search_att_read_only", "Read-Only"),
3422         bf_boolean16(0x0002, "search_att_hidden", "Hidden Files Allowed"),
3423         bf_boolean16(0x0004, "search_att_system", "System"),
3424         bf_boolean16(0x0008, "search_att_execute_only", "Execute-Only"),
3425         bf_boolean16(0x0010, "search_att_sub", "Subdirectories Only"),
3426         bf_boolean16(0x0020, "search_att_archive", "Archive"),
3427         bf_boolean16(0x0040, "search_att_execute_confirm", "Execute Confirm"),
3428         bf_boolean16(0x0080, "search_att_shareable", "Shareable"),
3429         bf_boolean16(0x8000, "search_attr_all_files", "All Files and Directories"),
3430 ])
3431 SearchBitMap                            = bitfield8("search_bit_map", "Search Bit Map", [
3432         bf_boolean8(0x01, "search_bit_map_hidden", "Hidden"),
3433         bf_boolean8(0x02, "search_bit_map_sys", "System"),
3434         bf_boolean8(0x04, "search_bit_map_sub", "Subdirectory"),
3435         bf_boolean8(0x08, "search_bit_map_files", "Files"),
3436 ])      
3437 SearchConnNumber                        = uint32("search_conn_number", "Search Connection Number")
3438 SearchInstance                          = uint32("search_instance", "Search Instance")
3439 SearchNumber                            = uint32("search_number", "Search Number")
3440 SearchPattern                           = nstring8("search_pattern", "Search Pattern")
3441 SearchSequence                          = bytes("search_sequence", "Search Sequence", 9)
3442 SearchSequenceWord                      = uint16("search_sequence_word", "Search Sequence", BE)
3443 Second                                  = uint8("s_second", "Seconds")
3444 SecondsRelativeToTheYear2000            = uint32("sec_rel_to_y2k", "Seconds Relative to the Year 2000") 
3445 SecretStoreVerb                         = val_string8("ss_verb", "Secret Store Verb",[
3446         [ 0x00, "Query Server" ],
3447         [ 0x01, "Read App Secrets" ],
3448         [ 0x02, "Write App Secrets" ],
3449         [ 0x03, "Add Secret ID" ],
3450         [ 0x04, "Remove Secret ID" ],
3451         [ 0x05, "Remove SecretStore" ],
3452         [ 0x06, "Enumerate Secret IDs" ],
3453         [ 0x07, "Unlock Store" ],
3454         [ 0x08, "Set Master Password" ],
3455         [ 0x09, "Get Service Information" ],
3456 ])        
3457 SecurityEquivalentList                  = fw_string("security_equiv_list", "Security Equivalent List", 128) 
3458 SecurityFlag                            = bitfield8("security_flag", "Security Flag", [
3459         bf_boolean8(0x01, "checksuming", "Checksumming"),
3460         bf_boolean8(0x02, "signature", "Signature"),
3461         bf_boolean8(0x04, "complete_signatures", "Complete Signatures"),
3462         bf_boolean8(0x08, "encryption", "Encryption"),
3463         bf_boolean8(0x80, "large_internet_packets", "Large Internet Packets (LIP) Disabled"),
3464 ])      
3465 SecurityRestrictionVersion              = uint8("security_restriction_version", "Security Restriction Version")
3466 SectorsPerBlock                         = uint8("sectors_per_block", "Sectors Per Block")
3467 SectorsPerCluster                       = uint16("sectors_per_cluster", "Sectors Per Cluster" )
3468 SectorsPerClusterLong                   = uint32("sectors_per_cluster_long", "Sectors Per Cluster" )
3469 SectorsPerTrack                         = uint8("sectors_per_track", "Sectors Per Track")
3470 SectorSize                              = uint32("sector_size", "Sector Size")
3471 SemaphoreHandle                         = uint32("semaphore_handle", "Semaphore Handle")
3472 SemaphoreName                           = nstring8("semaphore_name", "Semaphore Name")
3473 SemaphoreNameLen                        = uint8("semaphore_name_len", "Semaphore Name Len")
3474 SemaphoreOpenCount                      = uint8("semaphore_open_count", "Semaphore Open Count")
3475 SemaphoreShareCount                     = uint8("semaphore_share_count", "Semaphore Share Count")
3476 SemaphoreTimeOut                        = uint16("semaphore_time_out", "Semaphore Time Out")
3477 SemaphoreValue                          = uint16("semaphore_value", "Semaphore Value")
3478 SendStatus                              = val_string8("send_status", "Send Status", [
3479         [ 0x00, "Successful" ],
3480         [ 0x01, "Illegal Station Number" ],
3481         [ 0x02, "Client Not Logged In" ],
3482         [ 0x03, "Client Not Accepting Messages" ],
3483         [ 0x04, "Client Already has a Message" ],
3484         [ 0x96, "No Alloc Space for the Message" ],
3485         [ 0xfd, "Bad Station Number" ],
3486         [ 0xff, "Failure" ],
3487 ])
3488 SequenceByte                    = uint8("sequence_byte", "Sequence")
3489 SequenceNumber                  = uint32("sequence_number", "Sequence Number")
3490 SequenceNumber.Display("BASE_HEX")
3491 ServerAddress                   = bytes("server_address", "Server Address", 12)
3492 ServerAppNumber                 = uint16("server_app_num", "Server App Number")
3493 ServerIDList                    = uint32("server_id_list", "Server ID List")
3494 ServerID                        = uint32("server_id_number", "Server ID", BE )
3495 ServerID.Display("BASE_HEX")
3496 ServerInfoFlags                 = val_string16("server_info_flags", "Server Information Flags", [
3497         [ 0x0000, "This server is not a member of a Cluster" ],
3498         [ 0x0001, "This server is a member of a Cluster" ],
3499 ])
3500 serverListFlags                 = uint32("server_list_flags", "Server List Flags")
3501 ServerName                      = fw_string("server_name", "Server Name", 48)
3502 serverName50                    = fw_string("server_name50", "Server Name", 50)
3503 ServerNameLen                   = nstring8("server_name_len", "Server Name")
3504 ServerNameStringz               = stringz("server_name_stringz", "Server Name")
3505 ServerNetworkAddress            = bytes("server_network_address", "Server Network Address", 10)
3506 ServerNode                      = bytes("server_node", "Server Node", 6)
3507 ServerSerialNumber              = uint32("server_serial_number", "Server Serial Number")
3508 ServerStation                   = uint8("server_station", "Server Station")
3509 ServerStationLong               = uint32("server_station_long", "Server Station")
3510 ServerStationList               = uint8("server_station_list", "Server Station List")
3511 ServerStatusRecord              = fw_string("server_status_record", "Server Status Record", 64)
3512 ServerTaskNumber                = uint8("server_task_number", "Server Task Number")
3513 ServerTaskNumberLong            = uint32("server_task_number_long", "Server Task Number")
3514 ServerType                      = uint16("server_type", "Server Type")
3515 ServerType.Display("BASE_HEX")
3516 ServerUtilization               = uint32("server_utilization", "Server Utilization")
3517 ServerUtilizationPercentage     = uint8("server_utilization_percentage", "Server Utilization Percentage")
3518 ServiceType                     = val_string16("Service_type", "Service Type", [
3519         [ 0x0000,       "Unknown" ],
3520         [ 0x0001,       "User" ],
3521         [ 0x0002,       "User group" ],
3522         [ 0x0003,       "Print queue" ],
3523         [ 0x0004,       "NetWare file server" ],
3524         [ 0x0005,       "Job server" ],
3525         [ 0x0006,       "Gateway" ],
3526         [ 0x0007,       "Print server" ],
3527         [ 0x0008,       "Archive queue" ],
3528         [ 0x0009,       "Archive server" ],
3529         [ 0x000a,       "Job queue" ],
3530         [ 0x000b,       "Administration" ],
3531         [ 0x0021,       "NAS SNA gateway" ],
3532         [ 0x0026,       "Remote bridge server" ],
3533         [ 0x0027,       "TCP/IP gateway" ],
3534 ])
3535 SetCmdCategory                  = val_string8("set_cmd_catagory", "Set Command Catagory", [
3536         [ 0x00, "Communications" ],
3537         [ 0x01, "Memory" ],
3538         [ 0x02, "File Cache" ],
3539         [ 0x03, "Directory Cache" ],
3540         [ 0x04, "File System" ],
3541         [ 0x05, "Locks" ],
3542         [ 0x06, "Transaction Tracking" ],
3543         [ 0x07, "Disk" ],
3544         [ 0x08, "Time" ],
3545         [ 0x09, "NCP" ],
3546         [ 0x0a, "Miscellaneous" ],
3547         [ 0x0b, "Error Handling" ],
3548         [ 0x0c, "Directory Services" ],
3549         [ 0x0d, "MultiProcessor" ],
3550         [ 0x0e, "Service Location Protocol" ],
3551         [ 0x0f, "Licensing Services" ],
3552 ])        
3553 SetCmdFlags                             = bitfield8("set_cmd_flags", "Set Command Flags", [
3554         bf_boolean8(0x01, "cmd_flags_startup_only", "Startup.ncf Only"),
3555         bf_boolean8(0x02, "cmd_flags_hidden", "Hidden"),
3556         bf_boolean8(0x04, "cmd_flags_advanced", "Advanced"),
3557         bf_boolean8(0x08, "cmd_flags_later", "Restart Server Required to Take Effect"),
3558         bf_boolean8(0x80, "cmd_flags_secure", "Console Secured"),
3559 ])
3560 SetCmdName                      = stringz("set_cmd_name", "Set Command Name")
3561 SetCmdType                      = val_string8("set_cmd_type", "Set Command Type", [
3562         [ 0x00, "Numeric Value" ],
3563         [ 0x01, "Boolean Value" ],
3564         [ 0x02, "Ticks Value" ],
3565         [ 0x04, "Time Value" ],
3566         [ 0x05, "String Value" ],
3567         [ 0x06, "Trigger Value" ],
3568         [ 0x07, "Numeric Value" ],
3569 ])        
3570 SetCmdValueNum                  = uint32("set_cmd_value_num", "Set Command Value")
3571 SetCmdValueString               = stringz("set_cmd_value_string", "Set Command Value")
3572 SetParmName                     = stringz("set_parm_name", "Set Parameter Name")
3573 SFTErrorTable                   = bytes("sft_error_table", "SFT Error Table", 60)
3574 SFTSupportLevel                 = val_string8("sft_support_level", "SFT Support Level", [
3575         [ 0x01, "Server Offers Hot Disk Error Fixing" ],
3576         [ 0x02, "Server Offers Disk Mirroring and Transaction Tracking" ],
3577         [ 0x03, "Server Offers Physical Server Mirroring" ],
3578 ])
3579 ShareableLockCount              = uint16("shareable_lock_count", "Shareable Lock Count")
3580 SharedMemoryAddresses           = bytes("shared_memory_addresses", "Shared Memory Addresses", 10)
3581 ShortName                       = fw_string("short_name", "Short Name", 12)
3582 ShortStkName                    = fw_string("short_stack_name", "Short Stack Name", 16)
3583 SiblingCount                    = uint32("sibling_count", "Sibling Count")
3584 SMIDs                           = uint32("smids", "Storage Media ID's")
3585 SoftwareDescription             = fw_string("software_description", "Software Description", 65)
3586 SoftwareDriverType              = uint8("software_driver_type", "Software Driver Type")
3587 SoftwareMajorVersionNumber      = uint8("software_major_version_number", "Software Major Version Number")
3588 SoftwareMinorVersionNumber      = uint8("software_minor_version_number", "Software Minor Version Number")
3589 SourceDirHandle                 = uint8("source_dir_handle", "Source Directory Handle")
3590 sourceOriginateTime             = bytes("source_originate_time", "Source Originate Time", 8)
3591 sourceOriginateTime.Display("BASE_HEX")
3592 SourcePath                      = nstring8("source_path", "Source Path")
3593 SourcePathComponentCount        = uint8("source_component_count", "Source Path Component Count")
3594 sourceReturnTime                = bytes("source_return_time", "Source Return Time", 8)
3595 sourceReturnTime.Display("BASE_HEX")
3596 SpaceUsed                       = uint32("space_used", "Space Used")
3597 SpaceMigrated                   = uint32("space_migrated", "Space Migrated")
3598 SrcNameSpace                    = val_string8("src_name_space", "Source Name Space", [
3599         [ 0x00, "DOS Name Space" ],
3600         [ 0x01, "MAC Name Space" ],
3601         [ 0x02, "NFS Name Space" ],
3602         [ 0x04, "Long Name Space" ],
3603 ])
3604 SupModID                        = uint32("sup_mod_id", "Sup Mod ID")
3605 StackCount                      = uint32("stack_count", "Stack Count")
3606 StackFullNameStr                = nstring8("stack_full_name_str", "Stack Full Name")
3607 StackMajorVN                    = uint8("stack_major_vn", "Stack Major Version Number")
3608 StackMinorVN                    = uint8("stack_minor_vn", "Stack Minor Version Number")
3609 StackNumber                     = uint32("stack_number", "Stack Number")
3610 StartConnNumber                 = uint32("start_conn_num", "Starting Connection Number")
3611 StartingBlock                   = uint16("starting_block", "Starting Block")
3612 StartingNumber                  = uint32("starting_number", "Starting Number")
3613 StartingSearchNumber            = uint16("start_search_number", "Start Search Number")
3614 StartNumber                     = uint32("start_number", "Start Number")
3615 startNumberFlag                 = uint16("start_number_flag", "Start Number Flag")
3616 StartVolumeNumber               = uint32("start_volume_number", "Starting Volume Number")
3617 StationList                     = uint32("station_list", "Station List")
3618 StationNumber                   = bytes("station_number", "Station Number", 3)
3619 StatMajorVersion                = uint8("stat_major_version", "Statistics Table Major Version")
3620 StatMinorVersion                = uint8("stat_minor_version", "Statistics Table Minor Version")
3621 Status                          = bitfield16("status", "Status", [
3622         bf_boolean16(0x0001, "user_info_logged_in", "Logged In"),
3623         bf_boolean16(0x0002, "user_info_being_abort", "Being Aborted"),
3624         bf_boolean16(0x0004, "user_info_audited", "Audited"),
3625         bf_boolean16(0x0008, "user_info_need_sec", "Needs Security Change"),
3626         bf_boolean16(0x0010, "user_info_mac_station", "MAC Station"),
3627         bf_boolean16(0x0020, "user_info_temp_authen", "Temporary Authenticated"),
3628         bf_boolean16(0x0040, "user_info_audit_conn", "Audit Connection Recorded"),
3629         bf_boolean16(0x0080, "user_info_dsaudit_conn", "DS Audit Connection Recorded"),
3630         bf_boolean16(0x0100, "user_info_logout", "Logout in Progress"),
3631         bf_boolean16(0x0200, "user_info_int_login", "Internal Login"),
3632         bf_boolean16(0x0400, "user_info_bindery", "Bindery Connection"),
3633 ])
3634 StatusFlagBits                  = bitfield32("status_flag_bits", "Status Flag", [
3635         bf_boolean32(0x00000001, "status_flag_bits_suballoc", "Sub Allocation"),
3636         bf_boolean32(0x00000002, "status_flag_bits_comp", "Compression"),
3637         bf_boolean32(0x00000004, "status_flag_bits_migrate", "Migration"),
3638         bf_boolean32(0x00000008, "status_flag_bits_audit", "Audit"),
3639         bf_boolean32(0x00000010, "status_flag_bits_ro", "Read Only"),
3640         bf_boolean32(0x00000020, "status_flag_bits_im_purge", "Immediate Purge"),
3641         bf_boolean32(0x80000000, "status_flag_bits_nss", "NSS Volume"),
3642 ])
3643 SubAllocClusters                = uint32("sub_alloc_clusters", "Sub Alloc Clusters")
3644 SubAllocFreeableClusters        = uint32("sub_alloc_freeable_clusters", "Sub Alloc Freeable Clusters")
3645 Subdirectory                    = uint32("sub_directory", "Subdirectory")
3646 Subdirectory.Display("BASE_HEX")
3647 SuggestedFileSize               = uint32("suggested_file_size", "Suggested File Size")
3648 SupportModuleID                 = uint32("support_module_id", "Support Module ID")
3649 SynchName                       = nstring8("synch_name", "Synch Name")
3650 SystemIntervalMarker            = uint32("system_interval_marker", "System Interval Marker")
3651
3652 TabSize                         = uint8( "tab_size", "Tab Size" )
3653 TargetClientList                = uint8("target_client_list", "Target Client List")
3654 TargetConnectionNumber          = uint16("target_connection_number", "Target Connection Number")
3655 TargetDirectoryBase             = uint32("target_directory_base", "Target Directory Base")
3656 TargetDirHandle                 = uint8("target_dir_handle", "Target Directory Handle")
3657 TargetEntryID                   = uint32("target_entry_id", "Target Entry ID")
3658 TargetEntryID.Display("BASE_HEX")
3659 TargetExecutionTime             = bytes("target_execution_time", "Target Execution Time", 6)
3660 TargetFileHandle                = bytes("target_file_handle", "Target File Handle", 6)
3661 TargetFileOffset                = uint32("target_file_offset", "Target File Offset")
3662 TargetMessage                   = nstring8("target_message", "Message")
3663 TargetPrinter                   = uint8( "target_ptr", "Target Printer" )
3664 targetReceiveTime               = bytes("target_receive_time", "Target Receive Time", 8)
3665 targetReceiveTime.Display("BASE_HEX")
3666 TargetServerIDNumber            = uint32("target_server_id_number", "Target Server ID Number", BE )
3667 TargetServerIDNumber.Display("BASE_HEX")
3668 targetTransmitTime              = bytes("target_transmit_time", "Target Transmit Time", 8)
3669 targetTransmitTime.Display("BASE_HEX")
3670 TaskNumByte                     = uint8("task_num_byte", "Task Number")
3671 TaskNumber                      = uint32("task_number", "Task Number")
3672 TaskNumberWord                  = uint16("task_number_word", "Task Number")
3673 TextJobDescription              = fw_string("text_job_description", "Text Job Description", 50)
3674 ThrashingCount                  = uint16("thrashing_count", "Thrashing Count")
3675 TimeoutLimit                    = uint16("timeout_limit", "Timeout Limit")
3676 TimesyncStatus                  = bitfield32("timesync_status_flags", "Timesync Status", [
3677         bf_boolean32(0x00000001, "timesync_status_sync", "Time is Synchronized"),
3678         bf_boolean32(0x00000002, "timesync_status_net_sync", "Time is Synchronized to the Network"), 
3679         bf_boolean32(0x00000004, "timesync_status_active", "Time Synchronization is Active"),
3680         bf_boolean32(0x00000008, "timesync_status_external", "External Time Synchronization Active"),
3681         bf_val_str32(0x00000700, "timesync_status_server_type", "Time Server Type", [
3682                 [ 0x01, "Client Time Server" ],
3683                 [ 0x02, "Secondary Time Server" ],
3684                 [ 0x03, "Primary Time Server" ],
3685                 [ 0x04, "Reference Time Server" ],
3686                 [ 0x05, "Single Reference Time Server" ],
3687         ]),
3688         bf_boolean32(0x000f0000, "timesync_status_ext_sync", "External Clock Status"),
3689 ])        
3690 TimeToNet                       = uint16("time_to_net", "Time To Net")
3691 TotalBlocks                     = uint32("total_blocks", "Total Blocks")        
3692 TotalBlocksToDecompress         = uint32("total_blks_to_dcompress", "Total Blocks To Decompress")
3693 TotalBytesRead                  = bytes("user_info_ttl_bytes_rd", "Total Bytes Read", 6)
3694 TotalBytesWritten               = bytes("user_info_ttl_bytes_wrt", "Total Bytes Written", 6)
3695 TotalCacheWrites                = uint32("total_cache_writes", "Total Cache Writes")
3696 TotalChangedFATs                = uint32("total_changed_fats", "Total Changed FAT Entries")
3697 TotalCommonCnts                 = uint32("total_common_cnts", "Total Common Counts")
3698 TotalCntBlocks                  = uint32("total_cnt_blocks", "Total Count Blocks")
3699 TotalDataStreamDiskSpaceAlloc   = uint32("total_stream_size_struct_space_alloc", "Total Data Stream Disk Space Alloc")
3700 TotalDirectorySlots             = uint16("total_directory_slots", "Total Directory Slots")
3701 TotalDirectoryEntries           = uint32("total_dir_entries", "Total Directory Entries")
3702 TotalDynamicSpace               = uint32("total_dynamic_space", "Total Dynamic Space")
3703 TotalExtendedDirectoryExtants   = uint32("total_extended_directory_extants", "Total Extended Directory Extants")
3704 TotalFileServicePackets         = uint32("total_file_service_packets", "Total File Service Packets")
3705 TotalFilesOpened                = uint32("total_files_opened", "Total Files Opened")
3706 TotalLFSCounters                = uint32("total_lfs_counters", "Total LFS Counters")
3707 TotalOffspring                  = uint16("total_offspring", "Total Offspring")
3708 TotalOtherPackets               = uint32("total_other_packets", "Total Other Packets")
3709 TotalQueueJobs                  = uint32("total_queue_jobs", "Total Queue Jobs")
3710 TotalReadRequests               = uint32("total_read_requests", "Total Read Requests")
3711 TotalRequest                    = uint32("total_request", "Total Requests")
3712 TotalRequestPackets             = uint32("total_request_packets", "Total Request Packets")
3713 TotalRoutedPackets              = uint32("total_routed_packets", "Total Routed Packets")
3714 TotalRxPkts                     = uint32("total_rx_pkts", "Total Receive Packets")
3715 TotalServerMemory               = uint16("total_server_memory", "Total Server Memory", BE)
3716 TotalTransactionsBackedOut      = uint32("total_trans_backed_out", "Total Transactions Backed Out")
3717 TotalTransactionsPerformed      = uint32("total_trans_performed", "Total Transactions Performed")
3718 TotalTxPkts                     = uint32("total_tx_pkts", "Total Transmit Packets")
3719 TotalUnfilledBackoutRequests    = uint16("total_unfilled_backout_requests", "Total Unfilled Backout Requests")
3720 TotalVolumeClusters             = uint16("total_volume_clusters", "Total Volume Clusters")
3721 TotalWriteRequests              = uint32("total_write_requests", "Total Write Requests")
3722 TotalWriteTransactionsPerformed = uint32("total_write_trans_performed", "Total Write Transactions Performed")
3723 TrackOnFlag                     = boolean8("track_on_flag", "Track On Flag")
3724 TransactionDiskSpace            = uint16("transaction_disk_space", "Transaction Disk Space")
3725 TransactionFATAllocations       = uint32("transaction_fat_allocations", "Transaction FAT Allocations")
3726 TransactionFileSizeChanges      = uint32("transaction_file_size_changes", "Transaction File Size Changes")
3727 TransactionFilesTruncated       = uint32("transaction_files_truncated", "Transaction Files Truncated")
3728 TransactionNumber               = uint32("transaction_number", "Transaction Number")
3729 TransactionTrackingEnabled      = uint8("transaction_tracking_enabled", "Transaction Tracking Enabled")
3730 TransactionTrackingFlag         = uint16("tts_flag", "Transaction Tracking Flag")
3731 TransactionTrackingSupported    = uint8("transaction_tracking_supported", "Transaction Tracking Supported")
3732 TransactionVolumeNumber         = uint16("transaction_volume_number", "Transaction Volume Number")
3733 TransportType                   = val_string8("transport_type", "Communications Type", [
3734         [ 0x01, "Internet Packet Exchange (IPX)" ],
3735         [ 0x05, "User Datagram Protocol (UDP)" ],
3736         [ 0x06, "Transmission Control Protocol (TCP)" ],
3737 ])
3738 TreeLength                      = uint32("tree_length", "Tree Length")
3739 TreeName                        = nstring32("tree_name", "Tree Name")
3740 TreeName.NWUnicode()
3741 TrusteeRights                   = bitfield16("trustee_rights_low", "Trustee Rights", [
3742         bf_boolean16(0x0001, "trustee_rights_read", "Read"),
3743         bf_boolean16(0x0002, "trustee_rights_write", "Write"),
3744         bf_boolean16(0x0004, "trustee_rights_open", "Open"),
3745         bf_boolean16(0x0008, "trustee_rights_create", "Create"),
3746         bf_boolean16(0x0010, "trustee_rights_del", "Delete"),
3747         bf_boolean16(0x0020, "trustee_rights_parent", "Parental"),
3748         bf_boolean16(0x0040, "trustee_rights_search", "Search"),
3749         bf_boolean16(0x0080, "trustee_rights_modify", "Modify"),
3750         bf_boolean16(0x0100, "trustee_rights_super", "Supervisor"),
3751 ])
3752 TTSLevel                        = uint8("tts_level", "TTS Level")
3753 TrusteeSetNumber                = uint8("trustee_set_number", "Trustee Set Number")
3754 TrusteeID                       = uint32("trustee_id_set", "Trustee ID")
3755 TrusteeID.Display("BASE_HEX")
3756 ttlCompBlks                     = uint32("ttl_comp_blks", "Total Compression Blocks")
3757 TtlDSDskSpaceAlloc              = uint32("ttl_ds_disk_space_alloc", "Total Streams Space Allocated")
3758 TtlEAs                          = uint32("ttl_eas", "Total EA's")
3759 TtlEAsDataSize                  = uint32("ttl_eas_data_size", "Total EA's Data Size")
3760 TtlEAsKeySize                   = uint32("ttl_eas_key_size", "Total EA's Key Size")
3761 ttlIntermediateBlks             = uint32("ttl_inter_blks", "Total Intermediate Blocks")
3762 TtlMigratedSize                 = uint32("ttl_migrated_size", "Total Migrated Size")
3763 TtlNumOfRTags                   = uint32("ttl_num_of_r_tags", "Total Number of Resource Tags")
3764 TtlNumOfSetCmds                 = uint32("ttl_num_of_set_cmds", "Total Number of Set Commands")
3765 TtlValuesLength                 = uint32("ttl_values_length", "Total Values Length")
3766 TtlWriteDataSize                = uint32("ttl_write_data_size", "Total Write Data Size")
3767 TurboUsedForFileService         = uint16("turbo_used_for_file_service", "Turbo Used For File Service")
3768
3769 UnclaimedPkts                   = uint32("un_claimed_packets", "Unclaimed Packets")
3770 UnCompressableDataStreamsCount  = uint32("un_compressable_data_streams_count", "Uncompressable Data Streams Count")
3771 Undefined8                      = bytes("undefined_8", "Undefined", 8)
3772 Undefined28                     = bytes("undefined_28", "Undefined", 28)
3773 UndefinedWord                   = uint16("undefined_word", "Undefined")
3774 UniqueID                        = uint8("unique_id", "Unique ID")
3775 UnknownByte                     = uint8("unknown_byte", "Unknown Byte")
3776 Unused                          = uint8("un_used", "Unused")
3777 UnusedBlocks                    = uint32("unused_blocks", "Unused Blocks")
3778 UnUsedDirectoryEntries          = uint32("un_used_directory_entries", "Unused Directory Entries")
3779 UnusedDiskBlocks                = uint32("unused_disk_blocks", "Unused Disk Blocks")
3780 UnUsedExtendedDirectoryExtants  = uint32("un_used_extended_directory_extants", "Unused Extended Directory Extants")
3781 UpdateDate                      = uint16("update_date", "Update Date")
3782 UpdateDate.NWDate()
3783 UpdateID                        = uint32("update_id", "Update ID", BE)
3784 UpdateID.Display("BASE_HEX")
3785 UpdateTime                      = uint16("update_time", "Update Time")
3786 UpdateTime.NWTime()
3787 UseCount                        = val_string16("user_info_use_count", "Use Count", [
3788         [ 0x0000, "Connection is not in use" ],
3789         [ 0x0001, "Connection is in use" ],
3790 ])
3791 UsedBlocks                      = uint32("used_blocks", "Used Blocks")
3792 UserID                          = uint32("user_id", "User ID", BE)
3793 UserID.Display("BASE_HEX")
3794 UserLoginAllowed                = val_string8("user_login_allowed", "Login Status", [
3795         [ 0x00, "Client Login Disabled" ],
3796         [ 0x01, "Client Login Enabled" ],
3797 ])
3798
3799 UserName                        = nstring8("user_name", "User Name")
3800 UserName16                      = fw_string("user_name_16", "User Name", 16)
3801 UserName48                      = fw_string("user_name_48", "User Name", 48)
3802 UserType                        = uint16("user_type", "User Type")
3803 UTCTimeInSeconds                = uint32("uts_time_in_seconds", "UTC Time in Seconds")
3804
3805 ValueAvailable                  = val_string8("value_available", "Value Available", [
3806         [ 0x00, "Has No Value" ],
3807         [ 0xff, "Has Value" ],
3808 ])
3809 VAPVersion                      = uint8("vap_version", "VAP Version")
3810 VariableBitMask                 = uint32("variable_bit_mask", "Variable Bit Mask")
3811 VariableBitsDefined             = uint16("variable_bits_defined", "Variable Bits Defined")
3812 VConsoleRevision                = uint8("vconsole_rev", "Console Revision")
3813 VConsoleVersion                 = uint8("vconsole_ver", "Console Version")
3814 Verb                            = uint32("verb", "Verb")
3815 VerbData                        = uint8("verb_data", "Verb Data")
3816 version                         = uint32("version", "Version")
3817 VersionNumber                   = uint8("version_number", "Version")
3818 VertLocation                    = uint16("vert_location", "Vertical Location")
3819 VirtualConsoleVersion           = uint8("virtual_console_version", "Virtual Console Version")
3820 VolumeID                        = uint32("volume_id", "Volume ID")
3821 VolumeID.Display("BASE_HEX")
3822 VolInfoReplyLen                 = uint16("vol_info_reply_len", "Volume Information Reply Length")
3823 VolumeCachedFlag                = val_string8("volume_cached_flag", "Volume Cached Flag", [
3824         [ 0x00, "Volume is Not Cached" ],
3825         [ 0xff, "Volume is Cached" ],
3826 ])      
3827 VolumeHashedFlag                = val_string8("volume_hashed_flag", "Volume Hashed Flag", [
3828         [ 0x00, "Volume is Not Hashed" ],
3829         [ 0xff, "Volume is Hashed" ],
3830 ])      
3831 VolumeLastModifiedDate          = uint16("volume_last_modified_date", "Volume Last Modified Date")
3832 VolumeLastModifiedDate.NWDate()
3833 VolumeLastModifiedTime          = uint16("volume_last_modified_time", "Volume Last Modified Time") 
3834 VolumeLastModifiedTime.NWTime()
3835 VolumeMountedFlag               = val_string8("volume_mounted_flag", "Volume Mounted Flag", [
3836         [ 0x00, "Volume is Not Mounted" ],
3837         [ 0xff, "Volume is Mounted" ],
3838 ])
3839 VolumeName                      = fw_string("volume_name", "Volume Name", 16)
3840 VolumeNameLen                   = nstring8("volume_name_len", "Volume Name")
3841 VolumeNameStringz               = stringz("volume_name_stringz", "Volume Name")
3842 VolumeNumber                    = uint8("volume_number", "Volume Number")
3843 VolumeNumberLong                = uint32("volume_number_long", "Volume Number")
3844 VolumeRemovableFlag             = val_string8("volume_removable_flag", "Volume Removable Flag", [
3845         [ 0x00, "Disk Cannot be Removed from Server" ],
3846         [ 0xff, "Disk Can be Removed from Server" ],
3847 ])
3848 VolumeRequestFlags              = val_string16("volume_request_flags", "Volume Request Flags", [
3849         [ 0x0000, "Return name with volume number" ],
3850         [ 0x0001, "Do not return name with volume number" ],
3851 ])
3852 VolumeSizeInClusters            = uint32("volume_size_in_clusters", "Volume Size in Clusters")
3853 VolumesSupportedMax             = uint16("volumes_supported_max", "Volumes Supported Max")
3854 VolumeType                      = val_string16("volume_type", "Volume Type", [
3855         [ 0x0000, "NetWare 386" ],
3856         [ 0x0001, "NetWare 286" ],
3857         [ 0x0002, "NetWare 386 Version 30" ],
3858         [ 0x0003, "NetWare 386 Version 31" ],
3859 ])
3860 WastedServerMemory              = uint16("wasted_server_memory", "Wasted Server Memory", BE)
3861 WaitTime                        = uint32("wait_time", "Wait Time")
3862
3863 Year                            = val_string8("year", "Year",[
3864         [ 0x50, "1980" ],
3865         [ 0x51, "1981" ],
3866         [ 0x52, "1982" ],
3867         [ 0x53, "1983" ],
3868         [ 0x54, "1984" ],
3869         [ 0x55, "1985" ],
3870         [ 0x56, "1986" ],
3871         [ 0x57, "1987" ],
3872         [ 0x58, "1988" ],
3873         [ 0x59, "1989" ],
3874         [ 0x5a, "1990" ],
3875         [ 0x5b, "1991" ],
3876         [ 0x5c, "1992" ],
3877         [ 0x5d, "1993" ],
3878         [ 0x5e, "1994" ],
3879         [ 0x5f, "1995" ],
3880         [ 0x60, "1996" ],
3881         [ 0x61, "1997" ],
3882         [ 0x62, "1998" ],
3883         [ 0x63, "1999" ],
3884         [ 0x64, "2000" ],
3885         [ 0x65, "2001" ],
3886         [ 0x66, "2002" ],
3887         [ 0x67, "2003" ],
3888         [ 0x68, "2004" ],
3889         [ 0x69, "2005" ],
3890         [ 0x6a, "2006" ],
3891         [ 0x6b, "2007" ],
3892         [ 0x6c, "2008" ],
3893         [ 0x6d, "2009" ],
3894         [ 0x6e, "2010" ],
3895         [ 0x6f, "2011" ],
3896         [ 0x70, "2012" ],
3897         [ 0x71, "2013" ],
3898         [ 0x72, "2014" ],
3899         [ 0x73, "2015" ],
3900         [ 0x74, "2016" ],
3901         [ 0x75, "2017" ],
3902         [ 0x76, "2018" ],
3903         [ 0x77, "2019" ],
3904         [ 0x78, "2020" ],
3905         [ 0x79, "2021" ],
3906         [ 0x7a, "2022" ],
3907         [ 0x7b, "2023" ],
3908         [ 0x7c, "2024" ],
3909         [ 0x7d, "2025" ],
3910         [ 0x7e, "2026" ],
3911         [ 0x7f, "2027" ],
3912         [ 0xc0, "1984" ],
3913         [ 0xc1, "1985" ],
3914         [ 0xc2, "1986" ],
3915         [ 0xc3, "1987" ],
3916         [ 0xc4, "1988" ],
3917         [ 0xc5, "1989" ],
3918         [ 0xc6, "1990" ],
3919         [ 0xc7, "1991" ],
3920         [ 0xc8, "1992" ],
3921         [ 0xc9, "1993" ],
3922         [ 0xca, "1994" ],
3923         [ 0xcb, "1995" ],
3924         [ 0xcc, "1996" ],
3925         [ 0xcd, "1997" ],
3926         [ 0xce, "1998" ],
3927         [ 0xcf, "1999" ],
3928         [ 0xd0, "2000" ],
3929         [ 0xd1, "2001" ],
3930         [ 0xd2, "2002" ],
3931         [ 0xd3, "2003" ],
3932         [ 0xd4, "2004" ],
3933         [ 0xd5, "2005" ],
3934         [ 0xd6, "2006" ],
3935         [ 0xd7, "2007" ],
3936         [ 0xd8, "2008" ],
3937         [ 0xd9, "2009" ],
3938         [ 0xda, "2010" ],
3939         [ 0xdb, "2011" ],
3940         [ 0xdc, "2012" ],
3941         [ 0xdd, "2013" ],
3942         [ 0xde, "2014" ],
3943         [ 0xdf, "2015" ],
3944 ])
3945 ##############################################################################
3946 # Structs
3947 ##############################################################################
3948                 
3949                 
3950 acctngInfo                      = struct("acctng_info_struct", [
3951         HoldTime,
3952         HoldAmount,
3953         ChargeAmount,
3954         HeldConnectTimeInMinutes,
3955         HeldRequests,
3956         HeldBytesRead,
3957         HeldBytesWritten,
3958 ],"Accounting Information")
3959 AFP10Struct                       = struct("afp_10_struct", [
3960         AFPEntryID,
3961         ParentID,
3962         AttributesDef16,
3963         DataForkLen,
3964         ResourceForkLen,
3965         TotalOffspring,
3966         CreationDate,
3967         LastAccessedDate,
3968         ModifiedDate,
3969         ModifiedTime,
3970         ArchivedDate,
3971         ArchivedTime,
3972         CreatorID,
3973         Reserved4,
3974         FinderAttr,
3975         HorizLocation,
3976         VertLocation,
3977         FileDirWindow,
3978         Reserved16,
3979         LongName,
3980         CreatorID,
3981         ShortName,
3982         AccessPrivileges,
3983 ], "AFP Information" )                
3984 AFP20Struct                       = struct("afp_20_struct", [
3985         AFPEntryID,
3986         ParentID,
3987         AttributesDef16,
3988         DataForkLen,
3989         ResourceForkLen,
3990         TotalOffspring,
3991         CreationDate,
3992         LastAccessedDate,
3993         ModifiedDate,
3994         ModifiedTime,
3995         ArchivedDate,
3996         ArchivedTime,
3997         CreatorID,
3998         Reserved4,
3999         FinderAttr,
4000         HorizLocation,
4001         VertLocation,
4002         FileDirWindow,
4003         Reserved16,
4004         LongName,
4005         CreatorID,
4006         ShortName,
4007         AccessPrivileges,
4008         Reserved,
4009         ProDOSInfo,
4010 ], "AFP Information" )                
4011 ArchiveDateStruct               = struct("archive_date_struct", [
4012         ArchivedDate,
4013 ])                
4014 ArchiveIdStruct                 = struct("archive_id_struct", [
4015         ArchiverID,
4016 ])                
4017 ArchiveInfoStruct               = struct("archive_info_struct", [
4018         ArchivedTime,
4019         ArchivedDate,
4020         ArchiverID,
4021 ], "Archive Information")
4022 ArchiveTimeStruct               = struct("archive_time_struct", [
4023         ArchivedTime,
4024 ])                
4025 AttributesStruct                = struct("attributes_struct", [
4026         AttributesDef32,
4027         FlagsDef,
4028 ], "Attributes")
4029 authInfo                        = struct("auth_info_struct", [
4030         Status,
4031         Reserved2,
4032         Privileges,
4033 ])
4034 BoardNameStruct                 = struct("board_name_struct", [
4035         DriverBoardName,
4036         DriverShortName,
4037         DriverLogicalName,
4038 ], "Board Name")        
4039 CacheInfo                       = struct("cache_info", [
4040         uint32("max_byte_cnt", "Maximum Byte Count"),
4041         uint32("min_num_of_cache_buff", "Minimum Number Of Cache Buffers"),
4042         uint32("min_cache_report_thresh", "Minimum Cache Report Threshold"),
4043         uint32("alloc_waiting", "Allocate Waiting Count"),
4044         uint32("ndirty_blocks", "Number of Dirty Blocks"),
4045         uint32("cache_dirty_wait_time", "Cache Dirty Wait Time"),
4046         uint32("cache_max_concur_writes", "Cache Maximum Concurrent Writes"),
4047         uint32("max_dirty_time", "Maximum Dirty Time"),
4048         uint32("num_dir_cache_buff", "Number Of Directory Cache Buffers"),
4049         uint32("cache_byte_to_block", "Cache Byte To Block Shift Factor"),
4050 ], "Cache Information")
4051 CommonLanStruc                  = struct("common_lan_struct", [
4052         boolean8("not_supported_mask", "Bit Counter Supported"),
4053         Reserved3,
4054         uint32("total_tx_packet_count", "Total Transmit Packet Count"),
4055         uint32("total_rx_packet_count", "Total Receive Packet Count"),
4056         uint32("no_ecb_available_count", "No ECB Available Count"),
4057         uint32("packet_tx_too_big_count", "Transmit Packet Too Big Count"),
4058         uint32("packet_tx_too_small_count", "Transmit Packet Too Small Count"),
4059         uint32("packet_rx_overflow_count", "Receive Packet Overflow Count"),
4060         uint32("packet_rx_too_big_count", "Receive Packet Too Big Count"),
4061         uint32("packet_rs_too_small_count", "Receive Packet Too Small Count"),
4062         uint32("packet_tx_misc_error_count", "Transmit Packet Misc Error Count"),
4063         uint32("packet_rx_misc_error_count", "Receive Packet Misc Error Count"),
4064         uint32("retry_tx_count", "Transmit Retry Count"),
4065         uint32("checksum_error_count", "Checksum Error Count"),
4066         uint32("hardware_rx_mismatch_count", "Hardware Receive Mismatch Count"),
4067 ], "Common LAN Information")
4068 CompDeCompStat                  = struct("comp_d_comp_stat", [ 
4069         uint32("cmphitickhigh", "Compress High Tick"),        
4070         uint32("cmphitickcnt", "Compress High Tick Count"),        
4071         uint32("cmpbyteincount", "Compress Byte In Count"),        
4072         uint32("cmpbyteoutcnt", "Compress Byte Out Count"),        
4073         uint32("cmphibyteincnt", "Compress High Byte In Count"),        
4074         uint32("cmphibyteoutcnt", "Compress High Byte Out Count"),        
4075         uint32("decphitickhigh", "DeCompress High Tick"),        
4076         uint32("decphitickcnt", "DeCompress High Tick Count"),        
4077         uint32("decpbyteincount", "DeCompress Byte In Count"),        
4078         uint32("decpbyteoutcnt", "DeCompress Byte Out Count"),        
4079         uint32("decphibyteincnt", "DeCompress High Byte In Count"),        
4080         uint32("decphibyteoutcnt", "DeCompress High Byte Out Count"),
4081 ], "Compression/Decompression Information")                
4082 ConnFileStruct                  = struct("conn_file_struct", [
4083         ConnectionNumberWord,
4084         TaskNumByte,
4085         LockType,
4086         AccessControl,
4087         LockFlag,
4088 ], "File Connection Information")
4089 ConnStruct                      = struct("conn_struct", [
4090         TaskNumByte,
4091         LockType,
4092         AccessControl,
4093         LockFlag,
4094         VolumeNumber,
4095         DirectoryEntryNumberWord,
4096         FileName14,
4097 ], "Connection Information")
4098 ConnTaskStruct                  = struct("conn_task_struct", [
4099         ConnectionNumberByte,
4100         TaskNumByte,
4101 ], "Task Information")
4102 Counters                        = struct("counters_struct", [
4103         uint32("read_exist_blck", "Read Existing Block Count"),
4104         uint32("read_exist_write_wait", "Read Existing Write Wait Count"),
4105         uint32("read_exist_part_read", "Read Existing Partial Read Count"),
4106         uint32("read_exist_read_err", "Read Existing Read Error Count"),
4107         uint32("wrt_blck_cnt", "Write Block Count"),
4108         uint32("wrt_entire_blck", "Write Entire Block Count"),
4109         uint32("internl_dsk_get", "Internal Disk Get Count"),
4110         uint32("internl_dsk_get_need_to_alloc", "Internal Disk Get Need To Allocate Count"),
4111         uint32("internl_dsk_get_someone_beat", "Internal Disk Get Someone Beat My Count"),
4112         uint32("internl_dsk_get_part_read", "Internal Disk Get Partial Read Count"),
4113         uint32("internl_dsk_get_read_err", "Internal Disk Get Read Error Count"),
4114         uint32("async_internl_dsk_get", "Async Internal Disk Get Count"),
4115         uint32("async_internl_dsk_get_need_to_alloc", "Async Internal Disk Get Need To Alloc"),
4116         uint32("async_internl_dsk_get_someone_beat", "Async Internal Disk Get Someone Beat Me"),
4117         uint32("err_doing_async_read", "Error Doing Async Read Count"),
4118         uint32("internl_dsk_get_no_read", "Internal Disk Get No Read Count"),
4119         uint32("internl_dsk_get_no_read_alloc", "Internal Disk Get No Read Allocate Count"),
4120         uint32("internl_dsk_get_no_read_someone_beat", "Internal Disk Get No Read Someone Beat Me Count"),
4121         uint32("internl_dsk_write", "Internal Disk Write Count"),
4122         uint32("internl_dsk_write_alloc", "Internal Disk Write Allocate Count"),
4123         uint32("internl_dsk_write_someone_beat", "Internal Disk Write Someone Beat Me Count"),
4124         uint32("write_err", "Write Error Count"),
4125         uint32("wait_on_sema", "Wait On Semaphore Count"),
4126         uint32("alloc_blck_i_had_to_wait_for", "Allocate Block I Had To Wait For Someone Count"),
4127         uint32("alloc_blck", "Allocate Block Count"),
4128         uint32("alloc_blck_i_had_to_wait", "Allocate Block I Had To Wait Count"),
4129 ], "Disk Counter Information")
4130 CPUInformation                  = struct("cpu_information", [
4131         PageTableOwnerFlag,
4132         CPUType,
4133         Reserved3,
4134         CoprocessorFlag,
4135         BusType,
4136         Reserved3,
4137         IOEngineFlag,
4138         Reserved3,
4139         FSEngineFlag,
4140         Reserved3, 
4141         NonDedFlag,
4142         Reserved3,
4143         CPUString,
4144         CoProcessorString,
4145         BusString,
4146 ], "CPU Information")
4147 CreationDateStruct              = struct("creation_date_struct", [
4148         CreationDate,
4149 ])                
4150 CreationInfoStruct              = struct("creation_info_struct", [
4151         CreationTime,
4152         CreationDate,
4153         CreatorID,
4154 ], "Creation Information")
4155 CreationTimeStruct              = struct("creation_time_struct", [
4156         CreationTime,
4157 ])
4158 CustomCntsInfo                  = struct("custom_cnts_info", [
4159         CustomVariableValue,
4160         CustomString,
4161 ], "Custom Counters" )        
4162 DataStreamSizeStruct            = struct("data_stream_size_struct", [
4163         DataStreamSize,
4164 ])
4165 DirCacheInfo                    = struct("dir_cache_info", [
4166         uint32("min_time_since_file_delete", "Minimum Time Since File Delete"),
4167         uint32("abs_min_time_since_file_delete", "Absolute Minimum Time Since File Delete"),
4168         uint32("min_num_of_dir_cache_buff", "Minimum Number Of Directory Cache Buffers"),
4169         uint32("max_num_of_dir_cache_buff", "Maximum Number Of Directory Cache Buffers"),
4170         uint32("num_of_dir_cache_buff", "Number Of Directory Cache Buffers"),
4171         uint32("dc_min_non_ref_time", "DC Minimum Non-Referenced Time"),
4172         uint32("dc_wait_time_before_new_buff", "DC Wait Time Before New Buffer"),
4173         uint32("dc_max_concurrent_writes", "DC Maximum Concurrent Writes"),
4174         uint32("dc_dirty_wait_time", "DC Dirty Wait Time"),
4175         uint32("dc_double_read_flag", "DC Double Read Flag"),
4176         uint32("map_hash_node_count", "Map Hash Node Count"),
4177         uint32("space_restriction_node_count", "Space Restriction Node Count"),
4178         uint32("trustee_list_node_count", "Trustee List Node Count"),
4179         uint32("percent_of_vol_used_by_dirs", "Percent Of Volume Used By Directories"),
4180 ], "Directory Cache Information")
4181 DirEntryStruct                  = struct("dir_entry_struct", [
4182         DirectoryEntryNumber,
4183         DOSDirectoryEntryNumber,
4184         VolumeNumberLong,
4185 ], "Directory Entry Information")
4186 #
4187 # XXX - CreationDate and CreationTime here appear to be big-endian,
4188 # but there's no way to say that *this* instance of a field is
4189 # big-endian but *other* instances are little-endian.
4190 #
4191 DirectoryInstance               = struct("directory_instance", [
4192         SearchSequenceWord,
4193         DirectoryID,
4194         DirectoryName14,
4195         DirectoryAttributes,
4196         DirectoryAccessRights,
4197         CreationDate,
4198         CreationTime,
4199         CreatorID,
4200         Reserved2,
4201         DirectoryStamp,
4202 ], "Directory Information")
4203 DMInfoLevel0                    = struct("dm_info_level_0", [
4204         uint32("io_flag", "IO Flag"),
4205         uint32("sm_info_size", "Storage Module Information Size"),
4206         uint32("avail_space", "Available Space"),
4207         uint32("used_space", "Used Space"),
4208         stringz("s_module_name", "Storage Module Name"),
4209         uint8("s_m_info", "Storage Media Information"),
4210 ])
4211 DMInfoLevel1                    = struct("dm_info_level_1", [
4212         NumberOfSMs,
4213         SMIDs,
4214 ])
4215 DMInfoLevel2                    = struct("dm_info_level_2", [
4216         Name,
4217 ])
4218 DOSDirectoryEntryStruct         = struct("dos_directory_entry_struct", [
4219         AttributesDef32,
4220         UniqueID,
4221         PurgeFlags,
4222         DestNameSpace,
4223         DirectoryNameLen,
4224         DirectoryName,
4225         CreationTime,
4226         CreationDate,
4227         CreatorID,
4228         ArchivedTime,
4229         ArchivedDate,
4230         ArchiverID,
4231         UpdateTime,
4232         UpdateDate,
4233         NextTrusteeEntry,
4234         Reserved48,
4235         InheritedRightsMask,
4236 ], "DOS Directory Information")
4237 DOSFileEntryStruct              = struct("dos_file_entry_struct", [
4238         AttributesDef32,
4239         UniqueID,
4240         PurgeFlags,
4241         DestNameSpace,
4242         NameLen,
4243         Name12,
4244         CreationTime,
4245         CreationDate,
4246         CreatorID,
4247         ArchivedTime,
4248         ArchivedDate,
4249         ArchiverID,
4250         UpdateTime,
4251         UpdateDate,
4252         UpdateID,
4253         FileSize,
4254         DataForkFirstFAT,
4255         NextTrusteeEntry,
4256         Reserved36,
4257         InheritedRightsMask,
4258         LastAccessedDate,
4259         Reserved28,
4260         PrimaryEntry,
4261         NameList,
4262 ], "DOS File Information")
4263 DSSpaceAllocateStruct           = struct("ds_space_alloc_struct", [
4264         DataStreamSpaceAlloc,
4265 ])
4266 DynMemStruct                    = struct("dyn_mem_struct", [
4267         uint32("dyn_mem_struct_total", "Total Dynamic Space" ),
4268         uint32("dyn_mem_struct_max", "Max Used Dynamic Space" ),
4269         uint32("dyn_mem_struct_cur", "Current Used Dynamic Space" ),
4270 ], "Dynamic Memory Information")
4271 EAInfoStruct                    = struct("ea_info_struct", [
4272         EADataSize,
4273         EACount,
4274         EAKeySize,
4275 ], "Extended Attribute Information")
4276 ExtraCacheCntrs                 = struct("extra_cache_cntrs", [
4277         uint32("internl_dsk_get_no_wait", "Internal Disk Get No Wait Count"),
4278         uint32("internl_dsk_get_no_wait_need", "Internal Disk Get No Wait Need To Allocate Count"),
4279         uint32("internl_dsk_get_no_wait_no_blk", "Internal Disk Get No Wait No Block Count"),
4280         uint32("id_get_no_read_no_wait", "ID Get No Read No Wait Count"),
4281         uint32("id_get_no_read_no_wait_sema", "ID Get No Read No Wait Semaphored Count"),
4282         uint32("id_get_no_read_no_wait_buffer", "ID Get No Read No Wait No Buffer Count"),
4283         uint32("id_get_no_read_no_wait_alloc", "ID Get No Read No Wait Allocate Count"),
4284         uint32("id_get_no_read_no_wait_no_alloc", "ID Get No Read No Wait No Alloc Count"),
4285         uint32("id_get_no_read_no_wait_no_alloc_sema", "ID Get No Read No Wait No Alloc Semaphored Count"),
4286         uint32("id_get_no_read_no_wait_no_alloc_alloc", "ID Get No Read No Wait No Alloc Allocate Count"),
4287 ], "Extra Cache Counters Information")
4288
4289
4290 ReferenceIDStruct               = struct("ref_id_struct", [
4291         CurrentReferenceID,
4292 ])
4293 NSAttributeStruct               = struct("ns_attrib_struct", [
4294         AttributesDef32,
4295 ])
4296 DStreamActual                   = struct("d_stream_actual", [
4297         Reserved12,
4298         # Need to look into how to format this correctly
4299 ])
4300 DStreamLogical                  = struct("d_string_logical", [
4301         Reserved12,
4302         # Need to look into how to format this correctly
4303 ])
4304 LastUpdatedInSecondsStruct      = struct("last_update_in_seconds_struct", [
4305         SecondsRelativeToTheYear2000,
4306 ]) 
4307 DOSNameStruct                   = struct("dos_name_struct", [
4308         FileName,
4309 ], "DOS File Name") 
4310 FlushTimeStruct                 = struct("flush_time_struct", [
4311         FlushTime,
4312 ]) 
4313 ParentBaseIDStruct              = struct("parent_base_id_struct", [
4314         ParentBaseID,
4315 ]) 
4316 MacFinderInfoStruct             = struct("mac_finder_info_struct", [
4317         MacFinderInfo,
4318 ]) 
4319 SiblingCountStruct              = struct("sibling_count_struct", [
4320         SiblingCount,
4321 ]) 
4322 EffectiveRightsStruct           = struct("eff_rights_struct", [
4323         EffectiveRights,
4324         Reserved3,     
4325 ]) 
4326 MacTimeStruct                   = struct("mac_time_struct", [
4327         MACCreateDate,
4328         MACCreateTime,
4329         MACBackupDate,
4330         MACBackupTime,
4331 ])
4332 LastAccessedTimeStruct          = struct("last_access_time_struct", [
4333         LastAccessedTime,      
4334 ])
4335
4336
4337
4338 FileAttributesStruct            = struct("file_attributes_struct", [
4339         AttributesDef32,
4340 ])
4341 FileInfoStruct                  = struct("file_info_struct", [
4342         ParentID,
4343         DirectoryEntryNumber,
4344         TotalBlocksToDecompress,
4345         CurrentBlockBeingDecompressed,
4346 ], "File Information")
4347 #
4348 # XXX - CreationDate, CreationTime, UpdateDate, and UpdateTime here
4349 # appear to be big-endian, but there's no way to say that *this*
4350 # instance of a field is big-endian but *other* instances are
4351 # little-endian.
4352 #
4353 FileInstance                    = struct("file_instance", [
4354         SearchSequenceWord,
4355         DirectoryID,
4356         FileName14,
4357         AttributesDef,
4358         FileMode,
4359         FileSize,
4360         CreationDate,
4361         CreationTime,
4362         UpdateDate,
4363         UpdateTime,
4364 ], "File Instance")
4365 FileNameStruct                  = struct("file_name_struct", [
4366         FileName,
4367 ], "File Name")       
4368 FileServerCounters              = struct("file_server_counters", [
4369         uint16("too_many_hops", "Too Many Hops"),
4370         uint16("unknown_network", "Unknown Network"),
4371         uint16("no_space_for_service", "No Space For Service"),
4372         uint16("no_receive_buff", "No Receive Buffers"),
4373         uint16("not_my_network", "Not My Network"),
4374         uint32("netbios_progated", "NetBIOS Propagated Count"),
4375         uint32("ttl_pckts_srvcd", "Total Packets Serviced"),
4376         uint32("ttl_pckts_routed", "Total Packets Routed"),
4377 ], "File Server Counters")
4378 FileSystemInfo                  = struct("file_system_info", [
4379         uint32("fat_moved", "Number of times the OS has move the location of FAT"),
4380         uint32("fat_write_err", "Number of write errors in both original and mirrored copies of FAT"),
4381         uint32("someone_else_did_it_0", "Someone Else Did It Count 0"),
4382         uint32("someone_else_did_it_1", "Someone Else Did It Count 1"),
4383         uint32("someone_else_did_it_2", "Someone Else Did It Count 2"),
4384         uint32("i_ran_out_someone_else_did_it_0", "I Ran Out Someone Else Did It Count 0"),
4385         uint32("i_ran_out_someone_else_did_it_1", "I Ran Out Someone Else Did It Count 1"),
4386         uint32("i_ran_out_someone_else_did_it_2", "I Ran Out Someone Else Did It Count 2"),
4387         uint32("turbo_fat_build_failed", "Turbo FAT Build Failed Count"),
4388         uint32("extra_use_count_node_count", "Errors allocating a use count node for TTS"),
4389         uint32("extra_extra_use_count_node_count", "Errors allocating an additional use count node for TTS"),
4390         uint32("error_read_last_fat", "Error Reading Last FAT Count"),
4391         uint32("someone_else_using_this_file", "Someone Else Using This File Count"),
4392 ], "File System Information")
4393 GenericInfoDef                  = struct("generic_info_def", [
4394         fw_string("generic_label", "Label", 64),
4395         uint32("generic_ident_type", "Identification Type"),
4396         uint32("generic_ident_time", "Identification Time"),
4397         uint32("generic_media_type", "Media Type"),
4398         uint32("generic_cartridge_type", "Cartridge Type"),
4399         uint32("generic_unit_size", "Unit Size"),
4400         uint32("generic_block_size", "Block Size"),
4401         uint32("generic_capacity", "Capacity"),
4402         uint32("generic_pref_unit_size", "Preferred Unit Size"),
4403         fw_string("generic_name", "Name",64),
4404         uint32("generic_type", "Type"),
4405         uint32("generic_status", "Status"),
4406         uint32("generic_func_mask", "Function Mask"),
4407         uint32("generic_ctl_mask", "Control Mask"),
4408         uint32("generic_parent_count", "Parent Count"),
4409         uint32("generic_sib_count", "Sibling Count"),
4410         uint32("generic_child_count", "Child Count"),
4411         uint32("generic_spec_info_sz", "Specific Information Size"),
4412         uint32("generic_object_uniq_id", "Unique Object ID"),
4413         uint32("generic_media_slot", "Media Slot"),
4414 ], "Generic Information")
4415 HandleInfoLevel0                = struct("handle_info_level_0", [
4416 #        DataStream,
4417 ])
4418 HandleInfoLevel1                = struct("handle_info_level_1", [
4419         DataStream,
4420 ])        
4421 HandleInfoLevel2                = struct("handle_info_level_2", [
4422         DOSDirectoryBase,
4423         NameSpace,
4424         DataStream,
4425 ])        
4426 HandleInfoLevel3                = struct("handle_info_level_3", [
4427         DOSDirectoryBase,
4428         NameSpace,
4429 ])        
4430 HandleInfoLevel4                = struct("handle_info_level_4", [
4431         DOSDirectoryBase,
4432         NameSpace,
4433         ParentDirectoryBase,
4434         ParentDOSDirectoryBase,
4435 ])        
4436 HandleInfoLevel5                = struct("handle_info_level_5", [
4437         DOSDirectoryBase,
4438         NameSpace,
4439         DataStream,
4440         ParentDirectoryBase,
4441         ParentDOSDirectoryBase,
4442 ])        
4443 IPXInformation                  = struct("ipx_information", [
4444         uint32("ipx_send_pkt", "IPX Send Packet Count"),
4445         uint16("ipx_malform_pkt", "IPX Malformed Packet Count"),
4446         uint32("ipx_get_ecb_req", "IPX Get ECB Request Count"),
4447         uint32("ipx_get_ecb_fail", "IPX Get ECB Fail Count"),
4448         uint32("ipx_aes_event", "IPX AES Event Count"),
4449         uint16("ipx_postponed_aes", "IPX Postponed AES Count"),
4450         uint16("ipx_max_conf_sock", "IPX Max Configured Socket Count"),
4451         uint16("ipx_max_open_sock", "IPX Max Open Socket Count"),
4452         uint16("ipx_open_sock_fail", "IPX Open Socket Fail Count"),
4453         uint32("ipx_listen_ecb", "IPX Listen ECB Count"),
4454         uint16("ipx_ecb_cancel_fail", "IPX ECB Cancel Fail Count"),
4455         uint16("ipx_get_lcl_targ_fail", "IPX Get Local Target Fail Count"),
4456 ], "IPX Information")
4457 JobEntryTime                    = struct("job_entry_time", [
4458         Year,
4459         Month,
4460         Day,
4461         Hour,
4462         Minute,
4463         Second,
4464 ], "Job Entry Time")
4465 JobStruct                       = struct("job_struct", [
4466         ClientStation,
4467         ClientTaskNumber,
4468         ClientIDNumber,
4469         TargetServerIDNumber,
4470         TargetExecutionTime,
4471         JobEntryTime,
4472         JobNumber,
4473         JobType,
4474         JobPosition,
4475         JobControlFlags,
4476         JobFileName,
4477         JobFileHandle,
4478         ServerStation,
4479         ServerTaskNumber,
4480         ServerID,
4481         TextJobDescription,
4482         ClientRecordArea,
4483 ], "Job Information")
4484 JobStructNew                    = struct("job_struct_new", [
4485         RecordInUseFlag,
4486         PreviousRecord,
4487         NextRecord,
4488         ClientStationLong,
4489         ClientTaskNumberLong,
4490         ClientIDNumber,
4491         TargetServerIDNumber,
4492         TargetExecutionTime,
4493         JobEntryTime,
4494         JobNumberLong,
4495         JobType,
4496         JobPositionWord,
4497         JobControlFlagsWord,
4498         JobFileName,
4499         JobFileHandleLong,
4500         ServerStationLong,
4501         ServerTaskNumberLong,
4502         ServerID,
4503 ], "Job Information")                
4504 KnownRoutes                     = struct("known_routes", [
4505         NetIDNumber,
4506         HopsToNet,
4507         NetStatus,
4508         TimeToNet,
4509 ], "Known Routes")
4510 KnownServStruc                  = struct("known_server_struct", [
4511         ServerAddress,
4512         HopsToNet,
4513         ServerNameStringz,
4514 ], "Known Servers")                
4515 LANConfigInfo                   = struct("lan_cfg_info", [
4516         LANdriverCFG_MajorVersion,
4517         LANdriverCFG_MinorVersion,
4518         LANdriverNodeAddress,
4519         Reserved,
4520         LANdriverModeFlags,
4521         LANdriverBoardNumber,
4522         LANdriverBoardInstance,
4523         LANdriverMaximumSize,
4524         LANdriverMaxRecvSize,
4525         LANdriverRecvSize,
4526         LANdriverCardID,
4527         LANdriverMediaID,
4528         LANdriverTransportTime,
4529         LANdriverSrcRouting,
4530         LANdriverLineSpeed,
4531         LANdriverReserved,
4532         LANdriverMajorVersion,
4533         LANdriverMinorVersion,
4534         LANdriverFlags,
4535         LANdriverSendRetries,
4536         LANdriverLink,
4537         LANdriverSharingFlags,
4538         LANdriverSlot,
4539         LANdriverIOPortsAndRanges1,
4540         LANdriverIOPortsAndRanges2,
4541         LANdriverIOPortsAndRanges3,
4542         LANdriverIOPortsAndRanges4,
4543         LANdriverMemoryDecode0,
4544         LANdriverMemoryLength0,
4545         LANdriverMemoryDecode1,
4546         LANdriverMemoryLength1,
4547         LANdriverInterrupt1,
4548         LANdriverInterrupt2,
4549         LANdriverDMAUsage1,
4550         LANdriverDMAUsage2,
4551         LANdriverLogicalName,
4552         LANdriverIOReserved,
4553         LANdriverCardName,
4554 ], "LAN Configuration Information")
4555 LastAccessStruct                = struct("last_access_struct", [
4556         LastAccessedDate,
4557 ])
4558 lockInfo                        = struct("lock_info_struct", [
4559         LogicalLockThreshold,
4560         PhysicalLockThreshold,
4561         FileLockCount,
4562         RecordLockCount,
4563 ], "Lock Information")
4564 LockStruct                      = struct("lock_struct", [
4565         TaskNumByte,
4566         LockType,
4567         RecordStart,
4568         RecordEnd,
4569 ], "Locks")
4570 LoginTime                       = struct("login_time", [
4571         Year,
4572         Month,
4573         Day,
4574         Hour,
4575         Minute,
4576         Second,
4577         DayOfWeek,
4578 ], "Login Time")
4579 LogLockStruct                   = struct("log_lock_struct", [
4580         TaskNumByte,
4581         LockStatus,
4582         LockName,
4583 ], "Logical Locks")
4584 LogRecStruct                    = struct("log_rec_struct", [
4585         ConnectionNumberWord,
4586         TaskNumByte,
4587         LockStatus,
4588 ], "Logical Record Locks")
4589 LSLInformation                  = struct("lsl_information", [
4590         uint32("rx_buffers", "Receive Buffers"),
4591         uint32("rx_buffers_75", "Receive Buffers Warning Level"),
4592         uint32("rx_buffers_checked_out", "Receive Buffers Checked Out Count"),
4593         uint32("rx_buffer_size", "Receive Buffer Size"),
4594         uint32("max_phy_packet_size", "Maximum Physical Packet Size"),
4595         uint32("last_time_rx_buff_was_alloc", "Last Time a Receive Buffer was Allocated"),
4596         uint32("max_num_of_protocols", "Maximum Number of Protocols"),
4597         uint32("max_num_of_media_types", "Maximum Number of Media Types"),
4598         uint32("total_tx_packets", "Total Transmit Packets"),
4599         uint32("get_ecb_buf", "Get ECB Buffers"),
4600         uint32("get_ecb_fails", "Get ECB Failures"),
4601         uint32("aes_event_count", "AES Event Count"),
4602         uint32("post_poned_events", "Postponed Events"),
4603         uint32("ecb_cxl_fails", "ECB Cancel Failures"),
4604         uint32("valid_bfrs_reused", "Valid Buffers Reused"),
4605         uint32("enqueued_send_cnt", "Enqueued Send Count"),
4606         uint32("total_rx_packets", "Total Receive Packets"),
4607         uint32("unclaimed_packets", "Unclaimed Packets"),
4608         uint8("stat_table_major_version", "Statistics Table Major Version"),
4609         uint8("stat_table_minor_version", "Statistics Table Minor Version"),
4610 ], "LSL Information")
4611 MaximumSpaceStruct              = struct("max_space_struct", [
4612         MaxSpace,
4613 ])
4614 MemoryCounters                  = struct("memory_counters", [
4615         uint32("orig_num_cache_buff", "Original Number Of Cache Buffers"),
4616         uint32("curr_num_cache_buff", "Current Number Of Cache Buffers"),
4617         uint32("cache_dirty_block_thresh", "Cache Dirty Block Threshold"),
4618         uint32("wait_node", "Wait Node Count"),
4619         uint32("wait_node_alloc_fail", "Wait Node Alloc Failure Count"),
4620         uint32("move_cache_node", "Move Cache Node Count"),
4621         uint32("move_cache_node_from_avai", "Move Cache Node From Avail Count"),
4622         uint32("accel_cache_node_write", "Accelerate Cache Node Write Count"),
4623         uint32("rem_cache_node", "Remove Cache Node Count"),
4624         uint32("rem_cache_node_from_avail", "Remove Cache Node From Avail Count"),
4625 ], "Memory Counters")
4626 MLIDBoardInfo                   = struct("mlid_board_info", [           
4627         uint32("protocol_board_num", "Protocol Board Number"),
4628         uint16("protocol_number", "Protocol Number"),
4629         bytes("protocol_id", "Protocol ID", 6),
4630         nstring8("protocol_name", "Protocol Name"),
4631 ], "MLID Board Information")        
4632 ModifyInfoStruct                = struct("modify_info_struct", [
4633         ModifiedTime,
4634         ModifiedDate,
4635         ModifierID,
4636         LastAccessedDate,
4637 ], "Modification Information")
4638 nameInfo                        = struct("name_info_struct", [
4639         ObjectType,
4640         nstring8("login_name", "Login Name"),
4641 ], "Name Information")
4642 NCPNetworkAddress               = struct("ncp_network_address_struct", [
4643         TransportType,
4644         Reserved3,
4645         NetAddress,
4646 ], "Network Address")
4647
4648 netAddr                         = struct("net_addr_struct", [
4649         TransportType,
4650         nbytes32("transport_addr", "Transport Address"),
4651 ], "Network Address")
4652
4653 NetWareInformationStruct        = struct("netware_information_struct", [
4654         DataStreamSpaceAlloc,           # (Data Stream Alloc Bit)
4655         AttributesDef32,                # (Attributes Bit)
4656         FlagsDef,
4657         DataStreamSize,                 # (Data Stream Size Bit)
4658         TotalDataStreamDiskSpaceAlloc,  # (Total Stream Size Bit)
4659         NumberOfDataStreams,
4660         CreationTime,                   # (Creation Bit)
4661         CreationDate,
4662         CreatorID,
4663         ModifiedTime,                   # (Modify Bit)
4664         ModifiedDate,
4665         ModifierID,
4666         LastAccessedDate,
4667         ArchivedTime,                   # (Archive Bit)
4668         ArchivedDate,
4669         ArchiverID,
4670         InheritedRightsMask,            # (Rights Bit)
4671         DirectoryEntryNumber,           # (Directory Entry Bit)
4672         DOSDirectoryEntryNumber,
4673         VolumeNumberLong,
4674         EADataSize,                     # (Extended Attribute Bit)
4675         EACount,
4676         EAKeySize,
4677         CreatorNameSpaceNumber,         # (Name Space Bit)
4678         Reserved3,
4679 ], "NetWare Information")
4680 NLMInformation                  = struct("nlm_information", [
4681         IdentificationNumber,
4682         NLMFlags,
4683         Reserved3,
4684         NLMType,
4685         Reserved3,
4686         ParentID,
4687         MajorVersion,
4688         MinorVersion,
4689         Revision,
4690         Year,
4691         Reserved3,
4692         Month,
4693         Reserved3,
4694         Day,
4695         Reserved3,
4696         AllocAvailByte,
4697         AllocFreeCount,
4698         LastGarbCollect,
4699         MessageLanguage,
4700         NumberOfReferencedPublics,
4701 ], "NLM Information")
4702 NSInfoStruct                    = struct("ns_info_struct", [
4703         NameSpace,
4704         Reserved3,
4705 ])
4706 NWAuditStatus                   = struct("nw_audit_status", [
4707         AuditVersionDate,
4708         AuditFileVersionDate,
4709         val_string16("audit_enable_flag", "Auditing Enabled Flag", [
4710                 [ 0x0000, "Auditing Disabled" ],
4711                 [ 0x0100, "Auditing Enabled" ],
4712         ]),
4713         Reserved2,
4714         uint32("audit_file_size", "Audit File Size"),
4715         uint32("modified_counter", "Modified Counter"),
4716         uint32("audit_file_max_size", "Audit File Maximum Size"),
4717         uint32("audit_file_size_threshold", "Audit File Size Threshold"),
4718         uint32("audit_record_count", "Audit Record Count"),
4719         uint32("auditing_flags", "Auditing Flags"),
4720 ], "NetWare Audit Status")
4721 ObjectSecurityStruct            = struct("object_security_struct", [
4722         ObjectSecurity,
4723 ])
4724 ObjectFlagsStruct               = struct("object_flags_struct", [
4725         ObjectFlags,
4726 ])
4727 ObjectTypeStruct                = struct("object_type_struct", [
4728         ObjectType,
4729         Reserved2,
4730 ])
4731 ObjectNameStruct                = struct("object_name_struct", [
4732         ObjectNameStringz,
4733 ])
4734 ObjectIDStruct                  = struct("object_id_struct", [
4735         ObjectID, 
4736         Restriction,
4737 ])
4738 OpnFilesStruct                  = struct("opn_files_struct", [
4739         TaskNumberWord,
4740         LockType,
4741         AccessControl,
4742         LockFlag,
4743         VolumeNumber,
4744         DOSParentDirectoryEntry,
4745         DOSDirectoryEntry,
4746         ForkCount,
4747         NameSpace,
4748         FileName,
4749 ], "Open Files Information")
4750 OwnerIDStruct                   = struct("owner_id_struct", [
4751         CreatorID,
4752 ])                
4753 PacketBurstInformation          = struct("packet_burst_information", [
4754         uint32("big_invalid_slot", "Big Invalid Slot Count"),
4755         uint32("big_forged_packet", "Big Forged Packet Count"),
4756         uint32("big_invalid_packet", "Big Invalid Packet Count"),
4757         uint32("big_still_transmitting", "Big Still Transmitting Count"),
4758         uint32("still_doing_the_last_req", "Still Doing The Last Request Count"),
4759         uint32("invalid_control_req", "Invalid Control Request Count"),
4760         uint32("control_invalid_message_number", "Control Invalid Message Number Count"),
4761         uint32("control_being_torn_down", "Control Being Torn Down Count"),
4762         uint32("big_repeat_the_file_read", "Big Repeat the File Read Count"),
4763         uint32("big_send_extra_cc_count", "Big Send Extra CC Count"),
4764         uint32("big_return_abort_mess", "Big Return Abort Message Count"),
4765         uint32("big_read_invalid_mess", "Big Read Invalid Message Number Count"),
4766         uint32("big_read_do_it_over", "Big Read Do It Over Count"),
4767         uint32("big_read_being_torn_down", "Big Read Being Torn Down Count"),
4768         uint32("previous_control_packet", "Previous Control Packet Count"),
4769         uint32("send_hold_off_message", "Send Hold Off Message Count"),
4770         uint32("big_read_no_data_avail", "Big Read No Data Available Count"),
4771         uint32("big_read_trying_to_read", "Big Read Trying To Read Too Much Count"),
4772         uint32("async_read_error", "Async Read Error Count"),
4773         uint32("big_read_phy_read_err", "Big Read Physical Read Error Count"),
4774         uint32("ctl_bad_ack_frag_list", "Control Bad ACK Fragment List Count"),
4775         uint32("ctl_no_data_read", "Control No Data Read Count"),
4776         uint32("write_dup_req", "Write Duplicate Request Count"),
4777         uint32("shouldnt_be_ack_here", "Shouldn't Be ACKing Here Count"),
4778         uint32("write_incon_packet_len", "Write Inconsistent Packet Lengths Count"),
4779         uint32("first_packet_isnt_a_write", "First Packet Isn't A Write Count"),
4780         uint32("write_trash_dup_req", "Write Trashed Duplicate Request Count"),
4781         uint32("big_write_inv_message_num", "Big Write Invalid Message Number Count"),
4782         uint32("big_write_being_torn_down", "Big Write Being Torn Down Count"),
4783         uint32("big_write_being_abort", "Big Write Being Aborted Count"),
4784         uint32("zero_ack_frag", "Zero ACK Fragment Count"),
4785         uint32("write_curr_trans", "Write Currently Transmitting Count"),
4786         uint32("try_to_write_too_much", "Trying To Write Too Much Count"),
4787         uint32("write_out_of_mem_for_ctl_nodes", "Write Out Of Memory For Control Nodes Count"),
4788         uint32("write_didnt_need_this_frag", "Write Didn't Need This Fragment Count"),
4789         uint32("write_too_many_buf_check", "Write Too Many Buffers Checked Out Count"),
4790         uint32("write_timeout", "Write Time Out Count"),
4791         uint32("write_got_an_ack0", "Write Got An ACK Count 0"),
4792         uint32("write_got_an_ack1", "Write Got An ACK Count 1"),
4793         uint32("poll_abort_conn", "Poller Aborted The Connnection Count"),
4794         uint32("may_had_out_of_order", "Maybe Had Out Of Order Writes Count"),
4795         uint32("had_an_out_of_order", "Had An Out Of Order Write Count"),
4796         uint32("moved_the_ack_bit_dn", "Moved The ACK Bit Down Count"),
4797         uint32("bumped_out_of_order", "Bumped Out Of Order Write Count"),
4798         uint32("poll_rem_old_out_of_order", "Poller Removed Old Out Of Order Count"),
4799         uint32("write_didnt_need_but_req_ack", "Write Didn't Need But Requested ACK Count"),
4800         uint32("write_trash_packet", "Write Trashed Packet Count"),
4801         uint32("too_many_ack_frag", "Too Many ACK Fragments Count"),
4802         uint32("saved_an_out_of_order_packet", "Saved An Out Of Order Packet Count"),
4803         uint32("conn_being_aborted", "Connection Being Aborted Count"),
4804 ], "Packet Burst Information")
4805
4806 PadDSSpaceAllocate              = struct("pad_ds_space_alloc", [
4807     Reserved4,
4808 ])
4809 PadAttributes                   = struct("pad_attributes", [
4810     Reserved6,
4811 ])
4812 PadDataStreamSize               = struct("pad_data_stream_size", [
4813     Reserved4,
4814 ])    
4815 PadTotalStreamSize              = struct("pad_total_stream_size", [
4816     Reserved6,
4817 ])
4818 PadCreationInfo                 = struct("pad_creation_info", [
4819     Reserved8,
4820 ])
4821 PadModifyInfo                   = struct("pad_modify_info", [
4822     Reserved10,
4823 ])
4824 PadArchiveInfo                  = struct("pad_archive_info", [
4825     Reserved8,
4826 ])
4827 PadRightsInfo                   = struct("pad_rights_info", [
4828     Reserved2,
4829 ])
4830 PadDirEntry                     = struct("pad_dir_entry", [
4831     Reserved12,
4832 ])
4833 PadEAInfo                       = struct("pad_ea_info", [
4834     Reserved12,
4835 ])
4836 PadNSInfo                       = struct("pad_ns_info", [
4837     Reserved4,
4838 ])
4839 PhyLockStruct                   = struct("phy_lock_struct", [
4840         LoggedCount,
4841         ShareableLockCount,
4842         RecordStart,
4843         RecordEnd,
4844         LogicalConnectionNumber,
4845         TaskNumByte,
4846         LockType,
4847 ], "Physical Locks")
4848 printInfo                       = struct("print_info_struct", [
4849         PrintFlags,
4850         TabSize,
4851         Copies,
4852         PrintToFileFlag,
4853         BannerName,
4854         TargetPrinter,
4855         FormType,
4856 ], "Print Information")
4857 RightsInfoStruct                = struct("rights_info_struct", [
4858         InheritedRightsMask,
4859 ])
4860 RoutersInfo                     = struct("routers_info", [
4861         bytes("node", "Node", 6),
4862         ConnectedLAN,
4863         uint16("route_hops", "Hop Count"),
4864         uint16("route_time", "Route Time"),
4865 ], "Router Information")        
4866 RTagStructure                   = struct("r_tag_struct", [
4867         RTagNumber,
4868         ResourceSignature,
4869         ResourceCount,
4870         ResourceName,
4871 ], "Resource Tag")
4872 ScanInfoFileName                = struct("scan_info_file_name", [
4873         SalvageableFileEntryNumber,
4874         FileName,
4875 ])
4876 ScanInfoFileNoName              = struct("scan_info_file_no_name", [
4877         SalvageableFileEntryNumber,        
4878 ])        
4879 Segments                        = struct("segments", [
4880         uint32("volume_segment_dev_num", "Volume Segment Device Number"),
4881         uint32("volume_segment_offset", "Volume Segment Offset"),
4882         uint32("volume_segment_size", "Volume Segment Size"),
4883 ], "Volume Segment Information")            
4884 SemaInfoStruct                  = struct("sema_info_struct", [
4885         LogicalConnectionNumber,
4886         TaskNumByte,
4887 ])
4888 SemaStruct                      = struct("sema_struct", [
4889         OpenCount,
4890         SemaphoreValue,
4891         TaskNumByte,
4892         SemaphoreName,
4893 ], "Semaphore Information")
4894 ServerInfo                      = struct("server_info", [
4895         uint32("reply_canceled", "Reply Canceled Count"),
4896         uint32("write_held_off", "Write Held Off Count"),
4897         uint32("write_held_off_with_dup", "Write Held Off With Duplicate Request"),
4898         uint32("invalid_req_type", "Invalid Request Type Count"),
4899         uint32("being_aborted", "Being Aborted Count"),
4900         uint32("already_doing_realloc", "Already Doing Re-Allocate Count"),
4901         uint32("dealloc_invalid_slot", "De-Allocate Invalid Slot Count"),
4902         uint32("dealloc_being_proc", "De-Allocate Being Processed Count"),
4903         uint32("dealloc_forged_packet", "De-Allocate Forged Packet Count"),
4904         uint32("dealloc_still_transmit", "De-Allocate Still Transmitting Count"),
4905         uint32("start_station_error", "Start Station Error Count"),
4906         uint32("invalid_slot", "Invalid Slot Count"),
4907         uint32("being_processed", "Being Processed Count"),
4908         uint32("forged_packet", "Forged Packet Count"),
4909         uint32("still_transmitting", "Still Transmitting Count"),
4910         uint32("reexecute_request", "Re-Execute Request Count"),
4911         uint32("invalid_sequence_number", "Invalid Sequence Number Count"),
4912         uint32("dup_is_being_sent", "Duplicate Is Being Sent Already Count"),
4913         uint32("sent_pos_ack", "Sent Positive Acknowledge Count"),
4914         uint32("sent_a_dup_reply", "Sent A Duplicate Reply Count"),
4915         uint32("no_mem_for_station", "No Memory For Station Control Count"),
4916         uint32("no_avail_conns", "No Available Connections Count"),
4917         uint32("realloc_slot", "Re-Allocate Slot Count"),
4918         uint32("realloc_slot_came_too_soon", "Re-Allocate Slot Came Too Soon Count"),
4919 ], "Server Information")
4920 ServersSrcInfo                  = struct("servers_src_info", [
4921         ServerNode,
4922         ConnectedLAN,
4923         HopsToNet,
4924 ], "Source Server Information")
4925 SpaceStruct                     = struct("space_struct", [        
4926         Level,
4927         MaxSpace,
4928         CurrentSpace,
4929 ], "Space Information")        
4930 SPXInformation                  = struct("spx_information", [
4931         uint16("spx_max_conn", "SPX Max Connections Count"),
4932         uint16("spx_max_used_conn", "SPX Max Used Connections"),
4933         uint16("spx_est_conn_req", "SPX Establish Connection Requests"),
4934         uint16("spx_est_conn_fail", "SPX Establish Connection Fail"),
4935         uint16("spx_listen_con_req", "SPX Listen Connect Request"),
4936         uint16("spx_listen_con_fail", "SPX Listen Connect Fail"),
4937         uint32("spx_send", "SPX Send Count"),
4938         uint32("spx_window_choke", "SPX Window Choke Count"),
4939         uint16("spx_bad_send", "SPX Bad Send Count"),
4940         uint16("spx_send_fail", "SPX Send Fail Count"),
4941         uint16("spx_abort_conn", "SPX Aborted Connection"),
4942         uint32("spx_listen_pkt", "SPX Listen Packet Count"),
4943         uint16("spx_bad_listen", "SPX Bad Listen Count"),
4944         uint32("spx_incoming_pkt", "SPX Incoming Packet Count"),
4945         uint16("spx_bad_in_pkt", "SPX Bad In Packet Count"),
4946         uint16("spx_supp_pkt", "SPX Suppressed Packet Count"),
4947         uint16("spx_no_ses_listen", "SPX No Session Listen ECB Count"),
4948         uint16("spx_watch_dog", "SPX Watch Dog Destination Session Count"),
4949 ], "SPX Information")
4950 StackInfo                       = struct("stack_info", [
4951         StackNumber,
4952         fw_string("stack_short_name", "Stack Short Name", 16),
4953 ], "Stack Information")        
4954 statsInfo                       = struct("stats_info_struct", [
4955         TotalBytesRead,
4956         TotalBytesWritten,
4957         TotalRequest,
4958 ], "Statistics")
4959 theTimeStruct                   = struct("the_time_struct", [
4960         UTCTimeInSeconds,
4961         FractionalSeconds,
4962         TimesyncStatus,
4963 ])        
4964 timeInfo                        = struct("time_info", [
4965         Year,
4966         Month,
4967         Day,
4968         Hour,
4969         Minute,
4970         Second,
4971         DayOfWeek,
4972         uint32("login_expiration_time", "Login Expiration Time"),
4973 ])              
4974 TotalStreamSizeStruct           = struct("total_stream_size_struct", [
4975         TotalDataStreamDiskSpaceAlloc,
4976         NumberOfDataStreams,
4977 ])
4978 TrendCounters                   = struct("trend_counters", [
4979         uint32("num_of_cache_checks", "Number Of Cache Checks"),
4980         uint32("num_of_cache_hits", "Number Of Cache Hits"),
4981         uint32("num_of_dirty_cache_checks", "Number Of Dirty Cache Checks"),
4982         uint32("num_of_cache_dirty_checks", "Number Of Cache Dirty Checks"),
4983         uint32("cache_used_while_check", "Cache Used While Checking"),
4984         uint32("wait_till_dirty_blcks_dec", "Wait Till Dirty Blocks Decrease Count"),
4985         uint32("alloc_blck_frm_avail", "Allocate Block From Available Count"),
4986         uint32("alloc_blck_frm_lru", "Allocate Block From LRU Count"),
4987         uint32("alloc_blck_already_wait", "Allocate Block Already Waiting"),
4988         uint32("lru_sit_time", "LRU Sitting Time"),
4989         uint32("num_of_cache_check_no_wait", "Number Of Cache Check No Wait"),
4990         uint32("num_of_cache_hits_no_wait", "Number Of Cache Hits No Wait"),
4991 ], "Trend Counters")
4992 TrusteeStruct                   = struct("trustee_struct", [
4993         ObjectID,
4994         AccessRightsMaskWord,
4995 ])
4996 UpdateDateStruct                = struct("update_date_struct", [
4997         UpdateDate,
4998 ])
4999 UpdateIDStruct                  = struct("update_id_struct", [
5000         UpdateID,
5001 ])        
5002 UpdateTimeStruct                = struct("update_time_struct", [
5003         UpdateTime,
5004 ])                
5005 UserInformation                 = struct("user_info", [
5006         ConnectionNumber,
5007         UseCount,
5008         Reserved2,
5009         ConnectionServiceType,
5010         Year,
5011         Month,
5012         Day,
5013         Hour,
5014         Minute,
5015         Second,
5016         DayOfWeek,
5017         Status,
5018         Reserved2,
5019         ExpirationTime,
5020         ObjectType,
5021         Reserved2,
5022         TransactionTrackingFlag,
5023         LogicalLockThreshold,
5024         FileWriteFlags,
5025         FileWriteState,
5026         Reserved,
5027         FileLockCount,
5028         RecordLockCount,
5029         TotalBytesRead,
5030         TotalBytesWritten,
5031         TotalRequest,
5032         HeldRequests,
5033         HeldBytesRead,
5034         HeldBytesWritten,
5035 ], "User Information")
5036 VolInfoStructure                = struct("vol_info_struct", [
5037         VolumeType,
5038         Reserved2,
5039         StatusFlagBits,
5040         SectorSize,
5041         SectorsPerClusterLong,
5042         VolumeSizeInClusters,
5043         FreedClusters,
5044         SubAllocFreeableClusters,
5045         FreeableLimboSectors,
5046         NonFreeableLimboSectors,
5047         NonFreeableAvailableSubAllocSectors,
5048         NotUsableSubAllocSectors,
5049         SubAllocClusters,
5050         DataStreamsCount,
5051         LimboDataStreamsCount,
5052         OldestDeletedFileAgeInTicks,
5053         CompressedDataStreamsCount,
5054         CompressedLimboDataStreamsCount,
5055         UnCompressableDataStreamsCount,
5056         PreCompressedSectors,
5057         CompressedSectors,
5058         MigratedFiles,
5059         MigratedSectors,
5060         ClustersUsedByFAT,
5061         ClustersUsedByDirectories,
5062         ClustersUsedByExtendedDirectories,
5063         TotalDirectoryEntries,
5064         UnUsedDirectoryEntries,
5065         TotalExtendedDirectoryExtants,
5066         UnUsedExtendedDirectoryExtants,
5067         ExtendedAttributesDefined,
5068         ExtendedAttributeExtantsUsed,
5069         DirectoryServicesObjectID,
5070         VolumeLastModifiedTime,
5071         VolumeLastModifiedDate,
5072 ], "Volume Information")
5073 VolInfo2Struct                  = struct("vol_info_struct_2", [
5074         uint32("volume_active_count", "Volume Active Count"),
5075         uint32("volume_use_count", "Volume Use Count"),
5076         uint32("mac_root_ids", "MAC Root IDs"),
5077         VolumeLastModifiedTime,
5078         VolumeLastModifiedDate,
5079         uint32("volume_reference_count", "Volume Reference Count"),
5080         uint32("compression_lower_limit", "Compression Lower Limit"),
5081         uint32("outstanding_ios", "Outstanding IOs"),
5082         uint32("outstanding_compression_ios", "Outstanding Compression IOs"),
5083         uint32("compression_ios_limit", "Compression IOs Limit"),
5084 ], "Extended Volume Information")        
5085 VolumeStruct                    = struct("volume_struct", [
5086         VolumeNumberLong,
5087         VolumeNameLen,
5088 ])
5089
5090
5091 ##############################################################################
5092 # NCP Groups
5093 ##############################################################################
5094 def define_groups():
5095         groups['accounting']    = "Accounting"
5096         groups['afp']           = "AFP"
5097         groups['auditing']      = "Auditing"
5098         groups['bindery']       = "Bindery"
5099         groups['comm']          = "Communication"
5100         groups['connection']    = "Connection"
5101         groups['directory']     = "Directory"
5102         groups['extended']      = "Extended Attribute"
5103         groups['file']          = "File"
5104         groups['fileserver']    = "File Server"
5105         groups['message']       = "Message"
5106         groups['migration']     = "Data Migration"
5107         groups['misc']          = "Miscellaneous"
5108         groups['name']          = "Name Space"
5109         groups['nds']           = "NetWare Directory"
5110         groups['print']         = "Print"
5111         groups['queue']         = "Queue"
5112         groups['sync']          = "Synchronization"
5113         groups['tts']           = "Transaction Tracking"
5114         groups['qms']           = "Queue Management System (QMS)"
5115         groups['stats']         = "Server Statistics"
5116         groups['unknown']       = "Unknown"
5117
5118 ##############################################################################
5119 # NCP Errors
5120 ##############################################################################
5121 def define_errors():
5122         errors[0x0000] = "Ok"
5123         errors[0x0001] = "Transaction tracking is available"
5124         errors[0x0002] = "Ok. The data has been written"
5125         errors[0x0003] = "Calling Station is a Manager"
5126     
5127         errors[0x0100] = "One or more of the ConnectionNumbers in the send list are invalid"
5128         errors[0x0101] = "Invalid space limit"
5129         errors[0x0102] = "Insufficient disk space"
5130         errors[0x0103] = "Queue server cannot add jobs"
5131         errors[0x0104] = "Out of disk space"
5132         errors[0x0105] = "Semaphore overflow"
5133         errors[0x0106] = "Invalid Parameter"
5134         errors[0x0107] = "Invalid Number of Minutes to Delay"
5135         errors[0x0108] = "Invalid Start or Network Number"
5136         errors[0x0109] = "Cannot Obtain License"
5137     
5138         errors[0x0200] = "One or more clients in the send list are not logged in"
5139         errors[0x0201] = "Queue server cannot attach"
5140     
5141         errors[0x0300] = "One or more clients in the send list are not accepting messages"
5142     
5143         errors[0x0400] = "Client already has message"
5144         errors[0x0401] = "Queue server cannot service job"
5145     
5146         errors[0x7300] = "Revoke Handle Rights Not Found"
5147         errors[0x7900] = "Invalid Parameter in Request Packet"
5148         errors[0x7901] = "Nothing being Compressed"
5149         errors[0x7a00] = "Connection Already Temporary"
5150         errors[0x7b00] = "Connection Already Logged in"
5151         errors[0x7c00] = "Connection Not Authenticated"
5152         
5153         errors[0x7e00] = "NCP failed boundary check"
5154         errors[0x7e01] = "Invalid Length"
5155     
5156         errors[0x7f00] = "Lock Waiting"
5157         errors[0x8000] = "Lock fail"
5158         errors[0x8001] = "File in Use"
5159     
5160         errors[0x8100] = "A file handle could not be allocated by the file server"
5161         errors[0x8101] = "Out of File Handles"
5162         
5163         errors[0x8200] = "Unauthorized to open the file"
5164         errors[0x8300] = "Unable to read/write the volume. Possible bad sector on the file server"
5165         errors[0x8301] = "Hard I/O Error"
5166     
5167         errors[0x8400] = "Unauthorized to create the directory"
5168         errors[0x8401] = "Unauthorized to create the file"
5169     
5170         errors[0x8500] = "Unauthorized to delete the specified file"
5171         errors[0x8501] = "Unauthorized to overwrite an existing file in this directory"
5172     
5173         errors[0x8700] = "An unexpected character was encountered in the filename"
5174         errors[0x8701] = "Create Filename Error"
5175     
5176         errors[0x8800] = "Invalid file handle"
5177         errors[0x8900] = "Unauthorized to search this file/directory"
5178         errors[0x8a00] = "Unauthorized to delete this file/directory"
5179         errors[0x8b00] = "Unauthorized to rename a file in this directory"
5180     
5181         errors[0x8c00] = "No set privileges"
5182         errors[0x8c01] = "Unauthorized to modify a file in this directory"
5183         errors[0x8c02] = "Unauthorized to change the restriction on this volume"
5184     
5185         errors[0x8d00] = "Some of the affected files are in use by another client"
5186         errors[0x8d01] = "The affected file is in use"
5187     
5188         errors[0x8e00] = "All of the affected files are in use by another client"
5189         errors[0x8f00] = "Some of the affected files are read-only"
5190     
5191         errors[0x9000] = "An attempt to modify a read-only volume occurred"
5192         errors[0x9001] = "All of the affected files are read-only"
5193         errors[0x9002] = "Read Only Access to Volume"
5194     
5195         errors[0x9100] = "Some of the affected files already exist"
5196         errors[0x9101] = "Some Names Exist"
5197     
5198         errors[0x9200] = "Directory with the new name already exists"
5199         errors[0x9201] = "All of the affected files already exist"
5200     
5201         errors[0x9300] = "Unauthorized to read from this file"
5202         errors[0x9400] = "Unauthorized to write to this file"
5203         errors[0x9500] = "The affected file is detached"
5204     
5205         errors[0x9600] = "The file server has run out of memory to service this request"
5206         errors[0x9601] = "No alloc space for message"
5207         errors[0x9602] = "Server Out of Space"
5208     
5209         errors[0x9800] = "The affected volume is not mounted"
5210         errors[0x9801] = "The volume associated with Volume Number is not mounted"
5211         errors[0x9802] = "The resulting volume does not exist"
5212         errors[0x9803] = "The destination volume is not mounted"
5213         errors[0x9804] = "Disk Map Error"
5214     
5215         errors[0x9900] = "The file server has run out of directory space on the affected volume"
5216         errors[0x9a00] = "The request attempted to rename the affected file to another volume"
5217     
5218         errors[0x9b00] = "DirHandle is not associated with a valid directory path"
5219         errors[0x9b01] = "A resulting directory handle is not associated with a valid directory path"
5220         errors[0x9b02] = "The directory associated with DirHandle does not exist"
5221         errors[0x9b03] = "Bad directory handle"
5222     
5223         errors[0x9c00] = "The resulting path is not valid"
5224         errors[0x9c01] = "The resulting file path is not valid"
5225         errors[0x9c02] = "The resulting directory path is not valid"
5226         errors[0x9c03] = "Invalid path"
5227     
5228         errors[0x9d00] = "A directory handle was not available for allocation"
5229     
5230         errors[0x9e00] = "The name of the directory does not conform to a legal name for this name space"
5231         errors[0x9e01] = "The new directory name does not conform to a legal name for this name space"
5232         errors[0x9e02] = "Bad File Name"
5233     
5234         errors[0x9f00] = "The request attempted to delete a directory that is in use by another client"
5235     
5236         errors[0xa000] = "The request attempted to delete a directory that is not empty"
5237         errors[0xa100] = "An unrecoverable error occured on the affected directory"
5238     
5239         errors[0xa200] = "The request attempted to read from a file region that is physically locked"
5240         errors[0xa201] = "I/O Lock Error"
5241     
5242         errors[0xa400] = "Invalid directory rename attempted"
5243         errors[0xa500] = "Invalid open create mode"
5244         errors[0xa600] = "Auditor Access has been Removed"
5245         errors[0xa700] = "Error Auditing Version"
5246             
5247         errors[0xa800] = "Invalid Support Module ID"
5248         errors[0xa801] = "No Auditing Access Rights"
5249             
5250         errors[0xbe00] = "Invalid Data Stream"
5251         errors[0xbf00] = "Requests for this name space are not valid on this volume"
5252     
5253         errors[0xc000] = "Unauthorized to retrieve accounting data"
5254         
5255         errors[0xc100] = "The ACCOUNT_BALANCE property does not exist"
5256         errors[0xc101] = "No Account Balance"
5257         
5258         errors[0xc200] = "The object has exceeded its credit limit"
5259         errors[0xc300] = "Too many holds have been placed against this account"
5260         errors[0xc400] = "The client account has been disabled"
5261     
5262         errors[0xc500] = "Access to the account has been denied because of intruder detection"
5263         errors[0xc501] = "Login lockout"
5264         errors[0xc502] = "Server Login Locked"
5265     
5266         errors[0xc600] = "The caller does not have operator priviliges"
5267         errors[0xc601] = "The client does not have operator priviliges"
5268     
5269         errors[0xc800] = "Missing EA Key"
5270         errors[0xc900] = "EA Not Found"
5271         errors[0xca00] = "Invalid EA Handle Type"
5272         errors[0xcb00] = "EA No Key No Data"
5273         errors[0xcc00] = "EA Number Mismatch"
5274         errors[0xcd00] = "Extent Number Out of Range"
5275         errors[0xce00] = "EA Bad Directory Number"
5276         errors[0xcf00] = "Invalid EA Handle"
5277     
5278         errors[0xd000] = "Queue error"
5279         errors[0xd001] = "EA Position Out of Range"
5280         
5281         errors[0xd100] = "The queue does not exist"
5282         errors[0xd101] = "EA Access Denied"
5283     
5284         errors[0xd200] = "A queue server is not associated with this queue"
5285         errors[0xd201] = "A queue server is not associated with the selected queue"
5286         errors[0xd202] = "No queue server"
5287         errors[0xd203] = "Data Page Odd Size"
5288     
5289         errors[0xd300] = "No queue rights"
5290         errors[0xd301] = "EA Volume Not Mounted"
5291     
5292         errors[0xd400] = "The queue is full and cannot accept another request"
5293         errors[0xd401] = "The queue associated with ObjectId is full and cannot accept another request"
5294         errors[0xd402] = "Bad Page Boundary"
5295     
5296         errors[0xd500] = "A job does not exist in this queue"
5297         errors[0xd501] = "No queue job"
5298         errors[0xd502] = "The job associated with JobNumber does not exist in this queue"
5299         errors[0xd503] = "Inspect Failure"
5300     
5301         errors[0xd600] = "The file server does not allow unencrypted passwords"
5302         errors[0xd601] = "No job right"
5303         errors[0xd602] = "EA Already Claimed"
5304     
5305         errors[0xd700] = "Bad account"
5306         errors[0xd701] = "The old and new password strings are identical"
5307         errors[0xd702] = "The job is currently being serviced"
5308         errors[0xd703] = "The queue is currently servicing a job"
5309         errors[0xd704] = "Queue servicing"
5310         errors[0xd705] = "Odd Buffer Size"
5311     
5312         errors[0xd800] = "Queue not active"
5313         errors[0xd801] = "No Scorecards"
5314         
5315         errors[0xd900] = "The file server cannot accept another connection as it has reached its limit"
5316         errors[0xd901] = "The client is not security equivalent to one of the objects in the Q_SERVERS group property of the target queue"
5317         errors[0xd902] = "Station is not a server"
5318         errors[0xd903] = "Bad EDS Signature"
5319     
5320         errors[0xda00] = "Attempted to login to the file server during a restricted time period"
5321         errors[0xda01] = "Queue halted"
5322         errors[0xda02] = "EA Space Limit"
5323     
5324         errors[0xdb00] = "Attempted to login to the file server from an unauthorized workstation or network"
5325         errors[0xdb01] = "The queue cannot attach another queue server"
5326         errors[0xdb02] = "Maximum queue servers"
5327         errors[0xdb03] = "EA Key Corrupt"
5328     
5329         errors[0xdc00] = "Account Expired"
5330         errors[0xdc01] = "EA Key Limit"
5331         
5332         errors[0xdd00] = "Tally Corrupt"
5333         errors[0xde00] = "Attempted to login to the file server with an incorrect password"
5334         errors[0xdf00] = "Attempted to login to the file server with a password that has expired"
5335     
5336         errors[0xe000] = "No Login Connections Available"
5337         errors[0xe700] = "No disk track"
5338         errors[0xe800] = "Write to group"
5339         errors[0xe900] = "The object is already a member of the group property"
5340     
5341         errors[0xea00] = "No such member"
5342         errors[0xea01] = "The bindery object is not a member of the set"
5343         errors[0xea02] = "Non-existent member"
5344     
5345         errors[0xeb00] = "The property is not a set property"
5346     
5347         errors[0xec00] = "No such set"
5348         errors[0xec01] = "The set property does not exist"
5349     
5350         errors[0xed00] = "Property exists"
5351         errors[0xed01] = "The property already exists"
5352         errors[0xed02] = "An attempt was made to create a bindery object property that already exists"
5353     
5354         errors[0xee00] = "The object already exists"
5355         errors[0xee01] = "The bindery object already exists"
5356     
5357         errors[0xef00] = "Illegal name"
5358         errors[0xef01] = "Illegal characters in ObjectName field"
5359         errors[0xef02] = "Invalid name"
5360     
5361         errors[0xf000] = "A wildcard was detected in a field that does not support wildcards"
5362         errors[0xf001] = "An illegal wildcard was detected in ObjectName"
5363     
5364         errors[0xf100] = "The client does not have the rights to access this bindery object"
5365         errors[0xf101] = "Bindery security"
5366         errors[0xf102] = "Invalid bindery security"
5367     
5368         errors[0xf200] = "Unauthorized to read from this object"
5369         errors[0xf300] = "Unauthorized to rename this object"
5370     
5371         errors[0xf400] = "Unauthorized to delete this object"
5372         errors[0xf401] = "No object delete privileges"
5373         errors[0xf402] = "Unauthorized to delete this queue"
5374     
5375         errors[0xf500] = "Unauthorized to create this object"
5376         errors[0xf501] = "No object create"
5377     
5378         errors[0xf600] = "No property delete"
5379         errors[0xf601] = "Unauthorized to delete the property of this object"
5380         errors[0xf602] = "Unauthorized to delete this property"
5381     
5382         errors[0xf700] = "Unauthorized to create this property"
5383         errors[0xf701] = "No property create privilege"
5384     
5385         errors[0xf800] = "Unauthorized to write to this property"
5386         errors[0xf900] = "Unauthorized to read this property"
5387         errors[0xfa00] = "Temporary remap error"
5388     
5389         errors[0xfb00] = "No such property"
5390         errors[0xfb01] = "The file server does not support this request"
5391         errors[0xfb02] = "The specified property does not exist"
5392         errors[0xfb03] = "The PASSWORD property does not exist for this bindery object"
5393         errors[0xfb04] = "NDS NCP not available"
5394         errors[0xfb05] = "Bad Directory Handle"
5395         errors[0xfb06] = "Unknown Request"
5396         errors[0xfb07] = "Invalid Subfunction Request"
5397         errors[0xfb08] = "Attempt to use an invalid parameter (drive number, path, or flag value) during a set drive path call"
5398         errors[0xfb09] = "NMAS not installed on this server, NCP NOT Supported"
5399         errors[0xfb0a] = "Station Not Logged In"
5400     
5401         errors[0xfc00] = "The message queue cannot accept another message"
5402         errors[0xfc01] = "The trustee associated with ObjectId does not exist"
5403         errors[0xfc02] = "The specified bindery object does not exist"
5404         errors[0xfc03] = "The bindery object associated with ObjectID does not exist"
5405         errors[0xfc04] = "A bindery object does not exist that matches"
5406         errors[0xfc05] = "The specified queue does not exist"
5407         errors[0xfc06] = "No such object"
5408         errors[0xfc07] = "The queue associated with ObjectID does not exist"
5409     
5410         errors[0xfd00] = "Bad station number"
5411         errors[0xfd01] = "The connection associated with ConnectionNumber is not active"
5412         errors[0xfd02] = "Lock collision"
5413         errors[0xfd03] = "Transaction tracking is disabled"
5414     
5415         errors[0xfe00] = "I/O failure"
5416         errors[0xfe01] = "The files containing the bindery on the file server are locked"
5417         errors[0xfe02] = "A file with the specified name already exists in this directory"
5418         errors[0xfe03] = "No more restrictions were found"
5419         errors[0xfe04] = "The file server was unable to lock the file within the specified time limit"
5420         errors[0xfe05] = "The file server was unable to lock all files within the specified time limit"
5421         errors[0xfe06] = "The bindery object associated with ObjectID is not a valid trustee"
5422         errors[0xfe07] = "Directory locked"
5423         errors[0xfe08] = "Bindery locked"
5424         errors[0xfe09] = "Invalid semaphore name length"
5425         errors[0xfe0a] = "The file server was unable to complete the operation within the specified time limit"
5426         errors[0xfe0b] = "Transaction restart"
5427         errors[0xfe0c] = "Bad packet"
5428         errors[0xfe0d] = "Timeout"
5429         errors[0xfe0e] = "User Not Found"
5430         errors[0xfe0f] = "Trustee Not Found"
5431     
5432         errors[0xff00] = "Failure"
5433         errors[0xff01] = "Lock error"
5434         errors[0xff02] = "File not found"
5435         errors[0xff03] = "The file not found or cannot be unlocked"
5436         errors[0xff04] = "Record not found"
5437         errors[0xff05] = "The logical record was not found"
5438         errors[0xff06] = "The printer associated with Printer Number does not exist"
5439         errors[0xff07] = "No such printer"
5440         errors[0xff08] = "Unable to complete the request"
5441         errors[0xff09] = "Unauthorized to change privileges of this trustee"
5442         errors[0xff0a] = "No files matching the search criteria were found"
5443         errors[0xff0b] = "A file matching the search criteria was not found"
5444         errors[0xff0c] = "Verification failed"
5445         errors[0xff0d] = "Object associated with ObjectID is not a manager"
5446         errors[0xff0e] = "Invalid initial semaphore value"
5447         errors[0xff0f] = "The semaphore handle is not valid"
5448         errors[0xff10] = "SemaphoreHandle is not associated with a valid sempahore"
5449         errors[0xff11] = "Invalid semaphore handle"
5450         errors[0xff12] = "Transaction tracking is not available"
5451         errors[0xff13] = "The transaction has not yet been written to disk"
5452         errors[0xff14] = "Directory already exists"
5453         errors[0xff15] = "The file already exists and the deletion flag was not set"
5454         errors[0xff16] = "No matching files or directories were found"
5455         errors[0xff17] = "A file or directory matching the search criteria was not found"
5456         errors[0xff18] = "The file already exists"
5457         errors[0xff19] = "Failure, No files found"
5458         errors[0xff1a] = "Unlock Error"
5459         errors[0xff1b] = "I/O Bound Error"
5460         errors[0xff1c] = "Not Accepting Messages"
5461         errors[0xff1d] = "No More Salvageable Files in Directory"
5462         errors[0xff1e] = "Calling Station is Not a Manager"
5463         errors[0xff1f] = "Bindery Failure"
5464         errors[0xff20] = "NCP Extension Not Found"
5465
5466 ##############################################################################
5467 # Produce C code
5468 ##############################################################################
5469 def ExamineVars(vars, structs_hash, vars_hash):
5470         for var in vars:
5471                 if isinstance(var, struct):
5472                         structs_hash[var.HFName()] = var
5473                         struct_vars = var.Variables()
5474                         ExamineVars(struct_vars, structs_hash, vars_hash)
5475                 else:
5476                         vars_hash[repr(var)] = var
5477                         if isinstance(var, bitfield):
5478                                 sub_vars = var.SubVariables()
5479                                 ExamineVars(sub_vars, structs_hash, vars_hash)
5480
5481 def produce_code():
5482
5483         global errors
5484
5485         print "/*"
5486         print " * Generated automatically from %s" % (sys.argv[0])
5487         print " * Do not edit this file manually, as all changes will be lost."
5488         print " */\n"
5489
5490         print """
5491 /*
5492  * This program is free software; you can redistribute it and/or
5493  * modify it under the terms of the GNU General Public License
5494  * as published by the Free Software Foundation; either version 2
5495  * of the License, or (at your option) any later version.
5496  * 
5497  * This program is distributed in the hope that it will be useful,
5498  * but WITHOUT ANY WARRANTY; without even the implied warranty of
5499  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5500  * GNU General Public License for more details.
5501  * 
5502  * You should have received a copy of the GNU General Public License
5503  * along with this program; if not, write to the Free Software
5504  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
5505  */
5506
5507 #ifdef HAVE_CONFIG_H
5508 # include "config.h"
5509 #endif
5510
5511 #include <string.h>
5512 #include <glib.h>
5513 #include <epan/packet.h>
5514 #include <epan/conversation.h>
5515 #include "ptvcursor.h"
5516 #include "packet-ncp-int.h"
5517
5518 /* Function declarations for functions used in proto_register_ncp2222() */
5519 static void ncp_init_protocol(void);
5520 static void ncp_postseq_cleanup(void);
5521
5522 /* Endianness macros */
5523 #define BE              0
5524 #define LE              1
5525 #define NO_ENDIANNESS   0
5526
5527 #define NO_LENGTH       -1
5528
5529 /* We use this int-pointer as a special flag in ptvc_record's */
5530 static int ptvc_struct_int_storage;
5531 #define PTVC_STRUCT     (&ptvc_struct_int_storage)
5532
5533 /* Values used in the count-variable ("var"/"repeat") logic. */"""
5534
5535
5536         if global_highest_var > -1:
5537                 print "#define NUM_REPEAT_VARS\t%d" % (global_highest_var + 1)
5538                 print "guint repeat_vars[NUM_REPEAT_VARS];",
5539         else:
5540                 print "#define NUM_REPEAT_VARS\t0"
5541                 print "guint *repeat_vars = NULL;",
5542
5543         print """
5544 #define NO_VAR          NUM_REPEAT_VARS
5545 #define NO_REPEAT       NUM_REPEAT_VARS
5546
5547 #define REQ_COND_SIZE_CONSTANT  0
5548 #define REQ_COND_SIZE_VARIABLE  1
5549 #define NO_REQ_COND_SIZE        0
5550
5551
5552 #define NTREE   0x00020000
5553 #define NDEPTH  0x00000002
5554 #define NREV    0x00000004
5555 #define NFLAGS  0x00000008
5556
5557
5558
5559 static int hf_ncp_func = -1;
5560 static int hf_ncp_length = -1;
5561 static int hf_ncp_subfunc = -1;
5562 static int hf_ncp_fragment_handle = -1;
5563 static int hf_ncp_completion_code = -1;
5564 static int hf_ncp_connection_status = -1;
5565 static int hf_ncp_req_frame_num = -1;
5566 static int hf_ncp_req_frame_time = -1;
5567 static int hf_ncp_fragment_size = -1;
5568 static int hf_ncp_message_size = -1;
5569 static int hf_ncp_nds_flag = -1;
5570 static int hf_ncp_nds_verb = -1; 
5571 static int hf_ping_version = -1;
5572 static int hf_nds_version = -1;
5573 static int hf_nds_flags = -1;
5574 static int hf_nds_reply_depth = -1;
5575 static int hf_nds_reply_rev = -1;
5576 static int hf_nds_reply_flags = -1;
5577 static int hf_nds_p1type = -1;
5578 static int hf_nds_uint32value = -1;
5579 static int hf_nds_bit1 = -1;
5580 static int hf_nds_bit2 = -1;
5581 static int hf_nds_bit3 = -1;
5582 static int hf_nds_bit4 = -1;
5583 static int hf_nds_bit5 = -1;
5584 static int hf_nds_bit6 = -1;
5585 static int hf_nds_bit7 = -1;
5586 static int hf_nds_bit8 = -1;
5587 static int hf_nds_bit9 = -1;
5588 static int hf_nds_bit10 = -1;
5589 static int hf_nds_bit11 = -1;
5590 static int hf_nds_bit12 = -1;
5591 static int hf_nds_bit13 = -1;
5592 static int hf_nds_bit14 = -1;
5593 static int hf_nds_bit15 = -1;
5594 static int hf_nds_bit16 = -1;
5595 static int hf_bit1outflags = -1;
5596 static int hf_bit2outflags = -1;
5597 static int hf_bit3outflags = -1;
5598 static int hf_bit4outflags = -1;
5599 static int hf_bit5outflags = -1;
5600 static int hf_bit6outflags = -1;
5601 static int hf_bit7outflags = -1;
5602 static int hf_bit8outflags = -1;
5603 static int hf_bit9outflags = -1;
5604 static int hf_bit10outflags = -1;
5605 static int hf_bit11outflags = -1;
5606 static int hf_bit12outflags = -1;
5607 static int hf_bit13outflags = -1;
5608 static int hf_bit14outflags = -1;
5609 static int hf_bit15outflags = -1;
5610 static int hf_bit16outflags = -1;
5611 static int hf_bit1nflags = -1;
5612 static int hf_bit2nflags = -1;
5613 static int hf_bit3nflags = -1;
5614 static int hf_bit4nflags = -1;
5615 static int hf_bit5nflags = -1;
5616 static int hf_bit6nflags = -1;
5617 static int hf_bit7nflags = -1;
5618 static int hf_bit8nflags = -1;
5619 static int hf_bit9nflags = -1;
5620 static int hf_bit10nflags = -1;
5621 static int hf_bit11nflags = -1;
5622 static int hf_bit12nflags = -1;
5623 static int hf_bit13nflags = -1;
5624 static int hf_bit14nflags = -1;
5625 static int hf_bit15nflags = -1;
5626 static int hf_bit16nflags = -1;
5627 static int hf_bit1rflags = -1;
5628 static int hf_bit2rflags = -1;
5629 static int hf_bit3rflags = -1;
5630 static int hf_bit4rflags = -1;
5631 static int hf_bit5rflags = -1;
5632 static int hf_bit6rflags = -1;
5633 static int hf_bit7rflags = -1;
5634 static int hf_bit8rflags = -1;
5635 static int hf_bit9rflags = -1;
5636 static int hf_bit10rflags = -1;
5637 static int hf_bit11rflags = -1;
5638 static int hf_bit12rflags = -1;
5639 static int hf_bit13rflags = -1;
5640 static int hf_bit14rflags = -1;
5641 static int hf_bit15rflags = -1;
5642 static int hf_bit16rflags = -1;
5643 static int hf_bit1cflags = -1;
5644 static int hf_bit2cflags = -1;
5645 static int hf_bit3cflags = -1;
5646 static int hf_bit4cflags = -1;
5647 static int hf_bit5cflags = -1;
5648 static int hf_bit6cflags = -1;
5649 static int hf_bit7cflags = -1;
5650 static int hf_bit8cflags = -1;
5651 static int hf_bit9cflags = -1;
5652 static int hf_bit10cflags = -1;
5653 static int hf_bit11cflags = -1;
5654 static int hf_bit12cflags = -1;
5655 static int hf_bit13cflags = -1;
5656 static int hf_bit14cflags = -1;
5657 static int hf_bit15cflags = -1;
5658 static int hf_bit16cflags = -1;
5659 static int hf_bit1acflags = -1;
5660 static int hf_bit2acflags = -1;
5661 static int hf_bit3acflags = -1;
5662 static int hf_bit4acflags = -1;
5663 static int hf_bit5acflags = -1;
5664 static int hf_bit6acflags = -1;
5665 static int hf_bit7acflags = -1;
5666 static int hf_bit8acflags = -1;
5667 static int hf_bit9acflags = -1;
5668 static int hf_bit10acflags = -1;
5669 static int hf_bit11acflags = -1;
5670 static int hf_bit12acflags = -1;
5671 static int hf_bit13acflags = -1;
5672 static int hf_bit14acflags = -1;
5673 static int hf_bit15acflags = -1;
5674 static int hf_bit16acflags = -1;
5675 static int hf_bit1vflags = -1;
5676 static int hf_bit2vflags = -1;
5677 static int hf_bit3vflags = -1;
5678 static int hf_bit4vflags = -1;
5679 static int hf_bit5vflags = -1;
5680 static int hf_bit6vflags = -1;
5681 static int hf_bit7vflags = -1;
5682 static int hf_bit8vflags = -1;
5683 static int hf_bit9vflags = -1;
5684 static int hf_bit10vflags = -1;
5685 static int hf_bit11vflags = -1;
5686 static int hf_bit12vflags = -1;
5687 static int hf_bit13vflags = -1;
5688 static int hf_bit14vflags = -1;
5689 static int hf_bit15vflags = -1;
5690 static int hf_bit16vflags = -1;
5691 static int hf_bit1eflags = -1;
5692 static int hf_bit2eflags = -1;
5693 static int hf_bit3eflags = -1;
5694 static int hf_bit4eflags = -1;
5695 static int hf_bit5eflags = -1;
5696 static int hf_bit6eflags = -1;
5697 static int hf_bit7eflags = -1;
5698 static int hf_bit8eflags = -1;
5699 static int hf_bit9eflags = -1;
5700 static int hf_bit10eflags = -1;
5701 static int hf_bit11eflags = -1;
5702 static int hf_bit12eflags = -1;
5703 static int hf_bit13eflags = -1;
5704 static int hf_bit14eflags = -1;
5705 static int hf_bit15eflags = -1;
5706 static int hf_bit16eflags = -1;
5707 static int hf_bit1infoflagsl = -1;
5708 static int hf_bit2infoflagsl = -1;
5709 static int hf_bit3infoflagsl = -1;
5710 static int hf_bit4infoflagsl = -1;
5711 static int hf_bit5infoflagsl = -1;
5712 static int hf_bit6infoflagsl = -1;
5713 static int hf_bit7infoflagsl = -1;
5714 static int hf_bit8infoflagsl = -1;
5715 static int hf_bit9infoflagsl = -1;
5716 static int hf_bit10infoflagsl = -1;
5717 static int hf_bit11infoflagsl = -1;
5718 static int hf_bit12infoflagsl = -1;
5719 static int hf_bit13infoflagsl = -1;
5720 static int hf_bit14infoflagsl = -1;
5721 static int hf_bit15infoflagsl = -1;
5722 static int hf_bit16infoflagsl = -1;
5723 static int hf_bit1infoflagsh = -1;
5724 static int hf_bit2infoflagsh = -1;
5725 static int hf_bit3infoflagsh = -1;
5726 static int hf_bit4infoflagsh = -1;
5727 static int hf_bit5infoflagsh = -1;
5728 static int hf_bit6infoflagsh = -1;
5729 static int hf_bit7infoflagsh = -1;
5730 static int hf_bit8infoflagsh = -1;
5731 static int hf_bit9infoflagsh = -1;
5732 static int hf_bit10infoflagsh = -1;
5733 static int hf_bit11infoflagsh = -1;
5734 static int hf_bit12infoflagsh = -1;
5735 static int hf_bit13infoflagsh = -1;
5736 static int hf_bit14infoflagsh = -1;
5737 static int hf_bit15infoflagsh = -1;
5738 static int hf_bit16infoflagsh = -1;
5739 static int hf_bit1lflags = -1;
5740 static int hf_bit2lflags = -1;
5741 static int hf_bit3lflags = -1;
5742 static int hf_bit4lflags = -1;
5743 static int hf_bit5lflags = -1;
5744 static int hf_bit6lflags = -1;
5745 static int hf_bit7lflags = -1;
5746 static int hf_bit8lflags = -1;
5747 static int hf_bit9lflags = -1;
5748 static int hf_bit10lflags = -1;
5749 static int hf_bit11lflags = -1;
5750 static int hf_bit12lflags = -1;
5751 static int hf_bit13lflags = -1;
5752 static int hf_bit14lflags = -1;
5753 static int hf_bit15lflags = -1;
5754 static int hf_bit16lflags = -1;
5755 static int hf_bit1l1flagsl = -1;
5756 static int hf_bit2l1flagsl = -1;
5757 static int hf_bit3l1flagsl = -1;
5758 static int hf_bit4l1flagsl = -1;
5759 static int hf_bit5l1flagsl = -1;
5760 static int hf_bit6l1flagsl = -1;
5761 static int hf_bit7l1flagsl = -1;
5762 static int hf_bit8l1flagsl = -1;
5763 static int hf_bit9l1flagsl = -1;
5764 static int hf_bit10l1flagsl = -1;
5765 static int hf_bit11l1flagsl = -1;
5766 static int hf_bit12l1flagsl = -1;
5767 static int hf_bit13l1flagsl = -1;
5768 static int hf_bit14l1flagsl = -1;
5769 static int hf_bit15l1flagsl = -1;
5770 static int hf_bit16l1flagsl = -1;
5771 static int hf_bit1l1flagsh = -1;
5772 static int hf_bit2l1flagsh = -1;
5773 static int hf_bit3l1flagsh = -1;
5774 static int hf_bit4l1flagsh = -1;
5775 static int hf_bit5l1flagsh = -1;
5776 static int hf_bit6l1flagsh = -1;
5777 static int hf_bit7l1flagsh = -1;
5778 static int hf_bit8l1flagsh = -1;
5779 static int hf_bit9l1flagsh = -1;
5780 static int hf_bit10l1flagsh = -1;
5781 static int hf_bit11l1flagsh = -1;
5782 static int hf_bit12l1flagsh = -1;
5783 static int hf_bit13l1flagsh = -1;
5784 static int hf_bit14l1flagsh = -1;
5785 static int hf_bit15l1flagsh = -1;
5786 static int hf_bit16l1flagsh = -1;
5787 static int hf_nds_tree_name = -1;
5788 static int hf_nds_reply_error = -1;
5789 static int hf_nds_net = -1;
5790 static int hf_nds_node = -1;
5791 static int hf_nds_socket = -1;
5792 static int hf_add_ref_ip = -1;
5793 static int hf_add_ref_udp = -1;                                                     
5794 static int hf_add_ref_tcp = -1;
5795 static int hf_referral_record = -1;
5796 static int hf_referral_addcount = -1;
5797 static int hf_nds_port = -1;
5798 static int hf_mv_string = -1;
5799 static int hf_nds_syntax = -1;
5800 static int hf_value_string = -1;
5801 static int hf_nds_buffer_size = -1;
5802 static int hf_nds_ver = -1;
5803 static int hf_nds_nflags = -1;
5804 static int hf_nds_scope = -1;
5805 static int hf_nds_name = -1;
5806 static int hf_nds_comm_trans = -1;
5807 static int hf_nds_tree_trans = -1;
5808 static int hf_nds_iteration = -1;
5809 static int hf_nds_eid = -1;
5810 static int hf_nds_info_type = -1;
5811 static int hf_nds_all_attr = -1;
5812 static int hf_nds_req_flags = -1;
5813 static int hf_nds_attr = -1;
5814 static int hf_nds_crc = -1;
5815 static int hf_nds_referrals = -1;
5816 static int hf_nds_result_flags = -1;
5817 static int hf_nds_tag_string = -1;
5818 static int hf_value_bytes = -1;
5819 static int hf_replica_type = -1;
5820 static int hf_replica_state = -1;
5821 static int hf_replica_number = -1;
5822 static int hf_min_nds_ver = -1;
5823 static int hf_nds_ver_include = -1;
5824 static int hf_nds_ver_exclude = -1;
5825 static int hf_nds_es = -1;
5826 static int hf_es_type = -1;
5827 static int hf_delim_string = -1;
5828 static int hf_rdn_string = -1;
5829 static int hf_nds_revent = -1;
5830 static int hf_nds_rnum = -1; 
5831 static int hf_nds_name_type = -1;
5832 static int hf_nds_rflags = -1;
5833 static int hf_nds_eflags = -1;
5834 static int hf_nds_depth = -1;
5835 static int hf_nds_class_def_type = -1;
5836 static int hf_nds_classes = -1;
5837 static int hf_nds_return_all_classes = -1;
5838 static int hf_nds_stream_flags = -1;
5839 static int hf_nds_stream_name = -1;
5840 static int hf_nds_file_handle = -1;
5841 static int hf_nds_file_size = -1;
5842 static int hf_nds_dn_output_type = -1;
5843 static int hf_nds_nested_output_type = -1;
5844 static int hf_nds_output_delimiter = -1;
5845 static int hf_nds_output_entry_specifier = -1;
5846 static int hf_es_value = -1;
5847 static int hf_es_rdn_count = -1;
5848 static int hf_nds_replica_num = -1;
5849 static int hf_nds_event_num = -1;
5850 static int hf_es_seconds = -1;
5851 static int hf_nds_compare_results = -1;
5852 static int hf_nds_parent = -1;
5853 static int hf_nds_name_filter = -1;
5854 static int hf_nds_class_filter = -1;
5855 static int hf_nds_time_filter = -1;
5856 static int hf_nds_partition_root_id = -1;
5857 static int hf_nds_replicas = -1;
5858 static int hf_nds_purge = -1;
5859 static int hf_nds_local_partition = -1;
5860 static int hf_partition_busy = -1;
5861 static int hf_nds_number_of_changes = -1;
5862 static int hf_sub_count = -1;
5863 static int hf_nds_revision = -1;
5864 static int hf_nds_base_class = -1;
5865 static int hf_nds_relative_dn = -1;
5866 static int hf_nds_root_dn = -1;
5867 static int hf_nds_parent_dn = -1;
5868 static int hf_deref_base = -1;
5869 static int hf_nds_entry_info = -1;
5870 static int hf_nds_base = -1;
5871 static int hf_nds_privileges = -1;
5872 static int hf_nds_vflags = -1;
5873 static int hf_nds_value_len = -1;
5874 static int hf_nds_cflags = -1;
5875 static int hf_nds_acflags = -1;
5876 static int hf_nds_asn1 = -1;
5877 static int hf_nds_upper = -1;
5878 static int hf_nds_lower = -1;
5879 static int hf_nds_trustee_dn = -1;
5880 static int hf_nds_attribute_dn = -1;
5881 static int hf_nds_acl_add = -1;
5882 static int hf_nds_acl_del = -1;
5883 static int hf_nds_att_add = -1;
5884 static int hf_nds_att_del = -1;
5885 static int hf_nds_keep = -1;
5886 static int hf_nds_new_rdn = -1;
5887 static int hf_nds_time_delay = -1;
5888 static int hf_nds_root_name = -1;
5889 static int hf_nds_new_part_id = -1;
5890 static int hf_nds_child_part_id = -1;
5891 static int hf_nds_master_part_id = -1;
5892 static int hf_nds_target_name = -1;
5893 static int hf_nds_super = -1;
5894 static int hf_bit1pingflags2 = -1;
5895 static int hf_bit2pingflags2 = -1;
5896 static int hf_bit3pingflags2 = -1;
5897 static int hf_bit4pingflags2 = -1;
5898 static int hf_bit5pingflags2 = -1;
5899 static int hf_bit6pingflags2 = -1;
5900 static int hf_bit7pingflags2 = -1;
5901 static int hf_bit8pingflags2 = -1;
5902 static int hf_bit9pingflags2 = -1;
5903 static int hf_bit10pingflags2 = -1;
5904 static int hf_bit11pingflags2 = -1;
5905 static int hf_bit12pingflags2 = -1;
5906 static int hf_bit13pingflags2 = -1;
5907 static int hf_bit14pingflags2 = -1;
5908 static int hf_bit15pingflags2 = -1;
5909 static int hf_bit16pingflags2 = -1;
5910 static int hf_bit1pingflags1 = -1;
5911 static int hf_bit2pingflags1 = -1;
5912 static int hf_bit3pingflags1 = -1;
5913 static int hf_bit4pingflags1 = -1;
5914 static int hf_bit5pingflags1 = -1;
5915 static int hf_bit6pingflags1 = -1;
5916 static int hf_bit7pingflags1 = -1;
5917 static int hf_bit8pingflags1 = -1;
5918 static int hf_bit9pingflags1 = -1;
5919 static int hf_bit10pingflags1 = -1;
5920 static int hf_bit11pingflags1 = -1;
5921 static int hf_bit12pingflags1 = -1;
5922 static int hf_bit13pingflags1 = -1;
5923 static int hf_bit14pingflags1 = -1;
5924 static int hf_bit15pingflags1 = -1;
5925 static int hf_bit16pingflags1 = -1;
5926 static int hf_bit1pingpflags1 = -1;
5927 static int hf_bit2pingpflags1 = -1;
5928 static int hf_bit3pingpflags1 = -1;
5929 static int hf_bit4pingpflags1 = -1;
5930 static int hf_bit5pingpflags1 = -1;
5931 static int hf_bit6pingpflags1 = -1;
5932 static int hf_bit7pingpflags1 = -1;
5933 static int hf_bit8pingpflags1 = -1;
5934 static int hf_bit9pingpflags1 = -1;
5935 static int hf_bit10pingpflags1 = -1;
5936 static int hf_bit11pingpflags1 = -1;
5937 static int hf_bit12pingpflags1 = -1;
5938 static int hf_bit13pingpflags1 = -1;
5939 static int hf_bit14pingpflags1 = -1;
5940 static int hf_bit15pingpflags1 = -1;
5941 static int hf_bit16pingpflags1 = -1;
5942 static int hf_bit1pingvflags1 = -1;
5943 static int hf_bit2pingvflags1 = -1;
5944 static int hf_bit3pingvflags1 = -1;
5945 static int hf_bit4pingvflags1 = -1;
5946 static int hf_bit5pingvflags1 = -1;
5947 static int hf_bit6pingvflags1 = -1;
5948 static int hf_bit7pingvflags1 = -1;
5949 static int hf_bit8pingvflags1 = -1;
5950 static int hf_bit9pingvflags1 = -1;
5951 static int hf_bit10pingvflags1 = -1;
5952 static int hf_bit11pingvflags1 = -1;
5953 static int hf_bit12pingvflags1 = -1;
5954 static int hf_bit13pingvflags1 = -1;
5955 static int hf_bit14pingvflags1 = -1;
5956 static int hf_bit15pingvflags1 = -1;
5957 static int hf_bit16pingvflags1 = -1;
5958 static int hf_nds_letter_ver = -1;
5959 static int hf_nds_os_ver = -1;
5960 static int hf_nds_lic_flags = -1;
5961 static int hf_nds_ds_time = -1;
5962 static int hf_nds_ping_version = -1;
5963
5964
5965         """
5966                
5967         # Look at all packet types in the packets collection, and cull information
5968         # from them.
5969         errors_used_list = []
5970         errors_used_hash = {}
5971         groups_used_list = []
5972         groups_used_hash = {}
5973         variables_used_hash = {}
5974         structs_used_hash = {}
5975
5976         for pkt in packets:
5977                 # Determine which error codes are used.
5978                 codes = pkt.CompletionCodes()
5979                 for code in codes.Records():
5980                         if not errors_used_hash.has_key(code):
5981                                 errors_used_hash[code] = len(errors_used_list)
5982                                 errors_used_list.append(code)
5983
5984                 # Determine which groups are used.
5985                 group = pkt.Group()
5986                 if not groups_used_hash.has_key(group):
5987                         groups_used_hash[group] = len(groups_used_list)
5988                         groups_used_list.append(group)
5989
5990                 # Determine which variables are used.
5991                 vars = pkt.Variables()
5992                 ExamineVars(vars, structs_used_hash, variables_used_hash)
5993
5994
5995         # Print the hf variable declarations
5996         sorted_vars = variables_used_hash.values()
5997         sorted_vars.sort()
5998         for var in sorted_vars:
5999                 print "static int " + var.HFName() + " = -1;"
6000
6001
6002         # Print the value_string's
6003         for var in sorted_vars:
6004                 if isinstance(var, val_string):
6005                         print ""
6006                         print var.Code()
6007                            
6008         # Determine which error codes are not used
6009         errors_not_used = {}
6010         # Copy the keys from the error list...
6011         for code in errors.keys():
6012                 errors_not_used[code] = 1
6013         # ... and remove the ones that *were* used.
6014         for code in errors_used_list:
6015                 del errors_not_used[code]
6016
6017         # Print a remark showing errors not used
6018         list_errors_not_used = errors_not_used.keys()
6019         list_errors_not_used.sort()
6020         for code in list_errors_not_used:
6021                 print "/* Error 0x%04x not used: %s */" % (code, errors[code])
6022         print "\n"
6023
6024         # Print the errors table
6025         print "/* Error strings. */"
6026         print "static const char *ncp_errors[] = {"
6027         for code in errors_used_list:
6028                 print '\t/* %02d (0x%04x) */ "%s",' % (errors_used_hash[code], code, errors[code])
6029         print "};\n"
6030
6031
6032
6033
6034         # Determine which groups are not used
6035         groups_not_used = {}
6036         # Copy the keys from the group list...
6037         for group in groups.keys():
6038                 groups_not_used[group] = 1
6039         # ... and remove the ones that *were* used.
6040         for group in groups_used_list:
6041                 del groups_not_used[group]
6042
6043         # Print a remark showing groups not used
6044         list_groups_not_used = groups_not_used.keys()
6045         list_groups_not_used.sort()
6046         for group in list_groups_not_used:
6047                 print "/* Group not used: %s = %s */" % (group, groups[group])
6048         print "\n"
6049
6050         # Print the groups table
6051         print "/* Group strings. */"
6052         print "static const char *ncp_groups[] = {"
6053         for group in groups_used_list:
6054                 print '\t/* %02d (%s) */ "%s",' % (groups_used_hash[group], group, groups[group])
6055         print "};\n"
6056
6057         # Print the group macros
6058         for group in groups_used_list:
6059                 name = string.upper(group)
6060                 print "#define NCP_GROUP_%s\t%d" % (name, groups_used_hash[group])
6061         print "\n"
6062
6063
6064         # Print the conditional_records for all Request Conditions.
6065         num = 0
6066         print "/* Request-Condition dfilter records. The NULL pointer"
6067         print "   is replaced by a pointer to the created dfilter_t. */"
6068         if len(global_req_cond) == 0:
6069                 print "static conditional_record req_conds = NULL;"
6070         else:
6071                 print "static conditional_record req_conds[] = {"
6072                 for req_cond in global_req_cond.keys():
6073                         print "\t{ \"%s\", NULL }," % (req_cond,)
6074                         global_req_cond[req_cond] = num
6075                         num = num + 1
6076                 print "};"
6077         print "#define NUM_REQ_CONDS %d" % (num,)
6078         print "#define NO_REQ_COND   NUM_REQ_CONDS\n\n"
6079
6080
6081
6082         # Print PTVC's for bitfields
6083         ett_list = []
6084         print "/* PTVC records for bit-fields. */"
6085         for var in sorted_vars:
6086                 if isinstance(var, bitfield):
6087                         sub_vars_ptvc = var.SubVariablesPTVC()
6088                         print "/* %s */" % (sub_vars_ptvc.Name())
6089                         print sub_vars_ptvc.Code()
6090                         ett_list.append(sub_vars_ptvc.ETTName())
6091
6092
6093         # Print the PTVC's for structures
6094         print "/* PTVC records for structs. */"
6095         # Sort them
6096         svhash = {}
6097         for svar in structs_used_hash.values():
6098                 svhash[svar.HFName()] = svar
6099                 if svar.descr:
6100                         ett_list.append(svar.ETTName())
6101
6102         struct_vars = svhash.keys()
6103         struct_vars.sort()
6104         for varname in struct_vars:
6105                 var = svhash[varname]
6106                 print var.Code()
6107
6108         ett_list.sort()
6109
6110         # Print regular PTVC's
6111         print "/* PTVC records. These are re-used to save space. */"
6112         for ptvc in ptvc_lists.Members():
6113                 if not ptvc.Null() and not ptvc.Empty():
6114                         print ptvc.Code()
6115
6116         # Print error_equivalency tables
6117         print "/* Error-Equivalency Tables. These are re-used to save space. */"
6118         for compcodes in compcode_lists.Members():
6119                 errors = compcodes.Records()
6120                 # Make sure the record for error = 0x00 comes last.
6121                 print "static const error_equivalency %s[] = {" % (compcodes.Name())
6122                 for error in errors:
6123                         error_in_packet = error >> 8;
6124                         ncp_error_index = errors_used_hash[error]
6125                         print "\t{ 0x%02x, %d }, /* 0x%04x */" % (error_in_packet,
6126                                 ncp_error_index, error)
6127                 print "\t{ 0x00, -1 }\n};\n"
6128
6129
6130
6131         # Print integer arrays for all ncp_records that need
6132         # a list of req_cond_indexes. Do it "uniquely" to save space;
6133         # if multiple packets share the same set of req_cond's,
6134         # then they'll share the same integer array
6135         print "/* Request Condition Indexes */"
6136         # First, make them unique
6137         req_cond_collection = UniqueCollection("req_cond_collection")
6138         for pkt in packets:
6139                 req_conds = pkt.CalculateReqConds()
6140                 if req_conds:
6141                         unique_list = req_cond_collection.Add(req_conds)
6142                         pkt.SetReqConds(unique_list)
6143                 else:
6144                         pkt.SetReqConds(None)
6145
6146         # Print them
6147         for req_cond in req_cond_collection.Members():
6148                 print "static const int %s[] = {" % (req_cond.Name(),)
6149                 print "\t",
6150                 vals = []
6151                 for text in req_cond.Records():
6152                         vals.append(global_req_cond[text])
6153                 vals.sort()
6154                 for val in vals:
6155                         print "%s, " % (val,),
6156
6157                 print "-1 };"
6158                 print ""    
6159
6160
6161
6162         # Functions without length parameter
6163         funcs_without_length = {}
6164
6165         # Print info string structures
6166         print "/* Info Strings */"
6167         for pkt in packets:
6168                 if pkt.req_info_str:
6169                         name = pkt.InfoStrName() + "_req"
6170                         var = pkt.req_info_str[0]
6171                         print "static const info_string_t %s = {" % (name,)
6172                         print "\t&%s," % (var.HFName(),)
6173                         print '\t"%s",' % (pkt.req_info_str[1],)
6174                         print '\t"%s"' % (pkt.req_info_str[2],)
6175                         print "};\n"
6176
6177
6178
6179         # Print ncp_record packet records
6180         print "#define SUBFUNC_WITH_LENGTH      0x02"
6181         print "#define SUBFUNC_NO_LENGTH        0x01"
6182         print "#define NO_SUBFUNC               0x00"
6183
6184         print "/* ncp_record structs for packets */"
6185         print "static const ncp_record ncp_packets[] = {" 
6186         for pkt in packets:
6187                 if pkt.HasSubFunction():
6188                         func = pkt.FunctionCode('high')
6189                         if pkt.HasLength():
6190                                 subfunc_string = "SUBFUNC_WITH_LENGTH"
6191                                 # Ensure that the function either has a length param or not
6192                                 if funcs_without_length.has_key(func):
6193                                         sys.exit("Function 0x%04x sometimes has length param, sometimes not." \
6194                                                 % (pkt.FunctionCode(),))
6195                         else:
6196                                 subfunc_string = "SUBFUNC_NO_LENGTH"
6197                                 funcs_without_length[func] = 1
6198                 else:
6199                         subfunc_string = "NO_SUBFUNC"
6200                 print '\t{ 0x%02x, 0x%02x, %s, "%s",' % (pkt.FunctionCode('high'),
6201                         pkt.FunctionCode('low'), subfunc_string, pkt.Description()),
6202
6203                 print '\t%d /* %s */,' % (groups_used_hash[pkt.Group()], pkt.Group())
6204
6205                 ptvc = pkt.PTVCRequest()
6206                 if not ptvc.Null() and not ptvc.Empty():
6207                         ptvc_request = ptvc.Name()
6208                 else:
6209                         ptvc_request = 'NULL'
6210
6211                 ptvc = pkt.PTVCReply()
6212                 if not ptvc.Null() and not ptvc.Empty():
6213                         ptvc_reply = ptvc.Name()
6214                 else:
6215                         ptvc_reply = 'NULL'
6216
6217                 errors = pkt.CompletionCodes()
6218
6219                 req_conds_obj = pkt.GetReqConds()
6220                 if req_conds_obj:
6221                         req_conds = req_conds_obj.Name()
6222                 else:
6223                         req_conds = "NULL"
6224
6225                 if not req_conds_obj:
6226                         req_cond_size = "NO_REQ_COND_SIZE"
6227                 else:
6228                         req_cond_size = pkt.ReqCondSize()
6229                         if req_cond_size == None:
6230                                 msg.write("NCP packet %s nees a ReqCondSize*() call\n" \
6231                                         % (pkt.CName(),))
6232                                 sys.exit(1)
6233                 
6234                 if pkt.req_info_str:
6235                         req_info_str = "&" + pkt.InfoStrName() + "_req"
6236                 else:
6237                         req_info_str = "NULL"
6238
6239                 print '\t\t%s, %s, %s, %s, %s, %s },\n' % \
6240                         (ptvc_request, ptvc_reply, errors.Name(), req_conds,
6241                         req_cond_size, req_info_str)
6242
6243         print '\t{ 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NO_REQ_COND_SIZE, NULL }'
6244         print "};\n"
6245
6246         print "/* ncp funcs that require a subfunc */"
6247         print "static const guint8 ncp_func_requires_subfunc[] = {"
6248         hi_seen = {}
6249         for pkt in packets:
6250                 if pkt.HasSubFunction():
6251                         hi_func = pkt.FunctionCode('high')
6252                         if not hi_seen.has_key(hi_func):
6253                                 print "\t0x%02x," % (hi_func)
6254                                 hi_seen[hi_func] = 1
6255         print "\t0"
6256         print "};\n"
6257
6258
6259         print "/* ncp funcs that have no length parameter */"
6260         print "static const guint8 ncp_func_has_no_length_parameter[] = {"
6261         funcs = funcs_without_length.keys()
6262         funcs.sort()
6263         for func in funcs:
6264                 print "\t0x%02x," % (func,)
6265         print "\t0"
6266         print "};\n"
6267
6268         # final_registration_ncp2222()
6269         print """
6270 void
6271 final_registration_ncp2222(void)
6272 {
6273         int i;
6274         """
6275
6276         # Create dfilter_t's for conditional_record's  
6277         print """
6278         for (i = 0; i < NUM_REQ_CONDS; i++) {
6279                 if (!dfilter_compile((const gchar*)req_conds[i].dfilter_text,
6280                         &req_conds[i].dfilter)) {
6281                         g_message("NCP dissector failed to compiler dfilter: %s\\n",
6282                         req_conds[i].dfilter_text);
6283                         g_assert_not_reached();
6284                 }
6285         }
6286 }
6287         """
6288
6289         # proto_register_ncp2222()
6290         print """
6291 static const value_string ncp_nds_verb_vals[] = {
6292         { 1, "Resolve Name" },
6293         { 2, "Read Entry Information" },
6294         { 3, "Read" },
6295         { 4, "Compare" },
6296         { 5, "List" },
6297         { 6, "Search Entries" },
6298         { 7, "Add Entry" },
6299         { 8, "Remove Entry" },
6300         { 9, "Modify Entry" },
6301         { 10, "Modify RDN" },
6302         { 11, "Create Attribute" },
6303         { 12, "Read Attribute Definition" },
6304         { 13, "Remove Attribute Definition" },
6305         { 14, "Define Class" },
6306         { 15, "Read Class Definition" },
6307         { 16, "Modify Class Definition" },
6308         { 17, "Remove Class Definition" },
6309         { 18, "List Containable Classes" },
6310         { 19, "Get Effective Rights" },
6311         { 20, "Add Partition" },
6312         { 21, "Remove Partition" },
6313         { 22, "List Partitions" },
6314         { 23, "Split Partition" },
6315         { 24, "Join Partitions" },
6316         { 25, "Add Replica" },
6317         { 26, "Remove Replica" },
6318         { 27, "Open Stream" },
6319         { 28, "Search Filter" },
6320         { 29, "Create Subordinate Reference" },
6321         { 30, "Link Replica" },
6322         { 31, "Change Replica Type" },
6323         { 32, "Start Update Schema" },
6324         { 33, "End Update Schema" },
6325         { 34, "Update Schema" },
6326         { 35, "Start Update Replica" },
6327         { 36, "End Update Replica" },
6328         { 37, "Update Replica" },
6329         { 38, "Synchronize Partition" },
6330         { 39, "Synchronize Schema" },
6331         { 40, "Read Syntaxes" },
6332         { 41, "Get Replica Root ID" },
6333         { 42, "Begin Move Entry" },
6334         { 43, "Finish Move Entry" },
6335         { 44, "Release Moved Entry" },
6336         { 45, "Backup Entry" },
6337         { 46, "Restore Entry" },
6338         { 47, "Save DIB" },
6339         { 50, "Close Iteration" },
6340         { 51, "Unused" },
6341         { 52, "Audit Skulking" },
6342         { 53, "Get Server Address" },
6343         { 54, "Set Keys" },
6344         { 55, "Change Password" },
6345         { 56, "Verify Password" },
6346         { 57, "Begin Login" },
6347         { 58, "Finish Login" },
6348         { 59, "Begin Authentication" },
6349         { 60, "Finish Authentication" },
6350         { 61, "Logout" },
6351         { 62, "Repair Ring" },
6352         { 63, "Repair Timestamps" },
6353         { 64, "Create Back Link" },
6354         { 65, "Delete External Reference" },
6355         { 66, "Rename External Reference" },
6356         { 67, "Create Directory Entry" },
6357         { 68, "Remove Directory Entry" },
6358         { 69, "Designate New Master" },
6359         { 70, "Change Tree Name" },
6360         { 71, "Partition Entry Count" },
6361         { 72, "Check Login Restrictions" },
6362         { 73, "Start Join" },
6363         { 74, "Low Level Split" },
6364         { 75, "Low Level Join" },
6365         { 76, "Abort Low Level Join" },
6366         { 77, "Get All Servers" },
6367         { 255, "EDirectory Call" },
6368         { 0,  NULL }
6369 };
6370
6371 void
6372 proto_register_ncp2222(void)
6373 {
6374
6375         static hf_register_info hf[] = {
6376         { &hf_ncp_func,
6377         { "Function", "ncp.func", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6378
6379         { &hf_ncp_length,
6380         { "Packet Length", "ncp.length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
6381
6382         { &hf_ncp_subfunc,
6383         { "SubFunction", "ncp.subfunc", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6384
6385         { &hf_ncp_completion_code,
6386         { "Completion Code", "ncp.completion_code", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6387
6388         { &hf_ncp_fragment_handle,
6389         { "NDS Fragment Handle", "ncp.ndsfrag", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6390         
6391         { &hf_ncp_fragment_size,
6392         { "NDS Fragment Size", "ncp.ndsfragsize", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6393
6394         { &hf_ncp_message_size,
6395         { "Message Size", "ncp.ndsmessagesize", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6396         
6397         { &hf_ncp_nds_flag,
6398         { "Flags", "ncp.ndsflag", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6399         
6400         { &hf_ncp_nds_verb,      
6401         { "NDS Verb", "ncp.ndsverb", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6402         
6403         { &hf_ping_version,
6404         { "NDS Version", "ncp.ping_version", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
6405         
6406         { &hf_nds_version,
6407         { "NDS Version", "ncp.nds_version", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6408         
6409         { &hf_nds_tree_name,                             
6410         { "Tree Name", "ncp.nds_tree_name", FT_STRING, BASE_DEC, NULL, 0x0, "", HFILL }},
6411                         
6412         /*
6413          * XXX - the page at
6414          *
6415          *      http://www.odyssea.com/whats_new/tcpipnet/tcpipnet.html
6416          *
6417          * says of the connection status "The Connection Code field may
6418          * contain values that indicate the status of the client host to
6419          * server connection.  A value of 1 in the fourth bit of this data
6420          * byte indicates that the server is unavailable (server was
6421          * downed).
6422          *
6423          * The page at
6424          *
6425          *      http://www.unm.edu/~network/presentations/course/appendix/appendix_f/tsld088.htm
6426          *
6427          * says that bit 0 is "bad service", bit 2 is "no connection
6428          * available", bit 4 is "service down", and bit 6 is "server
6429          * has a broadcast message waiting for the client".
6430          *
6431          * Should it be displayed in hex, and should those bits (and any
6432          * other bits with significance) be displayed as bitfields
6433          * underneath it?
6434          */
6435         { &hf_ncp_connection_status,
6436         { "Connection Status", "ncp.connection_status", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }},
6437
6438         { &hf_ncp_req_frame_num,
6439         { "Response to Request in Frame Number", "ncp.req_frame_num", FT_UINT32, BASE_DEC,
6440                 NULL, 0x0, "", HFILL }},
6441         
6442         { &hf_ncp_req_frame_time,
6443         { "Time from Request", "ncp.time", FT_RELATIVE_TIME, BASE_NONE,
6444                 NULL, 0x0, "Time between request and response in seconds", HFILL }},
6445         
6446         { &hf_nds_flags, 
6447         { "NDS Return Flags", "ncp.nds_flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6448         
6449        
6450         { &hf_nds_reply_depth,
6451         { "Distance from Root", "ncp.ndsdepth", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6452         
6453         { &hf_nds_reply_rev,
6454         { "NDS Revision", "ncp.ndsrev", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6455         
6456         { &hf_nds_reply_flags,
6457         { "Flags", "ncp.ndsflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6458         
6459         { &hf_nds_p1type, 
6460         { "NDS Parameter Type", "ncp.p1type", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }},
6461         
6462         { &hf_nds_uint32value, 
6463         { "NDS Value", "ncp.uint32value", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6464
6465         { &hf_nds_bit1, 
6466         { "Typeless", "ncp.nds_bit1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6467
6468         { &hf_nds_bit2, 
6469         { "All Containers", "ncp.nds_bit2", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6470                      
6471         { &hf_nds_bit3, 
6472         { "Slashed", "ncp.nds_bit3", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6473         
6474         { &hf_nds_bit4, 
6475         { "Dotted", "ncp.nds_bit4", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6476         
6477         { &hf_nds_bit5, 
6478         { "Tuned", "ncp.nds_bit5", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6479         
6480         { &hf_nds_bit6, 
6481         { "Not Defined", "ncp.nds_bit6", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6482         
6483         { &hf_nds_bit7, 
6484         { "Not Defined", "ncp.nds_bit7", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6485         
6486         { &hf_nds_bit8, 
6487         { "Not Defined", "ncp.nds_bit8", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6488         
6489         { &hf_nds_bit9, 
6490         { "Not Defined", "ncp.nds_bit9", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6491         
6492         { &hf_nds_bit10, 
6493         { "Not Defined", "ncp.nds_bit10", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6494         
6495         { &hf_nds_bit11, 
6496         { "Not Defined", "ncp.nds_bit11", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6497         
6498         { &hf_nds_bit12, 
6499         { "Not Defined", "ncp.nds_bit12", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6500         
6501         { &hf_nds_bit13, 
6502         { "Not Defined", "ncp.nds_bit13", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6503         
6504         { &hf_nds_bit14, 
6505         { "Not Defined", "ncp.nds_bit14", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6506         
6507         { &hf_nds_bit15, 
6508         { "Not Defined", "ncp.nds_bit15", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6509         
6510         { &hf_nds_bit16, 
6511         { "Not Defined", "ncp.nds_bit16", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6512         
6513         { &hf_bit1outflags, 
6514         { "Output Flags", "ncp.bit1outflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6515
6516         { &hf_bit2outflags, 
6517         { "Entry ID", "ncp.bit2outflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6518                      
6519         { &hf_bit3outflags, 
6520         { "Replica State", "ncp.bit3outflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6521         
6522         { &hf_bit4outflags, 
6523         { "Modification Timestamp", "ncp.bit4outflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6524         
6525         { &hf_bit5outflags, 
6526         { "Purge Time", "ncp.bit5outflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6527         
6528         { &hf_bit6outflags, 
6529         { "Local Partition ID", "ncp.bit6outflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6530         
6531         { &hf_bit7outflags, 
6532         { "Distinguished Name", "ncp.bit7outflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6533         
6534         { &hf_bit8outflags, 
6535         { "Replica Type", "ncp.bit8outflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6536         
6537         { &hf_bit9outflags, 
6538         { "Partition Busy", "ncp.bit9outflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6539         
6540         { &hf_bit10outflags, 
6541         { "Not Defined", "ncp.bit10outflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6542         
6543         { &hf_bit11outflags, 
6544         { "Not Defined", "ncp.bit11outflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6545         
6546         { &hf_bit12outflags, 
6547         { "Not Defined", "ncp.bit12outflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6548         
6549         { &hf_bit13outflags, 
6550         { "Not Defined", "ncp.bit13outflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6551         
6552         { &hf_bit14outflags, 
6553         { "Not Defined", "ncp.bit14outflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6554         
6555         { &hf_bit15outflags, 
6556         { "Not Defined", "ncp.bit15outflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6557         
6558         { &hf_bit16outflags, 
6559         { "Not Defined", "ncp.bit16outflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6560         
6561         { &hf_bit1nflags, 
6562         { "Entry ID", "ncp.bit1nflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6563
6564         { &hf_bit2nflags, 
6565         { "Readable", "ncp.bit2nflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6566                      
6567         { &hf_bit3nflags, 
6568         { "Writeable", "ncp.bit3nflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6569         
6570         { &hf_bit4nflags, 
6571         { "Master", "ncp.bit4nflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6572         
6573         { &hf_bit5nflags, 
6574         { "Create ID", "ncp.bit5nflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6575         
6576         { &hf_bit6nflags, 
6577         { "Walk Tree", "ncp.bit6nflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6578         
6579         { &hf_bit7nflags, 
6580         { "Dereference Alias", "ncp.bit7nflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6581         
6582         { &hf_bit8nflags, 
6583         { "Not Defined", "ncp.bit8nflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6584         
6585         { &hf_bit9nflags, 
6586         { "Not Defined", "ncp.bit9nflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6587         
6588         { &hf_bit10nflags, 
6589         { "Not Defined", "ncp.bit10nflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6590         
6591         { &hf_bit11nflags, 
6592         { "Not Defined", "ncp.bit11nflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6593         
6594         { &hf_bit12nflags, 
6595         { "Not Defined", "ncp.bit12nflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6596         
6597         { &hf_bit13nflags, 
6598         { "Not Defined", "ncp.bit13nflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6599         
6600         { &hf_bit14nflags, 
6601         { "Prefer Referrals", "ncp.bit14nflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6602         
6603         { &hf_bit15nflags, 
6604         { "Prefer Only Referrals", "ncp.bit15nflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6605         
6606         { &hf_bit16nflags, 
6607         { "Not Defined", "ncp.bit16nflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6608         
6609         { &hf_bit1rflags, 
6610         { "Typeless", "ncp.bit1rflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6611
6612         { &hf_bit2rflags, 
6613         { "Slashed", "ncp.bit2rflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6614                      
6615         { &hf_bit3rflags, 
6616         { "Dotted", "ncp.bit3rflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6617         
6618         { &hf_bit4rflags, 
6619         { "Tuned", "ncp.bit4rflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6620         
6621         { &hf_bit5rflags, 
6622         { "Not Defined", "ncp.bit5rflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6623         
6624         { &hf_bit6rflags, 
6625         { "Not Defined", "ncp.bit6rflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6626         
6627         { &hf_bit7rflags, 
6628         { "Not Defined", "ncp.bit7rflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6629         
6630         { &hf_bit8rflags, 
6631         { "Not Defined", "ncp.bit8rflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6632         
6633         { &hf_bit9rflags, 
6634         { "Not Defined", "ncp.bit9rflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6635         
6636         { &hf_bit10rflags, 
6637         { "Not Defined", "ncp.bit10rflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6638         
6639         { &hf_bit11rflags, 
6640         { "Not Defined", "ncp.bit11rflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6641         
6642         { &hf_bit12rflags, 
6643         { "Not Defined", "ncp.bit12rflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6644         
6645         { &hf_bit13rflags, 
6646         { "Not Defined", "ncp.bit13rflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6647         
6648         { &hf_bit14rflags, 
6649         { "Not Defined", "ncp.bit14rflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6650         
6651         { &hf_bit15rflags, 
6652         { "Not Defined", "ncp.bit15rflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6653         
6654         { &hf_bit16rflags, 
6655         { "Not Defined", "ncp.bit16rflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6656         
6657         { &hf_bit1eflags, 
6658         { "Alias Entry", "ncp.bit1eflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6659
6660         { &hf_bit2eflags, 
6661         { "Partition Root", "ncp.bit2eflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6662                      
6663         { &hf_bit3eflags, 
6664         { "Container Entry", "ncp.bit3eflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6665         
6666         { &hf_bit4eflags, 
6667         { "Container Alias", "ncp.bit4eflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6668         
6669         { &hf_bit5eflags, 
6670         { "Matches List Filter", "ncp.bit5eflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6671         
6672         { &hf_bit6eflags, 
6673         { "Reference Entry", "ncp.bit6eflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6674         
6675         { &hf_bit7eflags, 
6676         { "40x Reference Entry", "ncp.bit7eflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6677         
6678         { &hf_bit8eflags, 
6679         { "Back Linked", "ncp.bit8eflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6680         
6681         { &hf_bit9eflags, 
6682         { "New Entry", "ncp.bit9eflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6683         
6684         { &hf_bit10eflags, 
6685         { "Temporary Reference", "ncp.bit10eflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6686         
6687         { &hf_bit11eflags, 
6688         { "Audited", "ncp.bit11eflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6689         
6690         { &hf_bit12eflags, 
6691         { "Entry Not Present", "ncp.bit12eflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6692         
6693         { &hf_bit13eflags, 
6694         { "Entry Verify CTS", "ncp.bit13eflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6695         
6696         { &hf_bit14eflags, 
6697         { "Entry Damaged", "ncp.bit14eflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6698         
6699         { &hf_bit15eflags, 
6700         { "Not Defined", "ncp.bit15rflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6701         
6702         { &hf_bit16eflags, 
6703         { "Not Defined", "ncp.bit16rflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6704
6705         { &hf_bit1infoflagsl, 
6706         { "Output Flags", "ncp.bit1infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6707
6708         { &hf_bit2infoflagsl, 
6709         { "Entry ID", "ncp.bit2infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6710                      
6711         { &hf_bit3infoflagsl, 
6712         { "Entry Flags", "ncp.bit3infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6713         
6714         { &hf_bit4infoflagsl, 
6715         { "Subordinate Count", "ncp.bit4infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6716         
6717         { &hf_bit5infoflagsl, 
6718         { "Modification Time", "ncp.bit5infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6719         
6720         { &hf_bit6infoflagsl, 
6721         { "Modification Timestamp", "ncp.bit6infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6722         
6723         { &hf_bit7infoflagsl, 
6724         { "Creation Timestamp", "ncp.bit7infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6725         
6726         { &hf_bit8infoflagsl, 
6727         { "Partition Root ID", "ncp.bit8infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6728         
6729         { &hf_bit9infoflagsl, 
6730         { "Parent ID", "ncp.bit9infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6731         
6732         { &hf_bit10infoflagsl, 
6733         { "Revision Count", "ncp.bit10infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6734         
6735         { &hf_bit11infoflagsl, 
6736         { "Replica Type", "ncp.bit11infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6737         
6738         { &hf_bit12infoflagsl, 
6739         { "Base Class", "ncp.bit12infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6740         
6741         { &hf_bit13infoflagsl, 
6742         { "Relative Distinguished Name", "ncp.bit13infoflagsl", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6743         
6744         { &hf_bit14infoflagsl, 
6745         { "Distinguished Name", "ncp.bit14infoflagsl", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6746         
6747         { &hf_bit15infoflagsl, 
6748         { "Root Distinguished Name", "ncp.bit15infoflagsl", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6749         
6750         { &hf_bit16infoflagsl, 
6751         { "Parent Distinguished Name", "ncp.bit16infoflagsl", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6752
6753         { &hf_bit1infoflagsh, 
6754         { "Purge Time", "ncp.bit1infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6755
6756         { &hf_bit2infoflagsh, 
6757         { "Dereference Base Class", "ncp.bit2infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6758                      
6759         { &hf_bit3infoflagsh, 
6760         { "Not Defined", "ncp.bit3infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6761         
6762         { &hf_bit4infoflagsh, 
6763         { "Not Defined", "ncp.bit4infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6764         
6765         { &hf_bit5infoflagsh, 
6766         { "Not Defined", "ncp.bit5infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6767         
6768         { &hf_bit6infoflagsh, 
6769         { "Not Defined", "ncp.bit6infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6770         
6771         { &hf_bit7infoflagsh, 
6772         { "Not Defined", "ncp.bit7infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6773         
6774         { &hf_bit8infoflagsh, 
6775         { "Not Defined", "ncp.bit8infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6776         
6777         { &hf_bit9infoflagsh, 
6778         { "Not Defined", "ncp.bit9infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6779         
6780         { &hf_bit10infoflagsh, 
6781         { "Not Defined", "ncp.bit10infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6782         
6783         { &hf_bit11infoflagsh, 
6784         { "Not Defined", "ncp.bit11infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6785         
6786         { &hf_bit12infoflagsh, 
6787         { "Not Defined", "ncp.bit12infoflagshs", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6788         
6789         { &hf_bit13infoflagsh, 
6790         { "Not Defined", "ncp.bit13infoflagsh", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6791         
6792         { &hf_bit14infoflagsh, 
6793         { "Not Defined", "ncp.bit14infoflagsh", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6794         
6795         { &hf_bit15infoflagsh, 
6796         { "Not Defined", "ncp.bit15infoflagsh", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6797         
6798         { &hf_bit16infoflagsh, 
6799         { "Not Defined", "ncp.bit16infoflagsh", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6800         
6801         { &hf_bit1lflags, 
6802         { "List Typeless", "ncp.bit1lflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6803
6804         { &hf_bit2lflags, 
6805         { "List Containers", "ncp.bit2lflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6806                      
6807         { &hf_bit3lflags, 
6808         { "List Slashed", "ncp.bit3lflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6809         
6810         { &hf_bit4lflags, 
6811         { "List Dotted", "ncp.bit4lflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6812         
6813         { &hf_bit5lflags, 
6814         { "Dereference Alias", "ncp.bit5lflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6815         
6816         { &hf_bit6lflags, 
6817         { "List All Containers", "ncp.bit6lflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6818         
6819         { &hf_bit7lflags, 
6820         { "List Obsolete", "ncp.bit7lflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6821         
6822         { &hf_bit8lflags, 
6823         { "List Tuned Output", "ncp.bit8lflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6824         
6825         { &hf_bit9lflags, 
6826         { "List External Reference", "ncp.bit9lflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6827         
6828         { &hf_bit10lflags, 
6829         { "Not Defined", "ncp.bit10lflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6830         
6831         { &hf_bit11lflags, 
6832         { "Not Defined", "ncp.bit11lflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6833         
6834         { &hf_bit12lflags, 
6835         { "Not Defined", "ncp.bit12lflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6836         
6837         { &hf_bit13lflags, 
6838         { "Not Defined", "ncp.bit13lflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6839         
6840         { &hf_bit14lflags, 
6841         { "Not Defined", "ncp.bit14lflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6842         
6843         { &hf_bit15lflags, 
6844         { "Not Defined", "ncp.bit15lflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6845         
6846         { &hf_bit16lflags, 
6847         { "Not Defined", "ncp.bit16lflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6848         
6849         { &hf_bit1l1flagsl, 
6850         { "Output Flags", "ncp.bit1l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6851
6852         { &hf_bit2l1flagsl, 
6853         { "Entry ID", "ncp.bit2l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6854                      
6855         { &hf_bit3l1flagsl, 
6856         { "Replica State", "ncp.bit3l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6857         
6858         { &hf_bit4l1flagsl, 
6859         { "Modification Timestamp", "ncp.bit4l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6860         
6861         { &hf_bit5l1flagsl, 
6862         { "Purge Time", "ncp.bit5l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6863         
6864         { &hf_bit6l1flagsl, 
6865         { "Local Partition ID", "ncp.bit6l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6866         
6867         { &hf_bit7l1flagsl, 
6868         { "Distinguished Name", "ncp.bit7l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6869         
6870         { &hf_bit8l1flagsl, 
6871         { "Replica Type", "ncp.bit8l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6872         
6873         { &hf_bit9l1flagsl, 
6874         { "Partition Busy", "ncp.bit9l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6875         
6876         { &hf_bit10l1flagsl, 
6877         { "Not Defined", "ncp.bit10l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6878         
6879         { &hf_bit11l1flagsl, 
6880         { "Not Defined", "ncp.bit11l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6881         
6882         { &hf_bit12l1flagsl, 
6883         { "Not Defined", "ncp.bit12l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6884         
6885         { &hf_bit13l1flagsl, 
6886         { "Not Defined", "ncp.bit13l1flagsl", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6887         
6888         { &hf_bit14l1flagsl, 
6889         { "Not Defined", "ncp.bit14l1flagsl", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6890         
6891         { &hf_bit15l1flagsl, 
6892         { "Not Defined", "ncp.bit15l1flagsl", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6893         
6894         { &hf_bit16l1flagsl, 
6895         { "Not Defined", "ncp.bit16l1flagsl", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6896
6897         { &hf_bit1l1flagsh, 
6898         { "Not Defined", "ncp.bit1l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6899
6900         { &hf_bit2l1flagsh, 
6901         { "Not Defined", "ncp.bit2l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6902                      
6903         { &hf_bit3l1flagsh, 
6904         { "Not Defined", "ncp.bit3l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6905         
6906         { &hf_bit4l1flagsh, 
6907         { "Not Defined", "ncp.bit4l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6908         
6909         { &hf_bit5l1flagsh, 
6910         { "Not Defined", "ncp.bit5l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6911         
6912         { &hf_bit6l1flagsh, 
6913         { "Not Defined", "ncp.bit6l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6914         
6915         { &hf_bit7l1flagsh, 
6916         { "Not Defined", "ncp.bit7l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6917         
6918         { &hf_bit8l1flagsh, 
6919         { "Not Defined", "ncp.bit8l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6920         
6921         { &hf_bit9l1flagsh, 
6922         { "Not Defined", "ncp.bit9l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6923         
6924         { &hf_bit10l1flagsh, 
6925         { "Not Defined", "ncp.bit10l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6926         
6927         { &hf_bit11l1flagsh, 
6928         { "Not Defined", "ncp.bit11l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6929         
6930         { &hf_bit12l1flagsh, 
6931         { "Not Defined", "ncp.bit12l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6932         
6933         { &hf_bit13l1flagsh, 
6934         { "Not Defined", "ncp.bit13l1flagsh", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6935         
6936         { &hf_bit14l1flagsh, 
6937         { "Not Defined", "ncp.bit14l1flagsh", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6938         
6939         { &hf_bit15l1flagsh, 
6940         { "Not Defined", "ncp.bit15l1flagsh", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6941         
6942         { &hf_bit16l1flagsh, 
6943         { "Not Defined", "ncp.bit16l1flagsh", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6944         
6945         { &hf_bit1vflags, 
6946         { "Naming", "ncp.bit1vflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6947
6948         { &hf_bit2vflags, 
6949         { "Base Class", "ncp.bit2vflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6950                      
6951         { &hf_bit3vflags, 
6952         { "Present", "ncp.bit3vflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6953         
6954         { &hf_bit4vflags, 
6955         { "Value Damaged", "ncp.bit4vflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6956         
6957         { &hf_bit5vflags, 
6958         { "Not Defined", "ncp.bit5vflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6959         
6960         { &hf_bit6vflags, 
6961         { "Not Defined", "ncp.bit6vflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6962         
6963         { &hf_bit7vflags, 
6964         { "Not Defined", "ncp.bit7vflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6965         
6966         { &hf_bit8vflags, 
6967         { "Not Defined", "ncp.bit8vflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6968         
6969         { &hf_bit9vflags, 
6970         { "Not Defined", "ncp.bit9vflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6971         
6972         { &hf_bit10vflags, 
6973         { "Not Defined", "ncp.bit10vflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6974         
6975         { &hf_bit11vflags, 
6976         { "Not Defined", "ncp.bit11vflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6977         
6978         { &hf_bit12vflags, 
6979         { "Not Defined", "ncp.bit12vflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6980         
6981         { &hf_bit13vflags, 
6982         { "Not Defined", "ncp.bit13vflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6983         
6984         { &hf_bit14vflags, 
6985         { "Not Defined", "ncp.bit14vflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6986         
6987         { &hf_bit15vflags, 
6988         { "Not Defined", "ncp.bit15vflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6989         
6990         { &hf_bit16vflags, 
6991         { "Not Defined", "ncp.bit16vflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6992         
6993         { &hf_bit1cflags, 
6994         { "Ambiguous Containment", "ncp.bit1cflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6995
6996         { &hf_bit2cflags, 
6997         { "Ambiguous Naming", "ncp.bit2cflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6998                      
6999         { &hf_bit3cflags, 
7000         { "Class Definition Cannot be Removed", "ncp.bit3cflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7001         
7002         { &hf_bit4cflags, 
7003         { "Effective Class", "ncp.bit4cflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7004         
7005         { &hf_bit5cflags, 
7006         { "Container Class", "ncp.bit5cflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7007         
7008         { &hf_bit6cflags, 
7009         { "Not Defined", "ncp.bit6cflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7010         
7011         { &hf_bit7cflags, 
7012         { "Not Defined", "ncp.bit7cflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7013         
7014         { &hf_bit8cflags, 
7015         { "Not Defined", "ncp.bit8cflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7016         
7017         { &hf_bit9cflags, 
7018         { "Not Defined", "ncp.bit9cflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7019         
7020         { &hf_bit10cflags, 
7021         { "Not Defined", "ncp.bit10cflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7022         
7023         { &hf_bit11cflags, 
7024         { "Not Defined", "ncp.bit11cflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7025         
7026         { &hf_bit12cflags, 
7027         { "Not Defined", "ncp.bit12cflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7028         
7029         { &hf_bit13cflags, 
7030         { "Not Defined", "ncp.bit13cflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7031         
7032         { &hf_bit14cflags, 
7033         { "Not Defined", "ncp.bit14cflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7034         
7035         { &hf_bit15cflags, 
7036         { "Not Defined", "ncp.bit15cflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7037         
7038         { &hf_bit16cflags, 
7039         { "Not Defined", "ncp.bit16cflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7040         
7041         { &hf_bit1acflags, 
7042         { "Single Valued", "ncp.bit1acflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7043
7044         { &hf_bit2acflags, 
7045         { "Sized", "ncp.bit2acflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7046                      
7047         { &hf_bit3acflags, 
7048         { "Non-Removable", "ncp.bit3acflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7049         
7050         { &hf_bit4acflags, 
7051         { "Read Only", "ncp.bit4acflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7052         
7053         { &hf_bit5acflags, 
7054         { "Hidden", "ncp.bit5acflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7055         
7056         { &hf_bit6acflags, 
7057         { "String", "ncp.bit6acflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7058         
7059         { &hf_bit7acflags, 
7060         { "Synchronize Immediate", "ncp.bit7acflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7061         
7062         { &hf_bit8acflags, 
7063         { "Public Read", "ncp.bit8acflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7064         
7065         { &hf_bit9acflags, 
7066         { "Server Read", "ncp.bit9acflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7067         
7068         { &hf_bit10acflags, 
7069         { "Write Managed", "ncp.bit10acflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7070         
7071         { &hf_bit11acflags, 
7072         { "Per Replica", "ncp.bit11acflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7073         
7074         { &hf_bit12acflags, 
7075         { "Never Schedule Synchronization", "ncp.bit12acflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7076         
7077         { &hf_bit13acflags, 
7078         { "Operational", "ncp.bit13acflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7079         
7080         { &hf_bit14acflags, 
7081         { "Not Defined", "ncp.bit14acflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7082         
7083         { &hf_bit15acflags, 
7084         { "Not Defined", "ncp.bit15acflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7085         
7086         { &hf_bit16acflags, 
7087         { "Not Defined", "ncp.bit16acflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7088         
7089         
7090         { &hf_nds_reply_error,
7091         { "NDS Error", "ncp.ndsreplyerror", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7092         
7093         { &hf_nds_net,
7094         { "Network","ncp.ndsnet", FT_IPXNET, BASE_NONE, NULL, 0x0, "", HFILL }},
7095
7096         { &hf_nds_node,
7097         { "Node",       "ncp.ndsnode", FT_ETHER, BASE_NONE, NULL, 0x0, "", HFILL }},
7098
7099         { &hf_nds_socket, 
7100         { "Socket",     "ncp.ndssocket", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }},
7101         
7102         { &hf_add_ref_ip,
7103         { "Address Referral", "ncp.ipref", FT_IPv4, BASE_DEC, NULL, 0x0, "", HFILL }},
7104         
7105         { &hf_add_ref_udp,
7106         { "Address Referral", "ncp.udpref", FT_IPv4, BASE_DEC, NULL, 0x0, "", HFILL }},
7107         
7108         { &hf_add_ref_tcp,
7109         { "Address Referral", "ncp.tcpref", FT_IPv4, BASE_DEC, NULL, 0x0, "", HFILL }},
7110         
7111         { &hf_referral_record,
7112         { "Referral Record", "ncp.ref_rec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7113         
7114         { &hf_referral_addcount,
7115         { "Address Count", "ncp.ref_addcount", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7116         
7117         { &hf_nds_port,                                                                    
7118         { "Port", "ncp.ndsport", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7119         
7120         { &hf_mv_string,                                
7121         { "Attribute Name ", "ncp.mv_string", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7122                           
7123         { &hf_nds_syntax,                                
7124         { "Attribute Syntax ", "ncp.nds_syntax", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7125
7126         { &hf_value_string,                                
7127         { "Value ", "ncp.value_string", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7128         
7129     { &hf_nds_stream_name,                                
7130         { "Stream Name ", "ncp.nds_stream_name", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7131         
7132         { &hf_nds_buffer_size,
7133         { "NDS Reply Buffer Size", "ncp.nds_reply_buf", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7134         
7135         { &hf_nds_ver,
7136         { "NDS Version", "ncp.nds_ver", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7137         
7138         { &hf_nds_nflags,
7139         { "Flags", "ncp.nds_nflags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7140         
7141     { &hf_nds_rflags,
7142         { "Request Flags", "ncp.nds_rflags", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7143     
7144     { &hf_nds_eflags,
7145         { "Entry Flags", "ncp.nds_eflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7146         
7147         { &hf_nds_scope,
7148         { "Scope", "ncp.nds_scope", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7149         
7150         { &hf_nds_name,
7151         { "Name", "ncp.nds_name", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7152         
7153     { &hf_nds_name_type,
7154         { "Name Type", "ncp.nds_name_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7155         
7156         { &hf_nds_comm_trans,
7157         { "Communications Transport", "ncp.nds_comm_trans", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7158         
7159         { &hf_nds_tree_trans,
7160         { "Tree Walker Transport", "ncp.nds_tree_trans", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7161         
7162         { &hf_nds_iteration,
7163         { "Iteration Handle", "ncp.nds_iteration", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7164         
7165     { &hf_nds_file_handle,
7166         { "File Handle", "ncp.nds_file_handle", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7167         
7168     { &hf_nds_file_size,
7169         { "File Size", "ncp.nds_file_size", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7170         
7171         { &hf_nds_eid,
7172         { "NDS EID", "ncp.nds_eid", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7173         
7174     { &hf_nds_depth,
7175         { "Distance object is from Root", "ncp.nds_depth", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7176         
7177         { &hf_nds_info_type,
7178         { "Info Type", "ncp.nds_info_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7179         
7180     { &hf_nds_class_def_type,
7181         { "Class Definition Type", "ncp.nds_class_def_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7182         
7183         { &hf_nds_all_attr,
7184         { "All Attributes", "ncp.nds_all_attr", FT_UINT32, BASE_DEC, NULL, 0x0, "Return all Attributes?", HFILL }},
7185         
7186     { &hf_nds_return_all_classes,
7187         { "All Classes", "ncp.nds_return_all_classes", FT_STRING, BASE_NONE, NULL, 0x0, "Return all Classes?", HFILL }},
7188         
7189         { &hf_nds_req_flags,                                       
7190         { "Request Flags", "ncp.nds_req_flags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7191         
7192         { &hf_nds_attr,
7193         { "Attributes", "ncp.nds_attributes", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7194         
7195     { &hf_nds_classes,
7196         { "Classes", "ncp.nds_classes", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7197
7198         { &hf_nds_crc,
7199         { "CRC", "ncp.nds_crc", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7200         
7201         { &hf_nds_referrals,
7202         { "Referrals", "ncp.nds_referrals", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7203         
7204         { &hf_nds_result_flags,
7205         { "Result Flags", "ncp.nds_result_flags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7206         
7207     { &hf_nds_stream_flags,
7208         { "Streams Flags", "ncp.nds_stream_flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7209         
7210         { &hf_nds_tag_string,
7211         { "Tags", "ncp.nds_tags", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7212
7213         { &hf_value_bytes,
7214         { "Bytes", "ncp.value_bytes", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }},
7215
7216         { &hf_replica_type,
7217         { "Replica Type", "ncp.rtype", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7218
7219         { &hf_replica_state,
7220         { "Replica State", "ncp.rstate", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7221         
7222     { &hf_nds_rnum,
7223         { "Replica Number", "ncp.rnum", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7224
7225         { &hf_nds_revent,
7226         { "Event", "ncp.revent", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7227
7228         { &hf_replica_number,
7229         { "Replica Number", "ncp.rnum", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7230  
7231         { &hf_min_nds_ver,
7232         { "Minimum NDS Version", "ncp.min_nds_version", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7233
7234         { &hf_nds_ver_include,
7235         { "Include NDS Version", "ncp.inc_nds_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7236  
7237         { &hf_nds_ver_exclude,
7238         { "Exclude NDS Version", "ncp.exc_nds_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7239
7240         { &hf_nds_es,
7241         { "Input Entry Specifier", "ncp.nds_es", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7242         
7243         { &hf_es_type,
7244         { "Entry Specifier Type", "ncp.nds_es_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7245
7246         { &hf_rdn_string,
7247         { "RDN", "ncp.nds_rdn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7248
7249         { &hf_delim_string,
7250         { "Delimeter", "ncp.nds_delim", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7251                                  
7252     { &hf_nds_dn_output_type,
7253         { "Output Entry Specifier Type", "ncp.nds_out_es_type", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7254     
7255     { &hf_nds_nested_output_type,
7256         { "Nested Output Entry Specifier Type", "ncp.nds_nested_out_es", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7257     
7258     { &hf_nds_output_delimiter,
7259         { "Output Delimiter", "ncp.nds_out_delimiter", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7260     
7261     { &hf_nds_output_entry_specifier,
7262         { "Output Entry Specifier", "ncp.nds_out_es", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7263     
7264     { &hf_es_value,
7265         { "Entry Specifier Value", "ncp.nds_es_value", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7266
7267     { &hf_es_rdn_count,
7268         { "RDN Count", "ncp.nds_es_rdn_count", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7269     
7270     { &hf_nds_replica_num,
7271         { "Replica Number", "ncp.nds_replica_num", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7272     
7273     { &hf_es_seconds,
7274         { "Seconds", "ncp.nds_es_seconds", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7275
7276     { &hf_nds_event_num,
7277         { "Event Number", "ncp.nds_event_num", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7278
7279     { &hf_nds_compare_results,
7280         { "Compare Results", "ncp.nds_compare_results", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7281     
7282     { &hf_nds_parent,
7283         { "Parent ID", "ncp.nds_parent", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7284
7285     { &hf_nds_name_filter,
7286         { "Name Filter", "ncp.nds_name_filter", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7287
7288     { &hf_nds_class_filter,
7289         { "Class Filter", "ncp.nds_class_filter", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7290
7291     { &hf_nds_time_filter,
7292         { "Time Filter", "ncp.nds_time_filter", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7293
7294     { &hf_nds_partition_root_id,
7295         { "Partition Root ID", "ncp.nds_partition_root_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7296
7297     { &hf_nds_replicas,
7298         { "Replicas", "ncp.nds_replicas", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7299
7300     { &hf_nds_purge,
7301         { "Purge Time", "ncp.nds_purge", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7302
7303     { &hf_nds_local_partition,
7304         { "Local Partition ID", "ncp.nds_local_partition", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7305
7306     { &hf_partition_busy, 
7307     { "Partition Busy", "ncp.nds_partition_busy", FT_BOOLEAN, 16, NULL, 0x0, "", HFILL }},
7308
7309     { &hf_nds_number_of_changes,
7310         { "Number of Attribute Changes", "ncp.nds_number_of_changes", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7311     
7312     { &hf_sub_count,
7313         { "Subordinate Count", "ncp.sub_count", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7314     
7315     { &hf_nds_revision,
7316         { "Revision Count", "ncp.nds_rev_count", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7317     
7318     { &hf_nds_base_class,
7319         { "Base Class", "ncp.nds_base_class", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7320     
7321     { &hf_nds_relative_dn,
7322         { "Relative Distinguished Name", "ncp.nds_relative_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7323     
7324     { &hf_nds_root_dn,
7325         { "Root Distinguished Name", "ncp.nds_root_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7326     
7327     { &hf_nds_parent_dn,
7328         { "Parent Distinguished Name", "ncp.nds_parent_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7329     
7330     { &hf_deref_base, 
7331     { "Dereference Base Class", "ncp.nds_deref_base", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7332     
7333     { &hf_nds_base, 
7334     { "Base Class", "ncp.nds_base", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7335     
7336     { &hf_nds_super, 
7337     { "Super Class", "ncp.nds_super", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7338     
7339     { &hf_nds_entry_info, 
7340     { "Entry Information", "ncp.nds_entry_info", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7341     
7342     { &hf_nds_privileges, 
7343     { "Privileges", "ncp.nds_privileges", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7344     
7345     { &hf_nds_vflags, 
7346     { "Value Flags", "ncp.nds_vflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7347     
7348     { &hf_nds_value_len, 
7349     { "Value Length", "ncp.nds_vlength", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7350     
7351     { &hf_nds_cflags, 
7352     { "Class Flags", "ncp.nds_cflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7353         
7354     { &hf_nds_asn1,
7355         { "ASN.1 ID", "ncp.nds_asn1", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }},
7356
7357     { &hf_nds_acflags, 
7358     { "Attribute Constraint Flags", "ncp.nds_acflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7359     
7360     { &hf_nds_upper, 
7361     { "Upper Limit Value", "ncp.nds_upper", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7362     
7363     { &hf_nds_lower, 
7364     { "Lower Limit Value", "ncp.nds_lower", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7365     
7366     { &hf_nds_trustee_dn,
7367         { "Trustee Distinguished Name", "ncp.nds_trustee_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7368     
7369     { &hf_nds_attribute_dn,
7370         { "Attribute Name", "ncp.nds_attribute_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7371     
7372     { &hf_nds_acl_add,
7373         { "Access Control Lists to Add", "ncp.nds_acl_add", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7374     
7375     { &hf_nds_acl_del,
7376         { "Access Control Lists to Delete", "ncp.nds_acl_del", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7377     
7378     { &hf_nds_att_add,
7379         { "Attribute to Add", "ncp.nds_att_add", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7380     
7381     { &hf_nds_att_del,
7382         { "Attribute to Delete", "ncp.nds_att_del", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7383     
7384     { &hf_nds_keep, 
7385     { "Delete Original RDN", "ncp.nds_keep", FT_BOOLEAN, 32, NULL, 0x0, "", HFILL }},
7386     
7387     { &hf_nds_new_rdn,
7388         { "New Relative Distinguished Name", "ncp.nds_new_rdn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7389     
7390     { &hf_nds_time_delay,
7391         { "Time Delay", "ncp.nds_time_delay", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7392     
7393     { &hf_nds_root_name,
7394         { "Root Most Object Name", "ncp.nds_root_name", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7395     
7396     { &hf_nds_new_part_id,
7397         { "New Partition Root ID", "ncp.nds_new_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7398     
7399     { &hf_nds_child_part_id,
7400         { "Child Partition Root ID", "ncp.nds_child_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7401     
7402     { &hf_nds_master_part_id,
7403         { "Master Partition Root ID", "ncp.nds_master_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7404     
7405     { &hf_nds_target_name,
7406         { "Target Server Name", "ncp.nds_target_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7407
7408
7409         { &hf_bit1pingflags1, 
7410         { "Supported Fields", "ncp.bit1pingflags1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7411
7412         { &hf_bit2pingflags1, 
7413         { "Depth", "ncp.bit2pingflags1", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7414                      
7415         { &hf_bit3pingflags1, 
7416         { "Revision", "ncp.bit3pingflags1", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7417         
7418         { &hf_bit4pingflags1, 
7419         { "Flags", "ncp.bit4pingflags1", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7420         
7421         { &hf_bit5pingflags1, 
7422         { "Verification Flags", "ncp.bit5pingflags1", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7423         
7424         { &hf_bit6pingflags1, 
7425         { "Letter Version", "ncp.bit6pingflags1", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7426         
7427         { &hf_bit7pingflags1, 
7428         { "OS Version", "ncp.bit7pingflags1", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7429         
7430         { &hf_bit8pingflags1, 
7431         { "License Flags", "ncp.bit8pingflags1", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7432         
7433         { &hf_bit9pingflags1, 
7434         { "DS Time", "ncp.bit9pingflags1", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7435         
7436         { &hf_bit10pingflags1, 
7437         { "Not Defined", "ncp.bit10pingflags1", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7438         
7439         { &hf_bit11pingflags1, 
7440         { "Not Defined", "ncp.bit11pingflags1", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7441         
7442         { &hf_bit12pingflags1, 
7443         { "Not Defined", "ncp.bit12pingflags1", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7444         
7445         { &hf_bit13pingflags1, 
7446         { "Not Defined", "ncp.bit13pingflags1", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7447         
7448         { &hf_bit14pingflags1, 
7449         { "Not Defined", "ncp.bit14pingflags1", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7450         
7451         { &hf_bit15pingflags1, 
7452         { "Not Defined", "ncp.bit15pingflags1", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7453         
7454         { &hf_bit16pingflags1, 
7455         { "Not Defined", "ncp.bit16pingflags1", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7456
7457         { &hf_bit1pingflags2, 
7458         { "Sap Name", "ncp.bit1pingflags2", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7459
7460         { &hf_bit2pingflags2, 
7461         { "Tree Name", "ncp.bit2pingflags2", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7462                      
7463         { &hf_bit3pingflags2, 
7464         { "OS Name", "ncp.bit3pingflags2", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7465         
7466         { &hf_bit4pingflags2, 
7467         { "Hardware Name", "ncp.bit4pingflags2", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7468         
7469         { &hf_bit5pingflags2, 
7470         { "Vendor Name", "ncp.bit5pingflags2", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7471         
7472         { &hf_bit6pingflags2, 
7473         { "Not Defined", "ncp.bit6pingflags2", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7474         
7475         { &hf_bit7pingflags2, 
7476         { "Not Defined", "ncp.bit7pingflags2", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7477         
7478         { &hf_bit8pingflags2, 
7479         { "Not Defined", "ncp.bit8pingflags2", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7480         
7481         { &hf_bit9pingflags2, 
7482         { "Not Defined", "ncp.bit9pingflags2", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7483         
7484         { &hf_bit10pingflags2, 
7485         { "Not Defined", "ncp.bit10pingflags2", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7486         
7487         { &hf_bit11pingflags2, 
7488         { "Not Defined", "ncp.bit11pingflags2", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7489         
7490         { &hf_bit12pingflags2, 
7491         { "Not Defined", "ncp.bit12pingflags2", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7492         
7493         { &hf_bit13pingflags2, 
7494         { "Not Defined", "ncp.bit13pingflags2", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7495         
7496         { &hf_bit14pingflags2, 
7497         { "Not Defined", "ncp.bit14pingflags2", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7498         
7499         { &hf_bit15pingflags2, 
7500         { "Not Defined", "ncp.bit15pingflags2", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7501         
7502         { &hf_bit16pingflags2, 
7503         { "Not Defined", "ncp.bit16pingflags2", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7504      
7505         { &hf_bit1pingpflags1, 
7506         { "Root Most Master Replica", "ncp.bit1pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7507
7508         { &hf_bit2pingpflags1, 
7509         { "Time Synchronized", "ncp.bit2pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7510                      
7511         { &hf_bit3pingpflags1, 
7512         { "Not Defined", "ncp.bit3pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7513         
7514         { &hf_bit4pingpflags1, 
7515         { "Not Defined", "ncp.bit4pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7516         
7517         { &hf_bit5pingpflags1, 
7518         { "Not Defined", "ncp.bit5pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7519         
7520         { &hf_bit6pingpflags1, 
7521         { "Not Defined", "ncp.bit6pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7522         
7523         { &hf_bit7pingpflags1, 
7524         { "Not Defined", "ncp.bit7pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7525         
7526         { &hf_bit8pingpflags1, 
7527         { "Not Defined", "ncp.bit8pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7528         
7529         { &hf_bit9pingpflags1, 
7530         { "Not Defined", "ncp.bit9pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7531         
7532         { &hf_bit10pingpflags1, 
7533         { "Not Defined", "ncp.bit10pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7534         
7535         { &hf_bit11pingpflags1, 
7536         { "Not Defined", "ncp.bit11pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7537         
7538         { &hf_bit12pingpflags1, 
7539         { "Not Defined", "ncp.bit12pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7540         
7541         { &hf_bit13pingpflags1, 
7542         { "Not Defined", "ncp.bit13pingpflags1", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7543         
7544         { &hf_bit14pingpflags1, 
7545         { "Not Defined", "ncp.bit14pingpflags1", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7546         
7547         { &hf_bit15pingpflags1, 
7548         { "Not Defined", "ncp.bit15pingpflags1", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7549         
7550         { &hf_bit16pingpflags1, 
7551         { "Not Defined", "ncp.bit16pingpflags1", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7552     
7553         { &hf_bit1pingvflags1, 
7554         { "Checksum", "ncp.bit1pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7555
7556         { &hf_bit2pingvflags1, 
7557         { "CRC32", "ncp.bit2pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7558                      
7559         { &hf_bit3pingvflags1, 
7560         { "Not Defined", "ncp.bit3pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7561         
7562         { &hf_bit4pingvflags1, 
7563         { "Not Defined", "ncp.bit4pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7564         
7565         { &hf_bit5pingvflags1, 
7566         { "Not Defined", "ncp.bit5pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7567         
7568         { &hf_bit6pingvflags1, 
7569         { "Not Defined", "ncp.bit6pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7570         
7571         { &hf_bit7pingvflags1, 
7572         { "Not Defined", "ncp.bit7pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7573         
7574         { &hf_bit8pingvflags1, 
7575         { "Not Defined", "ncp.bit8pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7576         
7577         { &hf_bit9pingvflags1, 
7578         { "Not Defined", "ncp.bit9pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7579         
7580         { &hf_bit10pingvflags1, 
7581         { "Not Defined", "ncp.bit10pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7582         
7583         { &hf_bit11pingvflags1, 
7584         { "Not Defined", "ncp.bit11pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7585         
7586         { &hf_bit12pingvflags1, 
7587         { "Not Defined", "ncp.bit12pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7588         
7589         { &hf_bit13pingvflags1, 
7590         { "Not Defined", "ncp.bit13pingvflags1", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7591         
7592         { &hf_bit14pingvflags1, 
7593         { "Not Defined", "ncp.bit14pingvflags1", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7594         
7595         { &hf_bit15pingvflags1, 
7596         { "Not Defined", "ncp.bit15pingvflags1", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7597         
7598         { &hf_bit16pingvflags1, 
7599         { "Not Defined", "ncp.bit16pingvflags1", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7600
7601     { &hf_nds_letter_ver,
7602         { "Letter Version", "ncp.nds_letter_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7603     
7604     { &hf_nds_os_ver,
7605         { "OS Version", "ncp.nds_os_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7606     
7607     { &hf_nds_lic_flags,
7608         { "License Flags", "ncp.nds_lic_flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7609     
7610     { &hf_nds_ds_time,
7611         { "DS Time", "ncp.nds_ds_time", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7612     
7613     { &hf_nds_ping_version,
7614         { "Ping Version", "ncp.nds_ping_version", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7615
7616
7617   
7618  """                
7619         # Print the registration code for the hf variables
7620         for var in sorted_vars:
7621                 print "\t{ &%s," % (var.HFName())
7622                 print "\t{ \"%s\", \"%s\", %s, %s, %s, 0x%x, \"\", HFILL }},\n" % \
7623                         (var.Description(), var.DFilter(),
7624                         var.EtherealFType(), var.Display(), var.ValuesName(),
7625                         var.Mask())
7626
7627         print "\t};\n"
7628  
7629         if ett_list:
7630                 print "\tstatic gint *ett[] = {"
7631
7632                 for ett in ett_list:
7633                         print "\t\t&%s," % (ett,)
7634
7635                 print "\t};\n"
7636                        
7637         print """
7638         proto_register_field_array(proto_ncp, hf, array_length(hf));
7639         """
7640
7641         if ett_list:
7642                 print """
7643         proto_register_subtree_array(ett, array_length(ett));
7644                 """
7645
7646         print """
7647         register_init_routine(&ncp_init_protocol);
7648         register_postseq_cleanup_routine(&ncp_postseq_cleanup);
7649         register_final_registration_routine(final_registration_ncp2222);
7650         """
7651
7652         
7653         # End of proto_register_ncp2222()
7654         print "}"
7655         print ""
7656         print '#include "packet-ncp2222.inc"'
7657
7658 def usage():
7659         print "Usage: ncp2222.py -o output_file"
7660         sys.exit(1)
7661
7662 def main():
7663         global compcode_lists
7664         global ptvc_lists
7665         global msg
7666
7667         optstring = "o:"
7668         out_filename = None
7669
7670         try:
7671                 opts, args = getopt.getopt(sys.argv[1:], optstring)
7672         except getopt.error:
7673                 usage()
7674
7675         for opt, arg in opts:
7676                 if opt == "-o":
7677                         out_filename = arg
7678                 else:
7679                         usage()
7680
7681         if len(args) != 0:
7682                 usage()
7683
7684         if not out_filename:
7685                 usage()
7686
7687         # Create the output file
7688         try:
7689                 out_file = open(out_filename, "w")
7690         except IOError, err:
7691                 sys.exit("Could not open %s for writing: %s" % (out_filename,
7692                         err))
7693
7694         # Set msg to current stdout
7695         msg = sys.stdout
7696
7697         # Set stdout to the output file
7698         sys.stdout = out_file
7699
7700         msg.write("Processing NCP definitions...\n")
7701         # Run the code, and if we catch any exception,
7702         # erase the output file.
7703         try:
7704                 compcode_lists  = UniqueCollection('Completion Code Lists')
7705                 ptvc_lists      = UniqueCollection('PTVC Lists')
7706
7707                 define_errors()
7708                 define_groups()         
7709                 
7710                 define_ncp2222()
7711
7712                 msg.write("Defined %d NCP types.\n" % (len(packets),))
7713                 produce_code()
7714         except:
7715                 traceback.print_exc(20, msg)
7716                 try:
7717                         out_file.close()
7718                 except IOError, err:
7719                         msg.write("Could not close %s: %s\n" % (out_filename, err))
7720
7721                 try:
7722                         if os.path.exists(out_filename):
7723                                 os.remove(out_filename)
7724                 except OSError, err:
7725                         msg.write("Could not remove %s: %s\n" % (out_filename, err))
7726
7727                 sys.exit(1)
7728
7729
7730
7731 def define_ncp2222():
7732         ##############################################################################
7733         # NCP Packets. Here I list functions and subfunctions in hexadecimal like the
7734         # NCP book (and I believe LanAlyzer does this too).
7735         # However, Novell lists these in decimal in their on-line documentation.
7736         ##############################################################################
7737         # 2222/01
7738         pkt = NCP(0x01, "File Set Lock", 'file')
7739         pkt.Request(7)
7740         pkt.Reply(8)
7741         pkt.CompletionCodes([0x0000])
7742         # 2222/02
7743         pkt = NCP(0x02, "File Release Lock", 'file')
7744         pkt.Request(7)
7745         pkt.Reply(8)
7746         pkt.CompletionCodes([0x0000, 0xff00])
7747         # 2222/03
7748         pkt = NCP(0x03, "Log File Exclusive", 'file')
7749         pkt.Request( (12, 267), [
7750                 rec( 7, 1, DirHandle ),
7751                 rec( 8, 1, LockFlag ),
7752                 rec( 9, 2, TimeoutLimit, BE ),
7753                 rec( 11, (1, 256), FilePath ),
7754         ])
7755         pkt.Reply(8)
7756         pkt.CompletionCodes([0x0000, 0x8200, 0x9600, 0xfe0d, 0xff01])
7757         # 2222/04
7758         pkt = NCP(0x04, "Lock File Set", 'file')
7759         pkt.Request( 9, [
7760                 rec( 7, 2, TimeoutLimit ),
7761         ])
7762         pkt.Reply(8)
7763         pkt.CompletionCodes([0x0000, 0xfe0d, 0xff01])
7764         ## 2222/05
7765         pkt = NCP(0x05, "Release File", 'file')
7766         pkt.Request( (9, 264), [
7767                 rec( 7, 1, DirHandle ),
7768                 rec( 8, (1, 256), FilePath ),
7769         ])
7770         pkt.Reply(8)
7771         pkt.CompletionCodes([0x0000, 0x9b00, 0x9c03, 0xff1a])
7772         # 2222/06
7773         pkt = NCP(0x06, "Release File Set", 'file')
7774         pkt.Request( 8, [
7775                 rec( 7, 1, LockFlag ),
7776         ])
7777         pkt.Reply(8)
7778         pkt.CompletionCodes([0x0000])
7779         # 2222/07
7780         pkt = NCP(0x07, "Clear File", 'file')
7781         pkt.Request( (9, 264), [
7782                 rec( 7, 1, DirHandle ),
7783                 rec( 8, (1, 256), FilePath ),
7784         ])
7785         pkt.Reply(8)
7786         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03,
7787                 0xa100, 0xfd00, 0xff1a])
7788         # 2222/08
7789         pkt = NCP(0x08, "Clear File Set", 'file')
7790         pkt.Request( 8, [
7791                 rec( 7, 1, LockFlag ),
7792         ])
7793         pkt.Reply(8)
7794         pkt.CompletionCodes([0x0000])
7795         # 2222/09
7796         pkt = NCP(0x09, "Log Logical Record", 'file')
7797         pkt.Request( (11, 138), [
7798                 rec( 7, 1, LockFlag ),
7799                 rec( 8, 2, TimeoutLimit, BE ),
7800                 rec( 10, (1, 128), LogicalRecordName ),
7801         ], info_str=(LogicalRecordName, "Log Logical Record: %s", ", %s"))
7802         pkt.Reply(8)
7803         pkt.CompletionCodes([0x0000, 0x9600, 0xfe0d, 0xff1a])
7804         # 2222/0A, 10
7805         pkt = NCP(0x0A, "Lock Logical Record Set", 'file')
7806         pkt.Request( 10, [
7807                 rec( 7, 1, LockFlag ),
7808                 rec( 8, 2, TimeoutLimit ),
7809         ])
7810         pkt.Reply(8)
7811         pkt.CompletionCodes([0x0000, 0xfe0d, 0xff1a])
7812         # 2222/0B, 11
7813         pkt = NCP(0x0B, "Clear Logical Record", 'file')
7814         pkt.Request( (8, 135), [
7815                 rec( 7, (1, 128), LogicalRecordName ),
7816         ], info_str=(LogicalRecordName, "Clear Logical Record: %s", ", %s"))
7817         pkt.Reply(8)
7818         pkt.CompletionCodes([0x0000, 0xff1a])
7819         # 2222/0C, 12
7820         pkt = NCP(0x0C, "Release Logical Record", 'file')
7821         pkt.Request( (8, 135), [
7822                 rec( 7, (1, 128), LogicalRecordName ),
7823         ], info_str=(LogicalRecordName, "Release Logical Record: %s", ", %s"))
7824         pkt.Reply(8)
7825         pkt.CompletionCodes([0x0000, 0xff1a])
7826         # 2222/0D, 13
7827         pkt = NCP(0x0D, "Release Logical Record Set", 'file')
7828         pkt.Request( 8, [
7829                 rec( 7, 1, LockFlag ),
7830         ])
7831         pkt.Reply(8)
7832         pkt.CompletionCodes([0x0000])
7833         # 2222/0E, 14
7834         pkt = NCP(0x0E, "Clear Logical Record Set", 'file')
7835         pkt.Request( 8, [
7836                 rec( 7, 1, LockFlag ),
7837         ])
7838         pkt.Reply(8)
7839         pkt.CompletionCodes([0x0000])
7840         # 2222/1100, 17/00
7841         pkt = NCP(0x1100, "Write to Spool File", 'qms')
7842         pkt.Request( (11, 16), [
7843                 rec( 10, ( 1, 6 ), Data ),
7844         ], info_str=(Data, "Write to Spool File: %s", ", %s"))
7845         pkt.Reply(8)
7846         pkt.CompletionCodes([0x0000, 0x0104, 0x8000, 0x8101, 0x8701, 0x8800,
7847                              0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9400, 0x9500,
7848                              0x9600, 0x9804, 0x9900, 0xa100, 0xa201, 0xff19])
7849         # 2222/1101, 17/01
7850         pkt = NCP(0x1101, "Close Spool File", 'qms')
7851         pkt.Request( 11, [
7852                 rec( 10, 1, AbortQueueFlag ),
7853         ])
7854         pkt.Reply(8)      
7855         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8701, 0x8800, 0x8d00,
7856                              0x8e00, 0x8f00, 0x9001, 0x9300, 0x9400, 0x9500,
7857                              0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03, 0x9d00,
7858                              0xa100, 0xd000, 0xd100, 0xd202, 0xd300, 0xd400,
7859                              0xda01, 0xe800, 0xea00, 0xeb00, 0xec00, 0xfc06,
7860                              0xfd00, 0xfe07, 0xff06])
7861         # 2222/1102, 17/02
7862         pkt = NCP(0x1102, "Set Spool File Flags", 'qms')
7863         pkt.Request( 30, [
7864                 rec( 10, 1, PrintFlags ),
7865                 rec( 11, 1, TabSize ),
7866                 rec( 12, 1, TargetPrinter ),
7867                 rec( 13, 1, Copies ),
7868                 rec( 14, 1, FormType ),
7869                 rec( 15, 1, Reserved ),
7870                 rec( 16, 14, BannerName ),
7871         ])
7872         pkt.Reply(8)
7873         pkt.CompletionCodes([0x0000, 0x9600, 0xd202, 0xd300, 0xe800, 0xea00,
7874                              0xeb00, 0xec00, 0xfc06, 0xfe07, 0xff06])
7875
7876         # 2222/1103, 17/03
7877         pkt = NCP(0x1103, "Spool A Disk File", 'qms')
7878         pkt.Request( (12, 23), [
7879                 rec( 10, 1, DirHandle ),
7880                 rec( 11, (1, 12), Data ),
7881         ], info_str=(Data, "Spool a Disk File: %s", ", %s"))
7882         pkt.Reply(8)
7883         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8701, 0x8800, 0x8d00,
7884                              0x8e00, 0x8f00, 0x9001, 0x9300, 0x9400, 0x9500,
7885                              0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03, 0x9d00,
7886                              0xa100, 0xd000, 0xd100, 0xd202, 0xd300, 0xd400,
7887                              0xda01, 0xe800, 0xea00, 0xeb00, 0xec00, 0xfc06,
7888                              0xfd00, 0xfe07, 0xff06])
7889
7890         # 2222/1106, 17/06
7891         pkt = NCP(0x1106, "Get Printer Status", 'qms')
7892         pkt.Request( 11, [
7893                 rec( 10, 1, TargetPrinter ),
7894         ])
7895         pkt.Reply(12, [
7896                 rec( 8, 1, PrinterHalted ),
7897                 rec( 9, 1, PrinterOffLine ),
7898                 rec( 10, 1, CurrentFormType ),
7899                 rec( 11, 1, RedirectedPrinter ),
7900         ])
7901         pkt.CompletionCodes([0x0000, 0x9600, 0xfb05, 0xfd00, 0xff06])
7902
7903         # 2222/1109, 17/09
7904         pkt = NCP(0x1109, "Create Spool File", 'qms')
7905         pkt.Request( (12, 23), [
7906                 rec( 10, 1, DirHandle ),
7907                 rec( 11, (1, 12), Data ),
7908         ], info_str=(Data, "Create Spool File: %s", ", %s"))
7909         pkt.Reply(8)
7910         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8400, 0x8701, 0x8d00,
7911                              0x8f00, 0x9001, 0x9400, 0x9600, 0x9804, 0x9900,
7912                              0x9b03, 0x9c03, 0xa100, 0xd000, 0xd100, 0xd202,
7913                              0xd300, 0xd400, 0xda01, 0xe800, 0xea00, 0xeb00,
7914                              0xec00, 0xfc06, 0xfd00, 0xfe07, 0xff06])
7915
7916         # 2222/110A, 17/10
7917         pkt = NCP(0x110A, "Get Printer's Queue", 'qms')
7918         pkt.Request( 11, [
7919                 rec( 10, 1, TargetPrinter ),
7920         ])
7921         pkt.Reply( 12, [
7922                 rec( 8, 4, ObjectID, BE ),
7923         ])
7924         pkt.CompletionCodes([0x0000, 0x9600, 0xff06])
7925
7926         # 2222/12, 18
7927         pkt = NCP(0x12, "Get Volume Info with Number", 'file')
7928         pkt.Request( 8, [
7929                 rec( 7, 1, VolumeNumber )
7930         ],info_str=(VolumeNumber, "Get Volume Information for Volume %d", ", %d"))
7931         pkt.Reply( 36, [
7932                 rec( 8, 2, SectorsPerCluster, BE ),
7933                 rec( 10, 2, TotalVolumeClusters, BE ),
7934                 rec( 12, 2, AvailableClusters, BE ),
7935                 rec( 14, 2, TotalDirectorySlots, BE ),
7936                 rec( 16, 2, AvailableDirectorySlots, BE ),
7937                 rec( 18, 16, VolumeName ),
7938                 rec( 34, 2, RemovableFlag, BE ),
7939         ])
7940         pkt.CompletionCodes([0x0000, 0x9804])
7941
7942         # 2222/13, 19
7943         pkt = NCP(0x13, "Get Station Number", 'connection')
7944         pkt.Request(7)
7945         pkt.Reply(11, [
7946                 rec( 8, 3, StationNumber )
7947         ])
7948         pkt.CompletionCodes([0x0000, 0xff00])
7949
7950         # 2222/14, 20
7951         pkt = NCP(0x14, "Get File Server Date And Time", 'fileserver')
7952         pkt.Request(7)
7953         pkt.Reply(15, [
7954                 rec( 8, 1, Year ),
7955                 rec( 9, 1, Month ),
7956                 rec( 10, 1, Day ),
7957                 rec( 11, 1, Hour ),
7958                 rec( 12, 1, Minute ),
7959                 rec( 13, 1, Second ),
7960                 rec( 14, 1, DayOfWeek ),
7961         ])
7962         pkt.CompletionCodes([0x0000])
7963
7964         # 2222/1500, 21/00
7965         pkt = NCP(0x1500, "Send Broadcast Message", 'message')
7966         pkt.Request((13, 70), [
7967                 rec( 10, 1, ClientListLen, var="x" ),
7968                 rec( 11, 1, TargetClientList, repeat="x" ),
7969                 rec( 12, (1, 58), TargetMessage ),
7970         ], info_str=(TargetMessage, "Send Broadcast Message: %s", ", %s"))
7971         pkt.Reply(10, [
7972                 rec( 8, 1, ClientListLen, var="x" ),
7973                 rec( 9, 1, SendStatus, repeat="x" )
7974         ])
7975         pkt.CompletionCodes([0x0000, 0xfd00])
7976
7977         # 2222/1501, 21/01
7978         pkt = NCP(0x1501, "Get Broadcast Message", 'message')
7979         pkt.Request(10)
7980         pkt.Reply((9,66), [
7981                 rec( 8, (1, 58), TargetMessage )
7982         ])
7983         pkt.CompletionCodes([0x0000, 0xfd00])
7984
7985         # 2222/1502, 21/02
7986         pkt = NCP(0x1502, "Disable Broadcasts", 'message')
7987         pkt.Request(10)
7988         pkt.Reply(8)
7989         pkt.CompletionCodes([0x0000])
7990
7991         # 2222/1503, 21/03
7992         pkt = NCP(0x1503, "Enable Broadcasts", 'message')
7993         pkt.Request(10)
7994         pkt.Reply(8)
7995         pkt.CompletionCodes([0x0000])
7996
7997         # 2222/1509, 21/09
7998         pkt = NCP(0x1509, "Broadcast To Console", 'message')
7999         pkt.Request((11, 68), [
8000                 rec( 10, (1, 58), TargetMessage )
8001         ], info_str=(TargetMessage, "Broadcast to Console: %s", ", %s"))
8002         pkt.Reply(8)
8003         pkt.CompletionCodes([0x0000])
8004         # 2222/150A, 21/10
8005         pkt = NCP(0x150A, "Send Broadcast Message", 'message')
8006         pkt.Request((17, 74), [
8007                 rec( 10, 2, ClientListCount, LE, var="x" ),
8008                 rec( 12, 4, ClientList, LE, repeat="x" ),
8009                 rec( 16, (1, 58), TargetMessage ),
8010         ], info_str=(TargetMessage, "Send Broadcast Message: %s", ", %s"))
8011         pkt.Reply(14, [
8012                 rec( 8, 2, ClientListCount, LE, var="x" ),
8013                 rec( 10, 4, ClientCompFlag, LE, repeat="x" ),
8014         ])
8015         pkt.CompletionCodes([0x0000, 0xfd00])
8016
8017         # 2222/150B, 21/11
8018         pkt = NCP(0x150B, "Get Broadcast Message", 'message')
8019         pkt.Request(10)
8020         pkt.Reply((9,66), [
8021                 rec( 8, (1, 58), TargetMessage )
8022         ])
8023         pkt.CompletionCodes([0x0000, 0xfd00])
8024
8025         # 2222/150C, 21/12
8026         pkt = NCP(0x150C, "Connection Message Control", 'message')
8027         pkt.Request(22, [
8028                 rec( 10, 1, ConnectionControlBits ),
8029                 rec( 11, 3, Reserved3 ),
8030                 rec( 14, 4, ConnectionListCount, LE, var="x" ),
8031                 rec( 18, 4, ConnectionList, LE, repeat="x" ),
8032         ])
8033         pkt.Reply(8)
8034         pkt.CompletionCodes([0x0000, 0xff00])
8035
8036         # 2222/1600, 22/0
8037         pkt = NCP(0x1600, "Set Directory Handle", 'fileserver')
8038         pkt.Request((13,267), [
8039                 rec( 10, 1, TargetDirHandle ),
8040                 rec( 11, 1, DirHandle ),
8041                 rec( 12, (1, 255), Path ),
8042         ], info_str=(Path, "Set Directory Handle to: %s", ", %s"))
8043         pkt.Reply(8)
8044         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8045                              0xfd00, 0xff00])
8046
8047
8048         # 2222/1601, 22/1
8049         pkt = NCP(0x1601, "Get Directory Path", 'fileserver')
8050         pkt.Request(11, [
8051                 rec( 10, 1, DirHandle ),
8052         ],info_str=(DirHandle, "Get Directory Path for Directory Handle %d", ", %d"))
8053         pkt.Reply((9,263), [
8054                 rec( 8, (1,255), Path ),
8055         ])
8056         pkt.CompletionCodes([0x0000, 0x9600, 0x9b00, 0x9c00, 0xa100])
8057
8058         # 2222/1602, 22/2
8059         pkt = NCP(0x1602, "Scan Directory Information", 'fileserver')
8060         pkt.Request((14,268), [
8061                 rec( 10, 1, DirHandle ),
8062                 rec( 11, 2, StartingSearchNumber, BE ),
8063                 rec( 13, (1, 255), Path ),
8064         ], info_str=(Path, "Scan Directory Information: %s", ", %s"))
8065         pkt.Reply(36, [
8066                 rec( 8, 16, DirectoryPath ),
8067                 rec( 24, 2, CreationDate, BE ),
8068                 rec( 26, 2, CreationTime, BE ),
8069                 rec( 28, 4, CreatorID, BE ),
8070                 rec( 32, 1, AccessRightsMask ),
8071                 rec( 33, 1, Reserved ),
8072                 rec( 34, 2, NextSearchNumber, BE ),
8073         ])
8074         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8075                              0xfd00, 0xff00])
8076
8077         # 2222/1603, 22/3
8078         pkt = NCP(0x1603, "Get Effective Directory Rights", 'fileserver')
8079         pkt.Request((14,268), [
8080                 rec( 10, 1, DirHandle ),
8081                 rec( 11, 2, StartingSearchNumber ),
8082                 rec( 13, (1, 255), Path ),
8083         ], info_str=(Path, "Get Effective Directory Rights: %s", ", %s"))
8084         pkt.Reply(9, [
8085                 rec( 8, 1, AccessRightsMask ),
8086         ])
8087         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8088                              0xfd00, 0xff00])
8089
8090         # 2222/1604, 22/4
8091         pkt = NCP(0x1604, "Modify Maximum Rights Mask", 'fileserver')
8092         pkt.Request((14,268), [
8093                 rec( 10, 1, DirHandle ),
8094                 rec( 11, 1, RightsGrantMask ),
8095                 rec( 12, 1, RightsRevokeMask ),
8096                 rec( 13, (1, 255), Path ),
8097         ], info_str=(Path, "Modify Maximum Rights Mask: %s", ", %s"))
8098         pkt.Reply(8)
8099         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8100                              0xfd00, 0xff00])
8101
8102         # 2222/1605, 22/5
8103         pkt = NCP(0x1605, "Get Volume Number", 'fileserver')
8104         pkt.Request((11, 265), [
8105                 rec( 10, (1,255), VolumeNameLen ),
8106         ], info_str=(VolumeNameLen, "Get Volume Number for: %s", ", %s"))
8107         pkt.Reply(9, [
8108                 rec( 8, 1, VolumeNumber ),
8109         ])
8110         pkt.CompletionCodes([0x0000, 0x9600, 0x9804])
8111
8112         # 2222/1606, 22/6
8113         pkt = NCP(0x1606, "Get Volume Name", 'fileserver')
8114         pkt.Request(11, [
8115                 rec( 10, 1, VolumeNumber ),
8116         ],info_str=(VolumeNumber, "Get Name for Volume %d", ", %d"))
8117         pkt.Reply((9, 263), [
8118                 rec( 8, (1,255), VolumeNameLen ),
8119         ])
8120         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0xff00])
8121
8122         # 2222/160A, 22/10
8123         pkt = NCP(0x160A, "Create Directory", 'fileserver')
8124         pkt.Request((13,267), [
8125                 rec( 10, 1, DirHandle ),
8126                 rec( 11, 1, AccessRightsMask ),
8127                 rec( 12, (1, 255), Path ),
8128         ], info_str=(Path, "Create Directory: %s", ", %s"))
8129         pkt.Reply(8)
8130         pkt.CompletionCodes([0x0000, 0x8400, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8131                              0x9e00, 0xa100, 0xfd00, 0xff00])
8132
8133         # 2222/160B, 22/11
8134         pkt = NCP(0x160B, "Delete Directory", 'fileserver')
8135         pkt.Request((13,267), [
8136                 rec( 10, 1, DirHandle ),
8137                 rec( 11, 1, Reserved ),
8138                 rec( 12, (1, 255), Path ),
8139         ], info_str=(Path, "Delete Directory: %s", ", %s"))
8140         pkt.Reply(8)
8141         pkt.CompletionCodes([0x0000, 0x8a00, 0x9600, 0x9804, 0x9b03, 0x9c03,
8142                              0x9f00, 0xa000, 0xa100, 0xfd00, 0xff00])
8143
8144         # 2222/160C, 22/12
8145         pkt = NCP(0x160C, "Scan Directory for Trustees", 'fileserver')
8146         pkt.Request((13,267), [
8147                 rec( 10, 1, DirHandle ),
8148                 rec( 11, 1, TrusteeSetNumber ),
8149                 rec( 12, (1, 255), Path ),
8150         ], info_str=(Path, "Scan Directory for Trustees: %s", ", %s"))
8151         pkt.Reply(57, [
8152                 rec( 8, 16, DirectoryPath ),
8153                 rec( 24, 2, CreationDate, BE ),
8154                 rec( 26, 2, CreationTime, BE ),
8155                 rec( 28, 4, CreatorID ),
8156                 rec( 32, 4, TrusteeID, BE ),
8157                 rec( 36, 4, TrusteeID, BE ),
8158                 rec( 40, 4, TrusteeID, BE ),
8159                 rec( 44, 4, TrusteeID, BE ),
8160                 rec( 48, 4, TrusteeID, BE ),
8161                 rec( 52, 1, AccessRightsMask ),
8162                 rec( 53, 1, AccessRightsMask ),
8163                 rec( 54, 1, AccessRightsMask ),
8164                 rec( 55, 1, AccessRightsMask ),
8165                 rec( 56, 1, AccessRightsMask ),
8166         ])
8167         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c03,
8168                              0xa100, 0xfd00, 0xff00])
8169
8170         # 2222/160D, 22/13
8171         pkt = NCP(0x160D, "Add Trustee to Directory", 'fileserver')
8172         pkt.Request((17,271), [
8173                 rec( 10, 1, DirHandle ),
8174                 rec( 11, 4, TrusteeID, BE ),
8175                 rec( 15, 1, AccessRightsMask ),
8176                 rec( 16, (1, 255), Path ),
8177         ], info_str=(Path, "Add Trustee to Directory: %s", ", %s"))
8178         pkt.Reply(8)
8179         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8180                              0xa100, 0xfc06, 0xfd00, 0xff00])
8181
8182         # 2222/160E, 22/14
8183         pkt = NCP(0x160E, "Delete Trustee from Directory", 'fileserver')
8184         pkt.Request((17,271), [
8185                 rec( 10, 1, DirHandle ),
8186                 rec( 11, 4, TrusteeID, BE ),
8187                 rec( 15, 1, Reserved ),
8188                 rec( 16, (1, 255), Path ),
8189         ], info_str=(Path, "Delete Trustee from Directory: %s", ", %s"))
8190         pkt.Reply(8)
8191         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8192                              0xa100, 0xfc06, 0xfd00, 0xfe07, 0xff00])
8193
8194         # 2222/160F, 22/15
8195         pkt = NCP(0x160F, "Rename Directory", 'fileserver')
8196         pkt.Request((13, 521), [
8197                 rec( 10, 1, DirHandle ),
8198                 rec( 11, (1, 255), Path ),
8199                 rec( -1, (1, 255), NewPath ),
8200         ], info_str=(Path, "Rename Directory: %s", ", %s"))
8201         pkt.Reply(8)
8202         pkt.CompletionCodes([0x0000, 0x8b00, 0x9200, 0x9600, 0x9804, 0x9b03, 0x9c03,
8203                              0x9e00, 0xa100, 0xef00, 0xfd00, 0xff00])
8204                                                                         
8205         # 2222/1610, 22/16
8206         pkt = NCP(0x1610, "Purge Erased Files", 'file')
8207         pkt.Request(10)
8208         pkt.Reply(8)
8209         pkt.CompletionCodes([0x0000, 0x8100, 0x9600, 0x9804, 0xa100, 0xff00])
8210
8211         # 2222/1611, 22/17
8212         pkt = NCP(0x1611, "Recover Erased File", 'fileserver')
8213         pkt.Request(11, [
8214                 rec( 10, 1, DirHandle ),
8215         ],info_str=(DirHandle, "Recover Erased File from Directory Handle %d", ", %d"))
8216         pkt.Reply(38, [
8217                 rec( 8, 15, OldFileName ),
8218                 rec( 23, 15, NewFileName ),
8219         ])
8220         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03,
8221                              0xa100, 0xfd00, 0xff00])
8222         # 2222/1612, 22/18
8223         pkt = NCP(0x1612, "Alloc Permanent Directory Handle", 'fileserver')
8224         pkt.Request((13, 267), [
8225                 rec( 10, 1, DirHandle ),
8226                 rec( 11, 1, DirHandleName ),
8227                 rec( 12, (1,255), Path ),
8228         ], info_str=(Path, "Allocate Permanent Directory Handle: %s", ", %s"))
8229         pkt.Reply(10, [
8230                 rec( 8, 1, DirHandle ),
8231                 rec( 9, 1, AccessRightsMask ),
8232         ])
8233         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8234                              0xa100, 0xfd00, 0xff00])
8235         # 2222/1613, 22/19
8236         pkt = NCP(0x1613, "Alloc Temporary Directory Handle", 'fileserver')
8237         pkt.Request((13, 267), [
8238                 rec( 10, 1, DirHandle ),
8239                 rec( 11, 1, DirHandleName ),
8240                 rec( 12, (1,255), Path ),
8241         ], info_str=(Path, "Allocate Temporary Directory Handle: %s", ", %s"))
8242         pkt.Reply(10, [
8243                 rec( 8, 1, DirHandle ),
8244                 rec( 9, 1, AccessRightsMask ),
8245         ])
8246         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8247                              0xa100, 0xfd00, 0xff00])
8248         # 2222/1614, 22/20
8249         pkt = NCP(0x1614, "Deallocate Directory Handle", 'fileserver')
8250         pkt.Request(11, [
8251                 rec( 10, 1, DirHandle ),
8252         ],info_str=(DirHandle, "Deallocate Directory Handle %d", ", %d"))
8253         pkt.Reply(8)
8254         pkt.CompletionCodes([0x0000, 0x9b03])
8255         # 2222/1615, 22/21
8256         pkt = NCP(0x1615, "Get Volume Info with Handle", 'file')
8257         pkt.Request( 11, [
8258                 rec( 10, 1, DirHandle )
8259         ],info_str=(DirHandle, "Get Volume Information with Handle %d", ", %d"))
8260         pkt.Reply( 36, [
8261                 rec( 8, 2, SectorsPerCluster, BE ),
8262                 rec( 10, 2, TotalVolumeClusters, BE ),
8263                 rec( 12, 2, AvailableClusters, BE ),
8264                 rec( 14, 2, TotalDirectorySlots, BE ),
8265                 rec( 16, 2, AvailableDirectorySlots, BE ),
8266                 rec( 18, 16, VolumeName ),
8267                 rec( 34, 2, RemovableFlag, BE ),
8268         ])
8269         pkt.CompletionCodes([0x0000, 0xff00])
8270         # 2222/1616, 22/22
8271         pkt = NCP(0x1616, "Alloc Special Temporary Directory Handle", 'fileserver')
8272         pkt.Request((13, 267), [
8273                 rec( 10, 1, DirHandle ),
8274                 rec( 11, 1, DirHandleName ),
8275                 rec( 12, (1,255), Path ),
8276         ], info_str=(Path, "Allocate Special Temporary Directory Handle: %s", ", %s"))
8277         pkt.Reply(10, [
8278                 rec( 8, 1, DirHandle ),
8279                 rec( 9, 1, AccessRightsMask ),
8280         ])
8281         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8282                              0xa100, 0xfd00, 0xff00])
8283         # 2222/1617, 22/23
8284         pkt = NCP(0x1617, "Extract a Base Handle", 'fileserver')
8285         pkt.Request(11, [
8286                 rec( 10, 1, DirHandle ),
8287         ],info_str=(DirHandle, "Extract a Base Handle from Directory Handle %d", ", %d"))
8288         pkt.Reply(22, [
8289                 rec( 8, 10, ServerNetworkAddress ),
8290                 rec( 18, 4, DirHandleLong ),
8291         ])
8292         pkt.CompletionCodes([0x0000, 0x9600, 0x9b03])
8293         # 2222/1618, 22/24
8294         pkt = NCP(0x1618, "Restore an Extracted Base Handle", 'fileserver')
8295         pkt.Request(24, [
8296                 rec( 10, 10, ServerNetworkAddress ),
8297                 rec( 20, 4, DirHandleLong ),
8298         ])
8299         pkt.Reply(10, [
8300                 rec( 8, 1, DirHandle ),
8301                 rec( 9, 1, AccessRightsMask ),
8302         ])
8303         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c00, 0x9d00, 0xa100,
8304                              0xfd00, 0xff00])
8305         # 2222/1619, 22/25
8306         pkt = NCP(0x1619, "Set Directory Information", 'fileserver')
8307         pkt.Request((21, 275), [
8308                 rec( 10, 1, DirHandle ),
8309                 rec( 11, 2, CreationDate ),
8310                 rec( 13, 2, CreationTime ),
8311                 rec( 15, 4, CreatorID, BE ),
8312                 rec( 19, 1, AccessRightsMask ),
8313                 rec( 20, (1,255), Path ),
8314         ], info_str=(Path, "Set Directory Information: %s", ", %s"))
8315         pkt.Reply(8)
8316         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c00, 0xa100,
8317                              0xff16])
8318         # 2222/161A, 22/26
8319         pkt = NCP(0x161A, "Get Path Name of a Volume-Directory Number Pair", 'fileserver')
8320         pkt.Request(13, [
8321                 rec( 10, 1, VolumeNumber ),
8322                 rec( 11, 2, DirectoryEntryNumberWord ),
8323         ])
8324         pkt.Reply((9,263), [
8325                 rec( 8, (1,255), Path ),
8326                 ])
8327         pkt.CompletionCodes([0x0000, 0x9804, 0x9c00, 0xa100])
8328         # 2222/161B, 22/27
8329         pkt = NCP(0x161B, "Scan Salvageable Files", 'fileserver')
8330         pkt.Request(15, [
8331                 rec( 10, 1, DirHandle ),
8332                 rec( 11, 4, SequenceNumber ),
8333         ])
8334         pkt.Reply(140, [
8335                 rec( 8, 4, SequenceNumber ),
8336                 rec( 12, 2, Subdirectory ),
8337                 rec( 14, 2, Reserved2 ),
8338                 rec( 16, 4, AttributesDef32 ),
8339                 rec( 20, 1, UniqueID ),
8340                 rec( 21, 1, FlagsDef ),
8341                 rec( 22, 1, DestNameSpace ),
8342                 rec( 23, 1, FileNameLen ),
8343                 rec( 24, 12, FileName12 ),
8344                 rec( 36, 2, CreationTime ),
8345                 rec( 38, 2, CreationDate ),
8346                 rec( 40, 4, CreatorID, BE ),
8347                 rec( 44, 2, ArchivedTime ),
8348                 rec( 46, 2, ArchivedDate ),
8349                 rec( 48, 4, ArchiverID, BE ),
8350                 rec( 52, 2, UpdateTime ),
8351                 rec( 54, 2, UpdateDate ),
8352                 rec( 56, 4, UpdateID, BE ),
8353                 rec( 60, 4, FileSize, BE ),
8354                 rec( 64, 44, Reserved44 ),
8355                 rec( 108, 2, InheritedRightsMask ),
8356                 rec( 110, 2, LastAccessedDate ),
8357                 rec( 112, 4, DeletedFileTime ),
8358                 rec( 116, 2, DeletedTime ),
8359                 rec( 118, 2, DeletedDate ),
8360                 rec( 120, 4, DeletedID, BE ),
8361                 rec( 124, 16, Reserved16 ),
8362         ])
8363         pkt.CompletionCodes([0x0000, 0xfb01, 0xff1d])
8364         # 2222/161C, 22/28
8365         pkt = NCP(0x161C, "Recover Salvageable File", 'fileserver')
8366         pkt.Request((17,525), [
8367                 rec( 10, 1, DirHandle ),
8368                 rec( 11, 4, SequenceNumber ),
8369                 rec( 15, (1, 255), FileName ),
8370                 rec( -1, (1, 255), NewFileNameLen ),
8371         ], info_str=(FileName, "Recover File: %s", ", %s"))
8372         pkt.Reply(8)
8373         pkt.CompletionCodes([0x0000, 0x8401, 0x9c03, 0xfe02])
8374         # 2222/161D, 22/29
8375         pkt = NCP(0x161D, "Purge Salvageable File", 'fileserver')
8376         pkt.Request(15, [
8377                 rec( 10, 1, DirHandle ),
8378                 rec( 11, 4, SequenceNumber ),
8379         ])
8380         pkt.Reply(8)
8381         pkt.CompletionCodes([0x0000, 0x8500, 0x9c03])
8382         # 2222/161E, 22/30
8383         pkt = NCP(0x161E, "Scan a Directory", 'fileserver')
8384         pkt.Request((17, 271), [
8385                 rec( 10, 1, DirHandle ),
8386                 rec( 11, 1, DOSFileAttributes ),
8387                 rec( 12, 4, SequenceNumber ),
8388                 rec( 16, (1, 255), SearchPattern ),
8389         ], info_str=(SearchPattern, "Scan a Directory: %s", ", %s"))
8390         pkt.Reply(140, [
8391                 rec( 8, 4, SequenceNumber ),
8392                 rec( 12, 4, Subdirectory ),
8393                 rec( 16, 4, AttributesDef32 ),
8394                 rec( 20, 1, UniqueID, LE ),
8395                 rec( 21, 1, PurgeFlags ),
8396                 rec( 22, 1, DestNameSpace ),
8397                 rec( 23, 1, NameLen ),
8398                 rec( 24, 12, Name12 ),
8399                 rec( 36, 2, CreationTime ),
8400                 rec( 38, 2, CreationDate ),
8401                 rec( 40, 4, CreatorID, BE ),
8402                 rec( 44, 2, ArchivedTime ),
8403                 rec( 46, 2, ArchivedDate ),
8404                 rec( 48, 4, ArchiverID, BE ),
8405                 rec( 52, 2, UpdateTime ),
8406                 rec( 54, 2, UpdateDate ),
8407                 rec( 56, 4, UpdateID, BE ),
8408                 rec( 60, 4, FileSize, BE ),
8409                 rec( 64, 44, Reserved44 ),
8410                 rec( 108, 2, InheritedRightsMask ),
8411                 rec( 110, 2, LastAccessedDate ),
8412                 rec( 112, 28, Reserved28 ),
8413         ])
8414         pkt.CompletionCodes([0x0000, 0x8500, 0x9c03])
8415         # 2222/161F, 22/31
8416         pkt = NCP(0x161F, "Get Directory Entry", 'fileserver')
8417         pkt.Request(11, [
8418                 rec( 10, 1, DirHandle ),
8419         ])
8420         pkt.Reply(136, [
8421                 rec( 8, 4, Subdirectory ),
8422                 rec( 12, 4, AttributesDef32 ),
8423                 rec( 16, 1, UniqueID, LE ),
8424                 rec( 17, 1, PurgeFlags ),
8425                 rec( 18, 1, DestNameSpace ),
8426                 rec( 19, 1, NameLen ),
8427                 rec( 20, 12, Name12 ),
8428                 rec( 32, 2, CreationTime ),
8429                 rec( 34, 2, CreationDate ),
8430                 rec( 36, 4, CreatorID, BE ),
8431                 rec( 40, 2, ArchivedTime ),
8432                 rec( 42, 2, ArchivedDate ), 
8433                 rec( 44, 4, ArchiverID, BE ),
8434                 rec( 48, 2, UpdateTime ),
8435                 rec( 50, 2, UpdateDate ),
8436                 rec( 52, 4, NextTrusteeEntry, BE ),
8437                 rec( 56, 48, Reserved48 ),
8438                 rec( 104, 2, MaximumSpace ),
8439                 rec( 106, 2, InheritedRightsMask ),
8440                 rec( 108, 28, Undefined28 ),
8441         ])
8442         pkt.CompletionCodes([0x0000, 0x8900, 0xbf00, 0xfb00])
8443         # 2222/1620, 22/32
8444         pkt = NCP(0x1620, "Scan Volume's User Disk Restrictions", 'fileserver')
8445         pkt.Request(15, [
8446                 rec( 10, 1, VolumeNumber ),
8447                 rec( 11, 4, SequenceNumber ),
8448         ])
8449         pkt.Reply(17, [
8450                 rec( 8, 1, NumberOfEntries, var="x" ),
8451                 rec( 9, 8, ObjectIDStruct, repeat="x" ),
8452         ])
8453         pkt.CompletionCodes([0x0000, 0x9800])
8454         # 2222/1621, 22/33
8455         pkt = NCP(0x1621, "Add User Disk Space Restriction", 'fileserver')
8456         pkt.Request(19, [
8457                 rec( 10, 1, VolumeNumber ),
8458                 rec( 11, 4, ObjectID ),
8459                 rec( 15, 4, DiskSpaceLimit ),
8460         ])
8461         pkt.Reply(8)
8462         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9800])
8463         # 2222/1622, 22/34
8464         pkt = NCP(0x1622, "Remove User Disk Space Restrictions", 'fileserver')
8465         pkt.Request(15, [
8466                 rec( 10, 1, VolumeNumber ),
8467                 rec( 11, 4, ObjectID ),
8468         ])
8469         pkt.Reply(8)
8470         pkt.CompletionCodes([0x0000, 0x8c00, 0xfe0e])
8471         # 2222/1623, 22/35
8472         pkt = NCP(0x1623, "Get Directory Disk Space Restriction", 'fileserver')
8473         pkt.Request(11, [
8474                 rec( 10, 1, DirHandle ),
8475         ])
8476         pkt.Reply(18, [
8477                 rec( 8, 1, NumberOfEntries ),
8478                 rec( 9, 1, Level ),
8479                 rec( 10, 4, MaxSpace ),
8480                 rec( 14, 4, CurrentSpace ),
8481         ])
8482         pkt.CompletionCodes([0x0000])
8483         # 2222/1624, 22/36
8484         pkt = NCP(0x1624, "Set Directory Disk Space Restriction", 'fileserver')
8485         pkt.Request(15, [
8486                 rec( 10, 1, DirHandle ),
8487                 rec( 11, 4, DiskSpaceLimit ),
8488         ])
8489         pkt.Reply(8)
8490         pkt.CompletionCodes([0x0000, 0x0101, 0x8c00, 0xbf00])
8491         # 2222/1625, 22/37
8492         pkt = NCP(0x1625, "Set Directory Entry Information", 'fileserver')
8493         pkt.Request(NO_LENGTH_CHECK, [
8494                 #
8495                 # XXX - this didn't match what was in the spec for 22/37
8496                 # on the Novell Web site.
8497                 #
8498                 rec( 10, 1, DirHandle ),
8499                 rec( 11, 1, SearchAttributes ),
8500                 rec( 12, 4, SequenceNumber ),
8501                 rec( 16, 2, ChangeBits ),
8502                 rec( 18, 2, Reserved2 ),
8503                 rec( 20, 4, Subdirectory ),
8504                 srec(DOSDirectoryEntryStruct, req_cond="ncp.search_att_sub == TRUE"),
8505                 srec(DOSFileEntryStruct, req_cond="ncp.search_att_sub == FALSE"),
8506         ])
8507         pkt.Reply(8)
8508         pkt.ReqCondSizeConstant()
8509         pkt.CompletionCodes([0x0000, 0x0106, 0x8c00, 0xbf00])
8510         # 2222/1626, 22/38
8511         pkt = NCP(0x1626, "Scan File or Directory for Extended Trustees", 'fileserver')
8512         pkt.Request((13,267), [
8513                 rec( 10, 1, DirHandle ),
8514                 rec( 11, 1, SequenceByte ),
8515                 rec( 12, (1, 255), Path ),
8516         ], info_str=(Path, "Scan for Extended Trustees: %s", ", %s"))
8517         pkt.Reply(91, [
8518                 rec( 8, 1, NumberOfEntries, var="x" ),
8519                 rec( 9, 4, ObjectID ),
8520                 rec( 13, 4, ObjectID ),
8521                 rec( 17, 4, ObjectID ),
8522                 rec( 21, 4, ObjectID ),
8523                 rec( 25, 4, ObjectID ),
8524                 rec( 29, 4, ObjectID ),
8525                 rec( 33, 4, ObjectID ),
8526                 rec( 37, 4, ObjectID ),
8527                 rec( 41, 4, ObjectID ),
8528                 rec( 45, 4, ObjectID ),
8529                 rec( 49, 4, ObjectID ),
8530                 rec( 53, 4, ObjectID ),
8531                 rec( 57, 4, ObjectID ),
8532                 rec( 61, 4, ObjectID ),
8533                 rec( 65, 4, ObjectID ),
8534                 rec( 69, 4, ObjectID ),
8535                 rec( 73, 4, ObjectID ),
8536                 rec( 77, 4, ObjectID ),
8537                 rec( 81, 4, ObjectID ),
8538                 rec( 85, 4, ObjectID ),
8539                 rec( 89, 2, AccessRightsMaskWord, repeat="x" ),
8540         ])
8541         pkt.CompletionCodes([0x0000, 0x9800, 0x9b00, 0x9c00])
8542         # 2222/1627, 22/39
8543         pkt = NCP(0x1627, "Add Extended Trustee to Directory or File", 'fileserver')
8544         pkt.Request((18,272), [
8545                 rec( 10, 1, DirHandle ),
8546                 rec( 11, 4, ObjectID, BE ),
8547                 rec( 15, 2, TrusteeRights ),
8548                 rec( 17, (1, 255), Path ),
8549         ], info_str=(Path, "Add Extended Trustee: %s", ", %s"))
8550         pkt.Reply(8)
8551         pkt.CompletionCodes([0x0000, 0x9000])
8552         # 2222/1628, 22/40
8553         pkt = NCP(0x1628, "Scan Directory Disk Space", 'fileserver')
8554         pkt.Request((17,271), [
8555                 #
8556                 # XXX - this didn't match what was in the spec for 22/40
8557                 # on the Novell Web site.
8558                 #
8559                 rec( 10, 1, DirHandle ),
8560                 rec( 11, 1, SearchAttributes ),
8561                 rec( 12, 4, SequenceNumber ),
8562                 rec( 16, (1, 255), SearchPattern ),
8563         ], info_str=(SearchPattern, "Scan Directory Disk Space: %s", ", %s"))
8564         pkt.Reply((148), [
8565                 rec( 8, 4, SequenceNumber ),
8566                 rec( 12, 4, Subdirectory ),
8567                 rec( 16, 4, AttributesDef32 ),
8568                 rec( 20, 1, UniqueID ),
8569                 rec( 21, 1, PurgeFlags ),
8570                 rec( 22, 1, DestNameSpace ),
8571                 rec( 23, 1, NameLen ),
8572                 rec( 24, 12, Name12 ),
8573                 rec( 36, 2, CreationTime ),
8574                 rec( 38, 2, CreationDate ),
8575                 rec( 40, 4, CreatorID, BE ),
8576                 rec( 44, 2, ArchivedTime ),
8577                 rec( 46, 2, ArchivedDate ),
8578                 rec( 48, 4, ArchiverID, BE ),
8579                 rec( 52, 2, UpdateTime ),
8580                 rec( 54, 2, UpdateDate ),
8581                 rec( 56, 4, UpdateID, BE ),
8582                 rec( 60, 4, DataForkSize, BE ),
8583                 rec( 64, 4, DataForkFirstFAT, BE ),
8584                 rec( 68, 4, NextTrusteeEntry, BE ),
8585                 rec( 72, 36, Reserved36 ),
8586                 rec( 108, 2, InheritedRightsMask ),
8587                 rec( 110, 2, LastAccessedDate ),
8588                 rec( 112, 4, DeletedFileTime ),
8589                 rec( 116, 2, DeletedTime ),
8590                 rec( 118, 2, DeletedDate ),
8591                 rec( 120, 4, DeletedID, BE ),
8592                 rec( 124, 8, Undefined8 ),
8593                 rec( 132, 4, PrimaryEntry, LE ),
8594                 rec( 136, 4, NameList, LE ),
8595                 rec( 140, 4, OtherFileForkSize, BE ),
8596                 rec( 144, 4, OtherFileForkFAT, BE ),
8597         ])
8598         pkt.CompletionCodes([0x0000, 0x8900, 0x9c03, 0xfb01, 0xff00])
8599         # 2222/1629, 22/41
8600         pkt = NCP(0x1629, "Get Object Disk Usage and Restrictions", 'fileserver')
8601         pkt.Request(15, [
8602                 rec( 10, 1, VolumeNumber ),
8603                 rec( 11, 4, ObjectID, BE ),
8604         ])
8605         pkt.Reply(16, [
8606                 rec( 8, 4, Restriction ),
8607                 rec( 12, 4, InUse ),
8608         ])
8609         pkt.CompletionCodes([0x0000, 0x9802])
8610         # 2222/162A, 22/42
8611         pkt = NCP(0x162A, "Get Effective Rights for Directory Entry", 'fileserver')
8612         pkt.Request((12,266), [
8613                 rec( 10, 1, DirHandle ),
8614                 rec( 11, (1, 255), Path ),
8615         ], info_str=(Path, "Get Effective Rights: %s", ", %s"))
8616         pkt.Reply(10, [
8617                 rec( 8, 2, AccessRightsMaskWord ),
8618         ])
8619         pkt.CompletionCodes([0x0000, 0x9804, 0x9c03])
8620         # 2222/162B, 22/43
8621         pkt = NCP(0x162B, "Remove Extended Trustee from Dir or File", 'fileserver')
8622         pkt.Request((17,271), [
8623                 rec( 10, 1, DirHandle ),
8624                 rec( 11, 4, ObjectID, BE ),
8625                 rec( 15, 1, Unused ),
8626                 rec( 16, (1, 255), Path ),
8627         ], info_str=(Path, "Remove Extended Trustee from %s", ", %s"))
8628         pkt.Reply(8)
8629         pkt.CompletionCodes([0x0000, 0x9002, 0x9c03, 0xfe0f, 0xff09])
8630         # 2222/162C, 22/44
8631         pkt = NCP(0x162C, "Get Volume and Purge Information", 'file')
8632         pkt.Request( 11, [
8633                 rec( 10, 1, VolumeNumber )
8634         ],info_str=(VolumeNumber, "Get Volume and Purge Information for Volume %d", ", %d"))
8635         pkt.Reply( (38,53), [
8636                 rec( 8, 4, TotalBlocks ),
8637                 rec( 12, 4, FreeBlocks ),
8638                 rec( 16, 4, PurgeableBlocks ),
8639                 rec( 20, 4, NotYetPurgeableBlocks ),
8640                 rec( 24, 4, TotalDirectoryEntries ),
8641                 rec( 28, 4, AvailableDirEntries ),
8642                 rec( 32, 4, Reserved4 ),
8643                 rec( 36, 1, SectorsPerBlock ),
8644                 rec( 37, (1,16), VolumeNameLen ),
8645         ])
8646         pkt.CompletionCodes([0x0000])
8647         # 2222/162D, 22/45
8648         pkt = NCP(0x162D, "Get Directory Information", 'file')
8649         pkt.Request( 11, [
8650                 rec( 10, 1, DirHandle )
8651         ])
8652         pkt.Reply( (30, 45), [
8653                 rec( 8, 4, TotalBlocks ),
8654                 rec( 12, 4, AvailableBlocks ),
8655                 rec( 16, 4, TotalDirectoryEntries ),
8656                 rec( 20, 4, AvailableDirEntries ),
8657                 rec( 24, 4, Reserved4 ),
8658                 rec( 28, 1, SectorsPerBlock ),
8659                 rec( 29, (1,16), VolumeNameLen ),
8660         ])
8661         pkt.CompletionCodes([0x0000, 0x9b03])
8662         # 2222/162E, 22/46
8663         pkt = NCP(0x162E, "Rename Or Move", 'file')
8664         pkt.Request( (17,525), [
8665                 rec( 10, 1, SourceDirHandle ),
8666                 rec( 11, 1, SearchAttributes ),
8667                 rec( 12, 1, SourcePathComponentCount ),
8668                 rec( 13, (1,255), SourcePath ),
8669                 rec( -1, 1, DestDirHandle ),
8670                 rec( -1, 1, DestPathComponentCount ),
8671                 rec( -1, (1,255), DestPath ),
8672         ], info_str=(SourcePath, "Rename or Move: %s", ", %s"))
8673         pkt.Reply(8)
8674         pkt.CompletionCodes([0x0000, 0x0102, 0x8701, 0x8b00, 0x8d00, 0x8e00,
8675                              0x8f00, 0x9001, 0x9101, 0x9201, 0x9a00, 0x9b03,
8676                              0x9c03, 0xa400, 0xff17])
8677         # 2222/162F, 22/47
8678         pkt = NCP(0x162F, "Get Name Space Information", 'file')
8679         pkt.Request( 11, [
8680                 rec( 10, 1, VolumeNumber )
8681         ],info_str=(VolumeNumber, "Get Name Space Information for Volume %d", ", %d"))
8682         pkt.Reply( (13,521), [
8683                 rec( 8, 1, DefinedNameSpaces ),
8684                 #
8685                 # XXX - there's actually a sequence of DefinedNameSpaces
8686                 # NameSpaceNames here, not just one.
8687                 #
8688                 rec( 9, (1,255), NameSpaceName ),
8689                 rec( -1, 1, DefinedDataStreams ),
8690                 rec( -1, 1, AssociatedNameSpace ),
8691                 #
8692                 # XXX - there's actually a sequence of DefinedDataStreams
8693                 # DataStreamNames here, not just one.
8694                 #
8695                 rec( -1, (1,255), DataStreamName ),
8696         ])
8697         pkt.CompletionCodes([0x0000])
8698         # 2222/1630, 22/48
8699         pkt = NCP(0x1630, "Get Name Space Directory Entry", 'file')
8700         pkt.Request( 16, [
8701                 rec( 10, 1, VolumeNumber ),
8702                 rec( 11, 4, DOSSequence ),
8703                 rec( 15, 1, SrcNameSpace ),
8704         ])
8705         pkt.Reply( 112, [
8706                 rec( 8, 4, SequenceNumber ),
8707                 rec( 12, 4, Subdirectory ),
8708                 rec( 16, 4, AttributesDef32 ),
8709                 rec( 20, 1, UniqueID ),
8710                 rec( 21, 1, Flags ),
8711                 rec( 22, 1, SrcNameSpace ),
8712                 rec( 23, 1, NameLength ),
8713                 rec( 24, 12, Name12 ),
8714                 rec( 36, 2, CreationTime ),
8715                 rec( 38, 2, CreationDate ),
8716                 rec( 40, 4, CreatorID, BE ),
8717                 rec( 44, 2, ArchivedTime ),
8718                 rec( 46, 2, ArchivedDate ),
8719                 rec( 48, 4, ArchiverID ),
8720                 rec( 52, 2, UpdateTime ),
8721                 rec( 54, 2, UpdateDate ),
8722                 rec( 56, 4, UpdateID ),
8723                 rec( 60, 4, FileSize ),
8724                 rec( 64, 44, Reserved44 ),
8725                 rec( 108, 2, InheritedRightsMask ),
8726                 rec( 110, 2, LastAccessedDate ),
8727         ])
8728         pkt.CompletionCodes([0x0000, 0x8900, 0x9802, 0xbf00])
8729         # 2222/1631, 22/49
8730         pkt = NCP(0x1631, "Open Data Stream", 'file')
8731         pkt.Request( (15,269), [
8732                 rec( 10, 1, DataStream ),
8733                 rec( 11, 1, DirHandle ),
8734                 rec( 12, 1, AttributesDef ),
8735                 rec( 13, 1, OpenRights ),
8736                 rec( 14, (1, 255), FileName ),
8737         ], info_str=(FileName, "Open Data Stream: %s", ", %s"))
8738         pkt.Reply( 12, [
8739                 rec( 8, 4, CCFileHandle, BE ),
8740         ])
8741         pkt.CompletionCodes([0x0000, 0x8000, 0x8200, 0x9002, 0xbe00, 0xff00])
8742         # 2222/1632, 22/50
8743         pkt = NCP(0x1632, "Get Object Effective Rights for Directory Entry", 'file')
8744         pkt.Request( (16,270), [
8745                 rec( 10, 4, ObjectID, BE ),
8746                 rec( 14, 1, DirHandle ),
8747                 rec( 15, (1, 255), Path ),
8748         ], info_str=(Path, "Get Object Effective Rights: %s", ", %s"))
8749         pkt.Reply( 10, [
8750                 rec( 8, 2, TrusteeRights ),
8751         ])
8752         pkt.CompletionCodes([0x0000, 0x7e01, 0x9b00, 0x9c03])
8753         # 2222/1633, 22/51
8754         pkt = NCP(0x1633, "Get Extended Volume Information", 'file')
8755         pkt.Request( 11, [
8756                 rec( 10, 1, VolumeNumber ),
8757         ],info_str=(VolumeNumber, "Get Extended Volume Information for Volume %d", ", %d"))
8758         pkt.Reply( (139,266), [
8759                 rec( 8, 2, VolInfoReplyLen ),
8760                 rec( 10, 128, VolInfoStructure),
8761                 rec( 138, (1,128), VolumeNameLen ),
8762         ])
8763         pkt.CompletionCodes([0x0000, 0x7e01, 0x9804, 0xfb08, 0xff00])
8764         # 2222/1634, 22/52
8765         pkt = NCP(0x1634, "Get Mount Volume List", 'file')
8766         pkt.Request( 22, [
8767                 rec( 10, 4, StartVolumeNumber ),
8768                 rec( 14, 4, VolumeRequestFlags, LE ),
8769                 rec( 18, 4, SrcNameSpace ),
8770         ])
8771         pkt.Reply( 34, [
8772                 rec( 8, 4, ItemsInPacket, var="x" ),
8773                 rec( 12, 4, NextVolumeNumber ),
8774                 rec( 16, 18, VolumeStruct, repeat="x"),
8775         ])
8776         pkt.CompletionCodes([0x0000])
8777         # 2222/1700, 23/00
8778         pkt = NCP(0x1700, "Login User", 'file')
8779         pkt.Request( (12, 58), [
8780                 rec( 10, (1,16), UserName ),
8781                 rec( -1, (1,32), Password ),
8782         ], info_str=(UserName, "Login User: %s", ", %s"))
8783         pkt.Reply(8)
8784         pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc501, 0xd700,
8785                              0xd900, 0xda00, 0xdb00, 0xde00, 0xdf00, 0xe800,
8786                              0xec00, 0xed00, 0xef00, 0xf001, 0xf100, 0xf200,
8787                              0xf600, 0xfb00, 0xfc06, 0xfe07, 0xff00])
8788         # 2222/1701, 23/01
8789         pkt = NCP(0x1701, "Change User Password", 'file')
8790         pkt.Request( (13, 90), [
8791                 rec( 10, (1,16), UserName ),
8792                 rec( -1, (1,32), Password ),
8793                 rec( -1, (1,32), NewPassword ),
8794         ], info_str=(UserName, "Change Password for User: %s", ", %s"))
8795         pkt.Reply(8)
8796         pkt.CompletionCodes([0x0000, 0x9600, 0xd600, 0xf001, 0xf101, 0xf501,
8797                              0xfc06, 0xfe07, 0xff00])
8798         # 2222/1702, 23/02
8799         pkt = NCP(0x1702, "Get User Connection List", 'file')
8800         pkt.Request( (11, 26), [
8801                 rec( 10, (1,16), UserName ),
8802         ], info_str=(UserName, "Get User Connection: %s", ", %s"))
8803         pkt.Reply( (9, 136), [
8804                 rec( 8, (1, 128), ConnectionNumberList ),
8805         ])
8806         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
8807         # 2222/1703, 23/03
8808         pkt = NCP(0x1703, "Get User Number", 'file')
8809         pkt.Request( (11, 26), [
8810                 rec( 10, (1,16), UserName ),
8811         ], info_str=(UserName, "Get User Number: %s", ", %s"))
8812         pkt.Reply( 12, [
8813                 rec( 8, 4, ObjectID, BE ),
8814         ])
8815         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
8816         # 2222/1705, 23/05
8817         pkt = NCP(0x1705, "Get Station's Logged Info", 'file')
8818         pkt.Request( 11, [
8819                 rec( 10, 1, TargetConnectionNumber ),
8820         ],info_str=(TargetConnectionNumber, "Get Station's Logged Information on Connection %d", ", %d")) 
8821         pkt.Reply( 266, [
8822                 rec( 8, 16, UserName16 ),
8823                 rec( 24, 7, LoginTime ),
8824                 rec( 31, 39, FullName ),
8825                 rec( 70, 4, UserID, BE ),
8826                 rec( 74, 128, SecurityEquivalentList ),
8827                 rec( 202, 64, Reserved64 ),
8828         ])
8829         pkt.CompletionCodes([0x0000, 0x9602, 0xfc06, 0xfd00, 0xfe07, 0xff00])
8830         # 2222/1707, 23/07
8831         pkt = NCP(0x1707, "Get Group Number", 'file')
8832         pkt.Request( 14, [
8833                 rec( 10, 4, ObjectID, BE ),
8834         ])
8835         pkt.Reply( 62, [
8836                 rec( 8, 4, ObjectID, BE ),
8837                 rec( 12, 2, ObjectType, BE ),
8838                 rec( 14, 48, ObjectNameLen ),
8839         ])
8840         pkt.CompletionCodes([0x0000, 0x9602, 0xf101, 0xfc06, 0xfe07, 0xff00])
8841         # 2222/170C, 23/12
8842         pkt = NCP(0x170C, "Verify Serialization", 'file')
8843         pkt.Request( 14, [
8844                 rec( 10, 4, ServerSerialNumber ),
8845         ])
8846         pkt.Reply(8)
8847         pkt.CompletionCodes([0x0000, 0xff00])
8848         # 2222/170D, 23/13
8849         pkt = NCP(0x170D, "Log Network Message", 'file')
8850         pkt.Request( (11, 68), [
8851                 rec( 10, (1, 58), TargetMessage ),
8852         ], info_str=(TargetMessage, "Log Network Message: %s", ", %s"))
8853         pkt.Reply(8)
8854         pkt.CompletionCodes([0x0000, 0x8000, 0x8100, 0x8800, 0x8d00, 0x8e00, 0x8f00,
8855                              0x9001, 0x9400, 0x9600, 0x9804, 0x9900, 0x9b00, 0xa100,
8856                              0xa201, 0xff00])
8857         # 2222/170E, 23/14
8858         pkt = NCP(0x170E, "Get Disk Utilization", 'file')
8859         pkt.Request( 15, [
8860                 rec( 10, 1, VolumeNumber ),
8861                 rec( 11, 4, TrusteeID, BE ),
8862         ])
8863         pkt.Reply( 19, [
8864                 rec( 8, 1, VolumeNumber ),
8865                 rec( 9, 4, TrusteeID, BE ),
8866                 rec( 13, 2, DirectoryCount, BE ),
8867                 rec( 15, 2, FileCount, BE ),
8868                 rec( 17, 2, ClusterCount, BE ),
8869         ])
8870         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0xa100, 0xf200])
8871         # 2222/170F, 23/15
8872         pkt = NCP(0x170F, "Scan File Information", 'file')
8873         pkt.Request((15,269), [
8874                 rec( 10, 2, LastSearchIndex ),
8875                 rec( 12, 1, DirHandle ),
8876                 rec( 13, 1, SearchAttributes ),
8877                 rec( 14, (1, 255), FileName ),
8878         ], info_str=(FileName, "Scan File Information: %s", ", %s"))
8879         pkt.Reply( 102, [
8880                 rec( 8, 2, NextSearchIndex ),
8881                 rec( 10, 14, FileName14 ),
8882                 rec( 24, 2, AttributesDef16 ),
8883                 rec( 26, 4, FileSize, BE ),
8884                 rec( 30, 2, CreationDate, BE ),
8885                 rec( 32, 2, LastAccessedDate, BE ),
8886                 rec( 34, 2, ModifiedDate, BE ),
8887                 rec( 36, 2, ModifiedTime, BE ),
8888                 rec( 38, 4, CreatorID, BE ),
8889                 rec( 42, 2, ArchivedDate, BE ),
8890                 rec( 44, 2, ArchivedTime, BE ),
8891                 rec( 46, 56, Reserved56 ),
8892         ])
8893         pkt.CompletionCodes([0x0000, 0x8800, 0x8900, 0x9300, 0x9400, 0x9804, 0x9b00, 0x9c00,
8894                              0xa100, 0xfd00, 0xff17])
8895         # 2222/1710, 23/16
8896         pkt = NCP(0x1710, "Set File Information", 'file')
8897         pkt.Request((91,345), [
8898                 rec( 10, 2, AttributesDef16 ),
8899                 rec( 12, 4, FileSize, BE ),
8900                 rec( 16, 2, CreationDate, BE ),
8901                 rec( 18, 2, LastAccessedDate, BE ),
8902                 rec( 20, 2, ModifiedDate, BE ),
8903                 rec( 22, 2, ModifiedTime, BE ),
8904                 rec( 24, 4, CreatorID, BE ),
8905                 rec( 28, 2, ArchivedDate, BE ),
8906                 rec( 30, 2, ArchivedTime, BE ),
8907                 rec( 32, 56, Reserved56 ),
8908                 rec( 88, 1, DirHandle ),
8909                 rec( 89, 1, SearchAttributes ),
8910                 rec( 90, (1, 255), FileName ),
8911         ], info_str=(FileName, "Set Information for File: %s", ", %s"))
8912         pkt.Reply(8)
8913         pkt.CompletionCodes([0x0000, 0x8800, 0x8c00, 0x8e00, 0x9400, 0x9600, 0x9804,
8914                              0x9b03, 0x9c00, 0xa100, 0xa201, 0xfc06, 0xfd00, 0xfe07,
8915                              0xff17])
8916         # 2222/1711, 23/17
8917         pkt = NCP(0x1711, "Get File Server Information", 'fileserver')
8918         pkt.Request(10)
8919         pkt.Reply(136, [
8920                 rec( 8, 48, ServerName ),
8921                 rec( 56, 1, OSMajorVersion ),
8922                 rec( 57, 1, OSMinorVersion ),
8923                 rec( 58, 2, ConnectionsSupportedMax, BE ),
8924                 rec( 60, 2, ConnectionsInUse, BE ),
8925                 rec( 62, 2, VolumesSupportedMax, BE ),
8926                 rec( 64, 1, OSRevision ),
8927                 rec( 65, 1, SFTSupportLevel ),
8928                 rec( 66, 1, TTSLevel ),
8929                 rec( 67, 2, ConnectionsMaxUsed, BE ),
8930                 rec( 69, 1, AccountVersion ),
8931                 rec( 70, 1, VAPVersion ),
8932                 rec( 71, 1, QueueingVersion ),
8933                 rec( 72, 1, PrintServerVersion ),
8934                 rec( 73, 1, VirtualConsoleVersion ),
8935                 rec( 74, 1, SecurityRestrictionVersion ),
8936                 rec( 75, 1, InternetBridgeVersion ),
8937                 rec( 76, 1, MixedModePathFlag ),
8938                 rec( 77, 1, LocalLoginInfoCcode ),
8939                 rec( 78, 2, ProductMajorVersion, BE ),
8940                 rec( 80, 2, ProductMinorVersion, BE ),
8941                 rec( 82, 2, ProductRevisionVersion, BE ),
8942                 rec( 84, 1, OSLanguageID, LE ),
8943                 rec( 85, 51, Reserved51 ),
8944         ])
8945         pkt.CompletionCodes([0x0000, 0x9600])
8946         # 2222/1712, 23/18
8947         pkt = NCP(0x1712, "Get Network Serial Number", 'fileserver')
8948         pkt.Request(10)
8949         pkt.Reply(14, [
8950                 rec( 8, 4, ServerSerialNumber ),
8951                 rec( 12, 2, ApplicationNumber ),
8952         ])
8953         pkt.CompletionCodes([0x0000, 0x9600])
8954         # 2222/1713, 23/19
8955         pkt = NCP(0x1713, "Get Internet Address", 'fileserver')
8956         pkt.Request(11, [
8957                 rec( 10, 1, TargetConnectionNumber ),
8958         ],info_str=(TargetConnectionNumber, "Get Internet Address for Connection %d", ", %d"))
8959         pkt.Reply(20, [
8960                 rec( 8, 4, NetworkAddress, BE ),
8961                 rec( 12, 6, NetworkNodeAddress ),
8962                 rec( 18, 2, NetworkSocket, BE ),
8963         ])
8964         pkt.CompletionCodes([0x0000, 0xff00])
8965         # 2222/1714, 23/20
8966         pkt = NCP(0x1714, "Login Object", 'file')
8967         pkt.Request( (14, 60), [
8968                 rec( 10, 2, ObjectType, BE ),
8969                 rec( 12, (1,16), ClientName ),
8970                 rec( -1, (1,32), Password ),
8971         ], info_str=(UserName, "Login Object: %s", ", %s"))
8972         pkt.Reply(8)
8973         pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc501, 0xd600, 0xd700,
8974                              0xd900, 0xda00, 0xdb00, 0xde00, 0xdf00, 0xe800, 0xec00,
8975                              0xed00, 0xef00, 0xf001, 0xf100, 0xf200, 0xf600, 0xfb00,
8976                              0xfc06, 0xfe07, 0xff00])
8977         # 2222/1715, 23/21
8978         pkt = NCP(0x1715, "Get Object Connection List", 'file')
8979         pkt.Request( (13, 28), [
8980                 rec( 10, 2, ObjectType, BE ),
8981                 rec( 12, (1,16), ObjectName ),
8982         ], info_str=(UserName, "Get Object Connection List: %s", ", %s"))
8983         pkt.Reply( (9, 136), [
8984                 rec( 8, (1, 128), ConnectionNumberList ),
8985         ])
8986         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
8987         # 2222/1716, 23/22
8988         pkt = NCP(0x1716, "Get Station's Logged Info", 'file')
8989         pkt.Request( 11, [
8990                 rec( 10, 1, TargetConnectionNumber ),
8991         ])
8992         pkt.Reply( 70, [
8993                 rec( 8, 4, UserID, BE ),
8994                 rec( 12, 2, ObjectType, BE ),
8995                 rec( 14, 48, ObjectNameLen ),
8996                 rec( 62, 7, LoginTime ),       
8997                 rec( 69, 1, Reserved ),
8998         ])
8999         pkt.CompletionCodes([0x0000, 0x9602, 0xfb0a, 0xfc06, 0xfd00, 0xfe07, 0xff00])
9000         # 2222/1717, 23/23
9001         pkt = NCP(0x1717, "Get Login Key", 'file')
9002         pkt.Request(10)
9003         pkt.Reply( 16, [
9004                 rec( 8, 8, LoginKey ),
9005         ])
9006         pkt.CompletionCodes([0x0000, 0x9602])
9007         # 2222/1718, 23/24
9008         pkt = NCP(0x1718, "Keyed Object Login", 'file')
9009         pkt.Request( (21, 68), [
9010                 rec( 10, 8, LoginKey ),
9011                 rec( 18, 2, ObjectType, BE ),
9012                 rec( 20, (1,48), ObjectName ),
9013         ], info_str=(ObjectName, "Keyed Object Login: %s", ", %s"))
9014         pkt.Reply(8)
9015         pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc500, 0xd900, 0xda00,
9016                              0xdb00, 0xdc00, 0xde00])
9017         # 2222/171A, 23/26
9018         #
9019         # XXX - for NCP-over-IP, the NetworkAddress field appears to be
9020         # an IP address, rather than an IPX network address, and should
9021         # be dissected as an FT_IPv4 value; the NetworkNodeAddress and
9022         # NetworkSocket are 0.
9023         #
9024         # For NCP-over-IPX, it should probably be dissected as an
9025         # FT_IPXNET value.
9026         #
9027         pkt = NCP(0x171A, "Get Internet Address", 'fileserver')
9028         pkt.Request(11, [
9029                 rec( 10, 1, TargetConnectionNumber ),
9030         ])
9031         pkt.Reply(21, [
9032                 rec( 8, 4, NetworkAddress, BE ),
9033                 rec( 12, 6, NetworkNodeAddress ),
9034                 rec( 18, 2, NetworkSocket, BE ),
9035                 rec( 20, 1, ConnectionType ),
9036         ])
9037         pkt.CompletionCodes([0x0000])
9038         # 2222/171B, 23/27
9039         pkt = NCP(0x171B, "Get Object Connection List", 'file')
9040         pkt.Request( (17,64), [
9041                 rec( 10, 4, SearchConnNumber ),
9042                 rec( 14, 2, ObjectType, BE ),
9043                 rec( 16, (1,48), ObjectName ),
9044         ], info_str=(ObjectName, "Get Object Connection List: %s", ", %s"))
9045         pkt.Reply( (10,137), [
9046                 rec( 8, 1, ConnListLen, var="x" ),
9047                 rec( 9, (1,128), ConnectionNumberList, repeat="x" ),
9048         ])
9049         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9050         # 2222/171C, 23/28
9051         pkt = NCP(0x171C, "Get Station's Logged Info", 'file')
9052         pkt.Request( 14, [
9053                 rec( 10, 4, TargetConnectionNumber ),
9054         ])
9055         pkt.Reply( 70, [
9056                 rec( 8, 4, UserID, BE ),
9057                 rec( 12, 2, ObjectType, BE ),
9058                 rec( 14, 48, ObjectNameLen ),
9059                 rec( 62, 7, LoginTime ),
9060                 rec( 69, 1, Reserved ),
9061         ])
9062         pkt.CompletionCodes([0x0000, 0x9602, 0xfb02, 0xfc06, 0xfd00, 0xfe07, 0xff00])
9063         # 2222/171D, 23/29
9064         pkt = NCP(0x171D, "Change Connection State", 'file')
9065         pkt.Request( 11, [
9066                 rec( 10, 1, RequestCode ),
9067         ])
9068         pkt.Reply(8)
9069         pkt.CompletionCodes([0x0000, 0x0109, 0x7a00, 0x7b00, 0x7c00, 0xe000, 0xfb06, 0xfd00])
9070         # 2222/171E, 23/30
9071         pkt = NCP(0x171E, "Set Watchdog Delay Interval", 'file')
9072         pkt.Request( 14, [
9073                 rec( 10, 4, NumberOfMinutesToDelay ),
9074         ])
9075         pkt.Reply(8)
9076         pkt.CompletionCodes([0x0000, 0x0107])
9077         # 2222/171F, 23/31
9078         pkt = NCP(0x171F, "Get Connection List From Object", 'file')
9079         pkt.Request( 18, [
9080                 rec( 10, 4, ObjectID, BE ),
9081                 rec( 14, 4, ConnectionNumber ),
9082         ])
9083         pkt.Reply( (9, 136), [
9084                 rec( 8, (1, 128), ConnectionNumberList ),
9085         ])
9086         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9087         # 2222/1720, 23/32
9088         pkt = NCP(0x1720, "Scan Bindery Object (List)", 'bindery')
9089         pkt.Request((23,70), [
9090                 rec( 10, 4, NextObjectID, BE ),
9091                 rec( 14, 4, ObjectType, BE ),
9092                 rec( 18, 4, InfoFlags ),
9093                 rec( 22, (1,48), ObjectName ),
9094         ], info_str=(ObjectName, "Scan Bindery Object: %s", ", %s"))
9095         pkt.Reply(NO_LENGTH_CHECK, [
9096                 rec( 8, 4, ObjectInfoReturnCount ),
9097                 rec( 12, 4, NextObjectID, BE ),
9098                 rec( 16, 4, ObjectIDInfo ),
9099                 srec(ObjectTypeStruct, req_cond="ncp.info_flags_type == TRUE"),
9100                 srec(ObjectSecurityStruct, req_cond="ncp.info_flags_security == TRUE"),
9101                 srec(ObjectFlagsStruct, req_cond="ncp.info_flags_flags == TRUE"),
9102                 srec(ObjectNameStruct, req_cond="ncp.info_flags_name == TRUE"),
9103         ])
9104         pkt.ReqCondSizeVariable()
9105         pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xfc02, 0xfe01, 0xff00])
9106         # 2222/1721, 23/33
9107         pkt = NCP(0x1721, "Generate GUIDs", 'nds')
9108         pkt.Request( 14, [
9109                 rec( 10, 4, ReturnInfoCount ),
9110         ])
9111         pkt.Reply(28, [
9112                 rec( 8, 4, ReturnInfoCount, var="x" ),
9113                 rec( 12, 16, GUID, repeat="x" ),
9114         ])
9115         pkt.CompletionCodes([0x0000])
9116         # 2222/1732, 23/50
9117         pkt = NCP(0x1732, "Create Bindery Object", 'bindery')
9118         pkt.Request( (15,62), [
9119                 rec( 10, 1, ObjectFlags ),
9120                 rec( 11, 1, ObjectSecurity ),
9121                 rec( 12, 2, ObjectType, BE ),
9122                 rec( 14, (1,48), ObjectName ),
9123         ], info_str=(ObjectName, "Create Bindery Object: %s", ", %s"))
9124         pkt.Reply(8)
9125         pkt.CompletionCodes([0x0000, 0x9600, 0xe700, 0xee00, 0xef00, 0xf101, 0xf501,
9126                              0xfc06, 0xfe07, 0xff00])
9127         # 2222/1733, 23/51
9128         pkt = NCP(0x1733, "Delete Bindery Object", 'bindery')
9129         pkt.Request( (13,60), [
9130                 rec( 10, 2, ObjectType, BE ),
9131                 rec( 12, (1,48), ObjectName ),
9132         ], info_str=(ObjectName, "Delete Bindery Object: %s", ", %s"))
9133         pkt.Reply(8)
9134         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf200, 0xf400, 0xf600, 0xfb00,
9135                              0xfc06, 0xfe07, 0xff00])
9136         # 2222/1734, 23/52
9137         pkt = NCP(0x1734, "Rename Bindery Object", 'bindery')
9138         pkt.Request( (14,108), [
9139                 rec( 10, 2, ObjectType, BE ),
9140                 rec( 12, (1,48), ObjectName ),
9141                 rec( -1, (1,48), NewObjectName ),
9142         ], info_str=(ObjectName, "Rename Bindery Object: %s", ", %s"))
9143         pkt.Reply(8)
9144         pkt.CompletionCodes([0x0000, 0x9600, 0xee00, 0xf000, 0xf300, 0xfc06, 0xfe07, 0xff00])
9145         # 2222/1735, 23/53
9146         pkt = NCP(0x1735, "Get Bindery Object ID", 'bindery')
9147         pkt.Request((13,60), [
9148                 rec( 10, 2, ObjectType, BE ),
9149                 rec( 12, (1,48), ObjectName ),
9150         ], info_str=(ObjectName, "Get Bindery Object: %s", ", %s"))
9151         pkt.Reply(62, [
9152                 rec( 8, 4, ObjectID, BE ),
9153                 rec( 12, 2, ObjectType, BE ),
9154                 rec( 14, 48, ObjectNameLen ),
9155         ])
9156         pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xf000, 0xfc02, 0xfe01, 0xff00])
9157         # 2222/1736, 23/54
9158         pkt = NCP(0x1736, "Get Bindery Object Name", 'bindery')
9159         pkt.Request( 14, [
9160                 rec( 10, 4, ObjectID, BE ),
9161         ])
9162         pkt.Reply( 62, [
9163                 rec( 8, 4, ObjectID, BE ),
9164                 rec( 12, 2, ObjectType, BE ),
9165                 rec( 14, 48, ObjectNameLen ),
9166         ])
9167         pkt.CompletionCodes([0x0000, 0x9600, 0xf101, 0xfc02, 0xfe01, 0xff00])
9168         # 2222/1737, 23/55
9169         pkt = NCP(0x1737, "Scan Bindery Object", 'bindery')
9170         pkt.Request((17,64), [
9171                 rec( 10, 4, ObjectID, BE ),
9172                 rec( 14, 2, ObjectType, BE ),
9173                 rec( 16, (1,48), ObjectName ),
9174         ], info_str=(ObjectName, "Scan Bindery Object: %s", ", %s"))
9175         pkt.Reply(65, [
9176                 rec( 8, 4, ObjectID, BE ),
9177                 rec( 12, 2, ObjectType, BE ),
9178                 rec( 14, 48, ObjectNameLen ),
9179                 rec( 62, 1, ObjectFlags ),
9180                 rec( 63, 1, ObjectSecurity ),
9181                 rec( 64, 1, ObjectHasProperties ),
9182         ])
9183         pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xfc02,
9184                              0xfe01, 0xff00])
9185         # 2222/1738, 23/56
9186         pkt = NCP(0x1738, "Change Bindery Object Security", 'bindery')
9187         pkt.Request((14,61), [
9188                 rec( 10, 1, ObjectSecurity ),
9189                 rec( 11, 2, ObjectType, BE ),
9190                 rec( 13, (1,48), ObjectName ),
9191         ], info_str=(ObjectName, "Change Bindery Object Security: %s", ", %s"))
9192         pkt.Reply(8)
9193         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf501, 0xfc02, 0xfe01, 0xff00])
9194         # 2222/1739, 23/57
9195         pkt = NCP(0x1739, "Create Property", 'bindery')
9196         pkt.Request((16,78), [
9197                 rec( 10, 2, ObjectType, BE ),
9198                 rec( 12, (1,48), ObjectName ),
9199                 rec( -1, 1, PropertyType ),
9200                 rec( -1, 1, ObjectSecurity ),
9201                 rec( -1, (1,16), PropertyName ),
9202         ], info_str=(PropertyName, "Create Property: %s", ", %s"))
9203         pkt.Reply(8)
9204         pkt.CompletionCodes([0x0000, 0x9600, 0xed00, 0xef00, 0xf000, 0xf101,
9205                              0xf200, 0xf600, 0xf700, 0xfb00, 0xfc02, 0xfe01,
9206                              0xff00])
9207         # 2222/173A, 23/58
9208         pkt = NCP(0x173A, "Delete Property", 'bindery')
9209         pkt.Request((14,76), [
9210                 rec( 10, 2, ObjectType, BE ),
9211                 rec( 12, (1,48), ObjectName ),
9212                 rec( -1, (1,16), PropertyName ),
9213         ], info_str=(PropertyName, "Delete Property: %s", ", %s"))
9214         pkt.Reply(8)
9215         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf600, 0xfb00, 0xfc02,
9216                              0xfe01, 0xff00])
9217         # 2222/173B, 23/59
9218         pkt = NCP(0x173B, "Change Property Security", 'bindery')
9219         pkt.Request((15,77), [
9220                 rec( 10, 2, ObjectType, BE ),
9221                 rec( 12, (1,48), ObjectName ),
9222                 rec( -1, 1, ObjectSecurity ),
9223                 rec( -1, (1,16), PropertyName ),
9224         ], info_str=(PropertyName, "Change Property Security: %s", ", %s"))
9225         pkt.Reply(8)
9226         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf200, 0xf600, 0xfb00,
9227                              0xfc02, 0xfe01, 0xff00])
9228         # 2222/173C, 23/60
9229         pkt = NCP(0x173C, "Scan Property", 'bindery')
9230         pkt.Request((18,80), [
9231                 rec( 10, 2, ObjectType, BE ),
9232                 rec( 12, (1,48), ObjectName ),
9233                 rec( -1, 4, LastInstance, BE ),
9234                 rec( -1, (1,16), PropertyName ),
9235         ], info_str=(PropertyName, "Scan Property: %s", ", %s"))
9236         pkt.Reply( 32, [
9237                 rec( 8, 16, PropertyName16 ),
9238                 rec( 24, 1, ObjectFlags ),
9239                 rec( 25, 1, ObjectSecurity ),
9240                 rec( 26, 4, SearchInstance, BE ),
9241                 rec( 30, 1, ValueAvailable ),
9242                 rec( 31, 1, MoreProperties ),
9243         ])
9244         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf200, 0xf600, 0xfb00,
9245                              0xfc02, 0xfe01, 0xff00])
9246         # 2222/173D, 23/61
9247         pkt = NCP(0x173D, "Read Property Value", 'bindery')
9248         pkt.Request((15,77), [
9249                 rec( 10, 2, ObjectType, BE ),
9250                 rec( 12, (1,48), ObjectName ),
9251                 rec( -1, 1, PropertySegment ),
9252                 rec( -1, (1,16), PropertyName ),
9253         ], info_str=(PropertyName, "Read Property Value: %s", ", %s"))
9254         pkt.Reply(138, [
9255                 rec( 8, 128, PropertyData ),
9256                 rec( 136, 1, PropertyHasMoreSegments ),
9257                 rec( 137, 1, PropertyType ),
9258         ])
9259         pkt.CompletionCodes([0x0000, 0x8800, 0x9300, 0x9600, 0xec01,
9260                              0xf000, 0xf100, 0xf900, 0xfb02, 0xfc02,
9261                              0xfe01, 0xff00])
9262         # 2222/173E, 23/62
9263         pkt = NCP(0x173E, "Write Property Value", 'bindery')
9264         pkt.Request((144,206), [
9265                 rec( 10, 2, ObjectType, BE ),
9266                 rec( 12, (1,48), ObjectName ),
9267                 rec( -1, 1, PropertySegment ),
9268                 rec( -1, 1, MoreFlag ),
9269                 rec( -1, (1,16), PropertyName ),
9270                 rec( -1, 128, PropertyValue ),
9271         ], info_str=(PropertyName, "Write Property Value: %s", ", %s"))
9272         pkt.Reply(8)
9273         pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xec01, 0xf000, 0xf800,
9274                              0xfb02, 0xfc03, 0xfe01, 0xff00 ])
9275         # 2222/173F, 23/63
9276         pkt = NCP(0x173F, "Verify Bindery Object Password", 'bindery')
9277         pkt.Request((14,92), [
9278                 rec( 10, 2, ObjectType, BE ),
9279                 rec( 12, (1,48), ObjectName ),
9280                 rec( -1, (1,32), Password ),
9281         ], info_str=(ObjectName, "Verify Bindery Object Password: %s", ", %s"))
9282         pkt.Reply(8)
9283         pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xec01, 0xf000, 0xf101,
9284                              0xfb02, 0xfc03, 0xfe01, 0xff00 ])
9285         # 2222/1740, 23/64
9286         pkt = NCP(0x1740, "Change Bindery Object Password", 'bindery')
9287         pkt.Request((15,124), [
9288                 rec( 10, 2, ObjectType, BE ),
9289                 rec( 12, (1,48), ObjectName ),
9290                 rec( -1, (1,32), Password ),
9291                 rec( -1, (1,32), NewPassword ),
9292         ], info_str=(ObjectName, "Change Bindery Object Password: %s", ", %s"))
9293         pkt.Reply(8)
9294         pkt.CompletionCodes([0x0000, 0x9600, 0xc501, 0xd701, 0xe800, 0xec01, 0xf001,
9295                              0xf100, 0xf800, 0xfb02, 0xfc03, 0xfe01, 0xff00])
9296         # 2222/1741, 23/65
9297         pkt = NCP(0x1741, "Add Bindery Object To Set", 'bindery')
9298         pkt.Request((17,126), [
9299                 rec( 10, 2, ObjectType, BE ),
9300                 rec( 12, (1,48), ObjectName ),
9301                 rec( -1, (1,16), PropertyName ),
9302                 rec( -1, 2, MemberType, BE ),
9303                 rec( -1, (1,48), MemberName ),
9304         ], info_str=(MemberName, "Add Bindery Object to Set: %s", ", %s"))
9305         pkt.Reply(8)
9306         pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xe900, 0xea00, 0xeb00,
9307                              0xec01, 0xf000, 0xf800, 0xfb02, 0xfc03, 0xfe01,
9308                              0xff00])
9309         # 2222/1742, 23/66
9310         pkt = NCP(0x1742, "Delete Bindery Object From Set", 'bindery')
9311         pkt.Request((17,126), [
9312                 rec( 10, 2, ObjectType, BE ),
9313                 rec( 12, (1,48), ObjectName ),
9314                 rec( -1, (1,16), PropertyName ),
9315                 rec( -1, 2, MemberType, BE ),
9316                 rec( -1, (1,48), MemberName ),
9317         ], info_str=(MemberName, "Delete Bindery Object from Set: %s", ", %s"))
9318         pkt.Reply(8)
9319         pkt.CompletionCodes([0x0000, 0x9600, 0xeb00, 0xf000, 0xf800, 0xfb02,
9320                              0xfc03, 0xfe01, 0xff00])
9321         # 2222/1743, 23/67
9322         pkt = NCP(0x1743, "Is Bindery Object In Set", 'bindery')
9323         pkt.Request((17,126), [
9324                 rec( 10, 2, ObjectType, BE ),
9325                 rec( 12, (1,48), ObjectName ),
9326                 rec( -1, (1,16), PropertyName ),
9327                 rec( -1, 2, MemberType, BE ),
9328                 rec( -1, (1,48), MemberName ),
9329         ], info_str=(MemberName, "Is Bindery Object in Set: %s", ", %s"))
9330         pkt.Reply(8)
9331         pkt.CompletionCodes([0x0000, 0x9600, 0xea00, 0xeb00, 0xec01, 0xf000,
9332                              0xfb02, 0xfc03, 0xfe01, 0xff00])
9333         # 2222/1744, 23/68
9334         pkt = NCP(0x1744, "Close Bindery", 'bindery')
9335         pkt.Request(10)
9336         pkt.Reply(8)
9337         pkt.CompletionCodes([0x0000, 0xff00])
9338         # 2222/1745, 23/69
9339         pkt = NCP(0x1745, "Open Bindery", 'bindery')
9340         pkt.Request(10)
9341         pkt.Reply(8)
9342         pkt.CompletionCodes([0x0000, 0xff00])
9343         # 2222/1746, 23/70
9344         pkt = NCP(0x1746, "Get Bindery Access Level", 'bindery')
9345         pkt.Request(10)
9346         pkt.Reply(13, [
9347                 rec( 8, 1, ObjectSecurity ),
9348                 rec( 9, 4, LoggedObjectID, BE ),
9349         ])
9350         pkt.CompletionCodes([0x0000, 0x9600])
9351         # 2222/1747, 23/71
9352         pkt = NCP(0x1747, "Scan Bindery Object Trustee Paths", 'bindery')
9353         pkt.Request(17, [
9354                 rec( 10, 1, VolumeNumber ),
9355                 rec( 11, 2, LastSequenceNumber, BE ),
9356                 rec( 13, 4, ObjectID, BE ),
9357         ])
9358         pkt.Reply((16,270), [
9359                 rec( 8, 2, LastSequenceNumber, BE),
9360                 rec( 10, 4, ObjectID, BE ),
9361                 rec( 14, 1, ObjectSecurity ),
9362                 rec( 15, (1,255), Path ),
9363         ])
9364         pkt.CompletionCodes([0x0000, 0x9300, 0x9600, 0xa100, 0xf000, 0xf100,
9365                              0xf200, 0xfc02, 0xfe01, 0xff00])
9366         # 2222/1748, 23/72
9367         pkt = NCP(0x1748, "Get Bindery Object Access Level", 'bindery')
9368         pkt.Request(14, [
9369                 rec( 10, 4, ObjectID, BE ),
9370         ])
9371         pkt.Reply(9, [
9372                 rec( 8, 1, ObjectSecurity ),
9373         ])
9374         pkt.CompletionCodes([0x0000, 0x9600])
9375         # 2222/1749, 23/73
9376         pkt = NCP(0x1749, "Is Calling Station a Manager", 'bindery')
9377         pkt.Request(10)
9378         pkt.Reply(8)
9379         pkt.CompletionCodes([0x0003, 0xff1e])
9380         # 2222/174A, 23/74
9381         pkt = NCP(0x174A, "Keyed Verify Password", 'bindery')
9382         pkt.Request((21,68), [
9383                 rec( 10, 8, LoginKey ),
9384                 rec( 18, 2, ObjectType, BE ),
9385                 rec( 20, (1,48), ObjectName ),
9386         ], info_str=(ObjectName, "Keyed Verify Password: %s", ", %s"))
9387         pkt.Reply(8)
9388         pkt.CompletionCodes([0x0000, 0xc500, 0xfe01, 0xff0c])
9389         # 2222/174B, 23/75
9390         pkt = NCP(0x174B, "Keyed Change Password", 'bindery')
9391         pkt.Request((22,100), [
9392                 rec( 10, 8, LoginKey ),
9393                 rec( 18, 2, ObjectType, BE ),
9394                 rec( 20, (1,48), ObjectName ),
9395                 rec( -1, (1,32), Password ),
9396         ], info_str=(ObjectName, "Keyed Change Password: %s", ", %s"))
9397         pkt.Reply(8)
9398         pkt.CompletionCodes([0x0000, 0xc500, 0xfe01, 0xff0c])
9399         # 2222/174C, 23/76
9400         pkt = NCP(0x174C, "List Relations Of an Object", 'bindery')
9401         pkt.Request((18,80), [
9402                 rec( 10, 4, LastSeen, BE ),
9403                 rec( 14, 2, ObjectType, BE ),
9404                 rec( 16, (1,48), ObjectName ),
9405                 rec( -1, (1,16), PropertyName ),
9406         ], info_str=(ObjectName, "List Relations of an Object: %s", ", %s"))
9407         pkt.Reply(14, [
9408                 rec( 8, 2, RelationsCount, BE, var="x" ),
9409                 rec( 10, 4, ObjectID, BE, repeat="x" ),
9410         ])
9411         pkt.CompletionCodes([0x0000, 0xf000, 0xf200, 0xfe01, 0xff00])
9412         # 2222/1764, 23/100
9413         pkt = NCP(0x1764, "Create Queue", 'qms')
9414         pkt.Request((15,316), [
9415                 rec( 10, 2, QueueType, BE ),
9416                 rec( 12, (1,48), QueueName ),
9417                 rec( -1, 1, PathBase ),
9418                 rec( -1, (1,255), Path ),
9419         ], info_str=(QueueName, "Create Queue: %s", ", %s"))
9420         pkt.Reply(12, [
9421                 rec( 8, 4, QueueID, BE ),
9422         ])
9423         pkt.CompletionCodes([0x0000, 0x9600, 0x9900, 0xd000, 0xd100,
9424                              0xd200, 0xd300, 0xd400, 0xd500, 0xd601,
9425                              0xd703, 0xd800, 0xd902, 0xda01, 0xdb02,
9426                              0xee00, 0xff00])
9427         # 2222/1765, 23/101
9428         pkt = NCP(0x1765, "Destroy Queue", 'qms')
9429         pkt.Request(14, [
9430                 rec( 10, 4, QueueID, BE ),
9431         ])
9432         pkt.Reply(8)
9433         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9434                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9435                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9436         # 2222/1766, 23/102
9437         pkt = NCP(0x1766, "Read Queue Current Status", 'qms')
9438         pkt.Request(14, [
9439                 rec( 10, 4, QueueID, BE ),
9440         ])
9441         pkt.Reply(20, [
9442                 rec( 8, 4, QueueID, BE ),
9443                 rec( 12, 1, QueueStatus ),
9444                 rec( 13, 1, CurrentEntries ),
9445                 rec( 14, 1, CurrentServers, var="x" ),
9446                 rec( 15, 4, ServerIDList, repeat="x" ),
9447                 rec( 19, 1, ServerStationList, repeat="x" ),
9448         ])
9449         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9450                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9451                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9452         # 2222/1767, 23/103
9453         pkt = NCP(0x1767, "Set Queue Current Status", 'qms')
9454         pkt.Request(15, [
9455                 rec( 10, 4, QueueID, BE ),
9456                 rec( 14, 1, QueueStatus ),
9457         ])
9458         pkt.Reply(8)
9459         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9460                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9461                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07,
9462                              0xff00])
9463         # 2222/1768, 23/104
9464         pkt = NCP(0x1768, "Create Queue Job And File", 'qms')
9465         pkt.Request(264, [
9466                 rec( 10, 4, QueueID, BE ),
9467                 rec( 14, 250, JobStruct ),
9468         ])
9469         pkt.Reply(62, [
9470                 rec( 8, 1, ClientStation ),
9471                 rec( 9, 1, ClientTaskNumber ),
9472                 rec( 10, 4, ClientIDNumber, BE ),
9473                 rec( 14, 4, TargetServerIDNumber, BE ),
9474                 rec( 18, 6, TargetExecutionTime ),
9475                 rec( 24, 6, JobEntryTime ),
9476                 rec( 30, 2, JobNumber, BE ),
9477                 rec( 32, 2, JobType, BE ),
9478                 rec( 34, 1, JobPosition ),
9479                 rec( 35, 1, JobControlFlags ),
9480                 rec( 36, 14, JobFileName ),
9481                 rec( 50, 6, JobFileHandle ),
9482                 rec( 56, 1, ServerStation ),
9483                 rec( 57, 1, ServerTaskNumber ),
9484                 rec( 58, 4, ServerID, BE ),
9485         ])              
9486         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9487                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9488                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07,
9489                              0xff00])
9490         # 2222/1769, 23/105
9491         pkt = NCP(0x1769, "Close File And Start Queue Job", 'qms')
9492         pkt.Request(16, [
9493                 rec( 10, 4, QueueID, BE ),
9494                 rec( 14, 2, JobNumber, BE ),
9495         ])
9496         pkt.Reply(8)
9497         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9498                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9499                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9500         # 2222/176A, 23/106
9501         pkt = NCP(0x176A, "Remove Job From Queue", 'qms')
9502         pkt.Request(16, [
9503                 rec( 10, 4, QueueID, BE ),
9504                 rec( 14, 2, JobNumber, BE ),
9505         ])
9506         pkt.Reply(8)
9507         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9508                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9509                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9510         # 2222/176B, 23/107
9511         pkt = NCP(0x176B, "Get Queue Job List", 'qms')
9512         pkt.Request(14, [
9513                 rec( 10, 4, QueueID, BE ),
9514         ])
9515         pkt.Reply(12, [
9516                 rec( 8, 2, JobCount, BE, var="x" ),
9517                 rec( 10, 2, JobNumber, BE, repeat="x" ),
9518         ])
9519         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9520                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9521                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9522         # 2222/176C, 23/108
9523         pkt = NCP(0x176C, "Read Queue Job Entry", 'qms')
9524         pkt.Request(16, [
9525                 rec( 10, 4, QueueID, BE ),
9526                 rec( 14, 2, JobNumber, BE ),
9527         ])
9528         pkt.Reply(258, [
9529             rec( 8, 250, JobStruct ),
9530         ])              
9531         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9532                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9533                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9534         # 2222/176D, 23/109
9535         pkt = NCP(0x176D, "Change Queue Job Entry", 'qms')
9536         pkt.Request(260, [
9537             rec( 14, 250, JobStruct ),
9538         ])
9539         pkt.Reply(8)            
9540         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9541                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9542                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9543         # 2222/176E, 23/110
9544         pkt = NCP(0x176E, "Change Queue Job Position", 'qms')
9545         pkt.Request(17, [
9546                 rec( 10, 4, QueueID, BE ),
9547                 rec( 14, 2, JobNumber, BE ),
9548                 rec( 16, 1, NewPosition ),
9549         ])
9550         pkt.Reply(8)
9551         pkt.CompletionCodes([0x0000, 0x9600, 0xd000, 0xd100, 0xd500,
9552                              0xd601, 0xfe07, 0xff1f])
9553         # 2222/176F, 23/111
9554         pkt = NCP(0x176F, "Attach Queue Server To Queue", 'qms')
9555         pkt.Request(14, [
9556                 rec( 10, 4, QueueID, BE ),
9557         ])
9558         pkt.Reply(8)
9559         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9560                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9561                              0xd800, 0xd902, 0xda01, 0xdb02, 0xea00,
9562                              0xfc06, 0xff00])
9563         # 2222/1770, 23/112
9564         pkt = NCP(0x1770, "Detach Queue Server From Queue", 'qms')
9565         pkt.Request(14, [
9566                 rec( 10, 4, QueueID, BE ),
9567         ])
9568         pkt.Reply(8)
9569         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9570                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9571                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9572         # 2222/1771, 23/113
9573         pkt = NCP(0x1771, "Service Queue Job", 'qms')
9574         pkt.Request(16, [
9575                 rec( 10, 4, QueueID, BE ),
9576                 rec( 14, 2, ServiceType, BE ),
9577         ])
9578         pkt.Reply(62, [
9579                 rec( 8, 1, ClientStation ),
9580                 rec( 9, 1, ClientTaskNumber ),
9581                 rec( 10, 4, ClientIDNumber, BE ),
9582                 rec( 14, 4, TargetServerIDNumber, BE ),
9583                 rec( 18, 6, TargetExecutionTime ),
9584                 rec( 24, 6, JobEntryTime ),
9585                 rec( 30, 2, JobNumber, BE ),
9586                 rec( 32, 2, JobType, BE ),
9587                 rec( 34, 1, JobPosition ),
9588                 rec( 35, 1, JobControlFlags ),
9589                 rec( 36, 14, JobFileName ),
9590                 rec( 50, 6, JobFileHandle ),
9591                 rec( 56, 1, ServerStation ),
9592                 rec( 57, 1, ServerTaskNumber ),
9593                 rec( 58, 4, ServerID, BE ),
9594         ])              
9595         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9596                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9597                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9598         # 2222/1772, 23/114
9599         pkt = NCP(0x1772, "Finish Servicing Queue Job", 'qms')
9600         pkt.Request(20, [
9601                 rec( 10, 4, QueueID, BE ),
9602                 rec( 14, 2, JobNumber, BE ),
9603                 rec( 16, 4, ChargeInformation, BE ),
9604         ])
9605         pkt.Reply(8)            
9606         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9607                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9608                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9609         # 2222/1773, 23/115
9610         pkt = NCP(0x1773, "Abort Servicing Queue Job", 'qms')
9611         pkt.Request(16, [
9612                 rec( 10, 4, QueueID, BE ),
9613                 rec( 14, 2, JobNumber, BE ),
9614         ])
9615         pkt.Reply(8)            
9616         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9617                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9618                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9619         # 2222/1774, 23/116
9620         pkt = NCP(0x1774, "Change To Client Rights", 'qms')
9621         pkt.Request(16, [
9622                 rec( 10, 4, QueueID, BE ),
9623                 rec( 14, 2, JobNumber, BE ),
9624         ])
9625         pkt.Reply(8)            
9626         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9627                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9628                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9629         # 2222/1775, 23/117
9630         pkt = NCP(0x1775, "Restore Queue Server Rights", 'qms')
9631         pkt.Request(10)
9632         pkt.Reply(8)            
9633         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9634                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9635                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9636         # 2222/1776, 23/118
9637         pkt = NCP(0x1776, "Read Queue Server Current Status", 'qms')
9638         pkt.Request(19, [
9639                 rec( 10, 4, QueueID, BE ),
9640                 rec( 14, 4, ServerID, BE ),
9641                 rec( 18, 1, ServerStation ),
9642         ])
9643         pkt.Reply(72, [
9644                 rec( 8, 64, ServerStatusRecord ),
9645         ])
9646         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9647                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9648                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9649         # 2222/1777, 23/119
9650         pkt = NCP(0x1777, "Set Queue Server Current Status", 'qms')
9651         pkt.Request(78, [
9652                 rec( 10, 4, QueueID, BE ),
9653                 rec( 14, 64, ServerStatusRecord ),
9654         ])
9655         pkt.Reply(8)
9656         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9657                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9658                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9659         # 2222/1778, 23/120
9660         pkt = NCP(0x1778, "Get Queue Job File Size", 'qms')
9661         pkt.Request(16, [
9662                 rec( 10, 4, QueueID, BE ),
9663                 rec( 14, 2, JobNumber, BE ),
9664         ])
9665         pkt.Reply(20, [
9666                 rec( 8, 4, QueueID, BE ),
9667                 rec( 12, 4, JobNumberLong ),
9668                 rec( 16, 4, FileSize, BE ),
9669         ])
9670         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9671                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9672                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9673         # 2222/1779, 23/121
9674         pkt = NCP(0x1779, "Create Queue Job And File", 'qms')
9675         pkt.Request(264, [
9676                 rec( 10, 4, QueueID, BE ),
9677                 rec( 14, 250, JobStruct ),
9678         ])
9679         pkt.Reply(94, [
9680                 rec( 8, 86, JobStructNew ),
9681         ])              
9682         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9683                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9684                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9685         # 2222/177A, 23/122
9686         pkt = NCP(0x177A, "Read Queue Job Entry", 'qms')
9687         pkt.Request(18, [
9688                 rec( 10, 4, QueueID, BE ),
9689                 rec( 14, 4, JobNumberLong ),
9690         ])
9691         pkt.Reply(258, [
9692             rec( 8, 250, JobStruct ),
9693         ])              
9694         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9695                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9696                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9697         # 2222/177B, 23/123
9698         pkt = NCP(0x177B, "Change Queue Job Entry", 'qms')
9699         pkt.Request(264, [
9700                 rec( 10, 4, QueueID, BE ),
9701                 rec( 14, 250, JobStruct ),
9702         ])
9703         pkt.Reply(8)            
9704         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9705                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9706                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff00])
9707         # 2222/177C, 23/124
9708         pkt = NCP(0x177C, "Service Queue Job", 'qms')
9709         pkt.Request(16, [
9710                 rec( 10, 4, QueueID, BE ),
9711                 rec( 14, 2, ServiceType ),
9712         ])
9713         pkt.Reply(94, [
9714             rec( 8, 86, JobStructNew ),
9715         ])              
9716         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9717                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9718                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9719         # 2222/177D, 23/125
9720         pkt = NCP(0x177D, "Read Queue Current Status", 'qms')
9721         pkt.Request(14, [
9722                 rec( 10, 4, QueueID, BE ),
9723         ])
9724         pkt.Reply(32, [
9725                 rec( 8, 4, QueueID, BE ),
9726                 rec( 12, 1, QueueStatus ),
9727                 rec( 13, 3, Reserved3 ),
9728                 rec( 16, 4, CurrentEntries ),
9729                 rec( 20, 4, CurrentServers, var="x" ),
9730                 rec( 24, 4, ServerIDList, repeat="x" ),
9731                 rec( 28, 4, ServerStationList, repeat="x" ),
9732         ])
9733         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9734                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9735                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9736         # 2222/177E, 23/126
9737         pkt = NCP(0x177E, "Set Queue Current Status", 'qms')
9738         pkt.Request(15, [
9739                 rec( 10, 4, QueueID, BE ),
9740                 rec( 14, 1, QueueStatus ),
9741         ])
9742         pkt.Reply(8)
9743         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9744                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9745                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9746         # 2222/177F, 23/127
9747         pkt = NCP(0x177F, "Close File And Start Queue Job", 'qms')
9748         pkt.Request(18, [
9749                 rec( 10, 4, QueueID, BE ),
9750                 rec( 14, 4, JobNumberLong ),
9751         ])
9752         pkt.Reply(8)
9753         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9754                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9755                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9756         # 2222/1780, 23/128
9757         pkt = NCP(0x1780, "Remove Job From Queue", 'qms')
9758         pkt.Request(18, [
9759                 rec( 10, 4, QueueID, BE ),
9760                 rec( 14, 4, JobNumberLong ),
9761         ])
9762         pkt.Reply(8)
9763         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9764                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9765                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9766         # 2222/1781, 23/129
9767         pkt = NCP(0x1781, "Get Queue Job List", 'qms')
9768         pkt.Request(18, [
9769                 rec( 10, 4, QueueID, BE ),
9770                 rec( 14, 4, JobNumberLong ),
9771         ])
9772         pkt.Reply(20, [
9773                 rec( 8, 4, TotalQueueJobs ),
9774                 rec( 12, 4, ReplyQueueJobNumbers, var="x" ),
9775                 rec( 16, 4, JobNumberList, repeat="x" ),
9776         ])
9777         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9778                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9779                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9780         # 2222/1782, 23/130
9781         pkt = NCP(0x1782, "Change Job Priority", 'qms')
9782         pkt.Request(22, [
9783                 rec( 10, 4, QueueID, BE ),
9784                 rec( 14, 4, JobNumberLong ),
9785                 rec( 18, 4, Priority ),
9786         ])
9787         pkt.Reply(8)
9788         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9789                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9790                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9791         # 2222/1783, 23/131
9792         pkt = NCP(0x1783, "Finish Servicing Queue Job", 'qms')
9793         pkt.Request(22, [
9794                 rec( 10, 4, QueueID, BE ),
9795                 rec( 14, 4, JobNumberLong ),
9796                 rec( 18, 4, ChargeInformation ),
9797         ])
9798         pkt.Reply(8)            
9799         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9800                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9801                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9802         # 2222/1784, 23/132
9803         pkt = NCP(0x1784, "Abort Servicing Queue Job", 'qms')
9804         pkt.Request(18, [
9805                 rec( 10, 4, QueueID, BE ),
9806                 rec( 14, 4, JobNumberLong ),
9807         ])
9808         pkt.Reply(8)            
9809         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9810                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9811                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9812         # 2222/1785, 23/133
9813         pkt = NCP(0x1785, "Change To Client Rights", 'qms')
9814         pkt.Request(18, [
9815                 rec( 10, 4, QueueID, BE ),
9816                 rec( 14, 4, JobNumberLong ),
9817         ])
9818         pkt.Reply(8)            
9819         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9820                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9821                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9822         # 2222/1786, 23/134
9823         pkt = NCP(0x1786, "Read Queue Server Current Status", 'qms')
9824         pkt.Request(22, [
9825                 rec( 10, 4, QueueID, BE ),
9826                 rec( 14, 4, ServerID, BE ),
9827                 rec( 18, 4, ServerStation ),
9828         ])
9829         pkt.Reply(72, [
9830                 rec( 8, 64, ServerStatusRecord ),
9831         ])
9832         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9833                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9834                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9835         # 2222/1787, 23/135
9836         pkt = NCP(0x1787, "Get Queue Job File Size", 'qms')
9837         pkt.Request(18, [
9838                 rec( 10, 4, QueueID, BE ),
9839                 rec( 14, 4, JobNumberLong ),
9840         ])
9841         pkt.Reply(20, [
9842                 rec( 8, 4, QueueID, BE ),
9843                 rec( 12, 4, JobNumberLong ),
9844                 rec( 16, 4, FileSize, BE ),
9845         ])
9846         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9847                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9848                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9849         # 2222/1788, 23/136
9850         pkt = NCP(0x1788, "Move Queue Job From Src Q to Dst Q", 'qms')
9851         pkt.Request(22, [
9852                 rec( 10, 4, QueueID, BE ),
9853                 rec( 14, 4, JobNumberLong ),
9854                 rec( 18, 4, DstQueueID, BE ),
9855         ])
9856         pkt.Reply(12, [
9857                 rec( 8, 4, JobNumberLong ),
9858         ])
9859         pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
9860         # 2222/1789, 23/137
9861         pkt = NCP(0x1789, "Get Queue Jobs From Form List", 'qms')
9862         pkt.Request(24, [
9863                 rec( 10, 4, QueueID, BE ),
9864                 rec( 14, 4, QueueStartPosition ),
9865                 rec( 18, 4, FormTypeCnt, var="x" ),
9866                 rec( 22, 2, FormType, repeat="x" ),
9867         ])
9868         pkt.Reply(20, [
9869                 rec( 8, 4, TotalQueueJobs ),
9870                 rec( 12, 4, JobCount, var="x" ),
9871                 rec( 16, 4, JobNumberList, repeat="x" ),
9872         ])
9873         pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
9874         # 2222/178A, 23/138
9875         pkt = NCP(0x178A, "Service Queue Job By Form List", 'qms')
9876         pkt.Request(24, [
9877                 rec( 10, 4, QueueID, BE ),
9878                 rec( 14, 4, QueueStartPosition ),
9879                 rec( 18, 4, FormTypeCnt, var= "x" ),
9880                 rec( 22, 2, FormType, repeat="x" ),
9881         ])
9882         pkt.Reply(94, [
9883            rec( 8, 86, JobStructNew ),
9884         ])              
9885         pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
9886         # 2222/1796, 23/150
9887         pkt = NCP(0x1796, "Get Current Account Status", 'accounting')
9888         pkt.Request((13,60), [
9889                 rec( 10, 2, ObjectType, BE ),
9890                 rec( 12, (1,48), ObjectName ),
9891         ], info_str=(ObjectName, "Get Current Account Status: %s", ", %s"))
9892         pkt.Reply(264, [
9893                 rec( 8, 4, AccountBalance, BE ),
9894                 rec( 12, 4, CreditLimit, BE ),
9895                 rec( 16, 120, Reserved120 ),
9896                 rec( 136, 4, HolderID, BE ),
9897                 rec( 140, 4, HoldAmount, BE ),
9898                 rec( 144, 4, HolderID, BE ),
9899                 rec( 148, 4, HoldAmount, BE ),
9900                 rec( 152, 4, HolderID, BE ),
9901                 rec( 156, 4, HoldAmount, BE ),
9902                 rec( 160, 4, HolderID, BE ),
9903                 rec( 164, 4, HoldAmount, BE ),
9904                 rec( 168, 4, HolderID, BE ),
9905                 rec( 172, 4, HoldAmount, BE ),
9906                 rec( 176, 4, HolderID, BE ),
9907                 rec( 180, 4, HoldAmount, BE ),
9908                 rec( 184, 4, HolderID, BE ),
9909                 rec( 188, 4, HoldAmount, BE ),
9910                 rec( 192, 4, HolderID, BE ),
9911                 rec( 196, 4, HoldAmount, BE ),
9912                 rec( 200, 4, HolderID, BE ),
9913                 rec( 204, 4, HoldAmount, BE ),
9914                 rec( 208, 4, HolderID, BE ),
9915                 rec( 212, 4, HoldAmount, BE ),
9916                 rec( 216, 4, HolderID, BE ),
9917                 rec( 220, 4, HoldAmount, BE ),
9918                 rec( 224, 4, HolderID, BE ),
9919                 rec( 228, 4, HoldAmount, BE ),
9920                 rec( 232, 4, HolderID, BE ),
9921                 rec( 236, 4, HoldAmount, BE ),
9922                 rec( 240, 4, HolderID, BE ),
9923                 rec( 244, 4, HoldAmount, BE ),
9924                 rec( 248, 4, HolderID, BE ),
9925                 rec( 252, 4, HoldAmount, BE ),
9926                 rec( 256, 4, HolderID, BE ),
9927                 rec( 260, 4, HoldAmount, BE ),
9928         ])              
9929         pkt.CompletionCodes([0x0000, 0x9600, 0xc000, 0xc101, 0xc400, 0xe800,
9930                              0xea00, 0xeb00, 0xec00, 0xfc06, 0xfe07, 0xff00])
9931         # 2222/1797, 23/151
9932         pkt = NCP(0x1797, "Submit Account Charge", 'accounting')
9933         pkt.Request((26,327), [
9934                 rec( 10, 2, ServiceType, BE ),
9935                 rec( 12, 4, ChargeAmount, BE ),
9936                 rec( 16, 4, HoldCancelAmount, BE ),
9937                 rec( 20, 2, ObjectType, BE ),
9938                 rec( 22, 2, CommentType, BE ),
9939                 rec( 24, (1,48), ObjectName ),
9940                 rec( -1, (1,255), Comment ),
9941         ], info_str=(ObjectName, "Submit Account Charge: %s", ", %s"))
9942         pkt.Reply(8)            
9943         pkt.CompletionCodes([0x0000, 0x0102, 0x8800, 0x9400, 0x9600, 0xa201,
9944                              0xc000, 0xc101, 0xc200, 0xc400, 0xe800, 0xea00,
9945                              0xeb00, 0xec00, 0xfe07, 0xff00])
9946         # 2222/1798, 23/152
9947         pkt = NCP(0x1798, "Submit Account Hold", 'accounting')
9948         pkt.Request((17,64), [
9949                 rec( 10, 4, HoldCancelAmount, BE ),
9950                 rec( 14, 2, ObjectType, BE ),
9951                 rec( 16, (1,48), ObjectName ),
9952         ], info_str=(ObjectName, "Submit Account Hold: %s", ", %s"))
9953         pkt.Reply(8)            
9954         pkt.CompletionCodes([0x0000, 0x0102, 0x8800, 0x9400, 0x9600, 0xa201,
9955                              0xc000, 0xc101, 0xc200, 0xc400, 0xe800, 0xea00,
9956                              0xeb00, 0xec00, 0xfe07, 0xff00])
9957         # 2222/1799, 23/153
9958         pkt = NCP(0x1799, "Submit Account Note", 'accounting')
9959         pkt.Request((18,319), [
9960                 rec( 10, 2, ServiceType, BE ),
9961                 rec( 12, 2, ObjectType, BE ),
9962                 rec( 14, 2, CommentType, BE ),
9963                 rec( 16, (1,48), ObjectName ),
9964                 rec( -1, (1,255), Comment ),
9965         ], info_str=(ObjectName, "Submit Account Note: %s", ", %s"))
9966         pkt.Reply(8)            
9967         pkt.CompletionCodes([0x0000, 0x0102, 0x9600, 0xc000, 0xc101, 0xc400,
9968                              0xe800, 0xea00, 0xeb00, 0xec00, 0xf000, 0xfc06,
9969                              0xff00])
9970         # 2222/17c8, 23/200
9971         pkt = NCP(0x17c8, "Check Console Privileges", 'stats')
9972         pkt.Request(10)
9973         pkt.Reply(8)            
9974         pkt.CompletionCodes([0x0000, 0xc601])
9975         # 2222/17c9, 23/201
9976         pkt = NCP(0x17c9, "Get File Server Description Strings", 'stats')
9977         pkt.Request(10)
9978         pkt.Reply(520, [
9979                 rec( 8, 512, DescriptionStrings ),
9980         ])
9981         pkt.CompletionCodes([0x0000, 0x9600])
9982         # 2222/17CA, 23/202
9983         pkt = NCP(0x17CA, "Set File Server Date And Time", 'stats')
9984         pkt.Request(16, [
9985                 rec( 10, 1, Year ),
9986                 rec( 11, 1, Month ),
9987                 rec( 12, 1, Day ),
9988                 rec( 13, 1, Hour ),
9989                 rec( 14, 1, Minute ),
9990                 rec( 15, 1, Second ),
9991         ])
9992         pkt.Reply(8)
9993         pkt.CompletionCodes([0x0000, 0xc601])
9994         # 2222/17CB, 23/203
9995         pkt = NCP(0x17CB, "Disable File Server Login", 'stats')
9996         pkt.Request(10)
9997         pkt.Reply(8)
9998         pkt.CompletionCodes([0x0000, 0xc601])
9999         # 2222/17CC, 23/204
10000         pkt = NCP(0x17CC, "Enable File Server Login", 'stats')
10001         pkt.Request(10)
10002         pkt.Reply(8)
10003         pkt.CompletionCodes([0x0000, 0xc601])
10004         # 2222/17CD, 23/205
10005         pkt = NCP(0x17CD, "Get File Server Login Status", 'stats')
10006         pkt.Request(10)
10007         pkt.Reply(12, [
10008                 rec( 8, 4, UserLoginAllowed ),
10009         ])
10010         pkt.CompletionCodes([0x0000, 0x9600, 0xfb01])
10011         # 2222/17CF, 23/207
10012         pkt = NCP(0x17CF, "Disable Transaction Tracking", 'stats')
10013         pkt.Request(10)
10014         pkt.Reply(8)
10015         pkt.CompletionCodes([0x0000, 0xc601])
10016         # 2222/17D0, 23/208
10017         pkt = NCP(0x17D0, "Enable Transaction Tracking", 'stats')
10018         pkt.Request(10)
10019         pkt.Reply(8)
10020         pkt.CompletionCodes([0x0000, 0xc601])
10021         # 2222/17D1, 23/209
10022         pkt = NCP(0x17D1, "Send Console Broadcast", 'stats')
10023         pkt.Request((13,267), [
10024                 rec( 10, 1, NumberOfStations, var="x" ),
10025                 rec( 11, 1, StationList, repeat="x" ),
10026                 rec( 12, (1, 255), TargetMessage ),
10027         ], info_str=(TargetMessage, "Send Console Broadcast: %s", ", %s"))
10028         pkt.Reply(8)
10029         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10030         # 2222/17D2, 23/210
10031         pkt = NCP(0x17D2, "Clear Connection Number", 'stats')
10032         pkt.Request(11, [
10033                 rec( 10, 1, ConnectionNumber ),
10034         ],info_str=(ConnectionNumber, "Clear Connection Number %d", ", %d"))
10035         pkt.Reply(8)
10036         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10037         # 2222/17D3, 23/211
10038         pkt = NCP(0x17D3, "Down File Server", 'stats')
10039         pkt.Request(11, [
10040                 rec( 10, 1, ForceFlag ),
10041         ])
10042         pkt.Reply(8)
10043         pkt.CompletionCodes([0x0000, 0xc601, 0xff00])
10044         # 2222/17D4, 23/212
10045         pkt = NCP(0x17D4, "Get File System Statistics", 'stats')
10046         pkt.Request(10)
10047         pkt.Reply(50, [
10048                 rec( 8, 4, SystemIntervalMarker, BE ),
10049                 rec( 12, 2, ConfiguredMaxOpenFiles ),
10050                 rec( 14, 2, ActualMaxOpenFiles ),
10051                 rec( 16, 2, CurrentOpenFiles ),
10052                 rec( 18, 4, TotalFilesOpened ),
10053                 rec( 22, 4, TotalReadRequests ),
10054                 rec( 26, 4, TotalWriteRequests ),
10055                 rec( 30, 2, CurrentChangedFATs ),
10056                 rec( 32, 4, TotalChangedFATs ),
10057                 rec( 36, 2, FATWriteErrors ),
10058                 rec( 38, 2, FatalFATWriteErrors ),
10059                 rec( 40, 2, FATScanErrors ),
10060                 rec( 42, 2, ActualMaxIndexedFiles ),
10061                 rec( 44, 2, ActiveIndexedFiles ),
10062                 rec( 46, 2, AttachedIndexedFiles ),
10063                 rec( 48, 2, AvailableIndexedFiles ),
10064         ])
10065         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10066         # 2222/17D5, 23/213
10067         pkt = NCP(0x17D5, "Get Transaction Tracking Statistics", 'stats')
10068         pkt.Request((13,267), [
10069                 rec( 10, 2, LastRecordSeen ),
10070                 rec( 12, (1,255), SemaphoreName ),
10071         ])
10072         pkt.Reply(53, [
10073                 rec( 8, 4, SystemIntervalMarker, BE ),
10074                 rec( 12, 1, TransactionTrackingSupported ),
10075                 rec( 13, 1, TransactionTrackingEnabled ),
10076                 rec( 14, 2, TransactionVolumeNumber ),
10077                 rec( 16, 2, ConfiguredMaxSimultaneousTransactions ),
10078                 rec( 18, 2, ActualMaxSimultaneousTransactions ),
10079                 rec( 20, 2, CurrentTransactionCount ),
10080                 rec( 22, 4, TotalTransactionsPerformed ),
10081                 rec( 26, 4, TotalWriteTransactionsPerformed ),
10082                 rec( 30, 4, TotalTransactionsBackedOut ),
10083                 rec( 34, 2, TotalUnfilledBackoutRequests ),
10084                 rec( 36, 2, TransactionDiskSpace ),
10085                 rec( 38, 4, TransactionFATAllocations ),
10086                 rec( 42, 4, TransactionFileSizeChanges ),
10087                 rec( 46, 4, TransactionFilesTruncated ),
10088                 rec( 50, 1, NumberOfEntries, var="x" ),
10089                 rec( 51, 2, ConnTaskStruct, repeat="x" ),
10090         ])
10091         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10092         # 2222/17D6, 23/214
10093         pkt = NCP(0x17D6, "Read Disk Cache Statistics", 'stats')
10094         pkt.Request(10)
10095         pkt.Reply(86, [
10096                 rec( 8, 4, SystemIntervalMarker, BE ),
10097                 rec( 12, 2, CacheBufferCount ),
10098                 rec( 14, 2, CacheBufferSize ),
10099                 rec( 16, 2, DirtyCacheBuffers ),
10100                 rec( 18, 4, CacheReadRequests ),
10101                 rec( 22, 4, CacheWriteRequests ),
10102                 rec( 26, 4, CacheHits ),
10103                 rec( 30, 4, CacheMisses ),
10104                 rec( 34, 4, PhysicalReadRequests ),
10105                 rec( 38, 4, PhysicalWriteRequests ),
10106                 rec( 42, 2, PhysicalReadErrors ),
10107                 rec( 44, 2, PhysicalWriteErrors ),
10108                 rec( 46, 4, CacheGetRequests ),
10109                 rec( 50, 4, CacheFullWriteRequests ),
10110                 rec( 54, 4, CachePartialWriteRequests ),
10111                 rec( 58, 4, BackgroundDirtyWrites ),
10112                 rec( 62, 4, BackgroundAgedWrites ),
10113                 rec( 66, 4, TotalCacheWrites ),
10114                 rec( 70, 4, CacheAllocations ),
10115                 rec( 74, 2, ThrashingCount ),
10116                 rec( 76, 2, LRUBlockWasDirty ),
10117                 rec( 78, 2, ReadBeyondWrite ),
10118                 rec( 80, 2, FragmentWriteOccurred ),
10119                 rec( 82, 2, CacheHitOnUnavailableBlock ),
10120                 rec( 84, 2, CacheBlockScrapped ),
10121         ])
10122         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10123         # 2222/17D7, 23/215
10124         pkt = NCP(0x17D7, "Get Drive Mapping Table", 'stats')
10125         pkt.Request(10)
10126         pkt.Reply(184, [
10127                 rec( 8, 4, SystemIntervalMarker, BE ),
10128                 rec( 12, 1, SFTSupportLevel ),
10129                 rec( 13, 1, LogicalDriveCount ),
10130                 rec( 14, 1, PhysicalDriveCount ),
10131                 rec( 15, 1, DiskChannelTable ),
10132                 rec( 16, 4, Reserved4 ),
10133                 rec( 20, 2, PendingIOCommands, BE ),
10134                 rec( 22, 32, DriveMappingTable ),
10135                 rec( 54, 32, DriveMirrorTable ),
10136                 rec( 86, 32, DeadMirrorTable ),
10137                 rec( 118, 1, ReMirrorDriveNumber ),
10138                 rec( 119, 1, Filler ),
10139                 rec( 120, 4, ReMirrorCurrentOffset, BE ),
10140                 rec( 124, 60, SFTErrorTable ),
10141         ])
10142         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10143         # 2222/17D8, 23/216
10144         pkt = NCP(0x17D8, "Read Physical Disk Statistics", 'stats')
10145         pkt.Request(11, [
10146                 rec( 10, 1, PhysicalDiskNumber ),
10147         ])
10148         pkt.Reply(101, [
10149                 rec( 8, 4, SystemIntervalMarker, BE ),
10150                 rec( 12, 1, PhysicalDiskChannel ),
10151                 rec( 13, 1, DriveRemovableFlag ),
10152                 rec( 14, 1, PhysicalDriveType ),
10153                 rec( 15, 1, ControllerDriveNumber ),
10154                 rec( 16, 1, ControllerNumber ),
10155                 rec( 17, 1, ControllerType ),
10156                 rec( 18, 4, DriveSize ),
10157                 rec( 22, 2, DriveCylinders ),
10158                 rec( 24, 1, DriveHeads ),
10159                 rec( 25, 1, SectorsPerTrack ),
10160                 rec( 26, 64, DriveDefinitionString ),
10161                 rec( 90, 2, IOErrorCount ),
10162                 rec( 92, 4, HotFixTableStart ),
10163                 rec( 96, 2, HotFixTableSize ),
10164                 rec( 98, 2, HotFixBlocksAvailable ),
10165                 rec( 100, 1, HotFixDisabled ),
10166         ])
10167         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10168         # 2222/17D9, 23/217
10169         pkt = NCP(0x17D9, "Get Disk Channel Statistics", 'stats')
10170         pkt.Request(11, [
10171                 rec( 10, 1, DiskChannelNumber ),
10172         ])
10173         pkt.Reply(192, [
10174                 rec( 8, 4, SystemIntervalMarker, BE ),
10175                 rec( 12, 2, ChannelState, BE ),
10176                 rec( 14, 2, ChannelSynchronizationState, BE ),
10177                 rec( 16, 1, SoftwareDriverType ),
10178                 rec( 17, 1, SoftwareMajorVersionNumber ),
10179                 rec( 18, 1, SoftwareMinorVersionNumber ),
10180                 rec( 19, 65, SoftwareDescription ),
10181                 rec( 84, 8, IOAddressesUsed ),
10182                 rec( 92, 10, SharedMemoryAddresses ),
10183                 rec( 102, 4, InterruptNumbersUsed ),
10184                 rec( 106, 4, DMAChannelsUsed ),
10185                 rec( 110, 1, FlagBits ),
10186                 rec( 111, 1, Reserved ),
10187                 rec( 112, 80, ConfigurationDescription ),
10188         ])
10189         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10190         # 2222/17DB, 23/219
10191         pkt = NCP(0x17DB, "Get Connection's Open Files", 'file')
10192         pkt.Request(14, [
10193                 rec( 10, 2, ConnectionNumber ),
10194                 rec( 12, 2, LastRecordSeen, BE ),
10195         ])
10196         pkt.Reply(32, [
10197                 rec( 8, 2, NextRequestRecord ),
10198                 rec( 10, 1, NumberOfRecords, var="x" ),
10199                 rec( 11, 21, ConnStruct, repeat="x" ),
10200         ])
10201         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10202         # 2222/17DC, 23/220
10203         pkt = NCP(0x17DC, "Get Connection Using A File", 'file')
10204         pkt.Request((14,268), [
10205                 rec( 10, 2, LastRecordSeen, BE ),
10206                 rec( 12, 1, DirHandle ),
10207                 rec( 13, (1,255), Path ),
10208         ], info_str=(Path, "Get Connection Using File: %s", ", %s"))
10209         pkt.Reply(30, [
10210                 rec( 8, 2, UseCount, BE ),
10211                 rec( 10, 2, OpenCount, BE ),
10212                 rec( 12, 2, OpenForReadCount, BE ),
10213                 rec( 14, 2, OpenForWriteCount, BE ),
10214                 rec( 16, 2, DenyReadCount, BE ),
10215                 rec( 18, 2, DenyWriteCount, BE ),
10216                 rec( 20, 2, NextRequestRecord, BE ),
10217                 rec( 22, 1, Locked ),
10218                 rec( 23, 1, NumberOfRecords, var="x" ),
10219                 rec( 24, 6, ConnFileStruct, repeat="x" ),
10220         ])
10221         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10222         # 2222/17DD, 23/221
10223         pkt = NCP(0x17DD, "Get Physical Record Locks By Connection And File", 'file')
10224         pkt.Request(31, [
10225                 rec( 10, 2, TargetConnectionNumber ),
10226                 rec( 12, 2, LastRecordSeen, BE ),
10227                 rec( 14, 1, VolumeNumber ),
10228                 rec( 15, 2, DirectoryID ),
10229                 rec( 17, 14, FileName14 ),
10230         ], info_str=(FileName14, "Get Physical Record Locks by Connection and File: %s", ", %s"))
10231         pkt.Reply(22, [
10232                 rec( 8, 2, NextRequestRecord ),
10233                 rec( 10, 1, NumberOfLocks, var="x" ),
10234                 rec( 11, 1, Reserved ),
10235                 rec( 12, 10, LockStruct, repeat="x" ),
10236         ])
10237         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10238         # 2222/17DE, 23/222
10239         pkt = NCP(0x17DE, "Get Physical Record Locks By File", 'file')
10240         pkt.Request((14,268), [
10241                 rec( 10, 2, TargetConnectionNumber ),
10242                 rec( 12, 1, DirHandle ),
10243                 rec( 13, (1,255), Path ),
10244         ], info_str=(Path, "Get Physical Record Locks by File: %s", ", %s"))
10245         pkt.Reply(28, [
10246                 rec( 8, 2, NextRequestRecord ),
10247                 rec( 10, 1, NumberOfLocks, var="x" ),
10248                 rec( 11, 1, Reserved ),
10249                 rec( 12, 16, PhyLockStruct, repeat="x" ),
10250         ])
10251         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10252         # 2222/17DF, 23/223
10253         pkt = NCP(0x17DF, "Get Logical Records By Connection", 'file')
10254         pkt.Request(14, [
10255                 rec( 10, 2, TargetConnectionNumber ),
10256                 rec( 12, 2, LastRecordSeen, BE ),
10257         ])
10258         pkt.Reply((14,268), [
10259                 rec( 8, 2, NextRequestRecord ),
10260                 rec( 10, 1, NumberOfRecords, var="x" ),
10261                 rec( 11, (3, 257), LogLockStruct, repeat="x" ),
10262         ])
10263         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10264         # 2222/17E0, 23/224
10265         pkt = NCP(0x17E0, "Get Logical Record Information", 'file')
10266         pkt.Request((13,267), [
10267                 rec( 10, 2, LastRecordSeen ),
10268                 rec( 12, (1,255), LogicalRecordName ),
10269         ], info_str=(LogicalRecordName, "Get Logical Record Information: %s", ", %s"))
10270         pkt.Reply(20, [
10271                 rec( 8, 2, UseCount, BE ),
10272                 rec( 10, 2, ShareableLockCount, BE ),
10273                 rec( 12, 2, NextRequestRecord ),
10274                 rec( 14, 1, Locked ),
10275                 rec( 15, 1, NumberOfRecords, var="x" ),
10276                 rec( 16, 4, LogRecStruct, repeat="x" ),
10277         ])
10278         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10279         # 2222/17E1, 23/225
10280         pkt = NCP(0x17E1, "Get Connection's Semaphores", 'file')
10281         pkt.Request(14, [
10282                 rec( 10, 2, ConnectionNumber ),
10283                 rec( 12, 2, LastRecordSeen ),
10284         ])
10285         pkt.Reply((18,272), [
10286                 rec( 8, 2, NextRequestRecord ),
10287                 rec( 10, 2, NumberOfSemaphores, var="x" ),
10288                 rec( 12, (6,260), SemaStruct, repeat="x" ),
10289         ])
10290         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10291         # 2222/17E2, 23/226
10292         pkt = NCP(0x17E2, "Get Semaphore Information", 'file')
10293         pkt.Request((13,267), [
10294                 rec( 10, 2, LastRecordSeen ),
10295                 rec( 12, (1,255), SemaphoreName ),
10296         ], info_str=(SemaphoreName, "Get Semaphore Information: %s", ", %s"))
10297         pkt.Reply(17, [
10298                 rec( 8, 2, NextRequestRecord, BE ),
10299                 rec( 10, 2, OpenCount, BE ),
10300                 rec( 12, 1, SemaphoreValue ),
10301                 rec( 13, 1, NumberOfRecords, var="x" ),
10302                 rec( 14, 3, SemaInfoStruct, repeat="x" ),
10303         ])
10304         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10305         # 2222/17E3, 23/227
10306         pkt = NCP(0x17E3, "Get LAN Driver Configuration Information", 'stats')
10307         pkt.Request(11, [
10308                 rec( 10, 1, LANDriverNumber ),
10309         ])
10310         pkt.Reply(180, [
10311                 rec( 8, 4, NetworkAddress, BE ),
10312                 rec( 12, 6, HostAddress ),
10313                 rec( 18, 1, BoardInstalled ),
10314                 rec( 19, 1, OptionNumber ),
10315                 rec( 20, 160, ConfigurationText ),
10316         ])
10317         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10318         # 2222/17E5, 23/229
10319         pkt = NCP(0x17E5, "Get Connection Usage Statistics", 'stats')
10320         pkt.Request(12, [
10321                 rec( 10, 2, ConnectionNumber ),
10322         ])
10323         pkt.Reply(26, [
10324                 rec( 8, 2, NextRequestRecord ),
10325                 rec( 10, 6, BytesRead ),
10326                 rec( 16, 6, BytesWritten ),
10327                 rec( 22, 4, TotalRequestPackets ),
10328          ])
10329         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10330         # 2222/17E6, 23/230
10331         pkt = NCP(0x17E6, "Get Object's Remaining Disk Space", 'stats')
10332         pkt.Request(14, [
10333                 rec( 10, 4, ObjectID, BE ),
10334         ])
10335         pkt.Reply(21, [
10336                 rec( 8, 4, SystemIntervalMarker, BE ),
10337                 rec( 12, 4, ObjectID ),
10338                 rec( 16, 4, UnusedDiskBlocks, BE ),
10339                 rec( 20, 1, RestrictionsEnforced ),
10340          ])
10341         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])  
10342         # 2222/17E7, 23/231
10343         pkt = NCP(0x17E7, "Get File Server LAN I/O Statistics", 'stats')
10344         pkt.Request(10)
10345         pkt.Reply(74, [
10346                 rec( 8, 4, SystemIntervalMarker, BE ),
10347                 rec( 12, 2, ConfiguredMaxRoutingBuffers ),
10348                 rec( 14, 2, ActualMaxUsedRoutingBuffers ),
10349                 rec( 16, 2, CurrentlyUsedRoutingBuffers ),
10350                 rec( 18, 4, TotalFileServicePackets ),
10351                 rec( 22, 2, TurboUsedForFileService ),
10352                 rec( 24, 2, PacketsFromInvalidConnection ),
10353                 rec( 26, 2, BadLogicalConnectionCount ),
10354                 rec( 28, 2, PacketsReceivedDuringProcessing ),
10355                 rec( 30, 2, RequestsReprocessed ),
10356                 rec( 32, 2, PacketsWithBadSequenceNumber ),
10357                 rec( 34, 2, DuplicateRepliesSent ),
10358                 rec( 36, 2, PositiveAcknowledgesSent ),
10359                 rec( 38, 2, PacketsWithBadRequestType ),
10360                 rec( 40, 2, AttachDuringProcessing ),
10361                 rec( 42, 2, AttachWhileProcessingAttach ),
10362                 rec( 44, 2, ForgedDetachedRequests ),
10363                 rec( 46, 2, DetachForBadConnectionNumber ),
10364                 rec( 48, 2, DetachDuringProcessing ),
10365                 rec( 50, 2, RepliesCancelled ),
10366                 rec( 52, 2, PacketsDiscardedByHopCount ),
10367                 rec( 54, 2, PacketsDiscardedUnknownNet ),
10368                 rec( 56, 2, IncomingPacketDiscardedNoDGroup ),
10369                 rec( 58, 2, OutgoingPacketDiscardedNoTurboBuffer ),
10370                 rec( 60, 2, IPXNotMyNetwork ),
10371                 rec( 62, 4, NetBIOSBroadcastWasPropogated ),
10372                 rec( 66, 4, TotalOtherPackets ),
10373                 rec( 70, 4, TotalRoutedPackets ),
10374          ])
10375         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10376         # 2222/17E8, 23/232
10377         pkt = NCP(0x17E8, "Get File Server Misc Information", 'stats')
10378         pkt.Request(10)
10379         pkt.Reply(40, [
10380                 rec( 8, 4, SystemIntervalMarker, BE ),
10381                 rec( 12, 1, ProcessorType ),
10382                 rec( 13, 1, Reserved ),
10383                 rec( 14, 1, NumberOfServiceProcesses ),
10384                 rec( 15, 1, ServerUtilizationPercentage ),
10385                 rec( 16, 2, ConfiguredMaxBinderyObjects ),
10386                 rec( 18, 2, ActualMaxBinderyObjects ),
10387                 rec( 20, 2, CurrentUsedBinderyObjects ),
10388                 rec( 22, 2, TotalServerMemory ),
10389                 rec( 24, 2, WastedServerMemory ),
10390                 rec( 26, 2, NumberOfDynamicMemoryAreas, var="x" ),
10391                 rec( 28, 12, DynMemStruct, repeat="x" ),
10392          ])
10393         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10394         # 2222/17E9, 23/233
10395         pkt = NCP(0x17E9, "Get Volume Information", 'stats')
10396         pkt.Request(11, [
10397                 rec( 10, 1, VolumeNumber ),
10398         ],info_str=(VolumeNumber, "Get Information on Volume %d", ", %d"))
10399         pkt.Reply(48, [
10400                 rec( 8, 4, SystemIntervalMarker, BE ),
10401                 rec( 12, 1, VolumeNumber ),
10402                 rec( 13, 1, LogicalDriveNumber ),
10403                 rec( 14, 2, BlockSize ),
10404                 rec( 16, 2, StartingBlock ),
10405                 rec( 18, 2, TotalBlocks ),
10406                 rec( 20, 2, FreeBlocks ),
10407                 rec( 22, 2, TotalDirectoryEntries ),
10408                 rec( 24, 2, FreeDirectoryEntries ),
10409                 rec( 26, 2, ActualMaxUsedDirectoryEntries ),
10410                 rec( 28, 1, VolumeHashedFlag ),
10411                 rec( 29, 1, VolumeCachedFlag ),
10412                 rec( 30, 1, VolumeRemovableFlag ),
10413                 rec( 31, 1, VolumeMountedFlag ),
10414                 rec( 32, 16, VolumeName ),
10415          ])
10416         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10417         # 2222/17EA, 23/234
10418         pkt = NCP(0x17EA, "Get Connection's Task Information", 'stats')
10419         pkt.Request(12, [
10420                 rec( 10, 2, ConnectionNumber ),
10421         ])
10422         pkt.Reply(18, [
10423                 rec( 8, 2, NextRequestRecord ),
10424                 rec( 10, 4, NumberOfAttributes, var="x" ),
10425                 rec( 14, 4, Attributes, repeat="x" ),
10426          ])
10427         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10428         # 2222/17EB, 23/235
10429         pkt = NCP(0x17EB, "Get Connection's Open Files", 'file')
10430         pkt.Request(14, [
10431                 rec( 10, 2, ConnectionNumber ),
10432                 rec( 12, 2, LastRecordSeen ),
10433         ])
10434         pkt.Reply((29,283), [
10435                 rec( 8, 2, NextRequestRecord ),
10436                 rec( 10, 2, NumberOfRecords, var="x" ),
10437                 rec( 12, (17, 271), OpnFilesStruct, repeat="x" ),
10438         ])
10439         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10440         # 2222/17EC, 23/236
10441         pkt = NCP(0x17EC, "Get Connection Using A File", 'file')
10442         pkt.Request(18, [
10443                 rec( 10, 1, DataStreamNumber ),
10444                 rec( 11, 1, VolumeNumber ),
10445                 rec( 12, 4, DirectoryBase, LE ),
10446                 rec( 16, 2, LastRecordSeen ),
10447         ])
10448         pkt.Reply(33, [
10449                 rec( 8, 2, NextRequestRecord ),
10450                 rec( 10, 2, UseCount ),
10451                 rec( 12, 2, OpenCount ),
10452                 rec( 14, 2, OpenForReadCount ),
10453                 rec( 16, 2, OpenForWriteCount ),
10454                 rec( 18, 2, DenyReadCount ),
10455                 rec( 20, 2, DenyWriteCount ),
10456                 rec( 22, 1, Locked ),
10457                 rec( 23, 1, ForkCount ),
10458                 rec( 24, 2, NumberOfRecords, var="x" ),
10459                 rec( 26, 7, ConnStruct, repeat="x" ),
10460         ])
10461         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10462         # 2222/17ED, 23/237
10463         pkt = NCP(0x17ED, "Get Physical Record Locks By Connection And File", 'file')
10464         pkt.Request(20, [
10465                 rec( 10, 2, TargetConnectionNumber ),
10466                 rec( 12, 1, DataStreamNumber ),
10467                 rec( 13, 1, VolumeNumber ),
10468                 rec( 14, 4, DirectoryBase, LE ),
10469                 rec( 18, 2, LastRecordSeen ),
10470         ])
10471         pkt.Reply(23, [
10472                 rec( 8, 2, NextRequestRecord ),
10473                 rec( 10, 2, NumberOfLocks, var="x" ),
10474                 rec( 12, 11, LockStruct, repeat="x" ),
10475         ])
10476         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10477         # 2222/17EE, 23/238
10478         pkt = NCP(0x17EE, "Get Physical Record Locks By File", 'file')
10479         pkt.Request(18, [
10480                 rec( 10, 1, DataStreamNumber ),
10481                 rec( 11, 1, VolumeNumber ),
10482                 rec( 12, 4, DirectoryBase ),
10483                 rec( 16, 2, LastRecordSeen ),
10484         ])
10485         pkt.Reply(30, [
10486                 rec( 8, 2, NextRequestRecord ),
10487                 rec( 10, 2, NumberOfLocks, var="x" ),
10488                 rec( 12, 18, PhyLockStruct, repeat="x" ),
10489         ])
10490         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10491         # 2222/17EF, 23/239
10492         pkt = NCP(0x17EF, "Get Logical Records By Connection", 'file')
10493         pkt.Request(14, [
10494                 rec( 10, 2, TargetConnectionNumber ),
10495                 rec( 12, 2, LastRecordSeen ),
10496         ])
10497         pkt.Reply((16,270), [
10498                 rec( 8, 2, NextRequestRecord ),
10499                 rec( 10, 2, NumberOfRecords, var="x" ),
10500                 rec( 12, (4, 258), LogLockStruct, repeat="x" ),
10501         ])
10502         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10503         # 2222/17F0, 23/240
10504         pkt = NCP(0x17F0, "Get Logical Record Information (old)", 'file')
10505         pkt.Request((13,267), [
10506                 rec( 10, 2, LastRecordSeen ),
10507                 rec( 12, (1,255), LogicalRecordName ),
10508         ])
10509         pkt.Reply(22, [
10510                 rec( 8, 2, ShareableLockCount ),
10511                 rec( 10, 2, UseCount ),
10512                 rec( 12, 1, Locked ),
10513                 rec( 13, 2, NextRequestRecord ),
10514                 rec( 15, 2, NumberOfRecords, var="x" ),
10515                 rec( 17, 5, LogRecStruct, repeat="x" ),
10516         ])
10517         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10518         # 2222/17F1, 23/241
10519         pkt = NCP(0x17F1, "Get Connection's Semaphores", 'file')
10520         pkt.Request(14, [
10521                 rec( 10, 2, ConnectionNumber ),
10522                 rec( 12, 2, LastRecordSeen ),
10523         ])
10524         pkt.Reply((19,273), [
10525                 rec( 8, 2, NextRequestRecord ),
10526                 rec( 10, 2, NumberOfSemaphores, var="x" ),
10527                 rec( 12, (7, 261), SemaStruct, repeat="x" ),
10528         ])
10529         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10530         # 2222/17F2, 23/242
10531         pkt = NCP(0x17F2, "Get Semaphore Information", 'file')
10532         pkt.Request((13,267), [
10533                 rec( 10, 2, LastRecordSeen ),
10534                 rec( 12, (1,255), SemaphoreName ),
10535         ], info_str=(SemaphoreName, "Get Semaphore Information: %s", ", %s"))
10536         pkt.Reply(20, [
10537                 rec( 8, 2, NextRequestRecord ),
10538                 rec( 10, 2, OpenCount ),
10539                 rec( 12, 2, SemaphoreValue ),
10540                 rec( 14, 2, NumberOfRecords, var="x" ),
10541                 rec( 16, 4, SemaInfoStruct, repeat="x" ),
10542         ])
10543         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10544         # 2222/17F3, 23/243
10545         pkt = NCP(0x17F3, "Map Directory Number to Path", 'file')
10546         pkt.Request(16, [
10547                 rec( 10, 1, VolumeNumber ),
10548                 rec( 11, 4, DirectoryNumber ),
10549                 rec( 15, 1, NameSpace ),
10550         ])
10551         pkt.Reply((9,263), [
10552                 rec( 8, (1,255), Path ),
10553         ])
10554         pkt.CompletionCodes([0x0000, 0x9600, 0x9c00, 0xc601, 0xfd00, 0xff00])
10555         # 2222/17F4, 23/244
10556         pkt = NCP(0x17F4, "Convert Path to Dir Entry", 'file')
10557         pkt.Request((12,266), [
10558                 rec( 10, 1, DirHandle ),
10559                 rec( 11, (1,255), Path ),
10560         ], info_str=(Path, "Convert Path to Directory Entry: %s", ", %s"))
10561         pkt.Reply(13, [
10562                 rec( 8, 1, VolumeNumber ),
10563                 rec( 9, 4, DirectoryNumber ),
10564         ])
10565         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10566         # 2222/17FD, 23/253
10567         pkt = NCP(0x17FD, "Send Console Broadcast", 'stats')
10568         pkt.Request((16, 270), [
10569                 rec( 10, 1, NumberOfStations, var="x" ),
10570                 rec( 11, 4, StationList, repeat="x" ),
10571                 rec( 15, (1, 255), TargetMessage ),
10572         ], info_str=(TargetMessage, "Send Console Broadcast: %s", ", %s"))
10573         pkt.Reply(8)
10574         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10575         # 2222/17FE, 23/254
10576         pkt = NCP(0x17FE, "Clear Connection Number", 'stats')
10577         pkt.Request(14, [
10578                 rec( 10, 4, ConnectionNumber ),
10579         ])
10580         pkt.Reply(8)
10581         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10582         # 2222/18, 24
10583         pkt = NCP(0x18, "End of Job", 'connection')
10584         pkt.Request(7)
10585         pkt.Reply(8)
10586         pkt.CompletionCodes([0x0000])
10587         # 2222/19, 25
10588         pkt = NCP(0x19, "Logout", 'connection')
10589         pkt.Request(7)
10590         pkt.Reply(8)
10591         pkt.CompletionCodes([0x0000])
10592         # 2222/1A, 26
10593         pkt = NCP(0x1A, "Log Physical Record", 'file')
10594         pkt.Request(24, [
10595                 rec( 7, 1, LockFlag ),
10596                 rec( 8, 6, FileHandle ),
10597                 rec( 14, 4, LockAreasStartOffset, BE ),
10598                 rec( 18, 4, LockAreaLen, BE ),
10599                 rec( 22, 2, LockTimeout ),
10600         ])
10601         pkt.Reply(8)
10602         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
10603         # 2222/1B, 27
10604         pkt = NCP(0x1B, "Lock Physical Record Set", 'file')
10605         pkt.Request(10, [
10606                 rec( 7, 1, LockFlag ),
10607                 rec( 8, 2, LockTimeout ),
10608         ])
10609         pkt.Reply(8)
10610         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
10611         # 2222/1C, 28
10612         pkt = NCP(0x1C, "Release Physical Record", 'file')
10613         pkt.Request(22, [
10614                 rec( 7, 1, Reserved ),
10615                 rec( 8, 6, FileHandle ),
10616                 rec( 14, 4, LockAreasStartOffset ),
10617                 rec( 18, 4, LockAreaLen ),
10618         ])
10619         pkt.Reply(8)
10620         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10621         # 2222/1D, 29
10622         pkt = NCP(0x1D, "Release Physical Record Set", 'file')
10623         pkt.Request(8, [
10624                 rec( 7, 1, LockFlag ),
10625         ])
10626         pkt.Reply(8)
10627         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10628         # 2222/1E, 30   #Tested and fixed 6-14-02 GM
10629         pkt = NCP(0x1E, "Clear Physical Record", 'file')
10630         pkt.Request(22, [
10631                 rec( 7, 1, Reserved ),
10632                 rec( 8, 6, FileHandle ),
10633                 rec( 14, 4, LockAreasStartOffset, BE ),
10634                 rec( 18, 4, LockAreaLen, BE ),
10635         ])
10636         pkt.Reply(8)
10637         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10638         # 2222/1F, 31
10639         pkt = NCP(0x1F, "Clear Physical Record Set", 'file')
10640         pkt.Request(8, [
10641                 rec( 7, 1, LockFlag ),
10642         ])
10643         pkt.Reply(8)
10644         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10645         # 2222/2000, 32/00
10646         pkt = NCP(0x2000, "Open Semaphore", 'file', has_length=0)
10647         pkt.Request(10, [
10648                 rec( 8, 1, InitialSemaphoreValue ),
10649                 rec( 9, 1, SemaphoreNameLen ),
10650         ])
10651         pkt.Reply(13, [
10652                   rec( 8, 4, SemaphoreHandle, BE ),
10653                   rec( 12, 1, SemaphoreOpenCount ),
10654         ])
10655         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10656         # 2222/2001, 32/01
10657         pkt = NCP(0x2001, "Examine Semaphore", 'file', has_length=0)
10658         pkt.Request(12, [
10659                 rec( 8, 4, SemaphoreHandle, BE ),
10660         ])
10661         pkt.Reply(10, [
10662                   rec( 8, 1, SemaphoreValue ),
10663                   rec( 9, 1, SemaphoreOpenCount ),
10664         ])
10665         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10666         # 2222/2002, 32/02
10667         pkt = NCP(0x2002, "Wait On Semaphore", 'file', has_length=0)
10668         pkt.Request(14, [
10669                 rec( 8, 4, SemaphoreHandle, BE ),
10670                 rec( 12, 2, SemaphoreTimeOut, BE ), 
10671         ])
10672         pkt.Reply(8)
10673         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10674         # 2222/2003, 32/03
10675         pkt = NCP(0x2003, "Signal Semaphore", 'file', has_length=0)
10676         pkt.Request(12, [
10677                 rec( 8, 4, SemaphoreHandle, BE ),
10678         ])
10679         pkt.Reply(8)
10680         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10681         # 2222/2004, 32/04
10682         pkt = NCP(0x2004, "Close Semaphore", 'file', has_length=0)
10683         pkt.Request(12, [
10684                 rec( 8, 4, SemaphoreHandle, BE ),
10685         ])
10686         pkt.Reply(8)
10687         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10688         # 2222/21, 33
10689         pkt = NCP(0x21, "Negotiate Buffer Size", 'connection')
10690         pkt.Request(9, [
10691                 rec( 7, 2, BufferSize, BE ),
10692         ])
10693         pkt.Reply(10, [
10694                 rec( 8, 2, BufferSize, BE ),
10695         ])
10696         pkt.CompletionCodes([0x0000])
10697         # 2222/2200, 34/00
10698         pkt = NCP(0x2200, "TTS Is Available", 'tts', has_length=0)
10699         pkt.Request(8)
10700         pkt.Reply(8)
10701         pkt.CompletionCodes([0x0001, 0xfd03, 0xff12])
10702         # 2222/2201, 34/01
10703         pkt = NCP(0x2201, "TTS Begin Transaction", 'tts', has_length=0)
10704         pkt.Request(8)
10705         pkt.Reply(8)
10706         pkt.CompletionCodes([0x0000])
10707         # 2222/2202, 34/02
10708         pkt = NCP(0x2202, "TTS End Transaction", 'tts', has_length=0)
10709         pkt.Request(8)
10710         pkt.Reply(12, [
10711                   rec( 8, 4, TransactionNumber, BE ),
10712         ])                
10713         pkt.CompletionCodes([0x0000, 0xff01])
10714         # 2222/2203, 34/03
10715         pkt = NCP(0x2203, "TTS Abort Transaction", 'tts', has_length=0)
10716         pkt.Request(8)
10717         pkt.Reply(8)
10718         pkt.CompletionCodes([0x0000, 0xfd03, 0xfe0b, 0xff01])
10719         # 2222/2204, 34/04
10720         pkt = NCP(0x2204, "TTS Transaction Status", 'tts', has_length=0)
10721         pkt.Request(12, [
10722                   rec( 8, 4, TransactionNumber, BE ),
10723         ])              
10724         pkt.Reply(8)
10725         pkt.CompletionCodes([0x0000])
10726         # 2222/2205, 34/05
10727         pkt = NCP(0x2205, "TTS Get Application Thresholds", 'tts', has_length=0)
10728         pkt.Request(8)          
10729         pkt.Reply(10, [
10730                   rec( 8, 1, LogicalLockThreshold ),
10731                   rec( 9, 1, PhysicalLockThreshold ),
10732         ])
10733         pkt.CompletionCodes([0x0000])
10734         # 2222/2206, 34/06
10735         pkt = NCP(0x2206, "TTS Set Application 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, 0x9600])
10742         # 2222/2207, 34/07
10743         pkt = NCP(0x2207, "TTS Get Workstation Thresholds", 'tts', has_length=0)
10744         pkt.Request(10, [               
10745                   rec( 8, 1, LogicalLockThreshold ),
10746                   rec( 9, 1, PhysicalLockThreshold ),
10747         ])
10748         pkt.Reply(8)
10749         pkt.CompletionCodes([0x0000])
10750         # 2222/2208, 34/08
10751         pkt = NCP(0x2208, "TTS Set Workstation Thresholds", 'tts', has_length=0)
10752         pkt.Request(10, [               
10753                   rec( 8, 1, LogicalLockThreshold ),
10754                   rec( 9, 1, PhysicalLockThreshold ),
10755         ])
10756         pkt.Reply(8)
10757         pkt.CompletionCodes([0x0000])
10758         # 2222/2209, 34/09
10759         pkt = NCP(0x2209, "TTS Get Transaction Bits", 'tts', has_length=0)
10760         pkt.Request(8)
10761         pkt.Reply(9, [
10762                 rec( 8, 1, ControlFlags ),
10763         ])
10764         pkt.CompletionCodes([0x0000])
10765         # 2222/220A, 34/10
10766         pkt = NCP(0x220A, "TTS Set Transaction Bits", 'tts', has_length=0)
10767         pkt.Request(9, [
10768                 rec( 8, 1, ControlFlags ),
10769         ])
10770         pkt.Reply(8)
10771         pkt.CompletionCodes([0x0000])
10772         # 2222/2301, 35/01
10773         pkt = NCP(0x2301, "AFP Create Directory", 'afp')
10774         pkt.Request((49, 303), [
10775                 rec( 10, 1, VolumeNumber ),
10776                 rec( 11, 4, BaseDirectoryID ),
10777                 rec( 15, 1, Reserved ),
10778                 rec( 16, 4, CreatorID ),
10779                 rec( 20, 4, Reserved4 ),
10780                 rec( 24, 2, FinderAttr ),
10781                 rec( 26, 2, HorizLocation ),
10782                 rec( 28, 2, VertLocation ),
10783                 rec( 30, 2, FileDirWindow ),
10784                 rec( 32, 16, Reserved16 ),
10785                 rec( 48, (1,255), Path ),
10786         ], info_str=(Path, "AFP Create Directory: %s", ", %s"))
10787         pkt.Reply(12, [
10788                 rec( 8, 4, NewDirectoryID ),
10789         ])
10790         pkt.CompletionCodes([0x0000, 0x8301, 0x8400, 0x8800, 0x9300, 0x9600, 0x9804,
10791                              0x9900, 0x9c03, 0x9e02, 0xa100, 0xa201, 0xfd00, 0xff18])
10792         # 2222/2302, 35/02
10793         pkt = NCP(0x2302, "AFP Create File", 'afp')
10794         pkt.Request((49, 303), [
10795                 rec( 10, 1, VolumeNumber ),
10796                 rec( 11, 4, BaseDirectoryID ),
10797                 rec( 15, 1, DeleteExistingFileFlag ),
10798                 rec( 16, 4, CreatorID, BE ),
10799                 rec( 20, 4, Reserved4 ),
10800                 rec( 24, 2, FinderAttr ),
10801                 rec( 26, 2, HorizLocation, BE ),
10802                 rec( 28, 2, VertLocation, BE ),
10803                 rec( 30, 2, FileDirWindow, BE ),
10804                 rec( 32, 16, Reserved16 ),
10805                 rec( 48, (1,255), Path ),
10806         ], info_str=(Path, "AFP Create File: %s", ", %s"))
10807         pkt.Reply(12, [
10808                 rec( 8, 4, NewDirectoryID ),
10809         ])
10810         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8400, 0x8701, 0x8800,
10811                              0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9300, 0x9600, 0x9804,
10812                              0x9900, 0x9b03, 0x9c03, 0x9e02, 0xa100, 0xa201, 0xfd00,
10813                              0xff18])
10814         # 2222/2303, 35/03
10815         pkt = NCP(0x2303, "AFP Delete", 'afp')
10816         pkt.Request((16,270), [
10817                 rec( 10, 1, VolumeNumber ),
10818                 rec( 11, 4, BaseDirectoryID ),
10819                 rec( 15, (1,255), Path ),
10820         ], info_str=(Path, "AFP Delete: %s", ", %s"))
10821         pkt.Reply(8)
10822         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x8a00, 0x8d00, 0x8e00, 0x8f00,
10823                              0x9000, 0x9300, 0x9600, 0x9804, 0x9b03, 0x9c03, 0x9e02,
10824                              0xa000, 0xa100, 0xa201, 0xfd00, 0xff19])
10825         # 2222/2304, 35/04
10826         pkt = NCP(0x2304, "AFP Get Entry ID From Name", 'afp')
10827         pkt.Request((16,270), [
10828                 rec( 10, 1, VolumeNumber ),
10829                 rec( 11, 4, BaseDirectoryID ),
10830                 rec( 15, (1,255), Path ),
10831         ], info_str=(Path, "AFP Get Entry from Name: %s", ", %s"))
10832         pkt.Reply(12, [
10833                 rec( 8, 4, TargetEntryID, BE ),
10834         ])
10835         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
10836                              0xa100, 0xa201, 0xfd00, 0xff19])
10837         # 2222/2305, 35/05
10838         pkt = NCP(0x2305, "AFP Get File Information", 'afp')
10839         pkt.Request((18,272), [
10840                 rec( 10, 1, VolumeNumber ),
10841                 rec( 11, 4, BaseDirectoryID ),
10842                 rec( 15, 2, RequestBitMap, BE ),
10843                 rec( 17, (1,255), Path ),
10844         ], info_str=(Path, "AFP Get File Information: %s", ", %s"))
10845         pkt.Reply(121, [
10846                 rec( 8, 4, AFPEntryID, BE ),
10847                 rec( 12, 4, ParentID, BE ),
10848                 rec( 16, 2, AttributesDef16, LE ),
10849                 rec( 18, 4, DataForkLen, BE ),
10850                 rec( 22, 4, ResourceForkLen, BE ),
10851                 rec( 26, 2, TotalOffspring, BE  ),
10852                 rec( 28, 2, CreationDate, BE ),
10853                 rec( 30, 2, LastAccessedDate, BE ),
10854                 rec( 32, 2, ModifiedDate, BE ),
10855                 rec( 34, 2, ModifiedTime, BE ),
10856                 rec( 36, 2, ArchivedDate, BE ),
10857                 rec( 38, 2, ArchivedTime, BE ),
10858                 rec( 40, 4, CreatorID, BE ),
10859                 rec( 44, 4, Reserved4 ),
10860                 rec( 48, 2, FinderAttr ),
10861                 rec( 50, 2, HorizLocation ),
10862                 rec( 52, 2, VertLocation ),
10863                 rec( 54, 2, FileDirWindow ),
10864                 rec( 56, 16, Reserved16 ),
10865                 rec( 72, 32, LongName ),
10866                 rec( 104, 4, CreatorID, BE ),
10867                 rec( 108, 12, ShortName ),
10868                 rec( 120, 1, AccessPrivileges ),
10869         ])              
10870         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
10871                              0xa100, 0xa201, 0xfd00, 0xff19])
10872         # 2222/2306, 35/06
10873         pkt = NCP(0x2306, "AFP Get Entry ID From NetWare Handle", 'afp')
10874         pkt.Request(16, [
10875                 rec( 10, 6, FileHandle ),
10876         ])
10877         pkt.Reply(14, [
10878                 rec( 8, 1, VolumeID ),
10879                 rec( 9, 4, TargetEntryID, BE ),
10880                 rec( 13, 1, ForkIndicator ),
10881         ])              
10882         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0xa201])
10883         # 2222/2307, 35/07
10884         pkt = NCP(0x2307, "AFP Rename", 'afp')
10885         pkt.Request((21, 529), [
10886                 rec( 10, 1, VolumeNumber ),
10887                 rec( 11, 4, MacSourceBaseID, BE ),
10888                 rec( 15, 4, MacDestinationBaseID, BE ),
10889                 rec( 19, (1,255), Path ),
10890                 rec( -1, (1,255), NewFileNameLen ),
10891         ], info_str=(Path, "AFP Rename: %s", ", %s"))
10892         pkt.Reply(8)            
10893         pkt.CompletionCodes([0x0000, 0x8301, 0x8401, 0x8800, 0x8b00, 0x8e00,
10894                              0x9001, 0x9201, 0x9300, 0x9600, 0x9804, 0x9900,
10895                              0x9c03, 0x9e00, 0xa100, 0xa201, 0xfd00, 0xff0a])
10896         # 2222/2308, 35/08
10897         pkt = NCP(0x2308, "AFP Open File Fork", 'afp')
10898         pkt.Request((18, 272), [
10899                 rec( 10, 1, VolumeNumber ),
10900                 rec( 11, 4, MacBaseDirectoryID ),
10901                 rec( 15, 1, ForkIndicator ),
10902                 rec( 16, 1, AccessMode ),
10903                 rec( 17, (1,255), Path ),
10904         ], info_str=(Path, "AFP Open File Fork: %s", ", %s"))
10905         pkt.Reply(22, [
10906                 rec( 8, 4, AFPEntryID, BE ),
10907                 rec( 12, 4, DataForkLen, BE ),
10908                 rec( 16, 6, NetWareAccessHandle ),
10909         ])
10910         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8800, 0x9300,
10911                              0x9400, 0x9600, 0x9804, 0x9900, 0x9c03, 0xa100,
10912                              0xa201, 0xfd00, 0xff16])
10913         # 2222/2309, 35/09
10914         pkt = NCP(0x2309, "AFP Set File Information", 'afp')
10915         pkt.Request((64, 318), [
10916                 rec( 10, 1, VolumeNumber ),
10917                 rec( 11, 4, MacBaseDirectoryID ),
10918                 rec( 15, 2, RequestBitMap, BE ),
10919                 rec( 17, 2, MacAttr, BE ),
10920                 rec( 19, 2, CreationDate, BE ),
10921                 rec( 21, 2, LastAccessedDate, BE ),
10922                 rec( 23, 2, ModifiedDate, BE ),
10923                 rec( 25, 2, ModifiedTime, BE ),
10924                 rec( 27, 2, ArchivedDate, BE ),
10925                 rec( 29, 2, ArchivedTime, BE ),
10926                 rec( 31, 4, CreatorID, BE ),
10927                 rec( 35, 4, Reserved4 ),
10928                 rec( 39, 2, FinderAttr ),
10929                 rec( 41, 2, HorizLocation ),
10930                 rec( 43, 2, VertLocation ),
10931                 rec( 45, 2, FileDirWindow ),
10932                 rec( 47, 16, Reserved16 ),
10933                 rec( 63, (1,255), Path ),
10934         ], info_str=(Path, "AFP Set File Information: %s", ", %s"))
10935         pkt.Reply(8)            
10936         pkt.CompletionCodes([0x0000, 0x0104, 0x8301, 0x8800, 0x9300, 0x9400,
10937                              0x9500, 0x9600, 0x9804, 0x9c03, 0xa100, 0xa201,
10938                              0xfd00, 0xff16])
10939         # 2222/230A, 35/10
10940         pkt = NCP(0x230A, "AFP Scan File Information", 'afp')
10941         pkt.Request((26, 280), [
10942                 rec( 10, 1, VolumeNumber ),
10943                 rec( 11, 4, MacBaseDirectoryID ),
10944                 rec( 15, 4, MacLastSeenID, BE ),
10945                 rec( 19, 2, DesiredResponseCount, BE ),
10946                 rec( 21, 2, SearchBitMap, BE ),
10947                 rec( 23, 2, RequestBitMap, BE ),
10948                 rec( 25, (1,255), Path ),
10949         ], info_str=(Path, "AFP Scan File Information: %s", ", %s"))
10950         pkt.Reply(123, [
10951                 rec( 8, 2, ActualResponseCount, BE, var="x" ),
10952                 rec( 10, 113, AFP10Struct, repeat="x" ),
10953         ])      
10954         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804,
10955                              0x9c03, 0xa100, 0xa201, 0xfd00, 0xff16])
10956         # 2222/230B, 35/11
10957         pkt = NCP(0x230B, "AFP Alloc Temporary Directory Handle", 'afp')
10958         pkt.Request((16,270), [
10959                 rec( 10, 1, VolumeNumber ),
10960                 rec( 11, 4, MacBaseDirectoryID ),
10961                 rec( 15, (1,255), Path ),
10962         ], info_str=(Path, "AFP Allocate Temporary Directory Handle: %s", ", %s"))
10963         pkt.Reply(10, [
10964                 rec( 8, 1, DirHandle ),
10965                 rec( 9, 1, AccessRightsMask ),
10966         ])
10967         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600,
10968                              0x9804, 0x9b03, 0x9c03, 0x9d00, 0xa100,
10969                              0xa201, 0xfd00, 0xff00])
10970         # 2222/230C, 35/12
10971         pkt = NCP(0x230C, "AFP Get Entry ID From Path Name", 'afp')
10972         pkt.Request((12,266), [
10973                 rec( 10, 1, DirHandle ),
10974                 rec( 11, (1,255), Path ),
10975         ], info_str=(Path, "AFP Get Entry ID from Path Name: %s", ", %s"))
10976         pkt.Reply(12, [
10977                 rec( 8, 4, AFPEntryID, BE ),
10978         ])
10979         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600,
10980                              0x9804, 0x9b03, 0x9c03, 0xa100, 0xa201,
10981                              0xfd00, 0xff00])
10982         # 2222/230D, 35/13
10983         pkt = NCP(0x230D, "AFP 2.0 Create Directory", 'afp')
10984         pkt.Request((55,309), [
10985                 rec( 10, 1, VolumeNumber ),
10986                 rec( 11, 4, BaseDirectoryID ),
10987                 rec( 15, 1, Reserved ),
10988                 rec( 16, 4, CreatorID, BE ),
10989                 rec( 20, 4, Reserved4 ),
10990                 rec( 24, 2, FinderAttr ),
10991                 rec( 26, 2, HorizLocation ),
10992                 rec( 28, 2, VertLocation ),
10993                 rec( 30, 2, FileDirWindow ),
10994                 rec( 32, 16, Reserved16 ),
10995                 rec( 48, 6, ProDOSInfo ),
10996                 rec( 54, (1,255), Path ),
10997         ], info_str=(Path, "AFP 2.0 Create Directory: %s", ", %s"))
10998         pkt.Reply(12, [
10999                 rec( 8, 4, NewDirectoryID ),
11000         ])
11001         pkt.CompletionCodes([0x0000, 0x8301, 0x8400, 0x8800, 0x9300,
11002                              0x9600, 0x9804, 0x9900, 0x9c03, 0x9e00,
11003                              0xa100, 0xa201, 0xfd00, 0xff00])
11004         # 2222/230E, 35/14
11005         pkt = NCP(0x230E, "AFP 2.0 Create File", 'afp')
11006         pkt.Request((55,309), [
11007                 rec( 10, 1, VolumeNumber ),
11008                 rec( 11, 4, BaseDirectoryID ),
11009                 rec( 15, 1, DeleteExistingFileFlag ),
11010                 rec( 16, 4, CreatorID, BE ),
11011                 rec( 20, 4, Reserved4 ),
11012                 rec( 24, 2, FinderAttr ),
11013                 rec( 26, 2, HorizLocation ),
11014                 rec( 28, 2, VertLocation ),
11015                 rec( 30, 2, FileDirWindow ),
11016                 rec( 32, 16, Reserved16 ),
11017                 rec( 48, 6, ProDOSInfo ),
11018                 rec( 54, (1,255), Path ),
11019         ], info_str=(Path, "AFP 2.0 Create File: %s", ", %s"))
11020         pkt.Reply(12, [
11021                 rec( 8, 4, NewDirectoryID ),
11022         ])
11023         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8400,
11024                              0x8701, 0x8800, 0x8a00, 0x8d00, 0x8e00,
11025                              0x8f00, 0x9001, 0x9300, 0x9600, 0x9804,
11026                              0x9900, 0x9b03, 0x9c03, 0x9e00, 0xa100,
11027                              0xa201, 0xfd00, 0xff00])
11028         # 2222/230F, 35/15
11029         pkt = NCP(0x230F, "AFP 2.0 Get File Or Directory Information", 'afp')
11030         pkt.Request((18,272), [
11031                 rec( 10, 1, VolumeNumber ),
11032                 rec( 11, 4, BaseDirectoryID ),
11033                 rec( 15, 2, RequestBitMap, BE ),
11034                 rec( 17, (1,255), Path ),
11035         ], info_str=(Path, "AFP 2.0 Get Information: %s", ", %s"))
11036         pkt.Reply(128, [
11037                 rec( 8, 4, AFPEntryID, BE ),
11038                 rec( 12, 4, ParentID, BE ),
11039                 rec( 16, 2, AttributesDef16 ),
11040                 rec( 18, 4, DataForkLen, BE ),
11041                 rec( 22, 4, ResourceForkLen, BE ),
11042                 rec( 26, 2, TotalOffspring, BE ),
11043                 rec( 28, 2, CreationDate, BE ),
11044                 rec( 30, 2, LastAccessedDate, BE ),
11045                 rec( 32, 2, ModifiedDate, BE ),
11046                 rec( 34, 2, ModifiedTime, BE ),
11047                 rec( 36, 2, ArchivedDate, BE ),
11048                 rec( 38, 2, ArchivedTime, BE ),
11049                 rec( 40, 4, CreatorID, BE ),
11050                 rec( 44, 4, Reserved4 ),
11051                 rec( 48, 2, FinderAttr ),
11052                 rec( 50, 2, HorizLocation ),
11053                 rec( 52, 2, VertLocation ),
11054                 rec( 54, 2, FileDirWindow ),
11055                 rec( 56, 16, Reserved16 ),
11056                 rec( 72, 32, LongName ),
11057                 rec( 104, 4, CreatorID, BE ),
11058                 rec( 108, 12, ShortName ),
11059                 rec( 120, 1, AccessPrivileges ),
11060                 rec( 121, 1, Reserved ),
11061                 rec( 122, 6, ProDOSInfo ),
11062         ])              
11063         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
11064                              0xa100, 0xa201, 0xfd00, 0xff19])
11065         # 2222/2310, 35/16
11066         pkt = NCP(0x2310, "AFP 2.0 Set File Information", 'afp')
11067         pkt.Request((70, 324), [
11068                 rec( 10, 1, VolumeNumber ),
11069                 rec( 11, 4, MacBaseDirectoryID ),
11070                 rec( 15, 2, RequestBitMap, BE ),
11071                 rec( 17, 2, AttributesDef16 ),
11072                 rec( 19, 2, CreationDate, BE ),
11073                 rec( 21, 2, LastAccessedDate, BE ),
11074                 rec( 23, 2, ModifiedDate, BE ),
11075                 rec( 25, 2, ModifiedTime, BE ),
11076                 rec( 27, 2, ArchivedDate, BE ),
11077                 rec( 29, 2, ArchivedTime, BE ),
11078                 rec( 31, 4, CreatorID, BE ),
11079                 rec( 35, 4, Reserved4 ),
11080                 rec( 39, 2, FinderAttr ),
11081                 rec( 41, 2, HorizLocation ),
11082                 rec( 43, 2, VertLocation ),
11083                 rec( 45, 2, FileDirWindow ),
11084                 rec( 47, 16, Reserved16 ),
11085                 rec( 63, 6, ProDOSInfo ),
11086                 rec( 69, (1,255), Path ),
11087         ], info_str=(Path, "AFP 2.0 Set File Information: %s", ", %s"))
11088         pkt.Reply(8)            
11089         pkt.CompletionCodes([0x0000, 0x0104, 0x8301, 0x8800, 0x9300, 0x9400,
11090                              0x9500, 0x9600, 0x9804, 0x9c03, 0xa100, 0xa201,
11091                              0xfd00, 0xff16])
11092         # 2222/2311, 35/17
11093         pkt = NCP(0x2311, "AFP 2.0 Scan File Information", 'afp')
11094         pkt.Request((26, 280), [
11095                 rec( 10, 1, VolumeNumber ),
11096                 rec( 11, 4, MacBaseDirectoryID ),
11097                 rec( 15, 4, MacLastSeenID, BE ),
11098                 rec( 19, 2, DesiredResponseCount, BE ),
11099                 rec( 21, 2, SearchBitMap, BE ),
11100                 rec( 23, 2, RequestBitMap, BE ),
11101                 rec( 25, (1,255), Path ),
11102         ], info_str=(Path, "AFP 2.0 Scan File Information: %s", ", %s"))
11103         pkt.Reply(14, [
11104                 rec( 8, 2, ActualResponseCount, var="x" ),
11105                 rec( 10, 4, AFP20Struct, repeat="x" ),
11106         ])      
11107         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804,
11108                              0x9c03, 0xa100, 0xa201, 0xfd00, 0xff16])
11109         # 2222/2312, 35/18
11110         pkt = NCP(0x2312, "AFP Get DOS Name From Entry ID", 'afp')
11111         pkt.Request(15, [
11112                 rec( 10, 1, VolumeNumber ),
11113                 rec( 11, 4, AFPEntryID, BE ),
11114         ])
11115         pkt.Reply((9,263), [
11116                 rec( 8, (1,255), Path ),
11117         ])      
11118         pkt.CompletionCodes([0x0000, 0x8900, 0x9600, 0xbf00])
11119         # 2222/2313, 35/19
11120         pkt = NCP(0x2313, "AFP Get Macintosh Info On Deleted File", 'afp')
11121         pkt.Request(15, [
11122                 rec( 10, 1, VolumeNumber ),
11123                 rec( 11, 4, DirectoryNumber, BE ),
11124         ])
11125         pkt.Reply((51,305), [
11126                 rec( 8, 4, CreatorID, BE ),
11127                 rec( 12, 4, Reserved4 ),
11128                 rec( 16, 2, FinderAttr ),
11129                 rec( 18, 2, HorizLocation ),
11130                 rec( 20, 2, VertLocation ),
11131                 rec( 22, 2, FileDirWindow ),
11132                 rec( 24, 16, Reserved16 ),
11133                 rec( 40, 6, ProDOSInfo ),
11134                 rec( 46, 4, ResourceForkSize, BE ),
11135                 rec( 50, (1,255), FileName ),
11136         ])      
11137         pkt.CompletionCodes([0x0000, 0x9c03, 0xbf00])
11138         # 2222/2400, 36/00
11139         pkt = NCP(0x2400, "Get NCP Extension Information", 'fileserver')
11140         pkt.Request(14, [
11141                 rec( 10, 4, NCPextensionNumber, LE ),
11142         ])
11143         pkt.Reply((16,270), [
11144                 rec( 8, 4, NCPextensionNumber ),
11145                 rec( 12, 1, NCPextensionMajorVersion ),
11146                 rec( 13, 1, NCPextensionMinorVersion ),
11147                 rec( 14, 1, NCPextensionRevisionNumber ),
11148                 rec( 15, (1, 255), NCPextensionName ),
11149         ])      
11150         pkt.CompletionCodes([0x0000, 0xfe00])
11151         # 2222/2401, 36/01
11152         pkt = NCP(0x2401, "Get NCP Extension Maximum Data Size", 'fileserver')
11153         pkt.Request(10)
11154         pkt.Reply(10, [
11155                 rec( 8, 2, NCPdataSize ),
11156         ])      
11157         pkt.CompletionCodes([0x0000, 0xfe00])
11158         # 2222/2402, 36/02
11159         pkt = NCP(0x2402, "Get NCP Extension Information by Name", 'fileserver')
11160         pkt.Request((11, 265), [
11161                 rec( 10, (1,255), NCPextensionName ),
11162         ], info_str=(NCPextensionName, "Get NCP Extension Information by Name: %s", ", %s"))
11163         pkt.Reply((16,270), [
11164                 rec( 8, 4, NCPextensionNumber ),
11165                 rec( 12, 1, NCPextensionMajorVersion ),
11166                 rec( 13, 1, NCPextensionMinorVersion ),
11167                 rec( 14, 1, NCPextensionRevisionNumber ),
11168                 rec( 15, (1, 255), NCPextensionName ),
11169         ])      
11170         pkt.CompletionCodes([0x0000, 0xfe00, 0xff20])
11171         # 2222/2403, 36/03
11172         pkt = NCP(0x2403, "Get Number of Registered NCP Extensions", 'fileserver')
11173         pkt.Request(10)
11174         pkt.Reply(12, [
11175                 rec( 8, 4, NumberOfNCPExtensions ),
11176         ])      
11177         pkt.CompletionCodes([0x0000, 0xfe00])
11178         # 2222/2404, 36/04
11179         pkt = NCP(0x2404, "Get NCP Extension Registered Verbs List", 'fileserver')
11180         pkt.Request(14, [
11181                 rec( 10, 4, StartingNumber ),
11182         ])
11183         pkt.Reply(20, [
11184                 rec( 8, 4, ReturnedListCount, var="x" ),
11185                 rec( 12, 4, nextStartingNumber ),
11186                 rec( 16, 4, NCPExtensionNumbers, repeat="x" ),
11187         ])      
11188         pkt.CompletionCodes([0x0000, 0xfe00])
11189         # 2222/2405, 36/05
11190         pkt = NCP(0x2405, "Return NCP Extension Information", 'fileserver')
11191         pkt.Request(14, [
11192                 rec( 10, 4, NCPextensionNumber ),
11193         ])
11194         pkt.Reply((16,270), [
11195                 rec( 8, 4, NCPextensionNumber ),
11196                 rec( 12, 1, NCPextensionMajorVersion ),
11197                 rec( 13, 1, NCPextensionMinorVersion ),
11198                 rec( 14, 1, NCPextensionRevisionNumber ),
11199                 rec( 15, (1, 255), NCPextensionName ),
11200         ])      
11201         pkt.CompletionCodes([0x0000, 0xfe00])
11202         # 2222/2406, 36/06
11203         pkt = NCP(0x2406, "Return NCP Extension Maximum Data Size", 'fileserver')
11204         pkt.Request(10)
11205         pkt.Reply(12, [
11206                 rec( 8, 4, NCPdataSize ),
11207         ])      
11208         pkt.CompletionCodes([0x0000, 0xfe00])
11209         # 2222/25, 37
11210         pkt = NCP(0x25, "Execute NCP Extension", 'fileserver')
11211         pkt.Request(11, [
11212                 rec( 7, 4, NCPextensionNumber ),
11213                 # The following value is Unicode
11214                 #rec[ 13, (1,255), RequestData ],
11215         ])
11216         pkt.Reply(8)
11217                 # The following value is Unicode
11218                 #[ 8, (1, 255), ReplyBuffer ],
11219         pkt.CompletionCodes([0x0000, 0xee00, 0xfe00])
11220         # 2222/3B, 59
11221         pkt = NCP(0x3B, "Commit File", 'file', has_length=0 )
11222         pkt.Request(14, [
11223                 rec( 7, 1, Reserved ),
11224                 rec( 8, 6, FileHandle ),
11225         ])
11226         pkt.Reply(8)    
11227         pkt.CompletionCodes([0x0000, 0x8800, 0x9804, 0xff00])
11228         # 2222/3E, 62
11229         pkt = NCP(0x3E, "File Search Initialize", 'file', has_length=0 )
11230         pkt.Request((9, 263), [
11231                 rec( 7, 1, DirHandle ),
11232                 rec( 8, (1,255), Path ),
11233         ], info_str=(Path, "Initialize File Search: %s", ", %s"))
11234         pkt.Reply(14, [
11235                 rec( 8, 1, VolumeNumber ),
11236                 rec( 9, 2, DirectoryID ),
11237                 rec( 11, 2, SequenceNumber, BE ),
11238                 rec( 13, 1, AccessRightsMask ),
11239         ])
11240         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100,
11241                              0xfd00, 0xff16])
11242         # 2222/3F, 63
11243         pkt = NCP(0x3F, "File Search Continue", 'file', has_length=0 )
11244         pkt.Request((14, 268), [
11245                 rec( 7, 1, VolumeNumber ),
11246                 rec( 8, 2, DirectoryID ),
11247                 rec( 10, 2, SequenceNumber, BE ),
11248                 rec( 12, 1, SearchAttributes ),
11249                 rec( 13, (1,255), Path ),
11250         ], info_str=(Path, "File Search Continue: %s", ", %s"))
11251         pkt.Reply( NO_LENGTH_CHECK, [
11252                 #
11253                 # XXX - don't show this if we got back a non-zero
11254                 # completion code?  For example, 255 means "No
11255                 # matching files or directories were found", so
11256                 # presumably it can't show you a matching file or
11257                 # directory instance - it appears to just leave crap
11258                 # there.
11259                 #
11260                 srec( DirectoryInstance, req_cond="ncp.sattr_sub==TRUE"),
11261                 srec( FileInstance, req_cond="ncp.sattr_sub!=TRUE"),
11262         ])
11263         pkt.ReqCondSizeVariable()
11264         pkt.CompletionCodes([0x0000, 0xff16])
11265         # 2222/40, 64
11266         pkt = NCP(0x40, "Search for a File", 'file')
11267         pkt.Request((12, 266), [
11268                 rec( 7, 2, SequenceNumber, BE ),
11269                 rec( 9, 1, DirHandle ),
11270                 rec( 10, 1, SearchAttributes ),
11271                 rec( 11, (1,255), FileName ),
11272         ], info_str=(FileName, "Search for File: %s", ", %s"))
11273         pkt.Reply(40, [
11274                 rec( 8, 2, SequenceNumber, BE ),
11275                 rec( 10, 2, Reserved2 ),
11276                 rec( 12, 14, FileName14 ),
11277                 rec( 26, 1, AttributesDef ),
11278                 rec( 27, 1, FileExecuteType ),
11279                 rec( 28, 4, FileSize ),
11280                 rec( 32, 2, CreationDate, BE ),
11281                 rec( 34, 2, LastAccessedDate, BE ),
11282                 rec( 36, 2, ModifiedDate, BE ),
11283                 rec( 38, 2, ModifiedTime, BE ),
11284         ])
11285         pkt.CompletionCodes([0x0000, 0x8900, 0x9600, 0x9804, 0x9b03,
11286                              0x9c03, 0xa100, 0xfd00, 0xff16])
11287         # 2222/41, 65
11288         pkt = NCP(0x41, "Open File", 'file')
11289         pkt.Request((10, 264), [
11290                 rec( 7, 1, DirHandle ),
11291                 rec( 8, 1, SearchAttributes ),
11292                 rec( 9, (1,255), FileName ),
11293         ], info_str=(FileName, "Open File: %s", ", %s"))
11294         pkt.Reply(44, [
11295                 rec( 8, 6, FileHandle ),
11296                 rec( 14, 2, Reserved2 ),
11297                 rec( 16, 14, FileName14 ),
11298                 rec( 30, 1, AttributesDef ),
11299                 rec( 31, 1, FileExecuteType ),
11300                 rec( 32, 4, FileSize, BE ),
11301                 rec( 36, 2, CreationDate, BE ),
11302                 rec( 38, 2, LastAccessedDate, BE ),
11303                 rec( 40, 2, ModifiedDate, BE ),
11304                 rec( 42, 2, ModifiedTime, BE ),
11305         ])
11306         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8200, 0x9400,
11307                              0x9600, 0x9804, 0x9c03, 0xa100, 0xfd00,
11308                              0xff16])
11309         # 2222/42, 66
11310         pkt = NCP(0x42, "Close File", 'file')
11311         pkt.Request(14, [
11312                 rec( 7, 1, Reserved ),
11313                 rec( 8, 6, FileHandle ),
11314         ])
11315         pkt.Reply(8)
11316         pkt.CompletionCodes([0x0000, 0x8800, 0xff1a])
11317         # 2222/43, 67
11318         pkt = NCP(0x43, "Create File", 'file')
11319         pkt.Request((10, 264), [
11320                 rec( 7, 1, DirHandle ),
11321                 rec( 8, 1, AttributesDef ),
11322                 rec( 9, (1,255), FileName ),
11323         ], info_str=(FileName, "Create File: %s", ", %s"))
11324         pkt.Reply(44, [
11325                 rec( 8, 6, FileHandle ),
11326                 rec( 14, 2, Reserved2 ),
11327                 rec( 16, 14, FileName14 ),
11328                 rec( 30, 1, AttributesDef ),
11329                 rec( 31, 1, FileExecuteType ),
11330                 rec( 32, 4, FileSize, BE ),
11331                 rec( 36, 2, CreationDate, BE ),
11332                 rec( 38, 2, LastAccessedDate, BE ),
11333                 rec( 40, 2, ModifiedDate, BE ),
11334                 rec( 42, 2, ModifiedTime, BE ),
11335         ])
11336         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11337                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11338                              0x9804, 0x9900, 0x9b03, 0x9c03, 0xfd00,
11339                              0xff00])
11340         # 2222/44, 68
11341         pkt = NCP(0x44, "Erase File", 'file')
11342         pkt.Request((10, 264), [
11343                 rec( 7, 1, DirHandle ),
11344                 rec( 8, 1, SearchAttributes ),
11345                 rec( 9, (1,255), FileName ),
11346         ], info_str=(FileName, "Erase File: %s", ", %s"))
11347         pkt.Reply(8)
11348         pkt.CompletionCodes([0x0000, 0x8a00, 0x8d00, 0x8e00, 0x8f00,
11349                              0x9001, 0x9600, 0x9804, 0x9b03, 0x9c03,
11350                              0xa100, 0xfd00, 0xff00])
11351         # 2222/45, 69
11352         pkt = NCP(0x45, "Rename File", 'file')
11353         pkt.Request((12, 520), [
11354                 rec( 7, 1, DirHandle ),
11355                 rec( 8, 1, SearchAttributes ),
11356                 rec( 9, (1,255), FileName ),
11357                 rec( -1, 1, TargetDirHandle ),
11358                 rec( -1, (1, 255), NewFileNameLen ),
11359         ], info_str=(FileName, "Rename File: %s", ", %s"))
11360         pkt.Reply(8)
11361         pkt.CompletionCodes([0x0000, 0x8701, 0x8b00, 0x8d00, 0x8e00,
11362                              0x8f00, 0x9001, 0x9101, 0x9201, 0x9600,
11363                              0x9804, 0x9a00, 0x9b03, 0x9c03, 0xa100,
11364                              0xfd00, 0xff16])
11365         # 2222/46, 70
11366         pkt = NCP(0x46, "Set File Attributes", 'file')
11367         pkt.Request((11, 265), [
11368                 rec( 7, 1, AttributesDef ),
11369                 rec( 8, 1, DirHandle ),
11370                 rec( 9, 1, SearchAttributes ),
11371                 rec( 10, (1,255), FileName ),
11372         ], info_str=(FileName, "Set File Attributes: %s", ", %s"))
11373         pkt.Reply(8)
11374         pkt.CompletionCodes([0x0000, 0x8c00, 0x8d00, 0x8e00, 0x9600,
11375                              0x9804, 0x9b03, 0x9c03, 0xa100, 0xfd00,
11376                              0xff16])
11377         # 2222/47, 71
11378         pkt = NCP(0x47, "Get Current Size of File", 'file')
11379         pkt.Request(13, [
11380                 rec( 7, 6, FileHandle ),
11381         ])
11382         pkt.Reply(12, [
11383                 rec( 8, 4, FileSize, BE ),
11384         ])
11385         pkt.CompletionCodes([0x0000, 0x8800])
11386         # 2222/48, 72
11387         pkt = NCP(0x48, "Read From A File", 'file')
11388         pkt.Request(20, [
11389                 rec( 7, 1, Reserved ),
11390                 rec( 8, 6, FileHandle ),
11391                 rec( 14, 4, FileOffset, BE ), 
11392                 rec( 18, 2, MaxBytes, BE ),     
11393         ])
11394         pkt.Reply(10, [ 
11395                 rec( 8, 2, NumBytes, BE ),      
11396         ])
11397         pkt.CompletionCodes([0x0000, 0x8300, 0x8800, 0x9300, 0xff00])
11398         # 2222/49, 73
11399         pkt = NCP(0x49, "Write to a File", 'file')
11400         pkt.Request(20, [
11401                 rec( 7, 1, Reserved ),
11402                 rec( 8, 6, FileHandle ),
11403                 rec( 14, 4, FileOffset, BE ),
11404                 rec( 18, 2, MaxBytes, BE ),     
11405         ])
11406         pkt.Reply(8)
11407         pkt.CompletionCodes([0x0000, 0x0104, 0x8300, 0x8800, 0x9400, 0x9500, 0xa201, 0xff1b])
11408         # 2222/4A, 74
11409         pkt = NCP(0x4A, "Copy from One File to Another", 'file')
11410         pkt.Request(30, [
11411                 rec( 7, 1, Reserved ),
11412                 rec( 8, 6, FileHandle ),
11413                 rec( 14, 6, TargetFileHandle ),
11414                 rec( 20, 4, FileOffset, BE ),
11415                 rec( 24, 4, TargetFileOffset, BE ),
11416                 rec( 28, 2, BytesToCopy, BE ),
11417         ])
11418         pkt.Reply(12, [
11419                 rec( 8, 4, BytesActuallyTransferred, BE ),
11420         ])
11421         pkt.CompletionCodes([0x0000, 0x0104, 0x8300, 0x8800, 0x9300, 0x9400,
11422                              0x9500, 0x9600, 0xa201, 0xff1b])
11423         # 2222/4B, 75
11424         pkt = NCP(0x4B, "Set File Time Date Stamp", 'file')
11425         pkt.Request(18, [
11426                 rec( 7, 1, Reserved ),
11427                 rec( 8, 6, FileHandle ),
11428                 rec( 14, 2, FileTime, BE ),
11429                 rec( 16, 2, FileDate, BE ),
11430         ])
11431         pkt.Reply(8)
11432         pkt.CompletionCodes([0x0000, 0x8800, 0x9600])
11433         # 2222/4C, 76
11434         pkt = NCP(0x4C, "Open File", 'file')
11435         pkt.Request((11, 265), [
11436                 rec( 7, 1, DirHandle ),
11437                 rec( 8, 1, SearchAttributes ),
11438                 rec( 9, 1, AccessRightsMask ),
11439                 rec( 10, (1,255), FileName ),
11440         ], info_str=(FileName, "Open File: %s", ", %s"))
11441         pkt.Reply(44, [
11442                 rec( 8, 6, FileHandle ),
11443                 rec( 14, 2, Reserved2 ),
11444                 rec( 16, 14, FileName14 ),
11445                 rec( 30, 1, AttributesDef ),
11446                 rec( 31, 1, FileExecuteType ),
11447                 rec( 32, 4, FileSize, BE ),
11448                 rec( 36, 2, CreationDate, BE ),
11449                 rec( 38, 2, LastAccessedDate, BE ),
11450                 rec( 40, 2, ModifiedDate, BE ),
11451                 rec( 42, 2, ModifiedTime, BE ),
11452         ])
11453         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8200, 0x9400,
11454                              0x9600, 0x9804, 0x9c03, 0xa100, 0xfd00,
11455                              0xff16])
11456         # 2222/4D, 77
11457         pkt = NCP(0x4D, "Create File", 'file')
11458         pkt.Request((10, 264), [
11459                 rec( 7, 1, DirHandle ),
11460                 rec( 8, 1, AttributesDef ),
11461                 rec( 9, (1,255), FileName ),
11462         ], info_str=(FileName, "Create File: %s", ", %s"))
11463         pkt.Reply(44, [
11464                 rec( 8, 6, FileHandle ),
11465                 rec( 14, 2, Reserved2 ),
11466                 rec( 16, 14, FileName14 ),
11467                 rec( 30, 1, AttributesDef ),
11468                 rec( 31, 1, FileExecuteType ),
11469                 rec( 32, 4, FileSize, BE ),
11470                 rec( 36, 2, CreationDate, BE ),
11471                 rec( 38, 2, LastAccessedDate, BE ),
11472                 rec( 40, 2, ModifiedDate, BE ),
11473                 rec( 42, 2, ModifiedTime, BE ),
11474         ])
11475         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11476                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11477                              0x9804, 0x9900, 0x9b03, 0x9c03, 0xfd00,
11478                              0xff00])
11479         # 2222/4F, 79
11480         pkt = NCP(0x4F, "Set File Extended Attributes", 'file')
11481         pkt.Request((11, 265), [
11482                 rec( 7, 1, AttributesDef ),
11483                 rec( 8, 1, DirHandle ),
11484                 rec( 9, 1, AccessRightsMask ),
11485                 rec( 10, (1,255), FileName ),
11486         ], info_str=(FileName, "Set File Extended Attributes: %s", ", %s"))
11487         pkt.Reply(8)
11488         pkt.CompletionCodes([0x0000, 0x8c00, 0x8d00, 0x8e00, 0x9600,
11489                              0x9804, 0x9b03, 0x9c03, 0xa100, 0xfd00,
11490                              0xff16])
11491         # 2222/54, 84
11492         pkt = NCP(0x54, "Open/Create File", 'file')
11493         pkt.Request((12, 266), [
11494                 rec( 7, 1, DirHandle ),
11495                 rec( 8, 1, AttributesDef ),
11496                 rec( 9, 1, AccessRightsMask ),
11497                 rec( 10, 1, ActionFlag ),
11498                 rec( 11, (1,255), FileName ),
11499         ], info_str=(FileName, "Open/Create File: %s", ", %s"))
11500         pkt.Reply(44, [
11501                 rec( 8, 6, FileHandle ),
11502                 rec( 14, 2, Reserved2 ),
11503                 rec( 16, 14, FileName14 ),
11504                 rec( 30, 1, AttributesDef ),
11505                 rec( 31, 1, FileExecuteType ),
11506                 rec( 32, 4, FileSize, BE ),
11507                 rec( 36, 2, CreationDate, BE ),
11508                 rec( 38, 2, LastAccessedDate, BE ),
11509                 rec( 40, 2, ModifiedDate, BE ),
11510                 rec( 42, 2, ModifiedTime, BE ),
11511         ])
11512         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11513                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11514                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
11515         # 2222/55, 85
11516         pkt = NCP(0x55, "Get Sparse File Data Block Bit Map", 'file')
11517         pkt.Request(17, [
11518                 rec( 7, 6, FileHandle ),
11519                 rec( 13, 4, FileOffset ),
11520         ])
11521         pkt.Reply(528, [
11522                 rec( 8, 4, AllocationBlockSize ),
11523                 rec( 12, 4, Reserved4 ),
11524                 rec( 16, 512, BitMap ),
11525         ])
11526         pkt.CompletionCodes([0x0000, 0x8800])
11527         # 2222/5601, 86/01
11528         pkt = NCP(0x5601, "Close Extended Attribute Handle", 'file', has_length=0 )
11529         pkt.Request(14, [
11530                 rec( 8, 2, Reserved2 ),
11531                 rec( 10, 4, EAHandle ),
11532         ])
11533         pkt.Reply(8)
11534         pkt.CompletionCodes([0x0000, 0xcf00, 0xd301])
11535         # 2222/5602, 86/02
11536         pkt = NCP(0x5602, "Write Extended Attribute", 'file', has_length=0 )
11537         pkt.Request((35,97), [
11538                 rec( 8, 2, EAFlags ),
11539                 rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
11540                 rec( 14, 4, ReservedOrDirectoryNumber ),
11541                 rec( 18, 4, TtlWriteDataSize ),
11542                 rec( 22, 4, FileOffset ),
11543                 rec( 26, 4, EAAccessFlag ),
11544                 rec( 30, 2, EAValueLength, var='x' ),
11545                 rec( 32, (2,64), EAKey ),
11546                 rec( -1, 1, EAValueRep, repeat='x' ),
11547         ], info_str=(EAKey, "Write Extended Attribute: %s", ", %s"))
11548         pkt.Reply(20, [
11549                 rec( 8, 4, EAErrorCodes ),
11550                 rec( 12, 4, EABytesWritten ),
11551                 rec( 16, 4, NewEAHandle ),
11552         ])
11553         pkt.CompletionCodes([0x0000, 0xc800, 0xc900, 0xcb00, 0xce00, 0xcf00, 0xd101,
11554                              0xd203, 0xd301, 0xd402])
11555         # 2222/5603, 86/03
11556         pkt = NCP(0x5603, "Read Extended Attribute", 'file', has_length=0 )
11557         pkt.Request((28,538), [
11558                 rec( 8, 2, EAFlags ),
11559                 rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
11560                 rec( 14, 4, ReservedOrDirectoryNumber ),
11561                 rec( 18, 4, FileOffset ),
11562                 rec( 22, 4, InspectSize ),
11563                 rec( 26, (2,512), EAKey ),
11564         ], info_str=(EAKey, "Read Extended Attribute: %s", ", %s"))
11565         pkt.Reply((26,536), [
11566                 rec( 8, 4, EAErrorCodes ),
11567                 rec( 12, 4, TtlValuesLength ),
11568                 rec( 16, 4, NewEAHandle ),
11569                 rec( 20, 4, EAAccessFlag ),
11570                 rec( 24, (2,512), EAValue ),
11571         ])
11572         pkt.CompletionCodes([0x0000, 0xc900, 0xce00, 0xcf00, 0xd101,
11573                              0xd301])
11574         # 2222/5604, 86/04
11575         pkt = NCP(0x5604, "Enumerate Extended Attribute", 'file', has_length=0 )
11576         pkt.Request((26,536), [
11577                 rec( 8, 2, EAFlags ),
11578                 rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
11579                 rec( 14, 4, ReservedOrDirectoryNumber ),
11580                 rec( 18, 4, InspectSize ),
11581                 rec( 22, 2, SequenceNumber ),
11582                 rec( 24, (2,512), EAKey ),
11583         ], info_str=(EAKey, "Enumerate Extended Attribute: %s", ", %s"))
11584         pkt.Reply(28, [
11585                 rec( 8, 4, EAErrorCodes ),
11586                 rec( 12, 4, TtlEAs ),
11587                 rec( 16, 4, TtlEAsDataSize ),
11588                 rec( 20, 4, TtlEAsKeySize ),
11589                 rec( 24, 4, NewEAHandle ),
11590         ])
11591         pkt.CompletionCodes([0x0000, 0x8800, 0xc900, 0xce00, 0xcf00, 0xd101,
11592                              0xd301])
11593         # 2222/5605, 86/05
11594         pkt = NCP(0x5605, "Duplicate Extended Attributes", 'file', has_length=0 )
11595         pkt.Request(28, [
11596                 rec( 8, 2, EAFlags ),
11597                 rec( 10, 2, DstEAFlags ),
11598                 rec( 12, 4, EAHandleOrNetWareHandleOrVolume ),
11599                 rec( 16, 4, ReservedOrDirectoryNumber ),
11600                 rec( 20, 4, EAHandleOrNetWareHandleOrVolume ),
11601                 rec( 24, 4, ReservedOrDirectoryNumber ),
11602         ])
11603         pkt.Reply(20, [
11604                 rec( 8, 4, EADuplicateCount ),
11605                 rec( 12, 4, EADataSizeDuplicated ),
11606                 rec( 16, 4, EAKeySizeDuplicated ),
11607         ])
11608         pkt.CompletionCodes([0x0000, 0xd101])
11609         # 2222/5701, 87/01
11610         pkt = NCP(0x5701, "Open/Create File or Subdirectory", 'file', has_length=0)
11611         pkt.Request((30, 284), [
11612                 rec( 8, 1, NameSpace  ),
11613                 rec( 9, 1, OpenCreateMode ),
11614                 rec( 10, 2, SearchAttributesLow ),
11615                 rec( 12, 2, ReturnInfoMask ),
11616                 rec( 14, 2, ExtendedInfo ),
11617                 rec( 16, 4, AttributesDef32 ),
11618                 rec( 20, 2, DesiredAccessRights ),
11619                 rec( 22, 1, VolumeNumber ),
11620                 rec( 23, 4, DirectoryBase ),
11621                 rec( 27, 1, HandleFlag ),
11622                 rec( 28, 1, PathCount, var="x" ),
11623                 rec( 29, (1,255), Path, repeat="x" ),
11624         ], info_str=(Path, "Open or Create: %s", "/%s"))
11625         pkt.Reply( NO_LENGTH_CHECK, [
11626                 rec( 8, 4, FileHandle ),
11627                 rec( 12, 1, OpenCreateAction ),
11628                 rec( 13, 1, Reserved ),
11629                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
11630                 srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
11631                 srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
11632                 srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
11633                 srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
11634                 srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
11635                 srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
11636                 srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
11637                 srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
11638                 srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
11639                 srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
11640                 srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
11641                 srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
11642                 srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
11643                 srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
11644                 srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
11645                 srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
11646                 srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
11647                 srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
11648                 srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
11649                 srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
11650                 srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
11651                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
11652                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
11653                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
11654                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
11655                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
11656                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
11657                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
11658                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
11659                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
11660                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
11661                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
11662                 srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
11663                 srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
11664                 srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
11665                 srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
11666                 srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
11667                 srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
11668                 srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
11669                 srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
11670                 srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
11671                 srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
11672                 srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
11673                 srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
11674                 srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
11675                 srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
11676         ])
11677         pkt.ReqCondSizeVariable()
11678         pkt.CompletionCodes([0x0000, 0x8001, 0x8101, 0x8401, 0x8501,
11679                              0x8701, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
11680                              0x9804, 0x9b03, 0x9c03, 0xa500, 0xbf00, 0xfd00, 0xff16])
11681         # 2222/5702, 87/02
11682         pkt = NCP(0x5702, "Initialize Search", 'file', has_length=0)
11683         pkt.Request( (18,272), [
11684                 rec( 8, 1, NameSpace  ),
11685                 rec( 9, 1, Reserved ),
11686                 rec( 10, 1, VolumeNumber ),
11687                 rec( 11, 4, DirectoryBase ),
11688                 rec( 15, 1, HandleFlag ),
11689                 rec( 16, 1, PathCount, var="x" ),
11690                 rec( 17, (1,255), Path, repeat="x" ),
11691         ], info_str=(Path, "Set Search Pointer to: %s", "/%s"))
11692         pkt.Reply(17, [
11693                 rec( 8, 1, VolumeNumber ),
11694                 rec( 9, 4, DirectoryNumber ),
11695                 rec( 13, 4, DirectoryEntryNumber ),
11696         ])
11697         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11698                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11699                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11700         # 2222/5703, 87/03
11701         pkt = NCP(0x5703, "Search for File or Subdirectory", 'file', has_length=0)
11702         pkt.Request((26, 280), [
11703                 rec( 8, 1, NameSpace  ),
11704                 rec( 9, 1, DataStream ),
11705                 rec( 10, 2, SearchAttributesLow ),
11706                 rec( 12, 2, ReturnInfoMask ),
11707                 rec( 14, 2, ExtendedInfo ),
11708                 rec( 16, 9, SearchSequence ),
11709                 rec( 25, (1,255), SearchPattern ),
11710         ], info_str=(SearchPattern, "Search for: %s", "/%s"))
11711         pkt.Reply( NO_LENGTH_CHECK, [
11712                 rec( 8, 9, SearchSequence ),
11713                 rec( 17, 1, Reserved ),
11714                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
11715                 srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
11716                 srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
11717                 srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
11718                 srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
11719                 srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
11720                 srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
11721                 srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
11722                 srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
11723                 srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
11724                 srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
11725                 srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
11726                 srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
11727                 srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
11728                 srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
11729                 srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
11730                 srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
11731                 srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
11732                 srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
11733                 srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
11734                 srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
11735                 srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
11736                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
11737                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
11738                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
11739                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
11740                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
11741                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
11742                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
11743                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
11744                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
11745                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
11746                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
11747                 srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
11748                 srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
11749                 srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
11750                 srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
11751                 srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
11752                 srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
11753                 srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
11754                 srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
11755                 srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
11756                 srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
11757                 srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
11758                 srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
11759                 srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
11760                 srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
11761         ])
11762         pkt.ReqCondSizeVariable()
11763         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11764                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11765                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11766         # 2222/5704, 87/04
11767         pkt = NCP(0x5704, "Rename Or Move a File or Subdirectory", 'file', has_length=0)
11768         pkt.Request((28, 536), [
11769                 rec( 8, 1, NameSpace  ),
11770                 rec( 9, 1, RenameFlag ),
11771                 rec( 10, 2, SearchAttributesLow ),
11772                 rec( 12, 1, VolumeNumber ),
11773                 rec( 13, 4, DirectoryBase ),
11774                 rec( 17, 1, HandleFlag ),
11775                 rec( 18, 1, PathCount, var="x" ),
11776                 rec( 19, 1, VolumeNumber ),
11777                 rec( 20, 4, DirectoryBase ),
11778                 rec( 24, 1, HandleFlag ),
11779                 rec( 25, 1, PathCount, var="y" ),
11780                 rec( 26, (1, 255), Path, repeat="x" ),
11781                 rec( -1, (1,255), Path, repeat="y" ),
11782         ], info_str=(Path, "Rename or Move: %s", "/%s"))
11783         pkt.Reply(8)
11784         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11785                              0x8701, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9200, 0x9600,
11786                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11787         # 2222/5705, 87/05
11788         pkt = NCP(0x5705, "Scan File or Subdirectory for Trustees", 'file', has_length=0)
11789         pkt.Request((24, 278), [
11790                 rec( 8, 1, NameSpace  ),
11791                 rec( 9, 1, Reserved ),
11792                 rec( 10, 2, SearchAttributesLow ),
11793                 rec( 12, 4, SequenceNumber ),
11794                 rec( 16, 1, VolumeNumber ),
11795                 rec( 17, 4, DirectoryBase ),
11796                 rec( 21, 1, HandleFlag ),
11797                 rec( 22, 1, PathCount, var="x" ),
11798                 rec( 23, (1, 255), Path, repeat="x" ),
11799         ], info_str=(Path, "Scan Trustees for: %s", "/%s"))
11800         pkt.Reply(20, [
11801                 rec( 8, 4, SequenceNumber ),
11802                 rec( 12, 2, ObjectIDCount, var="x" ),
11803                 rec( 14, 6, TrusteeStruct, repeat="x" ),
11804         ])
11805         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11806                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11807                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11808         # 2222/5706, 87/06
11809         pkt = NCP(0x5706, "Obtain File or SubDirectory Information", 'file', has_length=0)
11810         pkt.Request((24,278), [
11811                 rec( 10, 1, SrcNameSpace ),
11812                 rec( 11, 1, DestNameSpace ),
11813                 rec( 12, 2, SearchAttributesLow ),
11814                 rec( 14, 2, ReturnInfoMask, LE ),
11815                 rec( 16, 2, ExtendedInfo ),
11816                 rec( 18, 1, VolumeNumber ),
11817                 rec( 19, 4, DirectoryBase ),
11818                 rec( 23, 1, HandleFlag ),
11819                 rec( 24, 1, PathCount, var="x" ),
11820                 rec( 25, (1,255), Path, repeat="x",),
11821         ], info_str=(Path, "Obtain Info for: %s", "/%s"))
11822         pkt.Reply(NO_LENGTH_CHECK, [
11823             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
11824             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
11825             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
11826             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
11827             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
11828             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
11829             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
11830             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
11831             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
11832             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
11833             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
11834             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
11835             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
11836             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
11837             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
11838             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
11839             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
11840             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
11841             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
11842             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
11843             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
11844             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
11845             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
11846             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
11847             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
11848             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
11849             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
11850             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
11851             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
11852             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
11853             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
11854             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
11855             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
11856             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
11857             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
11858             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
11859             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
11860             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
11861             srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
11862             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
11863             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
11864             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
11865             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
11866             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
11867             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
11868             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
11869             srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
11870         ])
11871         pkt.ReqCondSizeVariable()
11872         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11873                              0x8701, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
11874                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11875         # 2222/5707, 87/07
11876         pkt = NCP(0x5707, "Modify File or Subdirectory DOS Information", 'file', has_length=0)
11877         pkt.Request((62,316), [
11878                 rec( 8, 1, NameSpace ),
11879                 rec( 9, 1, Reserved ),
11880                 rec( 10, 2, SearchAttributesLow ),
11881                 rec( 12, 2, ModifyDOSInfoMask ),
11882                 rec( 14, 2, Reserved2 ),
11883                 rec( 16, 2, AttributesDef16 ),
11884                 rec( 18, 1, FileMode ),
11885                 rec( 19, 1, FileExtendedAttributes ),
11886                 rec( 20, 2, CreationDate ),
11887                 rec( 22, 2, CreationTime ),
11888                 rec( 24, 4, CreatorID, BE ),
11889                 rec( 28, 2, ModifiedDate ),
11890                 rec( 30, 2, ModifiedTime ),
11891                 rec( 32, 4, ModifierID, BE ),
11892                 rec( 36, 2, ArchivedDate ),
11893                 rec( 38, 2, ArchivedTime ),
11894                 rec( 40, 4, ArchiverID, BE ),
11895                 rec( 44, 2, LastAccessedDate ),
11896                 rec( 46, 2, InheritedRightsMask ),
11897                 rec( 48, 2, InheritanceRevokeMask ),
11898                 rec( 50, 4, MaxSpace ),
11899                 rec( 54, 1, VolumeNumber ),
11900                 rec( 55, 4, DirectoryBase ),
11901                 rec( 59, 1, HandleFlag ),
11902                 rec( 60, 1, PathCount, var="x" ),
11903                 rec( 61, (1,255), Path, repeat="x" ),
11904         ], info_str=(Path, "Modify DOS Information for: %s", "/%s"))
11905         pkt.Reply(8)
11906         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11907                              0x8701, 0x8c01, 0x8d00, 0x8f00, 0x9001, 0x9600,
11908                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11909         # 2222/5708, 87/08
11910         pkt = NCP(0x5708, "Delete a File or Subdirectory", 'file', has_length=0)
11911         pkt.Request((20,274), [
11912                 rec( 8, 1, NameSpace ),
11913                 rec( 9, 1, Reserved ),
11914                 rec( 10, 2, SearchAttributesLow ),
11915                 rec( 12, 1, VolumeNumber ),
11916                 rec( 13, 4, DirectoryBase ),
11917                 rec( 17, 1, HandleFlag ),
11918                 rec( 18, 1, PathCount, var="x" ),
11919                 rec( 19, (1,255), Path, repeat="x" ),
11920         ], info_str=(Path, "Delete: %s", "/%s"))
11921         pkt.Reply(8)
11922         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,  
11923                              0x8701, 0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
11924                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11925         # 2222/5709, 87/09
11926         pkt = NCP(0x5709, "Set Short Directory Handle", 'file', has_length=0)
11927         pkt.Request((20,274), [
11928                 rec( 8, 1, NameSpace ),
11929                 rec( 9, 1, DataStream ),
11930                 rec( 10, 1, DestDirHandle ),
11931                 rec( 11, 1, Reserved ),
11932                 rec( 12, 1, VolumeNumber ),
11933                 rec( 13, 4, DirectoryBase ),
11934                 rec( 17, 1, HandleFlag ),
11935                 rec( 18, 1, PathCount, var="x" ),
11936                 rec( 19, (1,255), Path, repeat="x" ),
11937         ], info_str=(Path, "Set Short Directory Handle to: %s", "/%s"))
11938         pkt.Reply(8)
11939         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11940                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11941                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11942         # 2222/570A, 87/10
11943         pkt = NCP(0x570A, "Add Trustee Set to File or Subdirectory", 'file', has_length=0)
11944         pkt.Request((31,285), [
11945                 rec( 8, 1, NameSpace ),
11946                 rec( 9, 1, Reserved ),
11947                 rec( 10, 2, SearchAttributesLow ),
11948                 rec( 12, 2, AccessRightsMaskWord ),
11949                 rec( 14, 2, ObjectIDCount, var="y" ),
11950                 rec( 16, 1, VolumeNumber ),
11951                 rec( 17, 4, DirectoryBase ),
11952                 rec( 21, 1, HandleFlag ),
11953                 rec( 22, 1, PathCount, var="x" ),
11954                 rec( 23, (1,255), Path, repeat="x" ),
11955                 rec( -1, 7, TrusteeStruct, repeat="y" ),
11956         ], info_str=(Path, "Add Trustee Set to: %s", "/%s"))
11957         pkt.Reply(8)
11958         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11959                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11960                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfc01, 0xfd00, 0xff16])
11961         # 2222/570B, 87/11
11962         pkt = NCP(0x570B, "Delete Trustee Set from File or SubDirectory", 'file', has_length=0)
11963         pkt.Request((27,281), [
11964                 rec( 8, 1, NameSpace ),
11965                 rec( 9, 1, Reserved ),
11966                 rec( 10, 2, ObjectIDCount, var="y" ),
11967                 rec( 12, 1, VolumeNumber ),
11968                 rec( 13, 4, DirectoryBase ),
11969                 rec( 17, 1, HandleFlag ),
11970                 rec( 18, 1, PathCount, var="x" ),
11971                 rec( 19, (1,255), Path, repeat="x" ),
11972                 rec( -1, 7, TrusteeStruct, repeat="y" ),
11973         ], info_str=(Path, "Delete Trustee Set from: %s", "/%s"))
11974         pkt.Reply(8)
11975         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11976                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11977                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11978         # 2222/570C, 87/12
11979         pkt = NCP(0x570C, "Allocate Short Directory Handle", 'file', has_length=0)
11980         pkt.Request((20,274), [
11981                 rec( 8, 1, NameSpace ),
11982                 rec( 9, 1, Reserved ),
11983                 rec( 10, 2, AllocateMode ),
11984                 rec( 12, 1, VolumeNumber ),
11985                 rec( 13, 4, DirectoryBase ),
11986                 rec( 17, 1, HandleFlag ),
11987                 rec( 18, 1, PathCount, var="x" ),
11988                 rec( 19, (1,255), Path, repeat="x" ),
11989         ], info_str=(Path, "Allocate Short Directory Handle to: %s", "/%s"))
11990         pkt.Reply(14, [
11991                 rec( 8, 1, DirHandle ),
11992                 rec( 9, 1, VolumeNumber ),
11993                 rec( 10, 4, Reserved4 ),
11994         ])
11995         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11996                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11997                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11998         # 2222/5710, 87/16
11999         pkt = NCP(0x5710, "Scan Salvageable Files", 'file', has_length=0)
12000         pkt.Request((26,280), [
12001                 rec( 8, 1, NameSpace ),
12002                 rec( 9, 1, DataStream ),
12003                 rec( 10, 2, ReturnInfoMask ),
12004                 rec( 12, 2, ExtendedInfo ),
12005                 rec( 14, 4, SequenceNumber ),
12006                 rec( 18, 1, VolumeNumber ),
12007                 rec( 19, 4, DirectoryBase ),
12008                 rec( 23, 1, HandleFlag ),
12009                 rec( 24, 1, PathCount, var="x" ),
12010                 rec( 25, (1,255), Path, repeat="x" ),
12011         ], info_str=(Path, "Scan for Deleted Files in: %s", "/%s"))
12012         pkt.Reply(NO_LENGTH_CHECK, [
12013                 rec( 8, 4, SequenceNumber ),
12014                 rec( 12, 2, DeletedTime ),
12015                 rec( 14, 2, DeletedDate ),
12016                 rec( 16, 4, DeletedID, BE ),
12017                 rec( 20, 4, VolumeID ),
12018                 rec( 24, 4, DirectoryBase ),
12019                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12020                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12021                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12022                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12023                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12024                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12025                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12026                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12027                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12028                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12029                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12030                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12031                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12032                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12033                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12034                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12035                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12036                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12037                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12038                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12039                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12040                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12041                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12042                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12043                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12044                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12045                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12046                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12047                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12048                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12049                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12050                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12051                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12052                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12053                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12054         ])
12055         pkt.ReqCondSizeVariable()
12056         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12057                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12058                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12059         # 2222/5711, 87/17
12060         pkt = NCP(0x5711, "Recover Salvageable File", 'file', has_length=0)
12061         pkt.Request((23,277), [
12062                 rec( 8, 1, NameSpace ),
12063                 rec( 9, 1, Reserved ),
12064                 rec( 10, 4, SequenceNumber ),
12065                 rec( 14, 4, VolumeID ),
12066                 rec( 18, 4, DirectoryBase ),
12067                 rec( 22, (1,255), FileName ),
12068         ], info_str=(FileName, "Recover Deleted File: %s", ", %s"))
12069         pkt.Reply(8)
12070         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12071                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12072                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12073         # 2222/5712, 87/18
12074         pkt = NCP(0x5712, "Purge Salvageable Files", 'file', has_length=0)
12075         pkt.Request(22, [
12076                 rec( 8, 1, NameSpace ),
12077                 rec( 9, 1, Reserved ),
12078                 rec( 10, 4, SequenceNumber ),
12079                 rec( 14, 4, VolumeID ),
12080                 rec( 18, 4, DirectoryBase ),
12081         ])
12082         pkt.Reply(8)
12083         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12084                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12085                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12086         # 2222/5713, 87/19
12087         pkt = NCP(0x5713, "Get Name Space Information", 'file', has_length=0)
12088         pkt.Request(18, [
12089                 rec( 8, 1, SrcNameSpace ),
12090                 rec( 9, 1, DestNameSpace ),
12091                 rec( 10, 1, Reserved ),
12092                 rec( 11, 1, VolumeNumber ),
12093                 rec( 12, 4, DirectoryBase ),
12094                 rec( 16, 2, NamesSpaceInfoMask ),
12095         ])
12096         pkt.Reply(NO_LENGTH_CHECK, [
12097             srec( FileNameStruct, req_cond="ncp.ns_info_mask_modify == TRUE" ),
12098             srec( FileAttributesStruct, req_cond="ncp.ns_info_mask_fatt == TRUE" ),
12099             srec( CreationDateStruct, req_cond="ncp.ns_info_mask_cdate == TRUE" ),
12100             srec( CreationTimeStruct, req_cond="ncp.ns_info_mask_ctime == TRUE" ),
12101             srec( OwnerIDStruct, req_cond="ncp.ns_info_mask_owner == TRUE" ),
12102             srec( ArchiveDateStruct, req_cond="ncp.ns_info_mask_adate == TRUE" ),
12103             srec( ArchiveTimeStruct, req_cond="ncp.ns_info_mask_atime == TRUE" ),
12104             srec( ArchiveIdStruct, req_cond="ncp.ns_info_mask_aid == TRUE" ),
12105             srec( UpdateDateStruct, req_cond="ncp.ns_info_mask_udate == TRUE" ),
12106             srec( UpdateTimeStruct, req_cond="ncp.ns_info_mask_utime == TRUE" ),
12107             srec( UpdateIDStruct, req_cond="ncp.ns_info_mask_uid == TRUE" ),
12108             srec( LastAccessStruct, req_cond="ncp.ns_info_mask_acc_date == TRUE" ),
12109             srec( RightsInfoStruct, req_cond="ncp.ns_info_mask_max_acc_mask == TRUE" ),
12110         ])
12111         pkt.ReqCondSizeVariable()
12112         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12113                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12114                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12115         # 2222/5714, 87/20
12116         pkt = NCP(0x5714, "Search for File or Subdirectory Set", 'file', has_length=0)
12117         pkt.Request((28, 282), [
12118                 rec( 8, 1, NameSpace  ),
12119                 rec( 9, 1, DataStream ),
12120                 rec( 10, 2, SearchAttributesLow ),
12121                 rec( 12, 2, ReturnInfoMask ),
12122                 rec( 14, 2, ExtendedInfo ),
12123                 rec( 16, 2, ReturnInfoCount ),
12124                 rec( 18, 9, SearchSequence ),
12125                 rec( 27, (1,255), SearchPattern ),
12126         ], info_str=(SearchPattern, "Search for: %s", ", %s"))
12127         pkt.Reply(NO_LENGTH_CHECK, [
12128                 rec( 8, 9, SearchSequence ),
12129                 rec( 17, 1, MoreFlag ),
12130                 rec( 18, 2, InfoCount ),
12131             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12132             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12133             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12134             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12135             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12136             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12137             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12138             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12139             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12140             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12141             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12142             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12143             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12144             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12145             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12146             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12147             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12148             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12149             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12150             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12151             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12152             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12153             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12154             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12155             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12156             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12157             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12158             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12159             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12160             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12161             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12162             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12163             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12164             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
12165             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12166             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
12167             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
12168             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
12169             srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
12170             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
12171             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
12172             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
12173             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
12174             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
12175             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12176             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
12177             srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12178         ])
12179         pkt.ReqCondSizeVariable()
12180         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12181                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12182                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12183         # 2222/5715, 87/21
12184         pkt = NCP(0x5715, "Get Path String from Short Directory Handle", 'file', has_length=0)
12185         pkt.Request(10, [
12186                 rec( 8, 1, NameSpace ),
12187                 rec( 9, 1, DirHandle ),
12188         ])
12189         pkt.Reply((9,263), [
12190                 rec( 8, (1,255), Path ),
12191         ])
12192         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12193                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12194                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
12195         # 2222/5716, 87/22
12196         pkt = NCP(0x5716, "Generate Directory Base and Volume Number", 'file', has_length=0)
12197         pkt.Request((20,274), [
12198                 rec( 8, 1, SrcNameSpace ),
12199                 rec( 9, 1, DestNameSpace ),
12200                 rec( 10, 2, dstNSIndicator ),
12201                 rec( 12, 1, VolumeNumber ),
12202                 rec( 13, 4, DirectoryBase ),
12203                 rec( 17, 1, HandleFlag ),
12204                 rec( 18, 1, PathCount, var="x" ),
12205                 rec( 19, (1,255), Path, repeat="x" ),
12206         ], info_str=(Path, "Get Volume and Directory Base from: %s", "/%s"))
12207         pkt.Reply(17, [
12208                 rec( 8, 4, DirectoryBase ),
12209                 rec( 12, 4, DOSDirectoryBase ),
12210                 rec( 16, 1, VolumeNumber ),
12211         ])
12212         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12213                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12214                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12215         # 2222/5717, 87/23
12216         pkt = NCP(0x5717, "Query Name Space Information Format", 'file', has_length=0)
12217         pkt.Request(10, [
12218                 rec( 8, 1, NameSpace ),
12219                 rec( 9, 1, VolumeNumber ),
12220         ])
12221         pkt.Reply(58, [
12222                 rec( 8, 4, FixedBitMask ),
12223                 rec( 12, 4, VariableBitMask ),
12224                 rec( 16, 4, HugeBitMask ),
12225                 rec( 20, 2, FixedBitsDefined ),
12226                 rec( 22, 2, VariableBitsDefined ),
12227                 rec( 24, 2, HugeBitsDefined ),
12228                 rec( 26, 32, FieldsLenTable ),
12229         ])
12230         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12231                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12232                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12233         # 2222/5718, 87/24
12234         pkt = NCP(0x5718, "Get Name Spaces Loaded List from Volume Number", 'file', has_length=0)
12235         pkt.Request(10, [
12236                 rec( 8, 1, Reserved ),
12237                 rec( 9, 1, VolumeNumber ),
12238         ])
12239         pkt.Reply(11, [
12240                 rec( 8, 2, NumberOfNSLoaded, var="x" ),
12241                 rec( 10, 1, NameSpace, repeat="x" ),
12242         ])
12243         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12244                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12245                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12246         # 2222/5719, 87/25
12247         pkt = NCP(0x5719, "Set Name Space Information", 'file', has_length=0)
12248         pkt.Request(531, [
12249                 rec( 8, 1, SrcNameSpace ),
12250                 rec( 9, 1, DestNameSpace ),
12251                 rec( 10, 1, VolumeNumber ),
12252                 rec( 11, 4, DirectoryBase ),
12253                 rec( 15, 2, NamesSpaceInfoMask ),
12254                 rec( 17, 2, Reserved2 ),
12255                 rec( 19, 512, NSSpecificInfo ),
12256         ])
12257         pkt.Reply(8)
12258         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12259                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12260                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12261                              0xff16])
12262         # 2222/571A, 87/26
12263         pkt = NCP(0x571A, "Get Huge Name Space Information", 'file', has_length=0)
12264         pkt.Request(34, [
12265                 rec( 8, 1, NameSpace ),
12266                 rec( 9, 1, VolumeNumber ),
12267                 rec( 10, 4, DirectoryBase ),
12268                 rec( 14, 4, HugeBitMask ),
12269                 rec( 18, 16, HugeStateInfo ),
12270         ])
12271         pkt.Reply((25,279), [
12272                 rec( 8, 16, NextHugeStateInfo ),
12273                 rec( 24, (1,255), HugeData ),
12274         ])
12275         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12276                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12277                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12278                              0xff16])
12279         # 2222/571B, 87/27
12280         pkt = NCP(0x571B, "Set Huge Name Space Information", 'file', has_length=0)
12281         pkt.Request((35,289), [
12282                 rec( 8, 1, NameSpace ),
12283                 rec( 9, 1, VolumeNumber ),
12284                 rec( 10, 4, DirectoryBase ),
12285                 rec( 14, 4, HugeBitMask ),
12286                 rec( 18, 16, HugeStateInfo ),
12287                 rec( 34, (1,255), HugeData ),
12288         ])
12289         pkt.Reply(28, [
12290                 rec( 8, 16, NextHugeStateInfo ),
12291                 rec( 24, 4, HugeDataUsed ),
12292         ])
12293         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12294                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12295                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12296                              0xff16])
12297         # 2222/571C, 87/28
12298         pkt = NCP(0x571C, "Get Full Path String", 'file', has_length=0)
12299         pkt.Request((28,282), [
12300                 rec( 8, 1, SrcNameSpace ),
12301                 rec( 9, 1, DestNameSpace ),
12302                 rec( 10, 2, PathCookieFlags ),
12303                 rec( 12, 4, Cookie1 ),
12304                 rec( 16, 4, Cookie2 ),
12305                 rec( 20, 1, VolumeNumber ),
12306                 rec( 21, 4, DirectoryBase ),
12307                 rec( 25, 1, HandleFlag ),
12308                 rec( 26, 1, PathCount, var="x" ),
12309                 rec( 27, (1,255), Path, repeat="x" ),
12310         ], info_str=(Path, "Get Full Path from: %s", "/%s"))
12311         pkt.Reply((23,277), [
12312                 rec( 8, 2, PathCookieFlags ),
12313                 rec( 10, 4, Cookie1 ),
12314                 rec( 14, 4, Cookie2 ),
12315                 rec( 18, 2, PathComponentSize ),
12316                 rec( 20, 2, PathComponentCount, var='x' ),
12317                 rec( 22, (1,255), Path, repeat='x' ),
12318         ])
12319         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12320                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12321                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12322                              0xff16])
12323         # 2222/571D, 87/29
12324         pkt = NCP(0x571D, "Get Effective Directory Rights", 'file', has_length=0)
12325         pkt.Request((24, 278), [
12326                 rec( 8, 1, NameSpace  ),
12327                 rec( 9, 1, DestNameSpace ),
12328                 rec( 10, 2, SearchAttributesLow ),
12329                 rec( 12, 2, ReturnInfoMask ),
12330                 rec( 14, 2, ExtendedInfo ),
12331                 rec( 16, 1, VolumeNumber ),
12332                 rec( 17, 4, DirectoryBase ),
12333                 rec( 21, 1, HandleFlag ),
12334                 rec( 22, 1, PathCount, var="x" ),
12335                 rec( 23, (1,255), Path, repeat="x" ),
12336         ], info_str=(Path, "Get Effective Rights for: %s", "/%s"))
12337         pkt.Reply(NO_LENGTH_CHECK, [
12338                 rec( 8, 2, EffectiveRights ),
12339                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12340                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12341                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12342                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12343                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12344                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12345                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12346                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12347                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12348                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12349                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12350                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12351                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12352                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12353                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12354                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12355                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12356                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12357                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12358                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12359                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12360                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12361                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12362                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12363                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12364                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12365                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12366                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12367                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12368                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12369                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12370                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12371                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12372                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12373                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12374         ])
12375         pkt.ReqCondSizeVariable()
12376         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12377                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12378                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12379         # 2222/571E, 87/30
12380         pkt = NCP(0x571E, "Open/Create File or Subdirectory", 'file', has_length=0)
12381         pkt.Request((34, 288), [
12382                 rec( 8, 1, NameSpace  ),
12383                 rec( 9, 1, DataStream ),
12384                 rec( 10, 1, OpenCreateMode ),
12385                 rec( 11, 1, Reserved ),
12386                 rec( 12, 2, SearchAttributesLow ),
12387                 rec( 14, 2, Reserved2 ),
12388                 rec( 16, 2, ReturnInfoMask ),
12389                 rec( 18, 2, ExtendedInfo ),
12390                 rec( 20, 4, AttributesDef32 ),
12391                 rec( 24, 2, DesiredAccessRights ),
12392                 rec( 26, 1, VolumeNumber ),
12393                 rec( 27, 4, DirectoryBase ),
12394                 rec( 31, 1, HandleFlag ),
12395                 rec( 32, 1, PathCount, var="x" ),
12396                 rec( 33, (1,255), Path, repeat="x" ),
12397         ], info_str=(Path, "Open or Create File: %s", "/%s"))
12398         pkt.Reply(NO_LENGTH_CHECK, [
12399                 rec( 8, 4, FileHandle, BE ),
12400                 rec( 12, 1, OpenCreateAction ),
12401                 rec( 13, 1, Reserved ),
12402                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12403                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12404                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12405                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12406                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12407                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12408                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12409                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12410                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12411                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12412                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12413                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12414                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12415                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12416                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12417                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12418                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12419                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12420                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12421                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12422                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12423                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12424                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12425                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12426                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12427                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12428                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12429                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12430                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12431                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12432                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12433                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12434                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12435                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12436                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12437         ])
12438         pkt.ReqCondSizeVariable()
12439         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12440                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12441                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12442         # 2222/571F, 87/31
12443         pkt = NCP(0x571F, "Get File Information", 'file', has_length=0)
12444         pkt.Request(16, [
12445                 rec( 8, 6, FileHandle  ),
12446                 rec( 14, 1, HandleInfoLevel ),
12447                 rec( 15, 1, NameSpace ),
12448         ])
12449         pkt.Reply(NO_LENGTH_CHECK, [
12450                 rec( 8, 4, VolumeNumberLong ),
12451                 rec( 12, 4, DirectoryBase ),
12452                 srec(HandleInfoLevel0, req_cond="ncp.handle_info_level==0x00" ),
12453                 srec(HandleInfoLevel1, req_cond="ncp.handle_info_level==0x01" ),
12454                 srec(HandleInfoLevel2, req_cond="ncp.handle_info_level==0x02" ),
12455                 srec(HandleInfoLevel3, req_cond="ncp.handle_info_level==0x03" ),
12456                 srec(HandleInfoLevel4, req_cond="ncp.handle_info_level==0x04" ),
12457                 srec(HandleInfoLevel5, req_cond="ncp.handle_info_level==0x05" ),
12458         ])
12459         pkt.ReqCondSizeVariable()
12460         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12461                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12462                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12463         # 2222/5720, 87/32 
12464         pkt = NCP(0x5720, "Open/Create File or Subdirectory with Callback", 'file', has_length=0)
12465         pkt.Request((30, 284), [
12466                 rec( 8, 1, NameSpace  ),
12467                 rec( 9, 1, OpenCreateMode ),
12468                 rec( 10, 2, SearchAttributesLow ),
12469                 rec( 12, 2, ReturnInfoMask ),
12470                 rec( 14, 2, ExtendedInfo ),
12471                 rec( 16, 4, AttributesDef32 ),
12472                 rec( 20, 2, DesiredAccessRights ),
12473                 rec( 22, 1, VolumeNumber ),
12474                 rec( 23, 4, DirectoryBase ),
12475                 rec( 27, 1, HandleFlag ),
12476                 rec( 28, 1, PathCount, var="x" ),
12477                 rec( 29, (1,255), Path, repeat="x" ),
12478         ], info_str=(Path, "Open or Create with Op-Lock: %s", "/%s"))
12479         pkt.Reply( NO_LENGTH_CHECK, [
12480                 rec( 8, 4, FileHandle, BE ),
12481                 rec( 12, 1, OpenCreateAction ),
12482                 rec( 13, 1, OCRetFlags ),
12483                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12484                 srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12485                 srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12486                 srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12487                 srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12488                 srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12489                 srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12490                 srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12491                 srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12492                 srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12493                 srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12494                 srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12495                 srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12496                 srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12497                 srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12498                 srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12499                 srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12500                 srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12501                 srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12502                 srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12503                 srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12504                 srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12505                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12506                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12507                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12508                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12509                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12510                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12511                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12512                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12513                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12514                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12515                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12516                 srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ), 
12517                 srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12518                 srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
12519                 srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
12520                 srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ), 
12521                 srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ), 
12522                 srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ), 
12523                 srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ), 
12524                 srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ), 
12525                 srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ), 
12526                 srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ), 
12527                 srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12528                 srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ), 
12529                 srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12530         ])
12531         pkt.ReqCondSizeVariable()
12532         pkt.CompletionCodes([0x0000, 0x7f00, 0x8000, 0x8101, 0x8401, 0x8501,
12533                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12534                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12535         # 2222/5721, 87/33
12536         pkt = NCP(0x5721, "Open/Create File or Subdirectory II with Callback", 'file', has_length=0)
12537         pkt.Request((34, 288), [
12538                 rec( 8, 1, NameSpace  ),
12539                 rec( 9, 1, DataStream ),
12540                 rec( 10, 1, OpenCreateMode ),
12541                 rec( 11, 1, Reserved ),
12542                 rec( 12, 2, SearchAttributesLow ),
12543                 rec( 14, 2, Reserved2 ),
12544                 rec( 16, 2, ReturnInfoMask ),
12545                 rec( 18, 2, ExtendedInfo ),
12546                 rec( 20, 4, AttributesDef32 ),
12547                 rec( 24, 2, DesiredAccessRights ),
12548                 rec( 26, 1, VolumeNumber ),
12549                 rec( 27, 4, DirectoryBase ),
12550                 rec( 31, 1, HandleFlag ),
12551                 rec( 32, 1, PathCount, var="x" ),
12552                 rec( 33, (1,255), Path, repeat="x" ),
12553         ], info_str=(FilePath, "Open or Create II with Op-Lock: %s", "/%s"))
12554         pkt.Reply((91,345), [
12555                 rec( 8, 4, FileHandle ),
12556                 rec( 12, 1, OpenCreateAction ),
12557                 rec( 13, 1, OCRetFlags ),
12558                 rec( 14, 4, DataStreamSpaceAlloc ),
12559                 rec( 18, 6, AttributesStruct ),
12560                 rec( 24, 4, DataStreamSize ),
12561                 rec( 28, 4, TtlDSDskSpaceAlloc ),
12562                 rec( 32, 2, NumberOfDataStreams ),
12563                 rec( 34, 2, CreationTime ),
12564                 rec( 36, 2, CreationDate ),
12565                 rec( 38, 4, CreatorID, BE ),
12566                 rec( 42, 2, ModifiedTime ),
12567                 rec( 44, 2, ModifiedDate ),
12568                 rec( 46, 4, ModifierID, BE ),
12569                 rec( 50, 2, LastAccessedDate ),
12570                 rec( 52, 2, ArchivedTime ),
12571                 rec( 54, 2, ArchivedDate ),
12572                 rec( 56, 4, ArchiverID, BE ),
12573                 rec( 60, 2, InheritedRightsMask ),
12574                 rec( 62, 4, DirectoryEntryNumber ),
12575                 rec( 66, 4, DOSDirectoryEntryNumber ),
12576                 rec( 70, 4, VolumeNumberLong ),
12577                 rec( 74, 4, EADataSize ),
12578                 rec( 78, 4, EACount ),
12579                 rec( 82, 4, EAKeySize ),
12580                 rec( 86, 1, CreatorNameSpaceNumber ),
12581                 rec( 87, 3, Reserved3 ),
12582                 rec( 90, (1,255), FileName ),
12583         ])
12584         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12585                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12586                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12587         # 2222/5722, 87/34
12588         pkt = NCP(0x5722, "Open CallBack Control (Op-Lock)", 'file', has_length=0)
12589         pkt.Request(13, [
12590                 rec( 10, 4, CCFileHandle ),
12591                 rec( 14, 1, CCFunction ),
12592         ])
12593         pkt.Reply(8)
12594         pkt.CompletionCodes([0x0000, 0x8800])
12595         # 2222/5723, 87/35
12596         pkt = NCP(0x5723, "Modify DOS Attributes on a File or Subdirectory", 'file', has_length=0)
12597         pkt.Request((28, 282), [
12598                 rec( 8, 1, NameSpace  ),
12599                 rec( 9, 1, Flags ),
12600                 rec( 10, 2, SearchAttributesLow ),
12601                 rec( 12, 2, ReturnInfoMask ),
12602                 rec( 14, 2, ExtendedInfo ),
12603                 rec( 16, 4, AttributesDef32 ),
12604                 rec( 20, 1, VolumeNumber ),
12605                 rec( 21, 4, DirectoryBase ),
12606                 rec( 25, 1, HandleFlag ),
12607                 rec( 26, 1, PathCount, var="x" ),
12608                 rec( 27, (1,255), Path, repeat="x" ),
12609         ], info_str=(Path, "Modify DOS Attributes for: %s", "/%s"))
12610         pkt.Reply(24, [
12611                 rec( 8, 4, ItemsChecked ),
12612                 rec( 12, 4, ItemsChanged ),
12613                 rec( 16, 4, AttributeValidFlag ),
12614                 rec( 20, 4, AttributesDef32 ),
12615         ])
12616         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12617                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12618                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12619         # 2222/5724, 87/36
12620         pkt = NCP(0x5724, "Log File", 'file', has_length=0)
12621         pkt.Request((28, 282), [
12622                 rec( 8, 1, NameSpace  ),
12623                 rec( 9, 1, Reserved ),
12624                 rec( 10, 2, Reserved2 ),
12625                 rec( 12, 1, LogFileFlagLow ),
12626                 rec( 13, 1, LogFileFlagHigh ),
12627                 rec( 14, 2, Reserved2 ),
12628                 rec( 16, 4, WaitTime ),
12629                 rec( 20, 1, VolumeNumber ),
12630                 rec( 21, 4, DirectoryBase ),
12631                 rec( 25, 1, HandleFlag ),
12632                 rec( 26, 1, PathCount, var="x" ),
12633                 rec( 27, (1,255), Path, repeat="x" ),
12634         ], info_str=(Path, "Lock File: %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/5725, 87/37
12640         pkt = NCP(0x5725, "Release 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, "Release Lock on: %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/5726, 87/38
12656         pkt = NCP(0x5726, "Clear File", 'file', has_length=0)
12657         pkt.Request((20, 274), [
12658                 rec( 8, 1, NameSpace  ),
12659                 rec( 9, 1, Reserved ),
12660                 rec( 10, 2, Reserved2 ),
12661                 rec( 12, 1, VolumeNumber ),
12662                 rec( 13, 4, DirectoryBase ),
12663                 rec( 17, 1, HandleFlag ),
12664                 rec( 18, 1, PathCount, var="x" ),
12665                 rec( 19, (1,255), Path, repeat="x" ),
12666         ], info_str=(Path, "Clear File: %s", "/%s"))
12667         pkt.Reply(8)
12668         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12669                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12670                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12671         # 2222/5727, 87/39
12672         pkt = NCP(0x5727, "Get Directory Disk Space Restriction", 'file', has_length=0)
12673         pkt.Request((19, 273), [
12674                 rec( 8, 1, NameSpace  ),
12675                 rec( 9, 2, Reserved2 ),
12676                 rec( 11, 1, VolumeNumber ),
12677                 rec( 12, 4, DirectoryBase ),
12678                 rec( 16, 1, HandleFlag ),
12679                 rec( 17, 1, PathCount, var="x" ),
12680                 rec( 18, (1,255), Path, repeat="x" ),
12681         ], info_str=(Path, "Get Disk Space Restriction for: %s", "/%s"))
12682         pkt.Reply(18, [
12683                 rec( 8, 1, NumberOfEntries, var="x" ),
12684                 rec( 9, 9, SpaceStruct, repeat="x" ),
12685         ])
12686         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12687                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12688                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12689                              0xff16])
12690         # 2222/5728, 87/40
12691         pkt = NCP(0x5728, "Search for File or Subdirectory Set (Extended Errors)", 'file', has_length=0)
12692         pkt.Request((28, 282), [
12693                 rec( 8, 1, NameSpace  ),
12694                 rec( 9, 1, DataStream ),
12695                 rec( 10, 2, SearchAttributesLow ),
12696                 rec( 12, 2, ReturnInfoMask ),
12697                 rec( 14, 2, ExtendedInfo ),
12698                 rec( 16, 2, ReturnInfoCount ),
12699                 rec( 18, 9, SearchSequence ),
12700                 rec( 27, (1,255), SearchPattern ),
12701         ], info_str=(SearchPattern, "Search for: %s", ", %s"))
12702         pkt.Reply(NO_LENGTH_CHECK, [
12703                 rec( 8, 9, SearchSequence ),
12704                 rec( 17, 1, MoreFlag ),
12705                 rec( 18, 2, InfoCount ),
12706                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12707                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12708                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12709                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12710                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12711                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12712                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12713                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12714                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12715                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12716                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12717                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12718                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12719                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12720                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12721                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12722                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12723                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12724                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12725                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12726                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12727                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12728                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12729                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12730                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12731                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12732                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12733                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12734                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12735                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12736                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12737                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12738                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12739                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12740                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12741         ])
12742         pkt.ReqCondSizeVariable()
12743         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12744                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12745                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12746         # 2222/5729, 87/41
12747         pkt = NCP(0x5729, "Scan Salvageable Files", 'file', has_length=0)
12748         pkt.Request((24,278), [
12749                 rec( 8, 1, NameSpace ),
12750                 rec( 9, 1, Reserved ),
12751                 rec( 10, 2, CtrlFlags, LE ),
12752                 rec( 12, 4, SequenceNumber ),
12753                 rec( 16, 1, VolumeNumber ),
12754                 rec( 17, 4, DirectoryBase ),
12755                 rec( 21, 1, HandleFlag ),
12756                 rec( 22, 1, PathCount, var="x" ),
12757                 rec( 23, (1,255), Path, repeat="x" ),
12758         ], info_str=(Path, "Scan Deleted Files: %s", "/%s"))
12759         pkt.Reply(NO_LENGTH_CHECK, [
12760                 rec( 8, 4, SequenceNumber ),
12761                 rec( 12, 4, DirectoryBase ),
12762                 rec( 16, 4, ScanItems, var="x" ),
12763                 srec(ScanInfoFileName, req_cond="ncp.ctrl_flags==0x0001", repeat="x" ),
12764                 srec(ScanInfoFileNoName, req_cond="ncp.ctrl_flags==0x0000", repeat="x" ),
12765         ])
12766         pkt.ReqCondSizeVariable()
12767         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12768                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12769                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12770         # 2222/572A, 87/42
12771         pkt = NCP(0x572A, "Purge Salvageable File List", 'file', has_length=0)
12772         pkt.Request(28, [
12773                 rec( 8, 1, NameSpace ),
12774                 rec( 9, 1, Reserved ),
12775                 rec( 10, 2, PurgeFlags ),
12776                 rec( 12, 4, VolumeNumberLong ),
12777                 rec( 16, 4, DirectoryBase ),
12778                 rec( 20, 4, PurgeCount, var="x" ),
12779                 rec( 24, 4, PurgeList, repeat="x" ),
12780         ])
12781         pkt.Reply(16, [
12782                 rec( 8, 4, PurgeCount, var="x" ),
12783                 rec( 12, 4, PurgeCcode, repeat="x" ),
12784         ])
12785         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12786                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12787                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12788         # 2222/572B, 87/43
12789         pkt = NCP(0x572B, "Revoke File Handle Rights", 'file', has_length=0)
12790         pkt.Request(17, [
12791                 rec( 8, 3, Reserved3 ),
12792                 rec( 11, 1, RevQueryFlag ),
12793                 rec( 12, 4, FileHandle ),
12794                 rec( 16, 1, RemoveOpenRights ),
12795         ])
12796         pkt.Reply(13, [
12797                 rec( 8, 4, FileHandle ),
12798                 rec( 12, 1, OpenRights ),
12799         ])
12800         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12801                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12802                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12803         # 2222/572C, 87/44
12804         pkt = NCP(0x572C, "Update File Handle Rights", 'file', has_length=0)
12805         pkt.Request(24, [
12806                 rec( 8, 2, Reserved2 ),
12807                 rec( 10, 1, VolumeNumber ),
12808                 rec( 11, 1, NameSpace ),
12809                 rec( 12, 4, DirectoryNumber ),
12810                 rec( 16, 2, AccessRightsMaskWord ),
12811                 rec( 18, 2, NewAccessRights ),
12812                 rec( 20, 4, FileHandle, BE ),
12813         ])
12814         pkt.Reply(16, [
12815                 rec( 8, 4, FileHandle, BE ),
12816                 rec( 12, 4, EffectiveRights ),
12817         ])
12818         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12819                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12820                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12821         # 2222/5742, 87/66
12822         pkt = NCP(0x5742, "Novell Advanced Auditing Service (NAAS)", 'auditing', has_length=0)
12823         pkt.Request(8)
12824         pkt.Reply(8)
12825         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12826                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12827                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12828         # 2222/5801, 8801
12829         pkt = NCP(0x5801, "Query Volume Audit Status", "auditing", has_length=0)
12830         pkt.Request(12, [
12831                 rec( 8, 4, ConnectionNumber ),
12832         ])
12833         pkt.Reply(40, [
12834                 rec(8, 32, NWAuditStatus ),
12835         ])
12836         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12837                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12838                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12839         # 2222/5802, 8802
12840         pkt = NCP(0x5802, "Add User Audit Property", "auditing", has_length=0)
12841         pkt.Request(25, [
12842                 rec(8, 4, AuditIDType ),
12843                 rec(12, 4, AuditID ),
12844                 rec(16, 4, AuditHandle ),
12845                 rec(20, 4, ObjectID ),
12846                 rec(24, 1, AuditFlag ),
12847         ])
12848         pkt.Reply(8)
12849         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12850                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12851                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12852         # 2222/5803, 8803
12853         pkt = NCP(0x5803, "Add Auditor Access", "auditing", has_length=0)
12854         pkt.Request(8)
12855         pkt.Reply(8)
12856         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12857                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12858                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12859         # 2222/5804, 8804
12860         pkt = NCP(0x5804, "Change Auditor Volume Password", "auditing", has_length=0)
12861         pkt.Request(8)
12862         pkt.Reply(8)
12863         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12864                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12865                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12866         # 2222/5805, 8805
12867         pkt = NCP(0x5805, "Check Auditor Access", "auditing", has_length=0)
12868         pkt.Request(8)
12869         pkt.Reply(8)
12870         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12871                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12872                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12873         # 2222/5806, 8806
12874         pkt = NCP(0x5806, "Delete User Audit Property", "auditing", has_length=0)
12875         pkt.Request(8)
12876         pkt.Reply(8)
12877         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12878                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12879                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12880         # 2222/5807, 8807
12881         pkt = NCP(0x5807, "Disable Auditing On A Volume", "auditing", has_length=0)
12882         pkt.Request(8)
12883         pkt.Reply(8)
12884         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12885                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12886                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12887         # 2222/5808, 8808
12888         pkt = NCP(0x5808, "Enable Auditing On A Volume", "auditing", has_length=0)
12889         pkt.Request(8)
12890         pkt.Reply(8)
12891         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12892                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12893                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12894         # 2222/5809, 8809
12895         pkt = NCP(0x5809, "Query User Being Audited", "auditing", has_length=0)
12896         pkt.Request(8)
12897         pkt.Reply(8)
12898         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12899                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12900                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12901         # 2222/580A, 88,10
12902         pkt = NCP(0x580A, "Read Audit Bit Map", "auditing", has_length=0)
12903         pkt.Request(8)
12904         pkt.Reply(8)
12905         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12906                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12907                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12908         # 2222/580B, 88,11
12909         pkt = NCP(0x580B, "Read Audit File Configuration Header", "auditing", has_length=0)
12910         pkt.Request(8)
12911         pkt.Reply(8)
12912         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12913                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12914                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12915         # 2222/580D, 88,13
12916         pkt = NCP(0x580D, "Remove Auditor Access", "auditing", has_length=0)
12917         pkt.Request(8)
12918         pkt.Reply(8)
12919         pkt.CompletionCodes([0x0000, 0x300, 0x8000, 0x8101, 0x8401, 0x8501,
12920                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12921                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12922         # 2222/580E, 88,14
12923         pkt = NCP(0x580E, "Reset Audit File", "auditing", has_length=0)
12924         pkt.Request(8)
12925         pkt.Reply(8)
12926         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12927                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12928                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12929                              
12930         # 2222/580F, 88,15
12931         pkt = NCP(0x580F, "Auditing NCP", "auditing", has_length=0)
12932         pkt.Request(8)
12933         pkt.Reply(8)
12934         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12935                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12936                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12937         # 2222/5810, 88,16
12938         pkt = NCP(0x5810, "Write Audit Bit Map", "auditing", has_length=0)
12939         pkt.Request(8)
12940         pkt.Reply(8)
12941         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12942                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12943                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12944         # 2222/5811, 88,17
12945         pkt = NCP(0x5811, "Write Audit File Configuration Header", "auditing", has_length=0)
12946         pkt.Request(8)
12947         pkt.Reply(8)
12948         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12949                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12950                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12951         # 2222/5812, 88,18
12952         pkt = NCP(0x5812, "Change Auditor Volume Password2", "auditing", has_length=0)
12953         pkt.Request(8)
12954         pkt.Reply(8)
12955         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12956                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12957                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12958         # 2222/5813, 88,19
12959         pkt = NCP(0x5813, "Return Audit Flags", "auditing", has_length=0)
12960         pkt.Request(8)
12961         pkt.Reply(8)
12962         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12963                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12964                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12965         # 2222/5814, 88,20
12966         pkt = NCP(0x5814, "Close Old Audit File", "auditing", has_length=0)
12967         pkt.Request(8)
12968         pkt.Reply(8)
12969         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12970                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12971                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12972         # 2222/5816, 88,22
12973         pkt = NCP(0x5816, "Check Level Two Access", "auditing", has_length=0)
12974         pkt.Request(8)
12975         pkt.Reply(8)
12976         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12977                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12978                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12979         # 2222/5817, 88,23
12980         pkt = NCP(0x5817, "Return Old Audit File List", "auditing", has_length=0)
12981         pkt.Request(8)
12982         pkt.Reply(8)
12983         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12984                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12985                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12986         # 2222/5818, 88,24
12987         pkt = NCP(0x5818, "Init Audit File Reads", "auditing", has_length=0)
12988         pkt.Request(8)
12989         pkt.Reply(8)
12990         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12991                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12992                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
12993         # 2222/5819, 88,25
12994         pkt = NCP(0x5819, "Read Auditing File", "auditing", has_length=0)
12995         pkt.Request(8)
12996         pkt.Reply(8)
12997         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12998                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12999                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13000         # 2222/581A, 88,26
13001         pkt = NCP(0x581A, "Delete Old Audit File", "auditing", has_length=0)
13002         pkt.Request(8)
13003         pkt.Reply(8)
13004         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13005                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13006                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13007         # 2222/581E, 88,30
13008         pkt = NCP(0x581E, "Restart Volume auditing", "auditing", has_length=0)
13009         pkt.Request(8)
13010         pkt.Reply(8)
13011         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13012                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13013                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13014         # 2222/581F, 88,31
13015         pkt = NCP(0x581F, "Set Volume Password", "auditing", has_length=0)
13016         pkt.Request(8)
13017         pkt.Reply(8)
13018         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13019                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13020                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13021         # 2222/5A01, 90/00
13022         pkt = NCP(0x5A01, "Parse Tree", 'file')
13023         pkt.Request(26, [
13024                 rec( 10, 4, InfoMask ),
13025                 rec( 14, 4, Reserved4 ),
13026                 rec( 18, 4, Reserved4 ),
13027                 rec( 22, 4, limbCount ),
13028         ])
13029         pkt.Reply(32, [
13030                 rec( 8, 4, limbCount ),
13031                 rec( 12, 4, ItemsCount ),
13032                 rec( 16, 4, nextLimbScanNum ),
13033                 rec( 20, 4, CompletionCode ),
13034                 rec( 24, 1, FolderFlag ),
13035                 rec( 25, 3, Reserved ),
13036                 rec( 28, 4, DirectoryBase ),
13037         ])
13038         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13039                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13040                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13041         # 2222/5A0A, 90/10
13042         pkt = NCP(0x5A0A, "Get Reference Count from Dir Entry Number", 'file')
13043         pkt.Request(19, [
13044                 rec( 10, 4, VolumeNumberLong ),
13045                 rec( 14, 4, DirectoryBase ),
13046                 rec( 18, 1, NameSpace ),
13047         ])
13048         pkt.Reply(12, [
13049                 rec( 8, 4, ReferenceCount ),
13050         ])
13051         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13052                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13053                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13054         # 2222/5A0B, 90/11
13055         pkt = NCP(0x5A0B, "Get Reference Count from Dir Handle", 'file')
13056         pkt.Request(14, [
13057                 rec( 10, 4, DirHandle ),
13058         ])
13059         pkt.Reply(12, [
13060                 rec( 8, 4, ReferenceCount ),
13061         ])
13062         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13063                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13064                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13065         # 2222/5A0C, 90/12
13066         pkt = NCP(0x5A0C, "Set Compressed File Size", 'file')
13067         pkt.Request(20, [
13068                 rec( 10, 6, FileHandle ),
13069                 rec( 16, 4, SuggestedFileSize ),
13070         ])
13071         pkt.Reply(16, [
13072                 rec( 8, 4, OldFileSize ),
13073                 rec( 12, 4, NewFileSize ),
13074         ])
13075         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13076                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13077                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13078         # 2222/5A80, 90/128
13079         pkt = NCP(0x5A80, "Move File Data To Data Migration", 'file')
13080         pkt.Request(27, [
13081                 rec( 10, 4, VolumeNumberLong ),
13082                 rec( 14, 4, DirectoryEntryNumber ),
13083                 rec( 18, 1, NameSpace ),
13084                 rec( 19, 3, Reserved ),
13085                 rec( 22, 4, SupportModuleID ),
13086                 rec( 26, 1, DMFlags ),
13087         ])
13088         pkt.Reply(8)
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/5A81, 90/129
13093         pkt = NCP(0x5A81, "Data Migration File Information", 'file')
13094         pkt.Request(19, [
13095                 rec( 10, 4, VolumeNumberLong ),
13096                 rec( 14, 4, DirectoryEntryNumber ),
13097                 rec( 18, 1, NameSpace ),
13098         ])
13099         pkt.Reply(24, [
13100                 rec( 8, 4, SupportModuleID ),
13101                 rec( 12, 4, RestoreTime ),
13102                 rec( 16, 4, DMInfoEntries, var="x" ),
13103                 rec( 20, 4, DataSize, repeat="x" ),
13104         ])
13105         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13106                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13107                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13108         # 2222/5A82, 90/130
13109         pkt = NCP(0x5A82, "Volume Data Migration Status", 'file')
13110         pkt.Request(18, [
13111                 rec( 10, 4, VolumeNumberLong ),
13112                 rec( 14, 4, SupportModuleID ),
13113         ])
13114         pkt.Reply(32, [
13115                 rec( 8, 4, NumOfFilesMigrated ),
13116                 rec( 12, 4, TtlMigratedSize ),
13117                 rec( 16, 4, SpaceUsed ),
13118                 rec( 20, 4, LimboUsed ),
13119                 rec( 24, 4, SpaceMigrated ),
13120                 rec( 28, 4, FileLimbo ),
13121         ])
13122         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13123                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13124                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13125         # 2222/5A83, 90/131
13126         pkt = NCP(0x5A83, "Migrator Status Info", 'file')
13127         pkt.Request(10)
13128         pkt.Reply(20, [
13129                 rec( 8, 1, DMPresentFlag ),
13130                 rec( 9, 3, Reserved3 ),
13131                 rec( 12, 4, DMmajorVersion ),
13132                 rec( 16, 4, DMminorVersion ),
13133         ])
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/5A84, 90/132
13138         pkt = NCP(0x5A84, "Data Migration Support Module Information", 'file')
13139         pkt.Request(18, [
13140                 rec( 10, 1, DMInfoLevel ),
13141                 rec( 11, 3, Reserved3),
13142                 rec( 14, 4, SupportModuleID ),
13143         ])
13144         pkt.Reply(NO_LENGTH_CHECK, [
13145                 srec( DMInfoLevel0, req_cond="ncp.dm_info_level == 0x00" ),
13146                 srec( DMInfoLevel1, req_cond="ncp.dm_info_level == 0x01" ),
13147                 srec( DMInfoLevel2, req_cond="ncp.dm_info_level == 0x02" ),
13148         ])
13149         pkt.ReqCondSizeVariable()
13150         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13151                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13152                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13153         # 2222/5A85, 90/133
13154         pkt = NCP(0x5A85, "Move File Data From Data Migration", 'file')
13155         pkt.Request(19, [
13156                 rec( 10, 4, VolumeNumberLong ),
13157                 rec( 14, 4, DirectoryEntryNumber ),
13158                 rec( 18, 1, NameSpace ),
13159         ])
13160         pkt.Reply(8)
13161         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13162                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13163                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13164         # 2222/5A86, 90/134
13165         pkt = NCP(0x5A86, "Get/Set Default Read-Write Support Module ID", 'file')
13166         pkt.Request(18, [
13167                 rec( 10, 1, GetSetFlag ),
13168                 rec( 11, 3, Reserved3 ),
13169                 rec( 14, 4, SupportModuleID ),
13170         ])
13171         pkt.Reply(12, [
13172                 rec( 8, 4, SupportModuleID ),
13173         ])
13174         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13175                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13176                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13177         # 2222/5A87, 90/135
13178         pkt = NCP(0x5A87, "Data Migration Support Module Capacity Request", 'file')
13179         pkt.Request(22, [
13180                 rec( 10, 4, SupportModuleID ),
13181                 rec( 14, 4, VolumeNumberLong ),
13182                 rec( 18, 4, DirectoryBase ),
13183         ])
13184         pkt.Reply(20, [
13185                 rec( 8, 4, BlockSizeInSectors ),
13186                 rec( 12, 4, TotalBlocks ),
13187                 rec( 16, 4, UsedBlocks ),
13188         ])
13189         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13190                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13191                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13192         # 2222/5A88, 90/136
13193         pkt = NCP(0x5A88, "RTDM Request", 'file')
13194         pkt.Request(15, [
13195                 rec( 10, 4, Verb ),
13196                 rec( 14, 1, VerbData ),
13197         ])
13198         pkt.Reply(8)
13199         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13200                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13201                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13202         # 2222/5C, 92
13203         pkt = NCP(0x5C, "SecretStore Services", 'file')
13204         #Need info on this packet structure and SecretStore Verbs
13205         pkt.Request(7)
13206         pkt.Reply(8)
13207         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13208                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13209                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13210                              
13211         # 2222/5E, 94   
13212         pkt = NCP(0x5e, "NMAS Communications Packet", 'comm')
13213         pkt.Request(7)
13214         pkt.Reply(8)
13215         pkt.CompletionCodes([0x0000, 0xfb09])
13216         # 2222/61, 97
13217         pkt = NCP(0x61, "Get Big Packet NCP Max Packet Size", 'comm')
13218         pkt.Request(10, [
13219                 rec( 7, 2, ProposedMaxSize, BE ),
13220                 rec( 9, 1, SecurityFlag ),
13221         ],info_str=(ProposedMaxSize, "Get Big Max Packet Size - %d", ", %d"))
13222         pkt.Reply(13, [
13223                 rec( 8, 2, AcceptedMaxSize, BE ),
13224                 rec( 10, 2, EchoSocket, BE ),
13225                 rec( 12, 1, SecurityFlag ),
13226         ])
13227         pkt.CompletionCodes([0x0000])
13228         # 2222/63, 99
13229         pkt = NCP(0x63, "Undocumented Packet Burst", 'comm')
13230         pkt.Request(7)
13231         pkt.Reply(8)
13232         pkt.CompletionCodes([0x0000])
13233         # 2222/64, 100
13234         pkt = NCP(0x64, "Undocumented Packet Burst", 'comm')
13235         pkt.Request(7)
13236         pkt.Reply(8)
13237         pkt.CompletionCodes([0x0000])
13238         # 2222/65, 101
13239         pkt = NCP(0x65, "Packet Burst Connection Request", 'comm')
13240         pkt.Request(25, [
13241                 rec( 7, 4, LocalConnectionID ),
13242                 rec( 11, 4, LocalMaxPacketSize ),
13243                 rec( 15, 2, LocalTargetSocket ),
13244                 rec( 17, 4, LocalMaxSendSize ),
13245                 rec( 21, 4, LocalMaxRecvSize ),
13246         ])
13247         pkt.Reply(16, [
13248                 rec( 8, 4, RemoteTargetID ),
13249                 rec( 12, 4, RemoteMaxPacketSize ),
13250         ])
13251         pkt.CompletionCodes([0x0000])
13252         # 2222/66, 102
13253         pkt = NCP(0x66, "Undocumented Packet Burst", 'comm')
13254         pkt.Request(7)
13255         pkt.Reply(8)
13256         pkt.CompletionCodes([0x0000])
13257         # 2222/67, 103
13258         pkt = NCP(0x67, "Undocumented Packet Burst", 'comm')
13259         pkt.Request(7)
13260         pkt.Reply(8)
13261         pkt.CompletionCodes([0x0000])
13262         # 2222/6801, 104/01
13263         pkt = NCP(0x6801, "Ping for NDS NCP", "nds", has_length=0)
13264         pkt.Request(8)
13265         pkt.Reply(8)
13266         pkt.ReqCondSizeVariable()
13267         pkt.CompletionCodes([0x0000, 0x8100, 0xfb04, 0xfe0c])
13268         # 2222/6802, 104/02
13269         #
13270         # XXX - if FraggerHandle is not 0xffffffff, this is not the
13271         # first fragment, so we can only dissect this by reassembling;
13272         # the fields after "Fragment Handle" are bogus for non-0xffffffff
13273         # fragments, so we shouldn't dissect them.
13274         #
13275         # XXX - are there TotalRequest requests in the packet, and
13276         # does each of them have NDSFlags and NDSVerb fields, or
13277         # does only the first one have it?
13278         #
13279         pkt = NCP(0x6802, "Send NDS Fragmented Request/Reply", "nds", has_length=0)
13280         pkt.Request(8)
13281         pkt.Reply(8)
13282         pkt.ReqCondSizeVariable()
13283         pkt.CompletionCodes([0x0000])
13284         # 2222/6803, 104/03
13285         pkt = NCP(0x6803, "Fragment Close", "nds", has_length=0)
13286         pkt.Request(12, [
13287                 rec( 8, 4, FraggerHandle ),
13288         ])
13289         pkt.Reply(8)
13290         pkt.CompletionCodes([0x0000, 0xff00])
13291         # 2222/6804, 104/04
13292         pkt = NCP(0x6804, "Return Bindery Context", "nds", has_length=0)
13293         pkt.Request(8)
13294         pkt.Reply((9, 263), [
13295                 rec( 8, (1,255), binderyContext ),
13296         ])
13297         pkt.CompletionCodes([0x0000, 0xfe0c, 0xff00])
13298         # 2222/6805, 104/05
13299         pkt = NCP(0x6805, "Monitor NDS Connection", "nds", has_length=0)
13300         pkt.Request(8)
13301         pkt.Reply(8)
13302         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13303         # 2222/6806, 104/06
13304         pkt = NCP(0x6806, "Return NDS Statistics", "nds", has_length=0)
13305         pkt.Request(10, [
13306                 rec( 8, 2, NDSRequestFlags ),
13307         ])
13308         pkt.Reply(8)
13309         #Need to investigate how to decode Statistics Return Value
13310         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13311         # 2222/6807, 104/07
13312         pkt = NCP(0x6807, "Clear NDS Statistics", "nds", has_length=0)
13313         pkt.Request(8)
13314         pkt.Reply(8)
13315         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13316         # 2222/6808, 104/08
13317         pkt = NCP(0x6808, "Reload NDS Software", "nds", has_length=0)
13318         pkt.Request(8)
13319         pkt.Reply(12, [
13320                 rec( 8, 4, NDSStatus ),
13321         ])
13322         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13323         # 2222/68C8, 104/200
13324         pkt = NCP(0x68C8, "Query Container Audit Status", "auditing", has_length=0)
13325         pkt.Request(12, [
13326                 rec( 8, 4, ConnectionNumber ),
13327 #               rec( 12, 4, AuditIDType, LE ),
13328 #               rec( 16, 4, AuditID ),
13329 #               rec( 20, 2, BufferSize ),
13330         ])
13331         pkt.Reply(40, [
13332                 rec(8, 32, NWAuditStatus ),
13333         ])
13334         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13335         # 2222/68CA, 104/202
13336         pkt = NCP(0x68CA, "Add Auditor Access", "auditing", has_length=0)
13337         pkt.Request(8)
13338         pkt.Reply(8)
13339         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13340         # 2222/68CB, 104/203
13341         pkt = NCP(0x68CB, "Change Auditor Container Password", "auditing", has_length=0)
13342         pkt.Request(8)
13343         pkt.Reply(8)
13344         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13345         # 2222/68CC, 104/204
13346         pkt = NCP(0x68CC, "Check Auditor Access", "auditing", has_length=0)
13347         pkt.Request(8)
13348         pkt.Reply(8)
13349         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13350         # 2222/68CE, 104/206
13351         pkt = NCP(0x680CE, "Disable Container Auditing", "auditing", has_length=0)
13352         pkt.Request(8)
13353         pkt.Reply(8)
13354         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13355         # 2222/68CF, 104/207
13356         pkt = NCP(0x68CF, "Enable Container Auditing", "auditing", has_length=0)
13357         pkt.Request(8)
13358         pkt.Reply(8)
13359         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13360         # 2222/68D1, 104/209
13361         pkt = NCP(0x68D1, "Read Audit File Header", "auditing", has_length=0)
13362         pkt.Request(8)
13363         pkt.Reply(8)
13364         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13365         # 2222/68D3, 104/211
13366         pkt = NCP(0x68D3, "Remove Auditor Access", "auditing", has_length=0)
13367         pkt.Request(8)
13368         pkt.Reply(8)
13369         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13370         # 2222/68D4, 104/212
13371         pkt = NCP(0x68D4, "Reset Audit File", "auditing", has_length=0)
13372         pkt.Request(8)
13373         pkt.Reply(8)
13374         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13375         # 2222/68D6, 104/214
13376         pkt = NCP(0x68D6, "Write Audit File Configuration Header", "auditing", has_length=0)
13377         pkt.Request(8)
13378         pkt.Reply(8)
13379         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13380         # 2222/68D7, 104/215
13381         pkt = NCP(0x68D7, "Change Auditor Container Password2", "auditing", has_length=0)
13382         pkt.Request(8)
13383         pkt.Reply(8)
13384         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13385         # 2222/68D8, 104/216
13386         pkt = NCP(0x68D8, "Return Audit Flags", "auditing", has_length=0)
13387         pkt.Request(8)
13388         pkt.Reply(8)
13389         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13390         # 2222/68D9, 104/217
13391         pkt = NCP(0x68D9, "Close Old Audit File", "auditing", has_length=0)
13392         pkt.Request(8)
13393         pkt.Reply(8)
13394         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13395         # 2222/68DB, 104/219
13396         pkt = NCP(0x68DB, "Check Level Two Access", "auditing", has_length=0)
13397         pkt.Request(8)
13398         pkt.Reply(8)
13399         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13400         # 2222/68DC, 104/220
13401         pkt = NCP(0x68DC, "Check Object Audited", "auditing", has_length=0)
13402         pkt.Request(8)
13403         pkt.Reply(8)
13404         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13405         # 2222/68DD, 104/221
13406         pkt = NCP(0x68DD, "Change Object Audited", "auditing", has_length=0)
13407         pkt.Request(8)
13408         pkt.Reply(8)
13409         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13410         # 2222/68DE, 104/222
13411         pkt = NCP(0x68DE, "Return Old Audit File List", "auditing", has_length=0)
13412         pkt.Request(8)
13413         pkt.Reply(8)
13414         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13415         # 2222/68DF, 104/223
13416         pkt = NCP(0x68DF, "Init Audit File Reads", "auditing", has_length=0)
13417         pkt.Request(8)
13418         pkt.Reply(8)
13419         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13420         # 2222/68E0, 104/224
13421         pkt = NCP(0x68E0, "Read Auditing File", "auditing", has_length=0)
13422         pkt.Request(8)
13423         pkt.Reply(8)
13424         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13425         # 2222/68E1, 104/225
13426         pkt = NCP(0x68E1, "Delete Old Audit File", "auditing", has_length=0)
13427         pkt.Request(8)
13428         pkt.Reply(8)
13429         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13430         # 2222/68E5, 104/229
13431         pkt = NCP(0x68E5, "Set Audit Password", "auditing", has_length=0)
13432         pkt.Request(8)
13433         pkt.Reply(8)
13434         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13435         # 2222/68E7, 104/231
13436         pkt = NCP(0x68E7, "External Audit Append To File", "auditing", has_length=0)
13437         pkt.Request(8)
13438         pkt.Reply(8)
13439         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13440         # 2222/69, 105
13441         pkt = NCP(0x69, "Log File", 'file')
13442         pkt.Request( (12, 267), [
13443                 rec( 7, 1, DirHandle ),
13444                 rec( 8, 1, LockFlag ),
13445                 rec( 9, 2, TimeoutLimit ),
13446                 rec( 11, (1, 256), FilePath ),
13447         ], info_str=(FilePath, "Log File: %s", "/%s"))
13448         pkt.Reply(8)
13449         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x9600, 0xfe0d, 0xff01])
13450         # 2222/6A, 106
13451         pkt = NCP(0x6A, "Lock File Set", 'file')
13452         pkt.Request( 9, [
13453                 rec( 7, 2, TimeoutLimit ),
13454         ])
13455         pkt.Reply(8)
13456         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x9600, 0xfe0d, 0xff01])
13457         # 2222/6B, 107
13458         pkt = NCP(0x6B, "Log Logical Record", 'file')
13459         pkt.Request( (11, 266), [
13460                 rec( 7, 1, LockFlag ),
13461                 rec( 8, 2, TimeoutLimit ),
13462                 rec( 10, (1, 256), SynchName ),
13463         ], info_str=(SynchName, "Log Logical Record: %s", ", %s"))
13464         pkt.Reply(8)
13465         pkt.CompletionCodes([0x0000, 0x7f00, 0x9600, 0xfe0d, 0xff01])
13466         # 2222/6C, 108
13467         pkt = NCP(0x6C, "Log Logical Record", 'file')
13468         pkt.Request( 10, [
13469                 rec( 7, 1, LockFlag ),
13470                 rec( 8, 2, TimeoutLimit ),
13471         ])
13472         pkt.Reply(8)
13473         pkt.CompletionCodes([0x0000, 0x7f00, 0x9600, 0xfe0d, 0xff01])
13474         # 2222/6D, 109
13475         pkt = NCP(0x6D, "Log Physical Record", 'file')
13476         pkt.Request(24, [
13477                 rec( 7, 1, LockFlag ),
13478                 rec( 8, 6, FileHandle ),
13479                 rec( 14, 4, LockAreasStartOffset ),
13480                 rec( 18, 4, LockAreaLen ),
13481                 rec( 22, 2, LockTimeout ),
13482         ])
13483         pkt.Reply(8)
13484         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
13485         # 2222/6E, 110
13486         pkt = NCP(0x6E, "Lock Physical Record Set", 'file')
13487         pkt.Request(10, [
13488                 rec( 7, 1, LockFlag ),
13489                 rec( 8, 2, LockTimeout ),
13490         ])
13491         pkt.Reply(8)
13492         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
13493         # 2222/6F00, 111/00
13494         pkt = NCP(0x6F00, "Open/Create a Semaphore", 'file', has_length=0)
13495         pkt.Request((10,521), [
13496                 rec( 8, 1, InitialSemaphoreValue ),
13497                 rec( 9, (1, 512), SemaphoreName ),
13498         ], info_str=(SemaphoreName, "Open/Create Semaphore: %s", ", %s"))
13499         pkt.Reply(13, [
13500                   rec( 8, 4, SemaphoreHandle ),
13501                   rec( 12, 1, SemaphoreOpenCount ),
13502         ])
13503         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
13504         # 2222/6F01, 111/01
13505         pkt = NCP(0x6F01, "Examine Semaphore", 'file', has_length=0)
13506         pkt.Request(12, [
13507                 rec( 8, 4, SemaphoreHandle ),
13508         ])
13509         pkt.Reply(10, [
13510                   rec( 8, 1, SemaphoreValue ),
13511                   rec( 9, 1, SemaphoreOpenCount ),
13512         ])
13513         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
13514         # 2222/6F02, 111/02
13515         pkt = NCP(0x6F02, "Wait On (P) Semaphore", 'file', has_length=0)
13516         pkt.Request(14, [
13517                 rec( 8, 4, SemaphoreHandle ),
13518                 rec( 12, 2, LockTimeout ),
13519         ])
13520         pkt.Reply(8)
13521         pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
13522         # 2222/6F03, 111/03
13523         pkt = NCP(0x6F03, "Signal (V) Semaphore", 'file', has_length=0)
13524         pkt.Request(12, [
13525                 rec( 8, 4, SemaphoreHandle ),
13526         ])
13527         pkt.Reply(8)
13528         pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
13529         # 2222/6F04, 111/04
13530         pkt = NCP(0x6F04, "Close Semaphore", 'file', has_length=0)
13531         pkt.Request(12, [
13532                 rec( 8, 4, SemaphoreHandle ),
13533         ])
13534         pkt.Reply(10, [
13535                 rec( 8, 1, SemaphoreOpenCount ),
13536                 rec( 9, 1, SemaphoreShareCount ),
13537         ])
13538         pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
13539         # 2222/7201, 114/01
13540         pkt = NCP(0x7201, "Timesync Get Time", 'file')
13541         pkt.Request(10)
13542         pkt.Reply(32,[
13543                 rec( 8, 12, theTimeStruct ),
13544                 rec(20, 8, eventOffset ),
13545                 rec(28, 4, eventTime ),
13546         ])                
13547         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13548         # 2222/7202, 114/02
13549         pkt = NCP(0x7202, "Timesync Exchange Time", 'file')
13550         pkt.Request((63,112), [
13551                 rec( 10, 4, protocolFlags ),
13552                 rec( 14, 4, nodeFlags ),
13553                 rec( 18, 8, sourceOriginateTime ),
13554                 rec( 26, 8, targetReceiveTime ),
13555                 rec( 34, 8, targetTransmitTime ),
13556                 rec( 42, 8, sourceReturnTime ),
13557                 rec( 50, 8, eventOffset ),
13558                 rec( 58, 4, eventTime ),
13559                 rec( 62, (1,50), ServerNameLen ),
13560         ], info_str=(ServerNameLen, "Timesync Exchange Time: %s", ", %s"))
13561         pkt.Reply((64,113), [
13562                 rec( 8, 3, Reserved3 ),
13563                 rec( 11, 4, protocolFlags ),
13564                 rec( 15, 4, nodeFlags ),
13565                 rec( 19, 8, sourceOriginateTime ),
13566                 rec( 27, 8, targetReceiveTime ),
13567                 rec( 35, 8, targetTransmitTime ),
13568                 rec( 43, 8, sourceReturnTime ),
13569                 rec( 51, 8, eventOffset ),
13570                 rec( 59, 4, eventTime ),
13571                 rec( 63, (1,50), ServerNameLen ),
13572         ])
13573         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13574         # 2222/7205, 114/05
13575         pkt = NCP(0x7205, "Timesync Get Server List", 'file')
13576         pkt.Request(14, [
13577                 rec( 10, 4, StartNumber ),
13578         ])
13579         pkt.Reply(66, [
13580                 rec( 8, 4, nameType ),
13581                 rec( 12, 48, ServerName ),
13582                 rec( 60, 4, serverListFlags ),
13583                 rec( 64, 2, startNumberFlag ),
13584         ])
13585         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13586         # 2222/7206, 114/06
13587         pkt = NCP(0x7206, "Timesync Set Server List", 'file')
13588         pkt.Request(14, [
13589                 rec( 10, 4, StartNumber ),
13590         ])
13591         pkt.Reply(66, [
13592                 rec( 8, 4, nameType ),
13593                 rec( 12, 48, ServerName ),
13594                 rec( 60, 4, serverListFlags ),
13595                 rec( 64, 2, startNumberFlag ),
13596         ])
13597         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13598         # 2222/720C, 114/12
13599         pkt = NCP(0x720C, "Timesync Get Version", 'file')
13600         pkt.Request(10)
13601         pkt.Reply(12, [
13602                 rec( 8, 4, version ),
13603         ])
13604         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13605         # 2222/7B01, 123/01
13606         pkt = NCP(0x7B01, "Get Cache Information", 'stats')
13607         pkt.Request(12, [
13608                 rec(10, 1, VersionNumber),
13609                 rec(11, 1, RevisionNumber),
13610         ])
13611         pkt.Reply(288, [
13612                 rec(8, 4, CurrentServerTime, LE),
13613                 rec(12, 1, VConsoleVersion ),
13614                 rec(13, 1, VConsoleRevision ),
13615                 rec(14, 2, Reserved2 ),
13616                 rec(16, 104, Counters ),
13617                 rec(120, 40, ExtraCacheCntrs ),
13618                 rec(160, 40, MemoryCounters ),
13619                 rec(200, 48, TrendCounters ),
13620                 rec(248, 40, CacheInfo ),
13621         ])
13622         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xff00])
13623         # 2222/7B02, 123/02
13624         pkt = NCP(0x7B02, "Get File Server Information", 'stats')
13625         pkt.Request(10)
13626         pkt.Reply(150, [
13627                 rec(8, 4, CurrentServerTime ),
13628                 rec(12, 1, VConsoleVersion ),
13629                 rec(13, 1, VConsoleRevision ),
13630                 rec(14, 2, Reserved2 ),
13631                 rec(16, 4, NCPStaInUseCnt ),
13632                 rec(20, 4, NCPPeakStaInUse ),
13633                 rec(24, 4, NumOfNCPReqs ),
13634                 rec(28, 4, ServerUtilization ),
13635                 rec(32, 96, ServerInfo ),
13636                 rec(128, 22, FileServerCounters ),
13637         ])
13638         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13639         # 2222/7B03, 123/03
13640         pkt = NCP(0x7B03, "NetWare File System Information", 'stats')
13641         pkt.Request(11, [
13642                 rec(10, 1, FileSystemID ),
13643         ])
13644         pkt.Reply(68, [
13645                 rec(8, 4, CurrentServerTime ),
13646                 rec(12, 1, VConsoleVersion ),
13647                 rec(13, 1, VConsoleRevision ),
13648                 rec(14, 2, Reserved2 ),
13649                 rec(16, 52, FileSystemInfo ),
13650         ])
13651         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13652         # 2222/7B04, 123/04
13653         pkt = NCP(0x7B04, "User Information", 'stats')
13654         pkt.Request(14, [
13655                 rec(10, 4, ConnectionNumber ),
13656         ])
13657         pkt.Reply((85, 132), [
13658                 rec(8, 4, CurrentServerTime ),
13659                 rec(12, 1, VConsoleVersion ),
13660                 rec(13, 1, VConsoleRevision ),
13661                 rec(14, 2, Reserved2 ),
13662                 rec(16, 68, UserInformation ),
13663                 rec(84, (1, 48), UserName ),
13664         ])
13665         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13666         # 2222/7B05, 123/05
13667         pkt = NCP(0x7B05, "Packet Burst Information", 'stats')
13668         pkt.Request(10)
13669         pkt.Reply(216, [
13670                 rec(8, 4, CurrentServerTime ),
13671                 rec(12, 1, VConsoleVersion ),
13672                 rec(13, 1, VConsoleRevision ),
13673                 rec(14, 2, Reserved2 ),
13674                 rec(16, 200, PacketBurstInformation ),
13675         ])
13676         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13677         # 2222/7B06, 123/06
13678         pkt = NCP(0x7B06, "IPX SPX Information", 'stats')
13679         pkt.Request(10)
13680         pkt.Reply(94, [
13681                 rec(8, 4, CurrentServerTime ),
13682                 rec(12, 1, VConsoleVersion ),
13683                 rec(13, 1, VConsoleRevision ),
13684                 rec(14, 2, Reserved2 ),
13685                 rec(16, 34, IPXInformation ),
13686                 rec(50, 44, SPXInformation ),
13687         ])
13688         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13689         # 2222/7B07, 123/07
13690         pkt = NCP(0x7B07, "Garbage Collection Information", 'stats')
13691         pkt.Request(10)
13692         pkt.Reply(40, [
13693                 rec(8, 4, CurrentServerTime ),
13694                 rec(12, 1, VConsoleVersion ),
13695                 rec(13, 1, VConsoleRevision ),
13696                 rec(14, 2, Reserved2 ),
13697                 rec(16, 4, FailedAllocReqCnt ),
13698                 rec(20, 4, NumberOfAllocs ),
13699                 rec(24, 4, NoMoreMemAvlCnt ),
13700                 rec(28, 4, NumOfGarbageColl ),
13701                 rec(32, 4, FoundSomeMem ),
13702                 rec(36, 4, NumOfChecks ),
13703         ])
13704         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13705         # 2222/7B08, 123/08
13706         pkt = NCP(0x7B08, "CPU Information", 'stats')
13707         pkt.Request(14, [
13708                 rec(10, 4, CPUNumber ),
13709         ])
13710         pkt.Reply(51, [
13711                 rec(8, 4, CurrentServerTime ),
13712                 rec(12, 1, VConsoleVersion ),
13713                 rec(13, 1, VConsoleRevision ),
13714                 rec(14, 2, Reserved2 ),
13715                 rec(16, 4, NumberOfCPUs ),
13716                 rec(20, 31, CPUInformation ),
13717         ])      
13718         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13719         # 2222/7B09, 123/09
13720         pkt = NCP(0x7B09, "Volume Switch Information", 'stats')
13721         pkt.Request(14, [
13722                 rec(10, 4, StartNumber )
13723         ])
13724         pkt.Reply(28, [
13725                 rec(8, 4, CurrentServerTime ),
13726                 rec(12, 1, VConsoleVersion ),
13727                 rec(13, 1, VConsoleRevision ),
13728                 rec(14, 2, Reserved2 ),
13729                 rec(16, 4, TotalLFSCounters ),
13730                 rec(20, 4, CurrentLFSCounters, var="x"),
13731                 rec(24, 4, LFSCounters, repeat="x"),
13732         ])
13733         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13734         # 2222/7B0A, 123/10
13735         pkt = NCP(0x7B0A, "Get NLM Loaded List", 'stats')
13736         pkt.Request(14, [
13737                 rec(10, 4, StartNumber )
13738         ])
13739         pkt.Reply(28, [
13740                 rec(8, 4, CurrentServerTime ),
13741                 rec(12, 1, VConsoleVersion ),
13742                 rec(13, 1, VConsoleRevision ),
13743                 rec(14, 2, Reserved2 ),
13744                 rec(16, 4, NLMcount ),
13745                 rec(20, 4, NLMsInList, var="x" ),
13746                 rec(24, 4, NLMNumbers, repeat="x" ),
13747         ])
13748         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13749         # 2222/7B0B, 123/11
13750         pkt = NCP(0x7B0B, "NLM Information", 'stats')
13751         pkt.Request(14, [
13752                 rec(10, 4, NLMNumber ),
13753         ])
13754         pkt.Reply((79,841), [
13755                 rec(8, 4, CurrentServerTime ),
13756                 rec(12, 1, VConsoleVersion ),
13757                 rec(13, 1, VConsoleRevision ),
13758                 rec(14, 2, Reserved2 ),
13759                 rec(16, 60, NLMInformation ),
13760                 rec(76, (1,255), FileName ),
13761                 rec(-1, (1,255), Name ),
13762                 rec(-1, (1,255), Copyright ),
13763         ])
13764         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13765         # 2222/7B0C, 123/12
13766         pkt = NCP(0x7B0C, "Get Directory Cache Information", 'stats')
13767         pkt.Request(10)
13768         pkt.Reply(72, [
13769                 rec(8, 4, CurrentServerTime ),
13770                 rec(12, 1, VConsoleVersion ),
13771                 rec(13, 1, VConsoleRevision ),
13772                 rec(14, 2, Reserved2 ),
13773                 rec(16, 56, DirCacheInfo ),
13774         ])
13775         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13776         # 2222/7B0D, 123/13
13777         pkt = NCP(0x7B0D, "Get Operating System Version Information", 'stats')
13778         pkt.Request(10)
13779         pkt.Reply(70, [
13780                 rec(8, 4, CurrentServerTime ),
13781                 rec(12, 1, VConsoleVersion ),
13782                 rec(13, 1, VConsoleRevision ),
13783                 rec(14, 2, Reserved2 ),
13784                 rec(16, 1, OSMajorVersion ),
13785                 rec(17, 1, OSMinorVersion ),
13786                 rec(18, 1, OSRevision ),
13787                 rec(19, 1, AccountVersion ),
13788                 rec(20, 1, VAPVersion ),
13789                 rec(21, 1, QueueingVersion ),
13790                 rec(22, 1, SecurityRestrictionVersion ),
13791                 rec(23, 1, InternetBridgeVersion ),
13792                 rec(24, 4, MaxNumOfVol ),
13793                 rec(28, 4, MaxNumOfConn ),
13794                 rec(32, 4, MaxNumOfUsers ),
13795                 rec(36, 4, MaxNumOfNmeSps ),
13796                 rec(40, 4, MaxNumOfLANS ),
13797                 rec(44, 4, MaxNumOfMedias ),
13798                 rec(48, 4, MaxNumOfStacks ),
13799                 rec(52, 4, MaxDirDepth ),
13800                 rec(56, 4, MaxDataStreams ),
13801                 rec(60, 4, MaxNumOfSpoolPr ),
13802                 rec(64, 4, ServerSerialNumber ),
13803                 rec(68, 2, ServerAppNumber ),
13804         ])
13805         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13806         # 2222/7B0E, 123/14
13807         pkt = NCP(0x7B0E, "Get Active Connection List by Type", 'stats')
13808         pkt.Request(15, [
13809                 rec(10, 4, StartConnNumber ),
13810                 rec(14, 1, ConnectionType ),
13811         ])
13812         pkt.Reply(528, [
13813                 rec(8, 4, CurrentServerTime ),
13814                 rec(12, 1, VConsoleVersion ),
13815                 rec(13, 1, VConsoleRevision ),
13816                 rec(14, 2, Reserved2 ),
13817                 rec(16, 512, ActiveConnBitList ),
13818         ])
13819         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfd01, 0xff00])
13820         # 2222/7B0F, 123/15
13821         pkt = NCP(0x7B0F, "Get NLM Resource Tag List", 'stats')
13822         pkt.Request(18, [
13823                 rec(10, 4, NLMNumber ),
13824                 rec(14, 4, NLMStartNumber ),
13825         ])
13826         pkt.Reply(37, [
13827                 rec(8, 4, CurrentServerTime ),
13828                 rec(12, 1, VConsoleVersion ),
13829                 rec(13, 1, VConsoleRevision ),
13830                 rec(14, 2, Reserved2 ),
13831                 rec(16, 4, TtlNumOfRTags ),
13832                 rec(20, 4, CurNumOfRTags ),
13833                 rec(24, 13, RTagStructure ),
13834         ])
13835         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13836         # 2222/7B10, 123/16
13837         pkt = NCP(0x7B10, "Enumerate Connection Information from Connection List", 'stats')
13838         pkt.Request(22, [
13839                 rec(10, 1, EnumInfoMask),
13840                 rec(11, 3, Reserved3),
13841                 rec(14, 4, itemsInList, var="x"),
13842                 rec(18, 4, connList, repeat="x"),
13843         ])
13844         pkt.Reply(NO_LENGTH_CHECK, [
13845                 rec(8, 4, CurrentServerTime ),
13846                 rec(12, 1, VConsoleVersion ),
13847                 rec(13, 1, VConsoleRevision ),
13848                 rec(14, 2, Reserved2 ),
13849                 rec(16, 4, ItemsInPacket ),
13850                 srec(netAddr, req_cond="ncp.enum_info_transport==TRUE"),
13851                 srec(timeInfo, req_cond="ncp.enum_info_time==TRUE"),
13852                 srec(nameInfo, req_cond="ncp.enum_info_name==TRUE"),
13853                 srec(lockInfo, req_cond="ncp.enum_info_lock==TRUE"),
13854                 srec(printInfo, req_cond="ncp.enum_info_print==TRUE"),
13855                 srec(statsInfo, req_cond="ncp.enum_info_stats==TRUE"),
13856                 srec(acctngInfo, req_cond="ncp.enum_info_account==TRUE"),
13857                 srec(authInfo, req_cond="ncp.enum_info_auth==TRUE"),
13858         ])                
13859         pkt.ReqCondSizeVariable()
13860         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13861         # 2222/7B11, 123/17
13862         pkt = NCP(0x7B11, "Enumerate NCP Service Network Addresses", 'stats')
13863         pkt.Request(14, [
13864                 rec(10, 4, SearchNumber ),
13865         ])                
13866         pkt.Reply(60, [
13867                 rec(8, 4, CurrentServerTime ),
13868                 rec(12, 1, VConsoleVersion ),
13869                 rec(13, 1, VConsoleRevision ),
13870                 rec(14, 2, ServerInfoFlags ),
13871                 rec(16, 16, GUID ),
13872                 rec(32, 4, NextSearchNum ),
13873                 rec(36, 4, ItemsInPacket, var="x"), 
13874                 rec(40, 20, NCPNetworkAddress, repeat="x" ),
13875         ])
13876         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13877         # 2222/7B14, 123/20
13878         pkt = NCP(0x7B14, "Active LAN Board List", 'stats')
13879         pkt.Request(14, [
13880                 rec(10, 4, StartNumber ),
13881         ])               
13882         pkt.Reply(28, [
13883                 rec(8, 4, CurrentServerTime ),
13884                 rec(12, 1, VConsoleVersion ),
13885                 rec(13, 1, VConsoleRevision ),
13886                 rec(14, 2, Reserved2 ),
13887                 rec(16, 4, MaxNumOfLANS ),
13888                 rec(20, 4, ItemsInPacket, var="x"),
13889                 rec(24, 4, BoardNumbers, repeat="x"),
13890         ])                
13891         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13892         # 2222/7B15, 123/21
13893         pkt = NCP(0x7B15, "LAN Configuration Information", 'stats')
13894         pkt.Request(14, [
13895                 rec(10, 4, BoardNumber ),
13896         ])                
13897         pkt.Reply(152, [
13898                 rec(8, 4, CurrentServerTime ),
13899                 rec(12, 1, VConsoleVersion ),
13900                 rec(13, 1, VConsoleRevision ),
13901                 rec(14, 2, Reserved2 ),
13902                 rec(16,136, LANConfigInfo ),
13903         ])                
13904         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13905         # 2222/7B16, 123/22
13906         pkt = NCP(0x7B16, "LAN Common Counters Information", 'stats')
13907         pkt.Request(18, [
13908                 rec(10, 4, BoardNumber ),
13909                 rec(14, 4, BlockNumber ),
13910         ])                
13911         pkt.Reply(86, [
13912                 rec(8, 4, CurrentServerTime ),
13913                 rec(12, 1, VConsoleVersion ),
13914                 rec(13, 1, VConsoleRevision ),
13915                 rec(14, 1, StatMajorVersion ),
13916                 rec(15, 1, StatMinorVersion ),
13917                 rec(16, 4, TotalCommonCnts ),
13918                 rec(20, 4, TotalCntBlocks ),
13919                 rec(24, 4, CustomCounters ),
13920                 rec(28, 4, NextCntBlock ),
13921                 rec(32, 54, CommonLanStruc ),
13922         ])                
13923         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13924         # 2222/7B17, 123/23
13925         pkt = NCP(0x7B17, "LAN Custom Counters Information", 'stats')
13926         pkt.Request(18, [
13927                 rec(10, 4, BoardNumber ),
13928                 rec(14, 4, StartNumber ),
13929         ])                
13930         pkt.Reply(25, [
13931                 rec(8, 4, CurrentServerTime ),
13932                 rec(12, 1, VConsoleVersion ),
13933                 rec(13, 1, VConsoleRevision ),
13934                 rec(14, 2, Reserved2 ),
13935                 rec(16, 4, NumOfCCinPkt, var="x"),
13936                 rec(20, 5, CustomCntsInfo, repeat="x"),
13937         ])                
13938         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13939         # 2222/7B18, 123/24
13940         pkt = NCP(0x7B18, "LAN Name Information", 'stats')
13941         pkt.Request(14, [
13942                 rec(10, 4, BoardNumber ),
13943         ])                
13944         pkt.Reply(19, [
13945                 rec(8, 4, CurrentServerTime ),
13946                 rec(12, 1, VConsoleVersion ),
13947                 rec(13, 1, VConsoleRevision ),
13948                 rec(14, 2, Reserved2 ),
13949                 rec(16, 3, BoardNameStruct ),
13950         ])
13951         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13952         # 2222/7B19, 123/25
13953         pkt = NCP(0x7B19, "LSL Information", 'stats')
13954         pkt.Request(10)
13955         pkt.Reply(90, [
13956                 rec(8, 4, CurrentServerTime ),
13957                 rec(12, 1, VConsoleVersion ),
13958                 rec(13, 1, VConsoleRevision ),
13959                 rec(14, 2, Reserved2 ),
13960                 rec(16, 74, LSLInformation ),
13961         ])                
13962         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13963         # 2222/7B1A, 123/26
13964         pkt = NCP(0x7B1A, "LSL Logical Board Statistics", 'stats')
13965         pkt.Request(14, [
13966                 rec(10, 4, BoardNumber ),
13967         ])                
13968         pkt.Reply(28, [
13969                 rec(8, 4, CurrentServerTime ),
13970                 rec(12, 1, VConsoleVersion ),
13971                 rec(13, 1, VConsoleRevision ),
13972                 rec(14, 2, Reserved2 ),
13973                 rec(16, 4, LogTtlTxPkts ),
13974                 rec(20, 4, LogTtlRxPkts ),
13975                 rec(24, 4, UnclaimedPkts ),
13976         ])                
13977         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13978         # 2222/7B1B, 123/27
13979         pkt = NCP(0x7B1B, "MLID Board Information", 'stats')
13980         pkt.Request(14, [
13981                 rec(10, 4, BoardNumber ),
13982         ])                
13983         pkt.Reply(44, [
13984                 rec(8, 4, CurrentServerTime ),
13985                 rec(12, 1, VConsoleVersion ),
13986                 rec(13, 1, VConsoleRevision ),
13987                 rec(14, 1, Reserved ),
13988                 rec(15, 1, NumberOfProtocols ),
13989                 rec(16, 28, MLIDBoardInfo ),
13990         ])                        
13991         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13992         # 2222/7B1E, 123/30
13993         pkt = NCP(0x7B1E, "Get Media Manager Object Information", 'stats')
13994         pkt.Request(14, [
13995                 rec(10, 4, ObjectNumber ),
13996         ])                
13997         pkt.Reply(212, [
13998                 rec(8, 4, CurrentServerTime ),
13999                 rec(12, 1, VConsoleVersion ),
14000                 rec(13, 1, VConsoleRevision ),
14001                 rec(14, 2, Reserved2 ),
14002                 rec(16, 196, GenericInfoDef ),
14003         ])                
14004         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14005         # 2222/7B1F, 123/31
14006         pkt = NCP(0x7B1F, "Get Media Manager Objects List", 'stats')
14007         pkt.Request(15, [
14008                 rec(10, 4, StartNumber ),
14009                 rec(14, 1, MediaObjectType ),
14010         ])                
14011         pkt.Reply(28, [
14012                 rec(8, 4, CurrentServerTime ),
14013                 rec(12, 1, VConsoleVersion ),
14014                 rec(13, 1, VConsoleRevision ),
14015                 rec(14, 2, Reserved2 ),
14016                 rec(16, 4, nextStartingNumber ),
14017                 rec(20, 4, ObjectCount, var="x"),
14018                 rec(24, 4, ObjectID, repeat="x"),
14019         ])                
14020         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14021         # 2222/7B20, 123/32
14022         pkt = NCP(0x7B20, "Get Media Manager Object Childrens List", 'stats')
14023         pkt.Request(22, [
14024                 rec(10, 4, StartNumber ),
14025                 rec(14, 1, MediaObjectType ),
14026                 rec(15, 3, Reserved3 ),
14027                 rec(18, 4, ParentObjectNumber ),
14028         ])                
14029         pkt.Reply(28, [
14030                 rec(8, 4, CurrentServerTime ),
14031                 rec(12, 1, VConsoleVersion ),
14032                 rec(13, 1, VConsoleRevision ),
14033                 rec(14, 2, Reserved2 ),
14034                 rec(16, 4, nextStartingNumber ),
14035                 rec(20, 4, ObjectCount, var="x" ),
14036                 rec(24, 4, ObjectID, repeat="x" ),
14037         ])                
14038         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14039         # 2222/7B21, 123/33
14040         pkt = NCP(0x7B21, "Get Volume Segment List", 'stats')
14041         pkt.Request(14, [
14042                 rec(10, 4, VolumeNumberLong ),
14043         ])                
14044         pkt.Reply(32, [
14045                 rec(8, 4, CurrentServerTime ),
14046                 rec(12, 1, VConsoleVersion ),
14047                 rec(13, 1, VConsoleRevision ),
14048                 rec(14, 2, Reserved2 ),
14049                 rec(16, 4, NumOfSegments, var="x" ),
14050                 rec(20, 12, Segments, repeat="x" ),
14051         ])                
14052         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14053         # 2222/7B22, 123/34
14054         pkt = NCP(0x7B22, "Get Volume Information by Level", 'stats')
14055         pkt.Request(15, [
14056                 rec(10, 4, VolumeNumberLong ),
14057                 rec(14, 1, InfoLevelNumber ),
14058         ])                
14059         pkt.Reply(NO_LENGTH_CHECK, [
14060                 rec(8, 4, CurrentServerTime ),
14061                 rec(12, 1, VConsoleVersion ),
14062                 rec(13, 1, VConsoleRevision ),
14063                 rec(14, 2, Reserved2 ),
14064                 rec(16, 1, InfoLevelNumber ),
14065                 rec(17, 3, Reserved3 ),
14066                 srec(VolInfoStructure, req_cond="ncp.info_level_num==0x01"),
14067                 srec(VolInfo2Struct, req_cond="ncp.info_level_num==0x02"),
14068         ])                
14069         pkt.ReqCondSizeVariable()
14070         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14071         # 2222/7B28, 123/40
14072         pkt = NCP(0x7B28, "Active Protocol Stacks", 'stats')
14073         pkt.Request(14, [
14074                 rec(10, 4, StartNumber ),
14075         ])                
14076         pkt.Reply(48, [
14077                 rec(8, 4, CurrentServerTime ),
14078                 rec(12, 1, VConsoleVersion ),
14079                 rec(13, 1, VConsoleRevision ),
14080                 rec(14, 2, Reserved2 ),
14081                 rec(16, 4, MaxNumOfLANS ),
14082                 rec(20, 4, StackCount, var="x" ),
14083                 rec(24, 4, nextStartingNumber ),
14084                 rec(28, 20, StackInfo, repeat="x" ),
14085         ])                
14086         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14087         # 2222/7B29, 123/41
14088         pkt = NCP(0x7B29, "Get Protocol Stack Configuration Information", 'stats')
14089         pkt.Request(14, [
14090                 rec(10, 4, StackNumber ),
14091         ])                
14092         pkt.Reply((37,164), [
14093                 rec(8, 4, CurrentServerTime ),
14094                 rec(12, 1, VConsoleVersion ),
14095                 rec(13, 1, VConsoleRevision ),
14096                 rec(14, 2, Reserved2 ),
14097                 rec(16, 1, ConfigMajorVN ),
14098                 rec(17, 1, ConfigMinorVN ),
14099                 rec(18, 1, StackMajorVN ),
14100                 rec(19, 1, StackMinorVN ),
14101                 rec(20, 16, ShortStkName ),
14102                 rec(36, (1,128), StackFullNameStr ),
14103         ])                
14104         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14105         # 2222/7B2A, 123/42
14106         pkt = NCP(0x7B2A, "Get Protocol Stack Statistics Information", 'stats')
14107         pkt.Request(14, [
14108                 rec(10, 4, StackNumber ),
14109         ])                
14110         pkt.Reply(38, [
14111                 rec(8, 4, CurrentServerTime ),
14112                 rec(12, 1, VConsoleVersion ),
14113                 rec(13, 1, VConsoleRevision ),
14114                 rec(14, 2, Reserved2 ),
14115                 rec(16, 1, StatMajorVersion ),
14116                 rec(17, 1, StatMinorVersion ),
14117                 rec(18, 2, ComCnts ),
14118                 rec(20, 4, CounterMask ),
14119                 rec(24, 4, TotalTxPkts ),
14120                 rec(28, 4, TotalRxPkts ),
14121                 rec(32, 4, IgnoredRxPkts ),
14122                 rec(36, 2, CustomCnts ),
14123         ])                
14124         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14125         # 2222/7B2B, 123/43
14126         pkt = NCP(0x7B2B, "Get Protocol Stack Custom Information", 'stats')
14127         pkt.Request(18, [
14128                 rec(10, 4, StackNumber ),
14129                 rec(14, 4, StartNumber ),
14130         ])                
14131         pkt.Reply(25, [
14132                 rec(8, 4, CurrentServerTime ),
14133                 rec(12, 1, VConsoleVersion ),
14134                 rec(13, 1, VConsoleRevision ),
14135                 rec(14, 2, Reserved2 ),
14136                 rec(16, 4, CustomCount, var="x" ),
14137                 rec(20, 5, CustomCntsInfo, repeat="x" ),
14138         ])                
14139         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14140         # 2222/7B2C, 123/44
14141         pkt = NCP(0x7B2C, "Get Protocol Stack Numbers by Media Number", 'stats')
14142         pkt.Request(14, [
14143                 rec(10, 4, MediaNumber ),
14144         ])                
14145         pkt.Reply(24, [
14146                 rec(8, 4, CurrentServerTime ),
14147                 rec(12, 1, VConsoleVersion ),
14148                 rec(13, 1, VConsoleRevision ),
14149                 rec(14, 2, Reserved2 ),
14150                 rec(16, 4, StackCount, var="x" ),
14151                 rec(20, 4, StackNumber, repeat="x" ),
14152         ])                
14153         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14154         # 2222/7B2D, 123/45
14155         pkt = NCP(0x7B2D, "Get Protocol Stack Numbers by LAN Board Number", 'stats')
14156         pkt.Request(14, [
14157                 rec(10, 4, BoardNumber ),
14158         ])                
14159         pkt.Reply(24, [
14160                 rec(8, 4, CurrentServerTime ),
14161                 rec(12, 1, VConsoleVersion ),
14162                 rec(13, 1, VConsoleRevision ),
14163                 rec(14, 2, Reserved2 ),
14164                 rec(16, 4, StackCount, var="x" ),
14165                 rec(20, 4, StackNumber, repeat="x" ),
14166         ])                
14167         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14168         # 2222/7B2E, 123/46
14169         pkt = NCP(0x7B2E, "Get Media Name by Media Number", 'stats')
14170         pkt.Request(14, [
14171                 rec(10, 4, MediaNumber ),
14172         ])                
14173         pkt.Reply((17,144), [
14174                 rec(8, 4, CurrentServerTime ),
14175                 rec(12, 1, VConsoleVersion ),
14176                 rec(13, 1, VConsoleRevision ),
14177                 rec(14, 2, Reserved2 ),
14178                 rec(16, (1,128), MediaName ),
14179         ])                
14180         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14181         # 2222/7B2F, 123/47
14182         pkt = NCP(0x7B2F, "Get Loaded Media Number", 'stats')
14183         pkt.Request(10)
14184         pkt.Reply(28, [
14185                 rec(8, 4, CurrentServerTime ),
14186                 rec(12, 1, VConsoleVersion ),
14187                 rec(13, 1, VConsoleRevision ),
14188                 rec(14, 2, Reserved2 ),
14189                 rec(16, 4, MaxNumOfMedias ),
14190                 rec(20, 4, MediaListCount, var="x" ),
14191                 rec(24, 4, MediaList, repeat="x" ),
14192         ])                
14193         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14194         # 2222/7B32, 123/50
14195         pkt = NCP(0x7B32, "Get General Router and SAP Information", 'stats')
14196         pkt.Request(10)
14197         pkt.Reply(37, [
14198                 rec(8, 4, CurrentServerTime ),
14199                 rec(12, 1, VConsoleVersion ),
14200                 rec(13, 1, VConsoleRevision ),
14201                 rec(14, 2, Reserved2 ),
14202                 rec(16, 2, RIPSocketNumber ),
14203                 rec(18, 2, Reserved2 ),
14204                 rec(20, 1, RouterDownFlag ),
14205                 rec(21, 3, Reserved3 ),
14206                 rec(24, 1, TrackOnFlag ),
14207                 rec(25, 3, Reserved3 ),
14208                 rec(28, 1, ExtRouterActiveFlag ),
14209                 rec(29, 3, Reserved3 ),
14210                 rec(32, 2, SAPSocketNumber ),
14211                 rec(34, 2, Reserved2 ),
14212                 rec(36, 1, RpyNearestSrvFlag ),
14213         ])                
14214         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14215         # 2222/7B33, 123/51
14216         pkt = NCP(0x7B33, "Get Network Router Information", 'stats')
14217         pkt.Request(14, [
14218                 rec(10, 4, NetworkNumber ),
14219         ])                
14220         pkt.Reply(26, [
14221                 rec(8, 4, CurrentServerTime ),
14222                 rec(12, 1, VConsoleVersion ),
14223                 rec(13, 1, VConsoleRevision ),
14224                 rec(14, 2, Reserved2 ),
14225                 rec(16, 10, KnownRoutes ),
14226         ])                
14227         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14228         # 2222/7B34, 123/52
14229         pkt = NCP(0x7B34, "Get Network Routers Information", 'stats')
14230         pkt.Request(18, [
14231                 rec(10, 4, NetworkNumber),
14232                 rec(14, 4, StartNumber ),
14233         ])                
14234         pkt.Reply(34, [
14235                 rec(8, 4, CurrentServerTime ),
14236                 rec(12, 1, VConsoleVersion ),
14237                 rec(13, 1, VConsoleRevision ),
14238                 rec(14, 2, Reserved2 ),
14239                 rec(16, 4, NumOfEntries, var="x" ),
14240                 rec(20, 14, RoutersInfo, repeat="x" ),
14241         ])                
14242         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14243         # 2222/7B35, 123/53
14244         pkt = NCP(0x7B35, "Get Known Networks Information", 'stats')
14245         pkt.Request(14, [
14246                 rec(10, 4, StartNumber ),
14247         ])                
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, 4, NumOfEntries, var="x" ),
14254                 rec(20, 10, KnownRoutes, repeat="x" ),
14255         ])                
14256         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14257         # 2222/7B36, 123/54
14258         pkt = NCP(0x7B36, "Get Server Information", 'stats')
14259         pkt.Request((15,64), [
14260                 rec(10, 2, ServerType ),
14261                 rec(12, 2, Reserved2 ),
14262                 rec(14, (1,50), ServerNameLen ),
14263         ], info_str=(ServerNameLen, "Get Server Information: %s", ", %s"))
14264         pkt.Reply(30, [
14265                 rec(8, 4, CurrentServerTime ),
14266                 rec(12, 1, VConsoleVersion ),
14267                 rec(13, 1, VConsoleRevision ),
14268                 rec(14, 2, Reserved2 ),
14269                 rec(16, 12, ServerAddress ),
14270                 rec(28, 2, HopsToNet ),
14271         ])                
14272         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14273         # 2222/7B37, 123/55
14274         pkt = NCP(0x7B37, "Get Server Sources Information", 'stats')
14275         pkt.Request((19,68), [
14276                 rec(10, 4, StartNumber ),
14277                 rec(14, 2, ServerType ),
14278                 rec(16, 2, Reserved2 ),
14279                 rec(18, (1,50), ServerNameLen ),
14280         ], info_str=(ServerNameLen, "Get Server Sources Info: %s", ", %s"))                
14281         pkt.Reply(32, [
14282                 rec(8, 4, CurrentServerTime ),
14283                 rec(12, 1, VConsoleVersion ),
14284                 rec(13, 1, VConsoleRevision ),
14285                 rec(14, 2, Reserved2 ),
14286                 rec(16, 4, NumOfEntries, var="x" ),
14287                 rec(20, 12, ServersSrcInfo, repeat="x" ),
14288         ])                
14289         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14290         # 2222/7B38, 123/56
14291         pkt = NCP(0x7B38, "Get Known Servers Information", 'stats')
14292         pkt.Request(16, [
14293                 rec(10, 4, StartNumber ),
14294                 rec(14, 2, ServerType ),
14295         ])                
14296         pkt.Reply(35, [
14297                 rec(8, 4, CurrentServerTime ),
14298                 rec(12, 1, VConsoleVersion ),
14299                 rec(13, 1, VConsoleRevision ),
14300                 rec(14, 2, Reserved2 ),
14301                 rec(16, 4, NumOfEntries, var="x" ),
14302                 rec(20, 15, KnownServStruc, repeat="x" ),
14303         ])                
14304         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14305         # 2222/7B3C, 123/60
14306         pkt = NCP(0x7B3C, "Get Server Set Commands Information", 'stats')
14307         pkt.Request(14, [
14308                 rec(10, 4, StartNumber ),
14309         ])                
14310         pkt.Reply(NO_LENGTH_CHECK, [
14311                 rec(8, 4, CurrentServerTime ),
14312                 rec(12, 1, VConsoleVersion ),
14313                 rec(13, 1, VConsoleRevision ),
14314                 rec(14, 2, Reserved2 ),
14315                 rec(16, 4, TtlNumOfSetCmds ),
14316                 rec(20, 4, nextStartingNumber ),
14317                 rec(24, 1, SetCmdType ),
14318                 rec(25, 3, Reserved3 ),
14319                 rec(28, 1, SetCmdCategory ),
14320                 rec(29, 3, Reserved3 ),
14321                 rec(32, 1, SetCmdFlags ),
14322                 rec(33, 3, Reserved3 ),
14323                 rec(36, 100, SetCmdName ),
14324                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x00"),
14325                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x01"),
14326                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x02"),
14327                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x04"),
14328                 srec(SetCmdValueString, req_cond="ncp.set_cmd_type==0x05"),
14329                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x06"),
14330                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x07"),
14331         ])                
14332         pkt.ReqCondSizeVariable()
14333         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14334         # 2222/7B3D, 123/61
14335         pkt = NCP(0x7B3D, "Get Server Set Categories", 'stats')
14336         pkt.Request(14, [
14337                 rec(10, 4, StartNumber ),
14338         ])                
14339         pkt.Reply(124, [
14340                 rec(8, 4, CurrentServerTime ),
14341                 rec(12, 1, VConsoleVersion ),
14342                 rec(13, 1, VConsoleRevision ),
14343                 rec(14, 2, Reserved2 ),
14344                 rec(16, 4, NumberOfSetCategories ),
14345                 rec(20, 4, nextStartingNumber ),
14346                 rec(24, 100, CategoryName ),
14347         ])                
14348         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14349         # 2222/7B3E, 123/62
14350         pkt = NCP(0x7B3E, "Get Server Set Commands Information By Name", 'stats')
14351         pkt.Request(110, [
14352                 rec(10, 100, SetParmName ),
14353         ], info_str=(SetParmName, "Get Server Set Command Info for: %s", ", %s"))                
14354         pkt.Reply(NO_LENGTH_CHECK, [
14355                 rec(8, 4, CurrentServerTime ),
14356                 rec(12, 1, VConsoleVersion ),
14357                 rec(13, 1, VConsoleRevision ),
14358                 rec(14, 2, Reserved2 ),
14359                 rec(16, 4, TtlNumOfSetCmds ),
14360                 rec(20, 4, nextStartingNumber ),
14361                 rec(24, 1, SetCmdType ),
14362                 rec(25, 3, Reserved3 ),
14363                 rec(28, 1, SetCmdCategory ),
14364                 rec(29, 3, Reserved3 ),
14365                 rec(32, 1, SetCmdFlags ),
14366                 rec(33, 3, Reserved3 ),
14367                 rec(36, 100, SetCmdName ),
14368                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x00"),
14369                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x01"),
14370                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x02"),
14371                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x04"),
14372                 srec(SetCmdValueString, req_cond="ncp.set_cmd_type==0x05"),
14373                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x06"),
14374                 srec(SetCmdValueNum, req_cond="ncp.set_cmd_type==0x07"),
14375         ])                
14376         pkt.ReqCondSizeVariable()
14377         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14378         # 2222/7B46, 123/70
14379         pkt = NCP(0x7B46, "Get Current Compressing File", 'stats')
14380         pkt.Request(14, [
14381                 rec(10, 4, VolumeNumberLong ),
14382         ])                
14383         pkt.Reply(56, [
14384                 rec(8, 4, ParentID ),
14385                 rec(12, 4, DirectoryEntryNumber ),
14386                 rec(16, 4, compressionStage ),
14387                 rec(20, 4, ttlIntermediateBlks ),
14388                 rec(24, 4, ttlCompBlks ),
14389                 rec(28, 4, curIntermediateBlks ),
14390                 rec(32, 4, curCompBlks ),
14391                 rec(36, 4, curInitialBlks ),
14392                 rec(40, 4, fileFlags ),
14393                 rec(44, 4, projectedCompSize ),
14394                 rec(48, 4, originalSize ),
14395                 rec(52, 4, compressVolume ),
14396         ])                
14397         pkt.CompletionCodes([0x0000, 0x7e00, 0x7901, 0xfb06, 0xff00])
14398         # 2222/7B47, 123/71
14399         pkt = NCP(0x7B47, "Get Current DeCompressing File Info List", 'stats')
14400         pkt.Request(14, [
14401                 rec(10, 4, VolumeNumberLong ),
14402         ])                
14403         pkt.Reply(28, [
14404                 rec(8, 4, FileListCount ),
14405                 rec(12, 16, FileInfoStruct ),
14406         ])                
14407         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
14408         # 2222/7B48, 123/72
14409         pkt = NCP(0x7B48, "Get Compression and Decompression Time and Counts", 'stats')
14410         pkt.Request(14, [
14411                 rec(10, 4, VolumeNumberLong ),
14412         ])                
14413         pkt.Reply(64, [
14414                 rec(8, 56, CompDeCompStat ),
14415         ])
14416         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
14417         # 2222/8301, 131/01
14418         pkt = NCP(0x8301, "RPC Load an NLM", 'fileserver')
14419         pkt.Request(285, [
14420                 rec(10, 4, NLMLoadOptions ),
14421                 rec(14, 16, Reserved16 ),
14422                 rec(30, 255, PathAndName ),
14423         ], info_str=(PathAndName, "RPC Load NLM: %s", ", %s"))                
14424         pkt.Reply(12, [
14425                 rec(8, 4, RPCccode ),
14426         ])                
14427         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14428         # 2222/8302, 131/02
14429         pkt = NCP(0x8302, "RPC Unload an NLM", 'fileserver')
14430         pkt.Request(100, [
14431                 rec(10, 20, Reserved20 ),
14432                 rec(30, 70, NLMName ),
14433         ], info_str=(NLMName, "RPC Unload NLM: %s", ", %s"))                
14434         pkt.Reply(12, [
14435                 rec(8, 4, RPCccode ),
14436         ])                
14437         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14438         # 2222/8303, 131/03
14439         pkt = NCP(0x8303, "RPC Mount Volume", 'fileserver')
14440         pkt.Request(100, [
14441                 rec(10, 20, Reserved20 ),
14442                 rec(30, 70, VolumeNameStringz ),
14443         ], info_str=(VolumeNameStringz, "RPC Mount Volume: %s", ", %s"))                
14444         pkt.Reply(32, [
14445                 rec(8, 4, RPCccode),
14446                 rec(12, 16, Reserved16 ),
14447                 rec(28, 4, VolumeNumberLong ),
14448         ])                
14449         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14450         # 2222/8304, 131/04
14451         pkt = NCP(0x8304, "RPC Dismount Volume", 'fileserver')
14452         pkt.Request(100, [
14453                 rec(10, 20, Reserved20 ),
14454                 rec(30, 70, VolumeNameStringz ),
14455         ], info_str=(VolumeNameStringz, "RPC Dismount Volume: %s", ", %s"))                
14456         pkt.Reply(12, [
14457                 rec(8, 4, RPCccode ), 
14458         ])                
14459         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14460         # 2222/8305, 131/05
14461         pkt = NCP(0x8305, "RPC Add Name Space To Volume", 'fileserver')
14462         pkt.Request(100, [
14463                 rec(10, 20, Reserved20 ),
14464                 rec(30, 70, AddNameSpaceAndVol ),
14465         ], info_str=(AddNameSpaceAndVol, "RPC Add Name Space to Volume: %s", ", %s"))                
14466         pkt.Reply(12, [
14467                 rec(8, 4, RPCccode ),
14468         ])                
14469         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14470         # 2222/8306, 131/06
14471         pkt = NCP(0x8306, "RPC Set Command Value", 'fileserver')
14472         pkt.Request(100, [
14473                 rec(10, 1, SetCmdType ),
14474                 rec(11, 3, Reserved3 ),
14475                 rec(14, 4, SetCmdValueNum ),
14476                 rec(18, 12, Reserved12 ),
14477                 rec(30, 70, SetCmdName ),
14478         ], info_str=(SetCmdName, "RPC Set Command Value: %s", ", %s"))                
14479         pkt.Reply(12, [
14480                 rec(8, 4, RPCccode ),
14481         ])                
14482         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14483         # 2222/8307, 131/07
14484         pkt = NCP(0x8307, "RPC Execute NCF File", 'fileserver')
14485         pkt.Request(285, [
14486                 rec(10, 20, Reserved20 ),
14487                 rec(30, 255, PathAndName ),
14488         ], info_str=(PathAndName, "RPC Execute NCF File: %s", ", %s"))                
14489         pkt.Reply(12, [
14490                 rec(8, 4, RPCccode ),
14491         ])                
14492         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14493 if __name__ == '__main__':
14494 #       import profile
14495 #       filename = "ncp.pstats"
14496 #       profile.run("main()", filename)
14497 #
14498 #       import pstats
14499 #       sys.stdout = msg
14500 #       p = pstats.Stats(filename)
14501 #
14502 #       print "Stats sorted by cumulative time"
14503 #       p.strip_dirs().sort_stats('cumulative').print_stats()
14504 #
14505 #       print "Function callees"
14506 #       p.print_callees()
14507         main()