TC Player 1.0.7

Az elmúlt pár hétben igen inaktív voltam, szokásosan munka problémák. Viszont ha volt egy pici szabad időm, akkor a TC Player-t foltozgattam és örömmel jelenthetem, hogy már az 1.07-es verziónál tartunk.

Egy régi szoftverfejlesztős mondás szerint minden érdekes program tartalmaz egy ciklust, egy elágazást és egy rejtett hibát. A probléma ott kezdődik, hogy a C++ még mindig egy szép nyelv, érdekes problémákkal. Párkapcsolati hasonlattal élve a C++ tipikusan az a pár, aki mindent visz egy esetleges veszekedés esetén. A probléma csak annyi, hogy kis veszekedés nincs, ha borul a bili, akkor nagyon.

A probléma jelen esetben abban keresendő, hogy a C++ még mindig csak öszvér módon rendelkezik szövegkezeléssel. Gyakorlatilag van, csak éppen az a baj, hogy nem egységes, mert összességében négyféleképpen lehet egy szöveget a memóriában letárolni:

  • C stílus szerint karakter tömbjeként, ami valójában csak egy mutató az első karakterre és a szöveg végét egy \0 karakter jelzi.
  • C++ stílus szerint String osztályban, ami picit kulturáltabb, szofisztikáltabb.
  • C stílus szerint, viszont széles karakterek (16 bit UTF) tömbjeként. Megvalósításban hasonló a sima karakter tömbös megoldáshoz.
  • C++ stílus szerint WString osztályban, ami ugyanaz mint a String, kivéve, hogy ez UTF16 karakterekből áll.

Ezzel nem is lenne probléma, mert 2016-ban mindenki használhatna UTF készletet. A probléma az, hogy anno, réges rég, mikor még a Windows verziószáma 95 és 4.0 volt, akkor még nem igen volt UTF. Ezért a rendszerfüggvények többsége is sima ASCII alapon volt megvalósítva kódlapokkal. Viszont azóta eltelt pár év és az XP újdonsága programozói szempontból az volt, hogy a rendszerfügevényekből lettek UTF kompatibilis változatok is. Viszont a régi kódot nem lehetett, vagy nem szabadott kigyomlálni, mert borult volna a kompatibilitás.

Ezért a mai napig léteznek rendszerfüggvények UTF és sima ASCII változatban is. A modern fordítók vannak annyira intelligensek egyébként, hogy ha új projektet hozunk létre, akkor a régi rendszerhívásokat átirányítják UTF kompatibilisre, mert azért csak haladni kell a korral.

Viszont ha az ember egy 2001-ben megalkotott plugin API rendszert céloz meg egy olyan szoftver esetén, ami még a mai napig erős korlátozásokkal ugyan, de támogatja a Windows 3.1-et is, akkor van szívás bőven.

A fő probléma az, hogy a Total Commander plugin rendszere egyszerre létezik UTF és ASCII kompatibilis változatban is. Nem vagyok túl nagy C++ fejlesztő, ebből adódóan sikerült alkotnom egy szép hibát a plugin betöltőben, ami csak a 32 bites Total Commander változatokon jött elő. 64 biten egyszerű az élet, mert ott valamiért csak az UTF változat meglétét ellenőrizte a program, viszont a 32 bites változat esetén kell neki az ASCII is.

Mondhatni triviális a megoldás: Konvertáljuk az ASCII-t UTF-re és hívjuk az UTF változatot. A fejlesztői ajánlás is egyébként ez, már ha megtudja nyitni az ember a millió éve nem piszkált, még Windows 3.1 súgó formátumban lévő leírást.

Viszont a feladat nem éppen triviális, mert ugyebár C/C++ nyelvről beszélünk. Szóval röviden összefoglalva ezzel a “pici” apróságnak a javításával és a szakirodalom kitartó olvasásával telt az elmúlt pár hetem munka mellett.

De nem csak ez került bele az új verzióba. Újdonságok a kezdeti kiadás óta:

  • MIDI fájlok lejátszása, konfigurálható SoundFont segítségével
  • Oldschool tracker formátumok lejátszása
  • Plusszban APE, MPC, MP+, MPP, SPX, TTA, DSF, OPUS formátumok támogatása.
  • Multimédia gombok támogatása
  • Értesítések szám váltás esetén (kikapcsolható, alapértelmezetten nincs bekapcsolva)
  • Picit szebb megjelenés, mivel a háttérszínt is befolyásolja a Windows téma színe
  • Számos beállítási lehetőség felhasználói visszajelzések alapján

És a kiadás nagy újdonsága: Total Commander tömörítő plugin, ami segítségével komplett fájlrendszer egy kattintásra betölthető a lejátszó Playlist ablakába. 🙂

Sajna a probléma az, hogy ehhez automatikus installer nem készíthető, így manuálisan kell beállítani, viszont ehhez segítségképpen elindult a projekt weboldala. Egyenlőre angol nyelven, de akit érdekel a dolog és esetleg van szabadideje a magyar változat karbantartására, azt nagyon megköszönném 🙂

A projekt weboldala: https://webmaster442.github.io/TCPlayer/