#!/usr/bin/env python
#encoding=utf-8
#little=0 # S Little endianem, nebo bez něj? 0 nebo 1
pocetrozdani=32 #30000 # Nyní dělá celý soubor bez ptaní.

import sys
import binascii

try:
 filenametemp=sys.argv[1]
 f=open(filenametemp,"rb")
 radekt=f.read()
except:
 print """Pozdravy od Velkého konvertora!
Použití je: python konvertor.py <vstupní soubor>
Je potřeba zadat název souboru, například:
python konvertor.py RPXX.ZRD
RPXX.ZRD je uložen ve stejném adresáři jako konvertor.py.
Je to rozpakovaný soubor z http://www.rpbridge.net/z/rpxx.zip.
Ukončuji program..."""
 exit()

#filenametemp = 'RP01.ZRD'
print """Pozdravy od Velkého konvertora!
Konvertuji, nad Pavlickovými soubory to zabere několik minut..."""

c=-1
cc=0
zlomy=("A","K","Q","J","T","9","8","7","6","5","4","3","2")
konecradku="\x0D\x0A"

u=open("1testuj.txt","wb")
v=open("2overen.txt","wb")

for cyk in xrange(0,len(radekt),23):
 radek=radekt[cyk:cyk+23]
#while 1:
 cc+=1
 # Vypiš jen několik řádků...
 if cc>pocetrozdani and filenametemp=="RPXX.ZRD": exit() # Kolik rozdání vypsat... u RPXX souboru, dá se u velkých souborů zakomentovat.
 mobsah=""
 hexik=""
 #radek=f.read(23) # načti 23 bajtů, jedno rozdání
 if not radek: f.close(); exit() # není co už psát, skonči konverzi
 #! print "Rozdání",cc
 
 komplex=binascii.hexlify(radek) # hexík bajtů, bajt se rozpadne na dva znaky 0-f
 #print komplex

 """
 #if little==0:
   # Bez Little endianu...
 for pocet in range(0,13):
  usek=komplex[pocet*2:pocet*2+2]
  binarka=str(bin(int(usek,16))).replace("0b","").zfill(2*4)
  #print usek
  #print binarka
  for ctyri in range(4,0,-1):
   mobsah+=binarka[ctyri*2-2:ctyri*2]
 for pocet in range(0,20,2):
  hexik+=komplex[pocet+27]+komplex[pocet+26]
 #print hexik
 mobsah+=str(bin(int(hexik,16))).replace("0b","").zfill(20*4)
 """

 #else: # S Little endianem...
 radek="" # Little endian, první bajt dej na poslední pozici
 for znak in range(0,46,2):
  radek=komplex[znak:znak+2]+radek
 #print "radek  ",radek
 #print radek
 binarka=str(bin(int(radek,16))).replace("0b","").zfill(23*4*2)
 #print "binarka",binarka
 amojkovo=binarka[80:]
 #print "amojkovo", amojkovo, len(amojkovo)
 for znak in range(len(amojkovo),-1,-2):
   mobsah+=amojkovo[znak:znak+2]
 #print "mobsah", mobsah, len(mobsah)
 bmojkovo=binarka[0:80]
 #print "bmojkovo", bmojkovo, len(bmojkovo)
 for znak in range(len(amojkovo),-1,-4):
   mobsah+=bmojkovo[znak:znak+4]
 #print "mobsah", mobsah, len(mobsah)
   
 hraci=[[[] for _ in xrange(4)] for _ in xrange(4)] # čtyři barvy pro čtyři hráče
 karty=[]
 for mujbit in range(0,52):
  # Hráč:
  karta=mobsah[mujbit*2:mujbit*2+2] 
  # Následuje barva:
  if mujbit<13:   level=0 # "S"
  elif mujbit<26: level=1 # "H"
  elif mujbit<39: level=2 # "D"
  else:           level=3 # "C"
  zlom=mujbit % 13 # Zbytek po dělení 13
  vloz=zlomy[zlom]
  hraci[int(karta,2)][level].append(vloz) # Zařaď kartu hrači a do barvy
 # Prostý výpis karet hráčů pod sebou.
 #for jedenhrac in hraci:
  #! print jedenhrac

 partie=[[] for _ in range(5)]
 c=0
 level=0
 for mujbit in range(104,len(mobsah),4):
  c+=1
  partie[level].append(int(mobsah[mujbit:mujbit+4],2))
  if c==4: c=0; level+=1
 # Prostý výpis zdvihů, pořadí v entici: nt, s, h, d a c.
 # Pořadí uvnitř: Západ, Sever, Východ, Jih
 #! print partie
 """for level1 in partie:
  for level2 in level1:
   print level2,
  print"""
 #! print

 # Cha, cha, ještě výpis, zkusím formát Dealu...
 # Vzorek: QJ.QJT97652.7.KQ|K7.4.AKQT954.843|986532.K3.J63.T6|AT4.A8.82.AJ9752|4 8 1 1 1|8 5 12 12 12|4 8 1 1 1|8 5 12 12 12
 # Sever|Východ|Jih|Západ, barvy jsou v pořadí: piky.srdce.kára.trefy
 # DTH je v pořadí: Sever|Východ|Jih|Západ
 # vnitřní dělení: piky|srdce|kára|trefy|bez

 # Karty
 #test=0 # 0 jen karty, 1 i DD zdvihy
 for test in 0,1:
   if test==1: oddelovac="."
   else: oddelovac=" "
   parsuj="|"
   s=""
   
   for hrac in 1,2,3,0: # pořadí hráčů n-e-s-w
    #print hraci[hrac]
    for barva in range(0,4): # pořadí barev s-h-d-c
     karty=hraci[hrac][barva] # jedna barva jednoho hráče
     for karta in karty:
      s+=karta
     if barva<3: s+=oddelovac
     else: 
      if hrac<>0: s+=parsuj
   # Přechod k DD
   if test==1:
    s+=parsuj
    #print partie
    for ddhrac in 1,2,3,0: # hráč
     for trumf in 1,2,3,4,0:
      s+=str(partie[trumf][ddhrac])
      if trumf<>0: s+=" "
     if ddhrac<>0: s+=parsuj
   if test==0: u.write(s); u.write(konecradku)
   else: v.write(s); v.write(konecradku)

# Uzávěrka a čištění
f.close()
u.close()
v.close()


