5.7 Afdrukbestand

Uitvoer naar een printer realiseerden we tot nu tot met de display-opdracht. Daarbij kwam dan de upon-optie en een naam die we in de special-names moesten opgegeven. Dat is niet de normale COBOL-manier van afdrukken. Bij sommige compilers is het trouwens niet eens mogelijk om met display iets op de printer te krijgen. Wat is dan de normale manier in COBOL?

COBOL beschouwt de printer als een bestand. Het afdrukken op de printer verloopt dan met de opdrachten open, write en close. Op het eerste gezicht lijkt het misschien vreemd om een printer als een bestand te zien. Vanuit een programma gezien is het echter niet zo raar. Het programma exporteert gegevens naar een randapparaat en voor het programma maakt het eigenlijk weinig uit of dat randapparaat een opslagmedium is of een printer.

Toch begrijpt COBOL wel dat er verschil bestaat tussen een bestand en het papier van de printer. Voor het afdrukken op de printer zijn er dan ook enkele extra mogelijkheden in de taal ingebouwd. Die bekijken we in deze en de volgende paragraaf.

In de paragraaf file-control in de environment division geven we het afdrukbestand een naam. Met assign leggen we de koppeling met een randapparaat. Net zoals bij gewone bestanden is de assign-clausule erg afhankelijk van de leverancier van de compiler (implementor). Raadpleeg eerst de documentatie. Je komt dan tot iets als:

     select papier assign to printer.
  

Hierin is papier de zelfgekozen naam voor het printerbestand. Printer is de implementornaam.

illustratie: Geert Nijmolen

cartoon

In de bestandsbeschrijving (FD) in de file section kun je voor een afdrukbestand de regelindeling van een bladzijde beschrijven. We nemen als voorbeeld: het afdrukken van etiketten. Elk etiket heeft ruimte voor 9 regels en we beschouwen die als de pagina. We gaan op elk etiket drie regels afdrukken (naam, adres, woonplaats). Het schrijfgebied is 3 regels groot. In de bestandsbeschrijving zie je dat als volgt terug:

FD  papier
    linage is 3 lines, lines at top 2, lines at bottom 4.
01  regel pic X(30).
  

onthoud

In de bestandsbeschrijving van een printerbestand is linage het aantal regels dat we op een pagina kunnen schrijven. Lines at top zijn niet-bedrukte regels bovenaan; zij blijven altijd leeg. Lines at bottom zijn niet-bedrukte regels onderaan; ze blijven ook altijd leeg. Het aantal regels op een bladzijde kom je te weten door de getallen achter top, linage en bottom bij elkaar op te tellen.

De linage-clausule is niet verplicht. Als we de clausule niet opgeven, dan schrijft de computer alle regels achter elkaar weg. Hij houdt geen rekening met kopruimte en ruimte onderaan de bladzijde. We kunnen dan wel zelf zorgen voor het opschuiven van de regels. Dat kan bij voorbeeld als we zelf een regelteller bijhouden.

In de write-opdracht kunnen we regelopschuiving regelen. Als we op de volgende regel willen afdrukken, dan mogen we schrijven:

write regel after advancing 1 line
  

Uitsluitend write regel, zonder after advancing 1 line, komt in dit geval op hetzelfde neer. Want als er niet bij staat hoeveel regels opgeschoven moet worden, dan gaat de computer vanzelf door naar de volgende regel. Als we iets anders willen dan gewoon de volgende regel, dan moeten we dat vermelden.

Dubbele regelafstand krijgen we met:

write regel after advancing 2 lines. 
  

Dit betekent: een regel overslaan en op de tweede afdrukken.

Als we halverwege een pagina zijn en we willen op een nieuw blad beginnen, dan geven we dat aan met:

  

De inhoud van regel komt dan op de eerste beschrijfbare regel van de volgende pagina.

In het voorbeeld van de etiketten geschiedt de pagina-opschuiving automatisch na het afdrukken van drie regels. We hebben immers een pagina gedefinieerd van drie beschrijfbare regels. De rest valt onder top en bottom. De computer slaat het top- en bottom-gedeelte van een pagina automatisch over.

Uit de formaatbeschrijving van de linage-clausule (zie aanhangsel A2) blijkt dat we de clausules over top en bottom mogen weglaten. Bij een weggelaten clausule geldt de waarde nul. Verder blijkt uit de formaatbeschrijving dat we in plaats van gehele getallen ook variabelen mogen gebruiken. De bestandsbeschrijving kan dan bij voorbeeld luiden:

 FD rapport
    linage is schrijfruimte
    lines at bottom ondermarge.
 01 afdrukregel pic x(120).
  

Schrijfruimte en ondermarge zijn variabelen. Bij het openen van het uitvoerbestand en bij elke nieuwe bladzijde kijkt de computer naar de inhoud van de velden. De inhoud op dat moment bepaalt de pagina-indeling. Op deze manier is het mogelijk om de pagina-indeling binnen een programma te variëren.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo