Uit Hack42
Ga naar: navigatie, zoeken
Regel 1: Regel 1:
 
{{Project
 
{{Project
|Naam=Univerele punchtape vertaler
+
|Naam=Universele punchtape vertaler
 
|Eigenaar=MacSimski, WitchDoc,
 
|Eigenaar=MacSimski, WitchDoc,
 
|Status=Afgerond
 
|Status=Afgerond

Versie van 20 okt 2015 13:07

Project: Universele punchtape vertaler
Schroefje24.png
Schroefje24.png
Schroefje24.png
Schroefje24.png
Universal punchtaper Picture.jpg

Universele punchtape vertaler

Naam Universele punchtape vertaler
Door MacSimski, WitchDoc
Status Afgerond
Madskillz python, ponsband codes, computerhistorie
Doel / Omschrijving
universele punchcode vertaler
Alle Projecten - Project Toevoegen
File:Universal punchtaper_Picture.jpg noez

Algemeen

ITA2, ASCII, BULL,Flexowriter,Typesetter. allemaal codes voor het aansturen van apparaten in de space. Van 5 tot 8 bits, controlcodes. Zou het niet handig zijn om een babelfish te hebben om deze machines allemaal vanuit een softwaredingus aan te sturen. Vanuit de computer naar apparaat en terug. Voor ITA2 en Typesetter is er al iets geschreven, maar dit combineren in een (uitbreidbare) stuk software/hardware combi is misschien handig.

Een van de dingen die door de software afgehandeld moet worden is het omschakelen tussen hoofd en kleine letters of getallen. in ascii zijn dat aparte karakters, is andere codes wordt daar een of twee aparte omschakelkarakters voor gebruikt die apart verzonden worden waarvan de staat onthouden moet worden voor de karakters die er op volgen.

Daarnaast is het nodig een vertaalslag te maken van karakters die niet in ascii of unicode voorkomen. hoe die te coderen in het bronbestand voor de vertaling.

Mocht de implementatie op een microcontroller gebeuren, is het ook handig om alle vertaalslagen in progmem in de controller te hebben, zodat met een paar gpio pinnetjes aan te geven is welke vertaling gewenst is. Maar ik vind het ook wel mooi om dat met controlcodes te doen, zodat ook tijdens gebruik omgeschakeld kan worden. Om het niet heel erg ingewikkeld te maken gaan vertalingen altijd van of naar ascii.

Dit project dient ook als een vehikkel om eens met python aan de slag te gaan, Aangezien ik de taal niet ken.

Structuur

Het project staat op Github.

Voor het opzetten van een vertaling naar een nieuw apparaat worden libreoffice calc .odf bestanden gebruikt. Met select_rows_from_odf.py wordt uit een geexporteerde .csv de nuttige kolommen gehaald voor gebruik in converter1_x.py. Die stuurt direct de seriele poort aan waar de puncher aanhangt.

Het script wordt aangeroepen met

  • $ python converter.py -i bronbestand.txt -f xxx -p <serialport>

waar xxx de vertaalslag is:

  • fb=flexowriter Bull
  • fp=flexo president
  • tsa=typesetter 6bit version a
  • tsb=typesetter version b
  • tx=ita2 telex
  • pt=geen conversie, alleen toegevoegde header en footer
  • ba=banner (gaatjes vormen leesbare letters)

sowieso wordt de filenaam als leesbare banner vooraan de tape gepunched om archivering makkelijker te maken.

Voorstel voor control sequences

Een control sequence voor bijvoorbeeld omschakelen van vertaalmodus en non-ascii karakters kan hetzelfde van opbouw zijn, Herkenbaar aan twee opeenvolgende karakters die in normaal gebruik niet veel achter elkaar voorkomen, zoals:

  • <|
  • <-+
  • @@

Direct gevolgd door twee letters voor de gewenste functie op karakter. dat een non-ascii niet op alle doelapparaten voorkomt maakt het wel onoverzichtelijk, maar met een simpele tabel op de wiki is het altijd snel op te zoeken.

Dus bijvoorbeeld @@tf is target flexowriter, @@ts target typesetter, @@ti telex.

Een ander probleem is: hoe heten die rare non-ascii tekens: vierkantje met kruis, afgeplatte x. Daarvoor zouden we UTF-8 kunnen nemen, aleen zijn die 4 byte, wat dan door de software aan de ascii kant weer als garble tevoorschijn kan komen, en een lookuptable ook niet echt fraai maakt. andere oplossing is de escape karakters van een naar meerdere karakters en terug vertalen in python is niet echt een issue.

for the flexo SPD with bull coding:

strange char equivalent
stop read @@str
switch read @@swr
lowercase @@lcs
uppercase @@ucs
punch off @@pof
punch on @@pon

Dit maakt de brontekst niet echt direct porteerbaar naar andere systemen, maar met zoek en vervang is een hoop te doen.

Een uitdaging is het gebruik van accenten. sommige accenten of speciale tekens op de flexo bijvoorbeeld verplaatsen de wagen niet. Dat zou ook andersom moeten werken. komt er van een punchtape een accent teken terug, moet die dan samengevoegd worden met het opvolgende teken tot een extended ascii of juist niet en sequencieel in het doelbestand worden gezet?

Uitvoering

voor een uitleg van de code is het handiger in de header van converter1_0.py te kijken.

files in de git repository:

file wat
5x5font.jpeg voorbeeld voor het headerfont
ASCII1.GIF ascii lookuptabel
ASCIIcode.gif punchcode
converter1_0.py feitelijk script
flexowrcode.gif code van een flexo (blijkt hetzelfde als de president te zijn
friden_pres.csv export van de ods
friden_pres.ods spreadsheet met lookuptable voor de Flexowriter President
friden_spd.csv export van de ods
friden_spd.ods spreadsheet met lookuptable voor de Flexowriter met Bull code
ita2.csv export van de ods
ita2.ods spreadsheet met lookuptable voor een 5bits telex
Neue schrift.png voorbeeld van een headerfont
plaintext.csv export van de ods
plaintext.ods lookup voor headerfont
select_rows_from_odf.py verouderd. wordt niet meer gebruikt
testfile.txt generieke tekst ter convertering
tts-etaino-2048x2969-w.jpg teletypesetter code (6bit) (nog niet geimplementeerd)

Tada!