Snippet – Farben im Terminal

Ich hab mich heute mal wieder mit der Farbausgabe im Terminal mittels Escapesequenzen beschäftigt und möchte das dabei entstandene Programm anderen zur Verfügung stellen.

Achtung
Nicht alle Terminals unterstützen die Farbausgabe, daher überprüft man eigentlich noch ob die Funktionalität vorhanden ist. Dies habe ich hierfür jedoch Ausgelassen. Mit dem GNOME-Terminal sollte es jedoch funktionieren.

Die Escapesequenz

\033[38;5;Xm
Element Funktion
\033 Markiert den Start einer Escapesequenz. Da \e nicht bei allen Terminals funktioniert wird \033 verwendet.
[38 Signalisiert das die Vordergrundfarbe geändert werden soll. (Erweiterte Vordergrundfarbe; da 30-37 die 16-Bit Standardfarben sind)
;5 Das Format der nachfolgenden Farbinformation. ;5 bedeutet hierbei das es sich um ein 8-Bit Format handelt (~3-Bit pro Farbe).
;Xm Das 8-Bit Argument X enthält die Farbinformation.

Der Code

/* Copyright 2016 Marc Volker Dickmann */
/* Prints some nice colors! */
#include <stdio.h>

int main (int argc, char *argv[])
{
	int r, g, b, i;
	
	r = g = b = i = 0;
	do
	{
		i++;
		b++;
		
		if (b > 7)
		{
			g++;
			b = 0;
		}
		
		if (g > 7)
		{
			r++;
			g = 0;
		}
		
		printf ("\033[38;5;%im#\033[0m%c", (r & 0x3) << 6 | (g & 0x7) << 3 | (b & 0x7), (i % 16 == 0 ? '\n' : ' '));
	} while (r <= 3);
	
	printf ("\n");
	return 0;
}

KurzeTipps – Fensterverteilung über die Maus aktivieren

Wer unter dem Unity Desktop die Funktion Fensterverteilung (SUPER + W) einmal ausprobiert hat, findet hier einen kleinen Tipp. Um nicht immer über das Tastaturkürzel die Funktion aufzurufen, sondern ähnlich wie bei Gnome die obere linke Ecke zu nutzen, kann der folgenden Befehl im Terminal ausgeführt werden.

gsettings set org.compiz.scale:/org/compiz/profiles/unity/plugins/scale/ initiate-edge '[EDGE]'

Für [EDGE] können folgende Werte eingesetzt werden (Groß- und Kleinschreibung beachten):

Wert Beschreibung
Top Obere Seite
TopLeft Obere linke Ecke
TopRight Obere rechte Ecke
Bottom Untere Seite
BottomLeft Untere linke Ecke
BottomRight Untere rechte Ecke
Left Linke Seite
Right Rechte Seite

KurzeTipps – Kalender Widget per Skript

Ich habe mich heute per Zufall mit dem Thema Widgets beschäftigt. Da ich jedoch nicht noch irgendwelche Software wie beispielsweise Conky dafür installieren möchte, habe ich mir ein kleines Skript geschrieben. Das Skript ist recht simple aufgebaut und besteht im Grunde nur aus dem Ersetzen des Icon-Pfades. Ich habe im folgenden die Vorgehensweise anhand eines Kalenders beschrieben.

Verwendung

Als erstes erstellt man für den Kalender die entsprechenden Zahlen für Tag und Monat als Bild. (Hier ist ein Archiv in der sowohl das Skript als auch die Bilder enthalten sind.)

Nun ruft man das Skript auf und es werden zwei neue Icons auf dem Desktop erstellt. Nachdem man im Kontextmenü (Rechte Maustaste) die Eigenschaften („Properties„) des Icons aufgerufen hat, setzt man in dem Reiter Berechtigungen („Permissions„) die Erlaubnis zum Ausführen der Datei. Das Icon sollte nach dem Schließen zu sehen sein.

Nachdem man für beide Icons (Tag, Monat) die Berechtigung gesetzt hat, kann man das Skript zu den Autostart-Programmen hinzufügen. Von nun an ist nach jedem Einloggen das aktuelle Datum auf dem Desktop zu sehen.

Tipp: Wem die Icons zu klein sind, der kann im Kontextmenü die Größe der Icons verändern.

Gegebenenfalls bitte die Pfade an die eigenen anpassen.

#!/bin/bash
# Copyright 2015 Marc Volker Dickmann
# A simple script to use icons as widgets

# CONFIG
# This script.
scriptfile="Bilder/calendar_flat_two/calendar_flat_two.sh"

# The icon for the day
iconfile_day="Schreibtisch/calendar_day.desktop"

# The icon for the month
iconfile_month="Schreibtisch/calendar_month.desktop"

# Path to the image files
imgfiles="Bilder/calendar_flat_two/png"

# For using other file formats
imgfileending="png"

# The dateformat for the day file
dateformat_day="+%d"

# The dateformat for the month
dateformat_month="+%m"

# DAY
currentday=$(date "$dateformat_day")

echo "#!/usr/bin/env xdg-open

[Desktop Entry]
Name=.
TryExec=$HOME/$scriptfile
Exec=$HOME/$scriptfile
Icon=$HOME/$imgfiles/$currentday-white.$imgfileending
Type=Application
StartupNotify=true
OnlyShowIn=GNOME;Unity;" > "$HOME/$iconfile_day"

# MONTH
currentmonth=$(date "$dateformat_month")

echo "#!/usr/bin/env xdg-open

[Desktop Entry]
Name=.
TryExec=$HOME/$scriptfile
Exec=$HOME/$scriptfile
Icon=$HOME/$imgfiles/$currentmonth-orange.$imgfileending
Type=Application
StartupNotify=true
OnlyShowIn=GNOME;Unity;" > "$HOME/$iconfile_month"

KurzeTipps – Icons automatisch positionieren

Ich habe mich heute per Zufall mit dem Thema Icons automatisch anordnen beschäftigt und dabei ist ein kleines Skript entstanden. Das Skript ist recht simple gehalten und positioniert automatisch alle Icons nebeneinander, ähnlich eines Docks. Für den Fall das jemand diese Funktion noch gebrauchen kann, stelle ich es hier jedem zur Verfügung.

Achtung: Bitte statt USERNAME den eigenen Nutzernamen eintragen und die anderen Werte anpassen.

#!/bin/bash
# Copyright 2015 Marc Volker Dickmann
# Positions the icons like a dock

width="1920"
height="1080"
icons="0"
iconswidth="128"
iconsheight="128"
iconsheightadd="64"
desktoppath="/home/USERNAME/Schreibtisch"

for iconfile in ./*.desktop ; do 
	icons=$(($icons+1))
done

width=$((($width/2)+($iconswidth * ($icons/2))))

for iconfile in ./*.desktop ; do 
	iconname=$(basename "$iconfile")
	posx=$(($width - ($iconswidth *$icons)))
	posy=$((($height-$iconsheightadd) - $iconsheight))
	gvfs-set-attribute "$desktoppath/$iconname" metadata::nautilus-icon-position "$posx,$posy"
	icons=$(($icons-1))
done

Bask – Aufgabenverwaltung im Terminal

Ich arbeite seit ca. 2 Wochen an einer Aufgabenverwaltung, die man über das Terminal benutzen kann. Das Projekt trägt den Namen Bask und ist komplett in der Programmiersprache C umgesetzt. Dabei verwende ich nur die Standardbibliotheken von C und zunächst einmal die Farben für die Bash Shell welche unter vielen Distributionen bereits vorinstalliert ist. Das Programm steht dabei unter der Lizenz GNU GPL v.3.

Quelle - Marc Volker Dickmann
Quelle – Marc Volker Dickmann

Installation

Da Bask sich noch in der Entwicklung befindet, muss man zur Zeit noch den Quellcode herunterladen und ihn Anschließend kompilieren. Dazu befindet sich eine Makefile die diesen Schritt auf den Befehl $ make innerhalb des Ordners reduziert. Anschließend kopiert man die Datei zb. in den Ordner bin welcher im Benutzerverzeichnis angelegt werden kann. Wird der Ordner bin erstellt muss man sich vor dem verwenden einmal Aus- und wieder Einloggen.

Erster Start

Das Programm ist im Grunde sehr simple aufgebaut. Nachdem man es installiert hat, gibt man den Befehl $ bask init ein und Bask erstellt im Benutzerverzeichnis in dem Ordner .local/share einen neuen Ordner namens Bask. Zusätzlich werden die benötigten Dateien wie das Theme, die Konfigurationsdatei sowie einen leeren Baskbin in dem die Aufgaben gespeichert werden.

Um eine Aufgabe in Bask anzulegen, wird der nachfolgende Befehl verwendet. Dabei aber die mit <> gekennzeichneten Parameter anpassen.

$ bask add <Priorität> <Projektname> <Beschreibung der Aufgabe>
$ bask add 0 "BaskTut" "Dies ist eine neue Aufgabe. Priorität Normal."
$ bask add 1 "BaskTut" "Dies ist eine neue Aufgabe. Priorität Wichtig."
$ bask add 2 "BaskTut" "Dies ist eine neue Aufgabe. Priorität Heute."
$ bask add 3 "BaskTut" "Dies ist eine neue Aufgabe. Priorität Kritisch."

Alle Aufgaben lassen sich mit list in einer Tabelle anzeigen.

$ bask list

Um eine Zusammenfassung aller Projekte zu erhalten, kann man summary verwenden.

$ bask summary

Um eine Aufgabe als erledigt zu markieren, wird der nachfolgende Befehl verwendet.

$ bask finish <id>
$ bask finish 1

Falls man eine Aufgabe endgültig aus dem Baskbin löschen möchte, kann man remove benutzten.

$ bask remove <id>
$ bask remove 1

Möchte man die Aufgabe noch im Baskbin behalten, sie aber nicht mehr in der Liste stehen haben, kann man stop verwenden.

$ bask stop <id>
$ bask stop 1

Befehlsliste

In der unten stehenden Tabelle sind einige Befehle und ihre Funktionen aufgelistet.

Befehl Funktion
$ bask add <Priorität> <Projektname> <Beschreibung der Aufgabe> Erstellt eine neue Aufgabe.
$ bask remove <id> Entfernt eine Aufgabe.
$ bask finish <id> Markiert eine Aufgabe als erledigt.
$ bask stop <id> Versteckt eine Aufgabe.
$ bask show <id> Zeigt alle Informationen einer Aufgabe.
$ bask mod <id> Modifiziert eine Aufgabe. Bitte in der Hilfe von Bask nachschauen.
$ bask search [Ansicht] <Suchwort> Durchsucht den Baskbin und nutzt optional die in Ansicht gegebene Anzeige für die Ergebnisse.
$ bask list Zeigt alle Aufgaben in einer Tabelle an.
$ bask summary Zeigt die Zusammenfassung aller Projekte an.
$ bask help Zeigt die ausführliche Hilfe an.

Anregung oder Kritik

Auf der Projektseite von Bask finden sich weitere Informationen sowie die der Link zu dem Projekt auf Launchpad. Wenn jemand Anregungen oder Kritik zu Bask hat, nehme ich diese gerne über Kommentare oder entsprechende Einträge auf dem Launchpad Projekt entgegen.

KurzeTipps – Multimonitor Gaming

Ich besitze momentan mehrere Monitore, genauer gesagt drei, und bis auf wenige Ausnahmen gibt es kaum Spiele die problemlos die Auflösung von 5760×1080 unterstützen. Viele Spiele übernehmen für die Größe des Fensters bzw. des Vollbildes die Auflösung von Compiz welcher derzeit unter Unity unter anderem für die Komposition verantwortlich ist. Vor ein paar Tagen kam ich auf eine Lösung, welche die Liste von Unterstützen Spielen etwas länger macht.

Über ein Skript setze ich die Variable outputs auf einen Screen mit der Auflösung von allen Monitoren zusammen (5760×1080) und deaktiviere vorher die automatische Erkennung von outputs. Dann werden beim Maximieren oder dem Vollbild die Anwendungen über alle Monitore gestreckt.

#!/bin/bash
gsettings set "org.compiz.core:/org/compiz/profiles/unity/plugins/core/" "detect-outputs" false 
gsettings set "org.compiz.core:/org/compiz/profiles/unity/plugins/core/" "outputs" "['5760x1080+0+0']"

Bei dem Spiel Shadow of Mordor zum Beispiel lässt sich so im Fenstermodus das Spiel über drei Monitore spielen. Bei Vollbildanwendungen wird nebenbei auch die volle Auflösung genommen, erkennbar durch das kurze Auftauchen des Steam Notifikation ganz rechts, jedoch stellt nicht jedes Spiel die Auflösung dar und bleibt beim linken Monitor in dessen Auflösung.

Um wieder zum normalen Modus zu kommen, führt man folgendes Skript aus. Der Modus erlaubt es wieder, dass Fenster beim Maximieren auf die Größe von einem Monitor gestreckt werden. Das Skript setzt dafür die Einstellungen wieder auf die festgelegten Werte zurück. Hier habe ich die Werte für drei 1080p Monitore festgelegt.

#!/bin/bash
gsettings set "org.compiz.core:/org/compiz/profiles/unity/plugins/core/" "detect-outputs" true
gsettings set "org.compiz.core:/org/compiz/profiles/unity/plugins/core/" "outputs" "['1920x1080+0+0', '1920x1080+1920+0', '1920x1080+3840+0']"

Software – Byobu Terminal

Fast jeder Linux Nutzer dürfte schon einmal, mehr oder weniger, mit dem Terminal in Berührung gekommen sein. Meist sind die vorinstallierten Terminals jedoch schlicht, was keineswegs falsch ist. Wer diese Möglichkeit der Befehlseingabe häufig in Anspruch nimmt, dem könnte leicht die einfache Verwaltung von verschiedenen Terminals, wie man sie von dem Fenstermanager gewohnt ist, fehlen. Eine Lösung für dieses Problem bietet Byobu. Das Skript bzw. Hilfsprogramm stellt im Grunde die Möglichkeiten einer Fensterverwaltung für die Kommandozeile bereit. Dafür verwendet die Software entweder den Shell-Fenstermanager Screen oder tmux.

Byobu mit einem Tab. - Quelle - Bildschirmfoto von Byobu
Byobu mit einem Tab – Quelle – Bildschirmfoto von Byobu

Installation

Byobu ist unter Ubuntu sogar in den Standard Paketquellen von main zu finden. Auch bei anderen Distributionen kann man die Software meist installieren, ohne weitere Paketquellen hinzuzufügen. Bei Debian basierten Distributionen lässt sich das entsprechende Paket beispielsweise über folgenden Befehl installieren.

sudo apt-get install byobu

Verwendung

Nach der Installation findet man in dem Menü einen Eintrag, um direkt ein Terminal mit Byobu zu starten. Möchte man dies jedoch manuell erledigen, kann man den folgenden Befehl verwenden.

byobu

Wenn die Software häufiger zu Einsatz kommt, kann man natürlich einen Starter auf dem Desktop oder in der Startleiste platzieren.

Ansicht

Nachdem die Anwendung gestartet wurde, präsentiert sie einem zunächst eine leicht veränderte Befehlszeile. Unten wird jedoch eine kleine Leiste eingeblendet die Informationen zu dem System, wie etwa Zeit, Prozessorauslastung, verfügbarer Arbeitsspeicher und mehr, anzeigt. Bei Bedarf kann man Byobu so konfigurieren, dass auch andere Informationen eingeblendet werden.

Über die Taste F9 gelangt man in das Menü von Byobu. Dort kann man unter dem Menüpunkt „Statusmeldungen ändern“ die in der Statusleiste anzuzeigenden Informationen auswählen.

Steuerung

Einer der Hauptfunktionen ist jedoch die Möglichkeit in einem Fenster mehrere Sitzungen zu starten und sie wie bei einem Tiled Fenstermanager (z.B. I3) anzuordnen. Diese Funktion lässt sich sehr simple über Tastenkombinationen steuern. Für diese Funktion verwendet Byobu die eigentlichen Shell-Fenstermanager Screen oder tmux.

Tastenkombination Funktion
F2 Startet eine neue Sitzung in einem neuen Tab.
F3 Wechselt zur vorherigen Sitzung (Tab links).
F4 Wechselt zur nächsten Sitzung (Tab rechts).
Shift + F2 Teilt die aktuelle Sitzung Horizontal.
Strg + F2 Teilt die aktuelle Sitzung Vertikal.
Shift + F3 Setzt den Fokus auf die vorherige Teilsitzung.
Shift + F4 Setzt den Fokus auf die nächste Teilsitzung.
Shift + F5 Verbindet alle Teilsitzungen.
Shift + F6 Entfernt die aktuelle Teilsitzung.
Strg + D Sitzung beenden und Tab schließen.

Einige der Funktionstasten

Besonderheiten

Im Gegensatz zu den herkömmlichen Terminals wird bei Byobu ein Prozess beim Schließen des Fensters nicht beendet, sondern läuft im Hintergrund weiter. Startet man nun Byobu erneut, so findet man den Zustand vor dem schließen des Fensters vor. Damit der Prozess beendet und das Fenster geschlossen wird, kann man die Tastenkombination Strg + C und anschließend Strg + D verwenden.

Byobu mit 3 Teilsitzungen - Quelle - Bildschirmfoto von Byobu
Byobu mit 3 Teilsitzungen – Quelle – Bildschirmfoto von Byobu

Details

Aktueller Debian Maintainer der Open Source Software ist Dustin Kirkland. Das Projekt steht momentan unter der GPL v.3 Lizenz.

Tipps und Tricks

Wem die Hintergrundfarbe des Terminals nicht gefällt, kann mit der Tastenkombination Strg + Shift + F5 die Farbe durch eine zufällig ausgewählte Farbe ersetzen. Dafür muss man sich allerdings im sogenannten byobu-tmux Modus befinden. Der Modus bedeutet im Grunde nur, dass die Anwendung den tmux Shell-Fenstermanager verwendet.

Hat man beide Shell-Fenstermanager installiert, kann man über den Befehl byobu-screen oder byobu-tmux der Anwendung vorschreiben welchen sie benutzen soll.

Die jeweiligen Skripts für die Statusmeldungen findet man unter dem Pfad „/usr/lib/byobu/„.

Über die Tastenkombination Shift + Pfeiltasten kann man ebenfalls zwischen den Teilsitzungen navigieren.

Weitere Infos

Für weitere Informationen zu dem Programm habe ich hier ein paar Quellen aufgelistet.

– In der Man Page von Byobu findet man im Grunde alles, was man wissen muss. (Englisch)

– Auf der entsprechenden Seite des Wikis von Ubuntuusers.de findet man einen Überblick. (Deutsch)

Fazit

Mir hat Byobu sehr gut gefallen, besonders die Option mit den Teilsitzungen ermöglicht mir nun weniger Fenster geöffnet zu haben. Wem der Fenstermanager I3 gefällt, aber für grafische Programme einen anderen nutzten möchte, der wird bei dem Hilfsprogramm Byobu fündig. Ich empfehle jedem diese Software einmal auszuprobieren.

News – Ubuntus jüngstes Familienmitglied Ubuntu MATE

Die Ubuntu Familie hat ein neues Mitglied bekommen. Der Neuzugang nennt sich Ubuntu MATE und hat, am Namen bereits erkennbar, die Desktopumgebung Mate mit an Bord. Zur Zeit existiert bereits eine erste Beta von 15.04 womit die erste offizielle Ubuntu MATE Version 15.04 sein wird.

Was ist Mate ?

Der Mate Desktop ist aus dem drastischen Übergang von Gnome 2 zu Version 3 entstanden und basiert im Grunde auf Gnome 2.32. Dabei wird der Desktop regelmäßig weiter entwickelt und mit ein paar neuen Features versehen.

Ubuntu MATE im Detail

Im Juni 2014 tauchte erstmals die Idee von einem Ubuntu MATE Remix auf. Bei der ersten Veröffentlichung wurde der Remix dann in Ubuntu MATE umbenannt. Im August 2014 wurde dann der Status als offiziell unterstützte Ubuntu-Version von dem Projekt beantragt. Dies hat zum Beispiel den Vorteil das die Images über die Ubuntu-Server heruntergeladen werden können. Weiter kann dass Projekt nun von der Infrastruktur von Canonical zum erstellen der Ubuntu-Version profitieren. Abseits davon wird sich an Ubuntu MATE nicht viel ändern, die Ubuntu-Variante wird weiterhin von der Community erstellt.

Software – gitk

Die Versionsverwaltung git dürfte vielen bereits bekannt sein, da der Mensch anders als ein Computer große Datenmengen am besten grafisch verarbeiten kann, gibt es Software welche die Daten von Git grafisch darstellt.
Eine solche Software ist das Open Source Programm gitk, welches sogar ein offizieller Bestandteil des Git-Projektes ist.

Überblick

Die Software benutzt für die grafische Benutzeroberfläche die Tk Bibliothek und lässt sich daher, wenn auch meist im schlichtem Retrolook, unter fast allen Fenstermanagern benutzen.
Nach dem Starten über den Befehl gitk erscheint ein neues Fenster welches einem erst mal eine Vielzahl von Informationen zu dem Git-Repository liefert.

Quelle - Bildschirmfoto von gitk
Quelle – Bildschirmfoto von gitk

Installation

Um die Software zu installieren, benutzt man den jeweiligen Paketmanager, für apt benutzt man beispielsweise folgenden Befehl, um das Paket gitk zu installieren.
Das Paket ist in den offiziellen Paketquellen von Ubuntu vorhanden.

Pakete:
gitk (main)

sudo apt-get install gitk

Erweiterung

Mit der Installation des Programms git-gui kann man weitere Funktionen bei gitk nutzen.
So wird diese Abhängigkeit z.B. für die git blame Funktionalität benötigt.

Benutzung

Die Software lässt sich sehr einfach bedienen und die Bedienelemente sind meistens selbsterklärend.
So benötigt man für einen schnellen Test nur ein Terminalfenster, ein Git-Projekt sowie gitk.
Zuerst wechselt man mithilfe des Terminals und dem Befehl cd in das Verzeichnis des Projektes.
Darauf folgend verwendet man das Kommando gitk und schon öffnet sich das Fenster in dem der aktive Branch angezeigt wird.

cd GitProjekt
gitk

Möchte man alle Branches angezeigt bekommen so wird das Argument all an den Befehl angehängt.

gitk --all

Infoelemente

Eine grafische Darstellung der einzelnen Versionen wird auf dem ersten Feld, links oben angezeigt.
Rechts daneben befinden sich Informationen zum Absender und Zeitpunkt der Version.
Darunter ist eine Leiste mit Filtermöglichkeiten für die Daten vorzufinden.
Unten findet man linksseitig die Daten der ausgewählten Version und rechts daneben die Beschreibung / Dateiliste.

Einstellmöglichkeiten

Jeder hat einen anderen Geschmack, daher gibt es bei fast jeder Software Möglichkeiten das Aussehen und Verhalten seinen Vorlieben anzupassen.
Grundlegend können die verschiedenen Farben und Schriftarten über Bearbeiten → Einstellungen festgelegt werden.

Quelle - Bildschirmfoto von gitk
Quelle – Bildschirmfoto von gitk

Neue Ansichten

Über den Menüeintrag Ansicht → Neue Ansicht lassen sich die angezeigten Daten nach weiteren Kriterien filtern.
Diese Ansichten können bei Bedarf auch für den späteren Einsatz gespeichert werden.
So lässt sich zum Beispiel eine Ansicht anlegen, die automatisch die Informationen zu den eigenen Änderungen anzeigt.

Fazit

Das seit 2005 existierende Tool gitk ist sehr praktisch und simple aufgebaut.
Es muss nicht immer alles kompliziert und überladen mit unnötigen Funktionen sein, um als gute Software zu gelten.
Gitk zeigt, dass man mit wenig Aufwand einen guten Überblick von seinen Projekten behalten kann.
Eine klare Empfehlung meinerseits für alle die ihre Projekte verwalten wollen.

Programmieren – Grundlagen von C: Einlesen von Daten

Wörter sind schon etwas Feines, man kann mit ihnen Informationen austauschen.
Ob sachlich oder ganz persönlich, ohne Wörter würde man wahrscheinlich noch in der Steinzeit leben.
In dem zweiten Teil dieser Artikelserie geht es deshalb um den Datentypen char und das einlesen von Daten.
Zusätzlich wird der Begriff Array im Zusammenhang mit Text angesprochen sowie das zuweisen von Werten bei Variablen.

Datentyp Char

Um Zeichen, wie zum Beispiel Buchstaben, in C zu benutzen, gibt es den Datentypen char.
Variablen deklariert man in der Programmiersprache C über den Syntax char.
Konstanten von dem Typ char werden immer in Hochkommata (‚) eingeschlossen, so auch beim zuweisen von Werten.

char Buchstabe;

Arrays und Zeichenketten

Um ganze Wörter zu verwenden, benötigt man eine Zeichenkette (engl. string) welche im Grunde ein Array vom Typ char ist.
Dies kann man sich in etwa, wie eine Aneinanderreihung von Elementen, in diesem Fall Zeichen, vorstellen kann.
Im Gegensatz zu einigen anderen Programmiersprachen gibt es unter C keinen eigenen Datentyp für Zeichenketten.
Dabei muss man beachten, das standardmäßig in Zeichenketten keine Sonderzeichen, wie beispielsweise Umlaute, vorkommen dürfen.

Ein Array wird deklariert, indem man eine Variable anlegt, mit der Besonderheit, dass direkt hinter dem Variablennamen, zwischen zwei eckigen Klammern die Anzahl der gewünschten Elemente steht.
Nach dem Inhalt eines Arrays folgt die binäre Null. Sie signalisiert das Ende des Datenstromes, vergleichbar mit dem Punkt nach dem Satzende.
Manuell setzten muss man die binäre Null bei Zeichenketten nur in wenigen Fällen, da dies normalerweise von den Funktionen in C getan wird.

Dabei muss beachtet werden, dass die Anzahl an Elementen zwar bei 0 anfängt, jedoch immer die binäre Null mit eingerechnet werden muss.
Was bedeutet, bei 10 Feldelementen wird ein Array mit der Anzahl von 10 angelegt.
Die jeweiligen Elemente sind dann von 0 bis 9 erreichbar und Feldelement 10 ist die binäre Null.

Variablen für Zeichenketten deklariert man über den folgenden Syntax:

char Wort[5];

/* Beispiel: Array */
Wort = "Hallo";

/*
	Wort[0] = H
	Wort[1] = a
	Wort[2] = l
	Wort[3] = l
	Wort[4] = o
	-----------------
	Wort[5] = \0 (binäre Null)
*/

Konstanten

Häufig braucht man beim programmieren Werte die sich während des Programmablaufs nicht ändern.
Dazu verwendet man sogenannte Konstanten, welche das Gegenstück zu Variablen darstellen.

Typ Konstante
int z.B. 1 oder 4
char z.B. ‚a‘ oder ‚h‘
Zeichenkette z.B. „Hallo“ oder „Wort“

Variablen

Variablen sind mit das Wichtigste in der Programmierwelt, sie ermöglichen einem Informationen während des Programmablaufs bereitzuhalten.
Aus der Mathematik kennen viele bereits den Begriff der Variablen, man rechnet oft mit x oder y.
Beim Programmieren verhält sich dies sehr ähnlich zu der Mathematik, die Variablen gelten auch hier nur so lange dass Programm läuft (bzw. nur für eine Funktion).
Variablen haben immer einen vorher festgelegten Datentypen, ein paar sind bereits vorgestellt worden, und ihnen kann man einen Wert zuweisen.

In C gibt es einige Regeln die man einhalten muss, um Variablen nutzen zu können.
So dürfen Variablennamen nur maximal 31 Zeichen lang sein und ausschließlich aus den Buchstaben a-z und A-Z sowie Ziffern und dem Unterstrich (_) bestehen.
Ziffern dürfen nicht am Anfang stehen. Der Name ist zwar beliebig aber es wird allgemein empfohlen sinngemäße Namen zu wählen (z.B. summe, ergebnis, name, etc.).
Auch ist C hierbei case-sensitive, was bedeutet das die Groß- und Kleinschreibung, ähnlich wie bei Passwörtern, wichtig ist.
Beispielsweise ist die Variable mit dem Namen Regen eine andere, als die mit dem Namen regen.

char Name; /* Variable wird angelegt (deklariert) */
Name = 'T'; /* Der Variable wird ein Wert zugewiesen (definiert) */

Variablen Werte zuweisen

Damit man Variablen richtig nutzen kann, muss man sie nicht nur deklarieren, sondern ihnen auch Werte zuweisen.
Beim Zuweisen nimmt der Wert einer Variable entweder den Wert einer anderen Variable oder den einer Konstanten an.
Dafür wird der Variablenname der zuzuweisenden Variable auf die linke und der Wert auf die rechte Seite von dem Gleichheitszeichen geschrieben.
Dies funktioniert im Eigentlichen, wie in der Mathematik (x=1) und im Sprachjargon wird das Zuweisen auch als definieren bezeichnet.

char Buchstabe;
Buchstabe = 'a';

int x;
x = 1;

Einlesen von Werten

Da man bei einem Programm, im herkömmlichen Sinne, nicht jedes mal den Quelltext abändern möchte um andere Werte zu benutzen, nutzt man z.B. die Funktion scanf aus der Standardbibliothek stdio.h.
Beim Aufrufen benötigt scanf zwei Argumente. Der erste Parameter ist eine Zeichenkette welcher den einzulesenden Datentyp in der gleichen Form wie bei printf (Platzhalter) bereithält.
Bei dem zweiten Argument wird ein sogenannter Zeiger (engl. pointer) auf die Variable, in die der Wert geschrieben werden soll, angegeben.

Ein Pointer kann man sich wie einen Link im Internet vorstellen, die eigentliche Seite liegt zwar nicht auf dem eigenem Server, jedoch ein Verweis auf den jeweiligen Server.
Nach diesem Prinzip ist ein Zeiger ein Link auf die Speicherstelle der Variable im Arbeitsspeicher, womit sie dann, von anderen Funktionen aus bearbeitet werden kann.
Um einen Pointer anzugeben, wird beim Verwenden einfach vor dem Variablennamen ein kaufmännisches Und (&) gesetzt.

char Buchstabe;
scanf("%c", &Buchstabe);

Kommentare im Quelltext

Um nicht die Übersicht zu verlieren und Informationen darzustellen, gibt es sogenannte Kommentare.
Diese werden in C über den Syntax /* begonnen und müssen mit */ wieder aufhören, die Länge ist dabei beliebig.
Normalerweise ist die Schachtelung von Kommentaren nicht erlaubt.

Bei einigen Editoren gibt es mit der Syntaxhervorhebung auch die Funktion in Kommentaren etwas zu markieren.
Häufig sind dies die Begriffe INFO und TODO.

/* Dies ist ein Kommentar */
/* INFO: Dies ist eine Info. */
/* TODO: Dies ist eine Aufgabe. */

Beispielprogramm

Im Folgenden wird ein Beispielprogramm mit den vorhin oder in der Vergangenheit, erklärten Elementen vorgestellt.
Dabei wird immer die gesamte Datei in dem Codeblock repräsentiert, der dazugehörige Dateiname steht immer unter diesem.
Wie man den Quellcode kompiliert, kann man in Teil 1 nachlesen.

#include <stdio.h>

int main()
{
	/* Variable Namen anlegen: Array mit 20 Elementen */
	char Name[20];
	
	/* Anweisung ausgeben */
	printf("Geben sie ihren Vornamen ein (Maximal 20 Zeichen): ");
	
	/* Name einlesen */
	scanf("%s", &Name);
	
	/* Name ausgeben */	
	printf("\nSie heißen: %s\n", Name);

	return 0;
}

Datei: main.c

Legende

Als binär bezeichnet man Daten, die im dualen Zahlensystem gehalten sind, also 1 oder 0.

Aufgabe

Damit man in der Zeit zwischen den einzelnen Teilen, etwas zum Üben hat, habe ich beschlossen ab jetzt bei jedem Teil eine Aufgabe zum Thema zu stellen.
Die Lösung steht dann immer in dem darauf folgenden Teil, sodass man sie mit seiner vergleichen kann.
Passend zum Thema, lautet die Aufgabe ein Programm zu schreiben, welches Vorname, Nachname und die Stadt abfragt und dann einen Satz nach dem folgenden Muster ausgibt.

Max Mustermann wohnt in der Stadt Musterhausen.

Ausblick

Im nächsten Teil geht es um dass rechnen mit Zahlen und wie man in C Fließkommazahlen benutzt.
Es wird in Zukunft voraussichtlich jede Woche ein neuer Teil erscheinen.

Fazit

In diesem Teil hat man gelernt, wie man in C mit Text umgehen kann und einiges mehr.
Was manchem beim Lesen auf den ersten Blick komplex erscheint, ist eigentlich recht simple.
Man könnte nun beispielsweise Programme für das Bilden von Texten programmieren.