report r01 /* Filename fuer den Interpretercode */ # d01 /* Filename fuer die Beschreibung */ with /* page layout */ columns 60 lines 56 all lines 66 /* Es folgen Makrodefinitionen, Makros ordnen Nummer Namen zu */ /* da diese in der Regel leichter lesbar sind ! */ /* procedures */ define p_fzr = 1 /* switches */ define last_page = 1 /* variables */ define next_page = 0 define fzr = 1 define grp_lohn = 2 define grp_fzr = 3 define grp_cnt = 4 define abt_lohn = 5 define abt_fzr = 6 define abt_cnt = 7 /* Es folgen die Felddefinitionen. Die Feldnummer werden implizit */ /* vereinbart. */ define #d_name = char 17 define #d_qual = char 4 define #d_pkz = char 12 define #d_lohn = char 4 define #d_abt = char 1 define #d_gruppe = char 7 define #d_dummy = char 1 as /* REPORT BEGINN */ /* Prozedur zur Berechnung der FZR, Eingabeparameter ist die */ /* Variable fzr, die gleichzeitig als Rueckgabewert dient. */ proc p_fzr set $fzr = ($fzr - 600) / 10 if $fzr > 60 then set $fzr = 60 end if return on pagebegin do /* SEITEN KOPF */ '-' 60 \n 'VEB Generatorwerke' \50 date \n '1234 Berlin-Report' \50 time \n 'Komplexstr. 13' \28 'Seite: ' integer page \n '-' 60 \n2 if ! page == 1 then \20 'Liste der Abteilung ' char #d_abt end if \n2 end on pageend do /* SEITEN FUSS */ if ! ^last_page then set $next_page = page + 1 \36 'Es folgt Seite: ' integer $next_page end if \n2 end on lineend do 'I' end /* ZEILEN ENDE */ on batchline do /* ZEILEN UMBRUCH */ \18 if #d_pkz from 7 to 7 == '4' then 'maennl' else 'weibl' end if end set line = 10 /* DECK BLATT */ \\20 'Liste der Abteilungen ' \f for all do /* leerer SATZ KOPF */ for one do /* SATZ VERARBEITUNG */ /* Jede neue Abteilung soll auf eine neue Seite */ if groupbegin d_abt then \f end if /* Jede neue Gruppe erhaelt eine Ueberschrift */ if groupbegin d_gruppe then '***** Gruppe ' char #d_gruppe ' *****' \n2 'Name' \15 'Qualifikation' \32 'Geb.-Datum' \45 'Lohn' \55 'FZR' \n \15 'maennl/weibl' \n2 end if set $fzr = #d_lohn set $grp_lohn += $fzr call p_fzr set $grp_fzr += $fzr set $grp_cnt += 1 char batch 10 #d_name \18 char #d_qual \33 char to 2 #d_pkz '.' char from 3 to 4 #d_pkz '.' char from 5 to 6 #d_pkz \44 integer @4 #d_lohn ',-M' \54 integer @2 $fzr ',-M' \n /* Am Ende jeder Gruppe, aggregierte Werte ausgeben. */ if groupend d_gruppe then set $abt_lohn += $grp_lohn set $abt_fzr += $grp_fzr set $abt_cnt += $grp_cnt set $grp_lohn := $grp_cnt set $grp_fzr := $grp_cnt \28 'Durchschnitt: ' \44 integer @4 $grp_lohn ',-M' \54 integer @2 $grp_fzr ',-M' \n2 set $grp_lohn = 0 set $grp_fzr = 0 set $grp_cnt = 0 end if /* Am Ende jeder Abteilung, aggregierte Werte ausgeben. */ if groupend d_abt then set $abt_lohn := $abt_cnt set $abt_fzr := $abt_cnt 'Durchschnitt der Abteilung: ' \44 integer @4 $abt_lohn ',-M' \54 integer @2 $abt_fzr ',-M' \n set $abt_lohn = 0 set $abt_fzr = 0 set $abt_cnt = 0 end if end one /* ENDE SATZ VERARBEITUNG */ /* leerer SATZ FUSS */ end all set ^last_page /* REPORT FUSS */ ;