Listing of PLIST.PAS                                               PAGE 1

    1:  0 {***************************************************************************}
    2:  0 {*               PLIST VERSION 3.6 / 1985.3 von Ulrich Kern                *}
    3:  0 {***************************************************************************}
    4:  0 
    5:  0 PROGRAM PLIST; {verbesserte Version von TLIST}
    6:  0 {$V-}   {Kein range-checking bei string-Uebergabe}
    7:  0 
    8:  0    CONST PL : integer = 72;
    9:  0          MT : integer =  3;
   10:  0          MB : integer =  3;
   11:  0          PO : integer =  0;
   12:  0          CP : integer =  0;
   13:  0          HE : STRING[128] = '';
   14:  0          FO : STRING[128] = '';
   15:  0 
   16:  0    TYPE  line            = STRING [128];
   17:  0          linelength      = 0..128;
   18:  0          filetype        = (main, include);
   19:  0          PufferZeiger    = ^Puffer;
   20:  0          Puffer          = RECORD
   21:  1                               Eintrag    : line;
   22:  1                               Naechster  : PufferZeiger
   23:  1                            END;
   24:  0         Bez              = STRING[20];
   25:  0 
   26:  0         ZeilenListe      = ^ZeilenEintrag;
   27:  0         ZeilenEintrag    = RECORD
   28:  1                               Nummer : integer;
   29:  1                               ZNext  : ZeilenListe
   30:  1                            END;
   31:  0 
   32:  0              IdentList  = ^Bezeichner;
   33:  0              Bezeichner = RECORD
   34:  1                              IName : Bez;
   35:  1                              l,r   : IdentList;
   36:  1                              ZList : ZeilenListe
   37:  1                           END;
   38:  0 
   39:  0 
   40:  0    VAR   wort,
   41:  0          zeile           : line;
   42:  0          MainFile,
   43:  0          InclFile        : text;
   44:  0          Options         : SET OF (Cross,LNummer,RMark,FIncl,AutoBlock,Versch);
   45:  0          MainFileName,
   46:  0          InclFileName    : STRING[14];
   47:  0          SeitenZahl,
   48:  0          SpaltenZahl,
   49:  0          ZeilenZahl,
   50:  0          Zeilennummer,
   51:  0          PufferGroesse,
   52:  0          Iter            : integer;
   53:  0          WarteFlag,
   54:  0          KommentarFlag,
   55:  0          Stringflag,
   56:  0          IncludeFlag,
   57:  0          AutoBlockFlag,
   58:  0          ListFlag,
   59:  0          PufferVoll,
   60:  0          CaseFlag        : boolean;

Listing of PLIST.PAS                                               PAGE 2

   61:  0          Anfang, p, q    : PufferZeiger;
   62:  0          CrossList       : IdentList;
   63:  0 
   64:  0 {$I PLIST-1.INC}
   65:  0 {$I PLIST-2.INC}
   66:  0 {$I PLIST-3.INC}
   67:  0 {$I PLIST-4.INC}
   68:  0 {$I PLIST-5.INC}
   69:  0 
   70:  0 {***************************************************************************}
   71:  0 {*                             Hauptprogramm                               *}
   72:  0 {***************************************************************************}
   73:  0 
   74:  0 BEGIN {Hauptprogramm}
   75:  1 
   76:  1   IncludeFlag:=false;                    ListFlag:=true;
   77:  1   SeitenZahl:=1;                         StringFlag:=false;
   78:  1   KommentarFlag:=false;                  PufferVoll:=false;
   79:  1   CaseFlag:=true;                        Iter:=0;
   80:  1   ClrScr; writeln('PLIST vers. 3.6'); writeln;
   81:  1 
   82:  1   REPEAT
   83:  2     write('Geben Sie den Programm-Namen ein oder ? oder RETURN fuer Ende: ');
   84:  2     LiesFileName;
   85:  2 
   86:  2     IF MainFileName='?' THEN BEGIN
   87:  3       ClrScr;
   88:  3       writeln('Um den Ausdruck des Programms zu formatieren, koennen Sie');
   89:  3       writeln('folgende Punktkommandos benuetzen: (Syntax : {.Kommando})');
   90:  3       writeln;
   91:  3       writeln('Kommando  Wirkung                        Voreinstellung');
   92:  3       writeln;
   93:  3       writeln('PL nn     Seitenlaenge                         ',PL);
   94:  3       writeln('MT nn     Rand oben                             ',MT);
   95:  3       writeln('MB nn     Rand unten                            ',MB);
   96:  3       writeln('PO nn     Rand links                            ',PO);
   97:  3       writeln('CP nn     Neue Seite bei weniger als n Zeilen   ',CP);
   98:  3       writeln('PA        Neue Seite');
   99:  3       writeln('HE        Kopfzeile               Listing of ... PAGE #');
  100:  3       writeln('FO        Fusszeile                            (keine)');
  101:  3       writeln('L+/L-     Listing ein/aus');
  102:  3       writeln('A+/A-     Autoblock ein/aus');
  103:  3       writeln;
  104:  3       writeln('Alle Kommandos ausser HE und FO koennen auch in eine Zeile');
  105:  3       writeln('geschrieben werden. Beispiel {.PL 64, MT 8, PO 5}');
  106:  3       writeln('In HE und FO kann # fuer die Seitennummer angegeben werden.');
  107:  3       writeln
  108:  3      END
  109:  2 
  110:  2      ELSE IF (MainFileName<>'') AND FileExists(main) THEN BEGIN
  111:  3       LiesOptions; Crosslist:=NIL; SeitenZahl:=1;
  112:  3       writeln('Listing of ',MainFileName,'.');
  113:  3       HE:='Listing of '+MainFileName
  114:  3           +'                                               PAGE #';
  115:  3       ZeilenZahl:=0;
  116:  3       ZeilenNummer:=1;
  117:  3       WHILE NOT(EOF(MainFile)) OR PufferVoll DO BEGIN
  118:  4         IF NOT PufferVoll THEN BEGIN LiesPuffer; p:=Anfang END;
  119:  4         zeile:=p^.Eintrag; p:=p^.Naechster;
  120:  4         IF p^.Naechster=NIL THEN ClearPuffer;

Listing of PLIST.PAS                                               PAGE 3

  121:  4         IF AutoBlockFlag AND (PufferGroesse>PL-ZeilenZahl-MB-3)
  122:  4            AND (PufferGroesse<=PL-MT-MB-3) THEN NeueSeite;
  123:  4         PufferGroesse:=0;
  124:  4         IF NOT SonderZeile(zeile) THEN BEGIN
  125:  5          IF ZeilenZahl MOD PL = 0 THEN Seitenkopf;
  126:  5          IF PL - ZeilenZahl   = MB + 3 THEN NeueSeite;
  127:  5          IF ListFlag THEN BEGIN drucke(zeile); ZeilenZahl:=ZeilenZahl+1 END;
  128:  5          ZeilenNummer:=ZeilenNummer+1;
  129:  5         END  {if not SonderZeile}
  130:  4       END; {while} IF cross IN Options THEN SchreibCrossListe;
  131:  3       close(MainFile);
  132:  3      END
  133:  2 
  134:  2     ELSE IF MainFileName<>'' THEN writeln('File exisiert nicht.')
  135:  2 
  136:  2   UNTIL MainFileName=''; close(LST);
  137:  1 END.

Crossreferenz-Liste:

Anfang             :    61   118
AutoBlock          :    44
AutoBlockFlag      :    57   121
Bez                :    24    34
Bezeichner         :    33
CaseFlag           :    60    79
ClearPuffer        :   120
CP                 :    12    97
Cross              :    44   130
CrossList          :    62   111
drucke             :   127
Eintrag            :    21
FileExists         :   110
filetype           :    18
FIncl              :    44
FO                 :    14
HE                 :    13   113
IdentList          :    32    35    62
IName              :    34
InclFile           :    43
InclFileName       :    46
include            :    18
IncludeFlag        :    56    76
Iter               :    52    79
KommentarFlag      :    54    78
l                  :    35
LiesFileName       :    84
LiesOptions        :   111
LiesPuffer         :   118
line               :    16    21    41
linelength         :    17
ListFlag           :    58    76   127
LNummer            :    44
LST                :   136
main               :    18   110
MainFile           :    42   117   131

Listing of PLIST.PAS                                               PAGE 4

MainFileName       :    45    86   110   112   113   134   136
MB                 :    10    95   121   122   126
MT                 :     9    94   122
Naechster          :    22
NeueSeite          :   122   126
Nummer             :    28
Options            :    44   130
p                  :    61   118   119
PL                 :     8    93   121   122   125   126
PLIST              :     5
PO                 :    11    96
Puffer             :    20
PufferGroesse      :    51   121   122   123
PufferVoll         :    59    78   117   118
PufferZeiger       :    19    22    61
p^.Eintrag         :   119
p^.Naechster       :   119   120
q                  :    61
r                  :    35
RMark              :    44
SchreibCrossListe  :   130
Seitenkopf         :   125
SeitenZahl         :    47    77   111
SonderZeile        :   124
SpaltenZahl        :    48
Stringflag         :    55    77
text               :    43
Versch             :    44
WarteFlag          :    53
wort               :    40
zeile              :    41   119   124   127
ZeilenEintrag      :    27
ZeilenListe        :    26    29    36
Zeilennummer       :    50   116   128
ZeilenZahl         :    49   115   121   125   126   127
ZList              :    36
ZNext              :    29
^Bezeichner        :    32
^Puffer            :    19
^ZeilenEintrag     :    26