@@ -118,6 +118,9 @@ def size(self):
118118    packer_u4le  =  struct .Struct ('<I' )
119119    packer_u8le  =  struct .Struct ('<Q' )
120120
121+     # ------------------------------------------------------------------------ 
122+     # Reading 
123+     # ------------------------------------------------------------------------ 
121124    # ------------------------------------------------------------------------ 
122125    # Signed 
123126    # ------------------------------------------------------------------------ 
@@ -213,6 +216,95 @@ def read_f4le(self):
213216    def  read_f8le (self ):
214217        return  KaitaiStream .packer_f8le .unpack (self .read_bytes (8 ))[0 ]
215218
219+     # ------------------------------------------------------------------------ 
220+     # Writing 
221+     # ------------------------------------------------------------------------ 
222+     # ------------------------------------------------------------------------ 
223+     # Signed 
224+     # ------------------------------------------------------------------------ 
225+ 
226+     def  write_s1 (self , data ):
227+         return  self .write_bytes (KaitaiStream .packer_s1 .pack (data ))
228+ 
229+     # ........................................................................ 
230+     # Big-endian 
231+     # ........................................................................ 
232+ 
233+     def  write_s2be (self , data ):
234+         return  self .write_bytes (KaitaiStream .packer_s2be .pack (data ))
235+ 
236+     def  write_s4be (self , data ):
237+         return  self .write_bytes (KaitaiStream .packer_s4be .pack (data ))
238+ 
239+     def  write_s8be (self , data ):
240+         return  self .write_bytes (KaitaiStream .packer_s8be .pack (data ))
241+ 
242+     # ........................................................................ 
243+     # Little-endian 
244+     # ........................................................................ 
245+ 
246+     def  write_s2le (self , data ):
247+         return  self .write_bytes (KaitaiStream .packer_s2le .pack (data ))
248+ 
249+     def  write_s4le (self , data ):
250+         return  self .write_bytes (KaitaiStream .packer_s4le .pack (data ))
251+ 
252+     def  write_s8le (self , data ):
253+         return  self .write_bytes (KaitaiStream .packer_s8le .pack (data ))
254+ 
255+     # ------------------------------------------------------------------------ 
256+     # Unsigned 
257+     # ------------------------------------------------------------------------ 
258+ 
259+     def  write_u1 (self , data ):
260+         return  self .write_bytes (KaitaiStream .packer_u1 .pack (data ))
261+ 
262+     # ........................................................................ 
263+     # Big-endian 
264+     # ........................................................................ 
265+ 
266+     def  write_u2be (self , data ):
267+         return  self .write_bytes (KaitaiStream .packer_u2be .pack (data ))
268+ 
269+     def  write_u4be (self , data ):
270+         return  self .write_bytes (KaitaiStream .packer_u4be .pack (data ))
271+ 
272+     def  write_u8be (self , data ):
273+         return  self .write_bytes (KaitaiStream .packer_u8be .pack (data ))
274+ 
275+     # ........................................................................ 
276+     # Little-endian 
277+     # ........................................................................ 
278+ 
279+     def  write_u2le (self , data ):
280+         return  self .write_bytes (KaitaiStream .packer_u2le .pack (data ))
281+ 
282+     def  write_u4le (self , data ):
283+         return  self .write_bytes (KaitaiStream .packer_u4le .pack (data ))
284+ 
285+     def  write_u8le (self , data ):
286+         return  self .write_bytes (KaitaiStream .packer_u8le .pack (data ))
287+ 
288+     # ........................................................................ 
289+     # Big-endian 
290+     # ........................................................................ 
291+ 
292+     def  write_f4be (self , data ):
293+         return  self .write_bytes (KaitaiStream .packer_f4be .pack (data ))
294+ 
295+     def  write_f8be (self , data ):
296+         return  self .write_bytes (KaitaiStream .packer_f8be .pack (data ))
297+ 
298+     # ........................................................................ 
299+     # Little-endian 
300+     # ........................................................................ 
301+ 
302+     def  write_f4le (self , data ):
303+         return  self .write_bytes (KaitaiStream .packer_f4le .pack (data ))
304+ 
305+     def  write_f8le (self , data ):
306+         return  self .write_bytes (KaitaiStream .packer_f8le .pack (data ))
307+ 
216308    # ======================================================================== 
217309    # Unaligned bit values 
218310    # ======================================================================== 
@@ -293,6 +385,45 @@ def read_bytes(self, n):
293385            )
294386        return  r 
295387
388+     def  write_bytes (self , data ):
389+         if  data  is  None :
390+             return 
391+         nb  =  len (data )
392+         if  nb  >  0  and  self ._io .write (data ) !=  nb :
393+             raise  ValidationFailedError (
394+                 "not all of %d bytes written"  % 
395+                 (nb ,), self ._io , __file__ 
396+             )
397+ 
398+     def  write_terminator (self , term_byte ):
399+         self ._io .write (KaitaiStream .packer_u1 .pack (term_byte ))
400+ 
401+     def  write_padding (self , actual_size , size , pad_byte ):
402+         pad  =  size  -  actual_size 
403+         if  pad  >  0 :
404+             if  pad_byte  is  not   None :
405+                 self ._io .write (KaitaiStream .packer_u1 .pack (pad_byte ) *  pad )
406+             else :
407+                 raise  KaitaiStructError ("no padding filler provided" , __file__ )
408+ 
409+     def  write_bytes_term (self , data , size , term_byte , pad_byte ):
410+         if  data  is  None  or  not  size :
411+             return 
412+         nb  =  len (data )
413+         if  nb  <  size :
414+             if  nb  >  0  and  self ._io .write (data ) !=  nb :
415+                 raise  ValidationFailedError (
416+                     "not all of %d bytes written"  % 
417+                     (nb ,), self ._io , __file__ 
418+                 )
419+         else :
420+             raise  ValidationFailedError (
421+                 "Writing %d bytes, but %d bytes (including terminator) were given"  % 
422+                 (size , nb  +  1 ), self ._io , __file__ 
423+             )
424+         self .write_terminator (term_byte )
425+         self .write_padding (nb , size  -  1 , pad_byte )
426+ 
296427    def  read_bytes_full (self ):
297428        return  self ._io .read ()
298429
@@ -302,7 +433,7 @@ def read_bytes_term(self, term, include_term, consume_term, eos_error):
302433            c  =  self ._io .read (1 )
303434            if  c  ==  b'' :
304435                if  eos_error :
305-                     raise  Exception (
436+                     raise  EOFError (
306437                        "end of stream reached, but no terminator %d found"  % 
307438                        (term ,)
308439                    )
@@ -320,9 +451,9 @@ def read_bytes_term(self, term, include_term, consume_term, eos_error):
320451    def  ensure_fixed_contents (self , expected ):
321452        actual  =  self ._io .read (len (expected ))
322453        if  actual  !=  expected :
323-             raise  Exception (
454+             raise  ValidationFailedError (
324455                "unexpected fixed contents: got %r, was waiting for %r"  % 
325-                 (actual , expected )
456+                 (actual , expected ),  self . _io ,  __file__ 
326457            )
327458        return  actual 
328459
@@ -375,9 +506,9 @@ def process_xor_many(data, key):
375506    @staticmethod  
376507    def  process_rotate_left (data , amount , group_size ):
377508        if  group_size  !=  1 :
378-             raise  Exception (
509+             raise  KaitaiStructError (
379510                "unable to rotate group of %d bytes yet"  % 
380-                 (group_size ,)
511+                 (group_size ,),  __file__ 
381512            )
382513
383514        mask  =  group_size  *  8  -  1 
0 commit comments