Portugiesische Fischsuppe mit Muscheln, Kartoffeln und Chorizo

Portugiesische Fischsuppe mit Chorizo und Kartoffeln

 

Diese bodenständige Fischsuppe ist etwas für Feinschmecker mit Hang zum Rustikalen. Traditionell wird sie mit Bacalao – das ist getrockneter Kabeljau (Stockfisch) zubereitet, schmeckt aber auch mit frischem Kabeljau und weiteren Fischen ganz hervorragend.

Zutaten:

  • 2 EL Olivenöl (natives, extra vergine)
  • 2 Lorbeerblätter
  • 6 Knoblauchzehen, fein gehackt
  • 2 große Zwiebeln (ca. 400 g), gewürfelt
  • 1 grüne Paprika (ca. 170 g), gewürfelt
  • ¼ TL Piment (gemahlen) – das verleiht eine warme, würzige Note
  • 900 g festkochende Kartoffeln, geschält und in 0,7 cm dicke Scheiben geschnitten
  • 1 Glas trockener Weißwein
  • 1 Liter Fisch- oder Hühnerbrühe, gekocht aus dem Einweichwasser des Bacalao und etwas Weißwein (alternativ: Gemüsebrühe)
  • 2 Tassen gehackte Tomaten aus der Dose (inkl. Saft)
  • 170 g Chorizo, in feine Scheiben geschnitten
  • 900 g Bacalao oder Weißfischfilet (z. B. Kabeljau, Seehecht oder Rotbarsch), entgrätet und in Stücke geschnitten
  • 6 – 8 Garnelen
  • 6 – 8 Miesmuscheln
  • 3 Zweige frischer Koriander, grob gehackt
  • Salz & frisch gemahlener schwarzer Pfeffer nach Geschmack
  • 2 EL frische Petersilie, grob gehackt
  • 1 frische, milde Chili, fein gehackt
  • Für die Beilage: 8 Scheiben Weißbrot, 1 TL provenzalische Kräuter und 2 Zehen fein gehackter Knoblauch

Zubereitung:

  1. Wässere den Bacalao über Nacht in 1 Liter gesalzenem Wasser und lasse ihn dann abtropfen (Wasser auffangen!)
  2. In einem großen Suppentopf das Olivenöl erhitzen. Gib die Lorbeerblätter, Knoblauch, Zwiebeln, Chili, Paprika und Piment hinzu. Unter ständigem Rühren bei mittlerer Hitze ca. 5 Minuten glasig dünsten, bis die Mischung duftet und das Gemüse weich geworden ist. Dieser Schritt bildet das Aromafundament der Suppe und sorgt für einen vollmundigen Geschmack.
  3. Die Kartoffelscheiben unterrühren und alles mit der Brühe und den gehackten Tomaten samt Saft ablöschen. Gut umrühren, aufkochen lassen und dann die Hitze auf mittlere Stufe reduzieren. Die Suppe nun 15 Minuten leicht köcheln lassen, bis die Kartoffeln fast gar sind – sie sollten weich, aber noch nicht zerfallen sein.
  4. Zerdrücke ein Drittel der Kartoffeln – das macht die Suppe sämig. Verrühre alles gut miteinander.
  5. Nun die Chorizo-Scheiben in die Suppe geben. Diese geben beim Garen ihre rauchige Würze in die Brühe ab. Anschließend die Fischstücke, die Garnelen und die Muscheln vorsichtig obenauf legen, nicht umrühren, sondern nur auf der Oberfläche leicht andrücken. Den Topf mit einem Deckel verschließen und die Suppe bei niedriger Hitze weitere 8 bis 10 Minuten ziehen lassen, bis der Fisch zart und durchgegart ist und die Muscheln sich geöffnet haben.
  6. Die Lorbeerblätter entfernen. Den frisch gehackten Koriander einrühren und die Suppe mit Salz und Pfeffer abschmecken. Die Aromen sollten nun wunderbar miteinander verschmolzen sein – würzig, herzhaft und aromatisch.
  7. In der Zwischenzeit Weißbrotscheiben in einer Pfanne mit etwas Olivenöl, provenzalischen Kräutern und gehacktem Knoblauch anrösten.
  8. In tiefen Tellern oder rustikalen Schüsseln anrichten und mit Petersilie bestreuen. Sofort heiß servieren – idealerweise mit dem geröstetem Knoblauchbrot.

Du magst meine Rezepte und kochst sie gerne nach? Dann freue ich mich über einen kleinen Obolus für meine Gewürze-Kasse. Besten Dank!  🙂

[Übersicht]

Bärlauch-Pesto mit Pecorino und Walnüssen

Bärlauch-Pesto mit Pecorino und Walnüssen Rezept auf www.mbergmann-sh.de

Bärlauch hat von April bis Mai Saison – leider viel zu kurz für dieses schmackhafte und gesunde Würzkraut. Wenn man ihn mag, dann hilft nur Eins: Haltbar machen!

Eine gute und leicht umsetzbare Möglichkeit ist es, den Bärlauch mit Käse, Olivenöl und ein paar Nüssen zu einem Pesto zu verarbeiten. Für mein Rezept brauchst du

  • 350 g frischen Bärlauch
  • 2 Zehen Knoblauch
  • 150 g ungesalzene Pinienkerne
  • 150 g Walnüsse
  • 150 g Pecorino (oder einen anderen würzigen Hartkäse)
  • den Saft einer halben Limette
  • eine halbe frische, rote Chili
  • 8 EL gutes Olivenöl
  • Meersalz und schwarzen Pfeffer aus der Mühle
  • 1 EL Hefeflocken

Das reicht für ca. 850 g fertige Pesto, respektive 3 bis 4 Gläser. Für die Zubereitung verwendest du am Besten ein ausreichend großes, schmales und hohes Gefäß und einen Pürierstab.

Zubereitung:

  1. Gib die Pinienkerne, Walnüsse und den Limettensaft zusammen mit einer Handvoll Bärlauch, der Chili, einem EL Olivenöl und den Knoblauchzehen in das Gefäß. Würze alles mit 1 TL Meersalz und einer kräftigen Prise Pfeffer.
  2. Püriere alles, gib dabei nach und nach den restlichen Bärlauch und löffelweise Olivenöl bei.
  3. Reibe nun den Pecorino in das Gefäß, gib die Hefeflocken bei und püriere die Masse nochmals.
  4. Schmecke den Pesto ggf. nochmal mit Salz und Pfeffer ab.
  5. Fülle den Pesto in vorbereitete Twist-Off-Gläser, bedecke den Pesto mit Olivenöl und verschließe die Gläser.
  6. Kühl und dunkel lagern, damit die Farbe nicht verloren geht!

Der Pesto hält sich bei kühler Lagerung wochenlang.

Tipp: Hausgemachter Pesto ist nicht nur ein gesunder Brotaufstrich, sondern verfeinert auch viele italienisch anmutende Gerichte und Saucen. Probiere ihn mal auf frisch gekochten Spaghetti – ist ein Träumchen!


Du magst meine Rezepte und kochst sie gerne nach? Dann freue ich mich über einen kleinen Obolus für meine Gewürze-Kasse. Besten Dank!  🙂

[Übersicht]

Crêpes mit gebratenen Austernseitlingen und Bärlauch

Crêpes müssen nicht immer nur süß daherkommen – auch mit würzigen Füllungen schmecken sie ganz hervorragend und werden so zur leckeren Hauptmahlzeit!

Um meine Crêpes mit Pilzen und Bärlauch nachzukochen, brauchst du

Für den Crêpes-Teig:

160 Weizenmehl (Type 405)
15 g Roggenmehl (Typ 605)
5 g Backmalz
1 Prise Zucker
je 1 gute Prise Meersalz und Pfeffer
Eier (Gr. M)
250 ml Milch
25 g geschmolzene Butter

 

Für die Füllung:

500 g Austernseitlinge, in Streifen geschnitten
1 kleine Zwiebel, gehackt
1 Bund Bärlauch, fein gehackt
1 kleiner Bund Thymian, fein gehackt
1 EL Limettensaft
1 EL Olivenöl
1 EL Creme Fraiche
1 TL Hefeflocken
Salz, Pfeffer aus der Mühle

Zubereitung:

  1. Für den Teig Mehl mit Zucker, Salz, Pfeffer und Backmalz vermischen. Eier und Milch hinzufügen und mit einem Schneebesen oder dem Handrührgerät zu einem glatten Teig verrühren.
  2. Die geschmolzene, nicht zu heiße Butter in einem dünnen Strahl einlaufen lassen und dabei unterrühren. Der Teig muss relativ dünnflüssig sein, damit er auf dem Crêpes-Maker oder in der Crêpes-Pfanne möglichst dünn verstrichen werden kann.
  3. Den Teig mindestens ca. 30 Minuten ruhen lassen!
  4. Für die Füllung 1 EL Olivenöl in einer gusseisernen Pfanne erhitzen, die Pilze und die Zwiebel darin von allen Seiten kurz anbraten.
  5. Bärlauch, Thymian, Limettensaft, Hefeflocken und die Creme Fraiche unterheben, mit Salz und Pfeffer aus der Mühle abschmecken. Die Pfanne anschließend für die weitere Verwendung warm stellen!
  6. Crêpes ausbacken: Gib eine Kelle Teig auf die heiße Crêpe-Platte und verteile ihn mit dem Crêpe-Stempel dünn über die gesamte Platte. Backe den Crêpe für ca. 60 Sekunden und wende ihn dann.
  7. Belege ihn nach weiteren 60 Sekunden mit einem EL der Pilzmischung und falte ihn nach der Methode 6 zu einer Tüte (siehe Faltanleitung!).
  8. Gib den Crêpe auf einen vorgewärmten Teller und dekoriere ihn mit ein Wenig gehacktem Bärlauch.
  9. Wiederhole die Schritte 6 bis 8 für weitere Crêpes.

Tipp: Das Rezept lässt sich saisonal auch prima mit anderen Pilzen, wie z.B. frisch gesammelten Maronen oder Steinpilzen, zubereiten!

Guten Appetit!

Anleitung zum Falten von Crêpes

10 Arten, um Crêpes richtig zu falten www.mbergmann-sh.de


Du magst meine Rezepte und kochst sie gerne nach? Dann freue ich mich über einen kleinen Obolus für meine Gewürze-Kasse. Besten Dank!  🙂

[Übersicht]

Zitronenthymian-Knoblauch-Aufstrich

Dieser vegane Brotaufstrich zieht dir die Schuhe aus!

Zutaten:

200 g Cashew-Kerne
4 getrocknete Aprikosen
2 EL getrocknete Cranberries
10 Zehen Soloknoblauch
eine halbe rote Chili, in Ringen
einen kleinen Bund Schnittlauch, in Röllchen
Saft einer halben Limette
1 Bund Zitronenthymian
2 EL Hefeflocken
Meersalz, Pfeffer aus der Mühle

Zubereitung:

  1.  200 Gramm Cashewkerne, 2 EL Cranberries und 4 getrocknete Aprikosen über Nacht in Wasser einweichen.
  2. Knoblauch und Zitronenthymian fein hacken, Limette auspressen.
  3. Wasser abgießen, Aprikosen klein schneiden und alles zusammen mit 2 EL Hefeflocken, dem Thymian, etwas Salz, Pfeffer und dem Limettensaft in einen Mixer geben oder die Menge mit einem Pürierstab pürieren, bis eine cremige Konsistenz entsteht.
  4. Den Schnittlauch unterheben.
  5. In vorbereitete Gläser abfüllen und kühl lagern.

Der Aufstrich hält sich für gute zwei Wochen im Kühlschrank.

Tipp: Probiere den Aufstrich auch mal als Topping zu heißen Spaghetti! Dazu die Spaghetti pro Teller mit 1 EL des Aufstrichs vermengen – mehr braucht es nicht für eine schnelle, würzige Nudelmahlzeit!


Du magst meine Rezepte und kochst sie gerne nach? Dann freue ich mich über einen kleinen Obolus für meine Gewürze-Kasse. Besten Dank!  🙂

[Übersicht]

Bulgur-Graupensuppe mit Sojahack

Dieser gehaltvolle Seelenwärmer schmeckt hervorragend, lässt sich gut aus Resten herstellen – und ist vegan. Du brauchst dafür kein Salz zu verwenden – Hefeflocken verleihen dem Süppchen eine kräftige Würze.

Zutaten:

2 Liter Wasser
1 Bund Suppengrün, fein gewürfelt
1 rote Spitzpaprika, in Streifen
eine halbe frische Chili, in Ringen
1 große Zwiebel, gewürfelt
4 Zehen Knoblauch, in Scheibchen
je eine kleine Tasse Bulgur, Perlgraupen und Sojahack
1 Lorbeerblatt
1 TL Ras-el-Hanout
8 Körner schwarzer Pfeffer, ganz
1 Msp. Zimt, gemahlen
1 Prise frisch geriebene Muskatnuss
1 EL Koriandergrün, fein gehackt
einen halben Bund glatte Petersilie, fein gehackt
einen halben Bund Frühlingszwiebeln, in Ringen
anderthalb EL Vegata (oder einer ähnlichen Suppenwürze)
1 gehäufter EL Hefeflocken
1 EL Sesamöl

Zubereitung:

  1. Spüle den Bulgur in einem engmaschigen Sieb unter fließendem Wasser ab.
  2. Brate das Gemüse im Sesamöl leicht an.
  3. Bringe das Wasser mit Vegata,  einem Lorbeerblatt und den Pfefferkörnern in einem großen Topf zum Kochen.
  4. Gib das Sojahack, den Bulgur und die Graupen hinzu und köchele alles bei kleiner Hitze für 25 Minuten. Rühre dabei regelmäßig um!
  5. Nach 10 Minuten gibst du das gebratene Gemüse hinzu und würzt das Süppchen mit Ras-el-Hanout, Zimt und den Hefeflocken.
  6. Schalte den Herd nach dem Ende der Kochzeit ab, entferne das Lorbeerblatt aus der Suppe und lasse sie bei geschlossenem Deckel noch für 10 Minuten nachquellen.
  7. Gib den Muskat hinzu. Abschmecken und ggf. nachwürzen!
  8. Hebe die Frühlingszwiebeln, die gehackte Petersilie und den Koriander unter und serviere das Süppchen heiß.

Du magst meine Rezepte und kochst sie gerne nach? Dann freue ich mich über einen kleinen Obolus für meine Gewürze-Kasse. Besten Dank!  🙂

[Übersicht]

Amiga Version String für mit SAS/C, VBCC und amiga-gcc compilierte Programme

Amiga Version String Macro www.mbergmann-sh.de

Auf dem Commodore Amiga besitzen gut geschrieben Programme einen Versions-String, der über die Shell mit dem Befehl ‚version <progname> file full‘ abgefragt werden werden kann.

Gerade dann, wenn man als C-Programmierer zu Testzwecken verschiedene C-Compiler verwendet kann es hilfreich sein, ein Template zu schreiben, um einen solchen Versions-String automatisch zu generieren. Man kann ein solches Template z. B. unter ‚S:myHeader.txt‘ ablegen und bei Bedarf einfach in den Texteditor laden.

Um einen Versions-String per Macro mit dem Programmnamen, der Versionsnummer, dem aktuellen Compilerdatum und Informationen zum verwendeten Compiler zu erstellen, geht man so vor:

#define PROGNAME "meinProgramm"
#define VERSIONR "1.0.0"
#define COPYRIGHT "Copyright © 2025 by Micha B."

/* construct version tag */
#if defined(__VBCC__)
 #define PROGDATE __AMIGADATE__
 #define COMPILER "VBCC"
#endif
#if defined(__SASC)
 #define PROGDATE __AMIGADATE__
 #define COMPILER "SAS/C v6.58"
#endif
#if defined(__GNUC__)
 #define PROGDATE __DATE__
 #define COMPILER "GCC"
#endif

/* AmigaOS Version String */
const char *version = "\0$VER: " PROGNAME " " VERSIONR " (" PROGDATE ") - (" COMPILER ") - " COPYRIGHT "\n";

Warum der Aufwand?

Natürlich könnte man den Versions-String auch einfach so schreiben:

const char *version ="\o$VER: meinProgramm ((01. April 2025)) - (SAS/C) - Copyright by IchSelbst\n";

Man müsste dann halt den String jedesmal verändern wenn die Programmversion wechselt oder ein anderer C-Compiler benutzt wird. Da ist es schon komfortabler, wenn man sich ein entsprechenes Makro angelegt hat.

Ich selbst verwende bei der Programmentwicklung grundsätzlich Templates, da mir das viel Arbeit für Kommentare usw. erspart. Für meine mit dem ReBuild GUI Designer entworfenen Projekte sieht mein Standard-Template so aus:

/*********************************************
 * Project:  ReBuild F.A.Q                   *
 * Purpose:  show some ReAction GUI features *
 * File:     meinprogramm.c                  *
 * Version:  1.0 RELEASE                     *
 * Author:   Michael Bergmann                *
 * Date:     2025/04/04                      *
 *                                           *
 * GUI made with ReBuild v1.3 beta           *
 * Tested Compilers:                         *
 *           SAS/C v6.58                     *
 *           VBCC v0.91 pre                  *
 *           amiga-gcc v6.5                  *
 * HINT: Might be linked against             *
 *       amiga.lib and reaction.lib!         *
 *********************************************
 */
/* --- Put INCLUDE-Files HERE: --- *

 
#define myDebug TRUE  /* Debugging Texts TRUE or FALSE */
#ifdef myDebug
  #include <stdio.h>  /* used for puts(), printf() */
  char *str_greet = "Hello Stranger!\n We're ready to DEBUG now!\n\n";
  char *str_bye = "\n\nAll Done!\nThis Demo quits now.\nHope you liked it?";
#endif

/* construct version tag */
#define PROGNAME "meinProgramm"
#define VERSIONR "1.0.0"
#define COPYRIGHT "Copyright © 2025 by Micha B."

#if defined(__VBCC__)
  #define PROGDATE __AMIGADATE__
  #define COMPILER "VBCC"
#endif
#if defined(__SASC)
  #define PROGDATE __AMIGADATE__
  #define COMPILER "SAS/C v6.58"
#endif
#if defined(__GNUC__)
  #define PROGDATE __DATE__
  #define COMPILER "GCC"
#endif

/* AmigaOS Version String */
const char *version = "\0$VER: " PROGNAME " " VERSIONR " (" PROGDATE ") - (" COMPILER ") - " COPYRIGHT "\n";

/* Function Proto Types */
int main(void);
void window_main( void );
int setup( void );
void cleanup( void );
void runWindow( Object *window_object, int window_id, struct Menu *menu_strip, struct Gadget *win_gadgets[] );

/* --- Additional global stuff goes HERE: --------------------------------------------------------------- */

/* --- Menu IDs ----------------------------------------------------------------------------------------- */
enum menus
{
  /* Menu "Project"  */
  MN_ITEM1
};

/* --- Requesters ---------------------------------------------------------------------------------------- */
/* 'No OS 3.2' box */
struct EasyStruct warnreq =
{
  sizeof(struct EasyStruct),
  0,
  "Error",
  "Needs AmigaOS 3.2.x\n\nNo Chance to run this program on your machine!",
  "Ok"
};

/* 'requester.class problem' box */
struct EasyStruct noreqclassreq =
{
  sizeof(struct EasyStruct),
  0,
  "Critical Error",
  " requester.class could not be opened.\nThis App refuses to start!",
  "Ok"
};

/* --- Function: setup() --------------------------------------------------------------------------------- */
/* --- Open libs, gadgets, classes and other ressources -------------------------------------------------- */
int setup( void )
{
  if( !(IntuitionBase = (struct IntuitionBase*) OpenLibrary("intuition.library",0L)) ) return 0;
  if( !(GadToolsBase = (struct Library*) OpenLibrary("gadtools.library",0L) ) ) return 0;
  if( !(WindowBase = (struct Library*) OpenLibrary("window.class",0L) ) ) return 0;
  if( !(IconBase = (struct Library*) OpenLibrary("icon.library",0L) ) ) return 0;
  
  /* --- Check for a sufficient OS! --- */
  if( !(LayoutBase = (struct Library*) OpenLibrary("gadgets/layout.gadget",47) ) )
  {
    if (myDebug)
       puts(" FAIL: layout.gadget");
    EasyRequest(NULL, &warnreq, NULL);    
    return 0;
  }
  /* Additional Stuff: Place HERE! */
  
} /* END Function setup() */

/* --- Function: cleanup() -------------------------------------------------------------------------------- */
/* --- Close used ressources and clean up for shutdown ---------------------------------------------------- */
void cleanup( void )
{
   /* Copy content of Function cleanup() HERE: */
} /* END Function cleanup() */
 

/* --- Function: runWindow() ------------------------------------------------------------------------------ */
/* --- IDCMP Event Handling is done here ------------------------------------------------------------------ */
void runWindow( Object *window_object, int window_id, struct Menu *menu_strip, struct Gadget *win_gadgets[] )
{
  struct Window	*main_window = NULL;  
  struct MenuItem *menuitem = NULL;
  LONG myItem = 0;                  /* GT menu identifier     */
  ULONG selected;                   /* used for Content query */
  ULONG status = 0;                 /* used for Status query  */
  ULONG req_result = 0;
  if ( window_object )
  {
    if ( main_window = (struct Window *) RA_OpenWindow( window_object ))
    {
      WORD Code;
      ULONG wait = 0, signal = 0, result = 0, done = FALSE;
      GetAttr( WINDOW_SigMask, window_object, &signal );
      if ( menu_strip)  SetMenuStrip( main_window, menu_strip );
      
      if(myDebug)
        printf("%s\n", str_greet);
        
      while ( !done)
      {
        wait = Wait( signal | SIGBREAKF_CTRL_C );

        if ( wait & SIGBREAKF_CTRL_C )
          done = TRUE;
        else
          while (( result = RA_HandleInput( window_object, &Code )) != WMHI_LASTMSG)
          {
            switch ( result & WMHI_CLASSMASK )
            {
              /* --- WINDOW -------------------------------------------- */
              case WMHI_CLOSEWINDOW:
                if(myDebug)
                  printf("%s\n", str_bye);
                done = TRUE;
                break;
                
              /* --- MENUS -------------------------------------------- */
              case WMHI_MENUPICK:
                if(myDebug)
                  puts("\nMenu pick!");
                 
                menuitem = ItemAddress(menu_strip, result & WMHI_MENUMASK);
                if(myDebug)
                  printf(" ItemAdress = %ld\n", menuitem); 
                  
                /* Check if menuitem equals to Zero. If Zero, an enforcer hit will occour when */
                /* attempting to examine, so we do not allow switching on menuitem == 0!       */
                if(!(menuitem == 0))
                {
                  /* --- ...get menu entries by using GadTools' GTMENUITEM_USERDATA field macro --- */
                  myItem = ((long)GTMENUITEM_USERDATA(ItemAddress(menu_strip, result & WMHI_MENUMASK)));
                  /* --- Identify selected menu entry */
                  switch(myItem)
                  {
                    case MN_ITEM1:
                      if(myDebug)
                        puts("\n Menu 'Project': <ITEM> was selected.");
                      
                      break;
                  } /* END switch(myItem) */ 
                } /* END if(!(menuitem == 0)) */
                break;  /* END WMHI_MENUPICK */

              /* --- GADGETS ----------------------------------------- */
              case WMHI_GADGETUP:
                switch (result & WMHI_GADGETMASK)
                {
                  /* --- Gadget 1 --- */
                  case 
                    break;          					
          				           
                } /* END switch (result & WMHI_GADGETMASK) */
                break;  /* END case WMHI_GADGETUP */
                
              /* --- ICONIFY ----------------------------------------- */
              case WMHI_ICONIFY:
                if ( RA_Iconify( window_object ) )
                  main_window = NULL;
                break;

              /* --- UNICONIFY --------------------------------------- */
              case WMHI_UNICONIFY:
                main_window = RA_OpenWindow( window_object );
                if ( menu_strip)  SetMenuStrip( main_window, menu_strip );
              break;
            } /* END switch ( result & WMHI_CLASSMASK ) */
          } /* END while (( result = RA_HandleInput( window_object, &Code )) != WMHI_LASTMSG) */
      } /* END while ( !done) */
    } /* END if ( main_window = (struct Window *) RA_OpenWindow( window_object )) */
  } /* END if ( window_object ) */
} /* END Function runWindow() */


/* --- Function: window_main() ----------------------------------- */
/* --- All window-specific setup for main Window is done here. --- */ 
/* ---'runWindow()' is called for message handling afterwards. --- */
void window_main( void )
{
  /* We changed ReBuild's menu struct output in order to obey to GadTools Menu handling! */
  /* Replaced: Last NULL argument by (APTR) <Item identifier>                            */

} /* END Function window_main() */


/* --- Main Function ---------------------------------------------------------------------------------- */
int main(void)
{
  if ( setup() )    /* This will satisfy all needs... */
  {
    window_main();  /* ...and open Application's main Window + implement Event handling by running 'runWindow()' */
  }
  cleanup();        /* Clean up stuff and exit */
} /* END main() */

Du findest dieses Tutorial hilfreich? Dann freue ich mich über einen kleinen Obolus für meine IT-Kasse. Besten Dank!  🙂

[Übersicht]

 

Aprikosen-Marmelade mit Wumms! www.mbergmann-sh.de

Aprikosen-Marmelade mit Wumms

Das ist eine meiner Lieblingsmarmeladen! Ihren unverwechselbaren Wumms bekommt sie durch einen guten Schluck Marillenlikör und eine Prise Muskat. Für bummelig 5 Gläser Marmelade brauchst du:

1,20 kg reife Aprikosen
2 EL Limettensaft
300 g Gelierzucker (3:1)
1 Prise Muskatnuss (frisch gerieben)
0,5 Stangen Zimt
ausreichend Marillenlikör
Vorbereitungen:
  1. Koche  5 bis 7 Schraubgläser à 300 ml (mit Twist-off Deckel) mit Wasser aus und lasse sie abtropfen
  2. Spüle Gläser und Deckel mit Mariellenlikör aus. Den guten Stoff anschließend nicht wegschütten!

Zubereitung:

  1. Aprikosen mit kochendem Wasser übergießen und die Fruchthaut abziehen.
  2. Früchte halbieren. Kern entfernen, Aprikosen in grobe Stücke schneiden. Früchte zusammen mit dem Zimt, dem Limettensaft, einer Prise Muskatnuss und 4 cl Marillenlikör in einem Topf zum Kochen bringen. Gelierzucker unter die Früchte rühren und weiterkochen lassen.  Stelle die vorbereiteten Gläser bereit
  3. Unter ständigem Rühren bei mittlerer Hitze ca. 3 Min. köcheln lassen (Gelierprobe!). Die Zimtstange entfernen und die Konfitüre mit einem Pürierstab fein pürieren. In die vorbereiteten Gläser mit Schraubverschluss füllen, je 1 cl Marillenlikör aufgießen und direkt verschließen.
  4. Gläser auf dem Deckel stehend auskühlen lassen.

Wichtig: Aprikosenmarmelade wird trotz der Zugabe von Zitronensaft gern leicht bräunlich. Daher am besten dunkel aufbewahren, das zögert den Farbwechsel etwas hinaus.


Du magst meine Rezepte und kochst sie gerne nach? Dann freue ich mich über einen kleinen Obolus für meine Gewürze-Kasse. Besten Dank!  🙂

Crêpe Suzette

Crêpe Suzette ist eine französische Süßspeise. Es handelt sich um einen dünnen Crêpe in einer Orangenlikör-Orangensaft-Sauce, der flambiert wird. Außer Curaçao werden gerne auch Grand Marnier oder ähnliche Orangenliköre dafür verwendet. Das Rezept wurde angeblich durch einen Zufall erfunden. Die bekannteste Anekdote beschreibt, dass am 31. Januar 1896 der britische Kronprinz, der spätere König Edward VII., im legendären Café de Paris in Monte Carlo zu Gast war. Der 14-jährige Kochlehrling Henri Charpentier machte dort seine Ausbildung und sollte ihm und 18 Gästen anlässlich einer Silvesterfeierlichkeit am Tisch Pfannkuchen machen. Doch während Charpentier die Soße zubereitete, fing ein Likör plötzlich Feuer. Der Lehrling verzog keine Miene, probierte unauffällig, ob es gut schmeckte, tunkte die Crêpes in die entflammte Marinade, gab noch mehr Likör und Zucker hinzu und erklärte dem erstaunten Prinzen, dass dies ein neues Rezept sei. Edward kostete und war begeistert.

Zutaten für den Crêpes-Teig

175  Weizenmehl (Type 405)
1 Prise  Zucker
1 Prise Salz
2 Eier (Gr. M)
250 ml Milch
25 g Butter oder neutrales Pflanzenfett

Außerdem: 

5 Bio – Orangen
4 EL Zucker
2 EL Orangenlikör
40 gButter
Zubereitung:
  1. Für den Teig Mehl in eine Schüssel sieben, Zucker und Milch hinzugeben und mit einem Schneebesen glatt rühren. Beim Rühren darauf achten, dass sich keine Klümpchen bilden. Butter schmelzen.
  2. Eier und das Eigelb mit einer Prise Salz unterrühren, die flüssige Butter in einem dünnen Strahl in den Teig fließen lassen und gut vermischen. Den Teig ca. 30 Minuten stehen lassen.
  3. Eine beschichtete Pfanne (oder den Crêpes-Maker) erhitzen und mit einem Papiertuch mit Öl einreiben. Den Teig mit einer kleinen Kelle portionsweise mittig in die heiße Pfanne geben. Den Teig mit einem Crêpe-Schaber auf dem Pfannenboden verteilen. Alternativ die Pfanne zügig in alle Richtungen bewegen. Crêpes bei mittlerer Hitze von beiden Seiten ca. 30-60 Sekunden ausbacken.

 

  1. Für das Topping Orangen heiß abwaschen und trocken reiben. 3 Orangen filetieren. Dafür mit einem glatten Messer direkt an der Orangenhaut entlang schneiden und die weiße Haut entfernen. Das Fruchtfleisch in dünne Spalten schneiden. Die Schale der übrigen 2 Orangen abreiben, Früchte halbieren und den Saft auspressen.
  2. Für die Tränke den frisch gepressten Orangensaft mit dem Abrieb in einer Pfanne erhitzen, Zucker und Orangenlikör zugeben. Die Orangensauce für ca. 5 Minuten einkochen. Dann 40 g Butter hinzufügen und einrühren.

    Die ausgebackenen Crêpes einzeln in der Orangensauce tränken und zweimal falten. Auf einem Teller anrichten und mit Orangenfilets dekorieren. Direkt servieren.

    Für den Wow-Effekt: Crêpes flambieren

    Zum Flambieren gebe die fertigen Crêpes-Fächer zurück in die Pfanne. Verteile zusätzlich 1-2 EL Cognac darüber und zünde diesen mit einem langen Streichholz an.

    Crêpes-Fächer richtig falten

    Richtig falten kann eigentlich jeder. Außer Zitronen, vielleicht. Na gut – schwacher Gag. Wenn es um Crêpes geht, gibt es traditionell 10 Arten des Faltens. Das folgende Schaubild gibt dir einen Überblick (zum Vergrößern: Anklicken!):

     

    10 Arten, um Crêpes richtig zu falten www.mbergmann-sh.de


    Du magst meine Rezepte und kochst sie gerne nach?? Dann freue ich mich über einen kleinen Obolus für meine Gewürze-Kasse. Besten Dank!  🙂

Französische Crêpes – Grundrezept

Für den Crêpes-Teig

175  Weizenmehl (Type 405)
1 Prise  Zucker
1 Prise Salz
2 Eier (Gr. M)
250 ml Milch
1 TL Butter oder neutrales Pflanzenfett

Nach Belieben Zimt-Zucker – Mischung,  Aprikosen-Marmelade oder Nuss-Nougat-Creme zum Füllen

Zubereitung

  1. Für den Teig Mehl mit Zucker und Salz vermischen. Eier und Milch hinzufügen und mit einem Schneebesen oder dem Handrührgerät zu einem glatten Teig verrühren.
  2. Die geschmolzene, nicht zu heiße Butter unterrühren. Der Teig muss relativ dünnflüssig sein, damit er auf dem Crêpes-Maker oder der Crêpes-Pfanne möglichst dünn verstrichen werden kann.
  3. Den Teig ca. 30 Minuten ruhen lassen!
  4. Crêpes-Maker auf mittlerer bis hoher Stufe erhitzen und mit etwas Butter oder Fett bestreichen. Wenn deine Crêpes-Platte antihaft-beschichtet ist, musst du dies nur einmal zu Beginn machen.
    Tipp: Jedes Crêpes-Gerät heizt und backt etwas anders. Eventuell braucht es 1-2 Versuche, bis die Teigdicke und der Bräunungsgrad perfekt passen. Probiere es einfach aus!
  5. Nach Belieben die Crêpes direkt auf dem Crêpes-Maker mit Zimt-Zucker-Mischung oder Nuss-Nougat-Creme füllen. Sehr gut passt auch hausgemachte Aprikosenmarmelade! Dazu die Füllung auf die Mitte des Crêpe streichen bzw. verteilen. Mithilfe des Crêpes-Wenders den Crêpe in der Hälfte zusammenklappen. Nun von beiden Seiten einklappen, so dass eine Tütenform entsteht. Mit dem restlichen Teig genauso vorgehen. Crêpes direkt servieren. Der Teig ergibt ca. 8 Crêpes.

Crêpes-Fächer richtig falten

Richtig falten kann eigentlich jeder. Außer Zitronen, vielleicht. Na gut – schwacher Gag. Wenn es um Crêpes geht, gibt es traditionell 10 Arten des Faltens. Das folgende Schaubild gibt dir einen Überblick (zum Vergrößern: Anklicken!)

10 Arten, um Crêpes richtig zu falten www.mbergmann-sh.de


Du magst meine Rezepte und kochst sie gerne nach?? Dann freue ich mich über einen kleinen Obolus für meine Gewürze-Kasse. Besten Dank!  🙂

Amiga E - Fließkommazahl ausgeben www.mbergmann-sh.de

Schnell-Tipp: Float-Wert unter Amiga E ausgeben

Amiga E und Fließkommazahlen (Float)

Amiga E besitzt keinen eigenen Datentyp für Fließkommazahlen, wie man das von C gewöhnt ist. Fließkommazahlen sind eine Art „Hack“. Sie werden als 32-Bit-Werte mit einfacher Genauigkeit gespeichert, so dass sie auch in die Vorstellung passen, dass alle Variablen 4 Byte groß sind. Da E lose typisiert ist, musst du E durch Zuweisung mit Dezimalpunkt mitteilen, wenn du Floats verwendest. Auch bei der Zuweisung an ganzzahlige Variablen muss mittels eines Ausrufezeichens hinter der Variablen zunächst konvertiert werden – und das macht die Float-Ausdrücke manchmal sehr unübersichtlich.

Im Wesentlichen sind Fließkommazahlen unter E sehr umständlich und E weiß nicht wirklich, dass der Wert, den eine Variable enthält, eine Fließkommazahl sein könnte. Der Wert ist in 4 Bytes gehalten, so dass, wenn du einen Float mit einem anderen Float vergleichst, es auch für die Art, wie sie gespeichert sind funktioniert. Um einen Float-Wert per Write(), WriteF() oder StringF() ausgeben zu können, musst du Umwege gehen und zunächst die Variable mit der Funktion RealF() in einen String umwandeln:

Float per WriteF() ausgeben

Da WriteF() keinen Platzhalter zur Ausgabe von Floats besitzt, musst du eine Float-Wert halt eben als String ausgeben. Hier kommt die Funktion RealF() ins Spiel. Sie wandelt die mit einem Float-Wert initialisierte LONG-Variable um und weist sie einem String zu:

Syntax: RealF( e-string, Float-Wert, Anzahl_Nachkommastellen)

Die Anzahl der Nachkommastellen ist auf maximal 8 Stellen begrenzt. Längere Werte werden gerundet. Der e-string muss vor der Verwendung der Funktion deklariert werden.

Beispiel:

/*
       Fließkommazahlausgabe in Amiga E
*/

PROC main()
  DEF fzahl1:LONG, fzahl2:LONG, summe:LONG
  DEF output[20]:STRING -> e-String-Variable für die Ausgabe

  fzahl1:=47.11345
  fzahl2:=42.81576

  summe:=! fzahl1 + fzahl2 -> summe per ! zu Float umwandeln

  WriteF('fzahl1 = \t\s\n', RealF(output, fzahl1, 5))
  WriteF('fzahl2 = \t\s\n', RealF(output, fzahl2, 5))
  WriteF('summe = \t\s\n', RealF(output, summe, 5))
ENDPROC

Eine Besonderheit des Fließkommazahl-Handlings unter E muss bei der Verwendung von zur Ausgabe bestimmten Floats in Zuweisungen unbedingt beachtet werden: Da der Default-Datentyp einer Variablen grundsätzlich LONG ist und LONG nur durch die Initialisierung mit einer Fließkommazahl Kenntnis darüber erlangt, nun einen Float-Wert zu speichern, muss einer nicht initialisierte Variablen erst mitgeteilt werden, dass sie gleich einen Float-Wert erhalten wird. Dazu dient der Integer/Float-Umwandlungsoperator, welcher durch das Ausrufezeichen ! symbolisiert wird. Er funktioniert bidirektional und wandelt einen Variablenwert, je nach Kontext, Position und Ausgangswert, entweder in einen Float-, oder aber in einen LONG-Wert um.


Ich stecke viel Freizeit und Herzblut in meine Tutorials. Wenn dir meine Arbeit gefällt, dann freue ich mich über eine kleine Spende für meine IT-Kasse. Besten Dank! 🙂

[Übersicht]