<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://72.14.177.54/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Java4c - User contributions [en]</title>
		<link>http://72.14.177.54/java4c/Special:Contributions/Admin</link>
		<description>From Java4c</description>
		<language>en</language>
		<generator>MediaWiki 1.15.1</generator>
		<lastBuildDate>Sun, 05 Apr 2026 15:10:01 GMT</lastBuildDate>
		<item>
			<title>Bazaar-Notes</title>
			<link>http://72.14.177.54/java4c/Bazaar-Notes</link>
			<description>&lt;p&gt;Admin:&amp;#32;/* More as one Repository for one product */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;@ident=Bazaar_notes&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [[Bazaar-guide]]: a guide to use Bazaar.&lt;br /&gt;
&lt;br /&gt;
This size is in german, because it is discussed in a german team. It will be presented in english in the future. TODO&lt;br /&gt;
&lt;br /&gt;
==Kurzer Abriss, Arbeit mit MKSSI, git, mercurial, Bazaar==&lt;br /&gt;
&lt;br /&gt;
Hartmut: MKSSI ist seit über 10 Jahren bei mir in Gebrauch.&lt;br /&gt;
* Nur auf Arbeit, zentrale Administration, &lt;br /&gt;
* Die MKSSI-Software wird normalerweise nicht ständig updated. Das Arbeiten ist nicht sehr schnell, eher etwas für ordentliche Pflege.&lt;br /&gt;
* Wird gemacht, für die Versionen, die herausgegeben werden. Nicht für stündliche kleine Änderungen. Da wäre der Arbeitsaufwand zu hoch.&lt;br /&gt;
&lt;br /&gt;
Hartmut: git war das erste der 'dritten Generation' für mich.&lt;br /&gt;
* Geht ganz gut, init commit, alles ganz einfach&lt;br /&gt;
* Nachschauen der Änderungen: Hier ist die GUI (gitk) nicht sehr bedienerfreundlich. Die schnelle Tastaturbedienung ist mangelhaft, der Tastaturfokus ist im falschen Teilfenster. Immer mit Maus schieben ...&lt;br /&gt;
* Linux-like cmdline-Bedienung auf Windows-PC ist für mich eher interessant. &lt;br /&gt;
&lt;br /&gt;
Hartmut: mercurial - ähnlich wie git, nur eher für windows, eigentlich sehr ähnlich git.&lt;br /&gt;
&lt;br /&gt;
Hartmut: Bazaar gefällt mir persönlich wegen der GUI besser. &lt;br /&gt;
&lt;br /&gt;
Hartmut: Alle drei Systeme sind aber funktionell eher ähnlich. Ich pflege Quellen in Bazaar, um sie dann auch in hg zu committen, mit selbigem commit-Text wie in Bazaar zuvor zusammengestellt. Das ist nur ein Aufruf. Ein Hg-Archiv beispielsweise für CRuntimeJavalike liegt auf [[https://bitbucket.org/jchartmut/cruntimejavalike bitbucket.org/jchartmut/cruntimejavalike]]. Hg deshalb, weil die bitbucket-Seite nur hg unterstützt. Der Aufwand, in hg doppelt zu pflegen, ist kaum erhebenswert.  &lt;br /&gt;
&lt;br /&gt;
;Commit-Text zusammenstellen&lt;br /&gt;
&lt;br /&gt;
:Vorderhand geht es beim Commit-text darum: Was leistet diese Version insgesamt, unterschied zur Vorversion. In der Zweiten Linie geht es aber um die Änderung in den einzelnen Files. &lt;br /&gt;
&lt;br /&gt;
:Sind im Commit sehr viele Files enthalten, dann handelt es sich meist um das Ergebnis eines Refactoring wegen einer Änderung. Solche Änderungen brauchen in den Quellfiles nicht vermerkt werden, zuviel Aufwand, uninteressant.&lt;br /&gt;
&lt;br /&gt;
:Sind dagegen wenige Files geändert, dann lag meist auch eine Änderung der Funktionalität vor. Diese sollte unabhängig vom Commit in den Quellfiles notiert werden. Hier hilft aber die Differenzanzeige, um während des Commit die Änderungen in den Files zu vermerken. Man kann einen passenden Commit-Text zusammenstellen, dabei die Änderung der Einzelfiles betrachten und dabei in den Einzelfiles Änderungen notieren (log des Files).&lt;br /&gt;
&lt;br /&gt;
:Ein automatisches Eintragen der Änderung in den Files aus dem checkin-Textes aus der Arbeit mit dem Source-Integrity-System produziert meist Einträge in den Files, die die Änderungen schlecht abbilden. Das liegt daran, weil der Arbeitsaufwand für jeden Einzelfile zu hoch ist. Dieses automatische Eintragen ist aber eine häufig verwendete oder voreingestellte Methode bei MKSSI &amp;amp; co.&lt;br /&gt;
&lt;br /&gt;
: Der Arbeitsaufwand bei manuellem Eintragen in den File ist deshalb bei Bazaar geringer, weil&lt;br /&gt;
:* Es gibt eine schnelle Übersicht, welche Files betroffen sind. Einfacher Knopfdruck für Viewdiff. Man kann schnell auswählen, bei welchen Files ggf. gleiche Einträge überhaupt notwendig sind. Nicht bei allen geänderten.&lt;br /&gt;
:* Mit den Files, die keine wesentlichen Änderungen enthalten sondern nur Anpassungen an Änderungen anderer Files, braucht man sich also gar nicht beschäftigen. &lt;br /&gt;
:* Die Änderung im File eingetragen und per Zwischenablage auch im Commit-Text abgelegt ist dann eigentlich nur einmaliger Aufwand, nicht zweimal.&lt;br /&gt;
:* Wenn es wesentliche Änderungen sind, dann ist die Beschreibung der Änderung auch ein schöpferischer und nicht formeller Akt. Dann lohnt es sich auch, die entsprechend notwendige Zeit aufzubringen. Möglicherweise wird man bei der Änderungsbeschreibung im File auch noch weitere dabei entdeckte Pflegekorrekturen anbringen, die insgesamt die Quelle weiter aufwerten. Dann hat es sich sowieso gelohnt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Source Content Management oder hart archivieren? Nur Quellen im SCM?==&lt;br /&gt;
&lt;br /&gt;
Eine harte Archivierung ist das Verpacken der Files auf einem Datenträger. Da das Zip-format sich als langjährig beständig erwiesen hat, kann man ganze File-Bäume zippen und irgendwo aufheben.&lt;br /&gt;
&lt;br /&gt;
Nachteil: Keine Unterstützung für Diff-View außer auspacken und mit einem Diff-tool vergleichen. Der Total-Commander eignet sich dazu allerdings recht gut, da er in beiden Paneelen in zip-Archive tief eintauchen kann.&lt;br /&gt;
&lt;br /&gt;
Vorteil: Unabhängig von einem Tool, die Files einer Version sind zusammengebunden einfach da. Es hat sich schon oft als günstig erwiesen, lange Jahre zurückliegende Files nicht mit den damaligen Tools aufrollen zu müssen sondern einfach entzippen.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil für die Langjährigkeit sollte bedacht werden.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Ab und zu zippen und wegpacken, mindestens bei wichtigen Releaseständen. Aber unnütze zipfiles auch mal löschen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Für akutelle Softwareentwicklung jedenfalls ein Source-Integrity-Tool nutzen, Zippen nur zusätzlich.&lt;br /&gt;
&lt;br /&gt;
===Verzeichnissstuktur-Rückschluss===&lt;br /&gt;
&lt;br /&gt;
Sowohl für das Zippen als auch für Sourcenpflege, Sourcenaustausch usw. liegt der tatsächliche Umfang von Sources insgesamt meist in einem Bereich von wenigen Megabyte. Damit ist der Datenaustausch mindestens erleichtert. Wenn man in die selbe Verzeichnisstruktur in der Quellen liegen noch hineintue:&lt;br /&gt;
* Objects&lt;br /&gt;
* erzeugte executable und umfangreiche Datenbasis-Files (Visual Studio ncb-Files und dergleichen)&lt;br /&gt;
* logfiles, Output-Files beim Testen&lt;br /&gt;
* alte Archive (zips)&lt;br /&gt;
&lt;br /&gt;
dann springt der Umfang des Verzeichnisbausms von wenigen Megabyte ganz schnell auf -zig Megabyte. Das Problem merkt man&lt;br /&gt;
* beim zippen (ganz schnell mal ablegen zum späteren Vergleich)&lt;br /&gt;
* beim Vergleichen (alle Obj erscheinen als geändert, alles rot, erst mal schaun was das ist)&lt;br /&gt;
* bei der Pflege der Sources in einem SM-system (Source Management): viele nicht erfasste files: Sind die wichtig? Ach, sind nur Obj, doch ein wichtige wird übersehen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Möglichst Sources von Testfiles und Executables trennen. Die wenigen Files, die nicht trennbar sind (weil die Tools sie ins aktuelle Verzeichnis legen), in einer ignore-Liste erfassen, ggf. beim zippen ausschließen usw. Sind es wenige, dann sind sie verwaltbar&lt;br /&gt;
* Object-Files auf einem tmp-Ordner speichern&lt;br /&gt;
* Generierergebnisse neben dem Source-Baum speichern.&lt;br /&gt;
&lt;br /&gt;
===Archivieren von Executables===&lt;br /&gt;
Aus oben genannten Gründen sollten die Libs und Executables ''nicht'' mit den Sources im SM gemischt werden.&lt;br /&gt;
* Die libs und executables könnten einerseits immer aus den Sources generiert werden (wenn alles richtig ist)&lt;br /&gt;
* Die libs und executables sind nicht vergleichbar mit üblichen diffs.&lt;br /&gt;
* Die libs und executables sind im Code-Umfang zu hoch.&lt;br /&gt;
&lt;br /&gt;
Es ist aber wichtig, libs und exe im Zusammenhang mit einem Checkpoint der Sources zu speichern.&lt;br /&gt;
* Als Auslieferungsstand&lt;br /&gt;
* Als wichtigen Teststand für Rückrüsten, möglicherweise ein Kandidat für Auslieferung.&lt;br /&gt;
&lt;br /&gt;
Lösung:&lt;br /&gt;
* Beim committen eines guten Standes, der angetestet ist, ein kleines batch laufen lassen, das die exes lokal kopiert mit Datumskennzeichnung.&lt;br /&gt;
* Damit sind mehrere exes mit Datumsverbindung zum commit lokal vorhanden. Es kann getestet werden.&lt;br /&gt;
* '''Auslieferung: Executables und ggf. libs als zip abspeichern''',, siehe oben. Dabei auf den Stand zugreifen, der vorher lokal kopiert wurde und garantiert aus den Sources, die committed wurden, erstellt wurde.&lt;br /&gt;
* Nur bei '''Master-Releases''', die entgültig ausgeliefert werden, sollte folgeder Aufwand getrieben werden: Nach erfolgreichem Test die Quellen auf Produktgenerierungsrechner von anderer Person auschecken, neu compilieren, neues Generat erstellen und nochmals testen. Diese Vorgehensweise sichert die Konsistenz der Quellen mit dem Generat und dürfte bei Auslieferungen wichtig sein, dauert aber in der täglichen Fortschrittsarbeit einfach zu lange.&lt;br /&gt;
&lt;br /&gt;
==More as one Repository for one product==&lt;br /&gt;
@ident=multiBzr&lt;br /&gt;
&lt;br /&gt;
;Products with more as one components.&lt;br /&gt;
&lt;br /&gt;
:Products are build with more as one components. Any component should be independent from the concretely product, tested as 'component' and may be used in more as one product. &lt;br /&gt;
&lt;br /&gt;
:Conclusion: Do not mix sources, separate it. Therefore any component needs its own bzr archive. &lt;br /&gt;
&lt;br /&gt;
;Sources of components should be located in a subdirectory of the product source tree. It is helpfull to use sub-directories to keep tidiness.&lt;br /&gt;
&lt;br /&gt;
:In linux the sub directory may be a symbolic link. It means, the sources are located anywhere other in the file tree really and they can be maintained outside of the products source tree. In windows a real copy is necessary. But note, that a tool can often gotten the sources from any pathes in the file tree. It is a problem of absolute pathes versus a local sandbox.&lt;br /&gt;
&lt;br /&gt;
:Conclusion: The .bzr repositiory of a component should be located in a sub directory of the product source tree.&lt;br /&gt;
&lt;br /&gt;
:The name of the sub directory should, but doesn't need be identical with the name of the component.&lt;br /&gt;
&lt;br /&gt;
;Getting of source tree of a component, getting its bzr archive&lt;br /&gt;
&lt;br /&gt;
To get the bzr repository for a component of a product, use a simple batch or script file inside the product file tree in that directory, where the components root directory should be stored.&lt;br /&gt;
&lt;br /&gt;
  srcJava_Zbnf/             ..... This is the components directory, where its srcJava_Zbnf/.bzr should be located.&lt;br /&gt;
  getBzr_srcJava_Zbnf.bat   ..... This is the batch file to get the bzr archive of the component.&lt;br /&gt;
&lt;br /&gt;
The batch file contains the simple line:&lt;br /&gt;
&lt;br /&gt;
  bzrGetVersion srcJava_Zbnf 59&lt;br /&gt;
&lt;br /&gt;
This line should be kept simple and independent of any operation system. Note, that the batchfile works under linux too, if it is set 'executable'. The batchfile calls another script, 'bzrGetVersion' and names the storing directory and the requested version. &lt;br /&gt;
&lt;br /&gt;
The '''bzrGetVersion''' scriptfile should be located anywhere in the PATH of the computer. It is a thing of installation, not a thing of the designated sources of the concrete product. It contains - for windows - and should be adapted to the concretely conditions at the PC-installation:&lt;br /&gt;
&lt;br /&gt;
 @echo off&lt;br /&gt;
 REM How to get a component's sources:&lt;br /&gt;
 REM The sources are contained in an bzr archive.&lt;br /&gt;
 REM The bzr archive is an distributed repository. &lt;br /&gt;
 REM An archive can exist as a copy on several places, &lt;br /&gt;
 REM for example at a external hard disk or in network or as a local copy in another drive. &lt;br /&gt;
 ::&lt;br /&gt;
 REM This is the path to all archives for this computer, correct it if necessary:&lt;br /&gt;
 set BZR_ARCHIVEPATH=D:/Bzr&lt;br /&gt;
 ::&lt;br /&gt;
 REM The batch renames the current directory if it is existing yet:&lt;br /&gt;
 if not exist %1 goto :noCurrent &lt;br /&gt;
   if exist %1.old rmdir /S/Q %1.old&lt;br /&gt;
   if exist %1.old goto :nodelOld  &lt;br /&gt;
   ren %1 %1.old&lt;br /&gt;
   if exist %1 goto :noRename&lt;br /&gt;
 :noCurrent&lt;br /&gt;
 ::&lt;br /&gt;
 REM copy the bzr archive and resynchronize all members with the required revision&lt;br /&gt;
 echo on&lt;br /&gt;
 bzr checkout %BZR_ARCHIVEPATH%/%1 %1 -r %2&lt;br /&gt;
 @echo off&lt;br /&gt;
 if not exist %1 goto :noBzr&lt;br /&gt;
 goto :ende&lt;br /&gt;
 ::&lt;br /&gt;
 :noRename&lt;br /&gt;
   echo can't rename %1 to %1.old. It may be used yet. Do it manually!&lt;br /&gt;
   pause&lt;br /&gt;
   goto :ende&lt;br /&gt;
 ::&lt;br /&gt;
 :nodelOld&lt;br /&gt;
   echo can't delete %1.old. It may be used yet. Do it manually!&lt;br /&gt;
   pause &lt;br /&gt;
 goto :ende&lt;br /&gt;
 ::&lt;br /&gt;
 :noBzr&lt;br /&gt;
   echo The  bzr archive is not pulled. The version may be faulty or the source path of bzr does not exist.&lt;br /&gt;
   echo See error messages above.&lt;br /&gt;
   pause&lt;br /&gt;
 :ende&lt;br /&gt;
 exit /B&lt;br /&gt;
&lt;br /&gt;
If you follow the command statements, you can see that an existing directory is kept, of found, but the directory of the component is get newly anytime. It assumes that all bzr archives are located in one directory in the file tree, which can be an external disk too or an network path. See 'BZR_ARCHIVEPATH'. &lt;br /&gt;
&lt;br /&gt;
The content of the archive will be cloned with the 'bzr checkout' command. The files are resynchronzed therefore. An independent working with the files and the cloned archive is possible, if necessary. The working can be pushed to its parent later using 'bzr push', 'bzr merge' etc. But in most cases only the resynchronized version of files are need.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Produkte aus einem Repository==&lt;br /&gt;
Das große Thema ist Wiederverwendung (Reuse). Häufig zu Beobachten: Reuse besteht aus copy'n paste and change. Die Quellen wandern also irgendwo anders hin, bzgl SCM auch für den einzelnen besser zu beherrschen - man muss sich nur mit dem beschäftigen, was man selbst hat.&lt;br /&gt;
&lt;br /&gt;
Das ist keine wirkliche Wiederverwendung. Der wirkliche Vorteil des reuse geht dabei verloren:&lt;br /&gt;
* Fehler, die in Produkten festgestellt werden, werden in den jeweiligen Modulen korrigiert und sind dann automatisch auch für andere Produkte mit korrigiert, obwohl sie dort ggf. noch gar nicht aufgefallen sind.&lt;br /&gt;
&lt;br /&gt;
Für true-reuse ist es notwendig, die Software-Module so zu bauen, dass sie '''unverändert''' in verschiedenen Produkten verwendbar sind und das Änderungen für alle Produkte nutzbar sind. Das ist eine Frage der Schnittstellen. Die Schnittstellen sind viel wichtiger als die innere Funktionalität. Letztere kann man immer noch verbessern. Schnittstellenänderungen sind kritisch. - Andererseits sind Schnittstellenänderungen auch verträglich, wenn sie formell adaptiert werden können. &lt;br /&gt;
&lt;br /&gt;
Ein shared-Repository in bazaar scheint die Lösung zu bieten, aus einem recht großen Quellenumfang für verschiedene Komponenten verschiedene Quellen herauslösen zu können. Die Komponenten haben selbe gemeinsame Quellen, ggf. in verschiedenen Revisionen, die aber immer abgeglichen werden können sollten. Die Komponenten sind dann Basis für ein Produkt. Komponenten existieren in Form von libs oder jars in Java und können eigenständig getestet werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Quellen           Komponenten       Produkte&lt;br /&gt;
  viele        ===&amp;gt; weniger      ===&amp;gt; aus Komponenten&lt;br /&gt;
  verschiedene      überschaubar      und Produkt-spezial-Quellen&lt;br /&gt;
                                      gebaut.&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert shared-Repository als zentraler Bezug - bin beim testen. (Hartmut)&lt;br /&gt;
==Zentrale Ablage für Repositories==&lt;br /&gt;
@ident=centralRepos&lt;br /&gt;
&lt;br /&gt;
Man kann immer und überall Repositories haben. Behält man den überblick und synchronisiert diese gegenseitig (push, pull), dann gibt es auch nicht zuviele Seitenzweige.&lt;br /&gt;
&lt;br /&gt;
Jedoch, arbeiten viele Leute mit den Repositories, auch weniger eingeweihte, einfache Nutzer, anderes Problem Archivierung, langjähriges aufheben: Dann sollte an einer definierten Stelle das Master-Repository stehen. Jeder Quellenbearbeiter hat die Pflicht, sich mit dem Master-Repository abzustimmen, also seine Änderungen zu pushen oder von dort zu pullen. Gegebenenfalls sollte eine Person mit der Pflege des Master-Repositories beauftragt sein. Mindestens bei Releaseständen muss diese Person dort bereinigend eingreifen.&lt;br /&gt;
&lt;br /&gt;
===Creating one shared repository in the local space===&lt;br /&gt;
The ''local space'' means any external hard disk, network folder or such which is owned by one person, by me. It is my local space, which can be used from some more people in my direct environment.&lt;br /&gt;
&lt;br /&gt;
For any component of sources one shared repository should be created one time. On one sub directory per component: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Shared repository''. An existing plain branch can be pushed to them.&lt;br /&gt;
&lt;br /&gt;
===Creating a branch for working===&lt;br /&gt;
&lt;br /&gt;
* Create a new plain branch at the working position: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Plain branch''.&lt;br /&gt;
* Pull from a shared repositiory: ''Button Pull, select the shared repository, select a branch.&lt;br /&gt;
** If there are some files already, create the branch at a new position and then move .bzr subdir.&lt;br /&gt;
&lt;br /&gt;
==Branches und dessen Auflösung==&lt;br /&gt;
@ident=.branch&lt;br /&gt;
&lt;br /&gt;
;Viele Seitenzweige wegen unterschiedlichen Korrekturen&lt;br /&gt;
&lt;br /&gt;
:Man kann sich auf den Standpunkt stellen, bei Korrekturen für kundenrelevante Software jeweils nur das aufgetretene Fehlerbild zu behandeln, alle anderen Softwareteile unverändert zu lassen. (''Do not touch a running system''). Das ist eine weit verbreitete Vorgehensweise. Folge sind dann sehr viele Seitezweige, die kaum mehr zusammenfließen.&lt;br /&gt;
&lt;br /&gt;
: Primär ist diese Vorgehensweise richtig.&lt;br /&gt;
&lt;br /&gt;
: Es zeigt sich aber, dass eine Änderung in Quellen, auch Restrukturierung, häufig zwar Nacharbeiten erforderlich macht. Diese Nacharbeiten sind aber formal abhandelbar. Man braucht nicht an jeder Stelle einer notwendigen Adaption an geänderte Quellenstände nachzudenken sondern muss nur den Compiler befragen. Kommt keine Fehlermeldung, ist alles in Ordnung. Eine Fehlermeldung soll mit formellen anschauen von Aufrufargumenttypen usw. behebbar sein, ohne dass man in die eigentliche Funktionalität einsteigt. Ist eine solche Nacharbeit möglich, dann kostet diese nur die Zeit der Pflege der Quellen, keine extra Testzeit. Zudem kann die Quellenpflege von jemanden ausgeführt werden, der zwar sehr gute Kenntnisse von Quellen und COmpiler hat, aber keine Tiefenkenntnis für die jeweilige Anwendung haben braucht. Man kann also delegieren.&lt;br /&gt;
&lt;br /&gt;
: In diesem Sinn ist eine Adaption eines Produktes an veränderte Quellen der Komponenten möglich und zweckmäßig. Mann kann dann eher an einem Hauptzweig arbeiten.&lt;br /&gt;
&lt;br /&gt;
: Schlussfolgerung: Schnelle Änderungen -&amp;gt;Seitenzweig, Auflösen dessen, Änderung in Hauptzweig einfließen lassen und Adaption des Produktes auf Hautpzweig der Komponenten ausführen.&lt;br /&gt;
&lt;br /&gt;
===Side branches===&lt;br /&gt;
less experience&lt;br /&gt;
&lt;br /&gt;
 bzr checkout ../masterlocation . -r REVNR&lt;br /&gt;
&lt;br /&gt;
Gets a part of trunk untio REVNR. It is similar &lt;br /&gt;
 &lt;br /&gt;
  bzr revert -r REVNR&lt;br /&gt;
&lt;br /&gt;
What is the difference???&lt;br /&gt;
&lt;br /&gt;
  bzr update ../masterlocation .&lt;br /&gt;
&lt;br /&gt;
This copies all files in the current dir. It seems to destroy the older-revision side branch (?)&lt;br /&gt;
&lt;br /&gt;
Is there a possibility to checkin changes based on a older revision, without any merge. Only the changed files based on the older revision should be stored in the bazaar repositiory - to compare with other versions or look for changes later. Background: Changing of some source files to bugfix an older software. The reason is not develop and merge.&lt;br /&gt;
&lt;br /&gt;
The workflow of develop and bugfix in a decentralized team is explained in&lt;br /&gt;
* [[http://doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches.html doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches]].  &lt;br /&gt;
&lt;br /&gt;
But this is not the problem of side branches, more the problem of development in team.&lt;br /&gt;
&lt;br /&gt;
'''An side glance to git''':&lt;br /&gt;
&lt;br /&gt;
 $ git branch bugfix &lt;br /&gt;
&lt;br /&gt;
creates a branch named 'bugfix' in the same only one repository. It is a branch with the same revision as the current one.&lt;br /&gt;
&lt;br /&gt;
 $ git checkout bugfix &lt;br /&gt;
now switches to the named branch.&lt;br /&gt;
&lt;br /&gt;
 $ git reset -q COMMITNR&lt;br /&gt;
&lt;br /&gt;
This moves the current revision of the current branch (it is 'bugfix' to a older revision. COMMITNR is the hash number of any commit, see git log&lt;br /&gt;
&lt;br /&gt;
 $ git checkout . &lt;br /&gt;
&lt;br /&gt;
resynchronized all files of the selected revision. &lt;br /&gt;
&lt;br /&gt;
...changing any files and &lt;br /&gt;
&lt;br /&gt;
 $ git commit&lt;br /&gt;
&lt;br /&gt;
builds a side branch in the repository (archive).&lt;br /&gt;
&lt;br /&gt;
Now a switch to another branch and its revision is possible in the same sandbox to work with it:&lt;br /&gt;
&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
 &lt;br /&gt;
now switches back to this named branch and resynchronizes all files. Work with it, commit etc.&lt;br /&gt;
&lt;br /&gt;
If there should be worked only at one side branch to any time, and be worked at another side branch to another time, then only one sandbox is necessary. You can switch between the branches. The files are changed, all files are stored in the git archive.&lt;br /&gt;
&lt;br /&gt;
If there should be worked with more as one side branches to the same time, a copy of the git archive is necessary. The archive and the files should be stored at different places on the hard disk, or at more as one computer etc. It isn't recommended to use the same git archive, may be with an symbolic link in linux. The disadvantage is: The git archive knows the current branch, which was selected with 'checkout'. If you want to use only one archive but more as one sandbox for the files, you can have a symbolic link in the sandboxes to the same archive. But then you have to switch between the side-branches before any status, commit etc. action are done in one of the sandboxes. But be attentive to your files. You may overwrite they if you are careless. You can't do that at the same time, maybe more as one people in network. It will be confused if they are work concurrently.&lt;br /&gt;
&lt;br /&gt;
I haven't test yet, but it shouldn't a problem to merge the more as one git archives without conflicts, if only one archive has changed only one side branch.&lt;br /&gt;
&lt;br /&gt;
[[http://www.vishia.org/SwEng/pictures/git-side-branch-example.jpg Image: example side branches in git]]  &lt;br /&gt;
&lt;br /&gt;
'''Now back to bazaar''':&lt;br /&gt;
&lt;br /&gt;
John A Meinel proposed the following answer: &lt;br /&gt;
&lt;br /&gt;
If you want to commit new changes based on an older revision, you generally want to start a new branch. So something like &lt;br /&gt;
&lt;br /&gt;
 bzr branch master feature -r OLD &lt;br /&gt;
 cd feature &lt;br /&gt;
 bzr commit &lt;br /&gt;
&lt;br /&gt;
If you are using a checkout you can do &lt;br /&gt;
&lt;br /&gt;
 cd checkout &lt;br /&gt;
 bzr branch --switch -r OLD ../master ../feature &lt;br /&gt;
&lt;br /&gt;
TODO test&lt;/div&gt;</description>
			<pubDate>Fri, 09 Sep 2011 08:25:36 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Bazaar-Notes</comments>		</item>
		<item>
			<title>Bazaar-Notes</title>
			<link>http://72.14.177.54/java4c/Bazaar-Notes</link>
			<description>&lt;p&gt;Admin:&amp;#32;/* Mehrere Repositories für ein Produkt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;@ident=Bazaar_notes&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [[Bazaar-guide]]: a guide to use Bazaar.&lt;br /&gt;
&lt;br /&gt;
This size is in german, because it is discussed in a german team. It will be presented in english in the future. TODO&lt;br /&gt;
&lt;br /&gt;
==Kurzer Abriss, Arbeit mit MKSSI, git, mercurial, Bazaar==&lt;br /&gt;
&lt;br /&gt;
Hartmut: MKSSI ist seit über 10 Jahren bei mir in Gebrauch.&lt;br /&gt;
* Nur auf Arbeit, zentrale Administration, &lt;br /&gt;
* Die MKSSI-Software wird normalerweise nicht ständig updated. Das Arbeiten ist nicht sehr schnell, eher etwas für ordentliche Pflege.&lt;br /&gt;
* Wird gemacht, für die Versionen, die herausgegeben werden. Nicht für stündliche kleine Änderungen. Da wäre der Arbeitsaufwand zu hoch.&lt;br /&gt;
&lt;br /&gt;
Hartmut: git war das erste der 'dritten Generation' für mich.&lt;br /&gt;
* Geht ganz gut, init commit, alles ganz einfach&lt;br /&gt;
* Nachschauen der Änderungen: Hier ist die GUI (gitk) nicht sehr bedienerfreundlich. Die schnelle Tastaturbedienung ist mangelhaft, der Tastaturfokus ist im falschen Teilfenster. Immer mit Maus schieben ...&lt;br /&gt;
* Linux-like cmdline-Bedienung auf Windows-PC ist für mich eher interessant. &lt;br /&gt;
&lt;br /&gt;
Hartmut: mercurial - ähnlich wie git, nur eher für windows, eigentlich sehr ähnlich git.&lt;br /&gt;
&lt;br /&gt;
Hartmut: Bazaar gefällt mir persönlich wegen der GUI besser. &lt;br /&gt;
&lt;br /&gt;
Hartmut: Alle drei Systeme sind aber funktionell eher ähnlich. Ich pflege Quellen in Bazaar, um sie dann auch in hg zu committen, mit selbigem commit-Text wie in Bazaar zuvor zusammengestellt. Das ist nur ein Aufruf. Ein Hg-Archiv beispielsweise für CRuntimeJavalike liegt auf [[https://bitbucket.org/jchartmut/cruntimejavalike bitbucket.org/jchartmut/cruntimejavalike]]. Hg deshalb, weil die bitbucket-Seite nur hg unterstützt. Der Aufwand, in hg doppelt zu pflegen, ist kaum erhebenswert.  &lt;br /&gt;
&lt;br /&gt;
;Commit-Text zusammenstellen&lt;br /&gt;
&lt;br /&gt;
:Vorderhand geht es beim Commit-text darum: Was leistet diese Version insgesamt, unterschied zur Vorversion. In der Zweiten Linie geht es aber um die Änderung in den einzelnen Files. &lt;br /&gt;
&lt;br /&gt;
:Sind im Commit sehr viele Files enthalten, dann handelt es sich meist um das Ergebnis eines Refactoring wegen einer Änderung. Solche Änderungen brauchen in den Quellfiles nicht vermerkt werden, zuviel Aufwand, uninteressant.&lt;br /&gt;
&lt;br /&gt;
:Sind dagegen wenige Files geändert, dann lag meist auch eine Änderung der Funktionalität vor. Diese sollte unabhängig vom Commit in den Quellfiles notiert werden. Hier hilft aber die Differenzanzeige, um während des Commit die Änderungen in den Files zu vermerken. Man kann einen passenden Commit-Text zusammenstellen, dabei die Änderung der Einzelfiles betrachten und dabei in den Einzelfiles Änderungen notieren (log des Files).&lt;br /&gt;
&lt;br /&gt;
:Ein automatisches Eintragen der Änderung in den Files aus dem checkin-Textes aus der Arbeit mit dem Source-Integrity-System produziert meist Einträge in den Files, die die Änderungen schlecht abbilden. Das liegt daran, weil der Arbeitsaufwand für jeden Einzelfile zu hoch ist. Dieses automatische Eintragen ist aber eine häufig verwendete oder voreingestellte Methode bei MKSSI &amp;amp; co.&lt;br /&gt;
&lt;br /&gt;
: Der Arbeitsaufwand bei manuellem Eintragen in den File ist deshalb bei Bazaar geringer, weil&lt;br /&gt;
:* Es gibt eine schnelle Übersicht, welche Files betroffen sind. Einfacher Knopfdruck für Viewdiff. Man kann schnell auswählen, bei welchen Files ggf. gleiche Einträge überhaupt notwendig sind. Nicht bei allen geänderten.&lt;br /&gt;
:* Mit den Files, die keine wesentlichen Änderungen enthalten sondern nur Anpassungen an Änderungen anderer Files, braucht man sich also gar nicht beschäftigen. &lt;br /&gt;
:* Die Änderung im File eingetragen und per Zwischenablage auch im Commit-Text abgelegt ist dann eigentlich nur einmaliger Aufwand, nicht zweimal.&lt;br /&gt;
:* Wenn es wesentliche Änderungen sind, dann ist die Beschreibung der Änderung auch ein schöpferischer und nicht formeller Akt. Dann lohnt es sich auch, die entsprechend notwendige Zeit aufzubringen. Möglicherweise wird man bei der Änderungsbeschreibung im File auch noch weitere dabei entdeckte Pflegekorrekturen anbringen, die insgesamt die Quelle weiter aufwerten. Dann hat es sich sowieso gelohnt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Source Content Management oder hart archivieren? Nur Quellen im SCM?==&lt;br /&gt;
&lt;br /&gt;
Eine harte Archivierung ist das Verpacken der Files auf einem Datenträger. Da das Zip-format sich als langjährig beständig erwiesen hat, kann man ganze File-Bäume zippen und irgendwo aufheben.&lt;br /&gt;
&lt;br /&gt;
Nachteil: Keine Unterstützung für Diff-View außer auspacken und mit einem Diff-tool vergleichen. Der Total-Commander eignet sich dazu allerdings recht gut, da er in beiden Paneelen in zip-Archive tief eintauchen kann.&lt;br /&gt;
&lt;br /&gt;
Vorteil: Unabhängig von einem Tool, die Files einer Version sind zusammengebunden einfach da. Es hat sich schon oft als günstig erwiesen, lange Jahre zurückliegende Files nicht mit den damaligen Tools aufrollen zu müssen sondern einfach entzippen.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil für die Langjährigkeit sollte bedacht werden.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Ab und zu zippen und wegpacken, mindestens bei wichtigen Releaseständen. Aber unnütze zipfiles auch mal löschen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Für akutelle Softwareentwicklung jedenfalls ein Source-Integrity-Tool nutzen, Zippen nur zusätzlich.&lt;br /&gt;
&lt;br /&gt;
===Verzeichnissstuktur-Rückschluss===&lt;br /&gt;
&lt;br /&gt;
Sowohl für das Zippen als auch für Sourcenpflege, Sourcenaustausch usw. liegt der tatsächliche Umfang von Sources insgesamt meist in einem Bereich von wenigen Megabyte. Damit ist der Datenaustausch mindestens erleichtert. Wenn man in die selbe Verzeichnisstruktur in der Quellen liegen noch hineintue:&lt;br /&gt;
* Objects&lt;br /&gt;
* erzeugte executable und umfangreiche Datenbasis-Files (Visual Studio ncb-Files und dergleichen)&lt;br /&gt;
* logfiles, Output-Files beim Testen&lt;br /&gt;
* alte Archive (zips)&lt;br /&gt;
&lt;br /&gt;
dann springt der Umfang des Verzeichnisbausms von wenigen Megabyte ganz schnell auf -zig Megabyte. Das Problem merkt man&lt;br /&gt;
* beim zippen (ganz schnell mal ablegen zum späteren Vergleich)&lt;br /&gt;
* beim Vergleichen (alle Obj erscheinen als geändert, alles rot, erst mal schaun was das ist)&lt;br /&gt;
* bei der Pflege der Sources in einem SM-system (Source Management): viele nicht erfasste files: Sind die wichtig? Ach, sind nur Obj, doch ein wichtige wird übersehen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Möglichst Sources von Testfiles und Executables trennen. Die wenigen Files, die nicht trennbar sind (weil die Tools sie ins aktuelle Verzeichnis legen), in einer ignore-Liste erfassen, ggf. beim zippen ausschließen usw. Sind es wenige, dann sind sie verwaltbar&lt;br /&gt;
* Object-Files auf einem tmp-Ordner speichern&lt;br /&gt;
* Generierergebnisse neben dem Source-Baum speichern.&lt;br /&gt;
&lt;br /&gt;
===Archivieren von Executables===&lt;br /&gt;
Aus oben genannten Gründen sollten die Libs und Executables ''nicht'' mit den Sources im SM gemischt werden.&lt;br /&gt;
* Die libs und executables könnten einerseits immer aus den Sources generiert werden (wenn alles richtig ist)&lt;br /&gt;
* Die libs und executables sind nicht vergleichbar mit üblichen diffs.&lt;br /&gt;
* Die libs und executables sind im Code-Umfang zu hoch.&lt;br /&gt;
&lt;br /&gt;
Es ist aber wichtig, libs und exe im Zusammenhang mit einem Checkpoint der Sources zu speichern.&lt;br /&gt;
* Als Auslieferungsstand&lt;br /&gt;
* Als wichtigen Teststand für Rückrüsten, möglicherweise ein Kandidat für Auslieferung.&lt;br /&gt;
&lt;br /&gt;
Lösung:&lt;br /&gt;
* Beim committen eines guten Standes, der angetestet ist, ein kleines batch laufen lassen, das die exes lokal kopiert mit Datumskennzeichnung.&lt;br /&gt;
* Damit sind mehrere exes mit Datumsverbindung zum commit lokal vorhanden. Es kann getestet werden.&lt;br /&gt;
* '''Auslieferung: Executables und ggf. libs als zip abspeichern''',, siehe oben. Dabei auf den Stand zugreifen, der vorher lokal kopiert wurde und garantiert aus den Sources, die committed wurden, erstellt wurde.&lt;br /&gt;
* Nur bei '''Master-Releases''', die entgültig ausgeliefert werden, sollte folgeder Aufwand getrieben werden: Nach erfolgreichem Test die Quellen auf Produktgenerierungsrechner von anderer Person auschecken, neu compilieren, neues Generat erstellen und nochmals testen. Diese Vorgehensweise sichert die Konsistenz der Quellen mit dem Generat und dürfte bei Auslieferungen wichtig sein, dauert aber in der täglichen Fortschrittsarbeit einfach zu lange.&lt;br /&gt;
&lt;br /&gt;
==More as one Repository for one product==&lt;br /&gt;
@ident=multiBzr&lt;br /&gt;
&lt;br /&gt;
;Products with more as one components.&lt;br /&gt;
&lt;br /&gt;
:Products are build with more as one components. Any component should be independent from the concretely product, tested as 'component' and may be used in more as one product. &lt;br /&gt;
&lt;br /&gt;
:Conclusion: Do not mix sources, separate it. Therefore any component needs its own bzr archive. &lt;br /&gt;
&lt;br /&gt;
;Sources of components should be located in a subdirectory of the product source tree. It is helpfull to use sub-directories to keep tidiness.&lt;br /&gt;
&lt;br /&gt;
:In linux the sub directory may be a symbolic link. It means, the sources are located anywhere other in the file tree really and they can be maintained outside of the products source tree. In windows a real copy is necessary. But note, that a tool can often gotten the sources from any pathes in the file tree. It is a problem of absolute pathes versus a local sandbox.&lt;br /&gt;
&lt;br /&gt;
:Conclusion: The .bzr repositiory of a component should be located in a sub directory of the product source tree.&lt;br /&gt;
&lt;br /&gt;
:The name of the sub directory should, but doesn't need be identical with the name of the component.&lt;br /&gt;
&lt;br /&gt;
;Getting of source tree of a component, getting its bzr archive&lt;br /&gt;
&lt;br /&gt;
To get the bzr repository for a component of a product, use a simple batch or script file inside the product file tree in that directory, where the components root directory should be stored.&lt;br /&gt;
&lt;br /&gt;
  srcJava_Zbnf/             ..... This is the components directory, where its srcJava_Zbnf/.bzr should be located.&lt;br /&gt;
  getBzr_srcJava_Zbnf.bat   ..... This is the batch file to get the bzr archive of the component.&lt;br /&gt;
&lt;br /&gt;
The batch file contains the simple line:&lt;br /&gt;
&lt;br /&gt;
  bzrGetVersion srcJava_Zbnf 59&lt;br /&gt;
&lt;br /&gt;
This line should be kept simple and independent of any operation system. Note, that the batchfile works under linux too, if it is set 'executable'. The batchfile calls another script, 'bzrGetVersion' and names the storing directory and the requested version. &lt;br /&gt;
&lt;br /&gt;
The batchfile should be able to locate in the PATH of the computer. It is a thing of installation, not a thing of the designated sources. It contains - for windows - and should be adapted to the concretely conditions at the PC-installation:&lt;br /&gt;
&lt;br /&gt;
 @echo off&lt;br /&gt;
 REM How to get a component's sources:&lt;br /&gt;
 REM The sources are contained in an bzr archive.&lt;br /&gt;
 REM The bzr archive is an distributed repository. &lt;br /&gt;
 REM An archive can exist as a copy on several places, &lt;br /&gt;
 REM for example at a external hard disk or in network or as a local copy in another drive. &lt;br /&gt;
 ::&lt;br /&gt;
 REM This is the path to all archives for this computer, correct it if necessary:&lt;br /&gt;
 set BZR_ARCHIVEPATH=D:/Bzr&lt;br /&gt;
 ::&lt;br /&gt;
 REM The batch renames the current directory if it is existing yet:&lt;br /&gt;
 if not exist %1 goto :noCurrent &lt;br /&gt;
   if exist %1.old rmdir /S/Q %1.old&lt;br /&gt;
   if exist %1.old goto :nodelOld  &lt;br /&gt;
   ren %1 %1.old&lt;br /&gt;
   if exist %1 goto :noRename&lt;br /&gt;
 :noCurrent&lt;br /&gt;
 ::&lt;br /&gt;
 REM copy the bzr archive and resynchronize all members with the required revision&lt;br /&gt;
 echo on&lt;br /&gt;
 bzr checkout %BZR_ARCHIVEPATH%/%1 %1 -r %2&lt;br /&gt;
 @echo off&lt;br /&gt;
 if not exist %1 goto :noBzr&lt;br /&gt;
 goto :ende&lt;br /&gt;
 ::&lt;br /&gt;
 :noRename&lt;br /&gt;
   echo can't rename %1 to %1.old. It may be used yet. Do it manually!&lt;br /&gt;
   pause&lt;br /&gt;
   goto :ende&lt;br /&gt;
 ::&lt;br /&gt;
 :nodelOld&lt;br /&gt;
   echo can't delete %1.old. It may be used yet. Do it manually!&lt;br /&gt;
   pause &lt;br /&gt;
 goto :ende&lt;br /&gt;
 ::&lt;br /&gt;
 :noBzr&lt;br /&gt;
   echo The  bzr archive is not pulled. The version may be faulty or the source path of bzr does not exist.&lt;br /&gt;
   echo See error messages above.&lt;br /&gt;
   pause&lt;br /&gt;
 :ende&lt;br /&gt;
 exit /B&lt;br /&gt;
&lt;br /&gt;
If you follow the command statements, you can see that an existing directory is kept, of found, but the directory of the component is get newly anytime. It assumes that all bzr archives are located in one directory in the file tree, which can be an external disk too or an network path. See 'BZR_ARCHIVEPATH'. &lt;br /&gt;
&lt;br /&gt;
The content of the archive will be cloned with the 'bzr checkout' command. The files are resynchronzed therefore. An independent working with the files and the cloned archive is possible, if necessary. The working can be pushed to its parent later using 'bzr push', 'bzr merge' etc. But in most cases only the resynchronized version of files are need.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Produkte aus einem Repository==&lt;br /&gt;
Das große Thema ist Wiederverwendung (Reuse). Häufig zu Beobachten: Reuse besteht aus copy'n paste and change. Die Quellen wandern also irgendwo anders hin, bzgl SCM auch für den einzelnen besser zu beherrschen - man muss sich nur mit dem beschäftigen, was man selbst hat.&lt;br /&gt;
&lt;br /&gt;
Das ist keine wirkliche Wiederverwendung. Der wirkliche Vorteil des reuse geht dabei verloren:&lt;br /&gt;
* Fehler, die in Produkten festgestellt werden, werden in den jeweiligen Modulen korrigiert und sind dann automatisch auch für andere Produkte mit korrigiert, obwohl sie dort ggf. noch gar nicht aufgefallen sind.&lt;br /&gt;
&lt;br /&gt;
Für true-reuse ist es notwendig, die Software-Module so zu bauen, dass sie '''unverändert''' in verschiedenen Produkten verwendbar sind und das Änderungen für alle Produkte nutzbar sind. Das ist eine Frage der Schnittstellen. Die Schnittstellen sind viel wichtiger als die innere Funktionalität. Letztere kann man immer noch verbessern. Schnittstellenänderungen sind kritisch. - Andererseits sind Schnittstellenänderungen auch verträglich, wenn sie formell adaptiert werden können. &lt;br /&gt;
&lt;br /&gt;
Ein shared-Repository in bazaar scheint die Lösung zu bieten, aus einem recht großen Quellenumfang für verschiedene Komponenten verschiedene Quellen herauslösen zu können. Die Komponenten haben selbe gemeinsame Quellen, ggf. in verschiedenen Revisionen, die aber immer abgeglichen werden können sollten. Die Komponenten sind dann Basis für ein Produkt. Komponenten existieren in Form von libs oder jars in Java und können eigenständig getestet werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Quellen           Komponenten       Produkte&lt;br /&gt;
  viele        ===&amp;gt; weniger      ===&amp;gt; aus Komponenten&lt;br /&gt;
  verschiedene      überschaubar      und Produkt-spezial-Quellen&lt;br /&gt;
                                      gebaut.&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert shared-Repository als zentraler Bezug - bin beim testen. (Hartmut)&lt;br /&gt;
==Zentrale Ablage für Repositories==&lt;br /&gt;
@ident=centralRepos&lt;br /&gt;
&lt;br /&gt;
Man kann immer und überall Repositories haben. Behält man den überblick und synchronisiert diese gegenseitig (push, pull), dann gibt es auch nicht zuviele Seitenzweige.&lt;br /&gt;
&lt;br /&gt;
Jedoch, arbeiten viele Leute mit den Repositories, auch weniger eingeweihte, einfache Nutzer, anderes Problem Archivierung, langjähriges aufheben: Dann sollte an einer definierten Stelle das Master-Repository stehen. Jeder Quellenbearbeiter hat die Pflicht, sich mit dem Master-Repository abzustimmen, also seine Änderungen zu pushen oder von dort zu pullen. Gegebenenfalls sollte eine Person mit der Pflege des Master-Repositories beauftragt sein. Mindestens bei Releaseständen muss diese Person dort bereinigend eingreifen.&lt;br /&gt;
&lt;br /&gt;
===Creating one shared repository in the local space===&lt;br /&gt;
The ''local space'' means any external hard disk, network folder or such which is owned by one person, by me. It is my local space, which can be used from some more people in my direct environment.&lt;br /&gt;
&lt;br /&gt;
For any component of sources one shared repository should be created one time. On one sub directory per component: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Shared repository''. An existing plain branch can be pushed to them.&lt;br /&gt;
&lt;br /&gt;
===Creating a branch for working===&lt;br /&gt;
&lt;br /&gt;
* Create a new plain branch at the working position: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Plain branch''.&lt;br /&gt;
* Pull from a shared repositiory: ''Button Pull, select the shared repository, select a branch.&lt;br /&gt;
** If there are some files already, create the branch at a new position and then move .bzr subdir.&lt;br /&gt;
&lt;br /&gt;
==Branches und dessen Auflösung==&lt;br /&gt;
@ident=.branch&lt;br /&gt;
&lt;br /&gt;
;Viele Seitenzweige wegen unterschiedlichen Korrekturen&lt;br /&gt;
&lt;br /&gt;
:Man kann sich auf den Standpunkt stellen, bei Korrekturen für kundenrelevante Software jeweils nur das aufgetretene Fehlerbild zu behandeln, alle anderen Softwareteile unverändert zu lassen. (''Do not touch a running system''). Das ist eine weit verbreitete Vorgehensweise. Folge sind dann sehr viele Seitezweige, die kaum mehr zusammenfließen.&lt;br /&gt;
&lt;br /&gt;
: Primär ist diese Vorgehensweise richtig.&lt;br /&gt;
&lt;br /&gt;
: Es zeigt sich aber, dass eine Änderung in Quellen, auch Restrukturierung, häufig zwar Nacharbeiten erforderlich macht. Diese Nacharbeiten sind aber formal abhandelbar. Man braucht nicht an jeder Stelle einer notwendigen Adaption an geänderte Quellenstände nachzudenken sondern muss nur den Compiler befragen. Kommt keine Fehlermeldung, ist alles in Ordnung. Eine Fehlermeldung soll mit formellen anschauen von Aufrufargumenttypen usw. behebbar sein, ohne dass man in die eigentliche Funktionalität einsteigt. Ist eine solche Nacharbeit möglich, dann kostet diese nur die Zeit der Pflege der Quellen, keine extra Testzeit. Zudem kann die Quellenpflege von jemanden ausgeführt werden, der zwar sehr gute Kenntnisse von Quellen und COmpiler hat, aber keine Tiefenkenntnis für die jeweilige Anwendung haben braucht. Man kann also delegieren.&lt;br /&gt;
&lt;br /&gt;
: In diesem Sinn ist eine Adaption eines Produktes an veränderte Quellen der Komponenten möglich und zweckmäßig. Mann kann dann eher an einem Hauptzweig arbeiten.&lt;br /&gt;
&lt;br /&gt;
: Schlussfolgerung: Schnelle Änderungen -&amp;gt;Seitenzweig, Auflösen dessen, Änderung in Hauptzweig einfließen lassen und Adaption des Produktes auf Hautpzweig der Komponenten ausführen.&lt;br /&gt;
&lt;br /&gt;
===Side branches===&lt;br /&gt;
less experience&lt;br /&gt;
&lt;br /&gt;
 bzr checkout ../masterlocation . -r REVNR&lt;br /&gt;
&lt;br /&gt;
Gets a part of trunk untio REVNR. It is similar &lt;br /&gt;
 &lt;br /&gt;
  bzr revert -r REVNR&lt;br /&gt;
&lt;br /&gt;
What is the difference???&lt;br /&gt;
&lt;br /&gt;
  bzr update ../masterlocation .&lt;br /&gt;
&lt;br /&gt;
This copies all files in the current dir. It seems to destroy the older-revision side branch (?)&lt;br /&gt;
&lt;br /&gt;
Is there a possibility to checkin changes based on a older revision, without any merge. Only the changed files based on the older revision should be stored in the bazaar repositiory - to compare with other versions or look for changes later. Background: Changing of some source files to bugfix an older software. The reason is not develop and merge.&lt;br /&gt;
&lt;br /&gt;
The workflow of develop and bugfix in a decentralized team is explained in&lt;br /&gt;
* [[http://doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches.html doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches]].  &lt;br /&gt;
&lt;br /&gt;
But this is not the problem of side branches, more the problem of development in team.&lt;br /&gt;
&lt;br /&gt;
'''An side glance to git''':&lt;br /&gt;
&lt;br /&gt;
 $ git branch bugfix &lt;br /&gt;
&lt;br /&gt;
creates a branch named 'bugfix' in the same only one repository. It is a branch with the same revision as the current one.&lt;br /&gt;
&lt;br /&gt;
 $ git checkout bugfix &lt;br /&gt;
now switches to the named branch.&lt;br /&gt;
&lt;br /&gt;
 $ git reset -q COMMITNR&lt;br /&gt;
&lt;br /&gt;
This moves the current revision of the current branch (it is 'bugfix' to a older revision. COMMITNR is the hash number of any commit, see git log&lt;br /&gt;
&lt;br /&gt;
 $ git checkout . &lt;br /&gt;
&lt;br /&gt;
resynchronized all files of the selected revision. &lt;br /&gt;
&lt;br /&gt;
...changing any files and &lt;br /&gt;
&lt;br /&gt;
 $ git commit&lt;br /&gt;
&lt;br /&gt;
builds a side branch in the repository (archive).&lt;br /&gt;
&lt;br /&gt;
Now a switch to another branch and its revision is possible in the same sandbox to work with it:&lt;br /&gt;
&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
 &lt;br /&gt;
now switches back to this named branch and resynchronizes all files. Work with it, commit etc.&lt;br /&gt;
&lt;br /&gt;
If there should be worked only at one side branch to any time, and be worked at another side branch to another time, then only one sandbox is necessary. You can switch between the branches. The files are changed, all files are stored in the git archive.&lt;br /&gt;
&lt;br /&gt;
If there should be worked with more as one side branches to the same time, a copy of the git archive is necessary. The archive and the files should be stored at different places on the hard disk, or at more as one computer etc. It isn't recommended to use the same git archive, may be with an symbolic link in linux. The disadvantage is: The git archive knows the current branch, which was selected with 'checkout'. If you want to use only one archive but more as one sandbox for the files, you can have a symbolic link in the sandboxes to the same archive. But then you have to switch between the side-branches before any status, commit etc. action are done in one of the sandboxes. But be attentive to your files. You may overwrite they if you are careless. You can't do that at the same time, maybe more as one people in network. It will be confused if they are work concurrently.&lt;br /&gt;
&lt;br /&gt;
I haven't test yet, but it shouldn't a problem to merge the more as one git archives without conflicts, if only one archive has changed only one side branch.&lt;br /&gt;
&lt;br /&gt;
[[http://www.vishia.org/SwEng/pictures/git-side-branch-example.jpg Image: example side branches in git]]  &lt;br /&gt;
&lt;br /&gt;
'''Now back to bazaar''':&lt;br /&gt;
&lt;br /&gt;
John A Meinel proposed the following answer: &lt;br /&gt;
&lt;br /&gt;
If you want to commit new changes based on an older revision, you generally want to start a new branch. So something like &lt;br /&gt;
&lt;br /&gt;
 bzr branch master feature -r OLD &lt;br /&gt;
 cd feature &lt;br /&gt;
 bzr commit &lt;br /&gt;
&lt;br /&gt;
If you are using a checkout you can do &lt;br /&gt;
&lt;br /&gt;
 cd checkout &lt;br /&gt;
 bzr branch --switch -r OLD ../master ../feature &lt;br /&gt;
&lt;br /&gt;
TODO test&lt;/div&gt;</description>
			<pubDate>Fri, 09 Sep 2011 08:22:47 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Bazaar-Notes</comments>		</item>
		<item>
			<title>Bazaar-Notes</title>
			<link>http://72.14.177.54/java4c/Bazaar-Notes</link>
			<description>&lt;p&gt;Admin:&amp;#32;/* Side branches */ Experience with image on foreign internet page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;@ident=Bazaar_notes&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [[Bazaar-guide]]: a guide to use Bazaar.&lt;br /&gt;
&lt;br /&gt;
This size is in german, because it is discussed in a german team. It will be presented in english in the future. TODO&lt;br /&gt;
&lt;br /&gt;
==Kurzer Abriss, Arbeit mit MKSSI, git, mercurial, Bazaar==&lt;br /&gt;
&lt;br /&gt;
Hartmut: MKSSI ist seit über 10 Jahren bei mir in Gebrauch.&lt;br /&gt;
* Nur auf Arbeit, zentrale Administration, &lt;br /&gt;
* Die MKSSI-Software wird normalerweise nicht ständig updated. Das Arbeiten ist nicht sehr schnell, eher etwas für ordentliche Pflege.&lt;br /&gt;
* Wird gemacht, für die Versionen, die herausgegeben werden. Nicht für stündliche kleine Änderungen. Da wäre der Arbeitsaufwand zu hoch.&lt;br /&gt;
&lt;br /&gt;
Hartmut: git war das erste der 'dritten Generation' für mich.&lt;br /&gt;
* Geht ganz gut, init commit, alles ganz einfach&lt;br /&gt;
* Nachschauen der Änderungen: Hier ist die GUI (gitk) nicht sehr bedienerfreundlich. Die schnelle Tastaturbedienung ist mangelhaft, der Tastaturfokus ist im falschen Teilfenster. Immer mit Maus schieben ...&lt;br /&gt;
* Linux-like cmdline-Bedienung auf Windows-PC ist für mich eher interessant. &lt;br /&gt;
&lt;br /&gt;
Hartmut: mercurial - ähnlich wie git, nur eher für windows, eigentlich sehr ähnlich git.&lt;br /&gt;
&lt;br /&gt;
Hartmut: Bazaar gefällt mir persönlich wegen der GUI besser. &lt;br /&gt;
&lt;br /&gt;
Hartmut: Alle drei Systeme sind aber funktionell eher ähnlich. Ich pflege Quellen in Bazaar, um sie dann auch in hg zu committen, mit selbigem commit-Text wie in Bazaar zuvor zusammengestellt. Das ist nur ein Aufruf. Ein Hg-Archiv beispielsweise für CRuntimeJavalike liegt auf [[https://bitbucket.org/jchartmut/cruntimejavalike bitbucket.org/jchartmut/cruntimejavalike]]. Hg deshalb, weil die bitbucket-Seite nur hg unterstützt. Der Aufwand, in hg doppelt zu pflegen, ist kaum erhebenswert.  &lt;br /&gt;
&lt;br /&gt;
;Commit-Text zusammenstellen&lt;br /&gt;
&lt;br /&gt;
:Vorderhand geht es beim Commit-text darum: Was leistet diese Version insgesamt, unterschied zur Vorversion. In der Zweiten Linie geht es aber um die Änderung in den einzelnen Files. &lt;br /&gt;
&lt;br /&gt;
:Sind im Commit sehr viele Files enthalten, dann handelt es sich meist um das Ergebnis eines Refactoring wegen einer Änderung. Solche Änderungen brauchen in den Quellfiles nicht vermerkt werden, zuviel Aufwand, uninteressant.&lt;br /&gt;
&lt;br /&gt;
:Sind dagegen wenige Files geändert, dann lag meist auch eine Änderung der Funktionalität vor. Diese sollte unabhängig vom Commit in den Quellfiles notiert werden. Hier hilft aber die Differenzanzeige, um während des Commit die Änderungen in den Files zu vermerken. Man kann einen passenden Commit-Text zusammenstellen, dabei die Änderung der Einzelfiles betrachten und dabei in den Einzelfiles Änderungen notieren (log des Files).&lt;br /&gt;
&lt;br /&gt;
:Ein automatisches Eintragen der Änderung in den Files aus dem checkin-Textes aus der Arbeit mit dem Source-Integrity-System produziert meist Einträge in den Files, die die Änderungen schlecht abbilden. Das liegt daran, weil der Arbeitsaufwand für jeden Einzelfile zu hoch ist. Dieses automatische Eintragen ist aber eine häufig verwendete oder voreingestellte Methode bei MKSSI &amp;amp; co.&lt;br /&gt;
&lt;br /&gt;
: Der Arbeitsaufwand bei manuellem Eintragen in den File ist deshalb bei Bazaar geringer, weil&lt;br /&gt;
:* Es gibt eine schnelle Übersicht, welche Files betroffen sind. Einfacher Knopfdruck für Viewdiff. Man kann schnell auswählen, bei welchen Files ggf. gleiche Einträge überhaupt notwendig sind. Nicht bei allen geänderten.&lt;br /&gt;
:* Mit den Files, die keine wesentlichen Änderungen enthalten sondern nur Anpassungen an Änderungen anderer Files, braucht man sich also gar nicht beschäftigen. &lt;br /&gt;
:* Die Änderung im File eingetragen und per Zwischenablage auch im Commit-Text abgelegt ist dann eigentlich nur einmaliger Aufwand, nicht zweimal.&lt;br /&gt;
:* Wenn es wesentliche Änderungen sind, dann ist die Beschreibung der Änderung auch ein schöpferischer und nicht formeller Akt. Dann lohnt es sich auch, die entsprechend notwendige Zeit aufzubringen. Möglicherweise wird man bei der Änderungsbeschreibung im File auch noch weitere dabei entdeckte Pflegekorrekturen anbringen, die insgesamt die Quelle weiter aufwerten. Dann hat es sich sowieso gelohnt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Source Content Management oder hart archivieren? Nur Quellen im SCM?==&lt;br /&gt;
&lt;br /&gt;
Eine harte Archivierung ist das Verpacken der Files auf einem Datenträger. Da das Zip-format sich als langjährig beständig erwiesen hat, kann man ganze File-Bäume zippen und irgendwo aufheben.&lt;br /&gt;
&lt;br /&gt;
Nachteil: Keine Unterstützung für Diff-View außer auspacken und mit einem Diff-tool vergleichen. Der Total-Commander eignet sich dazu allerdings recht gut, da er in beiden Paneelen in zip-Archive tief eintauchen kann.&lt;br /&gt;
&lt;br /&gt;
Vorteil: Unabhängig von einem Tool, die Files einer Version sind zusammengebunden einfach da. Es hat sich schon oft als günstig erwiesen, lange Jahre zurückliegende Files nicht mit den damaligen Tools aufrollen zu müssen sondern einfach entzippen.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil für die Langjährigkeit sollte bedacht werden.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Ab und zu zippen und wegpacken, mindestens bei wichtigen Releaseständen. Aber unnütze zipfiles auch mal löschen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Für akutelle Softwareentwicklung jedenfalls ein Source-Integrity-Tool nutzen, Zippen nur zusätzlich.&lt;br /&gt;
&lt;br /&gt;
===Verzeichnissstuktur-Rückschluss===&lt;br /&gt;
&lt;br /&gt;
Sowohl für das Zippen als auch für Sourcenpflege, Sourcenaustausch usw. liegt der tatsächliche Umfang von Sources insgesamt meist in einem Bereich von wenigen Megabyte. Damit ist der Datenaustausch mindestens erleichtert. Wenn man in die selbe Verzeichnisstruktur in der Quellen liegen noch hineintue:&lt;br /&gt;
* Objects&lt;br /&gt;
* erzeugte executable und umfangreiche Datenbasis-Files (Visual Studio ncb-Files und dergleichen)&lt;br /&gt;
* logfiles, Output-Files beim Testen&lt;br /&gt;
* alte Archive (zips)&lt;br /&gt;
&lt;br /&gt;
dann springt der Umfang des Verzeichnisbausms von wenigen Megabyte ganz schnell auf -zig Megabyte. Das Problem merkt man&lt;br /&gt;
* beim zippen (ganz schnell mal ablegen zum späteren Vergleich)&lt;br /&gt;
* beim Vergleichen (alle Obj erscheinen als geändert, alles rot, erst mal schaun was das ist)&lt;br /&gt;
* bei der Pflege der Sources in einem SM-system (Source Management): viele nicht erfasste files: Sind die wichtig? Ach, sind nur Obj, doch ein wichtige wird übersehen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Möglichst Sources von Testfiles und Executables trennen. Die wenigen Files, die nicht trennbar sind (weil die Tools sie ins aktuelle Verzeichnis legen), in einer ignore-Liste erfassen, ggf. beim zippen ausschließen usw. Sind es wenige, dann sind sie verwaltbar&lt;br /&gt;
* Object-Files auf einem tmp-Ordner speichern&lt;br /&gt;
* Generierergebnisse neben dem Source-Baum speichern.&lt;br /&gt;
&lt;br /&gt;
===Archivieren von Executables===&lt;br /&gt;
Aus oben genannten Gründen sollten die Libs und Executables ''nicht'' mit den Sources im SM gemischt werden.&lt;br /&gt;
* Die libs und executables könnten einerseits immer aus den Sources generiert werden (wenn alles richtig ist)&lt;br /&gt;
* Die libs und executables sind nicht vergleichbar mit üblichen diffs.&lt;br /&gt;
* Die libs und executables sind im Code-Umfang zu hoch.&lt;br /&gt;
&lt;br /&gt;
Es ist aber wichtig, libs und exe im Zusammenhang mit einem Checkpoint der Sources zu speichern.&lt;br /&gt;
* Als Auslieferungsstand&lt;br /&gt;
* Als wichtigen Teststand für Rückrüsten, möglicherweise ein Kandidat für Auslieferung.&lt;br /&gt;
&lt;br /&gt;
Lösung:&lt;br /&gt;
* Beim committen eines guten Standes, der angetestet ist, ein kleines batch laufen lassen, das die exes lokal kopiert mit Datumskennzeichnung.&lt;br /&gt;
* Damit sind mehrere exes mit Datumsverbindung zum commit lokal vorhanden. Es kann getestet werden.&lt;br /&gt;
* '''Auslieferung: Executables und ggf. libs als zip abspeichern''',, siehe oben. Dabei auf den Stand zugreifen, der vorher lokal kopiert wurde und garantiert aus den Sources, die committed wurden, erstellt wurde.&lt;br /&gt;
* Nur bei '''Master-Releases''', die entgültig ausgeliefert werden, sollte folgeder Aufwand getrieben werden: Nach erfolgreichem Test die Quellen auf Produktgenerierungsrechner von anderer Person auschecken, neu compilieren, neues Generat erstellen und nochmals testen. Diese Vorgehensweise sichert die Konsistenz der Quellen mit dem Generat und dürfte bei Auslieferungen wichtig sein, dauert aber in der täglichen Fortschrittsarbeit einfach zu lange.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Repositories für ein Produkt==&lt;br /&gt;
@ident=multiBzr&lt;br /&gt;
&lt;br /&gt;
;Produkt aus mehreren Quell-Komponenten&lt;br /&gt;
&lt;br /&gt;
:Produkt (Executable etc.) besteht aus Quellen aus mehreren Projekten (Komponenten).&lt;br /&gt;
Die Quell-Komponenten sind relativ unabhängig und werden an anderer Stelle aus anderen Zusammenhängen ebenfalls gepflegt.&lt;br /&gt;
&lt;br /&gt;
:Schlussfolgerung: Nicht mischen, weil sonst kein Durchblick wo was gepflegt wird.&lt;br /&gt;
Jede Quell-Komponente wird in ihrem eigenem .bzr-repository gepflegt.&lt;br /&gt;
&lt;br /&gt;
;Quell-Komponenten befinden sich im Produkt-Sourcenbaum in jeweils bestimmten Unterverzeichnissen&lt;br /&gt;
&lt;br /&gt;
:Unterverzeichnisordnung ist zweckmäßig, weil damit auch im Produkt-Verzeichnis ordnung herrscht.&lt;br /&gt;
&lt;br /&gt;
:In linux kann dort ein symbolischer Link stehen, d.h. Quellen stehen eigentlich ganz woanders. In Windows ist eine Kopie der Komponenten-Quellen im Produkt-Verzeichnisbaum vorhanden.&lt;br /&gt;
&lt;br /&gt;
: In windows kann aber auch ggf. eine Quellkomponente auch ganz woanders stehen, beispielsweise kann bei Eclipse ein Verzeichnis mit absolutem Pfad von irgendwo dem Projkekt hinzugefügt werden. Das ganze ist eine Sache von Pfaden, die irgendwo definiert sein müssen.&lt;br /&gt;
&lt;br /&gt;
:Schlussfolgerung: Das .bzr-Repository der Quellen der Komponente sollte in dem Unterverzeichnis stehen.&lt;br /&gt;
&lt;br /&gt;
: Folglich hängt der Name des Unterverzeichnisses nicht an der Quellkomponente, kann im Produkt auch beliebig gewählt werden. Folglich kann die Quellkomponente auch irgendwo anders stehen, also kein Unterverzeichnis sondern absoluter Pfad. Der absolute Pfad wird beim editieren/generieren beachtet.&lt;br /&gt;
&lt;br /&gt;
Das spricht insgesamt dafür, ein Produkt aus mehreren Bazaar-Quell-Repositories zusammenzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mehrere Produkte aus einem Repository==&lt;br /&gt;
Das große Thema ist Wiederverwendung (Reuse). Häufig zu Beobachten: Reuse besteht aus copy'n paste and change. Die Quellen wandern also irgendwo anders hin, bzgl SCM auch für den einzelnen besser zu beherrschen - man muss sich nur mit dem beschäftigen, was man selbst hat.&lt;br /&gt;
&lt;br /&gt;
Das ist keine wirkliche Wiederverwendung. Der wirkliche Vorteil des reuse geht dabei verloren:&lt;br /&gt;
* Fehler, die in Produkten festgestellt werden, werden in den jeweiligen Modulen korrigiert und sind dann automatisch auch für andere Produkte mit korrigiert, obwohl sie dort ggf. noch gar nicht aufgefallen sind.&lt;br /&gt;
&lt;br /&gt;
Für true-reuse ist es notwendig, die Software-Module so zu bauen, dass sie '''unverändert''' in verschiedenen Produkten verwendbar sind und das Änderungen für alle Produkte nutzbar sind. Das ist eine Frage der Schnittstellen. Die Schnittstellen sind viel wichtiger als die innere Funktionalität. Letztere kann man immer noch verbessern. Schnittstellenänderungen sind kritisch. - Andererseits sind Schnittstellenänderungen auch verträglich, wenn sie formell adaptiert werden können. &lt;br /&gt;
&lt;br /&gt;
Ein shared-Repository in bazaar scheint die Lösung zu bieten, aus einem recht großen Quellenumfang für verschiedene Komponenten verschiedene Quellen herauslösen zu können. Die Komponenten haben selbe gemeinsame Quellen, ggf. in verschiedenen Revisionen, die aber immer abgeglichen werden können sollten. Die Komponenten sind dann Basis für ein Produkt. Komponenten existieren in Form von libs oder jars in Java und können eigenständig getestet werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Quellen           Komponenten       Produkte&lt;br /&gt;
  viele        ===&amp;gt; weniger      ===&amp;gt; aus Komponenten&lt;br /&gt;
  verschiedene      überschaubar      und Produkt-spezial-Quellen&lt;br /&gt;
                                      gebaut.&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert shared-Repository als zentraler Bezug - bin beim testen. (Hartmut)&lt;br /&gt;
==Zentrale Ablage für Repositories==&lt;br /&gt;
@ident=centralRepos&lt;br /&gt;
&lt;br /&gt;
Man kann immer und überall Repositories haben. Behält man den überblick und synchronisiert diese gegenseitig (push, pull), dann gibt es auch nicht zuviele Seitenzweige.&lt;br /&gt;
&lt;br /&gt;
Jedoch, arbeiten viele Leute mit den Repositories, auch weniger eingeweihte, einfache Nutzer, anderes Problem Archivierung, langjähriges aufheben: Dann sollte an einer definierten Stelle das Master-Repository stehen. Jeder Quellenbearbeiter hat die Pflicht, sich mit dem Master-Repository abzustimmen, also seine Änderungen zu pushen oder von dort zu pullen. Gegebenenfalls sollte eine Person mit der Pflege des Master-Repositories beauftragt sein. Mindestens bei Releaseständen muss diese Person dort bereinigend eingreifen.&lt;br /&gt;
&lt;br /&gt;
===Creating one shared repository in the local space===&lt;br /&gt;
The ''local space'' means any external hard disk, network folder or such which is owned by one person, by me. It is my local space, which can be used from some more people in my direct environment.&lt;br /&gt;
&lt;br /&gt;
For any component of sources one shared repository should be created one time. On one sub directory per component: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Shared repository''. An existing plain branch can be pushed to them.&lt;br /&gt;
&lt;br /&gt;
===Creating a branch for working===&lt;br /&gt;
&lt;br /&gt;
* Create a new plain branch at the working position: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Plain branch''.&lt;br /&gt;
* Pull from a shared repositiory: ''Button Pull, select the shared repository, select a branch.&lt;br /&gt;
** If there are some files already, create the branch at a new position and then move .bzr subdir.&lt;br /&gt;
&lt;br /&gt;
==Branches und dessen Auflösung==&lt;br /&gt;
@ident=.branch&lt;br /&gt;
&lt;br /&gt;
;Viele Seitenzweige wegen unterschiedlichen Korrekturen&lt;br /&gt;
&lt;br /&gt;
:Man kann sich auf den Standpunkt stellen, bei Korrekturen für kundenrelevante Software jeweils nur das aufgetretene Fehlerbild zu behandeln, alle anderen Softwareteile unverändert zu lassen. (''Do not touch a running system''). Das ist eine weit verbreitete Vorgehensweise. Folge sind dann sehr viele Seitezweige, die kaum mehr zusammenfließen.&lt;br /&gt;
&lt;br /&gt;
: Primär ist diese Vorgehensweise richtig.&lt;br /&gt;
&lt;br /&gt;
: Es zeigt sich aber, dass eine Änderung in Quellen, auch Restrukturierung, häufig zwar Nacharbeiten erforderlich macht. Diese Nacharbeiten sind aber formal abhandelbar. Man braucht nicht an jeder Stelle einer notwendigen Adaption an geänderte Quellenstände nachzudenken sondern muss nur den Compiler befragen. Kommt keine Fehlermeldung, ist alles in Ordnung. Eine Fehlermeldung soll mit formellen anschauen von Aufrufargumenttypen usw. behebbar sein, ohne dass man in die eigentliche Funktionalität einsteigt. Ist eine solche Nacharbeit möglich, dann kostet diese nur die Zeit der Pflege der Quellen, keine extra Testzeit. Zudem kann die Quellenpflege von jemanden ausgeführt werden, der zwar sehr gute Kenntnisse von Quellen und COmpiler hat, aber keine Tiefenkenntnis für die jeweilige Anwendung haben braucht. Man kann also delegieren.&lt;br /&gt;
&lt;br /&gt;
: In diesem Sinn ist eine Adaption eines Produktes an veränderte Quellen der Komponenten möglich und zweckmäßig. Mann kann dann eher an einem Hauptzweig arbeiten.&lt;br /&gt;
&lt;br /&gt;
: Schlussfolgerung: Schnelle Änderungen -&amp;gt;Seitenzweig, Auflösen dessen, Änderung in Hauptzweig einfließen lassen und Adaption des Produktes auf Hautpzweig der Komponenten ausführen.&lt;br /&gt;
&lt;br /&gt;
===Side branches===&lt;br /&gt;
less experience&lt;br /&gt;
&lt;br /&gt;
 bzr checkout ../masterlocation . -r REVNR&lt;br /&gt;
&lt;br /&gt;
Gets a part of trunk untio REVNR. It is similar &lt;br /&gt;
 &lt;br /&gt;
  bzr revert -r REVNR&lt;br /&gt;
&lt;br /&gt;
What is the difference???&lt;br /&gt;
&lt;br /&gt;
  bzr update ../masterlocation .&lt;br /&gt;
&lt;br /&gt;
This copies all files in the current dir. It seems to destroy the older-revision side branch (?)&lt;br /&gt;
&lt;br /&gt;
Is there a possibility to checkin changes based on a older revision, without any merge. Only the changed files based on the older revision should be stored in the bazaar repositiory - to compare with other versions or look for changes later. Background: Changing of some source files to bugfix an older software. The reason is not develop and merge.&lt;br /&gt;
&lt;br /&gt;
The workflow of develop and bugfix in a decentralized team is explained in&lt;br /&gt;
* [[http://doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches.html doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches]].  &lt;br /&gt;
&lt;br /&gt;
But this is not the problem of side branches, more the problem of development in team.&lt;br /&gt;
&lt;br /&gt;
'''An side glance to git''':&lt;br /&gt;
&lt;br /&gt;
 $ git branch bugfix &lt;br /&gt;
&lt;br /&gt;
creates a branch named 'bugfix' in the same only one repository. It is a branch with the same revision as the current one.&lt;br /&gt;
&lt;br /&gt;
 $ git checkout bugfix &lt;br /&gt;
now switches to the named branch.&lt;br /&gt;
&lt;br /&gt;
 $ git reset -q COMMITNR&lt;br /&gt;
&lt;br /&gt;
This moves the current revision of the current branch (it is 'bugfix' to a older revision. COMMITNR is the hash number of any commit, see git log&lt;br /&gt;
&lt;br /&gt;
 $ git checkout . &lt;br /&gt;
&lt;br /&gt;
resynchronized all files of the selected revision. &lt;br /&gt;
&lt;br /&gt;
...changing any files and &lt;br /&gt;
&lt;br /&gt;
 $ git commit&lt;br /&gt;
&lt;br /&gt;
builds a side branch in the repository (archive).&lt;br /&gt;
&lt;br /&gt;
Now a switch to another branch and its revision is possible in the same sandbox to work with it:&lt;br /&gt;
&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
 &lt;br /&gt;
now switches back to this named branch and resynchronizes all files. Work with it, commit etc.&lt;br /&gt;
&lt;br /&gt;
If there should be worked only at one side branch to any time, and be worked at another side branch to another time, then only one sandbox is necessary. You can switch between the branches. The files are changed, all files are stored in the git archive.&lt;br /&gt;
&lt;br /&gt;
If there should be worked with more as one side branches to the same time, a copy of the git archive is necessary. The archive and the files should be stored at different places on the hard disk, or at more as one computer etc. It isn't recommended to use the same git archive, may be with an symbolic link in linux. The disadvantage is: The git archive knows the current branch, which was selected with 'checkout'. If you want to use only one archive but more as one sandbox for the files, you can have a symbolic link in the sandboxes to the same archive. But then you have to switch between the side-branches before any status, commit etc. action are done in one of the sandboxes. But be attentive to your files. You may overwrite they if you are careless. You can't do that at the same time, maybe more as one people in network. It will be confused if they are work concurrently.&lt;br /&gt;
&lt;br /&gt;
I haven't test yet, but it shouldn't a problem to merge the more as one git archives without conflicts, if only one archive has changed only one side branch.&lt;br /&gt;
&lt;br /&gt;
[[http://www.vishia.org/SwEng/pictures/git-side-branch-example.jpg Image: example side branches in git]]  &lt;br /&gt;
&lt;br /&gt;
'''Now back to bazaar''':&lt;br /&gt;
&lt;br /&gt;
John A Meinel proposed the following answer: &lt;br /&gt;
&lt;br /&gt;
If you want to commit new changes based on an older revision, you generally want to start a new branch. So something like &lt;br /&gt;
&lt;br /&gt;
 bzr branch master feature -r OLD &lt;br /&gt;
 cd feature &lt;br /&gt;
 bzr commit &lt;br /&gt;
&lt;br /&gt;
If you are using a checkout you can do &lt;br /&gt;
&lt;br /&gt;
 cd checkout &lt;br /&gt;
 bzr branch --switch -r OLD ../master ../feature &lt;br /&gt;
&lt;br /&gt;
TODO test&lt;/div&gt;</description>
			<pubDate>Sat, 06 Aug 2011 06:19:44 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Bazaar-Notes</comments>		</item>
		<item>
			<title>Bazaar-Notes</title>
			<link>http://72.14.177.54/java4c/Bazaar-Notes</link>
			<description>&lt;p&gt;Admin:&amp;#32;test image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;@ident=Bazaar_notes&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [[Bazaar-guide]]: a guide to use Bazaar.&lt;br /&gt;
&lt;br /&gt;
This size is in german, because it is discussed in a german team. It will be presented in english in the future. TODO&lt;br /&gt;
&lt;br /&gt;
==Kurzer Abriss, Arbeit mit MKSSI, git, mercurial, Bazaar==&lt;br /&gt;
&lt;br /&gt;
Hartmut: MKSSI ist seit über 10 Jahren bei mir in Gebrauch.&lt;br /&gt;
* Nur auf Arbeit, zentrale Administration, &lt;br /&gt;
* Die MKSSI-Software wird normalerweise nicht ständig updated. Das Arbeiten ist nicht sehr schnell, eher etwas für ordentliche Pflege.&lt;br /&gt;
* Wird gemacht, für die Versionen, die herausgegeben werden. Nicht für stündliche kleine Änderungen. Da wäre der Arbeitsaufwand zu hoch.&lt;br /&gt;
&lt;br /&gt;
Hartmut: git war das erste der 'dritten Generation' für mich.&lt;br /&gt;
* Geht ganz gut, init commit, alles ganz einfach&lt;br /&gt;
* Nachschauen der Änderungen: Hier ist die GUI (gitk) nicht sehr bedienerfreundlich. Die schnelle Tastaturbedienung ist mangelhaft, der Tastaturfokus ist im falschen Teilfenster. Immer mit Maus schieben ...&lt;br /&gt;
* Linux-like cmdline-Bedienung auf Windows-PC ist für mich eher interessant. &lt;br /&gt;
&lt;br /&gt;
Hartmut: mercurial - ähnlich wie git, nur eher für windows, eigentlich sehr ähnlich git.&lt;br /&gt;
&lt;br /&gt;
Hartmut: Bazaar gefällt mir persönlich wegen der GUI besser. &lt;br /&gt;
&lt;br /&gt;
Hartmut: Alle drei Systeme sind aber funktionell eher ähnlich. Ich pflege Quellen in Bazaar, um sie dann auch in hg zu committen, mit selbigem commit-Text wie in Bazaar zuvor zusammengestellt. Das ist nur ein Aufruf. Ein Hg-Archiv beispielsweise für CRuntimeJavalike liegt auf [[https://bitbucket.org/jchartmut/cruntimejavalike bitbucket.org/jchartmut/cruntimejavalike]]. Hg deshalb, weil die bitbucket-Seite nur hg unterstützt. Der Aufwand, in hg doppelt zu pflegen, ist kaum erhebenswert.  &lt;br /&gt;
&lt;br /&gt;
;Commit-Text zusammenstellen&lt;br /&gt;
&lt;br /&gt;
:Vorderhand geht es beim Commit-text darum: Was leistet diese Version insgesamt, unterschied zur Vorversion. In der Zweiten Linie geht es aber um die Änderung in den einzelnen Files. &lt;br /&gt;
&lt;br /&gt;
:Sind im Commit sehr viele Files enthalten, dann handelt es sich meist um das Ergebnis eines Refactoring wegen einer Änderung. Solche Änderungen brauchen in den Quellfiles nicht vermerkt werden, zuviel Aufwand, uninteressant.&lt;br /&gt;
&lt;br /&gt;
:Sind dagegen wenige Files geändert, dann lag meist auch eine Änderung der Funktionalität vor. Diese sollte unabhängig vom Commit in den Quellfiles notiert werden. Hier hilft aber die Differenzanzeige, um während des Commit die Änderungen in den Files zu vermerken. Man kann einen passenden Commit-Text zusammenstellen, dabei die Änderung der Einzelfiles betrachten und dabei in den Einzelfiles Änderungen notieren (log des Files).&lt;br /&gt;
&lt;br /&gt;
:Ein automatisches Eintragen der Änderung in den Files aus dem checkin-Textes aus der Arbeit mit dem Source-Integrity-System produziert meist Einträge in den Files, die die Änderungen schlecht abbilden. Das liegt daran, weil der Arbeitsaufwand für jeden Einzelfile zu hoch ist. Dieses automatische Eintragen ist aber eine häufig verwendete oder voreingestellte Methode bei MKSSI &amp;amp; co.&lt;br /&gt;
&lt;br /&gt;
: Der Arbeitsaufwand bei manuellem Eintragen in den File ist deshalb bei Bazaar geringer, weil&lt;br /&gt;
:* Es gibt eine schnelle Übersicht, welche Files betroffen sind. Einfacher Knopfdruck für Viewdiff. Man kann schnell auswählen, bei welchen Files ggf. gleiche Einträge überhaupt notwendig sind. Nicht bei allen geänderten.&lt;br /&gt;
:* Mit den Files, die keine wesentlichen Änderungen enthalten sondern nur Anpassungen an Änderungen anderer Files, braucht man sich also gar nicht beschäftigen. &lt;br /&gt;
:* Die Änderung im File eingetragen und per Zwischenablage auch im Commit-Text abgelegt ist dann eigentlich nur einmaliger Aufwand, nicht zweimal.&lt;br /&gt;
:* Wenn es wesentliche Änderungen sind, dann ist die Beschreibung der Änderung auch ein schöpferischer und nicht formeller Akt. Dann lohnt es sich auch, die entsprechend notwendige Zeit aufzubringen. Möglicherweise wird man bei der Änderungsbeschreibung im File auch noch weitere dabei entdeckte Pflegekorrekturen anbringen, die insgesamt die Quelle weiter aufwerten. Dann hat es sich sowieso gelohnt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Source Content Management oder hart archivieren? Nur Quellen im SCM?==&lt;br /&gt;
&lt;br /&gt;
Eine harte Archivierung ist das Verpacken der Files auf einem Datenträger. Da das Zip-format sich als langjährig beständig erwiesen hat, kann man ganze File-Bäume zippen und irgendwo aufheben.&lt;br /&gt;
&lt;br /&gt;
Nachteil: Keine Unterstützung für Diff-View außer auspacken und mit einem Diff-tool vergleichen. Der Total-Commander eignet sich dazu allerdings recht gut, da er in beiden Paneelen in zip-Archive tief eintauchen kann.&lt;br /&gt;
&lt;br /&gt;
Vorteil: Unabhängig von einem Tool, die Files einer Version sind zusammengebunden einfach da. Es hat sich schon oft als günstig erwiesen, lange Jahre zurückliegende Files nicht mit den damaligen Tools aufrollen zu müssen sondern einfach entzippen.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil für die Langjährigkeit sollte bedacht werden.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Ab und zu zippen und wegpacken, mindestens bei wichtigen Releaseständen. Aber unnütze zipfiles auch mal löschen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Für akutelle Softwareentwicklung jedenfalls ein Source-Integrity-Tool nutzen, Zippen nur zusätzlich.&lt;br /&gt;
&lt;br /&gt;
===Verzeichnissstuktur-Rückschluss===&lt;br /&gt;
&lt;br /&gt;
Sowohl für das Zippen als auch für Sourcenpflege, Sourcenaustausch usw. liegt der tatsächliche Umfang von Sources insgesamt meist in einem Bereich von wenigen Megabyte. Damit ist der Datenaustausch mindestens erleichtert. Wenn man in die selbe Verzeichnisstruktur in der Quellen liegen noch hineintue:&lt;br /&gt;
* Objects&lt;br /&gt;
* erzeugte executable und umfangreiche Datenbasis-Files (Visual Studio ncb-Files und dergleichen)&lt;br /&gt;
* logfiles, Output-Files beim Testen&lt;br /&gt;
* alte Archive (zips)&lt;br /&gt;
&lt;br /&gt;
dann springt der Umfang des Verzeichnisbausms von wenigen Megabyte ganz schnell auf -zig Megabyte. Das Problem merkt man&lt;br /&gt;
* beim zippen (ganz schnell mal ablegen zum späteren Vergleich)&lt;br /&gt;
* beim Vergleichen (alle Obj erscheinen als geändert, alles rot, erst mal schaun was das ist)&lt;br /&gt;
* bei der Pflege der Sources in einem SM-system (Source Management): viele nicht erfasste files: Sind die wichtig? Ach, sind nur Obj, doch ein wichtige wird übersehen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Möglichst Sources von Testfiles und Executables trennen. Die wenigen Files, die nicht trennbar sind (weil die Tools sie ins aktuelle Verzeichnis legen), in einer ignore-Liste erfassen, ggf. beim zippen ausschließen usw. Sind es wenige, dann sind sie verwaltbar&lt;br /&gt;
* Object-Files auf einem tmp-Ordner speichern&lt;br /&gt;
* Generierergebnisse neben dem Source-Baum speichern.&lt;br /&gt;
&lt;br /&gt;
===Archivieren von Executables===&lt;br /&gt;
Aus oben genannten Gründen sollten die Libs und Executables ''nicht'' mit den Sources im SM gemischt werden.&lt;br /&gt;
* Die libs und executables könnten einerseits immer aus den Sources generiert werden (wenn alles richtig ist)&lt;br /&gt;
* Die libs und executables sind nicht vergleichbar mit üblichen diffs.&lt;br /&gt;
* Die libs und executables sind im Code-Umfang zu hoch.&lt;br /&gt;
&lt;br /&gt;
Es ist aber wichtig, libs und exe im Zusammenhang mit einem Checkpoint der Sources zu speichern.&lt;br /&gt;
* Als Auslieferungsstand&lt;br /&gt;
* Als wichtigen Teststand für Rückrüsten, möglicherweise ein Kandidat für Auslieferung.&lt;br /&gt;
&lt;br /&gt;
Lösung:&lt;br /&gt;
* Beim committen eines guten Standes, der angetestet ist, ein kleines batch laufen lassen, das die exes lokal kopiert mit Datumskennzeichnung.&lt;br /&gt;
* Damit sind mehrere exes mit Datumsverbindung zum commit lokal vorhanden. Es kann getestet werden.&lt;br /&gt;
* '''Auslieferung: Executables und ggf. libs als zip abspeichern''',, siehe oben. Dabei auf den Stand zugreifen, der vorher lokal kopiert wurde und garantiert aus den Sources, die committed wurden, erstellt wurde.&lt;br /&gt;
* Nur bei '''Master-Releases''', die entgültig ausgeliefert werden, sollte folgeder Aufwand getrieben werden: Nach erfolgreichem Test die Quellen auf Produktgenerierungsrechner von anderer Person auschecken, neu compilieren, neues Generat erstellen und nochmals testen. Diese Vorgehensweise sichert die Konsistenz der Quellen mit dem Generat und dürfte bei Auslieferungen wichtig sein, dauert aber in der täglichen Fortschrittsarbeit einfach zu lange.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Repositories für ein Produkt==&lt;br /&gt;
@ident=multiBzr&lt;br /&gt;
&lt;br /&gt;
;Produkt aus mehreren Quell-Komponenten&lt;br /&gt;
&lt;br /&gt;
:Produkt (Executable etc.) besteht aus Quellen aus mehreren Projekten (Komponenten).&lt;br /&gt;
Die Quell-Komponenten sind relativ unabhängig und werden an anderer Stelle aus anderen Zusammenhängen ebenfalls gepflegt.&lt;br /&gt;
&lt;br /&gt;
:Schlussfolgerung: Nicht mischen, weil sonst kein Durchblick wo was gepflegt wird.&lt;br /&gt;
Jede Quell-Komponente wird in ihrem eigenem .bzr-repository gepflegt.&lt;br /&gt;
&lt;br /&gt;
;Quell-Komponenten befinden sich im Produkt-Sourcenbaum in jeweils bestimmten Unterverzeichnissen&lt;br /&gt;
&lt;br /&gt;
:Unterverzeichnisordnung ist zweckmäßig, weil damit auch im Produkt-Verzeichnis ordnung herrscht.&lt;br /&gt;
&lt;br /&gt;
:In linux kann dort ein symbolischer Link stehen, d.h. Quellen stehen eigentlich ganz woanders. In Windows ist eine Kopie der Komponenten-Quellen im Produkt-Verzeichnisbaum vorhanden.&lt;br /&gt;
&lt;br /&gt;
: In windows kann aber auch ggf. eine Quellkomponente auch ganz woanders stehen, beispielsweise kann bei Eclipse ein Verzeichnis mit absolutem Pfad von irgendwo dem Projkekt hinzugefügt werden. Das ganze ist eine Sache von Pfaden, die irgendwo definiert sein müssen.&lt;br /&gt;
&lt;br /&gt;
:Schlussfolgerung: Das .bzr-Repository der Quellen der Komponente sollte in dem Unterverzeichnis stehen.&lt;br /&gt;
&lt;br /&gt;
: Folglich hängt der Name des Unterverzeichnisses nicht an der Quellkomponente, kann im Produkt auch beliebig gewählt werden. Folglich kann die Quellkomponente auch irgendwo anders stehen, also kein Unterverzeichnis sondern absoluter Pfad. Der absolute Pfad wird beim editieren/generieren beachtet.&lt;br /&gt;
&lt;br /&gt;
Das spricht insgesamt dafür, ein Produkt aus mehreren Bazaar-Quell-Repositories zusammenzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mehrere Produkte aus einem Repository==&lt;br /&gt;
Das große Thema ist Wiederverwendung (Reuse). Häufig zu Beobachten: Reuse besteht aus copy'n paste and change. Die Quellen wandern also irgendwo anders hin, bzgl SCM auch für den einzelnen besser zu beherrschen - man muss sich nur mit dem beschäftigen, was man selbst hat.&lt;br /&gt;
&lt;br /&gt;
Das ist keine wirkliche Wiederverwendung. Der wirkliche Vorteil des reuse geht dabei verloren:&lt;br /&gt;
* Fehler, die in Produkten festgestellt werden, werden in den jeweiligen Modulen korrigiert und sind dann automatisch auch für andere Produkte mit korrigiert, obwohl sie dort ggf. noch gar nicht aufgefallen sind.&lt;br /&gt;
&lt;br /&gt;
Für true-reuse ist es notwendig, die Software-Module so zu bauen, dass sie '''unverändert''' in verschiedenen Produkten verwendbar sind und das Änderungen für alle Produkte nutzbar sind. Das ist eine Frage der Schnittstellen. Die Schnittstellen sind viel wichtiger als die innere Funktionalität. Letztere kann man immer noch verbessern. Schnittstellenänderungen sind kritisch. - Andererseits sind Schnittstellenänderungen auch verträglich, wenn sie formell adaptiert werden können. &lt;br /&gt;
&lt;br /&gt;
Ein shared-Repository in bazaar scheint die Lösung zu bieten, aus einem recht großen Quellenumfang für verschiedene Komponenten verschiedene Quellen herauslösen zu können. Die Komponenten haben selbe gemeinsame Quellen, ggf. in verschiedenen Revisionen, die aber immer abgeglichen werden können sollten. Die Komponenten sind dann Basis für ein Produkt. Komponenten existieren in Form von libs oder jars in Java und können eigenständig getestet werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Quellen           Komponenten       Produkte&lt;br /&gt;
  viele        ===&amp;gt; weniger      ===&amp;gt; aus Komponenten&lt;br /&gt;
  verschiedene      überschaubar      und Produkt-spezial-Quellen&lt;br /&gt;
                                      gebaut.&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert shared-Repository als zentraler Bezug - bin beim testen. (Hartmut)&lt;br /&gt;
==Zentrale Ablage für Repositories==&lt;br /&gt;
@ident=centralRepos&lt;br /&gt;
&lt;br /&gt;
Man kann immer und überall Repositories haben. Behält man den überblick und synchronisiert diese gegenseitig (push, pull), dann gibt es auch nicht zuviele Seitenzweige.&lt;br /&gt;
&lt;br /&gt;
Jedoch, arbeiten viele Leute mit den Repositories, auch weniger eingeweihte, einfache Nutzer, anderes Problem Archivierung, langjähriges aufheben: Dann sollte an einer definierten Stelle das Master-Repository stehen. Jeder Quellenbearbeiter hat die Pflicht, sich mit dem Master-Repository abzustimmen, also seine Änderungen zu pushen oder von dort zu pullen. Gegebenenfalls sollte eine Person mit der Pflege des Master-Repositories beauftragt sein. Mindestens bei Releaseständen muss diese Person dort bereinigend eingreifen.&lt;br /&gt;
&lt;br /&gt;
===Creating one shared repository in the local space===&lt;br /&gt;
The ''local space'' means any external hard disk, network folder or such which is owned by one person, by me. It is my local space, which can be used from some more people in my direct environment.&lt;br /&gt;
&lt;br /&gt;
For any component of sources one shared repository should be created one time. On one sub directory per component: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Shared repository''. An existing plain branch can be pushed to them.&lt;br /&gt;
&lt;br /&gt;
===Creating a branch for working===&lt;br /&gt;
&lt;br /&gt;
* Create a new plain branch at the working position: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Plain branch''.&lt;br /&gt;
* Pull from a shared repositiory: ''Button Pull, select the shared repository, select a branch.&lt;br /&gt;
** If there are some files already, create the branch at a new position and then move .bzr subdir.&lt;br /&gt;
&lt;br /&gt;
==Branches und dessen Auflösung==&lt;br /&gt;
@ident=.branch&lt;br /&gt;
&lt;br /&gt;
;Viele Seitenzweige wegen unterschiedlichen Korrekturen&lt;br /&gt;
&lt;br /&gt;
:Man kann sich auf den Standpunkt stellen, bei Korrekturen für kundenrelevante Software jeweils nur das aufgetretene Fehlerbild zu behandeln, alle anderen Softwareteile unverändert zu lassen. (''Do not touch a running system''). Das ist eine weit verbreitete Vorgehensweise. Folge sind dann sehr viele Seitezweige, die kaum mehr zusammenfließen.&lt;br /&gt;
&lt;br /&gt;
: Primär ist diese Vorgehensweise richtig.&lt;br /&gt;
&lt;br /&gt;
: Es zeigt sich aber, dass eine Änderung in Quellen, auch Restrukturierung, häufig zwar Nacharbeiten erforderlich macht. Diese Nacharbeiten sind aber formal abhandelbar. Man braucht nicht an jeder Stelle einer notwendigen Adaption an geänderte Quellenstände nachzudenken sondern muss nur den Compiler befragen. Kommt keine Fehlermeldung, ist alles in Ordnung. Eine Fehlermeldung soll mit formellen anschauen von Aufrufargumenttypen usw. behebbar sein, ohne dass man in die eigentliche Funktionalität einsteigt. Ist eine solche Nacharbeit möglich, dann kostet diese nur die Zeit der Pflege der Quellen, keine extra Testzeit. Zudem kann die Quellenpflege von jemanden ausgeführt werden, der zwar sehr gute Kenntnisse von Quellen und COmpiler hat, aber keine Tiefenkenntnis für die jeweilige Anwendung haben braucht. Man kann also delegieren.&lt;br /&gt;
&lt;br /&gt;
: In diesem Sinn ist eine Adaption eines Produktes an veränderte Quellen der Komponenten möglich und zweckmäßig. Mann kann dann eher an einem Hauptzweig arbeiten.&lt;br /&gt;
&lt;br /&gt;
: Schlussfolgerung: Schnelle Änderungen -&amp;gt;Seitenzweig, Auflösen dessen, Änderung in Hauptzweig einfließen lassen und Adaption des Produktes auf Hautpzweig der Komponenten ausführen.&lt;br /&gt;
&lt;br /&gt;
===Side branches===&lt;br /&gt;
less experience&lt;br /&gt;
&lt;br /&gt;
 bzr checkout ../masterlocation . -r REVNR&lt;br /&gt;
&lt;br /&gt;
Gets a part of trunk untio REVNR. It is similar &lt;br /&gt;
 &lt;br /&gt;
  bzr revert -r REVNR&lt;br /&gt;
&lt;br /&gt;
What is the difference???&lt;br /&gt;
&lt;br /&gt;
  bzr update ../masterlocation .&lt;br /&gt;
&lt;br /&gt;
This copies all files in the current dir. It seems to destroy the older-revision side branch (?)&lt;br /&gt;
&lt;br /&gt;
Is there a possibility to checkin changes based on a older revision, without any merge. Only the changed files based on the older revision should be stored in the bazaar repositiory - to compare with other versions or look for changes later. Background: Changing of some source files to bugfix an older software. The reason is not develop and merge.&lt;br /&gt;
&lt;br /&gt;
The workflow of develop and bugfix in a decentralized team is explained in&lt;br /&gt;
* [[http://doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches.html doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches]].  &lt;br /&gt;
&lt;br /&gt;
But this is not the problem of side branches, more the problem of development in team.&lt;br /&gt;
&lt;br /&gt;
'''An side glance to git''':&lt;br /&gt;
&lt;br /&gt;
 $ git branch bugfix &lt;br /&gt;
&lt;br /&gt;
creates a branch named 'bugfix' in the same only one repository. It is a branch with the same revision as the current one.&lt;br /&gt;
&lt;br /&gt;
 $ git checkout bugfix &lt;br /&gt;
now switches to the named branch.&lt;br /&gt;
&lt;br /&gt;
 $ git reset -q COMMITNR&lt;br /&gt;
&lt;br /&gt;
This moves the current revision of the current branch (it is 'bugfix' to a older revision. COMMITNR is the hash number of any commit, see git log&lt;br /&gt;
&lt;br /&gt;
 $ git checkout . &lt;br /&gt;
&lt;br /&gt;
resynchronized all files of the selected revision. &lt;br /&gt;
&lt;br /&gt;
...changing any files and &lt;br /&gt;
&lt;br /&gt;
 $ git commit&lt;br /&gt;
&lt;br /&gt;
builds a side branch in the repository (archive).&lt;br /&gt;
&lt;br /&gt;
Now a switch to another branch and its revision is possible in the same sandbox to work with it:&lt;br /&gt;
&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
 &lt;br /&gt;
now switches back to this named branch and resynchronizes all files. Work with it, commit etc.&lt;br /&gt;
&lt;br /&gt;
If there should be worked only at one side branch to any time, and be worked at another side branch to another time, then only one sandbox is necessary. You can switch between the branches. The files are changed, all files are stored in the git archive.&lt;br /&gt;
&lt;br /&gt;
If there should be worked with more as one side branches to the same time, a copy of the git archive is necessary. The archive and the files should be stored at different places on the hard disk, or at more as one computer etc. It isn't recommended to use the same git archive, may be with an symbolic link in linux. The disadvantage is: The git archive knows the current branch, which was selected with 'checkout'. If you want to use only one archive but more as one sandbox for the files, you can have a symbolic link in the sandboxes to the same archive. But then you have to switch between the side-branches before any status, commit etc. action are done in one of the sandboxes. But be attentive to your files. You may overwrite they if you are careless. You can't do that at the same time, maybe more as one people in network. It will be confused if they are work concurrently.&lt;br /&gt;
&lt;br /&gt;
I haven't test yet, but it shouldn't a problem to merge the more as one git archives without conflicts, if only one archive has changed only one side branch.&lt;br /&gt;
&lt;br /&gt;
[[Image:git-side-branch-example.png|example side branches in git]]  &lt;br /&gt;
&lt;br /&gt;
'''Now back to bazaar''':&lt;br /&gt;
&lt;br /&gt;
John A Meinel proposed the following answer: &lt;br /&gt;
&lt;br /&gt;
If you want to commit new changes based on an older revision, you generally want to start a new branch. So something like &lt;br /&gt;
&lt;br /&gt;
 bzr branch master feature -r OLD &lt;br /&gt;
 cd feature &lt;br /&gt;
 bzr commit &lt;br /&gt;
&lt;br /&gt;
If you are using a checkout you can do &lt;br /&gt;
&lt;br /&gt;
 cd checkout &lt;br /&gt;
 bzr branch --switch -r OLD ../master ../feature &lt;br /&gt;
&lt;br /&gt;
TODO test&lt;/div&gt;</description>
			<pubDate>Fri, 22 Jul 2011 20:54:36 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Bazaar-Notes</comments>		</item>
		<item>
			<title>Bazaar-Notes</title>
			<link>http://72.14.177.54/java4c/Bazaar-Notes</link>
			<description>&lt;p&gt;Admin:&amp;#32;/* Side branches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;@ident=Bazaar_notes&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [[Bazaar-guide]]: a guide to use Bazaar.&lt;br /&gt;
&lt;br /&gt;
This size is in german, because it is discussed in a german team. It will be presented in english in the future. TODO&lt;br /&gt;
&lt;br /&gt;
==Kurzer Abriss, Arbeit mit MKSSI, git, mercurial, Bazaar==&lt;br /&gt;
&lt;br /&gt;
Hartmut: MKSSI ist seit über 10 Jahren bei mir in Gebrauch.&lt;br /&gt;
* Nur auf Arbeit, zentrale Administration, &lt;br /&gt;
* Die MKSSI-Software wird normalerweise nicht ständig updated. Das Arbeiten ist nicht sehr schnell, eher etwas für ordentliche Pflege.&lt;br /&gt;
* Wird gemacht, für die Versionen, die herausgegeben werden. Nicht für stündliche kleine Änderungen. Da wäre der Arbeitsaufwand zu hoch.&lt;br /&gt;
&lt;br /&gt;
Hartmut: git war das erste der 'dritten Generation' für mich.&lt;br /&gt;
* Geht ganz gut, init commit, alles ganz einfach&lt;br /&gt;
* Nachschauen der Änderungen: Hier ist die GUI (gitk) nicht sehr bedienerfreundlich. Die schnelle Tastaturbedienung ist mangelhaft, der Tastaturfokus ist im falschen Teilfenster. Immer mit Maus schieben ...&lt;br /&gt;
* Linux-like cmdline-Bedienung auf Windows-PC ist für mich eher interessant. &lt;br /&gt;
&lt;br /&gt;
Hartmut: mercurial - ähnlich wie git, nur eher für windows, eigentlich sehr ähnlich git.&lt;br /&gt;
&lt;br /&gt;
Hartmut: Bazaar gefällt mir persönlich wegen der GUI besser. &lt;br /&gt;
&lt;br /&gt;
Hartmut: Alle drei Systeme sind aber funktionell eher ähnlich. Ich pflege Quellen in Bazaar, um sie dann auch in hg zu committen, mit selbigem commit-Text wie in Bazaar zuvor zusammengestellt. Das ist nur ein Aufruf. Ein Hg-Archiv beispielsweise für CRuntimeJavalike liegt auf [[https://bitbucket.org/jchartmut/cruntimejavalike bitbucket.org/jchartmut/cruntimejavalike]]. Hg deshalb, weil die bitbucket-Seite nur hg unterstützt. Der Aufwand, in hg doppelt zu pflegen, ist kaum erhebenswert.  &lt;br /&gt;
&lt;br /&gt;
;Commit-Text zusammenstellen&lt;br /&gt;
&lt;br /&gt;
:Vorderhand geht es beim Commit-text darum: Was leistet diese Version insgesamt, unterschied zur Vorversion. In der Zweiten Linie geht es aber um die Änderung in den einzelnen Files. &lt;br /&gt;
&lt;br /&gt;
:Sind im Commit sehr viele Files enthalten, dann handelt es sich meist um das Ergebnis eines Refactoring wegen einer Änderung. Solche Änderungen brauchen in den Quellfiles nicht vermerkt werden, zuviel Aufwand, uninteressant.&lt;br /&gt;
&lt;br /&gt;
:Sind dagegen wenige Files geändert, dann lag meist auch eine Änderung der Funktionalität vor. Diese sollte unabhängig vom Commit in den Quellfiles notiert werden. Hier hilft aber die Differenzanzeige, um während des Commit die Änderungen in den Files zu vermerken. Man kann einen passenden Commit-Text zusammenstellen, dabei die Änderung der Einzelfiles betrachten und dabei in den Einzelfiles Änderungen notieren (log des Files).&lt;br /&gt;
&lt;br /&gt;
:Ein automatisches Eintragen der Änderung in den Files aus dem checkin-Textes aus der Arbeit mit dem Source-Integrity-System produziert meist Einträge in den Files, die die Änderungen schlecht abbilden. Das liegt daran, weil der Arbeitsaufwand für jeden Einzelfile zu hoch ist. Dieses automatische Eintragen ist aber eine häufig verwendete oder voreingestellte Methode bei MKSSI &amp;amp; co.&lt;br /&gt;
&lt;br /&gt;
: Der Arbeitsaufwand bei manuellem Eintragen in den File ist deshalb bei Bazaar geringer, weil&lt;br /&gt;
:* Es gibt eine schnelle Übersicht, welche Files betroffen sind. Einfacher Knopfdruck für Viewdiff. Man kann schnell auswählen, bei welchen Files ggf. gleiche Einträge überhaupt notwendig sind. Nicht bei allen geänderten.&lt;br /&gt;
:* Mit den Files, die keine wesentlichen Änderungen enthalten sondern nur Anpassungen an Änderungen anderer Files, braucht man sich also gar nicht beschäftigen. &lt;br /&gt;
:* Die Änderung im File eingetragen und per Zwischenablage auch im Commit-Text abgelegt ist dann eigentlich nur einmaliger Aufwand, nicht zweimal.&lt;br /&gt;
:* Wenn es wesentliche Änderungen sind, dann ist die Beschreibung der Änderung auch ein schöpferischer und nicht formeller Akt. Dann lohnt es sich auch, die entsprechend notwendige Zeit aufzubringen. Möglicherweise wird man bei der Änderungsbeschreibung im File auch noch weitere dabei entdeckte Pflegekorrekturen anbringen, die insgesamt die Quelle weiter aufwerten. Dann hat es sich sowieso gelohnt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Source Content Management oder hart archivieren? Nur Quellen im SCM?==&lt;br /&gt;
&lt;br /&gt;
Eine harte Archivierung ist das Verpacken der Files auf einem Datenträger. Da das Zip-format sich als langjährig beständig erwiesen hat, kann man ganze File-Bäume zippen und irgendwo aufheben.&lt;br /&gt;
&lt;br /&gt;
Nachteil: Keine Unterstützung für Diff-View außer auspacken und mit einem Diff-tool vergleichen. Der Total-Commander eignet sich dazu allerdings recht gut, da er in beiden Paneelen in zip-Archive tief eintauchen kann.&lt;br /&gt;
&lt;br /&gt;
Vorteil: Unabhängig von einem Tool, die Files einer Version sind zusammengebunden einfach da. Es hat sich schon oft als günstig erwiesen, lange Jahre zurückliegende Files nicht mit den damaligen Tools aufrollen zu müssen sondern einfach entzippen.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil für die Langjährigkeit sollte bedacht werden.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Ab und zu zippen und wegpacken, mindestens bei wichtigen Releaseständen. Aber unnütze zipfiles auch mal löschen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Für akutelle Softwareentwicklung jedenfalls ein Source-Integrity-Tool nutzen, Zippen nur zusätzlich.&lt;br /&gt;
&lt;br /&gt;
===Verzeichnissstuktur-Rückschluss===&lt;br /&gt;
&lt;br /&gt;
Sowohl für das Zippen als auch für Sourcenpflege, Sourcenaustausch usw. liegt der tatsächliche Umfang von Sources insgesamt meist in einem Bereich von wenigen Megabyte. Damit ist der Datenaustausch mindestens erleichtert. Wenn man in die selbe Verzeichnisstruktur in der Quellen liegen noch hineintue:&lt;br /&gt;
* Objects&lt;br /&gt;
* erzeugte executable und umfangreiche Datenbasis-Files (Visual Studio ncb-Files und dergleichen)&lt;br /&gt;
* logfiles, Output-Files beim Testen&lt;br /&gt;
* alte Archive (zips)&lt;br /&gt;
&lt;br /&gt;
dann springt der Umfang des Verzeichnisbausms von wenigen Megabyte ganz schnell auf -zig Megabyte. Das Problem merkt man&lt;br /&gt;
* beim zippen (ganz schnell mal ablegen zum späteren Vergleich)&lt;br /&gt;
* beim Vergleichen (alle Obj erscheinen als geändert, alles rot, erst mal schaun was das ist)&lt;br /&gt;
* bei der Pflege der Sources in einem SM-system (Source Management): viele nicht erfasste files: Sind die wichtig? Ach, sind nur Obj, doch ein wichtige wird übersehen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Möglichst Sources von Testfiles und Executables trennen. Die wenigen Files, die nicht trennbar sind (weil die Tools sie ins aktuelle Verzeichnis legen), in einer ignore-Liste erfassen, ggf. beim zippen ausschließen usw. Sind es wenige, dann sind sie verwaltbar&lt;br /&gt;
* Object-Files auf einem tmp-Ordner speichern&lt;br /&gt;
* Generierergebnisse neben dem Source-Baum speichern.&lt;br /&gt;
&lt;br /&gt;
===Archivieren von Executables===&lt;br /&gt;
Aus oben genannten Gründen sollten die Libs und Executables ''nicht'' mit den Sources im SM gemischt werden.&lt;br /&gt;
* Die libs und executables könnten einerseits immer aus den Sources generiert werden (wenn alles richtig ist)&lt;br /&gt;
* Die libs und executables sind nicht vergleichbar mit üblichen diffs.&lt;br /&gt;
* Die libs und executables sind im Code-Umfang zu hoch.&lt;br /&gt;
&lt;br /&gt;
Es ist aber wichtig, libs und exe im Zusammenhang mit einem Checkpoint der Sources zu speichern.&lt;br /&gt;
* Als Auslieferungsstand&lt;br /&gt;
* Als wichtigen Teststand für Rückrüsten, möglicherweise ein Kandidat für Auslieferung.&lt;br /&gt;
&lt;br /&gt;
Lösung:&lt;br /&gt;
* Beim committen eines guten Standes, der angetestet ist, ein kleines batch laufen lassen, das die exes lokal kopiert mit Datumskennzeichnung.&lt;br /&gt;
* Damit sind mehrere exes mit Datumsverbindung zum commit lokal vorhanden. Es kann getestet werden.&lt;br /&gt;
* '''Auslieferung: Executables und ggf. libs als zip abspeichern''',, siehe oben. Dabei auf den Stand zugreifen, der vorher lokal kopiert wurde und garantiert aus den Sources, die committed wurden, erstellt wurde.&lt;br /&gt;
* Nur bei '''Master-Releases''', die entgültig ausgeliefert werden, sollte folgeder Aufwand getrieben werden: Nach erfolgreichem Test die Quellen auf Produktgenerierungsrechner von anderer Person auschecken, neu compilieren, neues Generat erstellen und nochmals testen. Diese Vorgehensweise sichert die Konsistenz der Quellen mit dem Generat und dürfte bei Auslieferungen wichtig sein, dauert aber in der täglichen Fortschrittsarbeit einfach zu lange.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Repositories für ein Produkt==&lt;br /&gt;
@ident=multiBzr&lt;br /&gt;
&lt;br /&gt;
;Produkt aus mehreren Quell-Komponenten&lt;br /&gt;
&lt;br /&gt;
:Produkt (Executable etc.) besteht aus Quellen aus mehreren Projekten (Komponenten).&lt;br /&gt;
Die Quell-Komponenten sind relativ unabhängig und werden an anderer Stelle aus anderen Zusammenhängen ebenfalls gepflegt.&lt;br /&gt;
&lt;br /&gt;
:Schlussfolgerung: Nicht mischen, weil sonst kein Durchblick wo was gepflegt wird.&lt;br /&gt;
Jede Quell-Komponente wird in ihrem eigenem .bzr-repository gepflegt.&lt;br /&gt;
&lt;br /&gt;
;Quell-Komponenten befinden sich im Produkt-Sourcenbaum in jeweils bestimmten Unterverzeichnissen&lt;br /&gt;
&lt;br /&gt;
:Unterverzeichnisordnung ist zweckmäßig, weil damit auch im Produkt-Verzeichnis ordnung herrscht.&lt;br /&gt;
&lt;br /&gt;
:In linux kann dort ein symbolischer Link stehen, d.h. Quellen stehen eigentlich ganz woanders. In Windows ist eine Kopie der Komponenten-Quellen im Produkt-Verzeichnisbaum vorhanden.&lt;br /&gt;
&lt;br /&gt;
: In windows kann aber auch ggf. eine Quellkomponente auch ganz woanders stehen, beispielsweise kann bei Eclipse ein Verzeichnis mit absolutem Pfad von irgendwo dem Projkekt hinzugefügt werden. Das ganze ist eine Sache von Pfaden, die irgendwo definiert sein müssen.&lt;br /&gt;
&lt;br /&gt;
:Schlussfolgerung: Das .bzr-Repository der Quellen der Komponente sollte in dem Unterverzeichnis stehen.&lt;br /&gt;
&lt;br /&gt;
: Folglich hängt der Name des Unterverzeichnisses nicht an der Quellkomponente, kann im Produkt auch beliebig gewählt werden. Folglich kann die Quellkomponente auch irgendwo anders stehen, also kein Unterverzeichnis sondern absoluter Pfad. Der absolute Pfad wird beim editieren/generieren beachtet.&lt;br /&gt;
&lt;br /&gt;
Das spricht insgesamt dafür, ein Produkt aus mehreren Bazaar-Quell-Repositories zusammenzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mehrere Produkte aus einem Repository==&lt;br /&gt;
Das große Thema ist Wiederverwendung (Reuse). Häufig zu Beobachten: Reuse besteht aus copy'n paste and change. Die Quellen wandern also irgendwo anders hin, bzgl SCM auch für den einzelnen besser zu beherrschen - man muss sich nur mit dem beschäftigen, was man selbst hat.&lt;br /&gt;
&lt;br /&gt;
Das ist keine wirkliche Wiederverwendung. Der wirkliche Vorteil des reuse geht dabei verloren:&lt;br /&gt;
* Fehler, die in Produkten festgestellt werden, werden in den jeweiligen Modulen korrigiert und sind dann automatisch auch für andere Produkte mit korrigiert, obwohl sie dort ggf. noch gar nicht aufgefallen sind.&lt;br /&gt;
&lt;br /&gt;
Für true-reuse ist es notwendig, die Software-Module so zu bauen, dass sie '''unverändert''' in verschiedenen Produkten verwendbar sind und das Änderungen für alle Produkte nutzbar sind. Das ist eine Frage der Schnittstellen. Die Schnittstellen sind viel wichtiger als die innere Funktionalität. Letztere kann man immer noch verbessern. Schnittstellenänderungen sind kritisch. - Andererseits sind Schnittstellenänderungen auch verträglich, wenn sie formell adaptiert werden können. &lt;br /&gt;
&lt;br /&gt;
Ein shared-Repository in bazaar scheint die Lösung zu bieten, aus einem recht großen Quellenumfang für verschiedene Komponenten verschiedene Quellen herauslösen zu können. Die Komponenten haben selbe gemeinsame Quellen, ggf. in verschiedenen Revisionen, die aber immer abgeglichen werden können sollten. Die Komponenten sind dann Basis für ein Produkt. Komponenten existieren in Form von libs oder jars in Java und können eigenständig getestet werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Quellen           Komponenten       Produkte&lt;br /&gt;
  viele        ===&amp;gt; weniger      ===&amp;gt; aus Komponenten&lt;br /&gt;
  verschiedene      überschaubar      und Produkt-spezial-Quellen&lt;br /&gt;
                                      gebaut.&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert shared-Repository als zentraler Bezug - bin beim testen. (Hartmut)&lt;br /&gt;
==Zentrale Ablage für Repositories==&lt;br /&gt;
@ident=centralRepos&lt;br /&gt;
&lt;br /&gt;
Man kann immer und überall Repositories haben. Behält man den überblick und synchronisiert diese gegenseitig (push, pull), dann gibt es auch nicht zuviele Seitenzweige.&lt;br /&gt;
&lt;br /&gt;
Jedoch, arbeiten viele Leute mit den Repositories, auch weniger eingeweihte, einfache Nutzer, anderes Problem Archivierung, langjähriges aufheben: Dann sollte an einer definierten Stelle das Master-Repository stehen. Jeder Quellenbearbeiter hat die Pflicht, sich mit dem Master-Repository abzustimmen, also seine Änderungen zu pushen oder von dort zu pullen. Gegebenenfalls sollte eine Person mit der Pflege des Master-Repositories beauftragt sein. Mindestens bei Releaseständen muss diese Person dort bereinigend eingreifen.&lt;br /&gt;
&lt;br /&gt;
===Creating one shared repository in the local space===&lt;br /&gt;
The ''local space'' means any external hard disk, network folder or such which is owned by one person, by me. It is my local space, which can be used from some more people in my direct environment.&lt;br /&gt;
&lt;br /&gt;
For any component of sources one shared repository should be created one time. On one sub directory per component: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Shared repository''. An existing plain branch can be pushed to them.&lt;br /&gt;
&lt;br /&gt;
===Creating a branch for working===&lt;br /&gt;
&lt;br /&gt;
* Create a new plain branch at the working position: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Plain branch''.&lt;br /&gt;
* Pull from a shared repositiory: ''Button Pull, select the shared repository, select a branch.&lt;br /&gt;
** If there are some files already, create the branch at a new position and then move .bzr subdir.&lt;br /&gt;
&lt;br /&gt;
==Branches und dessen Auflösung==&lt;br /&gt;
@ident=.branch&lt;br /&gt;
&lt;br /&gt;
;Viele Seitenzweige wegen unterschiedlichen Korrekturen&lt;br /&gt;
&lt;br /&gt;
:Man kann sich auf den Standpunkt stellen, bei Korrekturen für kundenrelevante Software jeweils nur das aufgetretene Fehlerbild zu behandeln, alle anderen Softwareteile unverändert zu lassen. (''Do not touch a running system''). Das ist eine weit verbreitete Vorgehensweise. Folge sind dann sehr viele Seitezweige, die kaum mehr zusammenfließen.&lt;br /&gt;
&lt;br /&gt;
: Primär ist diese Vorgehensweise richtig.&lt;br /&gt;
&lt;br /&gt;
: Es zeigt sich aber, dass eine Änderung in Quellen, auch Restrukturierung, häufig zwar Nacharbeiten erforderlich macht. Diese Nacharbeiten sind aber formal abhandelbar. Man braucht nicht an jeder Stelle einer notwendigen Adaption an geänderte Quellenstände nachzudenken sondern muss nur den Compiler befragen. Kommt keine Fehlermeldung, ist alles in Ordnung. Eine Fehlermeldung soll mit formellen anschauen von Aufrufargumenttypen usw. behebbar sein, ohne dass man in die eigentliche Funktionalität einsteigt. Ist eine solche Nacharbeit möglich, dann kostet diese nur die Zeit der Pflege der Quellen, keine extra Testzeit. Zudem kann die Quellenpflege von jemanden ausgeführt werden, der zwar sehr gute Kenntnisse von Quellen und COmpiler hat, aber keine Tiefenkenntnis für die jeweilige Anwendung haben braucht. Man kann also delegieren.&lt;br /&gt;
&lt;br /&gt;
: In diesem Sinn ist eine Adaption eines Produktes an veränderte Quellen der Komponenten möglich und zweckmäßig. Mann kann dann eher an einem Hauptzweig arbeiten.&lt;br /&gt;
&lt;br /&gt;
: Schlussfolgerung: Schnelle Änderungen -&amp;gt;Seitenzweig, Auflösen dessen, Änderung in Hauptzweig einfließen lassen und Adaption des Produktes auf Hautpzweig der Komponenten ausführen.&lt;br /&gt;
&lt;br /&gt;
===Side branches===&lt;br /&gt;
less experience&lt;br /&gt;
&lt;br /&gt;
 bzr checkout ../masterlocation . -r REVNR&lt;br /&gt;
&lt;br /&gt;
Gets a part of trunk untio REVNR. It is similar &lt;br /&gt;
 &lt;br /&gt;
  bzr revert -r REVNR&lt;br /&gt;
&lt;br /&gt;
What is the difference???&lt;br /&gt;
&lt;br /&gt;
  bzr update ../masterlocation .&lt;br /&gt;
&lt;br /&gt;
This copies all files in the current dir. It seems to destroy the older-revision side branch (?)&lt;br /&gt;
&lt;br /&gt;
Is there a possibility to checkin changes based on a older revision, without any merge. Only the changed files based on the older revision should be stored in the bazaar repositiory - to compare with other versions or look for changes later. Background: Changing of some source files to bugfix an older software. The reason is not develop and merge.&lt;br /&gt;
&lt;br /&gt;
The workflow of develop and bugfix in a decentralized team is explained in&lt;br /&gt;
* [[http://doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches.html doc.bazaar.canonical.com/latest/en/user-guide/organizing_branches]].  &lt;br /&gt;
&lt;br /&gt;
But this is not the problem of side branches, more the problem of development in team.&lt;br /&gt;
&lt;br /&gt;
'''An side glance to git''':&lt;br /&gt;
&lt;br /&gt;
 $ git branch bugfix &lt;br /&gt;
&lt;br /&gt;
creates a branch named 'bugfix' in the same only one repository. It is a branch with the same revision as the current one.&lt;br /&gt;
&lt;br /&gt;
 $ git checkout bugfix &lt;br /&gt;
now switches to the named branch.&lt;br /&gt;
&lt;br /&gt;
 $ git reset -q COMMITNR&lt;br /&gt;
&lt;br /&gt;
This moves the current revision of the current branch (it is 'bugfix' to a older revision. COMMITNR is the hash number of any commit, see git log&lt;br /&gt;
&lt;br /&gt;
 $ git checkout . &lt;br /&gt;
&lt;br /&gt;
resynchronized all files of the selected revision. &lt;br /&gt;
&lt;br /&gt;
...changing any files and &lt;br /&gt;
&lt;br /&gt;
 $ git commit&lt;br /&gt;
&lt;br /&gt;
builds a side branch in the repository (archive).&lt;br /&gt;
&lt;br /&gt;
Now a switch to another branch and its revision is possible in the same sandbox to work with it:&lt;br /&gt;
&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
 &lt;br /&gt;
now switches back to this named branch and resynchronizes all files. Work with it, commit etc.&lt;br /&gt;
&lt;br /&gt;
If there should be worked only at one side branch to any time, and be worked at another side branch to another time, then only one sandbox is necessary. You can switch between the branches. The files are changed, all files are stored in the git archive.&lt;br /&gt;
&lt;br /&gt;
If there should be worked with more as one side branches to the same time, a copy of the git archive is necessary. The archive and the files should be stored at different places on the hard disk, or at more as one computer etc. It isn't recommended to use the same git archive, may be with an symbolic link in linux. The disadvantage is: The git archive knows the current branch, which was selected with 'checkout'. If you want to use only one archive but more as one sandbox for the files, you can have a symbolic link in the sandboxes to the same archive. But then you have to switch between the side-branches before any status, commit etc. action are done in one of the sandboxes. But be attentive to your files. You may overwrite they if you are careless. You can't do that at the same time, maybe more as one people in network. It will be confused if they are work concurrently.&lt;br /&gt;
&lt;br /&gt;
I haven't test yet, but it shouldn't a problem to merge the more as one git archives without conflicts, if only one archive has changed only one side branch.&lt;br /&gt;
&lt;br /&gt;
[[Img:http://www.vishia.org/SwEng/pictures/git-side-branch-example.jpg|example side branches in git]]  &lt;br /&gt;
&lt;br /&gt;
'''Now back to bazaar''':&lt;br /&gt;
&lt;br /&gt;
John A Meinel proposed the following answer: &lt;br /&gt;
&lt;br /&gt;
If you want to commit new changes based on an older revision, you generally want to start a new branch. So something like &lt;br /&gt;
&lt;br /&gt;
 bzr branch master feature -r OLD &lt;br /&gt;
 cd feature &lt;br /&gt;
 bzr commit &lt;br /&gt;
&lt;br /&gt;
If you are using a checkout you can do &lt;br /&gt;
&lt;br /&gt;
 cd checkout &lt;br /&gt;
 bzr branch --switch -r OLD ../master ../feature &lt;br /&gt;
&lt;br /&gt;
TODO test&lt;/div&gt;</description>
			<pubDate>Fri, 22 Jul 2011 20:42:14 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Bazaar-Notes</comments>		</item>
		<item>
			<title>Components of CRuntimeJavalike</title>
			<link>http://72.14.177.54/java4c/Components_of_CRuntimeJavalike</link>
			<description>&lt;p&gt;Admin:&amp;#32;hint to embedded usage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]] / [[Component]]&lt;br /&gt;
* down: see chapters&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
'''CRuntimeJavalike''' is a tree of C-files proper to use in '''embedded applications'''. All files are written by Hartmut Schorrig, www.vishia.org. They are used in some applications in profession too (with second license model). It is a conglomeration of different things, of course. It contains some makefiles to build libraries for a PC platform. &lt;br /&gt;
&lt;br /&gt;
The CRuntimeJavalike can be used in any application, especially for embedded systems. It contains a OSAL-layer, which is provided for Windows and Linux. The OSAL-layer have to be adapted for other operation systems. Some adaption exists and are tested and used in profession. With adapting the OSAL-layer the sources can be used and the examples can run on any platform.&lt;br /&gt;
&lt;br /&gt;
==Distribution and sources in internet==&lt;br /&gt;
&lt;br /&gt;
* distribution: [[http://sf.net/projects/java2c sf.net/projects/java2c]] The CRuntimeJavalike is distributed as part of the Java2C-Translator. But it can be used without this translator too. Download the distribution and use only the CRuntimeJavalike. [[http://sf.net/projects/zbnf sf.net/projects/zbnf]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/jc/trunk launchpad.net/jc]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/Jc www.vishia.org/Jc]]&lt;br /&gt;
&lt;br /&gt;
==OSAL==&lt;br /&gt;
See [[OSAL]]. The OSAL-component contains &lt;br /&gt;
* C-files, which are special written for the appropriate operation system.&lt;br /&gt;
* One Headerfile, which contains some depending definitions which should be adapted to the platform, os and compiler. It is the [[os_types_def]].h.&lt;br /&gt;
* Headerfiles, which are independent of the operation system. It describes the OSAL-interface.&lt;br /&gt;
* Headerfiles, which contains simple C-definitions and declarations. It are independent of compiler, platform and os.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Exception.h.html include/Fwc/fw_Exception.h]]: Exception handling for C and C++ inclusive Stacktrace-Mechanism. In C a longjmp is used to throw. (longjmp.h is defined in the old Standards of C and in C99 too).     &lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Formatter.h.html include/Fwc/fw_Formatter.h]]: Declaration of methods for formatting Strings. It include time-formattings. It is similar to sprintf.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_MemC.h.html  include/Fwc/fw_MemC.h]]: Definition of a struct MemC with pointer and its size. Some macros to handle with pointer. Some function prototypes for MemC-handling.            &lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Readline.h.html  include/Fwc/fw_Readline.h]]: Support of reading lines from a file. A line can be terminated with 0d, 0a or any combination (Windows, Unix, Mac-conventions all in one). The os_file.h is used as interface to read a file.      &lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_SimpleC.h.html  include/Fwc/fw_SimpleC.h]]: Some basicly simple macros and function declarations.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_String.h.html  include/Fwc/fw_String.h]]: Basic functions for String storing in a struct StringJc. It is the alternative to zero-terminated C-Strings. The pointer and the length is stored. The basic functions are a bridge between 0-terminated C-strings and StringJc-referenced strings.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_ThreadContext.h.html  include/Fwc/fw_ThreadContext.h]]: The ThreadContext is managed in the OSAL, but its struct is defined here.  &lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_timeconversions.h.html  include/Fwc/fw_timeconversions.h]]: struct and funtion declarations for time conversions: A timestamp should be stored internally in form of currently seconds and microseconds after a start time. The conversion to a human readable time should be done only for presentation. The routines support the conversion.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Va_list.h.html  include/Fwc/fw_Va_list.h]]: An appreciation to the &amp;lt; stdarg.h&amp;gt; concept. The value as new: Any argument-type of a variable argument list is described with one char in a char*-string with one char. With the knowledge of the correct type any users function can be use the variable argument more correctly. Usual any other information should be necessary, for example the format-String of sprintf. This header and functions are used in fw_formatter.h&lt;br /&gt;
&lt;br /&gt;
* C-files, which contains common sources for OSAL&lt;br /&gt;
* C-files, which contains common sources for simple C-functions. It can be used in the OSAL-Adaption.&lt;br /&gt;
&lt;br /&gt;
With this Sources a application can be written os-indenpendent. All this sources are independent of the Java2C-thinking. This sources are not complex. There are not any assumption to Java.&lt;/div&gt;</description>
			<pubDate>Tue, 19 Jul 2011 22:21:17 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Components_of_CRuntimeJavalike</comments>		</item>
		<item>
			<title>SourceLinesAndDocu</title>
			<link>http://72.14.177.54/java4c/SourceLinesAndDocu</link>
			<description>&lt;p&gt;Admin:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: TODO&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Lines of code are many lines - only the developer of them looks through it. Or?&lt;br /&gt;
&lt;br /&gt;
Sources have a structure. It is the formal syntax of the language primary. Code lines are top-down structures of classes, data-struct, methods, statement blocks. They can be analyzed formally and presented in there structure. Modern programming environments do so. &lt;br /&gt;
&lt;br /&gt;
==Advantage of textual source lines in comparison with graphic programming==&lt;br /&gt;
&lt;br /&gt;
* '''Code lines - change tracking''': Older and newer versions of sources are able to compare. All source version systems support that. It is possible to track which functionality is changed why, when, who and what exactly.&lt;br /&gt;
&lt;br /&gt;
* ''Graphical programming - change tracking''': If there is a textual representation of the graphical appearance, it is possible to track changes line code lines too. Only it is another notation. But some graphic programming systems stores there content in special maybe binary files or a database adequate form, which doesn't allow a simple comparison of content. &lt;br /&gt;
&lt;br /&gt;
* '''Code lines - searching anything''': Because they are textual files, a grep or ordinary search of text can be applied. Sometimes any textual hint is given to search the proper line. For example there is a textual sequence in an error message or a label on a button - search it in code lines of all files and you find the line where it is handled, without knowledge and understanding of the whole structure of the software.&lt;br /&gt;
&lt;br /&gt;
*  ''Graphical programming - searching anything''': It may be a search function in the graphical programming environment. Is it proper to use?&lt;br /&gt;
&lt;br /&gt;
Summary: Code lines are better to handle but graphic programming is better to understand. Use a graphical programming environment with a simple representation of its content in code lines.&lt;br /&gt;
&lt;br /&gt;
==Generating documentation from code lines==&lt;br /&gt;
&lt;br /&gt;
* The code lines are the first (hack first ideas) and last (debug errors, implement features) which are touched by the programmer. Some programmers don't like writing documentation.&lt;br /&gt;
&lt;br /&gt;
* Documentation outside of the code doesn't seem to be actual. Is it corrected in progress with the code changing?&lt;br /&gt;
&lt;br /&gt;
===javadoc - Java source documentation===&lt;br /&gt;
&lt;br /&gt;
javadoc is a generator to produce html-pages from Java sources. It is a part of any standard Java developer kit. &lt;br /&gt;
&lt;br /&gt;
* The appearance of the code is the same worldwide. It is a standard. Anybody Java developer knows it.&lt;br /&gt;
* The writing styles of comments in the sources are the same worldwide. Anybody Java developer writes with the same style guides.&lt;br /&gt;
* Writing comments for javadoc style is supported by tools, for example in eclipse.&lt;br /&gt;
&lt;br /&gt;
* An example produced with javadoc from me: [[http://www.vishia.org/Java/docuSrcJavaPublic/org/vishia/java2C/LocalIdents.html LocalIdents.java]]&lt;br /&gt;
* An example with graphical content. The source file is used only as base for documentation. [[http://www.vishia.org/Java/docuSrcJavaPublic/org/vishia/java2C/Docu.B_ProcessOfTranslation.html Docu.java]]&lt;br /&gt;
* An example from Sun/Oracle: [[http://download.oracle.com/javase/6/docs/api/java/lang/String.html String.java]]&lt;br /&gt;
* An example from apache: [[http://xerces.apache.org/xerces2-j/javadocs/api/org/w3c/dom/ls/DOMImplementationLS.html DOMImplementationLS.java]]&lt;br /&gt;
&lt;br /&gt;
You can see - all styles of documentation are comparable. The kind of presentation of the functionality is equal.&lt;br /&gt;
&lt;br /&gt;
In the html presentation you get the links to all types automatically without any effort in the source.&lt;br /&gt;
 &lt;br /&gt;
The thinking is:&lt;br /&gt;
* Comment the function and mission of any variable or association (pointer to other class or data struct). &lt;br /&gt;
* Comment the function and mission of any method. Write shortly what the method does.&lt;br /&gt;
* Write one sentence for core function and mission.&lt;br /&gt;
* Write some sentences for details.&lt;br /&gt;
* You can use lists using the html-known tags &amp;lt; ul&amp;gt;, &amp;lt; li&amp;gt; etc.&lt;br /&gt;
* You can write tables using &amp;lt; table&amp;gt; etc. But that is more complex.&lt;br /&gt;
* You can use html-links for example for images in the html presentation. In the code you see the name of the file (the link)&lt;br /&gt;
* You can use links to other elements of the source! It is written {@link class#method(paramtypes)}. Eclipse helps you while selecting with the usual write completion functionality.&lt;br /&gt;
&lt;br /&gt;
The thinking of commenting influences the thinking to a good software structure and proper identifier. If you write the comment, you will think about the meaning of the code elements and you will correct it if it isn't proper.&lt;br /&gt;
&lt;br /&gt;
===Doxygen===&lt;br /&gt;
&lt;br /&gt;
[[http://www.stack.nl/~dimitri/doxygen/ doxygen]] is a usual documentation generation system used for C and C++ sources often. Doxygen has a lot of adjustment possibilities to control the kind of comment designation. It has a lot of possibilities to generate cross references of code and so on. Therefore it is more multifaceted. &lt;br /&gt;
&lt;br /&gt;
===Using javadoc styles for C and C++ sources===&lt;br /&gt;
&lt;br /&gt;
The javadoc notification style of comments in source code is widespread in most of sources. It is possible to use for doxygen too, if the doxygen control files are adjusted for that style. The basic write style is:&lt;br /&gt;
&lt;br /&gt;
  /**Comment core function in the first sentence.&lt;br /&gt;
   * Some more information if necessary.*/&lt;br /&gt;
  int x;&lt;br /&gt;
&lt;br /&gt;
The comment is written before the element.&lt;br /&gt;
&lt;br /&gt;
  /**Comment core function in the first sentence.&lt;br /&gt;
   * Some more information if necessary.&lt;br /&gt;
   * A {@link OtherClass} in the explanation appears in a html-link &lt;br /&gt;
   * for a proper navigation.&lt;br /&gt;
   * &amp;lt;nowiki&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;/nowiki&amp;gt;Some remarks are proper able to read in lists.&lt;br /&gt;
   * &amp;lt;nowiki&amp;gt;&amp;lt;li&amp;gt;&amp;lt;/nowiki&amp;gt;next list bullet.&lt;br /&gt;
   * &amp;lt;nowiki&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   * @param par the explanation of the parameter&lt;br /&gt;
   * @param par2 the next&lt;br /&gt;
   * @return explanation what returns the method&lt;br /&gt;
   * @throws IllegalArgumentException explanation of exceptions if there are any  &lt;br /&gt;
   */&lt;br /&gt;
  int myRoutine(int par, float par2);&lt;br /&gt;
    &lt;br /&gt;
You can write some elaborate explanation if necessary. But think about correction if the parameter of a method are changed or details of the functionality are changed.&lt;br /&gt;
&lt;br /&gt;
==Generating an UML-Model from Headerfiles==&lt;br /&gt;
&lt;br /&gt;
One of the disadvantage of code lines and documentation lines is: It has only one dimension, from to do down. If you have cross references to other code parts or chapter in a document, only links are able to use. &lt;br /&gt;
&lt;br /&gt;
The advantage of [[http://en.wikipedia.org/wiki/Unified_Modeling_Language UML (Wikipedia) is:&lt;br /&gt;
&lt;br /&gt;
* The relation between parts of a software are shown in 2 dimensions. It is in an area, not only in lines.&lt;br /&gt;
&lt;br /&gt;
* There may be more as one presentation possible to show relations between the same software parts.  &lt;br /&gt;
&lt;br /&gt;
An representation of C software in form of UML diagrams is a good documentation.&lt;br /&gt;
&lt;br /&gt;
Usual the direction of work is thought from the UML model to the code. It is ''automatic code generation''. It presumes, that a developer is more friendly with UML diagrams but with source lines. &lt;br /&gt;
&lt;br /&gt;
But often programmers are more conversant in writing code lines. If some details of implementation should be regarded, the code lines are the nearest way to notify it. Therefore the generation of UML from code lines is proper too! It is similar to generate documentation from code lines.&lt;br /&gt;
&lt;br /&gt;
===XMI and UML repository===&lt;br /&gt;
&lt;br /&gt;
The [[http://en.wikipedia.org/wiki/XML_Metadata_Interchange XMI (Wikipedia)]]-Format is the data-interchanging format for UML. It is standardized for all UML tools.&lt;br /&gt;
&lt;br /&gt;
A '''''repository''''' is the database for all UML diagrams managed in a UML tool.&lt;br /&gt;
&lt;br /&gt;
The repository can be represented in the XMI format. The converter from C headerfiles to UML converts header files to a XMI-format-repository. The XMI file can be inputted in a UML tool. Then diagrams can be created with this given database using a UML tool.&lt;br /&gt;
&lt;br /&gt;
===Tools to generate XMI from header files===&lt;br /&gt;
&lt;br /&gt;
The converter contained in the download [[http://sourceforge.net/projects/zbnf ZBNF (sourceforge)]] parses headerfiles and then generates an XMI-file.&lt;br /&gt;
The download contains a folder &amp;lt;tt&amp;gt;zbnfjax&amp;lt;/tt&amp;gt; which should be copied to a proper location on the local harddisk. This folder contains all jar files (Java archives) and scripts to work. Additional there are necessary &lt;br /&gt;
* [[http://saxon.sourceforge.net/ SAXON XSLT translator (sourceforge)]]&lt;br /&gt;
* [[http://www.jdom.org/ jdom]]&lt;br /&gt;
This software tools should be downloaded and placed on the hard disk too. &lt;br /&gt;
&lt;br /&gt;
On a linux system I have copied it to &lt;br /&gt;
&lt;br /&gt;
 /usr/share/XML_Tools/&lt;br /&gt;
 -rwxrwxr-x   1 root root  153253 13. Feb 2008  jdom.jar&lt;br /&gt;
 drwxr-xr-x   7 root root    4096 12. Mär 2010  org.apache.ant_1.6.5&lt;br /&gt;
 -rwxrwxr-x   1 root root 5468048 22. Okt 2009  saxon9he.jar&lt;br /&gt;
 -rwxrwxr-x   1 root root 5046534 28. Okt 2009  saxon9.jar&lt;br /&gt;
 -rwxrwxr-x   1 root root   37139 28. Okt 2009  saxon9-jdom.jar&lt;br /&gt;
&lt;br /&gt;
 /usr/share/vishia/&lt;br /&gt;
 lrwxrwxrwx   1 root root   50  3. Jul 05:41 zbnfjax&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/&lt;br /&gt;
 -rwxr-xr-x 1 root root 76  3. Jul 05:41 zbnfjax&lt;br /&gt;
&lt;br /&gt;
The last file is the start script for all zbnf commands. It is placed in the systems PATH because the translation is invoked using&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;zbnfjax options&lt;br /&gt;
&lt;br /&gt;
as line command.&lt;br /&gt;
&lt;br /&gt;
On windows it is adequate. The tools are the same.&lt;/div&gt;</description>
			<pubDate>Tue, 19 Jul 2011 22:08:44 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:SourceLinesAndDocu</comments>		</item>
		<item>
			<title>SourceLinesAndDocu</title>
			<link>http://72.14.177.54/java4c/SourceLinesAndDocu</link>
			<description>&lt;p&gt;Admin:&amp;#32;javadoc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: TODO&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Lines of code are many lines - only the developer of them looks through it. Or?&lt;br /&gt;
&lt;br /&gt;
Sources have a structure. It is the formal syntax of the language primary. Code lines are top-down structures of classes, data-struct, methods, statement blocks. They can be analyzed formally and presented in there structure. Modern programming environments do so. &lt;br /&gt;
&lt;br /&gt;
==Advantage of textual source lines in comparison with graphic programming==&lt;br /&gt;
&lt;br /&gt;
* '''Code lines - change tracking''': Older and newer versions of sources are able to compare. All source version systems support that. It is possible to track which functionality is changed why, when, who and what exactly.&lt;br /&gt;
&lt;br /&gt;
* ''Graphical programming - change tracking''': If there is a textual representation of the graphical appearance, it is possible to track changes line code lines too. Only it is another notation. But some graphic programming systems stores there content in special maybe binary files or a database adequate form, which doesn't allow a simple comparison of content. &lt;br /&gt;
&lt;br /&gt;
* '''Code lines - searching anything''': Because they are textual files, a grep or ordinary search of text can be applied. Sometimes any textual hint is given to search the proper line. For example there is a textual sequence in an error message or a label on a button - search it in code lines of all files and you find the line where it is handled, without knowledge and understanding of the whole structure of the software.&lt;br /&gt;
&lt;br /&gt;
*  ''Graphical programming - searching anything''': It may be a search function in the graphical programming environment. Is it proper to use?&lt;br /&gt;
&lt;br /&gt;
Summary: Code lines are better to handle but graphic programming is better to understand. Use a graphical programming environment with a simple representation of its content in code lines.&lt;br /&gt;
&lt;br /&gt;
==Generating documentation from code lines==&lt;br /&gt;
&lt;br /&gt;
* The code lines are the first (hack first ideas) and last (debug errors, implement features) which are touched by the programmer. Some programmers don't like writing documentation.&lt;br /&gt;
&lt;br /&gt;
* Documentation outside of the code doesn't seem to be actual. Is it corrected in progress with the code changing?&lt;br /&gt;
&lt;br /&gt;
===javadoc - Java source documentation===&lt;br /&gt;
&lt;br /&gt;
javadoc is a generator to produce html-pages from Java sources. It is a part of any standard Java developer kit. &lt;br /&gt;
&lt;br /&gt;
* The appearance of the code is the same worldwide. It is a standard. Anybody Java developer knows it.&lt;br /&gt;
* The writing styles of comments in the sources are the same worldwide. Anybody Java developer writes with the same style guides.&lt;br /&gt;
* Writing comments for javadoc style is supported by tools, for example in eclipse.&lt;br /&gt;
&lt;br /&gt;
* An example produced with javadoc from me: [[http://www.vishia.org/Java/docuSrcJavaPublic/org/vishia/java2C/LocalIdents.html LocalIdents.java]]&lt;br /&gt;
* An example with graphical content. The source file is used only as base for documentation. [[http://www.vishia.org/Java/docuSrcJavaPublic/org/vishia/java2C/Docu.B_ProcessOfTranslation.html Docu.java]]&lt;br /&gt;
* An example from Sun/Oracle: [[http://download.oracle.com/javase/6/docs/api/java/lang/String.html String.java]]&lt;br /&gt;
* An example from apache: [[http://xerces.apache.org/xerces2-j/javadocs/api/org/w3c/dom/ls/DOMImplementationLS.html DOMImplementationLS.java]]&lt;br /&gt;
&lt;br /&gt;
You can see - all styles of documentation are comparable. The kind of presentation of the functionality is equal.&lt;br /&gt;
&lt;br /&gt;
In the html presentation you get the links to all types automatically without any effort in the source.&lt;br /&gt;
 &lt;br /&gt;
The thinking is:&lt;br /&gt;
* Comment the function and mission of any variable or association (pointer to other class or data struct). &lt;br /&gt;
* Comment the function and mission of any method. Write shortly what the method does.&lt;br /&gt;
* Write one sentence for core function and mission.&lt;br /&gt;
* Write some sentences for details.&lt;br /&gt;
* You can use lists using the html-known tags &amp;lt; ul&amp;gt;, &amp;lt; li&amp;gt; etc.&lt;br /&gt;
* You can write tables using &amp;lt; table&amp;gt; etc. But that is more complex.&lt;br /&gt;
* You can use html-links for example for images in the html presentation. In the code you see the name of the file (the link)&lt;br /&gt;
* You can use links to other elements of the source! It is written {@link class#method(paramtypes)}. Eclipse helps you while selecting with the usual write completion functionality.&lt;br /&gt;
&lt;br /&gt;
The thinking of commenting influences the thinking to a good software structure and proper identifier. If you write the comment, you will think about the meaning of the code elements and you will correct it if it isn't proper.&lt;br /&gt;
&lt;br /&gt;
===Doxygen===&lt;br /&gt;
&lt;br /&gt;
[[http://www.stack.nl/~dimitri/doxygen/ doxygen]] is a usual documentation generation system used for C and C++ sources often. Doxygen has a lot of adjustment possibilities to control the kind of comment designation. It has a lot of possibilities to generate cross references of code and so on. Therefore it is more multifaceted. &lt;br /&gt;
&lt;br /&gt;
===Using javadoc styles for C and C++ sources===&lt;br /&gt;
&lt;br /&gt;
The javadoc notification style of comments in source code is widespread in most of sources. It is possible to use for doxygen too, if the doxygen control files are adjusted for that style. The basic write style is:&lt;br /&gt;
&lt;br /&gt;
  /**Comment core function in the first sentence.&lt;br /&gt;
   * Some more information if necessary.*/&lt;br /&gt;
  int x;&lt;br /&gt;
&lt;br /&gt;
The comment is written before the element.&lt;br /&gt;
&lt;br /&gt;
  /**Comment core function in the first sentence.&lt;br /&gt;
   * Some more information if necessary.&lt;br /&gt;
   * A {@link OtherClass} in the explanation appears in a html-link &lt;br /&gt;
   * for a proper navigation.&lt;br /&gt;
   * &amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Some remarks are proper able to read in lists.&lt;br /&gt;
   * &amp;lt;li&amp;gt;next list bullet.&lt;br /&gt;
   * &amp;lt;/ul&amp;gt;&lt;br /&gt;
   * @param par the explanation of the parameter&lt;br /&gt;
   * @param par2 the next&lt;br /&gt;
   * @return explanation what returns the method&lt;br /&gt;
   * @throws IllegalArgumentException explanation of exceptions if there are any  &lt;br /&gt;
   */&lt;br /&gt;
  int myRoutine(int par, float par2);&lt;br /&gt;
    &lt;br /&gt;
You can write some elaborate explanation if necessary. But think about correction if the parameter of a method are changed or details of the functionality are changed.&lt;br /&gt;
&lt;br /&gt;
==Generating an UML-Model from Headerfiles==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;/div&gt;</description>
			<pubDate>Tue, 19 Jul 2011 21:22:12 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:SourceLinesAndDocu</comments>		</item>
		<item>
			<title>SourceLinesAndDocu</title>
			<link>http://72.14.177.54/java4c/SourceLinesAndDocu</link>
			<description>&lt;p&gt;Admin:&amp;#32;Protected &amp;quot;SourceLinesAndDocu&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: TODO&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Lines of code are many lines - only the developer of them looks through it. Or?&lt;br /&gt;
&lt;br /&gt;
Sources have a structure. It is the formal syntax of the language primary. Code lines are to-down structures of classes, structs, methods, statement blocks. They can be analyzed formally and presented in there structure. Modern programming environments do so. &lt;br /&gt;
&lt;br /&gt;
==Advantage of textual source lines in comparison with graphic programming==&lt;br /&gt;
&lt;br /&gt;
* '''Code lines - change tracking''': Older and newer versions of sources are able to compare. All source version systems support that. It is possible to track which functionality is changed why, when, who and what exactly.&lt;br /&gt;
&lt;br /&gt;
* ''Graphical programming - change tracking''': If there is a textual representation of the graphical appearance, it is possible to track changes line code lines too. Only it is another notation. But some graphic programming systems stores there content in special maybe binary files or a database adequate form, which doesn't allow a simple comparison of content. &lt;br /&gt;
&lt;br /&gt;
* '''Code lines - searching anything''': Because they are textual files, a grep or ordinary search of text can be applied. Sometimes any textual hint is given to search the proper line. For example there is a textual sequence in an error message or a label on a button - search it in code lines of all files and you find the line where it is handled, without knowledge and understanding of the whole structure of the software.&lt;br /&gt;
&lt;br /&gt;
*  ''Graphical programming - searching anything''': It may be a search function in the graphical programming environment. Is it proper to use?&lt;br /&gt;
&lt;br /&gt;
Summary: Code lines are better to handle but graphic programming is better to understand. Use a graphical programming environment with a simple representation of its content in code lines.&lt;/div&gt;</description>
			<pubDate>Tue, 19 Jul 2011 20:27:10 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:SourceLinesAndDocu</comments>		</item>
		<item>
			<title>SourceLinesAndDocu</title>
			<link>http://72.14.177.54/java4c/SourceLinesAndDocu</link>
			<description>&lt;p&gt;Admin:&amp;#32;Advantage of textual source lines in comparison with graphic programming - some ideas.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: TODO&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Lines of code are many lines - only the developer of them looks through it. Or?&lt;br /&gt;
&lt;br /&gt;
Sources have a structure. It is the formal syntax of the language primary. Code lines are to-down structures of classes, structs, methods, statement blocks. They can be analyzed formally and presented in there structure. Modern programming environments do so. &lt;br /&gt;
&lt;br /&gt;
==Advantage of textual source lines in comparison with graphic programming==&lt;br /&gt;
&lt;br /&gt;
* '''Code lines - change tracking''': Older and newer versions of sources are able to compare. All source version systems support that. It is possible to track which functionality is changed why, when, who and what exactly.&lt;br /&gt;
&lt;br /&gt;
* ''Graphical programming - change tracking''': If there is a textual representation of the graphical appearance, it is possible to track changes line code lines too. Only it is another notation. But some graphic programming systems stores there content in special maybe binary files or a database adequate form, which doesn't allow a simple comparison of content. &lt;br /&gt;
&lt;br /&gt;
* '''Code lines - searching anything''': Because they are textual files, a grep or ordinary search of text can be applied. Sometimes any textual hint is given to search the proper line. For example there is a textual sequence in an error message or a label on a button - search it in code lines of all files and you find the line where it is handled, without knowledge and understanding of the whole structure of the software.&lt;br /&gt;
&lt;br /&gt;
*  ''Graphical programming - searching anything''': It may be a search function in the graphical programming environment. Is it proper to use?&lt;br /&gt;
&lt;br /&gt;
Summary: Code lines are better to handle but graphic programming is better to understand. Use a graphical programming environment with a simple representation of its content in code lines.&lt;/div&gt;</description>
			<pubDate>Mon, 18 Jul 2011 19:41:56 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:SourceLinesAndDocu</comments>		</item>
		<item>
			<title>GraphicAndCodeGen</title>
			<link>http://72.14.177.54/java4c/GraphicAndCodeGen</link>
			<description>&lt;p&gt;Admin:&amp;#32;overview&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: TODO&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
Programming with graphical support is the 4-th level of high-level programming languages. UML is one of the graphical languages.&lt;br /&gt;
&lt;br /&gt;
Other ''languages'' are Simulink, Simplorer and such those graphical environments for controlling.&lt;br /&gt;
&lt;br /&gt;
A user can use that graphic languages without knowledge of detailed thinks of source code programming. It is an important advantage. A user can consider the own problems, not the problems of implementation.&lt;br /&gt;
&lt;br /&gt;
The graphical languages should described the structures of connections of blocks etc. in netlists or such adequate. Using that connection lists a line source code can be generated which regards some conditions of deployment of the target platform. The C-language should be the first choosing, because the C language is the usual base language for all platforms.&lt;br /&gt;
&lt;br /&gt;
The generated C-sources should be able to read and understand by a usual C programmer, but they shouldn't be adapted and corrected to introduce implementation details. It is similar to list files to view an assembler code which is compiled from C- sources. It may be able to view and understand but never changed.&lt;/div&gt;</description>
			<pubDate>Mon, 18 Jul 2011 19:23:26 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:GraphicAndCodeGen</comments>		</item>
		<item>
			<title>Main Page</title>
			<link>http://72.14.177.54/java4c/Main_Page</link>
			<description>&lt;p&gt;Admin:&amp;#32;/* Java4C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This site holds information about programming for embedded software in an ObjectOriented style. Ideas and concepts of the Java programming language are integrated in this thinks. Some articles describe software-engineering-topics.&lt;br /&gt;
&lt;br /&gt;
==Base links==&lt;br /&gt;
* [[Java4C]] - why Java-thinking and Java-using for the C-programming&lt;br /&gt;
* [[CRuntimeJavalike]] - A base library for embedded C-software&lt;br /&gt;
* [[Java2C]] - A translator from Java-sources to C-sources&lt;br /&gt;
* [[Component]] - Building the application with components and moduls&lt;br /&gt;
* [[Bazaar]] - A Source Version System&lt;br /&gt;
&lt;br /&gt;
==Java4C==&lt;br /&gt;
* [[Java4C]] - why Java-thinking and Java-using for the C-programming&lt;br /&gt;
* [[SourceLinesAndDocu]] - Graphic programming (UML or other) or '''lines of code''' - what is with the documentation&lt;br /&gt;
* [[GraphicAndCodeGen]] - Graphical programming and code generation&lt;br /&gt;
&lt;br /&gt;
==CRuntimeJavalike==&lt;br /&gt;
* [[CRuntimeJavalike]] - A base library for embedded C-software&lt;br /&gt;
===OSAL===&lt;br /&gt;
* [[OSAL]] - The interface to the operation system with its application layer&lt;br /&gt;
* basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Java2C==&lt;br /&gt;
* [[http://www.vishia.org/Java2C www.vishia.org/Java2C]]&lt;br /&gt;
* [[http://sourceforge.net/projects/java2c Java2C on sourceforge]]&lt;br /&gt;
&lt;br /&gt;
==Components, Dependencies==&lt;br /&gt;
* [[Component]] - Building the application with components and modules - common description&lt;br /&gt;
&lt;br /&gt;
===Components of vishia-Software===&lt;br /&gt;
* [[Components of vishia-Java]] - presentation of components from all Java - sources of org/vishia&lt;br /&gt;
* [[Components of CRuntimeJavalike]] - presentation of components from C-sources&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
* [[Dependency]]&lt;br /&gt;
&lt;br /&gt;
====Dependency-Topics of C====&lt;br /&gt;
* [[forward declaration of struct]]&lt;br /&gt;
* [[forward declaration of functions in header]] &lt;br /&gt;
&lt;br /&gt;
====Dependency-Topics of ObjectOrientation (Java, C)====&lt;br /&gt;
&lt;br /&gt;
* TODO&lt;br /&gt;
&lt;br /&gt;
==Bazaar==&lt;br /&gt;
* [[Bazaar]] - A Source Version System&lt;br /&gt;
* [[Bazaar-Notes]]: discussion (german) about Source-Management and directory structures&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
* [[Linux]] - Some hints for Linux usage&lt;br /&gt;
&lt;br /&gt;
==The key author of this site==&lt;br /&gt;
&lt;br /&gt;
has experience in embedded programming since 1977, beginning with Assembler programming with the Z80-processor. I'm working for a company in germany in themes of embedded control. This site presents experiences independently of concretely job definitions. Hartmut Schorrig, [[http://www.vishia.org www.vishia.org]]&lt;br /&gt;
&lt;br /&gt;
==The mission of this site - Your contribution==&lt;br /&gt;
&lt;br /&gt;
Exchange of experiences. You can take place on discussion. You can complement the text of the pages with your experience and knowledge. You can improve the appearance of the text.&lt;br /&gt;
&lt;br /&gt;
It is necessary to register with a user name to this site.&lt;br /&gt;
&lt;br /&gt;
Future: [[Inspector datagram]]&lt;/div&gt;</description>
			<pubDate>Mon, 18 Jul 2011 19:08:50 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Main_Page</comments>		</item>
		<item>
			<title>Bazaar-Notes</title>
			<link>http://72.14.177.54/java4c/Bazaar-Notes</link>
			<description>&lt;p&gt;Admin:&amp;#32;side branches to commit changes for bugfixes, how to work&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;@ident=Bazaar_notes&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
* [[Bazaar-guide]]: a guide to use Bazaar.&lt;br /&gt;
&lt;br /&gt;
This size is in german, because it is discussed in a german team. It will be presented in english in the future. TODO&lt;br /&gt;
&lt;br /&gt;
==Kurzer Abriss, Arbeit mit MKSSI, git, mercurial, Bazaar==&lt;br /&gt;
&lt;br /&gt;
Hartmut: MKSSI ist seit über 10 Jahren bei mir in Gebrauch.&lt;br /&gt;
* Nur auf Arbeit, zentrale Administration, &lt;br /&gt;
* Die MKSSI-Software wird normalerweise nicht ständig updated. Das Arbeiten ist nicht sehr schnell, eher etwas für ordentliche Pflege.&lt;br /&gt;
* Wird gemacht, für die Versionen, die herausgegeben werden. Nicht für stündliche kleine Änderungen. Da wäre der Arbeitsaufwand zu hoch.&lt;br /&gt;
&lt;br /&gt;
Hartmut: git war das erste der 'dritten Generation' für mich.&lt;br /&gt;
* Geht ganz gut, init commit, alles ganz einfach&lt;br /&gt;
* Nachschauen der Änderungen: Hier ist die GUI (gitk) nicht sehr bedienerfreundlich. Die schnelle Tastaturbedienung ist mangelhaft, der Tastaturfokus ist im falschen Teilfenster. Immer mit Maus schieben ...&lt;br /&gt;
* Linux-like cmdline-Bedienung auf Windows-PC ist für mich eher interessant. &lt;br /&gt;
&lt;br /&gt;
Hartmut: mercurial - ähnlich wie git, nur eher für windows, eigentlich sehr ähnlich git.&lt;br /&gt;
&lt;br /&gt;
Hartmut: Bazaar gefällt mir persönlich wegen der GUI besser. &lt;br /&gt;
&lt;br /&gt;
Hartmut: Alle drei Systeme sind aber funktionell eher ähnlich. Ich pflege Quellen in Bazaar, um sie dann auch in hg zu committen, mit selbigem commit-Text wie in Bazaar zuvor zusammengestellt. Das ist nur ein Aufruf. Ein Hg-Archiv beispielsweise für CRuntimeJavalike liegt auf [[https://bitbucket.org/jchartmut/cruntimejavalike bitbucket.org/jchartmut/cruntimejavalike]]. Hg deshalb, weil die bitbucket-Seite nur hg unterstützt. Der Aufwand, in hg doppelt zu pflegen, ist kaum erhebenswert.  &lt;br /&gt;
&lt;br /&gt;
;Commit-Text zusammenstellen&lt;br /&gt;
&lt;br /&gt;
:Vorderhand geht es beim Commit-text darum: Was leistet diese Version insgesamt, unterschied zur Vorversion. In der Zweiten Linie geht es aber um die Änderung in den einzelnen Files. &lt;br /&gt;
&lt;br /&gt;
:Sind im Commit sehr viele Files enthalten, dann handelt es sich meist um das Ergebnis eines Refactoring wegen einer Änderung. Solche Änderungen brauchen in den Quellfiles nicht vermerkt werden, zuviel Aufwand, uninteressant.&lt;br /&gt;
&lt;br /&gt;
:Sind dagegen wenige Files geändert, dann lag meist auch eine Änderung der Funktionalität vor. Diese sollte unabhängig vom Commit in den Quellfiles notiert werden. Hier hilft aber die Differenzanzeige, um während des Commit die Änderungen in den Files zu vermerken. Man kann einen passenden Commit-Text zusammenstellen, dabei die Änderung der Einzelfiles betrachten und dabei in den Einzelfiles Änderungen notieren (log des Files).&lt;br /&gt;
&lt;br /&gt;
:Ein automatisches Eintragen der Änderung in den Files aus dem checkin-Textes aus der Arbeit mit dem Source-Integrity-System produziert meist Einträge in den Files, die die Änderungen schlecht abbilden. Das liegt daran, weil der Arbeitsaufwand für jeden Einzelfile zu hoch ist. Dieses automatische Eintragen ist aber eine häufig verwendete oder voreingestellte Methode bei MKSSI &amp;amp; co.&lt;br /&gt;
&lt;br /&gt;
: Der Arbeitsaufwand bei manuellem Eintragen in den File ist deshalb bei Bazaar geringer, weil&lt;br /&gt;
:* Es gibt eine schnelle Übersicht, welche Files betroffen sind. Einfacher Knopfdruck für Viewdiff. Man kann schnell auswählen, bei welchen Files ggf. gleiche Einträge überhaupt notwendig sind. Nicht bei allen geänderten.&lt;br /&gt;
:* Mit den Files, die keine wesentlichen Änderungen enthalten sondern nur Anpassungen an Änderungen anderer Files, braucht man sich also gar nicht beschäftigen. &lt;br /&gt;
:* Die Änderung im File eingetragen und per Zwischenablage auch im Commit-Text abgelegt ist dann eigentlich nur einmaliger Aufwand, nicht zweimal.&lt;br /&gt;
:* Wenn es wesentliche Änderungen sind, dann ist die Beschreibung der Änderung auch ein schöpferischer und nicht formeller Akt. Dann lohnt es sich auch, die entsprechend notwendige Zeit aufzubringen. Möglicherweise wird man bei der Änderungsbeschreibung im File auch noch weitere dabei entdeckte Pflegekorrekturen anbringen, die insgesamt die Quelle weiter aufwerten. Dann hat es sich sowieso gelohnt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Source Content Management oder hart archivieren? Nur Quellen im SCM?==&lt;br /&gt;
&lt;br /&gt;
Eine harte Archivierung ist das Verpacken der Files auf einem Datenträger. Da das Zip-format sich als langjährig beständig erwiesen hat, kann man ganze File-Bäume zippen und irgendwo aufheben.&lt;br /&gt;
&lt;br /&gt;
Nachteil: Keine Unterstützung für Diff-View außer auspacken und mit einem Diff-tool vergleichen. Der Total-Commander eignet sich dazu allerdings recht gut, da er in beiden Paneelen in zip-Archive tief eintauchen kann.&lt;br /&gt;
&lt;br /&gt;
Vorteil: Unabhängig von einem Tool, die Files einer Version sind zusammengebunden einfach da. Es hat sich schon oft als günstig erwiesen, lange Jahre zurückliegende Files nicht mit den damaligen Tools aufrollen zu müssen sondern einfach entzippen.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil für die Langjährigkeit sollte bedacht werden.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Ab und zu zippen und wegpacken, mindestens bei wichtigen Releaseständen. Aber unnütze zipfiles auch mal löschen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Für akutelle Softwareentwicklung jedenfalls ein Source-Integrity-Tool nutzen, Zippen nur zusätzlich.&lt;br /&gt;
&lt;br /&gt;
===Verzeichnissstuktur-Rückschluss===&lt;br /&gt;
&lt;br /&gt;
Sowohl für das Zippen als auch für Sourcenpflege, Sourcenaustausch usw. liegt der tatsächliche Umfang von Sources insgesamt meist in einem Bereich von wenigen Megabyte. Damit ist der Datenaustausch mindestens erleichtert. Wenn man in die selbe Verzeichnisstruktur in der Quellen liegen noch hineintue:&lt;br /&gt;
* Objects&lt;br /&gt;
* erzeugte executable und umfangreiche Datenbasis-Files (Visual Studio ncb-Files und dergleichen)&lt;br /&gt;
* logfiles, Output-Files beim Testen&lt;br /&gt;
* alte Archive (zips)&lt;br /&gt;
&lt;br /&gt;
dann springt der Umfang des Verzeichnisbausms von wenigen Megabyte ganz schnell auf -zig Megabyte. Das Problem merkt man&lt;br /&gt;
* beim zippen (ganz schnell mal ablegen zum späteren Vergleich)&lt;br /&gt;
* beim Vergleichen (alle Obj erscheinen als geändert, alles rot, erst mal schaun was das ist)&lt;br /&gt;
* bei der Pflege der Sources in einem SM-system (Source Management): viele nicht erfasste files: Sind die wichtig? Ach, sind nur Obj, doch ein wichtige wird übersehen.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt;Schlussfolgerung: Möglichst Sources von Testfiles und Executables trennen. Die wenigen Files, die nicht trennbar sind (weil die Tools sie ins aktuelle Verzeichnis legen), in einer ignore-Liste erfassen, ggf. beim zippen ausschließen usw. Sind es wenige, dann sind sie verwaltbar&lt;br /&gt;
* Object-Files auf einem tmp-Ordner speichern&lt;br /&gt;
* Generierergebnisse neben dem Source-Baum speichern.&lt;br /&gt;
&lt;br /&gt;
===Archivieren von Executables===&lt;br /&gt;
Aus oben genannten Gründen sollten die Libs und Executables ''nicht'' mit den Sources im SM gemischt werden.&lt;br /&gt;
* Die libs und executables könnten einerseits immer aus den Sources generiert werden (wenn alles richtig ist)&lt;br /&gt;
* Die libs und executables sind nicht vergleichbar mit üblichen diffs.&lt;br /&gt;
* Die libs und executables sind im Code-Umfang zu hoch.&lt;br /&gt;
&lt;br /&gt;
Es ist aber wichtig, libs und exe im Zusammenhang mit einem Checkpoint der Sources zu speichern.&lt;br /&gt;
* Als Auslieferungsstand&lt;br /&gt;
* Als wichtigen Teststand für Rückrüsten, möglicherweise ein Kandidat für Auslieferung.&lt;br /&gt;
&lt;br /&gt;
Lösung:&lt;br /&gt;
* Beim committen eines guten Standes, der angetestet ist, ein kleines batch laufen lassen, das die exes lokal kopiert mit Datumskennzeichnung.&lt;br /&gt;
* Damit sind mehrere exes mit Datumsverbindung zum commit lokal vorhanden. Es kann getestet werden.&lt;br /&gt;
* '''Auslieferung: Executables und ggf. libs als zip abspeichern''',, siehe oben. Dabei auf den Stand zugreifen, der vorher lokal kopiert wurde und garantiert aus den Sources, die committed wurden, erstellt wurde.&lt;br /&gt;
* Nur bei '''Master-Releases''', die entgültig ausgeliefert werden, sollte folgeder Aufwand getrieben werden: Nach erfolgreichem Test die Quellen auf Produktgenerierungsrechner von anderer Person auschecken, neu compilieren, neues Generat erstellen und nochmals testen. Diese Vorgehensweise sichert die Konsistenz der Quellen mit dem Generat und dürfte bei Auslieferungen wichtig sein, dauert aber in der täglichen Fortschrittsarbeit einfach zu lange.&lt;br /&gt;
&lt;br /&gt;
==Mehrere Repositories für ein Produkt==&lt;br /&gt;
@ident=multiBzr&lt;br /&gt;
&lt;br /&gt;
;Produkt aus mehreren Quell-Komponenten&lt;br /&gt;
&lt;br /&gt;
:Produkt (Executable etc.) besteht aus Quellen aus mehreren Projekten (Komponenten).&lt;br /&gt;
Die Quell-Komponenten sind relativ unabhängig und werden an anderer Stelle aus anderen Zusammenhängen ebenfalls gepflegt.&lt;br /&gt;
&lt;br /&gt;
:Schlussfolgerung: Nicht mischen, weil sonst kein Durchblick wo was gepflegt wird.&lt;br /&gt;
Jede Quell-Komponente wird in ihrem eigenem .bzr-repository gepflegt.&lt;br /&gt;
&lt;br /&gt;
;Quell-Komponenten befinden sich im Produkt-Sourcenbaum in jeweils bestimmten Unterverzeichnissen&lt;br /&gt;
&lt;br /&gt;
:Unterverzeichnisordnung ist zweckmäßig, weil damit auch im Produkt-Verzeichnis ordnung herrscht.&lt;br /&gt;
&lt;br /&gt;
:In linux kann dort ein symbolischer Link stehen, d.h. Quellen stehen eigentlich ganz woanders. In Windows ist eine Kopie der Komponenten-Quellen im Produkt-Verzeichnisbaum vorhanden.&lt;br /&gt;
&lt;br /&gt;
: In windows kann aber auch ggf. eine Quellkomponente auch ganz woanders stehen, beispielsweise kann bei Eclipse ein Verzeichnis mit absolutem Pfad von irgendwo dem Projkekt hinzugefügt werden. Das ganze ist eine Sache von Pfaden, die irgendwo definiert sein müssen.&lt;br /&gt;
&lt;br /&gt;
:Schlussfolgerung: Das .bzr-Repository der Quellen der Komponente sollte in dem Unterverzeichnis stehen.&lt;br /&gt;
&lt;br /&gt;
: Folglich hängt der Name des Unterverzeichnisses nicht an der Quellkomponente, kann im Produkt auch beliebig gewählt werden. Folglich kann die Quellkomponente auch irgendwo anders stehen, also kein Unterverzeichnis sondern absoluter Pfad. Der absolute Pfad wird beim editieren/generieren beachtet.&lt;br /&gt;
&lt;br /&gt;
Das spricht insgesamt dafür, ein Produkt aus mehreren Bazaar-Quell-Repositories zusammenzusetzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mehrere Produkte aus einem Repository==&lt;br /&gt;
Das große Thema ist Wiederverwendung (Reuse). Häufig zu Beobachten: Reuse besteht aus copy'n paste and change. Die Quellen wandern also irgendwo anders hin, bzgl SCM auch für den einzelnen besser zu beherrschen - man muss sich nur mit dem beschäftigen, was man selbst hat.&lt;br /&gt;
&lt;br /&gt;
Das ist keine wirkliche Wiederverwendung. Der wirkliche Vorteil des reuse geht dabei verloren:&lt;br /&gt;
* Fehler, die in Produkten festgestellt werden, werden in den jeweiligen Modulen korrigiert und sind dann automatisch auch für andere Produkte mit korrigiert, obwohl sie dort ggf. noch gar nicht aufgefallen sind.&lt;br /&gt;
&lt;br /&gt;
Für true-reuse ist es notwendig, die Software-Module so zu bauen, dass sie '''unverändert''' in verschiedenen Produkten verwendbar sind und das Änderungen für alle Produkte nutzbar sind. Das ist eine Frage der Schnittstellen. Die Schnittstellen sind viel wichtiger als die innere Funktionalität. Letztere kann man immer noch verbessern. Schnittstellenänderungen sind kritisch. - Andererseits sind Schnittstellenänderungen auch verträglich, wenn sie formell adaptiert werden können. &lt;br /&gt;
&lt;br /&gt;
Ein shared-Repository in bazaar scheint die Lösung zu bieten, aus einem recht großen Quellenumfang für verschiedene Komponenten verschiedene Quellen herauslösen zu können. Die Komponenten haben selbe gemeinsame Quellen, ggf. in verschiedenen Revisionen, die aber immer abgeglichen werden können sollten. Die Komponenten sind dann Basis für ein Produkt. Komponenten existieren in Form von libs oder jars in Java und können eigenständig getestet werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Quellen           Komponenten       Produkte&lt;br /&gt;
  viele        ===&amp;gt; weniger      ===&amp;gt; aus Komponenten&lt;br /&gt;
  verschiedene      überschaubar      und Produkt-spezial-Quellen&lt;br /&gt;
                                      gebaut.&lt;br /&gt;
&lt;br /&gt;
Wie funktioniert shared-Repository als zentraler Bezug - bin beim testen. (Hartmut)&lt;br /&gt;
==Zentrale Ablage für Repositories==&lt;br /&gt;
@ident=centralRepos&lt;br /&gt;
&lt;br /&gt;
Man kann immer und überall Repositories haben. Behält man den überblick und synchronisiert diese gegenseitig (push, pull), dann gibt es auch nicht zuviele Seitenzweige.&lt;br /&gt;
&lt;br /&gt;
Jedoch, arbeiten viele Leute mit den Repositories, auch weniger eingeweihte, einfache Nutzer, anderes Problem Archivierung, langjähriges aufheben: Dann sollte an einer definierten Stelle das Master-Repository stehen. Jeder Quellenbearbeiter hat die Pflicht, sich mit dem Master-Repository abzustimmen, also seine Änderungen zu pushen oder von dort zu pullen. Gegebenenfalls sollte eine Person mit der Pflege des Master-Repositories beauftragt sein. Mindestens bei Releaseständen muss diese Person dort bereinigend eingreifen.&lt;br /&gt;
&lt;br /&gt;
===Creating one shared repository in the local space===&lt;br /&gt;
The ''local space'' means any external hard disk, network folder or such which is owned by one person, by me. It is my local space, which can be used from some more people in my direct environment.&lt;br /&gt;
&lt;br /&gt;
For any component of sources one shared repository should be created one time. On one sub directory per component: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Shared repository''. An existing plain branch can be pushed to them.&lt;br /&gt;
&lt;br /&gt;
===Creating a branch for working===&lt;br /&gt;
&lt;br /&gt;
* Create a new plain branch at the working position: ''bzre: Bazaar -&amp;gt; Start -&amp;gt; Initialize: (x) Plain branch''.&lt;br /&gt;
* Pull from a shared repositiory: ''Button Pull, select the shared repository, select a branch.&lt;br /&gt;
** If there are some files already, create the branch at a new position and then move .bzr subdir.&lt;br /&gt;
&lt;br /&gt;
==Branches und dessen Auflösung==&lt;br /&gt;
@ident=.branch&lt;br /&gt;
&lt;br /&gt;
;Viele Seitenzweige wegen unterschiedlichen Korrekturen&lt;br /&gt;
&lt;br /&gt;
:Man kann sich auf den Standpunkt stellen, bei Korrekturen für kundenrelevante Software jeweils nur das aufgetretene Fehlerbild zu behandeln, alle anderen Softwareteile unverändert zu lassen. (''Do not touch a running system''). Das ist eine weit verbreitete Vorgehensweise. Folge sind dann sehr viele Seitezweige, die kaum mehr zusammenfließen.&lt;br /&gt;
&lt;br /&gt;
: Primär ist diese Vorgehensweise richtig.&lt;br /&gt;
&lt;br /&gt;
: Es zeigt sich aber, dass eine Änderung in Quellen, auch Restrukturierung, häufig zwar Nacharbeiten erforderlich macht. Diese Nacharbeiten sind aber formal abhandelbar. Man braucht nicht an jeder Stelle einer notwendigen Adaption an geänderte Quellenstände nachzudenken sondern muss nur den Compiler befragen. Kommt keine Fehlermeldung, ist alles in Ordnung. Eine Fehlermeldung soll mit formellen anschauen von Aufrufargumenttypen usw. behebbar sein, ohne dass man in die eigentliche Funktionalität einsteigt. Ist eine solche Nacharbeit möglich, dann kostet diese nur die Zeit der Pflege der Quellen, keine extra Testzeit. Zudem kann die Quellenpflege von jemanden ausgeführt werden, der zwar sehr gute Kenntnisse von Quellen und COmpiler hat, aber keine Tiefenkenntnis für die jeweilige Anwendung haben braucht. Man kann also delegieren.&lt;br /&gt;
&lt;br /&gt;
: In diesem Sinn ist eine Adaption eines Produktes an veränderte Quellen der Komponenten möglich und zweckmäßig. Mann kann dann eher an einem Hauptzweig arbeiten.&lt;br /&gt;
&lt;br /&gt;
: Schlussfolgerung: Schnelle Änderungen -&amp;gt;Seitenzweig, Auflösen dessen, Änderung in Hauptzweig einfließen lassen und Adaption des Produktes auf Hautpzweig der Komponenten ausführen.&lt;br /&gt;
&lt;br /&gt;
===Side branches===&lt;br /&gt;
less experience&lt;br /&gt;
&lt;br /&gt;
 bzr checkout ../masterlocation . -r REVNR&lt;br /&gt;
&lt;br /&gt;
Gets a part of trunk untio REVNR. It is similar &lt;br /&gt;
 &lt;br /&gt;
  bzr revert -r REVNR&lt;br /&gt;
&lt;br /&gt;
What is the difference???&lt;br /&gt;
&lt;br /&gt;
  bzr update ../masterlocation .&lt;br /&gt;
&lt;br /&gt;
This copies all files in the current dir. It seems to destroy the older-revision side branch (?)&lt;br /&gt;
&lt;br /&gt;
Is there a possibility to checkin changes based on a older revision, without any merge. Only the changed files based on the older revision should be stored in the bazaar repositiory - to compare with other versions or look for changes later. Background: Changing of some source files to bugfix an older software. The reason is not develop and merge.&lt;/div&gt;</description>
			<pubDate>Fri, 15 Jul 2011 16:40:04 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Bazaar-Notes</comments>		</item>
		<item>
			<title>Os error</title>
			<link>http://72.14.177.54/java4c/Os_error</link>
			<description>&lt;p&gt;Admin:&amp;#32;starting text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[OSAL]] // [[Main_Page]]&lt;br /&gt;
* siblings: [[os_types_def]] // [[os_AtomicAccess]] // [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Generally an error handling is necessary to detect failures in the software. In a situation where a function doesn't know what to do &lt;br /&gt;
*either it should return with an message ''error'' &lt;br /&gt;
*or it should call an error routine &lt;br /&gt;
*or it should throw an exception.&lt;br /&gt;
&lt;br /&gt;
In the first case the user should be check the return state and handle with the error, whereby in the last two cases the user should not know anything about possible errors in its ''best case programming branch''. Therefore a try-catch-throw mechanism is established for high level user programming. But in the OSAL layer usual a return value is used to detect the error state. It is so, because any try-catch mechanism is defined in a layer above the OSALs one only.&lt;br /&gt;
&lt;br /&gt;
Nevertheless it is advisable to support an error handling adequate to try-throw at OSAL-level too.&lt;br /&gt;
&lt;br /&gt;
==Error handling in OSAL==&lt;br /&gt;
&lt;br /&gt;
The OSAL in the CRuntimeJavalike environment supports the following mechanism:&lt;br /&gt;
&lt;br /&gt;
===Error routine to user level support===&lt;br /&gt;
A function type&lt;br /&gt;
&lt;br /&gt;
 C_TYPE typedef void MT_os_Error(int errorCode, const char* description, int value1, int value2);&lt;br /&gt;
&lt;br /&gt;
is defined. The routine&lt;br /&gt;
&lt;br /&gt;
 extern_C int os_setErrorRoutine(MT_os_Error* routine);&lt;br /&gt;
&lt;br /&gt;
accepts any routine with this prototype. Using this mechanism any error at OSAL level can be transferred to a higher user level, for example to use a throw mechanism in a try-catch environment or to support an error logging.&lt;br /&gt;
&lt;br /&gt;
All conflicts in the OSAL adaption routines with the operation system or with itself should call the routine ...TODO&lt;/div&gt;</description>
			<pubDate>Fri, 03 Jun 2011 19:56:00 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Os_error</comments>		</item>
		<item>
			<title>OSAL</title>
			<link>http://72.14.177.54/java4c/OSAL</link>
			<description>&lt;p&gt;Admin:&amp;#32;Common headers: Fwc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
@ident=OSAL&lt;br /&gt;
&lt;br /&gt;
'''OS-independent programming'''&lt;br /&gt;
&lt;br /&gt;
Some programmers work for their ''project''. It may be running on a special hardware with a special &lt;br /&gt;
operation system, mostly a RTOS (Real Time Operation System). &lt;br /&gt;
The tests are executed at the target hardware - reality tests. &lt;br /&gt;
Thus the thought is ''C is not C, any target system needs its own slang (dialect)''.&lt;br /&gt;
&lt;br /&gt;
What is missing? Compilation of the sources with a proper Integrated Development Environment (IDE). &lt;br /&gt;
On the PCs, there are some good IDEs, such as Eclipse, Microsoft Visual Studio etc. &lt;br /&gt;
Mostly, the IDEs for a special hardware are good, but not so good like PC-platform-tools.&lt;br /&gt;
&lt;br /&gt;
What is also missing? Functional testing the algorithm. It isn't a real-time test. But &lt;br /&gt;
it may be essential.&lt;br /&gt;
&lt;br /&gt;
What is the effort? The algorithm in C need to compile in a PC-environment. It should be able to test,&lt;br /&gt;
not in real-time, maybe only in one thread or more. &lt;br /&gt;
For this reason the OS-functionality should be able to use at the test-environment. &lt;br /&gt;
&lt;br /&gt;
What is the result:&lt;br /&gt;
* Well functional tested algorithms&lt;br /&gt;
* Faster writing, reorganization, optimizing and gardening of sources, because the PC-platform&lt;br /&gt;
is able to use for faster work.&lt;br /&gt;
* Better sources.&lt;br /&gt;
&lt;br /&gt;
The tests on the target-platform are reduced to test the real platform problems, not to test the algorithm basically.&lt;br /&gt;
&lt;br /&gt;
'''Need of special Operation System capabilities'''&lt;br /&gt;
&lt;br /&gt;
Most of the Operation Systems are similar in a large way of thinking. All of these support multi-threading, &lt;br /&gt;
with mutex etc. Most of them have a file system in a adequate kind etc.&lt;br /&gt;
&lt;br /&gt;
The differences are: They should be support the hardware platform with different processors, different&lt;br /&gt;
equipment in RAM, ROM, different I/O. But the user programming shouldn't consider all of them so far.&lt;br /&gt;
The user programming should be realized in a more abstract shell. This means the RTOS should be proper&lt;br /&gt;
for the hardware, but it should not have to much special features for the user programming. It may be&lt;br /&gt;
useful only for driver or interrupt-level-programming.&lt;br /&gt;
&lt;br /&gt;
Conclusion: The user programming should use unified interfaces to the operation system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OSAL-Level in the CRuntimeJavalike==&lt;br /&gt;
&lt;br /&gt;
Programming in Java is OS-independent in the first way. In that mind, the CRuntimeJavalike needs a &lt;br /&gt;
''Operation System Adaption Level'' (OSAL).&lt;br /&gt;
&lt;br /&gt;
The given OSAL is layered closed to a ''not-only Java-like''-programming. It supports standard C &lt;br /&gt;
functionality. The typical Java-like functions like ThreadJc based on this OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
A first idea in the past was to introduce the OSAL-level in the OS-oriented classes like ThreadJc, ObjectJc &lt;br /&gt;
with its ''synchronized_ObjectJc''-methods etc. But a Java-independent definition &lt;br /&gt;
of the OSAL-interface provides some use-cases for the non-java-like-oriented programming, too. &lt;br /&gt;
So it is implemented independently from Java-like-C-classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Simple-C in OSAL==&lt;br /&gt;
&lt;br /&gt;
The OSAL-component contains Headerfiles and Implementations, which contain simple C-functionality. They are independent of compiler, platform and operation systems. That header are contained in the CRuntimeJavalike-package (see [[https://launchpad.net/zbnf/srcjava.zbnf launchpad.net/zbnf/srcjava.zbnf]]) in the subdir include/Fwc/*.h:&lt;br /&gt;
&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Exception.h.html include/Fwc/fw_Exception.h]]: Exception handling for C and C++ inclusive Stacktrace-Mechanism. In C a longjmp is used to throw. (longjmp.h is defined in the old Standards of C and in C99 too).     &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Formatter.h.html include/Fwc/fw_Formatter.h]]: Declaration of methods for formatting Strings. It include time-formattings. It is similar to sprintf.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_MemC.h.html  include/Fwc/fw_MemC.h]]: Definition of a struct MemC with pointer and its size. Some macros to handle with pointer. Some function prototypes for MemC-handling.            &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Readline.h.html  include/Fwc/fw_Readline.h]]: Support of reading lines from a file. A line can be terminated with 0d, 0a or any combination (Windows, Unix, Mac-conventions all in one). The os_file.h is used as interface to read a file.      &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_SimpleC.h.html  include/Fwc/fw_SimpleC.h]]: Some basicly simple macros and function declarations.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_String.h.html  include/Fwc/fw_String.h]]: Basic functions for String storing in a struct StringJc. It is the alternative to zero-terminated C-Strings. The pointer and the length is stored. The basic functions are a bridge between 0-terminated C-strings and StringJc-referenced strings.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_ThreadContext.h.html  include/Fwc/fw_ThreadContext.h]]: The ThreadContext is managed in the OSAL, but its struct is defined here.  &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_timeconversions.h.html  include/Fwc/fw_timeconversions.h]]: struct and funtion declarations for time conversions: A timestamp should be stored internally in form of currently seconds and microseconds after a start time. The conversion to a human readable time should be done only for presentation. The routines support the conversion.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Va_list.h.html  include/Fwc/fw_Va_list.h]]: An appreciation to the &amp;lt; stdarg.h&amp;gt; concept. The value as new: Any argument-type of a variable argument list is described with one char in a char*-string with one char. With the knowledge of the correct type any users function can be use the variable argument more correctly. Usual any other information should be necessary, for example the format-String of sprintf. This header and functions are used in fw_formatter.h&lt;br /&gt;
&lt;br /&gt;
The C-files are named adequate to the header files. They are located in the same component CRuntimeJavalike in the directory &amp;lt;tt&amp;gt;source/Fwc&amp;lt;/tt&amp;gt;. This base routines can be used for implementation of special os-adaption. Nevertheless for example the exception handling should not be used for the osal-level, because usage of exception handling is a decision of applications. It is offered here, but not used. The OSAL-adaption should be written simple and easy.&lt;br /&gt;
&lt;br /&gt;
==Common headers==&lt;br /&gt;
&lt;br /&gt;
The os-adaption contain C-files, which are special written for the appropriate operation system. But the headerfiles are identical over all mostly. It describes the OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
An interface in C-language is established in header-files. Most of compiler-tool-associated header-files&lt;br /&gt;
declare the same things, but in their own files in a maybe different form. So the risk of&lt;br /&gt;
little differences are given.&lt;br /&gt;
&lt;br /&gt;
Instead all OS-interface-functions should be declared in the same header-files, independent of&lt;br /&gt;
the current used operation system. The implementation of the OSAL should use this files and adapt&lt;br /&gt;
their OS-functions. &lt;br /&gt;
&lt;br /&gt;
All of those OS-independent common header files for OSAL-functions are declared &lt;br /&gt;
in the folder &amp;lt;tt&amp;gt;CRuntimeJavalike/OSAL/inc&amp;lt;/tt&amp;gt;. The current file list is:&lt;br /&gt;
&lt;br /&gt;
 os_types_def_common.h&lt;br /&gt;
 os_mem.h&lt;br /&gt;
 os_endian.h&lt;br /&gt;
 os_error.h&lt;br /&gt;
 os_AtomicAccess.h&lt;br /&gt;
 os_time.h&lt;br /&gt;
 os_thread.h&lt;br /&gt;
 os_sync.h&lt;br /&gt;
 os_file.h&lt;br /&gt;
 os_socket.h&lt;br /&gt;
&lt;br /&gt;
The OSAL-Implementation can use some basicly C-routines, which are offered for common usage with a OSAL-library too. That headers files are contained in &amp;lt;tt&amp;gt;CRuntimeJavalike/Fwc&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 fw_SimpleC.h &lt;br /&gt;
 fw_MemC.h&lt;br /&gt;
 fw_String.h&lt;br /&gt;
 fw_Formatter.h&lt;br /&gt;
 fw_timeconversions.h&lt;br /&gt;
 fw_ThreadContext.h&lt;br /&gt;
 fw_Exception.h&lt;br /&gt;
 fw_Va_list.h&lt;br /&gt;
 fw_Readline.h&lt;br /&gt;
&lt;br /&gt;
==Different headers==&lt;br /&gt;
&lt;br /&gt;
* One Headerfile, which contains some depending definitions which should be adapted to the platform, os and compiler. It is the [[os_types_def]].h.&lt;br /&gt;
Some things should be declared or defined in a OS-specific way. The same things should be defined &lt;br /&gt;
in a different kind, appropriate to the operation system and the compiler properties.&lt;br /&gt;
&lt;br /&gt;
The most important file doing this is the ,,os_types_def.h,,. The same file-name is used&lt;br /&gt;
in different directories, all specific for OS and compiler. It defines the same things in a different way.&lt;br /&gt;
&lt;br /&gt;
The most noticeable property is the definition of the OS- and compiler-depending definition of &lt;br /&gt;
fix-size-integer types. The C99-standard suggests the usage of ,,int32_t,, etc. But most of the &lt;br /&gt;
programmers had created their own standard before or simultaneous to the C99-Standard. These types are present&lt;br /&gt;
in many sources. They are defined in some special headers like ,,standard.h,,, &lt;br /&gt;
which is anytime ,,mystandard.h,,. These types are defined in the ,,os_types_def.h,,. &lt;br /&gt;
&lt;br /&gt;
There are some things defined there in addition: &lt;br /&gt;
* little/big endian defines, processors are different.&lt;br /&gt;
* C++-keyword for C-usage, especially ,,bool,,, ,,true,,, ,,false,,.&lt;br /&gt;
* The macro METHOD_C which maybe ,,extern &amp;quot;C&amp;quot;,, or not. &lt;br /&gt;
* A ,,MemUnit,,-type. It is the type which describes one element in the address spaces. &lt;br /&gt;
It is not a ,,char,, anytime, not in Signal-processors.&lt;br /&gt;
 &lt;br /&gt;
==C-basics==&lt;br /&gt;
&lt;br /&gt;
There are some things, which may defined in a good C-design able to use for the OSAL-level too.&lt;br /&gt;
This C-basics are provided OS-independently in the following files (definition and implementation):&lt;br /&gt;
&lt;br /&gt;
 fw_Exception.h&lt;br /&gt;
 fw_Exception.c&lt;br /&gt;
 fw_LogMessage.h&lt;br /&gt;
 fw_LogMessage.c&lt;br /&gt;
 fw_Va_list.h&lt;br /&gt;
 fw_formatter.c&lt;br /&gt;
 fw_Formatter.h&lt;br /&gt;
 fw_SimpleC.c&lt;br /&gt;
 fw_SimpleC.h&lt;br /&gt;
 fw_MemC.h&lt;br /&gt;
 fw_MemC.c&lt;br /&gt;
 objectBaseC.h&lt;br /&gt;
 fw_Object.c&lt;br /&gt;
 fw_timeconversions.h&lt;br /&gt;
 fw_timeconversions.c&lt;br /&gt;
 fw_ThreadContext.h&lt;br /&gt;
 fw_String.h&lt;br /&gt;
 fw_threadContext.c&lt;br /&gt;
 &lt;br /&gt;
This so-named ''framework''-level is independent from the OSAL-adaption and it is ready to use&lt;br /&gt;
for the OS-adaption.&lt;br /&gt;
 &lt;br /&gt;
==OS-adaption for threads==&lt;br /&gt;
 &lt;br /&gt;
see ,,os_thread.h,,&lt;/div&gt;</description>
			<pubDate>Fri, 13 May 2011 07:10:41 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:OSAL</comments>		</item>
		<item>
			<title>OSAL</title>
			<link>http://72.14.177.54/java4c/OSAL</link>
			<description>&lt;p&gt;Admin:&amp;#32;/* Common headers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
@ident=OSAL&lt;br /&gt;
&lt;br /&gt;
'''OS-independent programming'''&lt;br /&gt;
&lt;br /&gt;
Some programmers work for their ''project''. It may be running on a special hardware with a special &lt;br /&gt;
operation system, mostly a RTOS (Real Time Operation System). &lt;br /&gt;
The tests are executed at the target hardware - reality tests. &lt;br /&gt;
Thus the thought is ''C is not C, any target system needs its own slang (dialect)''.&lt;br /&gt;
&lt;br /&gt;
What is missing? Compilation of the sources with a proper Integrated Development Environment (IDE). &lt;br /&gt;
On the PCs, there are some good IDEs, such as Eclipse, Microsoft Visual Studio etc. &lt;br /&gt;
Mostly, the IDEs for a special hardware are good, but not so good like PC-platform-tools.&lt;br /&gt;
&lt;br /&gt;
What is also missing? Functional testing the algorithm. It isn't a real-time test. But &lt;br /&gt;
it may be essential.&lt;br /&gt;
&lt;br /&gt;
What is the effort? The algorithm in C need to compile in a PC-environment. It should be able to test,&lt;br /&gt;
not in real-time, maybe only in one thread or more. &lt;br /&gt;
For this reason the OS-functionality should be able to use at the test-environment. &lt;br /&gt;
&lt;br /&gt;
What is the result:&lt;br /&gt;
* Well functional tested algorithms&lt;br /&gt;
* Faster writing, reorganization, optimizing and gardening of sources, because the PC-platform&lt;br /&gt;
is able to use for faster work.&lt;br /&gt;
* Better sources.&lt;br /&gt;
&lt;br /&gt;
The tests on the target-platform are reduced to test the real platform problems, not to test the algorithm basically.&lt;br /&gt;
&lt;br /&gt;
'''Need of special Operation System capabilities'''&lt;br /&gt;
&lt;br /&gt;
Most of the Operation Systems are similar in a large way of thinking. All of these support multi-threading, &lt;br /&gt;
with mutex etc. Most of them have a file system in a adequate kind etc.&lt;br /&gt;
&lt;br /&gt;
The differences are: They should be support the hardware platform with different processors, different&lt;br /&gt;
equipment in RAM, ROM, different I/O. But the user programming shouldn't consider all of them so far.&lt;br /&gt;
The user programming should be realized in a more abstract shell. This means the RTOS should be proper&lt;br /&gt;
for the hardware, but it should not have to much special features for the user programming. It may be&lt;br /&gt;
useful only for driver or interrupt-level-programming.&lt;br /&gt;
&lt;br /&gt;
Conclusion: The user programming should use unified interfaces to the operation system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OSAL-Level in the CRuntimeJavalike==&lt;br /&gt;
&lt;br /&gt;
Programming in Java is OS-independent in the first way. In that mind, the CRuntimeJavalike needs a &lt;br /&gt;
''Operation System Adaption Level'' (OSAL).&lt;br /&gt;
&lt;br /&gt;
The given OSAL is layered closed to a ''not-only Java-like''-programming. It supports standard C &lt;br /&gt;
functionality. The typical Java-like functions like ThreadJc based on this OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
A first idea in the past was to introduce the OSAL-level in the OS-oriented classes like ThreadJc, ObjectJc &lt;br /&gt;
with its ''synchronized_ObjectJc''-methods etc. But a Java-independent definition &lt;br /&gt;
of the OSAL-interface provides some use-cases for the non-java-like-oriented programming, too. &lt;br /&gt;
So it is implemented independently from Java-like-C-classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Simple-C in OSAL==&lt;br /&gt;
&lt;br /&gt;
The OSAL-component contains Headerfiles and Implementations, which contain simple C-functionality. They are independent of compiler, platform and operation systems. That header are contained in the CRuntimeJavalike-package (see [[https://launchpad.net/zbnf/srcjava.zbnf launchpad.net/zbnf/srcjava.zbnf]]) in the subdir include/Fwc/*.h:&lt;br /&gt;
&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Exception.h.html include/Fwc/fw_Exception.h]]: Exception handling for C and C++ inclusive Stacktrace-Mechanism. In C a longjmp is used to throw. (longjmp.h is defined in the old Standards of C and in C99 too).     &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Formatter.h.html include/Fwc/fw_Formatter.h]]: Declaration of methods for formatting Strings. It include time-formattings. It is similar to sprintf.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_MemC.h.html  include/Fwc/fw_MemC.h]]: Definition of a struct MemC with pointer and its size. Some macros to handle with pointer. Some function prototypes for MemC-handling.            &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Readline.h.html  include/Fwc/fw_Readline.h]]: Support of reading lines from a file. A line can be terminated with 0d, 0a or any combination (Windows, Unix, Mac-conventions all in one). The os_file.h is used as interface to read a file.      &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_SimpleC.h.html  include/Fwc/fw_SimpleC.h]]: Some basicly simple macros and function declarations.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_String.h.html  include/Fwc/fw_String.h]]: Basic functions for String storing in a struct StringJc. It is the alternative to zero-terminated C-Strings. The pointer and the length is stored. The basic functions are a bridge between 0-terminated C-strings and StringJc-referenced strings.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_ThreadContext.h.html  include/Fwc/fw_ThreadContext.h]]: The ThreadContext is managed in the OSAL, but its struct is defined here.  &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_timeconversions.h.html  include/Fwc/fw_timeconversions.h]]: struct and funtion declarations for time conversions: A timestamp should be stored internally in form of currently seconds and microseconds after a start time. The conversion to a human readable time should be done only for presentation. The routines support the conversion.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Va_list.h.html  include/Fwc/fw_Va_list.h]]: An appreciation to the &amp;lt; stdarg.h&amp;gt; concept. The value as new: Any argument-type of a variable argument list is described with one char in a char*-string with one char. With the knowledge of the correct type any users function can be use the variable argument more correctly. Usual any other information should be necessary, for example the format-String of sprintf. This header and functions are used in fw_formatter.h&lt;br /&gt;
&lt;br /&gt;
The C-files are named adequate to the header files. They are located in the same component CRuntimeJavalike in the directory &amp;lt;tt&amp;gt;source/Fwc&amp;lt;/tt&amp;gt;. This base routines can be used for implementation of special os-adaption. Nevertheless for example the exception handling should not be used for the osal-level, because usage of exception handling is a decision of applications. It is offered here, but not used. The OSAL-adaption should be written simple and easy.&lt;br /&gt;
&lt;br /&gt;
==Common headers==&lt;br /&gt;
&lt;br /&gt;
The os-adaption contain C-files, which are special written for the appropriate operation system. But the headerfiles are identical over all mostly. It describes the OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
An interface in C-language is established in header-files. Most of compiler-tool-associated header-files&lt;br /&gt;
declare the same things, but in their own files in a maybe different form. So the risk of&lt;br /&gt;
little differences are given.&lt;br /&gt;
&lt;br /&gt;
Instead all OS-interface-functions should be declared in the same header-files, independent of&lt;br /&gt;
the current used operation system. The implementation of the OSAL should use this files and adapt&lt;br /&gt;
their OS-functions. &lt;br /&gt;
&lt;br /&gt;
All of those OS-independent common header files are declared &lt;br /&gt;
in the folder ,,CRuntimeJavalike/OSAL/inc,,. The current file list is:&lt;br /&gt;
&lt;br /&gt;
 os_types_def_common.h&lt;br /&gt;
 os_mem.h&lt;br /&gt;
 os_endian.h&lt;br /&gt;
 os_error.h&lt;br /&gt;
 os_AtomicAccess.h&lt;br /&gt;
 os_time.h&lt;br /&gt;
 os_thread.h&lt;br /&gt;
 os_sync.h&lt;br /&gt;
 os_file.h&lt;br /&gt;
 os_socket.h&lt;br /&gt;
&lt;br /&gt;
==Different headers==&lt;br /&gt;
&lt;br /&gt;
* One Headerfile, which contains some depending definitions which should be adapted to the platform, os and compiler. It is the [[os_types_def]].h.&lt;br /&gt;
Some things should be declared or defined in a OS-specific way. The same things should be defined &lt;br /&gt;
in a different kind, appropriate to the operation system and the compiler properties.&lt;br /&gt;
&lt;br /&gt;
The most important file doing this is the ,,os_types_def.h,,. The same file-name is used&lt;br /&gt;
in different directories, all specific for OS and compiler. It defines the same things in a different way.&lt;br /&gt;
&lt;br /&gt;
The most noticeable property is the definition of the OS- and compiler-depending definition of &lt;br /&gt;
fix-size-integer types. The C99-standard suggests the usage of ,,int32_t,, etc. But most of the &lt;br /&gt;
programmers had created their own standard before or simultaneous to the C99-Standard. These types are present&lt;br /&gt;
in many sources. They are defined in some special headers like ,,standard.h,,, &lt;br /&gt;
which is anytime ,,mystandard.h,,. These types are defined in the ,,os_types_def.h,,. &lt;br /&gt;
&lt;br /&gt;
There are some things defined there in addition: &lt;br /&gt;
* little/big endian defines, processors are different.&lt;br /&gt;
* C++-keyword for C-usage, especially ,,bool,,, ,,true,,, ,,false,,.&lt;br /&gt;
* The macro METHOD_C which maybe ,,extern &amp;quot;C&amp;quot;,, or not. &lt;br /&gt;
* A ,,MemUnit,,-type. It is the type which describes one element in the address spaces. &lt;br /&gt;
It is not a ,,char,, anytime, not in Signal-processors.&lt;br /&gt;
 &lt;br /&gt;
==C-basics==&lt;br /&gt;
&lt;br /&gt;
There are some things, which may defined in a good C-design able to use for the OSAL-level too.&lt;br /&gt;
This C-basics are provided OS-independently in the following files (definition and implementation):&lt;br /&gt;
&lt;br /&gt;
 fw_Exception.h&lt;br /&gt;
 fw_Exception.c&lt;br /&gt;
 fw_LogMessage.h&lt;br /&gt;
 fw_LogMessage.c&lt;br /&gt;
 fw_Va_list.h&lt;br /&gt;
 fw_formatter.c&lt;br /&gt;
 fw_Formatter.h&lt;br /&gt;
 fw_SimpleC.c&lt;br /&gt;
 fw_SimpleC.h&lt;br /&gt;
 fw_MemC.h&lt;br /&gt;
 fw_MemC.c&lt;br /&gt;
 objectBaseC.h&lt;br /&gt;
 fw_Object.c&lt;br /&gt;
 fw_timeconversions.h&lt;br /&gt;
 fw_timeconversions.c&lt;br /&gt;
 fw_ThreadContext.h&lt;br /&gt;
 fw_String.h&lt;br /&gt;
 fw_threadContext.c&lt;br /&gt;
 &lt;br /&gt;
This so-named ''framework''-level is independent from the OSAL-adaption and it is ready to use&lt;br /&gt;
for the OS-adaption.&lt;br /&gt;
 &lt;br /&gt;
==OS-adaption for threads==&lt;br /&gt;
 &lt;br /&gt;
see ,,os_thread.h,,&lt;/div&gt;</description>
			<pubDate>Fri, 13 May 2011 06:31:57 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:OSAL</comments>		</item>
		<item>
			<title>Samba</title>
			<link>http://72.14.177.54/java4c/Samba</link>
			<description>&lt;p&gt;Admin:&amp;#32;Created page with '==Samba== Used with Suse 11.3  The following informations for a share are set  Option      Value * Only then a net use from a windows PC with another login works:  guest ok    Ye…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Samba==&lt;br /&gt;
Used with Suse 11.3&lt;br /&gt;
&lt;br /&gt;
The following informations for a share are set&lt;br /&gt;
 Option      Value&lt;br /&gt;
* Only then a net use from a windows PC with another login works:&lt;br /&gt;
 guest ok    Yes     &lt;br /&gt;
* Without that entry the user was 'nobody' if files are copied to linux.&lt;br /&gt;
 force user  hartmut&lt;br /&gt;
* ok&lt;br /&gt;
 readonly    No&lt;br /&gt;
 path        /home/hartmut&lt;br /&gt;
* I don't know what is it:&lt;br /&gt;
 inherit acls No&lt;/div&gt;</description>
			<pubDate>Thu, 21 Apr 2011 20:59:47 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Samba</comments>		</item>
		<item>
			<title>Linux</title>
			<link>http://72.14.177.54/java4c/Linux</link>
			<description>&lt;p&gt;Admin:&amp;#32;Created page with 'My experience and hints for Linux * Samba'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My experience and hints for Linux&lt;br /&gt;
* [[Samba]]&lt;/div&gt;</description>
			<pubDate>Thu, 21 Apr 2011 20:53:39 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Linux</comments>		</item>
		<item>
			<title>Main Page</title>
			<link>http://72.14.177.54/java4c/Main_Page</link>
			<description>&lt;p&gt;Admin:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This site holds information about programming for embedded software in an ObjectOriented style. Ideas and concepts of the Java programming language are integrated in this thinks. Some articles describe software-engineering-topics.&lt;br /&gt;
&lt;br /&gt;
==Base links==&lt;br /&gt;
* [[Java4C]] - why Java-thinking and Java-using for the C-programming&lt;br /&gt;
* [[CRuntimeJavalike]] - A base library for embedded C-software&lt;br /&gt;
* [[Java2C]] - A translator from Java-sources to C-sources&lt;br /&gt;
* [[Component]] - Building the application with components and moduls&lt;br /&gt;
* [[Bazaar]] - A Source Version System&lt;br /&gt;
&lt;br /&gt;
==Java4C==&lt;br /&gt;
* [[Java4C]] - why Java-thinking and Java-using for the C-programming&lt;br /&gt;
&lt;br /&gt;
==CRuntimeJavalike==&lt;br /&gt;
* [[CRuntimeJavalike]] - A base library for embedded C-software&lt;br /&gt;
===OSAL===&lt;br /&gt;
* [[OSAL]] - The interface to the operation system with its application layer&lt;br /&gt;
* basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Java2C==&lt;br /&gt;
* [[http://www.vishia.org/Java2C www.vishia.org/Java2C]]&lt;br /&gt;
* [[http://sourceforge.net/projects/java2c Java2C on sourceforge]]&lt;br /&gt;
&lt;br /&gt;
==Components, Dependencies==&lt;br /&gt;
* [[Component]] - Building the application with components and modules - common description&lt;br /&gt;
&lt;br /&gt;
===Components of vishia-Software===&lt;br /&gt;
* [[Components of vishia-Java]] - presentation of components from all Java - sources of org/vishia&lt;br /&gt;
* [[Components of CRuntimeJavalike]] - presentation of components from C-sources&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
* [[Dependency]]&lt;br /&gt;
&lt;br /&gt;
====Dependency-Topics of C====&lt;br /&gt;
* [[forward declaration of struct]]&lt;br /&gt;
* [[forward declaration of functions in header]] &lt;br /&gt;
&lt;br /&gt;
====Dependency-Topics of ObjectOrientation (Java, C)====&lt;br /&gt;
&lt;br /&gt;
* TODO&lt;br /&gt;
&lt;br /&gt;
==Bazaar==&lt;br /&gt;
* [[Bazaar]] - A Source Version System&lt;br /&gt;
* [[Bazaar-Notes]]: discussion (german) about Source-Management and directory structures&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
* [[Linux]] - Some hints for Linux usage&lt;br /&gt;
&lt;br /&gt;
==The key author of this site==&lt;br /&gt;
&lt;br /&gt;
has experience in embedded programming since 1977, beginning with Assembler programming with the Z80-processor. I'm working for a company in germany in themes of embedded control. This site presents experiences independently of concretely job definitions. Hartmut Schorrig, [[http://www.vishia.org www.vishia.org]]&lt;br /&gt;
&lt;br /&gt;
==The mission of this site - Your contribution==&lt;br /&gt;
&lt;br /&gt;
Exchange of experiences. You can take place on discussion. You can complement the text of the pages with your experience and knowledge. You can improve the appearance of the text.&lt;br /&gt;
&lt;br /&gt;
It is necessary to register with a user name to this site.&lt;br /&gt;
&lt;br /&gt;
Future: [[Inspector datagram]]&lt;/div&gt;</description>
			<pubDate>Thu, 21 Apr 2011 20:52:47 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Main_Page</comments>		</item>
		<item>
			<title>OSAL</title>
			<link>http://72.14.177.54/java4c/OSAL</link>
			<description>&lt;p&gt;Admin:&amp;#32;/* Simple-C in OSAL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
@ident=OSAL&lt;br /&gt;
&lt;br /&gt;
'''OS-independent programming'''&lt;br /&gt;
&lt;br /&gt;
Some programmers work for their ''project''. It may be running on a special hardware with a special &lt;br /&gt;
operation system, mostly a RTOS (Real Time Operation System). &lt;br /&gt;
The tests are executed at the target hardware - reality tests. &lt;br /&gt;
Thus the thought is ''C is not C, any target system needs its own slang (dialect)''.&lt;br /&gt;
&lt;br /&gt;
What is missing? Compilation of the sources with a proper Integrated Development Environment (IDE). &lt;br /&gt;
On the PCs, there are some good IDEs, such as Eclipse, Microsoft Visual Studio etc. &lt;br /&gt;
Mostly, the IDEs for a special hardware are good, but not so good like PC-platform-tools.&lt;br /&gt;
&lt;br /&gt;
What is also missing? Functional testing the algorithm. It isn't a real-time test. But &lt;br /&gt;
it may be essential.&lt;br /&gt;
&lt;br /&gt;
What is the effort? The algorithm in C need to compile in a PC-environment. It should be able to test,&lt;br /&gt;
not in real-time, maybe only in one thread or more. &lt;br /&gt;
For this reason the OS-functionality should be able to use at the test-environment. &lt;br /&gt;
&lt;br /&gt;
What is the result:&lt;br /&gt;
* Well functional tested algorithms&lt;br /&gt;
* Faster writing, reorganization, optimizing and gardening of sources, because the PC-platform&lt;br /&gt;
is able to use for faster work.&lt;br /&gt;
* Better sources.&lt;br /&gt;
&lt;br /&gt;
The tests on the target-platform are reduced to test the real platform problems, not to test the algorithm basically.&lt;br /&gt;
&lt;br /&gt;
'''Need of special Operation System capabilities'''&lt;br /&gt;
&lt;br /&gt;
Most of the Operation Systems are similar in a large way of thinking. All of these support multi-threading, &lt;br /&gt;
with mutex etc. Most of them have a file system in a adequate kind etc.&lt;br /&gt;
&lt;br /&gt;
The differences are: They should be support the hardware platform with different processors, different&lt;br /&gt;
equipment in RAM, ROM, different I/O. But the user programming shouldn't consider all of them so far.&lt;br /&gt;
The user programming should be realized in a more abstract shell. This means the RTOS should be proper&lt;br /&gt;
for the hardware, but it should not have to much special features for the user programming. It may be&lt;br /&gt;
useful only for driver or interrupt-level-programming.&lt;br /&gt;
&lt;br /&gt;
Conclusion: The user programming should use unified interfaces to the operation system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OSAL-Level in the CRuntimeJavalike==&lt;br /&gt;
&lt;br /&gt;
Programming in Java is OS-independent in the first way. In that mind, the CRuntimeJavalike needs a &lt;br /&gt;
''Operation System Adaption Level'' (OSAL).&lt;br /&gt;
&lt;br /&gt;
The given OSAL is layered closed to a ''not-only Java-like''-programming. It supports standard C &lt;br /&gt;
functionality. The typical Java-like functions like ThreadJc based on this OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
A first idea in the past was to introduce the OSAL-level in the OS-oriented classes like ThreadJc, ObjectJc &lt;br /&gt;
with its ''synchronized_ObjectJc''-methods etc. But a Java-independent definition &lt;br /&gt;
of the OSAL-interface provides some use-cases for the non-java-like-oriented programming, too. &lt;br /&gt;
So it is implemented independently from Java-like-C-classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Simple-C in OSAL==&lt;br /&gt;
&lt;br /&gt;
The OSAL-component contains Headerfiles and Implementations, which contain simple C-functionality. They are independent of compiler, platform and operation systems. That header are contained in the CRuntimeJavalike-package (see [[https://launchpad.net/zbnf/srcjava.zbnf launchpad.net/zbnf/srcjava.zbnf]]) in the subdir include/Fwc/*.h:&lt;br /&gt;
&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Exception.h.html include/Fwc/fw_Exception.h]]: Exception handling for C and C++ inclusive Stacktrace-Mechanism. In C a longjmp is used to throw. (longjmp.h is defined in the old Standards of C and in C99 too).     &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Formatter.h.html include/Fwc/fw_Formatter.h]]: Declaration of methods for formatting Strings. It include time-formattings. It is similar to sprintf.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_MemC.h.html  include/Fwc/fw_MemC.h]]: Definition of a struct MemC with pointer and its size. Some macros to handle with pointer. Some function prototypes for MemC-handling.            &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Readline.h.html  include/Fwc/fw_Readline.h]]: Support of reading lines from a file. A line can be terminated with 0d, 0a or any combination (Windows, Unix, Mac-conventions all in one). The os_file.h is used as interface to read a file.      &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_SimpleC.h.html  include/Fwc/fw_SimpleC.h]]: Some basicly simple macros and function declarations.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_String.h.html  include/Fwc/fw_String.h]]: Basic functions for String storing in a struct StringJc. It is the alternative to zero-terminated C-Strings. The pointer and the length is stored. The basic functions are a bridge between 0-terminated C-strings and StringJc-referenced strings.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_ThreadContext.h.html  include/Fwc/fw_ThreadContext.h]]: The ThreadContext is managed in the OSAL, but its struct is defined here.  &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_timeconversions.h.html  include/Fwc/fw_timeconversions.h]]: struct and funtion declarations for time conversions: A timestamp should be stored internally in form of currently seconds and microseconds after a start time. The conversion to a human readable time should be done only for presentation. The routines support the conversion.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Va_list.h.html  include/Fwc/fw_Va_list.h]]: An appreciation to the &amp;lt; stdarg.h&amp;gt; concept. The value as new: Any argument-type of a variable argument list is described with one char in a char*-string with one char. With the knowledge of the correct type any users function can be use the variable argument more correctly. Usual any other information should be necessary, for example the format-String of sprintf. This header and functions are used in fw_formatter.h&lt;br /&gt;
&lt;br /&gt;
The C-files are named adequate to the header files. They are located in the same component CRuntimeJavalike in the directory &amp;lt;tt&amp;gt;source/Fwc&amp;lt;/tt&amp;gt;. This base routines can be used for implementation of special os-adaption. Nevertheless for example the exception handling should not be used for the osal-level, because usage of exception handling is a decision of applications. It is offered here, but not used. The OSAL-adaption should be written simple and easy.&lt;br /&gt;
&lt;br /&gt;
==Common headers==&lt;br /&gt;
&lt;br /&gt;
The os-adaption contain C-files, which are special written for the appropriate operation system. But the headerfiles are identical over all mostly. It describes the OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
An interface in C-language is established in header-files. Most of compiler-tool-associated header-files&lt;br /&gt;
declare the same things, but in their own files in a maybe different form. So the risk of&lt;br /&gt;
little differences are given.&lt;br /&gt;
&lt;br /&gt;
Instead all OS-interface-functions should be declared in the same header-files, independent of&lt;br /&gt;
the current used operation system. The implementation of the OSAL should use this files and adapt&lt;br /&gt;
their OS-functions. &lt;br /&gt;
&lt;br /&gt;
All of those OS-independent common header files are declared &lt;br /&gt;
in the folder ,,CRuntimeJavalike/OSAL/inc,,. The current file list is:&lt;br /&gt;
&lt;br /&gt;
 os_adapter.h&lt;br /&gt;
 os_endian.h&lt;br /&gt;
 os_file.h.bak&lt;br /&gt;
 os_mem.h&lt;br /&gt;
 os_serror.h&lt;br /&gt;
 os_socket.h&lt;br /&gt;
 os_sync.h&lt;br /&gt;
 os_time.h.bak&lt;br /&gt;
 os_waitnotify.h&lt;br /&gt;
 os_error.h&lt;br /&gt;
 os_file.h&lt;br /&gt;
 os_thread.h&lt;br /&gt;
 os_AtomicAccess.h&lt;br /&gt;
 os_time.h&lt;br /&gt;
 &lt;br /&gt;
==Different headers==&lt;br /&gt;
&lt;br /&gt;
* One Headerfile, which contains some depending definitions which should be adapted to the platform, os and compiler. It is the [[os_types_def]].h.&lt;br /&gt;
Some things should be declared or defined in a OS-specific way. The same things should be defined &lt;br /&gt;
in a different kind, appropriate to the operation system and the compiler properties.&lt;br /&gt;
&lt;br /&gt;
The most important file doing this is the ,,os_types_def.h,,. The same file-name is used&lt;br /&gt;
in different directories, all specific for OS and compiler. It defines the same things in a different way.&lt;br /&gt;
&lt;br /&gt;
The most noticeable property is the definition of the OS- and compiler-depending definition of &lt;br /&gt;
fix-size-integer types. The C99-standard suggests the usage of ,,int32_t,, etc. But most of the &lt;br /&gt;
programmers had created their own standard before or simultaneous to the C99-Standard. These types are present&lt;br /&gt;
in many sources. They are defined in some special headers like ,,standard.h,,, &lt;br /&gt;
which is anytime ,,mystandard.h,,. These types are defined in the ,,os_types_def.h,,. &lt;br /&gt;
&lt;br /&gt;
There are some things defined there in addition: &lt;br /&gt;
* little/big endian defines, processors are different.&lt;br /&gt;
* C++-keyword for C-usage, especially ,,bool,,, ,,true,,, ,,false,,.&lt;br /&gt;
* The macro METHOD_C which maybe ,,extern &amp;quot;C&amp;quot;,, or not. &lt;br /&gt;
* A ,,MemUnit,,-type. It is the type which describes one element in the address spaces. &lt;br /&gt;
It is not a ,,char,, anytime, not in Signal-processors.&lt;br /&gt;
 &lt;br /&gt;
==C-basics==&lt;br /&gt;
&lt;br /&gt;
There are some things, which may defined in a good C-design able to use for the OSAL-level too.&lt;br /&gt;
This C-basics are provided OS-independently in the following files (definition and implementation):&lt;br /&gt;
&lt;br /&gt;
 fw_Exception.h&lt;br /&gt;
 fw_Exception.c&lt;br /&gt;
 fw_LogMessage.h&lt;br /&gt;
 fw_LogMessage.c&lt;br /&gt;
 fw_Va_list.h&lt;br /&gt;
 fw_formatter.c&lt;br /&gt;
 fw_Formatter.h&lt;br /&gt;
 fw_SimpleC.c&lt;br /&gt;
 fw_SimpleC.h&lt;br /&gt;
 fw_MemC.h&lt;br /&gt;
 fw_MemC.c&lt;br /&gt;
 objectBaseC.h&lt;br /&gt;
 fw_Object.c&lt;br /&gt;
 fw_timeconversions.h&lt;br /&gt;
 fw_timeconversions.c&lt;br /&gt;
 fw_ThreadContext.h&lt;br /&gt;
 fw_String.h&lt;br /&gt;
 fw_threadContext.c&lt;br /&gt;
 &lt;br /&gt;
This so-named ''framework''-level is independent from the OSAL-adaption and it is ready to use&lt;br /&gt;
for the OS-adaption.&lt;br /&gt;
 &lt;br /&gt;
==OS-adaption for threads==&lt;br /&gt;
 &lt;br /&gt;
see ,,os_thread.h,,&lt;/div&gt;</description>
			<pubDate>Sun, 10 Apr 2011 03:06:35 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:OSAL</comments>		</item>
		<item>
			<title>OSAL</title>
			<link>http://72.14.177.54/java4c/OSAL</link>
			<description>&lt;p&gt;Admin:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
@ident=OSAL&lt;br /&gt;
&lt;br /&gt;
'''OS-independent programming'''&lt;br /&gt;
&lt;br /&gt;
Some programmers work for their ''project''. It may be running on a special hardware with a special &lt;br /&gt;
operation system, mostly a RTOS (Real Time Operation System). &lt;br /&gt;
The tests are executed at the target hardware - reality tests. &lt;br /&gt;
Thus the thought is ''C is not C, any target system needs its own slang (dialect)''.&lt;br /&gt;
&lt;br /&gt;
What is missing? Compilation of the sources with a proper Integrated Development Environment (IDE). &lt;br /&gt;
On the PCs, there are some good IDEs, such as Eclipse, Microsoft Visual Studio etc. &lt;br /&gt;
Mostly, the IDEs for a special hardware are good, but not so good like PC-platform-tools.&lt;br /&gt;
&lt;br /&gt;
What is also missing? Functional testing the algorithm. It isn't a real-time test. But &lt;br /&gt;
it may be essential.&lt;br /&gt;
&lt;br /&gt;
What is the effort? The algorithm in C need to compile in a PC-environment. It should be able to test,&lt;br /&gt;
not in real-time, maybe only in one thread or more. &lt;br /&gt;
For this reason the OS-functionality should be able to use at the test-environment. &lt;br /&gt;
&lt;br /&gt;
What is the result:&lt;br /&gt;
* Well functional tested algorithms&lt;br /&gt;
* Faster writing, reorganization, optimizing and gardening of sources, because the PC-platform&lt;br /&gt;
is able to use for faster work.&lt;br /&gt;
* Better sources.&lt;br /&gt;
&lt;br /&gt;
The tests on the target-platform are reduced to test the real platform problems, not to test the algorithm basically.&lt;br /&gt;
&lt;br /&gt;
'''Need of special Operation System capabilities'''&lt;br /&gt;
&lt;br /&gt;
Most of the Operation Systems are similar in a large way of thinking. All of these support multi-threading, &lt;br /&gt;
with mutex etc. Most of them have a file system in a adequate kind etc.&lt;br /&gt;
&lt;br /&gt;
The differences are: They should be support the hardware platform with different processors, different&lt;br /&gt;
equipment in RAM, ROM, different I/O. But the user programming shouldn't consider all of them so far.&lt;br /&gt;
The user programming should be realized in a more abstract shell. This means the RTOS should be proper&lt;br /&gt;
for the hardware, but it should not have to much special features for the user programming. It may be&lt;br /&gt;
useful only for driver or interrupt-level-programming.&lt;br /&gt;
&lt;br /&gt;
Conclusion: The user programming should use unified interfaces to the operation system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OSAL-Level in the CRuntimeJavalike==&lt;br /&gt;
&lt;br /&gt;
Programming in Java is OS-independent in the first way. In that mind, the CRuntimeJavalike needs a &lt;br /&gt;
''Operation System Adaption Level'' (OSAL).&lt;br /&gt;
&lt;br /&gt;
The given OSAL is layered closed to a ''not-only Java-like''-programming. It supports standard C &lt;br /&gt;
functionality. The typical Java-like functions like ThreadJc based on this OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
A first idea in the past was to introduce the OSAL-level in the OS-oriented classes like ThreadJc, ObjectJc &lt;br /&gt;
with its ''synchronized_ObjectJc''-methods etc. But a Java-independent definition &lt;br /&gt;
of the OSAL-interface provides some use-cases for the non-java-like-oriented programming, too. &lt;br /&gt;
So it is implemented independently from Java-like-C-classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Simple-C in OSAL==&lt;br /&gt;
&lt;br /&gt;
The OSAL-component contains Headerfiles and Implementations, which contains simple C-functionality. It are independent of compiler, platform and operation systems. The header files are:&lt;br /&gt;
&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Exception.h.html include/Fwc/fw_Exception.h]]: Exception handling for C and C++ inclusive Stacktrace-Mechanism. In C a longjmp is used to throw. (longjmp.h is defined in the old Standards of C and in C99 too).     &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Formatter.h.html include/Fwc/fw_Formatter.h]]: Declaration of methods for formatting Strings. It include time-formattings. It is similar to sprintf.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_MemC.h.html  include/Fwc/fw_MemC.h]]: Definition of a struct MemC with pointer and its size. Some macros to handle with pointer. Some function prototypes for MemC-handling.            &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Readline.h.html  include/Fwc/fw_Readline.h]]: Support of reading lines from a file. A line can be terminated with 0d, 0a or any combination (Windows, Unix, Mac-conventions all in one). The os_file.h is used as interface to read a file.      &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_SimpleC.h.html  include/Fwc/fw_SimpleC.h]]: Some basicly simple macros and function declarations.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_String.h.html  include/Fwc/fw_String.h]]: Basic functions for String storing in a struct StringJc. It is the alternative to zero-terminated C-Strings. The pointer and the length is stored. The basic functions are a bridge between 0-terminated C-strings and StringJc-referenced strings.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_ThreadContext.h.html  include/Fwc/fw_ThreadContext.h]]: The ThreadContext is managed in the OSAL, but its struct is defined here.  &lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_timeconversions.h.html  include/Fwc/fw_timeconversions.h]]: struct and funtion declarations for time conversions: A timestamp should be stored internally in form of currently seconds and microseconds after a start time. The conversion to a human readable time should be done only for presentation. The routines support the conversion.&lt;br /&gt;
* [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Va_list.h.html  include/Fwc/fw_Va_list.h]]: An appreciation to the &amp;lt; stdarg.h&amp;gt; concept. The value as new: Any argument-type of a variable argument list is described with one char in a char*-string with one char. With the knowledge of the correct type any users function can be use the variable argument more correctly. Usual any other information should be necessary, for example the format-String of sprintf. This header and functions are used in fw_formatter.h&lt;br /&gt;
&lt;br /&gt;
The C-files are named adequate to the header files. This base routines can be used for implementation of special os-adaption. Nevertheless for example the exception handling should not be used for the osal-level, because usage of exception handling is a decision of applications. It is offered here, but not used.&lt;br /&gt;
&lt;br /&gt;
==Common headers==&lt;br /&gt;
&lt;br /&gt;
The os-adaption contain C-files, which are special written for the appropriate operation system. But the headerfiles are identical over all mostly. It describes the OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
An interface in C-language is established in header-files. Most of compiler-tool-associated header-files&lt;br /&gt;
declare the same things, but in their own files in a maybe different form. So the risk of&lt;br /&gt;
little differences are given.&lt;br /&gt;
&lt;br /&gt;
Instead all OS-interface-functions should be declared in the same header-files, independent of&lt;br /&gt;
the current used operation system. The implementation of the OSAL should use this files and adapt&lt;br /&gt;
their OS-functions. &lt;br /&gt;
&lt;br /&gt;
All of those OS-independent common header files are declared &lt;br /&gt;
in the folder ,,CRuntimeJavalike/OSAL/inc,,. The current file list is:&lt;br /&gt;
&lt;br /&gt;
 os_adapter.h&lt;br /&gt;
 os_endian.h&lt;br /&gt;
 os_file.h.bak&lt;br /&gt;
 os_mem.h&lt;br /&gt;
 os_serror.h&lt;br /&gt;
 os_socket.h&lt;br /&gt;
 os_sync.h&lt;br /&gt;
 os_time.h.bak&lt;br /&gt;
 os_waitnotify.h&lt;br /&gt;
 os_error.h&lt;br /&gt;
 os_file.h&lt;br /&gt;
 os_thread.h&lt;br /&gt;
 os_AtomicAccess.h&lt;br /&gt;
 os_time.h&lt;br /&gt;
 &lt;br /&gt;
==Different headers==&lt;br /&gt;
&lt;br /&gt;
* One Headerfile, which contains some depending definitions which should be adapted to the platform, os and compiler. It is the [[os_types_def]].h.&lt;br /&gt;
Some things should be declared or defined in a OS-specific way. The same things should be defined &lt;br /&gt;
in a different kind, appropriate to the operation system and the compiler properties.&lt;br /&gt;
&lt;br /&gt;
The most important file doing this is the ,,os_types_def.h,,. The same file-name is used&lt;br /&gt;
in different directories, all specific for OS and compiler. It defines the same things in a different way.&lt;br /&gt;
&lt;br /&gt;
The most noticeable property is the definition of the OS- and compiler-depending definition of &lt;br /&gt;
fix-size-integer types. The C99-standard suggests the usage of ,,int32_t,, etc. But most of the &lt;br /&gt;
programmers had created their own standard before or simultaneous to the C99-Standard. These types are present&lt;br /&gt;
in many sources. They are defined in some special headers like ,,standard.h,,, &lt;br /&gt;
which is anytime ,,mystandard.h,,. These types are defined in the ,,os_types_def.h,,. &lt;br /&gt;
&lt;br /&gt;
There are some things defined there in addition: &lt;br /&gt;
* little/big endian defines, processors are different.&lt;br /&gt;
* C++-keyword for C-usage, especially ,,bool,,, ,,true,,, ,,false,,.&lt;br /&gt;
* The macro METHOD_C which maybe ,,extern &amp;quot;C&amp;quot;,, or not. &lt;br /&gt;
* A ,,MemUnit,,-type. It is the type which describes one element in the address spaces. &lt;br /&gt;
It is not a ,,char,, anytime, not in Signal-processors.&lt;br /&gt;
 &lt;br /&gt;
==C-basics==&lt;br /&gt;
&lt;br /&gt;
There are some things, which may defined in a good C-design able to use for the OSAL-level too.&lt;br /&gt;
This C-basics are provided OS-independently in the following files (definition and implementation):&lt;br /&gt;
&lt;br /&gt;
 fw_Exception.h&lt;br /&gt;
 fw_Exception.c&lt;br /&gt;
 fw_LogMessage.h&lt;br /&gt;
 fw_LogMessage.c&lt;br /&gt;
 fw_Va_list.h&lt;br /&gt;
 fw_formatter.c&lt;br /&gt;
 fw_Formatter.h&lt;br /&gt;
 fw_SimpleC.c&lt;br /&gt;
 fw_SimpleC.h&lt;br /&gt;
 fw_MemC.h&lt;br /&gt;
 fw_MemC.c&lt;br /&gt;
 objectBaseC.h&lt;br /&gt;
 fw_Object.c&lt;br /&gt;
 fw_timeconversions.h&lt;br /&gt;
 fw_timeconversions.c&lt;br /&gt;
 fw_ThreadContext.h&lt;br /&gt;
 fw_String.h&lt;br /&gt;
 fw_threadContext.c&lt;br /&gt;
 &lt;br /&gt;
This so-named ''framework''-level is independent from the OSAL-adaption and it is ready to use&lt;br /&gt;
for the OS-adaption.&lt;br /&gt;
 &lt;br /&gt;
==OS-adaption for threads==&lt;br /&gt;
 &lt;br /&gt;
see ,,os_thread.h,,&lt;/div&gt;</description>
			<pubDate>Tue, 05 Apr 2011 16:51:45 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:OSAL</comments>		</item>
		<item>
			<title>Component</title>
			<link>http://72.14.177.54/java4c/Component</link>
			<description>&lt;p&gt;Admin:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down: [[Components_of_vishia-Java]] [[Components_of_CRuntimeJavalike]]&lt;br /&gt;
&lt;br /&gt;
==Components and modules, re-using==&lt;br /&gt;
&lt;br /&gt;
A software should consist of more as one component. Each component should be able to describe, program and test independent of the application which uses it. A component may be able to use in several applications. Then it is reuseable.&lt;br /&gt;
&lt;br /&gt;
Modules are the finer granularity inside components or inside the core of the application. Each module should be able to describe, program and test independently too. Modules may be one C/h-file or a package in Java or some related files. &lt;br /&gt;
&lt;br /&gt;
A class in ObjectOrientation is the more finer granularity inside modules. A class in the C-programming is a logical coherence between one data structure and related subroutines. One class may be presented exactly with one source-file.&lt;br /&gt;
&lt;br /&gt;
==Dependencies between components, modules, classes==&lt;br /&gt;
&lt;br /&gt;
If another class is used inside a class, it depends on it. Formally it depends on the signature of the methods of the class. Really the functionality depends on the functionality of the called methods.&lt;br /&gt;
&lt;br /&gt;
For a independent test of a class, module or component it may be necessary to abstract the functionality of the depending stuff. The behavior of the depending stuff should be replaced by a simulation or emulation.&lt;br /&gt;
&lt;br /&gt;
===Dependencies defines components===&lt;br /&gt;
&lt;br /&gt;
If a component need the presence of another component while compiling or linking, then the component depends on the other component formally. Components should be tailored to specified other components. If any other component is need only for a special function, which isn't the main stream functionality of the component, it is disagreeable. The user of the component should attend to the other component, which isn't need really. It is additional work to do without benefit.&lt;br /&gt;
&lt;br /&gt;
Components can be depended on any common functions of a platform, which are present anytime. For example all base class of a Java Virtual Machine and its &amp;lt;tt&amp;gt;rt.jar&amp;lt;/tt&amp;gt; library can be used in the Java-sources. Then the component may be designated as '''independent of any others'''.&lt;br /&gt;
&lt;br /&gt;
If a component depends on another specified component, it builds a system of components. Such a component-system should not be complex. '''Dependency-breaker''' are need. The dependency breakers allow a formally translation (compilation) without the presence of other complex components. For running (linking), any incarnation of the ''components behind the dependency-breaker'' should be present. But that components may be replacements for simulation etc. if necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dependencies in a application===&lt;br /&gt;
&lt;br /&gt;
There are '''horizontal''' and '''vertical dependencies''': If a class/module/component can be created, described and tested independent on another class/module/component, it is deeper in vertical or parallel in horizontal layer. If a class/module/component needs another one, it is above that in vertical layer. ''It needs'' means, in the real application it is associated to it and calls some methods from there. For the independently test all needed classes/modules/components may be able to replace.&lt;br /&gt;
&lt;br /&gt;
==Interfaces as dependency-breaker==&lt;br /&gt;
&lt;br /&gt;
There is a problem: Module_A needs some methods from Module_B and on the other hand Module_B needs some things from Module_A. Both modules are parallel in layer, but there are not able to develop and test independently.  - Either the both modules are not two separated modules, the functionality should be combined in one module. - Or it should be separated using interfaces.&lt;br /&gt;
&lt;br /&gt;
Another Aspect of Interfaces: A Component should not need a special other component. It should be more commonly in its dependency-necessities. A selection of the other associated components should be possible, for example for simulation and real usage, for different platform necessities etc. &lt;br /&gt;
&lt;br /&gt;
* While compiling only the interfaces should be present.&lt;br /&gt;
* While static linking in C/C++ or starting an application in Java or C++ with dynamic libraries any incarnation of interface-implementors can be used. Others for testing and for several application goals. &lt;br /&gt;
* A symbolic linkuage is possible: The selection of a dynamic library or implementation class can depend on the presence of a special library or jar-file in the file system. It is possible too to select a implementor by parametrizing, especially with a identifier string. In this kind selecting on runtime is possible.&lt;br /&gt;
&lt;br /&gt;
===Interfaces in Java===&lt;br /&gt;
&lt;br /&gt;
The ''interface'' is a language-element of Java. It defines methods with its signature, but without implementation. The description, &amp;quot;''what should the method do, which argument values are expectable, meaning of the return value''&amp;quot; belongs to the method anyway. In C++ interfaces are able to create in a similar kind as Java. It is a class with only virtual abstract methods and without any implementation:&lt;br /&gt;
&lt;br /&gt;
 class InterfaceExample {  //C++-interface&lt;br /&gt;
   virtual int aMethod(int arg) = 0;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Selecting implementors while startup====&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
====Selecting implementors symbolic====&lt;br /&gt;
&lt;br /&gt;
TODO Class.forName()&lt;br /&gt;
&lt;br /&gt;
===Classic C - Headerfiles as interface===&lt;br /&gt;
&lt;br /&gt;
The classic C programming knows headerfiles, which ones play the role of interfaces: Function prototypes has the same appearance as a method definition in a Java-interface or a virtual abstract methods:&lt;br /&gt;
&lt;br /&gt;
 extern int aFunction(int arg);&lt;br /&gt;
&lt;br /&gt;
The difference to Java and C++-virtual-methods is: It is static linked. There can be only one implementation in a executable, whereby in Java and C++ the interface can be implement by several classes which are instantiated independently. It is a ''dynamic link''.&lt;br /&gt;
&lt;br /&gt;
But the principle of dependency-break is the same.&lt;br /&gt;
&lt;br /&gt;
===Classic C- struct forward declaration as dependency break===&lt;br /&gt;
&lt;br /&gt;
In C and C++ there is a nice possibility to prevent to many include-necessities:&lt;br /&gt;
&lt;br /&gt;
 struct TheType_t;&lt;br /&gt;
&lt;br /&gt;
 typedef struct Example_t{&lt;br /&gt;
   struct TheType_t* pointer;&lt;br /&gt;
 } Example;&lt;br /&gt;
&lt;br /&gt;
Inside the Example-struct a pointer of TheType is need. But &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt; itself may left unknown. It isn't necessary to know the type while compiling this struct. It is not necessary to include the typedef of &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the pointer is used in the implementation (the C-file), then the type should be known. The implementation-File includes the definition of:&lt;br /&gt;
&lt;br /&gt;
  typedef struct TheType_t{&lt;br /&gt;
    int someStuff;&lt;br /&gt;
  }Thetype;&lt;br /&gt;
&lt;br /&gt;
Now the compiler checks the matching of &amp;lt;tt&amp;gt;struct TheType_t&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt; with its given definition. The &amp;lt;tt&amp;gt;TheType_t&amp;lt;/tt&amp;gt; is the tag-name of the struct where &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt; is the really type name. The writing-style with &amp;lt;tt&amp;gt;_t&amp;lt;/tt&amp;gt;-suffix is recommended and usual but not a fix rule.&lt;br /&gt;
&lt;br /&gt;
The forward declaration of a pointer-type straightens a complex dependencies of header files. In Java there is not a adequate possibility. A Java-interface is the way of straighten still.&lt;br /&gt;
&lt;br /&gt;
==Criterion for Components==&lt;br /&gt;
* Able to define and describe as entity.&lt;br /&gt;
* Able to test as entity.&lt;br /&gt;
* Dependencies of parts to other components: If any new part creates a new dependency to a foreign component, it should be realized as critical. Either the new dependency is desired, or the part should not be a part of this component.&lt;br /&gt;
* Conglomerate of several functionality: It is okay, if the modules doesn't need other components (see ''dependencies''). A component can contain a functionality, which is not need in the typical use-cases, but it is offered for special usages. &lt;br /&gt;
* Frequently changes in conglomerate parts: Any change in the sources of the component builds a new release of the whole component, which should be checked for relevance for all usages. Parts, which are frequently changed, but they are not a core functionality of the component, should be dissolved from the component therefore.&lt;br /&gt;
* Self-reliance: The same functionality should not scattered to several components. Only one component should be responsible to that functionality.&lt;/div&gt;</description>
			<pubDate>Mon, 21 Mar 2011 09:16:35 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Component</comments>		</item>
		<item>
			<title>Component</title>
			<link>http://72.14.177.54/java4c/Component</link>
			<description>&lt;p&gt;Admin:&amp;#32;Protected &amp;quot;Component&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down: [[Components_of_vishia-Java]] [[Components_of_CRuntimeJavalike]]&lt;br /&gt;
&lt;br /&gt;
==Components and modules, re-using==&lt;br /&gt;
&lt;br /&gt;
A software should consist of more as one component. Each component should be able to describe, program and test independent of the application which uses it. A component may be able to use in several applications. Then it is reuseable.&lt;br /&gt;
&lt;br /&gt;
Modules are the finer granularity inside components or inside the core of the application. Each module should be able to describe, program and test independently too. Modules may be one C/h-file or a package in Java or some related files. &lt;br /&gt;
&lt;br /&gt;
A class in ObjectOrientation is the more finer granularity inside modules. A class in the C-programming is a logical coherence between one data structure and related subroutines. One class may be presented exactly with one source-file.&lt;br /&gt;
&lt;br /&gt;
==Dependencies between components, modules, classes==&lt;br /&gt;
&lt;br /&gt;
If another class is used inside a class, it depends on it. Formally it depends on the signature of the methods of the class. Really the functionality depends on the functionality of the called methods.&lt;br /&gt;
&lt;br /&gt;
For a independent test of a class, module or component it may be necessary to abstract the functionality of the depending stuff. The behavior of the depending stuff should be replaced by a simulation or emulation.&lt;br /&gt;
&lt;br /&gt;
===Dependencies defines components===&lt;br /&gt;
&lt;br /&gt;
If a component need the presence of another component while compiling or linking, then the component depends on the other component formally. Components should be tailored to specified other components. If any other component is need only for a special function, which isn't the main stream functionality of the component, it is disagreeable. The user of the component should attend to the other component, which isn't need really. It is additional work to do without benefit.&lt;br /&gt;
&lt;br /&gt;
Components can be depended on any common functions of a platform, which are present anytime. For example all base class of a Java Virtual Machine and its &amp;lt;tt&amp;gt;rt.jar&amp;lt;/tt&amp;gt; library can be used in the Java-sources. Then the component may be designated as '''independent of any others'''.&lt;br /&gt;
&lt;br /&gt;
If a component depends on another specified component, it builds a system of components. Such a component-system should not be complex. '''Dependency-breaker''' are need. The dependency breakers allow a formally translation (compilation) without the presence of other complex components. For running (linking), any incarnation of the ''components behind the dependency-breaker'' should be present. But that components may be replacements for simulation etc. if necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dependencies in a application===&lt;br /&gt;
&lt;br /&gt;
There are '''horizontal''' and '''vertical dependencies''': If a class/module/component can be created, described and tested independent on another class/module/component, it is deeper in vertical or parallel in horizontal layer. If a class/module/component needs another one, it is above that in vertical layer. ''It needs'' means, in the real application it is associated to it and calls some methods from there. For the independently test all needed classes/modules/components may be able to replace.&lt;br /&gt;
&lt;br /&gt;
===Interfaces as dependency-breaker===&lt;br /&gt;
&lt;br /&gt;
There is a problem: Module_A needs some methods from Module_B and on the other hand Module_B needs some things from Module_A. Both modules are parallel in layer, but there are not able to develop and test independently. &lt;br /&gt;
&lt;br /&gt;
Either the both modules are not two separated modules, the functionality should be combined in one module. - Or it should be separated using interfaces.&lt;br /&gt;
&lt;br /&gt;
The ''interface'' is a language-element of Java. It defines methods with its signature, but without implementation. The description, &amp;quot;''what should the method do, which argument values are expectable, meaning of the return value''&amp;quot; belongs to the method anyway. In C++ interfaces are able to create in a similar kind as Java. It is a class with only virtual abstract methods and without any implementation:&lt;br /&gt;
&lt;br /&gt;
 class InterfaceExample {  //C++-interface&lt;br /&gt;
   virtual int aMethod(int arg) = 0;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Classic C - Headerfiles as interface====&lt;br /&gt;
&lt;br /&gt;
The classic C programming knows headerfiles, which ones play the role of interfaces: Function prototypes has the same appearance as a method definition in a Java-interface or a virtual abstract methods:&lt;br /&gt;
&lt;br /&gt;
 extern int aFunction(int arg);&lt;br /&gt;
&lt;br /&gt;
The difference to Java and C++-virtual-methods is: It is static linked. There can be only one implementation in a executable, whereby in Java and C++ the interface can be implement by several classes which are instantiated independently. It is a ''dynamic link''.&lt;br /&gt;
&lt;br /&gt;
But the principle of dependency-break is the same.&lt;br /&gt;
&lt;br /&gt;
====Classic C- struct forward declaration as dependency break====&lt;br /&gt;
&lt;br /&gt;
In C and C++ there is a nice possibility to prevent to many include-necessities:&lt;br /&gt;
&lt;br /&gt;
 struct TheType_t;&lt;br /&gt;
&lt;br /&gt;
 typedef struct Example_t{&lt;br /&gt;
   struct TheType_t* pointer;&lt;br /&gt;
 } Example;&lt;br /&gt;
&lt;br /&gt;
Inside the Example-struct a pointer of TheType is need. But &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt; itself may left unknown. It isn't necessary to know the type while compiling this struct. It is not necessary to include the typedef of &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the pointer is used in the implementation (the C-file), then the type should be known. The implementation-File includes the definition of:&lt;br /&gt;
&lt;br /&gt;
  typedef struct TheType_t{&lt;br /&gt;
    int someStuff;&lt;br /&gt;
  }Thetype;&lt;br /&gt;
&lt;br /&gt;
Now the compiler checks the matching of &amp;lt;tt&amp;gt;struct TheType_t&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt; with its given definition. The &amp;lt;tt&amp;gt;TheType_t&amp;lt;/tt&amp;gt; is the tag-name of the struct where &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt; is the really type name. The writing-style with &amp;lt;tt&amp;gt;_t&amp;lt;/tt&amp;gt;-suffix is recommended and usual but not a fix rule.&lt;br /&gt;
&lt;br /&gt;
The forward declaration of a pointer-type straightens a complex dependencies of header files. In Java there is not a adequate possibility. A Java-interface is the way of straighten still.&lt;br /&gt;
&lt;br /&gt;
==Criterion for Components==&lt;br /&gt;
* Able to define and describe as entity.&lt;br /&gt;
* Able to test as entity.&lt;br /&gt;
* Dependencies of parts to other components: If any new part creates a new dependency to a foreign component, it should be realized as critical. Either the new dependency is desired, or the part should not be a part of this component.&lt;br /&gt;
* Conglomerate of several functionality: It is okay, if the modules doesn't need other components (see ''dependencies''). A component can contain a functionality, which is not need in the typical use-cases, but it is offered for special usages. &lt;br /&gt;
* Frequently changes in conglomerate parts: Any change in the sources of the component builds a new release of the whole component, which should be checked for relevance for all usages. Parts, which are frequently changed, but they are not a core functionality of the component, should be dissolved from the component therefore.&lt;br /&gt;
* Self-reliance: The same functionality should not scattered to several components. Only one component should be responsible to that functionality.&lt;/div&gt;</description>
			<pubDate>Mon, 21 Mar 2011 09:02:36 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Component</comments>		</item>
		<item>
			<title>Components of CRuntimeJavalike</title>
			<link>http://72.14.177.54/java4c/Components_of_CRuntimeJavalike</link>
			<description>&lt;p&gt;Admin:&amp;#32;links to header&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]] / [[Component]]&lt;br /&gt;
* down: see chapters&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
CRuntimeJavalike is a tree of C-files with makefiles to build libraries. All files are written by Hartmut Schorrig, www.vishia.org. They are used in some applications in profession too (with second license model). It is a conglomeration of different things, of course.&lt;br /&gt;
&lt;br /&gt;
The CRuntimeJavalike can be used in any application. It contains a OSAL-layer, which is provided for Windows and Linux. The OSAL-layer have to be adapted for other operation systems. Some adaption exists and are tested and used in profession. With adapting the OSAL-layer the sources can be used and the examples can run on any platform.&lt;br /&gt;
&lt;br /&gt;
==Distribution and sources in internet==&lt;br /&gt;
&lt;br /&gt;
* distribution: [[http://sf.net/projects/java2c sf.net/projects/java2c]] The CRuntimeJavalike is distributed as part of the Java2C-Translator. But it can be used without this translator too. Download the distribution and use only the CRuntimeJavalike. [[http://sf.net/projects/zbnf sf.net/projects/zbnf]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/jc/trunk launchpad.net/jc]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/Jc www.vishia.org/Jc]]&lt;br /&gt;
&lt;br /&gt;
==OSAL==&lt;br /&gt;
See [[OSAL]]. The OSAL-component contains &lt;br /&gt;
* C-files, which are special written for the appropriate operation system.&lt;br /&gt;
* One Headerfile, which contains some depending definitions which should be adapted to the platform, os and compiler. It is the [[os_types_def]].h.&lt;br /&gt;
* Headerfiles, which are independent of the operation system. It describes the OSAL-interface.&lt;br /&gt;
* Headerfiles, which contains simple C-definitions and declarations. It are independent of compiler, platform and os.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Exception.h.html include/Fwc/fw_Exception.h]]: Exception handling for C and C++ inclusive Stacktrace-Mechanism. In C a longjmp is used to throw. (longjmp.h is defined in the old Standards of C and in C99 too).     &lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Formatter.h.html include/Fwc/fw_Formatter.h]]: Declaration of methods for formatting Strings. It include time-formattings. It is similar to sprintf.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_MemC.h.html  include/Fwc/fw_MemC.h]]: Definition of a struct MemC with pointer and its size. Some macros to handle with pointer. Some function prototypes for MemC-handling.            &lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Readline.h.html  include/Fwc/fw_Readline.h]]: Support of reading lines from a file. A line can be terminated with 0d, 0a or any combination (Windows, Unix, Mac-conventions all in one). The os_file.h is used as interface to read a file.      &lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_SimpleC.h.html  include/Fwc/fw_SimpleC.h]]: Some basicly simple macros and function declarations.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_String.h.html  include/Fwc/fw_String.h]]: Basic functions for String storing in a struct StringJc. It is the alternative to zero-terminated C-Strings. The pointer and the length is stored. The basic functions are a bridge between 0-terminated C-strings and StringJc-referenced strings.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_ThreadContext.h.html  include/Fwc/fw_ThreadContext.h]]: The ThreadContext is managed in the OSAL, but its struct is defined here.  &lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_timeconversions.h.html  include/Fwc/fw_timeconversions.h]]: struct and funtion declarations for time conversions: A timestamp should be stored internally in form of currently seconds and microseconds after a start time. The conversion to a human readable time should be done only for presentation. The routines support the conversion.&lt;br /&gt;
** [[http://www.vishia.org/Jc/html/sources/include/Fwc/fw_Va_list.h.html  include/Fwc/fw_Va_list.h]]: An appreciation to the &amp;lt; stdarg.h&amp;gt; concept. The value as new: Any argument-type of a variable argument list is described with one char in a char*-string with one char. With the knowledge of the correct type any users function can be use the variable argument more correctly. Usual any other information should be necessary, for example the format-String of sprintf. This header and functions are used in fw_formatter.h&lt;br /&gt;
&lt;br /&gt;
* C-files, which contains common sources for OSAL&lt;br /&gt;
* C-files, which contains common sources for simple C-functions. It can be used in the OSAL-Adaption.&lt;br /&gt;
&lt;br /&gt;
With this Sources a application can be written os-indenpendent. All this sources are independent of the Java2C-thinking. This sources are not complex. There are not any assumption to Java.&lt;/div&gt;</description>
			<pubDate>Sun, 13 Mar 2011 11:07:55 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Components_of_CRuntimeJavalike</comments>		</item>
		<item>
			<title>Components of CRuntimeJavalike</title>
			<link>http://72.14.177.54/java4c/Components_of_CRuntimeJavalike</link>
			<description>&lt;p&gt;Admin:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]] / [[Component]]&lt;br /&gt;
* down: see chapters&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
CRuntimeJavalike is a tree of C-files with makefiles to build libraries. All files are written by Hartmut Schorrig, www.vishia.org. They are used in some applications in profession too (with second license model). It is a conglomeration of different things, of course.&lt;br /&gt;
&lt;br /&gt;
The CRuntimeJavalike can be used in any application. It contains a OSAL-layer, which is provided for Windows and Linux. The OSAL-layer have to be adapted for other operation systems. Some adaption exists and are tested and used in profession. With adapting the OSAL-layer the sources can be used and the examples can run on any platform.&lt;br /&gt;
&lt;br /&gt;
==Distribution and sources in internet==&lt;br /&gt;
&lt;br /&gt;
* distribution: [[http://sf.net/projects/java2c sf.net/projects/java2c]] The CRuntimeJavalike is distributed as part of the Java2C-Translator. But it can be used without this translator too. Download the distribution and use only the CRuntimeJavalike. [[http://sf.net/projects/zbnf sf.net/projects/zbnf]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/jc/trunk launchpad.net/jc]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/Jc www.vishia.org/Jc]]&lt;br /&gt;
&lt;br /&gt;
==OSAL==&lt;br /&gt;
See [[OSAL]]. The OSAL-component contains &lt;br /&gt;
* C-files, which are special written for the appropriate operation system.&lt;br /&gt;
* One Headerfile, which contains some depending definitions which should be adapted to the platform, os and compiler. It is the [[os_types_def]].h.&lt;br /&gt;
* Headerfiles, which are independent of the operation system. It describes the OSAL-interface.&lt;br /&gt;
* Headerfiles, which contains simple C-definitions and declarations. It are independent of compiler, platform and os.&lt;br /&gt;
** include\Fwc\fw_Exception.h: Exception handling for C and C++ inclusive Stacktrace-Mechanism. In C a longjmp is used to throw. (longjmp.h is defined in the old Standards of C and in C99 too).     &lt;br /&gt;
** include\Fwc\fw_Formatter.h: Declaration of methods for formatting Strings. It include time-formattings. It is similar to sprintf.&lt;br /&gt;
** include\Fwc\fw_MemC.h: Definition of a struct MemC with pointer and its size. Some macros to handle with pointer. Some function prototypes for MemC-handling.            &lt;br /&gt;
** include\Fwc\fw_Readline.h: Support of reading lines from a file. A line can be terminated with 0d, 0a or any combination (Windows, Unix, Mac-conventions all in one). The os_file.h is used as interface to read a file.      &lt;br /&gt;
** include\Fwc\fw_SimpleC.h: Some basicly simple macros and function declarations.&lt;br /&gt;
** include\Fwc\fw_String.h: Basic functions for String storing in a struct StringJc. It is the alternative to zero-terminated C-Strings. The pointer and the length is stored. The basic functions are a bridge between 0-terminated C-strings and StringJc-referenced strings.&lt;br /&gt;
** include\Fwc\fw_ThreadContext.h: The ThreadContext is managed in the OSAL, but its struct is defined here.  &lt;br /&gt;
** include\Fwc\fw_timeconversions.h: struct and funtion declarations for time conversions: A timestamp should be stored internally in form of currently seconds and microseconds after a start time. The conversion to a human readable time should be done only for presentation. The routines support the conversion.&lt;br /&gt;
** include\Fwc\fw_Va_list.h: An appreciation to the &amp;lt; stdarg.h&amp;gt; concept. The value as new: Any argument-type of a variable argument list is described with one char in a char*-string with one char. With the knowledge of the correct type any users function can be use the variable argument more correctly. Usual any other information should be necessary, for example the format-String of sprintf. This header and functions are used in fw_formatter.h&lt;br /&gt;
&lt;br /&gt;
* C-files, which contains common sources for OSAL&lt;br /&gt;
* C-files, which contains common sources for simple C-functions. It can be used in the OSAL-Adaption.&lt;br /&gt;
&lt;br /&gt;
With this Sources a application can be written os-indenpendent. All this sources are independent of the Java2C-thinking. This sources are not complex. There are not any assumption to Java.&lt;/div&gt;</description>
			<pubDate>Sun, 13 Mar 2011 10:17:37 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Components_of_CRuntimeJavalike</comments>		</item>
		<item>
			<title>Components of CRuntimeJavalike</title>
			<link>http://72.14.177.54/java4c/Components_of_CRuntimeJavalike</link>
			<description>&lt;p&gt;Admin:&amp;#32;Protected &amp;quot;Components of CRuntimeJavalike&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]] / [[Component]]&lt;br /&gt;
* down: see chapters&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
CRuntimeJavalike is a tree of C-files with makefiles to build libraries. All files are written by Hartmut Schorrig, www.vishia.org. They are used in some applications in profession too (with second license model). It is a conglomeration of different things, of course.&lt;br /&gt;
&lt;br /&gt;
The CRuntimeJavalike can be used in any application. It contains a OSAL-layer, which is provided for Windows and Linux. The OSAL-layer have to be adapted for other operation systems. Some adaption exists and are tested and used in profession. With adapting the OSAL-layer the sources can be used and the examples can run on any platform.&lt;br /&gt;
&lt;br /&gt;
==Distribution and sources in internet==&lt;br /&gt;
&lt;br /&gt;
* distribution: [[http://sf.net/projects/java2c sf.net/projects/java2c]] The CRuntimeJavalike is distributed as part of the Java2C-Translator. But it can be used without this translator too. Download the distribution and use only the CRuntimeJavalike. [[http://sf.net/projects/zbnf sf.net/projects/zbnf]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/jc/trunk launchpad.net/jc]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/Jc www.vishia.org/Jc]]&lt;br /&gt;
&lt;br /&gt;
==OSAL==&lt;br /&gt;
See [[OSAL]]. The OSAL-component contains &lt;br /&gt;
* C-files, which are special written for the appropriate operation system.&lt;br /&gt;
* One Headerfile, which contains some depending definitions which should be adapted to the platform, os and compiler. It is the [[os_types_def]].h.&lt;br /&gt;
* Headerfiles, which are independent of the operation system. It describes the OSAL-interface.&lt;br /&gt;
* Headerfiles, which contains simple C-definitions and declarations. It are independent of compiler, platform and os.&lt;br /&gt;
* C-files, which contains common sources for OSAL&lt;br /&gt;
* C-files, which contains common sources for simple C-functions. It can be used in the OSAL-Adaption.&lt;br /&gt;
&lt;br /&gt;
With this Sources a application can be written os-indenpendent. All this sources are independent of the Java2C-thinking. This sources are not complex. There are not any assumption to Java.&lt;/div&gt;</description>
			<pubDate>Sun, 13 Mar 2011 09:58:43 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Components_of_CRuntimeJavalike</comments>		</item>
		<item>
			<title>Components of CRuntimeJavalike</title>
			<link>http://72.14.177.54/java4c/Components_of_CRuntimeJavalike</link>
			<description>&lt;p&gt;Admin:&amp;#32;Created page with '==Navigation== * up: Main_Page / Component * down: see chapters  ==Overview== CRuntimeJavalike is a tree of C-files with makefiles to build libraries. All files are writt…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]] / [[Component]]&lt;br /&gt;
* down: see chapters&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
CRuntimeJavalike is a tree of C-files with makefiles to build libraries. All files are written by Hartmut Schorrig, www.vishia.org. They are used in some applications in profession too (with second license model). It is a conglomeration of different things, of course.&lt;br /&gt;
&lt;br /&gt;
The CRuntimeJavalike can be used in any application. It contains a OSAL-layer, which is provided for Windows and Linux. The OSAL-layer have to be adapted for other operation systems. Some adaption exists and are tested and used in profession. With adapting the OSAL-layer the sources can be used and the examples can run on any platform.&lt;br /&gt;
&lt;br /&gt;
==Distribution and sources in internet==&lt;br /&gt;
&lt;br /&gt;
* distribution: [[http://sf.net/projects/java2c sf.net/projects/java2c]] The CRuntimeJavalike is distributed as part of the Java2C-Translator. But it can be used without this translator too. Download the distribution and use only the CRuntimeJavalike. [[http://sf.net/projects/zbnf sf.net/projects/zbnf]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/jc/trunk launchpad.net/jc]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/Jc www.vishia.org/Jc]]&lt;br /&gt;
&lt;br /&gt;
==OSAL==&lt;br /&gt;
See [[OSAL]]. The OSAL-component contains &lt;br /&gt;
* C-files, which are special written for the appropriate operation system.&lt;br /&gt;
* One Headerfile, which contains some depending definitions which should be adapted to the platform, os and compiler. It is the [[os_types_def]].h.&lt;br /&gt;
* Headerfiles, which are independent of the operation system. It describes the OSAL-interface.&lt;br /&gt;
* Headerfiles, which contains simple C-definitions and declarations. It are independent of compiler, platform and os.&lt;br /&gt;
* C-files, which contains common sources for OSAL&lt;br /&gt;
* C-files, which contains common sources for simple C-functions. It can be used in the OSAL-Adaption.&lt;br /&gt;
&lt;br /&gt;
With this Sources a application can be written os-indenpendent. All this sources are independent of the Java2C-thinking. This sources are not complex. There are not any assumption to Java.&lt;/div&gt;</description>
			<pubDate>Sun, 13 Mar 2011 09:40:38 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Components_of_CRuntimeJavalike</comments>		</item>
		<item>
			<title>Os file</title>
			<link>http://72.14.177.54/java4c/Os_file</link>
			<description>&lt;p&gt;Admin:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contains==&lt;br /&gt;
* Handling with opened streams, adequate fopen, fread, fwrite, flock, ftell, fskip&lt;br /&gt;
* Handling with file entries in a directory: exists, write-ability, date last modified, length, absolute path&lt;br /&gt;
* supports pipes of command in/output: stdin, stdout, stderr&lt;br /&gt;
&lt;br /&gt;
==Situation for embedded platforms==&lt;br /&gt;
A file system how it is known from the PC-based software in C is not present in some embedded devices.&lt;br /&gt;
&lt;br /&gt;
But a handling of special files may be possible. There may be present only a few files with given names, or some files in only one directory level which are stored in the RAM, a flash file system, a remote file system etc.&lt;br /&gt;
&lt;br /&gt;
User software should handle with files, independently how it is deployed in the given hardware platform. If there are only special files, the user software should regard this situation using the given special file-paths while open it. But the user software should not depend on the hardware implementation of the file system. All algorithm should be able to test on PC-platform. &lt;br /&gt;
&lt;br /&gt;
==Situation of standardizing in C==&lt;br /&gt;
&lt;br /&gt;
The old C knows two standard to access files:&lt;br /&gt;
&lt;br /&gt;
* Lo-level file-io using open, read, write with a int handle. This was the originally intension in C. This concept founds the stream-handling of UNIX using pipes, standard- and error.output on console etc.&lt;br /&gt;
&lt;br /&gt;
* Buffered file-io using fopen, fread, fwrite, fflush with a structured file handle named &amp;lt;tt&amp;gt;FILE*&amp;lt;/tt&amp;gt; defined in &amp;lt; stdio.h&amp;gt;. This was a second stage of file handling in C. &lt;br /&gt;
&lt;br /&gt;
The interface between the linux-core and the library-layer is adequate to the lo-level-file-system.&lt;br /&gt;
&lt;br /&gt;
But in C-programming only the buffered file-io is usual now. The C99-standard doesn't know the routines of the lo-level-file-io. The buffered file-io regards the &amp;lt;tt&amp;gt;stdout&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;stdin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;stderr&amp;lt;/tt&amp;gt; for piping command line applications too. But they are not the int-values 0..2. Rather than they are special FILE-objects supported by the std-library.&lt;br /&gt;
&lt;br /&gt;
Any C-compiler at any embedded system may offer this file-io-standard-routines and data, but sometimes not in that way how the hardware implements it really. To access the file system which is supported by special packages the routines of the special package should be used instead. The methods are provided in adequate interfaces with adequate names of the routines, but not identical. Often the file-system-component is not integrated in the standard library of the compiler.&lt;br /&gt;
&lt;br /&gt;
The query of a last-modified timestamp etc. is defined in C in the POSIX-standard with the method &amp;lt;tt&amp;gt;fstat()&amp;lt;/tt&amp;gt; defined in the &amp;lt;tt&amp;gt;&amp;lt;sys/stat.h&amp;gt;&amp;lt;/tt&amp;gt;-header. This standard is regarded in some C- and C++ compiler-libraries but it isn't standardized in the C99-standard and it isn't present in a standardized form for any platform. Therefore the POSIX-standard for that isn't able to use outside of UNIX/Linux/PC programming. There is not a really standard.&lt;br /&gt;
&lt;br /&gt;
Therefore the os_file OSAL provides a able-to-use interface. The implementation can use the POSIX-standard if exists or adequate mechanism, which exists in most of file-system-components.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Comparison with Java-file-handling==&lt;br /&gt;
&lt;br /&gt;
Java knows the &amp;lt;tt&amp;gt;java.io.InputStream&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;java.io.OutputStream&amp;lt;/tt&amp;gt;. This both abstract classes are the basics for stream in/out, which are comparable with the lo-level file-io of C respectively the standard file-io using the &amp;lt;tt&amp;gt;FILE*&amp;lt;/tt&amp;gt; descriptor, but without &amp;lt;tt&amp;gt;fprintf&amp;lt;/tt&amp;gt;-capability. The last one is provided with the &amp;lt;tt&amp;gt;java.io.PrintStream&amp;lt;/tt&amp;gt;, derived from java.io.OutputStream. The class java.lang.System contains three references named &amp;lt;tt&amp;gt;out&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;err&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;in&amp;lt;/tt&amp;gt; of type of PrintStream respectively InputStream which represents the pipe-concept of command line invocations in the adequate way as C's &amp;lt;tt&amp;gt; stdin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;stdout&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;stderr&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The handling with file entries in a directory is supported with the class &amp;lt;tt&amp;gt;java.io.File&amp;lt;/tt&amp;gt; with its methods &amp;lt;tt&amp;gt;exists()&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;lastModified()&amp;lt;/tt&amp;gt; etc. This class is comparable with the &amp;lt;tt&amp;gt;struct OS_FileDescription&amp;lt;/tt&amp;gt; and its associated routines defined in the &amp;lt;tt&amp;gt;os_file.h&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Using os_file.h instead file handling with stdio.h==&lt;br /&gt;
&lt;br /&gt;
How it is described in the chapter above, the standard-file-handling doesn't resolve the real expected functionality. Thats why the user programming should not use the standard-file-handling but the os_file-handling. The OSAL-layer adapts the real file handling of the given environment. It can do it because it is a module associated to the users system component, not only associated to the compiler provider.&lt;br /&gt;
&lt;br /&gt;
Sometimes the handling of files is wrapped with functionality of a higher level than the C-standard-file-io. The user uses this wrapper instead the more lo-level C-functions. Inside the wrapper the os_file-routines are called. In that kind the user hasn't any cohesion to the os_file or standard-file handling immediately. The usage of wrappers provides a higher-level interface for the user programming.&lt;br /&gt;
&lt;br /&gt;
==Description of os_file - Interface==&lt;br /&gt;
&lt;br /&gt;
===Query of properties of files===&lt;br /&gt;
&lt;br /&gt;
The struct &amp;lt;tt&amp;gt;OS_FileDescription&amp;lt;/tt&amp;gt; contains the properties for&lt;br /&gt;
&lt;br /&gt;
* fileLength&lt;br /&gt;
* flags for query &lt;br /&gt;
** exists&lt;br /&gt;
** canRead&lt;br /&gt;
** canWrite&lt;br /&gt;
** hidden&lt;br /&gt;
** directory entry or file&lt;br /&gt;
* timestamp last modified&lt;br /&gt;
* absolute (internal) path of the file&lt;br /&gt;
* position of name and relativ path in file to support query it.&lt;br /&gt;
&lt;br /&gt;
The method &amp;lt;tt&amp;gt;os_initFileDescription(this, filepath)&amp;lt;/tt&amp;gt; intializes the struct without calling the operation system. The method &amp;lt;tt&amp;gt;os_getFileDescription(this)&amp;lt;/tt&amp;gt; accesses the operation system and reads the data from directory entries. The implementation uses &amp;lt;tt&amp;gt;fstat(...)&amp;lt;/tt&amp;gt; if a POSIX-compatible access is available.  &lt;br /&gt;
&lt;br /&gt;
===stream in/out===&lt;br /&gt;
TODO&lt;br /&gt;
===file locking===&lt;br /&gt;
TODO&lt;/div&gt;</description>
			<pubDate>Sun, 06 Mar 2011 11:00:31 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Os_file</comments>		</item>
		<item>
			<title>Os file</title>
			<link>http://72.14.177.54/java4c/Os_file</link>
			<description>&lt;p&gt;Admin:&amp;#32;Protected &amp;quot;Os file&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Situation in embedded software==&lt;br /&gt;
A file system how it is known from the PC-based software in C is not present in some embedded devices.&lt;br /&gt;
&lt;br /&gt;
But a handling of special files may be possible. There may be present only a few files with given names, or some files in only one directory level which are stored in the RAM, a flash file system, a remote file system etc.&lt;br /&gt;
&lt;br /&gt;
User software should handle with files, independently how it is deployed in the given hardware platform. If there are only special files, the user software should regard this situation using the given special file-paths while open it. But the user software should not depend on the hardware implementation of the file system. All algorithm should be able to test on PC-platform. &lt;br /&gt;
&lt;br /&gt;
==Situation of standardizing in C==&lt;br /&gt;
&lt;br /&gt;
The old C knows two standard to access files:&lt;br /&gt;
&lt;br /&gt;
* Lo-level file-io using open, read, write with a int handle. This was the originally intension in C. This concept founds the stream-handling of UNIX using pipes, standard- and error.output on console etc.&lt;br /&gt;
&lt;br /&gt;
* Buffered file-io using fopen, fread, fwrite, fflush with a structured file handle named &amp;lt;tt&amp;gt;FILE*&amp;lt;/tt&amp;gt; defined in &amp;lt; stdio.h&amp;gt;. This was a second stage of file handling in C. &lt;br /&gt;
&lt;br /&gt;
The interface between the linux-core and the library-layer is adequate to the lo-level-file-system.&lt;br /&gt;
&lt;br /&gt;
But in C-programming only the buffered file-io is usual now. The C99-standard doesn't know the routines of the lo-level-file-io. The buffered file-io regards the &amp;lt;tt&amp;gt;stdout&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;stdin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;stderr&amp;lt;/tt&amp;gt; for piping command line applications too. But they are not the int-values 0..2. Rather than they are special FILE-objects supported by the std-library.&lt;br /&gt;
&lt;br /&gt;
Any C-compiler at any embedded system may offer this file-io-standard-routines and data, but sometimes not in that way how the hardware implements it really. To access the file system which is supported by special packages the routines of the special package should be used instead. The methods are provided in adequate interfaces with adequate names of the routines, but not identical. Often the file-system-component is not integrated in the standard library of the compiler.&lt;br /&gt;
&lt;br /&gt;
==Using os_file.h instead file handling with stdio.h==&lt;br /&gt;
&lt;br /&gt;
How it is described in the chapter above, the standard-file-handling doesn't resolve the real expected functionality. Thats why the user programming should not use the standard-file-handling but the os_file-handling. The OSAL-layer adapts the real file handling of the given environment. It can do it because it is a module associated to the users system component, not only associated to the compiler provider.&lt;br /&gt;
&lt;br /&gt;
Sometimes the handling of files is wrapped with functionality of a higher level than the C-standard-file-io. The user uses this wrapper instead the more lo-level C-functions. Inside the wrapper the os_file-routines are called. In that kind the user hasn't any cohesion to the os_file or standard-file handling immediately. The usage of wrappers provides a higher-level interface for the user programming.&lt;/div&gt;</description>
			<pubDate>Sun, 06 Mar 2011 10:14:29 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Os_file</comments>		</item>
		<item>
			<title>Inspector datagram</title>
			<link>http://72.14.177.54/java4c/Inspector_datagram</link>
			<description>&lt;p&gt;Admin:&amp;#32;first&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Telegram-structure ==&lt;br /&gt;
&lt;br /&gt;
If Ethernet is present, UDP-telegrams are used. The same informations as ''datagram'' can be transfered inside a hardware with dual-port-RAM-access, or in older or cheeper systems with serial link (RS232), or adequate.&lt;br /&gt;
&lt;br /&gt;
Any datagram consist of a unified header of 16 Byte. After them so named //information units// are disposed. Any information unit consists of a header of 8 byte, following by different data. The header contains the length of the information unit.&lt;br /&gt;
&lt;br /&gt;
The components of the datagram are defined for C/C++-usage in the headerfile //DataExchange_Inspc.h//.&lt;br /&gt;
&lt;br /&gt;
===Syntax for datagrams===&lt;br /&gt;
&lt;br /&gt;
The datagrams are not simple data structs, but compositions of data. Therefore the usage of C-struct-definitions needs to many verbal explanations. A strong syntactical definition is more exactly. For the syntax description the ZBNF is used. ZBNF is similar to the well known BNF or EBNF, but it defines the semantic aspect in the syntax description too. The ZBNF is described in [[http://www.vishia.org/ZBNF]]. The enhancement of ZBNF for binary data, like used here, is described in [[http://www.vishia.org/ZBNF/sf/ZBNF/docu/ZbnfBinary_en.html]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Basic elements used in the datagram for inspector-data-communication===&lt;br /&gt;
&lt;br /&gt;
//**InspcDatagram::=&amp;lt;@HEADSIZE=16&amp;gt; &amp;lt;@0+2:SIZE?nrofBytes&amp;gt; &amp;lt;@2+2?entrant=&amp;quot;&amp;gt; &amp;lt;@4+4?encryption&amp;gt; &amp;lt;@8+4?seqnr&amp;gt; &amp;lt;@12+1?&amp;quot; answerNr=&amp;quot; &amp;lt;@13+3?reserve&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
It is the head of any datagram. &lt;br /&gt;
* entrant: is an identifier of the instance inside a target which should be addressed. TODO: Note: It is a negative number yet, to distinguish to the headless telegrams.&lt;br /&gt;
* encryption: is an information for encryption of the content after this head. Note: The encryption is planned but not designed yet.&lt;br /&gt;
* seqnr: identifies a telegram and its associated answer telegram. In generally, a command-datagram should use any number which is unique for a longer time. The answer should mirror this same number. This is the only contract. In addition, the number can be built with the current timestamp. The bits 31..4 contains the current milliseconds after 1970 (fractional part) and the bits 3..0 may be count more as one telegram in the same millisecond. The same sequence number can be occured after 4 days, this is a long enough distance of time. The time information can be used for debugging.&lt;br /&gt;
* answerNr: A answer telegram may be consist of more as one UDP-Telegram. The first telegram in numbered by 1. The next telegram is countered here. The last telegramm is dedicated by set bit 7. It means, if the answer consists of one telegram, it has the value 0x81 here. If the answer consists of 2 telegrams, there are numbered here with 0x01, 0x82. If the receiver doesn't get all telegrams (lost telegrams), than the command should be repeated. &lt;br /&gt;
&lt;br /&gt;
//**Item::=&amp;lt;@HEADSIZE=8&amp;gt; &amp;lt;@0+2:SIZE?nrofBytes&amp;gt; &amp;lt;@2+2?cmd&amp;gt; &amp;lt;@4+4?order&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
It is the head for any information unit inside a &amp;lt;InspDatagram&amp;gt;...&amp;lt;/InspDatagram&amp;gt;. An &amp;lt;Item&amp;gt; can have children. So the general form of a datagram may be written as&lt;br /&gt;
&lt;br /&gt;
//**&amp;lt;InspDatagram&amp;gt;&amp;lt;Item:&amp;gt;...&amp;lt;:Item&amp;gt;&amp;lt;Item:&amp;gt;...&amp;lt;:Item&amp;gt;&amp;lt;/Datagram&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
The superior componentes with &amp;lt;Item&amp;gt; as head are subtly differentiated and named with an own syntactical name. See for example &amp;lt;cmdValueByPath&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
//**ItemAckn::=&amp;lt;Item cmd=1 /&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**ItemNackn::=&amp;lt;Item cmd=1 /&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
Acknowledge or non-acknowledge answer to a request. If the answer should have data, the data are returned, or the &amp;lt;ItemNackn&amp;gt; is returned if the cmd isn't able to proceed. The &amp;lt;ItemNack&amp;gt; contains the order-number to assign the request. Especially if a path is false, a &amp;lt;ItemNackn&amp;gt; is returned.&lt;br /&gt;
&lt;br /&gt;
//**Value8byte::=&amp;lt;@SIZE=8&amp;gt; [ &amp;lt;@0+4:float?float&amp;gt; | &amp;lt;@0+8:double?double&amp;gt; | &amp;lt;@0+8?long&amp;gt; | &amp;lt;@4+4?int&amp;gt; | &amp;lt;@6+2?short&amp;gt; | &amp;lt;@7+1?byte&amp;gt;].**//&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;Value8byte&amp;gt;-value is a pure value in 8 bytes. In case of float, 4 bytes are unused. In case of integer with less bytes as 8, it is the same as long in big-endian-presentation. TODO setting of char16? The type of data isn't described in this element. Normally the operator (GUI) knows the type of the element inside the target and prepares the proper type for the target.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//**TypeId::=&amp;lt;@SIZE=1?&amp;gt; &amp;lt;@0+0?id&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
It is one byte which contains the identification for a type.&lt;br /&gt;
&lt;br /&gt;
//**int64Value ::=&amp;lt;@SIZE=9?&amp;gt; &amp;lt;TypeId id=0xe2&amp;gt; &amp;lt;@1+8?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**uint64Value::=&amp;lt;@SIZE=9?&amp;gt; &amp;lt;TypeId id=0xe3&amp;gt; &amp;lt;@1+8?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**int32Value ::=&amp;lt;@SIZE=5?&amp;gt; &amp;lt;TypeId id=0xe4&amp;gt; &amp;lt;@1+4?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**uint32Value::=&amp;lt;@SIZE=5?&amp;gt; &amp;lt;TypeId id=0xe5&amp;gt; &amp;lt;@1+4?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**int16Value ::=&amp;lt;@SIZE=3?&amp;gt; &amp;lt;TypeId id=0xe6&amp;gt; &amp;lt;@1+2?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**uint32Value::=&amp;lt;@SIZE=3?&amp;gt; &amp;lt;TypeId id=0xe7&amp;gt; &amp;lt;@1+2?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**int8Value  ::=&amp;lt;@SIZE=2?&amp;gt; &amp;lt;TypeId id=0xe8&amp;gt; &amp;lt;@1+1?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**uint8Value ::=&amp;lt;@SIZE=2?&amp;gt; &amp;lt;TypeId id=0xe9&amp;gt; &amp;lt;@1+1?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**floatValue ::=&amp;lt;@SIZE=5?&amp;gt; &amp;lt;TypeId id=0xec&amp;gt; &amp;lt;@1+4:float?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**doubleValue::=&amp;lt;@SIZE=9?&amp;gt; &amp;lt;TypeId id=0xed&amp;gt; &amp;lt;@1+8:double?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**char8Value  ::=&amp;lt;@SIZE=2?&amp;gt; &amp;lt;TypeId id=0xee&amp;gt; &amp;lt;@1+1?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**char16Value  ::=&amp;lt;@SIZE=3?&amp;gt; &amp;lt;TypeId id=0xef&amp;gt; &amp;lt;@1+2?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
//**boolValue  ::=&amp;lt;@SIZE=2?&amp;gt; &amp;lt;TypeId id=0xf6&amp;gt; &amp;lt;@1+1?value&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
They are representations of the primitive values. The values are the image of the bit representation of the type in the hardware. It is written in big-endian always! The first byte is the type-identifier-byte.&lt;br /&gt;
&lt;br /&gt;
//**StringValue::= &amp;lt;TypeId id:SIZE=1..0xbf&amp;gt; { &amp;lt;@*?char&amp;gt; }&amp;lt;/TypeId&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
The length of the StringValue is the number of chars +1, because the length-information counts the length-byte too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Presentation of string-given pathes===&lt;br /&gt;
&lt;br /&gt;
//**PathValue::=[{ &amp;lt;$?fieldIdent&amp;gt; [**// {{{[}}}//**&amp;lt;#?index&amp;gt;**//{{{]}}}//** | [&amp;lt;?questCollectionSize&amp;gt; **//{{{[?]}}}//** | **//{{{&amp;lt;?&amp;gt;}}}//** ] |]**// {{{.}}}//** }| **//{{{.}}}//** ].**//&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;PathValue&amp;gt; describes the access to any element inside the structure of data. It is given as string of chars.&lt;br /&gt;
Examples for valid paths are:&lt;br /&gt;
* &amp;quot;.&amp;quot;: The first node&lt;br /&gt;
* &amp;quot;myAppl.data.&amp;quot;: deeper node.&lt;br /&gt;
* &amp;quot;myAppl.x[10].&amp;quot; : an element of an array&lt;br /&gt;
* &amp;quot;myAppl.x[10].a.&amp;quot; : an element inside an array-element&lt;br /&gt;
* &amp;quot;myAppl.x[?].&amp;quot; : The container x is asked to his collection size.&lt;br /&gt;
* &amp;quot;myAppl.x&amp;lt;?&amp;gt;.&amp;quot; : The same above, the &amp;lt;&amp;gt; should associate a non-array-container, a List or Map&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ZBNF-syntax-notification: &lt;br /&gt;
* The &amp;lt;$?fieldIdent&amp;gt; denotes an //identifier// with the meaning //fieldIdent//.&lt;br /&gt;
* An index is optional for any &amp;lt;$fieldIdent&amp;gt;. The notification in [...] means an option, like usual in BNF.&lt;br /&gt;
* The notification of \[ and \] means the brackets as characters in the text. &amp;lt;#?index&amp;gt; denotes a number with meaning //index//.&lt;br /&gt;
* {...} is a repetition, passing at least one time. [...|...] is the choiceable-option. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Items in datagrams, commands and its answer===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Request the structure of data===&lt;br /&gt;
&lt;br /&gt;
//**cmdGetFields::=&amp;lt;Item cmd=0x10:&amp;gt;&amp;lt;PathValue&amp;gt;&amp;lt;:Item&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
/**anwerFields::={ &amp;lt;Item cmd=0x14:&amp;gt;&amp;lt;$?Fieldident&amp;gt;[ \[ &amp;lt;#?fixArraySize&amp;gt; | ? &amp;lt;?dynamicArray&amp;gt; \] | \&amp;lt;?\&amp;gt; &amp;lt;?container&amp;gt; |]&amp;lt;:Item&amp;gt; }.**//&lt;br /&gt;
&lt;br /&gt;
The command supplies a path. The answer consists of more as one Item, all with the same order-id, one item describes one field of the requested data structure. TODO the real-type is not answered. it is only able to guess from the elements and from the type of the reference. If the reference is the same, it may be ok. But for derived classes the type should be returned too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Request a value===&lt;br /&gt;
&lt;br /&gt;
//**cmdValueByPath::=&amp;lt;Item cmd=0x30:&amp;gt;&amp;lt;PathValue&amp;gt;&amp;lt;:Item&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
//**answerValue::=&amp;lt;Item cmd=0x26:&amp;gt; [ &amp;lt;int64Value&amp;gt; | &amp;lt;uint64Value&amp;gt; | &amp;lt;int32Value&amp;gt; | &amp;lt;uint32Value&amp;gt; | &amp;lt;int16Value&amp;gt;| &amp;lt;uint16Value&amp;gt; | &amp;lt;int8Value&amp;gt; | &amp;lt;uint8Value&amp;gt; | &amp;lt;floatValue&amp;gt; | &amp;lt;doubleValue&amp;gt; | &amp;lt;char8Value&amp;gt; | &amp;lt;boolValue&amp;gt; | &amp;lt;StringValue&amp;gt; ] &amp;lt;:Item&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cmdValueByPath&amp;gt; is a part inside &amp;lt;InspDatagram&amp;gt;...&amp;lt;cmdValueByPath /&amp;gt;...&amp;lt;/InspDatagram&amp;gt;, which is send from the operator to the target. The targets sends an answer telegram which contains &amp;lt;InspDatagram&amp;gt;...&amp;lt;answerValue /&amp;gt;...&amp;lt;/InspDatagram&amp;gt;. The Item.order is reflected from the cmd to the answer. The InspDatagram.seqnr is reflected from the cmd telegram to the answer telegram. There can be more as one command in one Datagram from operator to target, which is anwered in one datagram with all answers. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;cmdValueByPath&amp;gt; requests the value of the given path. The answer is given in the form &amp;lt;answerValue&amp;gt;. If the last element of the path is a primitive numeric value, then its value is answered in the binary representation. If the element is a character string, the contained String is returned, but maximal the first 191 characters. If the element is a complex one and it based on Object, the toString()-method is invoked which returns a string. In the other case the address of the element is returned as String in form &amp;quot;@address&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set a value===&lt;br /&gt;
&lt;br /&gt;
//**SetValueByPath::=&amp;lt;Item cmd=0x35:&amp;gt; &amp;lt;Value8byte /&amp;gt; &amp;lt;PathValue /&amp;gt; &amp;lt;:Item&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
//**&amp;lt;answerValue&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
The answer is &amp;lt;answervalue&amp;gt; where the re-read value is returned. The type of value should be correct given. The value is set in the target with the given bytes in &amp;lt;Value8byte&amp;gt; without conversion. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Store sets of pathes in a target or reflection unit (agents)===&lt;br /&gt;
&lt;br /&gt;
A target may store some pathes, which is a agent at the GUI. It is possible that this are set-values (path + value), which are executed in the target device on startup automatically to set initial values or parameter.&lt;br /&gt;
&lt;br /&gt;
====Create a file for agent items====&lt;br /&gt;
&lt;br /&gt;
//**cmdCreateAgentFile::=&amp;lt;Item: cmd=0x50 &amp;gt;  &amp;lt;$/\.?filepath&amp;gt; &amp;lt;:Item&amp;gt;. **//&lt;br /&gt;
&lt;br /&gt;
//**answerCreateAgentFile: &amp;lt;Item cmd=0x51 :&amp;gt; &amp;lt;@8+2?nrFile&amp;gt; &amp;lt;:Item&amp;gt;.**//&lt;br /&gt;
&lt;br /&gt;
It opens respectively creates a file to store persistent values. An existing file will be deleted. It means the stored persistent pathes with their values are removed from the target. The intension is, send newly. The filepath may consist of / as separator of directories and dots for extension. The possibilities of filepath-notifications depends on the ability of the target system. There may be a simple file system which accepts only deterministic names. &lt;br /&gt;
&lt;br /&gt;
The answer returnes a number in positive range as handle, which have to be used for the items of the agent. &lt;br /&gt;
&lt;br /&gt;
If the command is repeated by the same source, it is repeately executed. If the command is sent from another source, while the same file is opened, a negativ acknowledge is returned.&lt;br /&gt;
&lt;br /&gt;
If a negativ acknowlege is returned, the same answer but with nrFile = -1 is sent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Get a value and save ====&lt;br /&gt;
&lt;br /&gt;
//**cmdGetAgentValueByPath::=&amp;lt;Item cmd=0x56:&amp;gt; &amp;lt;@8+2?nrFile&amp;gt; &amp;lt;Value8byte /&amp;gt; &amp;lt;PathValue /&amp;gt; &amp;lt;:Item&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
//**&amp;lt;answerValue&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
The answer is &amp;lt;answerValue&amp;gt; with the actual content. Additinally the Item is stored in the file of agent.&lt;br /&gt;
&lt;br /&gt;
====Set a value and save (persistent)====&lt;br /&gt;
&lt;br /&gt;
//**cmdSetPersistValueByPath::=&amp;lt;Item cmd=0x54:&amp;gt; &amp;lt;@8+2?nrFile&amp;gt; &amp;lt;Value8byte /&amp;gt; &amp;lt;PathValue /&amp;gt; &amp;lt;:Item&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
//**&amp;lt;answerValue&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
The answer is &amp;lt;answervalue&amp;gt; where the re-read value is returned. The type of value should be correct given. The value is set in the target with the given bytes in &amp;lt;Value8byte&amp;gt; without conversion. This Item is registered in a persistent-agent-file inside the target device. Its number is given in nrFile in the datagram. The file should be opened and closed with extra items in another datagrams.&lt;br /&gt;
&lt;br /&gt;
====Request the content of a agent====&lt;br /&gt;
&lt;br /&gt;
//**cmdRequestAgent::=&amp;lt;Item cmd=0x58:&amp;gt;&amp;lt;$/\.?filepath&amp;gt; &amp;lt;:Item&amp;gt;. **//&lt;br /&gt;
&lt;br /&gt;
The answer consists of&lt;br /&gt;
&lt;br /&gt;
//**answerRequestAgent::={&amp;lt;InspcDatagram:&amp;gt;{&amp;lt;answerAgentSetItem&amp;gt;|&amp;lt;answerAgentGetItem&amp;gt;}&amp;lt;:InspcDatagram&amp;gt;}**/&lt;br /&gt;
&lt;br /&gt;
It means, all stored &amp;lt;answerAgentItem&amp;gt; in the requested file are returned in one or more Datagrams.&lt;br /&gt;
&lt;br /&gt;
//**answerAgentSetItem::=&amp;lt;Item cmd=0x59:&amp;gt; &amp;lt;@8+2?nrFile&amp;gt; &amp;lt;Value8byte /&amp;gt; &amp;lt;PathValue /&amp;gt; &amp;lt;:Item&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
The value is the value which is stored. The answer doesn't access to data.&lt;br /&gt;
&lt;br /&gt;
//**answerAgentGetItem::=&amp;lt;Item cmd=0x5b:&amp;gt; &amp;lt;@8+2?nrFile&amp;gt; &amp;lt;PathValue /&amp;gt; &amp;lt;:Item&amp;gt;**//&lt;br /&gt;
&lt;br /&gt;
The item contains only the path. The answer doesn't access to data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Closes a file for persist values====&lt;br /&gt;
&lt;br /&gt;
//**cmdCloseAgentFile::=&amp;lt;Item cmd=0x52:&amp;gt;  &amp;lt;@8+2?nrFile&amp;gt; &amp;lt;:Item&amp;gt;. **//&lt;br /&gt;
&lt;br /&gt;
//**answerCloseAgentFile::= &amp;lt;Item cmd=0x53&amp;gt;. **//&lt;br /&gt;
&lt;br /&gt;
The file is closed now. Following requests &amp;lt;SetPersistValueByPath&amp;gt; are answered with &amp;lt;ItenNackn&amp;gt; and they are not executed. TODO should they set non-persistent?&lt;br /&gt;
&lt;br /&gt;
The file will be closed automatically if no close command is received in a timeout time, which depends on the target. It is about a few seconds. It means, if the communication is aborted, no problem occurs. The behaviour of the target is **stateless**, after the timeout. But the agent file may be confuse then because not all items are stored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===General Syntax of a whole telegram===&lt;br /&gt;
&lt;br /&gt;
WholeInspDatagramToTarget::=&amp;lt;InspDatagram&amp;gt; { &amp;lt;cmdValueByPath&amp;gt; | &amp;lt;cmdGetFields&amp;gt; | &amp;lt;TODO&amp;gt; } &amp;lt;/InspDatagram&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
WholeInspDatagramFromTarget::=&amp;lt;InspDatagram&amp;gt; { &amp;lt;answerValue&amp;gt; | &amp;lt;TODO&amp;gt; } &amp;lt;/InspDatagram&amp;gt;.&lt;/div&gt;</description>
			<pubDate>Sun, 06 Mar 2011 08:38:12 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Inspector_datagram</comments>		</item>
		<item>
			<title>Main Page</title>
			<link>http://72.14.177.54/java4c/Main_Page</link>
			<description>&lt;p&gt;Admin:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This site holds information about programming for embedded software in an ObjectOriented style. Ideas and concepts of the Java programming language are integrated in this thinks. Some articles describe software-engineering-topics.&lt;br /&gt;
&lt;br /&gt;
==Base links==&lt;br /&gt;
* [[Java4C]] - why Java-thinking and Java-using for the C-programming&lt;br /&gt;
* [[CRuntimeJavalike]] - A base library for embedded C-software&lt;br /&gt;
* [[Java2C]] - A translator from Java-sources to C-sources&lt;br /&gt;
* [[Component]] - Building the application with components and moduls&lt;br /&gt;
* [[Bazaar]] - A Source Version System&lt;br /&gt;
&lt;br /&gt;
==Java4C==&lt;br /&gt;
* [[Java4C]] - why Java-thinking and Java-using for the C-programming&lt;br /&gt;
&lt;br /&gt;
==CRuntimeJavalike==&lt;br /&gt;
* [[CRuntimeJavalike]] - A base library for embedded C-software&lt;br /&gt;
===OSAL===&lt;br /&gt;
* [[OSAL]] - The interface to the operation system with its application layer&lt;br /&gt;
* basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Java2C==&lt;br /&gt;
* [[http://www.vishia.org/Java2C www.vishia.org/Java2C]]&lt;br /&gt;
* [[http://sourceforge.net/projects/java2c Java2C on sourceforge]]&lt;br /&gt;
&lt;br /&gt;
==Components, Dependencies==&lt;br /&gt;
* [[Component]] - Building the application with components and modules - common description&lt;br /&gt;
&lt;br /&gt;
===Components of vishia-Software===&lt;br /&gt;
* [[Components of vishia-Java]] - presentation of components from all Java - sources of org/vishia&lt;br /&gt;
* [[Components of CRuntimeJavalike]] - presentation of components from C-sources&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
* [[Dependency]]&lt;br /&gt;
&lt;br /&gt;
====Dependency-Topics of C====&lt;br /&gt;
* [[forward declaration of struct]]&lt;br /&gt;
* [[forward declaration of functions in header]] &lt;br /&gt;
&lt;br /&gt;
====Dependency-Topics of ObjectOrientation (Java, C)====&lt;br /&gt;
&lt;br /&gt;
* TODO&lt;br /&gt;
&lt;br /&gt;
==Bazaar==&lt;br /&gt;
* [[Bazaar]] - A Source Version System&lt;br /&gt;
* [[Bazaar-Notes]]: discussion (german) about Source-Management and directory structures&lt;br /&gt;
&lt;br /&gt;
==The key author of this site==&lt;br /&gt;
&lt;br /&gt;
has experience in embedded programming since 1977, beginning with Assembler programming with the Z80-processor. I'm working for a company in germany in themes of embedded control. This site presents experiences independently of concretely job definitions. Hartmut Schorrig, [[http://www.vishia.org www.vishia.org]]&lt;br /&gt;
&lt;br /&gt;
==The mission of this site - Your contribution==&lt;br /&gt;
&lt;br /&gt;
Exchange of experiences. You can take place on discussion. You can complement the text of the pages with your experience and knowledge. You can improve the appearance of the text.&lt;br /&gt;
&lt;br /&gt;
It is necessary to register with a user name to this site.&lt;br /&gt;
&lt;br /&gt;
Future: [[Inspector datagram]]&lt;/div&gt;</description>
			<pubDate>Sun, 06 Mar 2011 08:35:06 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Main_Page</comments>		</item>
		<item>
			<title>Os file</title>
			<link>http://72.14.177.54/java4c/Os_file</link>
			<description>&lt;p&gt;Admin:&amp;#32;first&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Situation in embedded software==&lt;br /&gt;
A file system how it is known from the PC-based software in C is not present in some embedded devices.&lt;br /&gt;
&lt;br /&gt;
But a handling of special files may be possible. There may be present only a few files with given names, or some files in only one directory level which are stored in the RAM, a flash file system, a remote file system etc.&lt;br /&gt;
&lt;br /&gt;
User software should handle with files, independently how it is deployed in the given hardware platform. If there are only special files, the user software should regard this situation using the given special file-paths while open it. But the user software should not depend on the hardware implementation of the file system. All algorithm should be able to test on PC-platform. &lt;br /&gt;
&lt;br /&gt;
==Situation of standardizing in C==&lt;br /&gt;
&lt;br /&gt;
The old C knows two standard to access files:&lt;br /&gt;
&lt;br /&gt;
* Lo-level file-io using open, read, write with a int handle. This was the originally intension in C. This concept founds the stream-handling of UNIX using pipes, standard- and error.output on console etc.&lt;br /&gt;
&lt;br /&gt;
* Buffered file-io using fopen, fread, fwrite, fflush with a structured file handle named &amp;lt;tt&amp;gt;FILE*&amp;lt;/tt&amp;gt; defined in &amp;lt; stdio.h&amp;gt;. This was a second stage of file handling in C. &lt;br /&gt;
&lt;br /&gt;
The interface between the linux-core and the library-layer is adequate to the lo-level-file-system.&lt;br /&gt;
&lt;br /&gt;
But in C-programming only the buffered file-io is usual now. The C99-standard doesn't know the routines of the lo-level-file-io. The buffered file-io regards the &amp;lt;tt&amp;gt;stdout&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;stdin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;stderr&amp;lt;/tt&amp;gt; for piping command line applications too. But they are not the int-values 0..2. Rather than they are special FILE-objects supported by the std-library.&lt;br /&gt;
&lt;br /&gt;
Any C-compiler at any embedded system may offer this file-io-standard-routines and data, but sometimes not in that way how the hardware implements it really. To access the file system which is supported by special packages the routines of the special package should be used instead. The methods are provided in adequate interfaces with adequate names of the routines, but not identical. Often the file-system-component is not integrated in the standard library of the compiler.&lt;br /&gt;
&lt;br /&gt;
==Using os_file.h instead file handling with stdio.h==&lt;br /&gt;
&lt;br /&gt;
How it is described in the chapter above, the standard-file-handling doesn't resolve the real expected functionality. Thats why the user programming should not use the standard-file-handling but the os_file-handling. The OSAL-layer adapts the real file handling of the given environment. It can do it because it is a module associated to the users system component, not only associated to the compiler provider.&lt;br /&gt;
&lt;br /&gt;
Sometimes the handling of files is wrapped with functionality of a higher level than the C-standard-file-io. The user uses this wrapper instead the more lo-level C-functions. Inside the wrapper the os_file-routines are called. In that kind the user hasn't any cohesion to the os_file or standard-file handling immediately. The usage of wrappers provides a higher-level interface for the user programming.&lt;/div&gt;</description>
			<pubDate>Sun, 06 Mar 2011 08:02:08 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Os_file</comments>		</item>
		<item>
			<title>Main Page</title>
			<link>http://72.14.177.54/java4c/Main_Page</link>
			<description>&lt;p&gt;Admin:&amp;#32;/* OSAL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This site holds information about programming for embedded software in an ObjectOriented style. Ideas and concepts of the Java programming language are integrated in this thinks. Some articles describe software-engineering-topics.&lt;br /&gt;
&lt;br /&gt;
==Base links==&lt;br /&gt;
* [[Java4C]] - why Java-thinking and Java-using for the C-programming&lt;br /&gt;
* [[CRuntimeJavalike]] - A base library for embedded C-software&lt;br /&gt;
* [[Java2C]] - A translator from Java-sources to C-sources&lt;br /&gt;
* [[Component]] - Building the application with components and moduls&lt;br /&gt;
* [[Bazaar]] - A Source Version System&lt;br /&gt;
&lt;br /&gt;
==Java4C==&lt;br /&gt;
* [[Java4C]] - why Java-thinking and Java-using for the C-programming&lt;br /&gt;
&lt;br /&gt;
==CRuntimeJavalike==&lt;br /&gt;
* [[CRuntimeJavalike]] - A base library for embedded C-software&lt;br /&gt;
===OSAL===&lt;br /&gt;
* [[OSAL]] - The interface to the operation system with its application layer&lt;br /&gt;
* basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Java2C==&lt;br /&gt;
* [[http://www.vishia.org/Java2C www.vishia.org/Java2C]]&lt;br /&gt;
* [[http://sourceforge.net/projects/java2c Java2C on sourceforge]]&lt;br /&gt;
&lt;br /&gt;
==Components, Dependencies==&lt;br /&gt;
* [[Component]] - Building the application with components and modules - common description&lt;br /&gt;
&lt;br /&gt;
===Components of vishia-Software===&lt;br /&gt;
* [[Components of vishia-Java]] - presentation of components from all Java - sources of org/vishia&lt;br /&gt;
* [[Components of CRuntimeJavalike]] - presentation of components from C-sources&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
* [[Dependency]]&lt;br /&gt;
&lt;br /&gt;
====Dependency-Topics of C====&lt;br /&gt;
* [[forward declaration of struct]]&lt;br /&gt;
* [[forward declaration of functions in header]] &lt;br /&gt;
&lt;br /&gt;
====Dependency-Topics of ObjectOrientation (Java, C)====&lt;br /&gt;
&lt;br /&gt;
* TODO&lt;br /&gt;
&lt;br /&gt;
==Bazaar==&lt;br /&gt;
* [[Bazaar]] - A Source Version System&lt;br /&gt;
* [[Bazaar-Notes]]: discussion (german) about Source-Management and directory structures&lt;br /&gt;
&lt;br /&gt;
==The key author of this site==&lt;br /&gt;
&lt;br /&gt;
has experience in embedded programming since 1977, beginning with Assembler programming with the Z80-processor. I'm working for a company in germany in themes of embedded control. This site presents experiences independently of concretely job definitions. Hartmut Schorrig, [[http://www.vishia.org www.vishia.org]]&lt;br /&gt;
&lt;br /&gt;
==The mission of this site - Your contribution==&lt;br /&gt;
&lt;br /&gt;
Exchange of experiences. You can take place on discussion. You can complement the text of the pages with your experience and knowledge. You can improve the appearance of the text.&lt;br /&gt;
&lt;br /&gt;
It is necessary to register with a user name to this site.&lt;/div&gt;</description>
			<pubDate>Sun, 06 Mar 2011 07:32:42 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Main_Page</comments>		</item>
		<item>
			<title>Os Shared Memory</title>
			<link>http://72.14.177.54/java4c/Os_Shared_Memory</link>
			<description>&lt;p&gt;Admin:&amp;#32;cont&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shared memory is a memory-area, which is able to access from more as one process. It is a possibility given in some platforms. A process in this meaning is a portion of software maybe with more as one thread, which is running on the same platform simultaneously with other processes. But the processes are separated in the usage of the resources. Especially they haven't a common memory. It is to protect the processes against failures in the software.&lt;br /&gt;
&lt;br /&gt;
'''The shared memory is not a mechanism, which is able to use on any platform'''. Therefore it is not a part of the common OSAL interface definition.&lt;br /&gt;
&lt;br /&gt;
'''Use InterProcessComm as means of expression instead''':&lt;br /&gt;
&lt;br /&gt;
If shared memory is used, it is a problem of the communication between processes. Therefore the mechanism of [[InterProcessCommunication]] should be used instead:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;InterProcessComm.open(ChannelSpec);&amp;lt;/tt&amp;gt; to open a communication channel. It may create a shared-memory-access-object.&lt;br /&gt;
* &amp;lt;tt&amp;gt;InterProcessComm.receive(...);&amp;lt;/tt&amp;gt;: Receive any data from another process. It may check the shared memory whether expected information are given. It is not specified which addresses and which information inside the shared memory are checked. The receive operation is a broadcast-receive. To specify a finer granularity in information-receiving, there should be more as one &amp;lt;tt&amp;gt;open(...)&amp;lt;/tt&amp;gt;-operations which are associated to parts of information in the shared memory. The &amp;lt;tt&amp;gt;receive(...)&amp;lt;/tt&amp;gt;-operation is more ''wait for event''-adequate as ''read memory''. But usual it is it, which are expected in a communication between processes. The user should rather think about ''I will use the shared memory'' but ''I have to get events from another process''. If receive is used for shared memory, the &amp;lt;tt&amp;gt;receive(..., sender)&amp;lt;/tt&amp;gt;-method can look to control bits in more as one ranges in shared memory. It can return several data specifying the source of the data in the &amp;lt;tt&amp;gt;sender&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*  &amp;lt;tt&amp;gt;InterProcessComm.send(data, address);&amp;lt;/tt&amp;gt;: it sets informations, maybe setting values in the shared memory. The address can be select which range, the data are the byte-data for the range. It is equal to send an information to a specified channel. &lt;br /&gt;
&lt;br /&gt;
* The methods &amp;lt;tt&amp;gt;InterProcessComm.capacityToSendWithoutBlocking(requestedNumber)&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;dataAvailable()&amp;lt;/tt&amp;gt; can be used to poll the data situation.&lt;br /&gt;
&lt;br /&gt;
If specific data struct are used inside a shared memory, it should be recognized as a problem of a driver level, not as part of a user program.&lt;/div&gt;</description>
			<pubDate>Sun, 06 Mar 2011 05:47:03 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Os_Shared_Memory</comments>		</item>
		<item>
			<title>Os Shared Memory</title>
			<link>http://72.14.177.54/java4c/Os_Shared_Memory</link>
			<description>&lt;p&gt;Admin:&amp;#32;Protected &amp;quot;Os Shared Memory&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shared memory is a memory-area, which is able to access from more as one process. It is a possibility given in some platforms. A process in this meaning is a portion of software maybe with more as one thread, which is running on the same platform simultaneously with other processes. But the processes are separated in the usage of the resources. Especially they haven't a common memory. It is to protect the processes against failures in the software.&lt;br /&gt;
&lt;br /&gt;
The shared memory is not a mechanism, which is able to use on any platform. Therefore it is not a part of the common OSAL interface definition.&lt;br /&gt;
&lt;br /&gt;
If shared memory is used, it is a problem of the communication between processes. Therefore the mechanism of [[InterProcessCommunication]] should be used instead:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;InterProcessComm.open(ChannelSpec);&amp;lt;/tt&amp;gt; to open a communication channel. It may create a shared-memory-access-object.&lt;br /&gt;
* &amp;lt;tt&amp;gt;InterProcessComm.receive(...);&amp;lt;/tt&amp;gt;: Receive any data from another process. It may check the shared memory whether expected information are given. It is not specified which addresses and which information inside the shared memory are checked. The receive operation is a broadcast-receive. To specify a finer granularity in information-receiving, there should be more as one &amp;lt;tt&amp;gt;open(...)&amp;lt;/tt&amp;gt;-operations which are associated to parts of information in the shared memory. The &amp;lt;tt&amp;gt;receive(...)&amp;lt;/tt&amp;gt;-operation is more ''wait for event''-adequate as ''read memory''. But usual it is it, which are expected in a communication between processes. The user should rather think about ''I will use the shared memory'' but ''I have to get events from another process''.&lt;br /&gt;
&lt;br /&gt;
*  &amp;lt;tt&amp;gt;InterProcessComm.send(data, address);&amp;lt;/tt&amp;gt;: it sets informations, maybe setting values in the shared memory&lt;/div&gt;</description>
			<pubDate>Sun, 06 Mar 2011 05:37:34 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Os_Shared_Memory</comments>		</item>
		<item>
			<title>Os Shared Memory</title>
			<link>http://72.14.177.54/java4c/Os_Shared_Memory</link>
			<description>&lt;p&gt;Admin:&amp;#32;first&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shared memory is a memory-area, which is able to access from more as one process. It is a possibility given in some platforms. A process in this meaning is a portion of software maybe with more as one thread, which is running on the same platform simultaneously with other processes. But the processes are separated in the usage of the resources. Especially they haven't a common memory. It is to protect the processes against failures in the software.&lt;br /&gt;
&lt;br /&gt;
The shared memory is not a mechanism, which is able to use on any platform. Therefore it is not a part of the common OSAL interface definition.&lt;br /&gt;
&lt;br /&gt;
If shared memory is used, it is a problem of the communication between processes. Therefore the mechanism of [[InterProcessCommunication]] should be used instead:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;InterProcessComm.open(ChannelSpec);&amp;lt;/tt&amp;gt; to open a communication channel. It may create a shared-memory-access-object.&lt;br /&gt;
* &amp;lt;tt&amp;gt;InterProcessComm.receive(...);&amp;lt;/tt&amp;gt;: Receive any data from another process. It may check the shared memory whether expected information are given. It is not specified which addresses and which information inside the shared memory are checked. The receive operation is a broadcast-receive. To specify a finer granularity in information-receiving, there should be more as one &amp;lt;tt&amp;gt;open(...)&amp;lt;/tt&amp;gt;-operations which are associated to parts of information in the shared memory. The &amp;lt;tt&amp;gt;receive(...)&amp;lt;/tt&amp;gt;-operation is more ''wait for event''-adequate as ''read memory''. But usual it is it, which are expected in a communication between processes. The user should rather think about ''I will use the shared memory'' but ''I have to get events from another process''.&lt;br /&gt;
&lt;br /&gt;
*  &amp;lt;tt&amp;gt;InterProcessComm.send(data, address);&amp;lt;/tt&amp;gt;: it sets informations, maybe setting values in the shared memory&lt;/div&gt;</description>
			<pubDate>Sat, 05 Mar 2011 21:22:30 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Os_Shared_Memory</comments>		</item>
		<item>
			<title>InterProcessCommunication</title>
			<link>http://72.14.177.54/java4c/InterProcessCommunication</link>
			<description>&lt;p&gt;Admin:&amp;#32;first&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IPC&lt;/div&gt;</description>
			<pubDate>Sat, 05 Mar 2011 21:12:28 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:InterProcessCommunication</comments>		</item>
		<item>
			<title>Os driver</title>
			<link>http://72.14.177.54/java4c/Os_driver</link>
			<description>&lt;p&gt;Admin:&amp;#32;first&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The definition of the OSAL-level-interface for user applications is not valid for driver sources.&lt;br /&gt;
&lt;br /&gt;
The sources for drivers are usual written for a defined platform. The driver are an application-special part of the Hardware-adaption-layer. The same driver software need not run under another platform without changes. The driver can be tested usual only in the original platform. Therefore for the driver level the [[OSAL]] - Operation System Application Layer-interfaces are not the only one access to the hardware and the operation system. It can be used and should be used where it is possible and rational, but the driver uses specials too.&lt;/div&gt;</description>
			<pubDate>Sat, 05 Mar 2011 21:04:33 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Os_driver</comments>		</item>
		<item>
			<title>OSAL</title>
			<link>http://72.14.177.54/java4c/OSAL</link>
			<description>&lt;p&gt;Admin:&amp;#32;Protected &amp;quot;OSAL&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
@ident=OSAL&lt;br /&gt;
&lt;br /&gt;
'''OS-independent programming'''&lt;br /&gt;
&lt;br /&gt;
Some programmers work for their ''project''. It may be running on a special hardware with a special &lt;br /&gt;
operation system, mostly a RTOS (Real Time Operation System). &lt;br /&gt;
The tests are executed at the target hardware - reality tests. &lt;br /&gt;
Thus the thought is ''C is not C, any target system needs its own slang (dialect)''.&lt;br /&gt;
&lt;br /&gt;
What is missing? Compilation of the sources with a proper Integrated Development Environment (IDE). &lt;br /&gt;
On the PCs, there are some good IDEs, such as Eclipse, Microsoft Visual Studio etc. &lt;br /&gt;
Mostly, the IDEs for a special hardware are good, but not so good like PC-platform-tools.&lt;br /&gt;
&lt;br /&gt;
What is also missing? Functional testing the algorithm. It isn't a real-time test. But &lt;br /&gt;
it may be essential.&lt;br /&gt;
&lt;br /&gt;
What is the effort? The algorithm in C need to compile in a PC-environment. It should be able to test,&lt;br /&gt;
not in real-time, maybe only in one thread or more. &lt;br /&gt;
For this reason the OS-functionality should be able to use at the test-environment. &lt;br /&gt;
&lt;br /&gt;
What is the result:&lt;br /&gt;
* Well functional tested algorithms&lt;br /&gt;
* Faster writing, reorganization, optimizing and gardening of sources, because the PC-platform&lt;br /&gt;
is able to use for faster work.&lt;br /&gt;
* Better sources.&lt;br /&gt;
&lt;br /&gt;
The tests on the target-platform are reduced to test the real platform problems, not to test the algorithm basically.&lt;br /&gt;
&lt;br /&gt;
'''Need of special Operation System capabilities'''&lt;br /&gt;
&lt;br /&gt;
Most of the Operation Systems are similar in a large way of thinking. All of these support multi-threading, &lt;br /&gt;
with mutex etc. Most of them have a file system in a adequate kind etc.&lt;br /&gt;
&lt;br /&gt;
The differences are: They should be support the hardware platform with different processors, different&lt;br /&gt;
equipment in RAM, ROM, different I/O. But the user programming shouldn't consider all of them so far.&lt;br /&gt;
The user programming should be realized in a more abstract shell. This means the RTOS should be proper&lt;br /&gt;
for the hardware, but it should not have to much special features for the user programming. It may be&lt;br /&gt;
useful only for driver or interrupt-level-programming.&lt;br /&gt;
&lt;br /&gt;
Conclusion: The user programming should use unified interfaces to the operation system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OSAL-Level in the CRuntimeJavalike==&lt;br /&gt;
&lt;br /&gt;
Programming in Java is OS-independent in the first way. In that mind, the CRuntimeJavalike needs a &lt;br /&gt;
''Operation System Adaption Level'' (OSAL).&lt;br /&gt;
&lt;br /&gt;
The given OSAL is layered closed to a ''not-only Java-like''-programming. It supports standard C &lt;br /&gt;
functionality. The typical Java-like functions like ThreadJc based on this OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
A first idea in the past was to introduce the OSAL-level in the OS-oriented classes like ThreadJc, ObjectJc &lt;br /&gt;
with its ''synchronized_ObjectJc''-methods etc. But a Java-independent definition &lt;br /&gt;
of the OSAL-interface provides some use-cases for the non-java-like-oriented programming, too. &lt;br /&gt;
So it is implemented independently from Java-like-C-classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Common headers==&lt;br /&gt;
&lt;br /&gt;
An interface in C-language is established in header-files. Most of compiler-tool-associated header-files&lt;br /&gt;
declare the same things, but in their own files in a maybe different form. So the risk of&lt;br /&gt;
little differences are given.&lt;br /&gt;
&lt;br /&gt;
Instead all OS-interface-functions should be declared in the same header-files, independent of&lt;br /&gt;
the current used operation system. The implementation of the OSAL should use this files and adapt&lt;br /&gt;
their OS-functions. &lt;br /&gt;
&lt;br /&gt;
All of those OS-independent common header files are declared &lt;br /&gt;
in the folder ,,CRuntimeJavalike/OSAL/inc,,. The current file list is:&lt;br /&gt;
&lt;br /&gt;
 os_adapter.h&lt;br /&gt;
 os_endian.h&lt;br /&gt;
 os_file.h.bak&lt;br /&gt;
 os_mem.h&lt;br /&gt;
 os_serror.h&lt;br /&gt;
 os_socket.h&lt;br /&gt;
 os_sync.h&lt;br /&gt;
 os_time.h.bak&lt;br /&gt;
 os_waitnotify.h&lt;br /&gt;
 os_error.h&lt;br /&gt;
 os_file.h&lt;br /&gt;
 os_thread.h&lt;br /&gt;
 os_AtomicAccess.h&lt;br /&gt;
 os_time.h&lt;br /&gt;
 &lt;br /&gt;
==Different headers==&lt;br /&gt;
&lt;br /&gt;
Some things should be declared or defined in a OS-specific way. The same things should be defined &lt;br /&gt;
in a different kind, appropriate to the operation system and the compiler properties.&lt;br /&gt;
&lt;br /&gt;
The most important file doing this is the ,,os_types_def.h,,. The same file-name is used&lt;br /&gt;
in different directories, all specific for OS and compiler. It defines the same things in a different way.&lt;br /&gt;
&lt;br /&gt;
The most noticeable property is the definition of the OS- and compiler-depending definition of &lt;br /&gt;
fix-size-integer types. The C99-standard suggests the usage of ,,int32_t,, etc. But most of the &lt;br /&gt;
programmers had created their own standard before or simultaneous to the C99-Standard. These types are present&lt;br /&gt;
in many sources. They are defined in some special headers like ,,standard.h,,, &lt;br /&gt;
which is anytime ,,mystandard.h,,. These types are defined in the ,,os_types_def.h,,. &lt;br /&gt;
&lt;br /&gt;
There are some things defined there in addition: &lt;br /&gt;
* little/big endian defines, processors are different.&lt;br /&gt;
* C++-keyword for C-usage, especially ,,bool,,, ,,true,,, ,,false,,.&lt;br /&gt;
* The macro METHOD_C which maybe ,,extern &amp;quot;C&amp;quot;,, or not. &lt;br /&gt;
* A ,,MemUnit,,-type. It is the type which describes one element in the address spaces. &lt;br /&gt;
It is not a ,,char,, anytime, not in Signal-processors.&lt;br /&gt;
 &lt;br /&gt;
==C-basics==&lt;br /&gt;
&lt;br /&gt;
There are some things, which may defined in a good C-design able to use for the OSAL-level too.&lt;br /&gt;
This C-basics are provided OS-independently in the following files (definition and implementation):&lt;br /&gt;
&lt;br /&gt;
 fw_Exception.h&lt;br /&gt;
 fw_Exception.c&lt;br /&gt;
 fw_LogMessage.h&lt;br /&gt;
 fw_LogMessage.c&lt;br /&gt;
 fw_Va_list.h&lt;br /&gt;
 fw_formatter.c&lt;br /&gt;
 fw_Formatter.h&lt;br /&gt;
 fw_SimpleC.c&lt;br /&gt;
 fw_SimpleC.h&lt;br /&gt;
 fw_MemC.h&lt;br /&gt;
 fw_MemC.c&lt;br /&gt;
 objectBaseC.h&lt;br /&gt;
 fw_Object.c&lt;br /&gt;
 fw_timeconversions.h&lt;br /&gt;
 fw_timeconversions.c&lt;br /&gt;
 fw_ThreadContext.h&lt;br /&gt;
 fw_String.h&lt;br /&gt;
 fw_threadContext.c&lt;br /&gt;
 &lt;br /&gt;
This so-named ''framework''-level is independent from the OSAL-adaption and it is ready to use&lt;br /&gt;
for the OS-adaption.&lt;br /&gt;
 &lt;br /&gt;
==OS-adaption for threads==&lt;br /&gt;
 &lt;br /&gt;
see ,,os_thread.h,,&lt;/div&gt;</description>
			<pubDate>Sat, 05 Mar 2011 20:58:10 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:OSAL</comments>		</item>
		<item>
			<title>OSAL</title>
			<link>http://72.14.177.54/java4c/OSAL</link>
			<description>&lt;p&gt;Admin:&amp;#32;/* Navigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down basics: [[os_types_def]] // [[os_AtomicAccess]] // [[os_error]]&lt;br /&gt;
* somethings: [[os_mem]] // [[os_time]] // [[os_file]] // [[os_endian]]&lt;br /&gt;
* MultiThreading: [[os_thread]] -- [[os_waitnotify]] -- [[os_sync]] -- [[os_socket]]&lt;br /&gt;
* [[os_Shared_Memory]] -- [[Dual port RAM]] -- [[InterProcessCommunication]]&lt;br /&gt;
* [[os_driver]] operation access at driver level&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
@ident=OSAL&lt;br /&gt;
&lt;br /&gt;
'''OS-independent programming'''&lt;br /&gt;
&lt;br /&gt;
Some programmers work for their ''project''. It may be running on a special hardware with a special &lt;br /&gt;
operation system, mostly a RTOS (Real Time Operation System). &lt;br /&gt;
The tests are executed at the target hardware - reality tests. &lt;br /&gt;
Thus the thought is ''C is not C, any target system needs its own slang (dialect)''.&lt;br /&gt;
&lt;br /&gt;
What is missing? Compilation of the sources with a proper Integrated Development Environment (IDE). &lt;br /&gt;
On the PCs, there are some good IDEs, such as Eclipse, Microsoft Visual Studio etc. &lt;br /&gt;
Mostly, the IDEs for a special hardware are good, but not so good like PC-platform-tools.&lt;br /&gt;
&lt;br /&gt;
What is also missing? Functional testing the algorithm. It isn't a real-time test. But &lt;br /&gt;
it may be essential.&lt;br /&gt;
&lt;br /&gt;
What is the effort? The algorithm in C need to compile in a PC-environment. It should be able to test,&lt;br /&gt;
not in real-time, maybe only in one thread or more. &lt;br /&gt;
For this reason the OS-functionality should be able to use at the test-environment. &lt;br /&gt;
&lt;br /&gt;
What is the result:&lt;br /&gt;
* Well functional tested algorithms&lt;br /&gt;
* Faster writing, reorganization, optimizing and gardening of sources, because the PC-platform&lt;br /&gt;
is able to use for faster work.&lt;br /&gt;
* Better sources.&lt;br /&gt;
&lt;br /&gt;
The tests on the target-platform are reduced to test the real platform problems, not to test the algorithm basically.&lt;br /&gt;
&lt;br /&gt;
'''Need of special Operation System capabilities'''&lt;br /&gt;
&lt;br /&gt;
Most of the Operation Systems are similar in a large way of thinking. All of these support multi-threading, &lt;br /&gt;
with mutex etc. Most of them have a file system in a adequate kind etc.&lt;br /&gt;
&lt;br /&gt;
The differences are: They should be support the hardware platform with different processors, different&lt;br /&gt;
equipment in RAM, ROM, different I/O. But the user programming shouldn't consider all of them so far.&lt;br /&gt;
The user programming should be realized in a more abstract shell. This means the RTOS should be proper&lt;br /&gt;
for the hardware, but it should not have to much special features for the user programming. It may be&lt;br /&gt;
useful only for driver or interrupt-level-programming.&lt;br /&gt;
&lt;br /&gt;
Conclusion: The user programming should use unified interfaces to the operation system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OSAL-Level in the CRuntimeJavalike==&lt;br /&gt;
&lt;br /&gt;
Programming in Java is OS-independent in the first way. In that mind, the CRuntimeJavalike needs a &lt;br /&gt;
''Operation System Adaption Level'' (OSAL).&lt;br /&gt;
&lt;br /&gt;
The given OSAL is layered closed to a ''not-only Java-like''-programming. It supports standard C &lt;br /&gt;
functionality. The typical Java-like functions like ThreadJc based on this OSAL-interface.&lt;br /&gt;
&lt;br /&gt;
A first idea in the past was to introduce the OSAL-level in the OS-oriented classes like ThreadJc, ObjectJc &lt;br /&gt;
with its ''synchronized_ObjectJc''-methods etc. But a Java-independent definition &lt;br /&gt;
of the OSAL-interface provides some use-cases for the non-java-like-oriented programming, too. &lt;br /&gt;
So it is implemented independently from Java-like-C-classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Common headers==&lt;br /&gt;
&lt;br /&gt;
An interface in C-language is established in header-files. Most of compiler-tool-associated header-files&lt;br /&gt;
declare the same things, but in their own files in a maybe different form. So the risk of&lt;br /&gt;
little differences are given.&lt;br /&gt;
&lt;br /&gt;
Instead all OS-interface-functions should be declared in the same header-files, independent of&lt;br /&gt;
the current used operation system. The implementation of the OSAL should use this files and adapt&lt;br /&gt;
their OS-functions. &lt;br /&gt;
&lt;br /&gt;
All of those OS-independent common header files are declared &lt;br /&gt;
in the folder ,,CRuntimeJavalike/OSAL/inc,,. The current file list is:&lt;br /&gt;
&lt;br /&gt;
 os_adapter.h&lt;br /&gt;
 os_endian.h&lt;br /&gt;
 os_file.h.bak&lt;br /&gt;
 os_mem.h&lt;br /&gt;
 os_serror.h&lt;br /&gt;
 os_socket.h&lt;br /&gt;
 os_sync.h&lt;br /&gt;
 os_time.h.bak&lt;br /&gt;
 os_waitnotify.h&lt;br /&gt;
 os_error.h&lt;br /&gt;
 os_file.h&lt;br /&gt;
 os_thread.h&lt;br /&gt;
 os_AtomicAccess.h&lt;br /&gt;
 os_time.h&lt;br /&gt;
 &lt;br /&gt;
==Different headers==&lt;br /&gt;
&lt;br /&gt;
Some things should be declared or defined in a OS-specific way. The same things should be defined &lt;br /&gt;
in a different kind, appropriate to the operation system and the compiler properties.&lt;br /&gt;
&lt;br /&gt;
The most important file doing this is the ,,os_types_def.h,,. The same file-name is used&lt;br /&gt;
in different directories, all specific for OS and compiler. It defines the same things in a different way.&lt;br /&gt;
&lt;br /&gt;
The most noticeable property is the definition of the OS- and compiler-depending definition of &lt;br /&gt;
fix-size-integer types. The C99-standard suggests the usage of ,,int32_t,, etc. But most of the &lt;br /&gt;
programmers had created their own standard before or simultaneous to the C99-Standard. These types are present&lt;br /&gt;
in many sources. They are defined in some special headers like ,,standard.h,,, &lt;br /&gt;
which is anytime ,,mystandard.h,,. These types are defined in the ,,os_types_def.h,,. &lt;br /&gt;
&lt;br /&gt;
There are some things defined there in addition: &lt;br /&gt;
* little/big endian defines, processors are different.&lt;br /&gt;
* C++-keyword for C-usage, especially ,,bool,,, ,,true,,, ,,false,,.&lt;br /&gt;
* The macro METHOD_C which maybe ,,extern &amp;quot;C&amp;quot;,, or not. &lt;br /&gt;
* A ,,MemUnit,,-type. It is the type which describes one element in the address spaces. &lt;br /&gt;
It is not a ,,char,, anytime, not in Signal-processors.&lt;br /&gt;
 &lt;br /&gt;
==C-basics==&lt;br /&gt;
&lt;br /&gt;
There are some things, which may defined in a good C-design able to use for the OSAL-level too.&lt;br /&gt;
This C-basics are provided OS-independently in the following files (definition and implementation):&lt;br /&gt;
&lt;br /&gt;
 fw_Exception.h&lt;br /&gt;
 fw_Exception.c&lt;br /&gt;
 fw_LogMessage.h&lt;br /&gt;
 fw_LogMessage.c&lt;br /&gt;
 fw_Va_list.h&lt;br /&gt;
 fw_formatter.c&lt;br /&gt;
 fw_Formatter.h&lt;br /&gt;
 fw_SimpleC.c&lt;br /&gt;
 fw_SimpleC.h&lt;br /&gt;
 fw_MemC.h&lt;br /&gt;
 fw_MemC.c&lt;br /&gt;
 objectBaseC.h&lt;br /&gt;
 fw_Object.c&lt;br /&gt;
 fw_timeconversions.h&lt;br /&gt;
 fw_timeconversions.c&lt;br /&gt;
 fw_ThreadContext.h&lt;br /&gt;
 fw_String.h&lt;br /&gt;
 fw_threadContext.c&lt;br /&gt;
 &lt;br /&gt;
This so-named ''framework''-level is independent from the OSAL-adaption and it is ready to use&lt;br /&gt;
for the OS-adaption.&lt;br /&gt;
 &lt;br /&gt;
==OS-adaption for threads==&lt;br /&gt;
 &lt;br /&gt;
see ,,os_thread.h,,&lt;/div&gt;</description>
			<pubDate>Sat, 05 Mar 2011 20:57:40 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:OSAL</comments>		</item>
		<item>
			<title>Components of vishia-Java</title>
			<link>http://72.14.177.54/java4c/Components_of_vishia-Java</link>
			<description>&lt;p&gt;Admin:&amp;#32;Navigation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]] / [[Component]]&lt;br /&gt;
* down: see chapters&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
vishia-Java is a tree of Java-files in the package-structure ''org/vishia/stuff''. All files are written by Hartmut Schorrig, www.vishia.org. They are used in some applications in profession too (with second license model). It is a conglomeration of different things, of course.&lt;br /&gt;
&lt;br /&gt;
The usage of all files as jar-library if only a few files are needed - it isn't optimal:&lt;br /&gt;
* The usage as library will be proper, if an extrinsic application will use them as it is.&lt;br /&gt;
* If one of developers uses a component in another self-programmed application, it is self-evident to improve the used component with the challenges of the application. In that case the source should be present to check, change and improve.&lt;br /&gt;
* But on the other hand, if an extrinsic application should use that components proper, it should be well tested in a defined environment. A conglomeration can't be tested well enough.&lt;br /&gt;
&lt;br /&gt;
Therefore that Java-sources are separated in some components. Any of the named component is available as a bazaar archive to work with sources. Any of this components are available as a download-file with some test environments as a application - or some test-Java-files exist.&lt;br /&gt;
&lt;br /&gt;
This components are presented in the next chapters:&lt;br /&gt;
&lt;br /&gt;
==srcJava_ZBNF==&lt;br /&gt;
* distribution on [[http://sf.net/projects/zbnf sf.net/projects/zbnf]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/zbnf/srcjava.zbnf launchpad.net/zbnf/srcjava.zbnf]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/ZBNF www.vishia.org/ZBNF]]&lt;br /&gt;
&lt;br /&gt;
Content of the distribution: &lt;br /&gt;
* The ZBNF-Parser with this Java-soruce is able to use discrete to convert plain-text but well-syntactical files into XML.&lt;br /&gt;
* The Java-sources includes a tool ''Header2Reflection'' which translates C/C++-headerfiles to C-files, which represents reflection-information about the data structures. It is used in a ''ReflectPro''-suite.&lt;br /&gt;
* A ''Zmake''-Tool is assiciated there. It converts simple make-prescripts to [[http://en.wikipedia.org/wiki/Apache_Ant ANT]]-make-files.  &lt;br /&gt;
&lt;br /&gt;
Further usage:&lt;br /&gt;
* The ZBNF is used in almost all applications of the author. It is because the applications translates some texts (for example Java2C), it needs config-files (GUI) etc.&lt;br /&gt;
&lt;br /&gt;
Contains:&lt;br /&gt;
* A commandline calling argument preparer is included in the srcJava_ZBNF-package because it is the core-package of all applications.&lt;br /&gt;
* Some util-components are included.&lt;br /&gt;
there.&lt;br /&gt;
* Some XML-functionalities are included. Because the ZBNF-Parser outputs XML, a simple XML-Outputter is a core-part. A calling environment for XSLT, which can work with more as one input-XML-file, is contained there. But the XSLT-translator itself should be supplied by. SAXON is recommended. For the input preparing JDOM is used. Supplied-by-packages are not need while compiling, because there are symbolic-dynamic-linked using &amp;lt;tt&amp;gt;Class.forName(&amp;quot;nameOfClass&amp;quot;)&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Dependencies:&lt;br /&gt;
* This component has not any dependencies to any foreign component. Only standard-Java-classes are used.&lt;br /&gt;
&lt;br /&gt;
==srcJava_vishiaXML==&lt;br /&gt;
&lt;br /&gt;
links: TODO&lt;br /&gt;
&lt;br /&gt;
Contains:&lt;br /&gt;
* Some functionality for documentation generation via XML.&lt;br /&gt;
&lt;br /&gt;
Dependencies:&lt;br /&gt;
&lt;br /&gt;
* This component needs SAXON and JDOM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==srcJava_vishiaRun==&lt;br /&gt;
&lt;br /&gt;
links: TODO&lt;br /&gt;
&lt;br /&gt;
This component offers routines, which are nice to have in a longtime-running system. In opposite, some applications runs as task to translate something etc. If there are finished, the application is closed.  &lt;br /&gt;
&lt;br /&gt;
Contains:&lt;br /&gt;
* An interface to socket usage: This interface has the same concept as in C-language in the CRuntimeJavalike: [[InterProcessComm]].&lt;br /&gt;
* A reflect-target-engine. It allows to access to all data while running via the Java-Reflections. All data can visited, presented as time-track and changed (with policy).&lt;br /&gt;
* A MessageDispatcher which separates output messages (logs, able to use for embedded applications too).&lt;br /&gt;
* Access to binary data, which are described symbolic. It includes translation from C-language headerfiles for its structure.&lt;br /&gt;
* Some additional parts which are used especially if the Java-sources should be translated to C with [[Java2C]].&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==srcJava_Java2C==&lt;br /&gt;
* distribution on [[http://sf.net/projects/zbnf sf.net/projects/java2c]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/java2c launchpad.net/java2c]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/Java2C www.vishia.org/Java2C]]&lt;br /&gt;
&lt;br /&gt;
Contains:&lt;br /&gt;
Sources of the translator&lt;br /&gt;
&lt;br /&gt;
==srcJava_vishiaGUI==&lt;br /&gt;
links TODO&lt;br /&gt;
&lt;br /&gt;
The appearance of a GUI is able to control with scripts. &lt;br /&gt;
&lt;br /&gt;
Another aspect is: All widgets are placed on a fix position, but not organized in pixel, rather than in grid-units. The size of the grid can be changed in runtime for lesser or greater display (zoom).&lt;br /&gt;
&lt;br /&gt;
The basic functionalities and a configurable executable are provided. A complex application with additional source of data to show and edit can be programmed in Java using this component as base. That user-program should not know details about graphic-programming systems. A widget is a widget, not a complex of GUI-calls of the basic graphic system.&lt;br /&gt;
&lt;br /&gt;
The basic graphic system used is: SWT. Swing was used in the past, but should be established again. The goal is: Both systems can be used in several applications, without change of the users application. it is a adaption layer to the basic graphic system.&lt;/div&gt;</description>
			<pubDate>Sun, 27 Feb 2011 07:06:32 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Components_of_vishia-Java</comments>		</item>
		<item>
			<title>Components of vishia-Java</title>
			<link>http://72.14.177.54/java4c/Components_of_vishia-Java</link>
			<description>&lt;p&gt;Admin:&amp;#32;components: XML, GUI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
vishia-Java is a tree of Java-files in the package-structure ''org/vishia/stuff''. All files are written by Hartmut Schorrig, www.vishia.org. They are used in some applications in profession too (with second license model). It is a conglomeration of different things, of course.&lt;br /&gt;
&lt;br /&gt;
The usage of all files as jar-library if only a few files are needed - it isn't optimal:&lt;br /&gt;
* The usage as library will be proper, if an extrinsic application will use them as it is.&lt;br /&gt;
* If one of developers uses a component in another self-programmed application, it is self-evident to improve the used component with the challenges of the application. In that case the source should be present to check, change and improve.&lt;br /&gt;
* But on the other hand, if an extrinsic application should use that components proper, it should be well tested in a defined environment. A conglomeration can't be tested well enough.&lt;br /&gt;
&lt;br /&gt;
Therefore that Java-sources are separated in some components. Any of the named component is available as a bazaar archive to work with sources. Any of this components are available as a download-file with some test environments as a application - or some test-Java-files exist.&lt;br /&gt;
&lt;br /&gt;
This components are presented in the next chapters:&lt;br /&gt;
&lt;br /&gt;
==srcJava_ZBNF==&lt;br /&gt;
* distribution on [[http://sf.net/projects/zbnf sf.net/projects/zbnf]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/zbnf/srcjava.zbnf launchpad.net/zbnf/srcjava.zbnf]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/ZBNF www.vishia.org/ZBNF]]&lt;br /&gt;
&lt;br /&gt;
Content of the distribution: &lt;br /&gt;
* The ZBNF-Parser with this Java-soruce is able to use discrete to convert plain-text but well-syntactical files into XML.&lt;br /&gt;
* The Java-sources includes a tool ''Header2Reflection'' which translates C/C++-headerfiles to C-files, which represents reflection-information about the data structures. It is used in a ''ReflectPro''-suite.&lt;br /&gt;
* A ''Zmake''-Tool is assiciated there. It converts simple make-prescripts to [[http://en.wikipedia.org/wiki/Apache_Ant ANT]]-make-files.  &lt;br /&gt;
&lt;br /&gt;
Further usage:&lt;br /&gt;
* The ZBNF is used in almost all applications of the author. It is because the applications translates some texts (for example Java2C), it needs config-files (GUI) etc.&lt;br /&gt;
&lt;br /&gt;
Contains:&lt;br /&gt;
* A commandline calling argument preparer is included in the srcJava_ZBNF-package because it is the core-package of all applications.&lt;br /&gt;
* Some util-components are included.&lt;br /&gt;
there.&lt;br /&gt;
* Some XML-functionalities are included. Because the ZBNF-Parser outputs XML, a simple XML-Outputter is a core-part. A calling environment for XSLT, which can work with more as one input-XML-file, is contained there. But the XSLT-translator itself should be supplied by. SAXON is recommended. For the input preparing JDOM is used. Supplied-by-packages are not need while compiling, because there are symbolic-dynamic-linked using &amp;lt;tt&amp;gt;Class.forName(&amp;quot;nameOfClass&amp;quot;)&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Dependencies:&lt;br /&gt;
* This component has not any dependencies to any foreign component. Only standard-Java-classes are used.&lt;br /&gt;
&lt;br /&gt;
==srcJava_vishiaXML==&lt;br /&gt;
&lt;br /&gt;
links: TODO&lt;br /&gt;
&lt;br /&gt;
Contains:&lt;br /&gt;
* Some functionality for documentation generation via XML.&lt;br /&gt;
&lt;br /&gt;
Dependencies:&lt;br /&gt;
&lt;br /&gt;
* This component needs SAXON and JDOM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==srcJava_vishiaRun==&lt;br /&gt;
&lt;br /&gt;
links: TODO&lt;br /&gt;
&lt;br /&gt;
This component offers routines, which are nice to have in a longtime-running system. In opposite, some applications runs as task to translate something etc. If there are finished, the application is closed.  &lt;br /&gt;
&lt;br /&gt;
Contains:&lt;br /&gt;
* An interface to socket usage: This interface has the same concept as in C-language in the CRuntimeJavalike: [[InterProcessComm]].&lt;br /&gt;
* A reflect-target-engine. It allows to access to all data while running via the Java-Reflections. All data can visited, presented as time-track and changed (with policy).&lt;br /&gt;
* A MessageDispatcher which separates output messages (logs, able to use for embedded applications too).&lt;br /&gt;
* Access to binary data, which are described symbolic. It includes translation from C-language headerfiles for its structure.&lt;br /&gt;
* Some additional parts which are used especially if the Java-sources should be translated to C with [[Java2C]].&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==srcJava_Java2C==&lt;br /&gt;
* distribution on [[http://sf.net/projects/zbnf sf.net/projects/java2c]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/java2c launchpad.net/java2c]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/Java2C www.vishia.org/Java2C]]&lt;br /&gt;
&lt;br /&gt;
Contains:&lt;br /&gt;
Sources of the translator&lt;br /&gt;
&lt;br /&gt;
==srcJava_vishiaGUI==&lt;br /&gt;
links TODO&lt;br /&gt;
&lt;br /&gt;
The appearance of a GUI is able to control with scripts. &lt;br /&gt;
&lt;br /&gt;
Another aspect is: All widgets are placed on a fix position, but not organized in pixel, rather than in grid-units. The size of the grid can be changed in runtime for lesser or greater display (zoom).&lt;br /&gt;
&lt;br /&gt;
The basic functionalities and a configurable executable are provided. A complex application with additional source of data to show and edit can be programmed in Java using this component as base. That user-program should not know details about graphic-programming systems. A widget is a widget, not a complex of GUI-calls of the basic graphic system.&lt;br /&gt;
&lt;br /&gt;
The basic graphic system used is: SWT. Swing was used in the past, but should be established again. The goal is: Both systems can be used in several applications, without change of the users application. it is a adaption layer to the basic graphic system.&lt;/div&gt;</description>
			<pubDate>Sun, 27 Feb 2011 07:03:01 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Components_of_vishia-Java</comments>		</item>
		<item>
			<title>Components of vishia-Java</title>
			<link>http://72.14.177.54/java4c/Components_of_vishia-Java</link>
			<description>&lt;p&gt;Admin:&amp;#32;Protected &amp;quot;Components of vishia-Java&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
vishia-Java is a tree of Java-files in the package-structure ''org/vishia/stuff''. All files are written by Hartmut Schorrig, www.vishia.org. They are used in some applications in profession too (with second license model). It is a conglomeration of different things, of course.&lt;br /&gt;
&lt;br /&gt;
The usage of all files as jar-library if only a few files are needed - it isn't optimal:&lt;br /&gt;
* The usage as library will be proper, if an extrinsic application will use them as it is.&lt;br /&gt;
* If one of developers uses a component in another self-programmed application, it is self-evident to improve the used component with the challenges of the application. In that case the source should be present to check, change and improve.&lt;br /&gt;
* But on the other hand, if an extrinsic application should use that components proper, it should be well tested in a defined environment. A conglomeration can't be tested well enough.&lt;br /&gt;
&lt;br /&gt;
Therefore that Java-sources are separated in some components. Any of the named component is available as a bazaar archive to work with sources. Any of this components are available as a download-file with some test environments as a application - or some test-Java-files exist.&lt;br /&gt;
&lt;br /&gt;
This components are presented in the next chapters:&lt;br /&gt;
&lt;br /&gt;
==srcJava_ZBNF==&lt;br /&gt;
* distribution on [[http://sf.net/projects/zbnf sf.net/projects/zbnf]]&lt;br /&gt;
* bazaar-archive on [[https://launchpad.net/zbnf/srcjava.zbnf launchpad.net/zbnf/srcjava.zbnf]]&lt;br /&gt;
* description, home-site on [[http://www.vishia.org/ZBNF www.vishia.org/ZBNF]]&lt;br /&gt;
&lt;br /&gt;
Content of the distribution: &lt;br /&gt;
* The ZBNF-Parser with this Java-soruce is able to use discrete to convert plain-text but well-syntactical files into XML.&lt;br /&gt;
* The Java-sources includes a tool ''Header2Reflection'' which translates C/C++-headerfiles to C-files, which represents reflection-information about the data structures. It is used in a ''ReflectPro''-suite.&lt;br /&gt;
* A ''Zmake''-Tool is assiciated there. It converts simple make-prescripts to [[http://en.wikipedia.org/wiki/Apache_Ant ANT]]-make-files.  &lt;br /&gt;
&lt;br /&gt;
Further usage:&lt;br /&gt;
* The ZBNF is used in almost all applications of the author. It is because the applications translates some texts (for example Java2C), it needs config-files (GUI) etc.&lt;br /&gt;
&lt;br /&gt;
Contains:&lt;br /&gt;
* A commandline calling argument preparer is included in the srcJava_ZBNF-package because it is the core-package of all applications.&lt;br /&gt;
* Some util-components are included.&lt;br /&gt;
* A MessageDispatcher which separates output messages (logs, able to use for embedded applications too) is contained there.&lt;br /&gt;
* Some XML-functionalities are included. Because the ZBNF-Parser outputs XML, a simple XML-Outputter is a core-part. A calling environment for XSLT, which can work with more as one input-XML-file, is contained there. But the XSLT-translator itself should be supplied by. SAXON is recommended. For the input preparing JDOM is used. Supplied-by-packages are not need while compiling, because there are symbolic-dynamic-linked using &amp;lt;tt&amp;gt;Class.forName(&amp;quot;nameOfClass&amp;quot;)&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Dependencies:&lt;br /&gt;
* This component has not any dependencies to any foreign component. Only standard-Java-classes are used.&lt;br /&gt;
&lt;br /&gt;
==vishiaJava_Util==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==vishiaJava_Java2C==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==vishiaJava_GUI==&lt;br /&gt;
TODO&lt;/div&gt;</description>
			<pubDate>Sun, 27 Feb 2011 06:42:04 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Components_of_vishia-Java</comments>		</item>
		<item>
			<title>Component</title>
			<link>http://72.14.177.54/java4c/Component</link>
			<description>&lt;p&gt;Admin:&amp;#32;Criterion for Components: frequently changed parts without core functionality&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation==&lt;br /&gt;
* up: [[Main_Page]]&lt;br /&gt;
* down: [[Components_of_vishia-Java]] [[Components_of_CRuntimeJavalike]]&lt;br /&gt;
&lt;br /&gt;
==Components and modules, re-using==&lt;br /&gt;
&lt;br /&gt;
A software should consist of more as one component. Each component should be able to describe, program and test independent of the application which uses it. A component may be able to use in several applications. Then it is reuseable.&lt;br /&gt;
&lt;br /&gt;
Modules are the finer granularity inside components or inside the core of the application. Each module should be able to describe, program and test independently too. Modules may be one C/h-file or a package in Java or some related files. &lt;br /&gt;
&lt;br /&gt;
A class in ObjectOrientation is the more finer granularity inside modules. A class in the C-programming is a logical coherence between one data structure and related subroutines. One class may be presented exactly with one source-file.&lt;br /&gt;
&lt;br /&gt;
==Dependencies between components, modules, classes==&lt;br /&gt;
&lt;br /&gt;
If another class is used inside a class, it depends on it. Formally it depends on the signature of the methods of the class. Really the functionality depends on the functionality of the called methods.&lt;br /&gt;
&lt;br /&gt;
For a independent test of a class, module or component it may be necessary to abstract the functionality of the depending stuff. The behavior of the depending stuff should be replaced by a simulation or emulation.&lt;br /&gt;
&lt;br /&gt;
There are '''horizontal and vertical dependencies''': If a class/module/component can be created, described and tested independent on another class/module/component, it is deeper in vertical or parallel in horizontal layer. If a class/module/component needs another one, it is above that in vertical layer. ''It needs'' means, in the real application it is associated to it and calls some methods from there. For the independently test all needed classes/modules/components may be able to replace.&lt;br /&gt;
&lt;br /&gt;
===Interfaces as dependency-breaker===&lt;br /&gt;
&lt;br /&gt;
There is a problem: Module_A needs some methods from Module_B and on the other hand Module_B needs some things from Module_A. Both modules are parallel in layer, but there are not able to develop and test independently. &lt;br /&gt;
&lt;br /&gt;
Either the both modules are not two separated modules, the functionality should be combined in one module. - Or it should be separated using interfaces.&lt;br /&gt;
&lt;br /&gt;
The ''interface'' is a language-element of Java. It defines methods with its signature, but without implementation. The description, &amp;quot;''what should the method do, which argument values are expectable, meaning of the return value''&amp;quot; belongs to the method anyway. In C++ interfaces are able to create in a similar kind as Java. It is a class with only virtual abstract methods and without any implementation:&lt;br /&gt;
&lt;br /&gt;
 class InterfaceExample {  //C++-interface&lt;br /&gt;
   virtual int aMethod(int arg) = 0;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
====Classic C - Headerfiles as interface====&lt;br /&gt;
&lt;br /&gt;
The classic C programming knows headerfiles, which ones play the role of interfaces: Function prototypes has the same appearance as a method definition in a Java-interface or a virtual abstract methods:&lt;br /&gt;
&lt;br /&gt;
 extern int aFunction(int arg);&lt;br /&gt;
&lt;br /&gt;
The difference to Java and C++-virtual-methods is: It is static linked. There can be only one implementation in a executable, whereby in Java and C++ the interface can be implement by several classes which are instantiated independently. It is a ''dynamic link''.&lt;br /&gt;
&lt;br /&gt;
But the principle of dependency-break is the same.&lt;br /&gt;
&lt;br /&gt;
====Classic C- struct forward declaration as dependency break====&lt;br /&gt;
&lt;br /&gt;
In C and C++ there is a nice possibility to prevent to many include-necessities:&lt;br /&gt;
&lt;br /&gt;
 struct TheType_t;&lt;br /&gt;
&lt;br /&gt;
 typedef struct Example_t{&lt;br /&gt;
   struct TheType_t* pointer;&lt;br /&gt;
 } Example;&lt;br /&gt;
&lt;br /&gt;
Inside the Example-struct a pointer of TheType is need. But &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt; itself may left unknown. It isn't necessary to know the type while compiling this struct. It is not necessary to include the typedef of &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the pointer is used in the implementation (the C-file), then the type should be known. The implementation-File includes the definition of:&lt;br /&gt;
&lt;br /&gt;
  typedef struct TheType_t{&lt;br /&gt;
    int someStuff;&lt;br /&gt;
  }Thetype;&lt;br /&gt;
&lt;br /&gt;
Now the compiler checks the matching of &amp;lt;tt&amp;gt;struct TheType_t&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt; with its given definition. The &amp;lt;tt&amp;gt;TheType_t&amp;lt;/tt&amp;gt; is the tag-name of the struct where &amp;lt;tt&amp;gt;TheType&amp;lt;/tt&amp;gt; is the really type name. The writing-style with &amp;lt;tt&amp;gt;_t&amp;lt;/tt&amp;gt;-suffix is recommended and usual but not a fix rule.&lt;br /&gt;
&lt;br /&gt;
The forward declaration of a pointer-type straightens a complex dependencies of header files. In Java there is not a adequate possibility. A Java-interface is the way of straighten still.&lt;br /&gt;
&lt;br /&gt;
==Criterion for Components==&lt;br /&gt;
* Able to define and describe as entity.&lt;br /&gt;
* Able to test as entity.&lt;br /&gt;
* Dependencies of parts to other components: If any new part creates a new dependency to a foreign component, it should be realized as critical. Either the new dependency is desired, or the part should not be a part of this component.&lt;br /&gt;
* Conglomerate of several functionality: It is okay, if the modules doesn't need other components (see ''dependencies''). A component can contain a functionality, which is not need in the typical use-cases, but it is offered for special usages. &lt;br /&gt;
* Frequently changes in conglomerate parts: Any change in the sources of the component builds a new release of the whole component, which should be checked for relevance for all usages. Parts, which are frequently changed, but they are not a core functionality of the component, should be dissolved from the component therefore.&lt;br /&gt;
* Self-reliance: The same functionality should not scattered to several components. Only one component should be responsible to that functionality.&lt;/div&gt;</description>
			<pubDate>Sun, 27 Feb 2011 06:38:53 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Component</comments>		</item>
		<item>
			<title>CRuntimeJavalike</title>
			<link>http://72.14.177.54/java4c/CRuntimeJavalike</link>
			<description>&lt;p&gt;Admin:&amp;#32;Protected &amp;quot;CRuntimeJavalike&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Navigation links==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Content==&lt;br /&gt;
The CRuntimeJavalike-C-routines were created from 2004. The Reason: For embedded applications no proper basic functions are present. But in Java there is a well proper base system&lt;br /&gt;
* for all multithreading requirements (class java.lang.Thread, methods synchronized for Objects etc)&lt;br /&gt;
* for all Input/Output requirements (java.io)&lt;br /&gt;
* for Container, especially lock-free with atomicAccess (ConcurrentLinkedQueue etc)&lt;br /&gt;
* etc. etc.&lt;br /&gt;
The feeling for that concepts and using as interface for C-language seems a stable concept for basic-functions in C rather than the old-style basic functions like fprintf etc and rather than direct usage of the special offers of the underlying operation system. The last one prevents testing on PC or needs a special adaption and blocks re-using.&lt;br /&gt;
&lt;br /&gt;
A next goal was the establishment of a Java2C-translator, which allows to write and test algorithm in Java and then translate to C-language. The CRuntimeJavalike-base-system replaces the functionality of the Java-basics for the embedded C-software.&lt;br /&gt;
&lt;br /&gt;
Some more complex functionality of the CRuntimeJavalike is programmed in Java and translated to C. The pure C-Source-code should be able to use and understand well. But it should not be improved in C.&lt;br /&gt;
&lt;br /&gt;
C++-usage: All functionality is provided in C. But there are wrappers for C++ to get a better calling style. The usage of C++ for embedded applications is recommended by me, if a subset is used. The whole slang of C++ may not so proper in my mind: C is more closed to machine code, it is known whats happen.&lt;br /&gt;
&lt;br /&gt;
The CRuntimeJavalike-functions are not complex. They are no more complex as any hand-written functions for the same requests, which are present in many software. A user can include the whole sources and use step by step the ones or other function. There is a hierarchical systems from solitaire basic functions, functions which uses some OSAL-calls, and more complex functions. The usage prepares the flow-path to program more ObjectOriented till usage of Java in embedded.&lt;br /&gt;
&lt;br /&gt;
==Related links==&lt;br /&gt;
* [[https://launchpad.net/jc Bazaar-Archive on launchpad.net]]&lt;/div&gt;</description>
			<pubDate>Sun, 27 Feb 2011 06:28:38 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:CRuntimeJavalike</comments>		</item>
		<item>
			<title>Main Page</title>
			<link>http://72.14.177.54/java4c/Main_Page</link>
			<description>&lt;p&gt;Admin:&amp;#32;Protected &amp;quot;Main Page&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Java4C==&lt;br /&gt;
Goals:&lt;br /&gt;
* Using Java-programming language for embedded software in cooperation with C (and C++-) software.&lt;br /&gt;
* Using a ObjectOriented style of programming also in C!&lt;br /&gt;
* Using Java-like basic routines inclusive operation-system-calls.&lt;br /&gt;
* Using Java for program and test, and translate the sources to C. &lt;br /&gt;
&lt;br /&gt;
===Why Java?===&lt;br /&gt;
Java is not only a language for internet applications. Java is a programming system for common usage. The first approach to develop Java in 1994 was: Creation of a portable language for embedded applications. Java is used in some embedded applications like mobil phones, routers. It is present with a ''JTRES'': ''Java Technology for Realtime Embedded Systems'' provided by companies like Sun/Oracle, Aicas, Aonix/Atego and others.&lt;br /&gt;
&lt;br /&gt;
The Java-syntax for expressions is similar like C. Java is strong declarative, like C. The differences to C are:&lt;br /&gt;
* ObjectOrientation&lt;br /&gt;
* It is a Language of a new generation. The C-style of programming was born in 1970 with orientation to structured programming. Java was born in 1994.&lt;br /&gt;
* Java supports a better test of algorithms. If there are any errors for example in the addressing (indexing) of arrays, it is detected safely in runtime. The algorithms need not be tested step by step to prevent such errors. A paradigma ''compile 'n run'' can be used. The time for testing can be reduced drasticly without reducing the quality of software respectively more complex algorithms can be tested in the same time like simple algorithm in C or C++.&lt;br /&gt;
&lt;br /&gt;
Java uses dynamic data. The approach of dynamic data helps to handle with variegated data in many threads in large applications. For example the String-processing needs dynamic memory. But it is also possible to handle with static data (allocated on startup). For example, String processing using a StringBuilder-instance and the CharSequence-interface can execute without allocation of memory. Static data are proper to use for embedded systems often.&lt;br /&gt;
&lt;br /&gt;
===Why not C++?===&lt;br /&gt;
C++ is ObjectOriented and a modern programming language too. It is downward-compatible with C. &lt;br /&gt;
&lt;br /&gt;
But the usual programming style in C++ divergates from the style in C. There are handled with dynamic memory in some basic classes, complex constructs using the template concept are usual. An ordinary C++-program can't be used for embedded programming often.&lt;br /&gt;
&lt;br /&gt;
The disadvantages of the C-language: Unsafe pointer arithmetic, arbitrary casts, unchecked array addressing are all present in C++ too. C++ doesn't help for testing such errors like C. &lt;br /&gt;
&lt;br /&gt;
==The key author of this site==&lt;br /&gt;
&lt;br /&gt;
has experience in embedded programming since 1977, beginning with Assembler programming with the Z80-processor. I'm working for a company in germany in themes of embedded control. This site presents experiences independently of concretely job definitions.&lt;br /&gt;
&lt;br /&gt;
==The mission of this site==&lt;br /&gt;
&lt;br /&gt;
Exchange of experiences. You can take place on discussion. You can complement the text of the pages with your experience and knowledge.  &lt;br /&gt;
&lt;br /&gt;
==Guide through the site==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
*Style of programming in C: ObjectOrientation, OSAL layer, re-using&lt;br /&gt;
*CRuntimeJavalike&lt;br /&gt;
*Java2C-translator&lt;br /&gt;
&lt;br /&gt;
First page: [[os_types_def]].&lt;/div&gt;</description>
			<pubDate>Mon, 21 Feb 2011 07:19:34 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Main_Page</comments>		</item>
		<item>
			<title>Main Page</title>
			<link>http://72.14.177.54/java4c/Main_Page</link>
			<description>&lt;p&gt;Admin:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Java4C==&lt;br /&gt;
* Using Java-programming language for embedded software in cooperation with C (and C++-) software.&lt;br /&gt;
* Using a ObjectOriented style of programming also in C!&lt;br /&gt;
* Using Java-like basic routines inclusive operation-system-calls.&lt;br /&gt;
* Using Java for program and test, and translate the sources to C. &lt;br /&gt;
&lt;br /&gt;
==Welcome to Your New Wiki==&lt;br /&gt;
A wiki is a powerful tool that allows multiple users to collaborate and share content rapidly. The best example of this is Wikipedia, which is powered by the exact same software that this wiki is!&lt;br /&gt;
&lt;br /&gt;
==First Steps==&lt;br /&gt;
# An administrative user has already been created for you with all rights over this wiki. You should first [[Special:UserLogin|log in]] using &amp;lt;br&amp;gt;'''Username:''' admin&amp;lt;br&amp;gt;'''Password:''' changeme&lt;br /&gt;
# Click on [[Special:Preferences|my preferences]] and change the admin password. &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Critical:&amp;lt;/font&amp;gt; If you don't do this, other users can take over your wiki.&lt;br /&gt;
# Click on the Control Panel link under &amp;quot;editthis.info tools&amp;quot; in on the left hand side of this page. From here you can set the Logo Image for your wiki that appears in the upper left of all pages.&lt;br /&gt;
&lt;br /&gt;
==Optional Secondary Steps==&lt;br /&gt;
# Add your wiki to the [http://editthis.info/wiki/Categorized_Wiki_List Categorized List of Wikis]&lt;br /&gt;
# Promote your wiki by posting to your favorite social networks &lt;br /&gt;
# Create another user with a more personalized username (first log out, then click create an account).&lt;br /&gt;
# Join the [http://groups.google.com/group/editthisinfo EditThis.info News Group]&lt;br /&gt;
# Edit this page and replace it's content with something more interesting for new visitors.&lt;br /&gt;
# Read [http://editthis.info/wiki/How_to_make_a_successful_wiki How to make a successful wiki]&lt;br /&gt;
# Read the [http://editthis.info/wiki/Help:Contents Help Page]&lt;/div&gt;</description>
			<pubDate>Sun, 20 Feb 2011 08:10:48 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Main_Page</comments>		</item>
		<item>
			<title>MediaWiki:Sidebar</title>
			<link>http://72.14.177.54/java4c/MediaWiki:Sidebar</link>
			<description>&lt;p&gt;Admin:&amp;#32;Created page with '* navigation ** mainpage|mainpage-description ** portal-url|portal ** currentevents-url|currentevents ** recentchanges-url|recentchanges ** randompage-url|randompage ** http://ed…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** portal-url|portal&lt;br /&gt;
** currentevents-url|currentevents&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** http://editthis.info/wiki/Help:Contents|help&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</description>
			<pubDate>Mon, 14 Dec 2009 16:08:20 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/MediaWiki_talk:Sidebar</comments>		</item>
		<item>
			<title>Main Page</title>
			<link>http://72.14.177.54/java4c/Main_Page</link>
			<description>&lt;p&gt;Admin:&amp;#32;Created page with '==Welcome to Your New Wiki== A wiki is a powerful tool that allows multiple users to collaborate and share content rapidly. The best example of this is Wikipedia, which is powere…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Welcome to Your New Wiki==&lt;br /&gt;
A wiki is a powerful tool that allows multiple users to collaborate and share content rapidly. The best example of this is Wikipedia, which is powered by the exact same software that this wiki is!&lt;br /&gt;
&lt;br /&gt;
==First Steps==&lt;br /&gt;
# An administrative user has already been created for you with all rights over this wiki. You should first [[Special:UserLogin|log in]] using &amp;lt;br&amp;gt;'''Username:''' admin&amp;lt;br&amp;gt;'''Password:''' changeme&lt;br /&gt;
# Click on [[Special:Preferences|my preferences]] and change the admin password. &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Critical:&amp;lt;/font&amp;gt; If you don't do this, other users can take over your wiki.&lt;br /&gt;
# Click on the Control Panel link under &amp;quot;editthis.info tools&amp;quot; in on the left hand side of this page. From here you can set the Logo Image for your wiki that appears in the upper left of all pages.&lt;br /&gt;
&lt;br /&gt;
==Optional Secondary Steps==&lt;br /&gt;
# Add your wiki to the [http://editthis.info/wiki/Categorized_Wiki_List Categorized List of Wikis]&lt;br /&gt;
# Promote your wiki by posting to your favorite social networks &lt;br /&gt;
# Create another user with a more personalized username (first log out, then click create an account).&lt;br /&gt;
# Join the [http://groups.google.com/group/editthisinfo EditThis.info News Group]&lt;br /&gt;
# Edit this page and replace it's content with something more interesting for new visitors.&lt;br /&gt;
# Read [http://editthis.info/wiki/How_to_make_a_successful_wiki How to make a successful wiki]&lt;br /&gt;
# Read the [http://editthis.info/wiki/Help:Contents Help Page]&lt;/div&gt;</description>
			<pubDate>Mon, 14 Dec 2009 16:07:03 GMT</pubDate>			<dc:creator>Admin</dc:creator>			<comments>http://72.14.177.54/java4c/Talk:Main_Page</comments>		</item>
	</channel>
</rss>