Verwendung von List & Label mit COBOL

Click here for the English article.

Vorbemerkung

Die nachfolgenden Beispiele stellen keine fertig lauffähigen Quelltexte dar, es fehlen beispielsweise die Routinen zum Öffnen und Schließen eines List & Label-Jobs, jegliche Fehlerbehandlung u. Ä. Sie dienen lediglich als Vorlage, um einen Eindruck davon zu bekommen, wie man sich die Ansteuerung von List & Label unter COBOL vorstellen kann.

Die verwendeten List & Label-Konstanten müssen aus dem C/C+±Headerfile cmbtLL?? (?? steht für die List & Label-Version) auf COBOL-Syntax umgesetzt werden. Das Headerfile befindet sich im Visual C++-Unterverzeichnis der List & Label-Installation und kann mit jedem Texteditor geöffnet werden.

Die darin enthaltenen Konstantendefinitionen der Art

#define LL_PROJECT_LABEL (1)

müssen auf COBOL-Syntax umgesetzt werden, also bspw. zu

78 LL-PROJECT-LABEL value 1.

Möglicherweise gibt es in der COBOL-Entwicklungsumgebung bereits ein Tool, das automatisch eine derartige Umsetzung vornehmen kann (Stichwort H2CPY).

Aufruf des Designers

  *********************************************************************************
  *    Dieses COBOL Beispiel startet den Designer von List & Label. Es 
  *    werden 2 Felder angemeldet: 'Artikelnummer' und 'Bezeichnung'
  *    
  *    Copyright (c) combit GmbH
  *********************************************************************************
  [...]

       MOVE "LLDEMO.LBL" & X"00" TO PROJEKTNAME
       MOVE LL-PROJECT-LABEL TO PROJEKTTYP
       MOVE "Etiketten Designer" & X"00" TO FENSTERTITEL

  * Melde alle verfügbaren Variablen an List & Label an
  * (hier bspw. Artikelnummer + Bezeichnung):
  * übergebe zum Design lediglich Beispielinhalte
       MOVE "Artikelnummer" TO VARIABLE-NAME
       MOVE "Beispielartikelnummer" TO VARIABLE-INHALT
       CALL WINAPI "LlDefineVariableA"
                  USING BY VALUE JOB-HANDLE
                        BY REFERENCE VARIABLE-NAME
                        BY REFERENCE VARIABLE-INHALT
                  RETURNING RC-INT
       END-CALL
       MOVE "Bezeichnung" TO VARIABLE-NAME
       MOVE "Beispielbezeichnung" TO VARIABLE-INHALT
       CALL WINAPI "LlDefineVariableA"
                  USING BY VALUE JOB-HANDLE
                        BY REFERENCE VARIABLE-NAME
                        BY REFERENCE VARIABLE-INHALT
                  RETURNING RC-INT
       END-CALL

  * Starte Designer
       CALL WINAPI "LlDefineLayoutA"
            USING BY VALUE JOB-HANDLE
                  BY VALUE WINDOW-HANDLE
                  BY REFERENCE FENSTERTITEL
                  BY VALUE PROJEKTTYP
                  BY REFERENCE PROJEKTNAME
            RETURNING RC-INT
         END-CALL

  [...]

Druck eines Etiketts

  *********************************************************************************
  *    Dieses COBOL Beispiel druckt 1 Etikett mit List & Label. Die Daten- 
  *    Felder werden in diesem Fall aus einem Array INHALT geholt 
  *    (Normalerweise würde hier jeweils ein Datensatz-Zugriff erfolgen).
  *
  *    Copyright (c) combit GmbH
  *********************************************************************************
  [...]

  * Starte Preview-Druck eines Etiketts "LLDEMO.LBL":
       MOVE "LLDEMO.LBL" & X"00" TO PROJEKTNAME
       MOVE LL-PRINT-PREVIEW TO DRUCKOPTIONEN
       MOVE LL-PROJECT-LABEL TO PROJEKTTYP
       MOVE LL-BOXTYPE-BRIDGEMETER TO BOXTYP
       MOVE "Etikettendruck" & X"00" TO FENSTERTITEL

       CALL WINAPI "LlPrintWithBoxStartA"
            USING BY VALUE JOB-HANDLE
                  BY VALUE PROJEKTTYP
                  BY REFERENCE PROJEKTNAME
                  BY VALUE DRUCKOPTIONEN
                  BY VALUE BOXTYP
                  BY VALUE WINDOW-HANDLE
                  BY REFERENCE FENSTERTITEL
            RETURNING RC-INT
       END-CALL

  * Melde alle Variablen des zu druckenden Datensatzes an (hier bspw. Artikelnummer + Bezeichnung):
  * hole dabei Feldinhalt aus Datenquelle (hier zum Test bspw. das Array INHALT)
       MOVE "Artikelnummer" TO VARIABLE-NAME
       MOVE INHALT(1) TO VARIABLE-INHALT
       CALL WINAPI "LlDefineVariableA"
                  USING BY VALUE JOB-HANDLE
                        BY REFERENCE VARIABLE-NAME
                        BY REFERENCE VARIABLE-INHALT
                  RETURNING RC-INT
       END-CALL
       MOVE "Bezeichnung" TO VARIABLE-NAME
       MOVE INHALT(2) TO VARIABLE-INHALT
       CALL WINAPI "LlDefineVariableA"
                  USING BY VALUE JOB-HANDLE
                        BY REFERENCE VARIABLE-NAME
                        BY REFERENCE VARIABLE-INHALT
                  RETURNING RC-INT
       END-CALL

 * Drucke Etikett
       CALL WINAPI "LlPrint"
            USING BY VALUE JOB-HANDLE
            RETURNING RC-INT
       END-CALL

 * Beende Ausdruck
       MOVE 0 TO PAGES
       CALL WINAPI "LlPrintEnd"
            USING BY VALUE JOB-HANDLE
                  BY VALUE PAGES
            RETURNING RC-INT
       END-CALL

  * Zeige Preview
       MOVE "." & X"00" TO PFAD.
       CALL WINAPI "LlPreviewDisplayA"
            USING BY VALUE JOB-HANDLE
                  BY REFERENCE PROJEKTNAME
                  BY REFERENCE PFAD
                  BY VALUE WINDOW-HANDLE
            RETURNING RC-INT
         END-CALL

  [...]