Tagesarchive: 30.3.2013

QR-Code

Vor längerer Zeit ist mir mal ein C64-Programm zum Erzeugen von QR-Codes über den Weg gelaufen [CSDb]. Im Zuge der One Liners Competition wollte ich dieses Thema aufgreifen. Natürlich ist es nicht möglich einen QR-Code-Generator in einem Einzeiler zu programmieren, aber das Wiedergeben von QR-Codes schon. Eine QR „Grafik“ kann man sich im Internet generieren lassen (siehe Linkliste). Sie benötigt im Format 24 x 24 Pixel 576 Bits also mindestens 72 Bytes. Innerhalb von BASIC kodiert man sowas am einfachstem in einer Zeichenkette (String), da ein DATA-Befehl und Zahlenwerte zuviel Speicherplatz benötigen. Allerdings führt die Verwendung aller 8 Bits eines String-Zeichens zu nicht-druckbaren Zeichen einschließlich Null-Bytes (die in BASIC-Programmen höchst unpraktisch sind). Daher entschloss ich mich einen 6-Bit-Code auf Basis „normaler“ ASCII-Zeichen zu erstellen, was zu einem String von 96 Zeichen (4 für jede der 24 Zeilen) führte.

Zu meiner Schande muss ich gestehen, dass ich ein Tabellenkalkulationsprogramm verwendet habe, um die Originalbitmap des QR-Codes in den 6-Bit-codierten String umzurechnen. Da ich den Einzeiler letztlich aber sowieso mit einem Editor und PETCAT auf dem PC erstellt habe, war das kein Nachteil, konnte ich doch den „Bitmap String“ mit Copy & Paste einfügen.

QR-Code
Der QR-Code zeigt die URL meines Blogs

1 a$="_ybk_pkorawixj]wkkb]whtb]pjqra_zuk_@@ep@_owmjduaabx]mtkvuxeq_[h^w^bvajros^[
teftiqzu_t@bph\_[lj_phixywjx__wkwjwwjcqepjf]y_zua_":poke53280,1:poke53281,1:
print"{blk}{swuc}{clr}";
2 fori=0to24:printtab(14):forj=1to5:a=asc(mid$(a$,i*5+j,1)):b=16:fork=1to5:print
mid$("{rvon} {rvof}",2+((aandb)>0));:b=b/2:next:next:printleft$(chr$(13),1+(i=24));:
next:print"{home}blog.c128.net"

Der Quellcode des Zweizeilers für C128/C64 im PETCAT-Format

Links:
Basiswissen QR-Code: qrcode.wilkohartz.de
QR-Code Generatoren: qrcode-monkey.de qrcode-generator.de free-qr-code.net
Pixel-Art mit QR-Codes: qrpixel.com

Veröffentlicht unter C128, C64, Compo | Schreib einen Kommentar