@(#)DOKU		2.0.5  1996-09-03  SQL DBS

PTOC-Anpassungen, Standardisierung usw.         

1.  Abgleich: Staende von 'sqlx', 'sql6000' und alter Stand
	 (nur Klartext-Dateien, d.h. Pascal-Quellen, C-Quellen,
	 generiertes C, yacc-Dateien, Makefiles usw.)
    Ergebnis (soweit eindeutig) nach 'ptoc.neu'

2.  Kopie 'ptoc.neu' nach 'ptoc.try'

3.  Alles Weitere unter 'ptoc.try':

    setenv PTOCROOT `pwd`
    make clean                   ==> generierte C-Files wurden geloescht
    find . -print > fils.clean   == Liste der noch bestehenden Dateien

4.  make mktools                 ==> einige Objekte sowie eyacc wurden erzeugt

    eqtest von 'ptoc.neu' nach 'ptoc.try' zeigt nur eine Abweichung in einem
    yacc-Header-Kommentar

5.  in Subdirectory 'ptoc':      Version.number umgesetzt von PASCAL_1.0.00
	 auf PTOC_1.5.00
    make versagt, da 'mkvers' nicht bekannt;
	 in Makefile relativ eingetragen als '../tools/mkvers/mkvers'
    neues make erzeugt 'ptoc'

6.  wieder in 'ptoc.try'
    make versagt, scheitert an 'DSF.c' (don't know how to make ...)

    eqtest von 'ptoc.neu' nach 'ptoc.try' zeigt u.a. einen Fehler im
    Makefile 'pcomp/xpgenc.mk': benutzt '-lpc' statt '-lsqlptc';
    korrigiert in 'pcomp/make.head'

    Ausserdem: Hand-Korrektur in 'pcomp/y.tab.c' (Zeile 1243-1245,
    Kommentar IST, durch Kommentar unwirksam gemacht) fehlt == in Ordnung !

    Aufraeumen unter 'pcomp' mittels 'make clean'.

7.  Versuch, 'DSF.c' zu erstellen mittels 'make mkpgenc' im Haupt-Makefile
    (Zweig in Subdirectory 'pcomp', Original: 'make' (-> 'xmkpgenc')
    ==> fuehrt auf den Pascal-Zweig, also von .P direkt nach .o

    Scheitert daran, dass 'libsqlptc' nicht gefunden wird.

    Aufraeumen unter 'pcomp' mittels 'make clean'.

8.  Versuch, 'DSF.c' zu erstellen mittels 'make dmkpgenc' im Haupt-Makefile
    (Zweig in Subdirectory 'pcomp', Original: 'make' (-> 'xmkpgenc')

    Scheitert an Fehler in 'dpgenc.mk': Soll laut Aufruf 'dpgenc'
    erzeugen, kennt aber nur 'pgenc'. Aufruf korrigiert, neuer Anlauf.

    make versagt, scheitert an 'DSF.c' (don't know how to make ...)

9.  Aus der Doku uebernommen ins Haupt-'Makefile':
	 cd pcomp;  make cfiles   $(TOOLS) HOST=$(HOST) MACH=$(MACH)
    vor dem Default-'make' fuer 'pcomp'

    Ergebnis: die C-Dateien werden erzeugt und stimmen
    (nach Anpassung in 'pcomp/make.head' fast mit den Ausgangs-Versionen
    unter 'ptoc.neu' ueberein, Abweichung: das neu generierte
    enthaelt einige Aufrufe von 'sql__ord'
    und nicht die in der Ausgangs-Version gemachten Hand-Korrekturen,
    ausserdem unterschiedliche Make-Files.

10. Hand-Korrekturen uebernommen in 'genc.P' und 'sysprocs.P'
    Neues "make cfiles" fuer 'pcomp' liefert C-Code, der mit der
    Ausgangs-Version uebereinstimmt bis auf
	Aufrufe von 'sql__ord'  und
	Erzeugung von 'unsigned char' statt 'int'  (2* in 'genc.c')
    Uebersetzung scheitert an Generierung von 'input' in 'readln' ('DSF.c'),
    Behebung: "#define input sql__input" in 'ptoc.h' (wie schon fuer 'output')

11. Mittels 'make libs' die 'libsqlptc.a' erstellt.
    Zugriff auf diese Lib erzwungen durch explizite Angabe in 'make.head'
    unter 'pcomp'.
    Aus aelterer Version 'ORD.c' uebernommen als 'sql__ord.c' in 'libpc',
    ins 'Makefile' eingebaut.

12. 'make' erstellt 'pcomp/pgenc' !

13. Ergebnis getestet aus 'sql35p' und 'sql6000', alles in Ordnung

14. Aenderungen aus 'ptoc.try' re-integriert nach 'ptoc.neu'

15. Version der 'sqlsun2' in den Abgleich einbezogen.
    Dateien unter 'ptoc.neu', die JETZT neuer sind als bisherige Doku:

    Distriblist        libpc/h00vars.h        pgram/yy.h
    Makefile           libpc/whoami.h         pgram/yyput.c
    common/globals.ci  libpc/sql__ucmp.s      ptoc/Makefile
    common/symtab.ci   libpc/libpc_prof/dummy ptoc/how_pc
    include/ptoc.h     libpc/sql__setrang.c   ptoc/ptoc.c
    libpc/Makefile     pcomp/fixtokens        tools/eyacc/ey1.c
    libpc/Makefile.sun pgram/0.h              tools/makedepend/main.c
    libpc/sql__ord.c   pgram/f.decls.h        tools/tws/tws.y

    Wesentliche Einzelpunkte:
    'include/ptoc.h' definiert 'sql__ord' als Cast 'unsigned'
	(Kommentar IST 29.4.92, die Funktion koennte Sign-Extension
	verursachen)
	und enthaelt einen SUN-Zweig fuer 'movc' usw.
    'libpc/Makefile': Die SUN-Version nutzt ein Assembler-'sql__ucmp.s'
	und das Flag 'O4',
	Vorkehrungen fuer Assembler-Files grundsaetzlich eingebaut.
    'libpc/libpc_prof/dummy' als Platzhalter in der Directory,
	um 'cpio' zum Anlegen zu zwingen.
    'libpc/sql__setrang.c' macht Fallunterscheidung zwischen Unter-
	und Obergrenze des Wertebereichs.
    'libpc/h00vars.h' und 'libpc/whoami.h' ergaenzt um SUN-Spezifika,
	aufgeraeumt bei einigen CPP-Symbolen ( 'PI' usw.)
    'Distriblist' ergaenzt

16. Neue Aenderungen in 'ptoc.try':
    - Verbesserung der 'what'-Kennung, besonders in der 'libsqlptc'
      (dortiges 'Version.c' erzeugt aus
	'../include/ptoc.h', 'whoami.h' und 'h00vars.h'
    - Bereinigung der Files in 'libpc', Abgleich mit den Typ-Korrekturen
      von Raymond fuer OS/2 (u.a. Prototypen, NICHT endgueltig)
    - Aufnahme der Lib-Routinen in 'libpc.h' mit ihren Werten,
      dafuer Aenderungen in 'libpc.h' ('typedef bool ...' mit
      Zusaetzen),
    - Suche nach Benutzung aller Lib-Routinen, die folgenden erscheinen
      unbenutzt:
	blkclr          sql__caserr     sql__flsave     sql__pwrite
	blkcpy          sql__chr        sql__ft         sql__sbce
	sql__4s         sql__ddisp      sql__gre        sql__seek
	sql__append     sql__elinee     sql__limitc     sql__sge
	sql__as         sql__fcl        sql__ltr        sql__z2
	sql__ass        sql__fln        sql__putchar
      Aus dem derzeitigen 'libpc/Makefile' entfernt, dann ein neuer
      Versuch (Version 1.5.20). Versionsnummer und -Daten stehen in
	pcomp/Version.number    include/ptoc.h          libpc/whoami.h
	ptoc/Version.number     libpc/Version.number    libpc/h00vars.h

16. Unter AIX fehlen die Versionsnummern in 'ptoc' und 'pgenc', weil der
    Linker auch einzeln angegebene Moduln weglaesst, wenn sie keine offene
    Referenz erfuellen.  Abhilfe: 
    - In 'mkvers' (Quelle 'tools/mkvers/mkvers.c') wird kein 'static' mehr
      generiert.
    - 'ptoc/ptoc.c' enthaelt ein 'printf', das im 'debug'-Fall den durch
      'PTOC_id [0]' addressierten String (d.h. den 'what'-String) ausgibt,
      dadurch ist der ganze Modul 'ptoc/Version.c' im Programm.
    - Entsprechend in 'common/genc.P' ueber neue Routine 'version_writing' 
      in 'pascl/initialize.c' im Falle der 'XQ'-Option.

    Anschliessend Aufraeumen bei Kleinigkeiten (Kommentare hinter '#endif',
    Prozentzeichen in 'printf' durch '%%' statt '\%'),
    neue Versionsnummer: 1.5.23

17. Verzicht auf ueberfluessige Range-Checks:
    a) in 'pascl/sem.P', Routine 'RangeCheck', wird KEIN Check mehr generiert,
       falls der zu benutzende Wert ein konstanter Ausdruck ist
       ('IsConstantExpr').
       Ergebnis: der generierte Code enthaelt keine solchen Checks mehr,
       sonst keine Aenderungen.
       neue Versionsnummer: 1.5.30, gesichert auf 'ptoc.neu'.
    b) Testprogramm ergibt, dass jetzt auf konstanten Ausgruecken
       ueberhaupt kein Check mehr erfolgt, so dass man z.B. einem
       0..15 - Subrange den Wert 20 zuweisen kann.
       Deshalb wurde die Routine um einen Vergleich des Wertes mit den
       Grenzen erweitert und im Fehlerfall der neue Fehler
       146 'Expression value out of range' geliefert.
       Die Fehlerposition wird (noch ?) nicht richtig belegt !
       neue Versionsnummer: 1.5.32

18. Verbliebene Namenskonflikte zwischen PTOC- und CLE-Pascal-Lib
    ('libsqlptc.a' bzw. '/usr/lib/libpc.a') beseitigen.
    Betroffene Identifier:
    a) 'seed' ('sql__rd.c'): Wird nicht mehr generiert, da bereits ersetzt
       durch 'sql__srand', also auskommentiert;
       zur Klarheit die Variable 'sql__seed' umbenannt in 'sql__seed_v'.
    b) 'disply' ('h00vars.h' und 'sql__pmain.c'): Wird nicht mehr benoetigt,
       die benutzenden Routinen sind nicht mehr in der Lib,
       also auskommentiert.
    c) '_inwin', '_outwin', '_errwin' ('sql__gn.c' und 'sql__pmain.c'):
       Sind jeweils modul-lokal (unklar: abhaengig vom Hauptprogramm ?)
       und wurden zu 'static', ausserdem umbenannt in 'sql__inwin' usw.
    d) '_argc', '_argv', '_envp' ('sql__pvars.c' und 'sql__pmain.c'):
       Die Situation ist etwas unklar:
       Es sind globale Variable, auf die von den entsprechenden Lib-Routinen
       (d.h. bei Benutzung der vordefinierten Identifier in Pascal)
       zugegriffen wird. Sofern das Hauptprogramm durch PTOC (oder CLE)
       erzeugt wurde, beginnt es damit, diese Variablen aus den C-'main'-
       Parametern zu laden.
       Unser Code sollte keine entsprechenden Referenzen mehr enthalten,
       folglich die Routinen auch nicht aufrufen.
       Kollisionen sind nur dann moeglich, wenn einer der Moduln 'sql__pmain'
       oder 'sql__pvars' aus 'libsqlptc.a' mit 'libpc.a' kollidiert.
       Da bei einem Kunden-Link 'sql__pmain' nicht benoetigt wird, kann es
       nur 'sql__pvars' sein; dieser Modul enthaelt aber nur die drei
       Variablen, kann also ggfs. problemlos aus der Lib geloescht werden.
       Folglich: KEINE Aktion.
    neue Versionsnummer: 1.5.33

20. Beginn mit der Pruefung der Set-Operationen. Bei fluechtiger Durchsicht
    des Codes war Misstrauen entstanden bezueglich der korrekten Behandlung
    von Untergrenzen ungleich 0, betroffene Moduln:
    'sql__int.c', 'sql__scnst.c', 'sql__setco.c' und 'sql__setops.c'.
    Erstes Testprogramm mit 'SET OF 10 .. 30' zeigt keine Fehler.
    Feststellung, dass 'sql__int' nicht benutzt wird, folglich aus
    der Bibliothek entfernt.
    neue Versionsnummer: 1.5.34, gesichert auf 'ptoc.neu'.

21. Abhaengigkeiten der Files bestimmt, unbenutzte Files umgesetzt in
    Subdirectory 'obsolete', dito alte Versionen der 'libpc'-Makefiles,
    dann die ueberfluessigen Bibliotheks-Routinen aus den Makefiles
    entfernt.
    CPP-Symbol 'REGOPT' wird in der 'libsqlptc' zwar gesetzt, aber nicht
    ausgewertet, also aus den Makefiles entfernt;
    im 'pgenc' wird es zwar abgefragt, aber nie gesetzt, also aus den
    Quell-Dateien entfernt (Hat nur Bedeutung fuer die Register-Zuordnung
    bei der Code-Generierung, spielt also im PTOC keine Rolle.);
    im 'ptoc' wird es gesetzt und abgefragt, um dann 'pgenc' den Parameter
    'E' zu uebergeben, der aber nicht mehr ausgewertet wird - also weg!
    neue Versionsnummer: 1.5.38.

22. CPP-Symbol 'NOOUT' wird in 'pcomp/Makefile' und 'pcomp/make.head'
    immer gesetzt, der Effekt kann also grundsaetzlich im Code eingebaut
    werden. Betroffen: 'pascl/initialize.c' und 'pascl/pcomp.P'.
    neue Versionsnummer: 1.5.39, gesichert auf 'ptoc.neu'.

23. Saemtliche CPP-Symbol-Definitionen aus 'gram/assemcode.i' werden nirgends
    benutzt, also gestrichen. Das betrifft '..AsOp', 'FLOATASOP_BASE',
    ('MIN' und 'MAX')'MOVERANGE', 'OPTIMDIR', 'OptDir' und '...PsOp' -
    das File ist jetzt leer, wurde aber noch nicht aus den Listen gestrichen.
    neue Versionsnummer: 1.5.40.

24. Ebenso in 'gram/codenode.h' fuer 'ALLTHETREGS', 'BUSY' and 'NOTBUSY',
    '...CASE' (Operanden-Groessen), 'CODE...' (Befehlsklassen),
    dazu gehoerende externe Routinen 'Make_CODE...',
    Adressierungs-Klassen 'II', 'IR', 'IS', 'RI', 'RR', 'RS', 'SI', 'SR'
    und 'SS' sowie die Symbole 'LOTS', 'LOTSANDLOTS' und 'SOMEMORE'.
    weiterhin Version 1.5.40.

25. Ebenso in 'gram/codenode.h' fuer 'is_register', 'has_addr_flag',
    'addr_flag_on', 'assemword3', 'assemword2' und 'assemword1',
    in 'gram/codemacs.h' fuer ('get' und 'set')'assemword'('1', '2' und '3').
    weiterhin Version 1.5.40.

26. CPP-Symbol 'PTOC' als immer gesetzt angenommen. Das betrifft die Files
    'common/dumpsym.c', 'common/symtab.ci', 'common/symtab.i',
    'optimizer/optdriver.P', 'pascl/convert.c', 'pascl/decls.c',
    'pascl/glob1var.ci', 'pascl/init.P', 'pascl/initialize.c', 'pascl/sem.P',
    'pascl/semutil.P', 'pascl/symtab.P', 'pascl/sysprocs.P', 'pgram/pgram.y'
    und 'common/machdep.h', dort die CPP-Symbole 'LOCALSTATIC_NAME',
    'LOCALLAB_NAME', 'GENLAB_PREFIX', 'DOLAB_PREFIX' und 'ASMCOMMENT_CHAR'
    geloescht.
    'MAKEALL', neue Versionsnummer: 1.5.42.

27. Wegen der Beschraenkung auf PTOC die folgenden CPP-Symbole eliminiert:
    'PI', 'PI0', 'PI1', 'PI01', 'PC', 'PXP', 'PTREE' und 'OBJ'.
    Betroffene Files: 'pgram/yycosts.c', 'pgram/yylex.c', 'pgram/yyput.c',
    'pgram/yy.h', 'pgram/yyerror.c', 'pgram/yyget.c', 'pgram/yypanic.c',
    'pgram/yyrecover.c', 'pgram/0.h', 'pgram/yyoptions.c', 'pgram/error.c',
    'pgram/subr.c', 'libpc/whoami.h' und 'pgram/yyid.c' (jetzt leer!).
    'MAKEALL', neue Versionsnummer: 1.5.43.

28. Durch Schritt 27 sind weitere CPP-Symbole als unbenutzt erkannt,
    'pgram/0.h' wurde entsprechend bereinigt.
    'MAKESOME', neue Versionsnummer: 1.5.44.

29. Durch Schritt 27 sind weitere CPP-Symbole als unbenutzt erkannt,
    'gram/manifest' wurde entsprechend bereinigt: 'ADATA', 'ARY', 'BTMASK',
    'BTSHIFT', 'DATA', 'DECREF', 'FTN', 'INCREF', 'ISARY', 'ISFTN', 'ISPTR',
    'ISTRNG', 'PROG', 'PTR', 'STAB', 'STRNG', 'TMASK', 'TSHIFT'.
    'MAKESOME', neue Versionsnummer: 1.5.45.

30. Durch Schritt 27 sind weitere CPP-Symbole als unbenutzt erkannt,
    'gram/macdefs' wurde entsprechend bereinigt: 'ARGINIT', 'AUTOINIT',
    'CFP', 'COUNTREG', 'DSTREG', 'EAX', 'EBX', 'ECX', 'EDI', 'EDX', 'ESI',
    'FPST', 'LR0', 'LR1', 'LR2', 'MAXFREG', 'MAXPARAM', 'MAXRVAR', 'MAXTREG',
    'MINFREG', 'MINPARAM', 'MINRVAR', 'MINTREG', 'PARAMCNT', 'SHIFTREG',
    'SP', 'SRCREG', 'TR0', 'TR1', 'TR2'.
    'MAKESOME', neue Versionsnummer: 1.5.46.

31. Durch Schritt 27 sind weitere CPP-Symbole als unbenutzt erkannt:
    in 'common/machdep.h' entfallen 'DATE_ADDR_REGS' und 'NEW_ASM',
    in 'pgram/0.h' entfaellt 'SCAL'.
    'MAKESOME', neue Versionsnummer: 1.5.47.

32. Schnappschuss als CPIO-File 'ptoc.cpio' gezogen !

33. Unbenutzte Routinen aus der Laufzeit-Bibliothek ('libpc/Makefile....')
    und der 'Distriblist' entfernt: 'sql__afile', 'sql__buffer' ,
    'sql__ftell'; raus aus 'libpc/libpc.h' und 'include/ptoc.h',
    Struktur 'seekptr' raus aus 'libpc/h00vars.h'.
    'MAKEALL', neue Versionsnummer: 1.5.48.

34. 'yyid.c' (leer, siehe Nr. 27) aus 'pcomp/make.files' und aus
    'Distriblist' entfernt
    'gram/assemcode.i' (leer, siehe Nr. 23) aus 'gram/codenode.h' und aus
    'Distriblist' entfernt
    'MAKEALL', neue Versionsnummer: 1.5.50, gesichert auf 'ptoc.neu'.

35. Weiteres Aufraeumen: unbenutzte Routinen, Typen und Variable entfernt
    aus 'gram/codenode.h' (z.T. auch 'pascl/gad.h' und 'gram/codegram.h').
    'MAKEALL', neue Versionsnummer: 1.5.51.

36. Weiteres Aufraeumen: 'gram/codemacs.h' und 'pascl/gad.h' (beide leer),
    Kleinigkeiten in 'gram/codenode.h' und 'gram/codegram.h',
    begonnen mit 'common/hdg.def', 'gram/codeservice.h', 'pgram/f.decls.h',
    'optimizer/gl_vars.i', 'optimizer/more_csg.def', 'optimizer/optdriver.P',
    'pascl/glob1const.ci' und 'pascl/glob1const.i'.
    'MAKEALL', neue Versionsnummer: 1.5.52.

37. Fortgesetztes Aufraeumen, betroffen: 'common/hdg.def', 'common/symtab.ci',
    'common/symtab.i', 'common/utilities.P', 'common/utilities.h',
    'gram/manifest', 'libpc/h00vars.h', 'optimizer/gl_vars.i',
    'optimizer/more_csg.def', 'optimizer/opt_symtab.def',
    'optimizer/optdriver.P', 'optimizer/optm8.P', 'optimizer/optm8.h',
    'pascl/convert.i', 'pascl/decls.h', 'pascl/glob1const.ci',
    'pascl/glob1const.i', 'pascl/glob1type.ci', 'pascl/glob1type.i',
    'pascl/scanner.h', 'pascl/sflags.def', 'pascl/sysprocs.P', 'pgram/0.h',
    'ptoc/wait.h'.
    'MAKEALL', Versionsnummer unveraendert 1.5.52.

38. Fortgesetztes Aufraeumen: in 'pascl/initialize.c', Zeilen (alt) 697 - 839
    geloescht (waren unwirksam durch '#ifdef NOTUSED' und Kommentar).
    'MAKESOME', Versionsnummer unveraendert 1.5.52.

39. Fortgesetztes Aufraeumen: 'common/DSF.P' wird nicht benoetigt !
    geloescht und aus Makefiles, Listen usw. entfernt.
    'MAKEALL', neue Versionsnummer: 1.5.53.

40. Fortgesetztes Aufraeumen: in 'common/util.c', 'common/dumptyp.P',
    'pgram/subr.c' und 'pascl/initialize.c' unbenutzten Code entfernt.
    'MAKESOME', neue Versionsnummer: 1.5.54.

41. In 'optimizer/gl_types.i' und 'optimizer/temp_util.P', Komponente
    'size' in 'Tmolloch' umbenannt in 'molloch_size' (Eindeutigkeit).
    Diverse lokale Variable in diversen Moduln umbenannt (Eindeutigkeit),
    unbenutzten Code entfernt aus 'common/util.c' (jetzt fast leer).
    'MAKEALL', Versionsnummer unveraendert 1.5.54.

42. Fortgesetztes Aufraeumen: in 'pgram/0.h' sind etliche Definitionen
    ueberfluessig, in 'gram/rmap.ci' die drei Komponenten 'rstat' ,
    'touched' und 'rssym' der Struktur 'rmaptab',
    in 'tools/makedepend/cppsetup.c' die Funktion 'lookup',
    in 'pgram/subr.c' die Funktionen 'pcalloc' und 'pstrcpy'
    sowie Zugriffe auf 'eflg' usw. in den Fehler-Routinen.
    'MAKEALL', neue Versionsnummer: 1.5.55, gesichert auf 'ptoc.neu'.

43. Fortgesetztes Aufraeumen: in 'common/symtab.ci' und 'common/symtab.i'
    verschiedene unbenutzte Definitionen entfernt, dazu dann den
    entsprechenden Initialisierungs- oder Dump-Code.
    'MAKEALL', Versionsnummer unveraendert 1.5.55.

44. Fortgesetztes Aufraeumen: in 'common/symtab.ci' und 'common/symtab.i'
    verschiedene unbenutzte Definitionen entfernt, dazu dann den
    entsprechenden Initialisierungs- oder Dump-Code.
    Vorsicht mit dem Dummy-Zweig ('dummy1', 'dummy2', 'dummy3'):
    er dient dazu, fuer alle anderen die Initialisierungen zu machen!
    'MAKEALL', neue Versionsnummer 1.5.60.

45. Fortgesetztes Aufraeumen: in 'gram/macdefs' und 'gram/rmap.ci' sind
    dadurch leer, aus allen Listen entfernt, auch die 'include'-Anweisungen
    fuer sie aus 'optimizer/optm1.P', 'pascl/decls.c', 'pascl/convert.c'
    und 'gram/codenode.h'.
    'MAKEALL', neue Versionsnummer 1.5.61.

46. Routinen fuer Set-Behandlung umbenannt, da ihre Namen die Anfaenge
    anderer Namen waren:
    'Assign' wird zu 'Assign_Set_to_Set', 'Clear' zu 'Clear_this_Set',
    'Delete' zu 'Delete_from_Set', 'Empty' zu 'Empty_check_Set',
    'Equal' zu 'Equal_two_Sets', 'Fill' zu 'Fill_whole_Set',
    'Insert' zu 'Insert_val_into_Set', 'Intersect' zu 'Intersect_Sets',
    'Member' zu 'Member_in_Set', 'Member2' zu 'Member2_in_Set' und
    'Union' zu 'Union_Sets'.
    Betroffene Files: 'optimizer/set_util.c', 'optimizer/set_util.h',
    'optimizer/optm1.P', 'optimizer/optm2.P', 'optimizer/optm5.P',
    'optimizer/optm12.P', 'optimizer/optm15.P' und 'optimizer/temp_util.P'.
    'MAKEALL', neue Versionsnummer 1.5.62.

47. Kleinere Korrekturen usw., Abgabe auf 'sqlport' fuer SQL-DB Releases
    2.4.9 und 3.1.2 ff. mit Versionsnummer 1.5.64.

48. Ueberarbeitung der Copyright-Vermerke, neue Versionsnummer 1.5.70,
    gesichert unter 'ptoc.neu'.

49. Uebernehme Korrekturen von DEC-Alpha (Gloria):
    a) Routine 'cerror' umgestellt auf nur noch einen Parameter
       ('pascl/putilities.c', 'common/utilities.P'),
       neue Versionsnummer 1.5.71.
    b) Bibliotheksroutine 'sql__perrorp' von Typ 'long' umgestellt auf
       'void', bei allen Benutzungen ('libpc/*.c') Parameter explizit als
       'long' uebergeben; neue Versionsnummer 1.5.72.
    c) 'whoami.h' erweitert fuer 64-Bit-Adressierung, weiterhin 1.5.72.

50. Fuer SUN-Sparc das vordefinierte 'sun' statt 'SUN' abfragen
    ('ptoc.h', 'whoami.h'), neue Versionsnummer 1.5.73.

51. Nach dem Einlesen der Optionen (Arrays 'control' und 'control2')
    werden sie im Debug-Fall (Option 'Q') protokolliert
    ('pascl/pcomp.P'), neue Versionsnummer 1.5.74.

52. 'libpc/h00vars.h' enthaelt jetzt Directory '../libpc' im
    '#include "whoami.h"', weil ggfs. selbst mit Directory angesprochen.
    Neue Versionsnummer 1.5.75.

53. 'pgram/0.h' und 'pgram/yy.h' erweitert fuer 64-Bit-Adressierung
    (wie 32 Bit, betrifft nur Tabellengroessen).
    Neue Versionsnummer 1.5.76.

54. Umstellung aller 'Makefile's usw. auf 'Makedefs', das auf der Ziel-
    maschine automatisch aus 'Makedefs.c' erstellt wird.
    Neue Versionsnummer 1.5.77, noch nicht erzeugbar.

55. Bei der Umstellung entdeckt:
    - '-DPYRAMID' deckt in 'optimizer/optm1.P' fehlendes 'ParamDcl' auf,
    geloest durch Auskommentieren eines Zweiges und statt dessen 'otherwise'.
    - '-DPYRAMID' deckt in 'optimizer/optm1.P' fehlendes 'is_structured' auf,
    daraufhin Verzicht auf einen 'ifdef PYRAMID'-Zweig (enthaelt das obige).
    Versionsnummer weiterhin 1.5.77, erstellt.

56. Bei der Umstellung entdeckt:
    Globale Variable 'Type' kollidiert mit Schluesselwort 'type', daher
    umbenannt in 'TypeType'. Deklariert in 'pascl/glob1var.ci' und
    'pascl/glob1var.i', benutzt in 'pascl/sem.P', 'pascl/semutil.P',
    'pascl/symtab.P', 'pascl/sysprocs.P' und 'pgram/pgram.y'.
    Neue Versionsnummer 1.5.78.

57. Bei der Umstellung entdeckt: 'ifdef PYRAMID' verursacht
    - in 'pascl/decls.c' ein fuehrendes '_',
    - in 'optimizer/optm15.P' ein 'force_register',
    - in 'pascl/symtab.P' die 'SClass' auf 'SNULL' statt 'EXTERN',
    - in 'pascl/sysprocs.P' ein fuehrendes '_' und 'control ['E']',
    alle unterdrueckt durch 'PYRAMID_DOUBTFUL'; weiterhin 1.5.78.

58. Umsetzung von 'PYRAMID' in 'PYRAMID_DOUBTFUL' in allen anderen Moduln
    (ausser 'libpc') ebenfalls durchgefuehrt wegen falscher Behandlung
    von geschachtelten Prozeduren; weiterhin 1.5.78.

59. Stand laesst sich uebersetzen und kann anschliessend sich selbst
    uebersetzen, Ergebnis ist identisch!!
    Test auf 3.1.1 zeigt identischen C-Code wie 1.5.63.

60. Aufraeumen: 'optimizer/set_util.h' verliert 'Delete_from_Set',
    'optimizer/more_csg.def' verliert 'ListTailFieldLink' und
    'CwhileLabelField'.

61. Umbennungen fuer Eindeutigkeit: 'UShort...' wird 'Ushort...'
    zur Unterscheidung von 'Short...' ('UChar...' wird 'Uchar...'
    wegen 'Char...', 'ULong...' wird 'Ulong...' wegen 'Long...',
    'UByte...' wird 'Ubyte...' wegen 'Byte...') bei
       'UShortAlignment', 'UCharAlignment', 'ULongAlignment', 'UShortSize',
       'UCharSize', 'ULongSize', 'UShortType', 'UCharType', 'ULongType',
       'UShortPtr' und 'UBytePtr'
    Betroffene Dateien:
       'common/dump_hdg.P', 'common/dumpsym.c', 'common/fold.c',
       'common/genc.P', 'common/symtab.ci', 'common/symtab.i'
       'optimizer/optm1.P', 'optimizer/optm11.P', 'optimizer/optm5.P',
       'pascl/convert.c', 'pascl/convert.i', 'pascl/decls.c',
       'pascl/glob1var.ci', 'pascl/glob1var.i', 'pascl/initialize.c',
       'pascl/sem.P', 'pascl/semutil.P', 'pascl/symtab.P', 'pascl/sysprocs.P',
       und 'pgram/pgram.y'
    Ausserdem Verzicht auf die folgenden Definitionen aus 'pascl/convert.i'
    (einzige Benutzung in 'pascl/convert.c', dort ersetzt durch ihren
    jeweiligen Wert):
	#define     CharP       BytePtr
	#define     UcharP      UbytePtr
	#define     ShortP      ShortPtr
	#define     UshortP     UshortPtr
	#define     IntegerP    IntegerPtr
	#define     UnsignedP   UnsignedPtr
	#define     LongP       IntegerPtr
	#define     UlongP      UnsignedPtr
    Neue Version: 1.5.81

62. Umbenennung: 'g' wird 'g1' (wegen 'begin', 'Hdg' usw.). Betroffen:
    'pascl/glob1var.ci', 'pascl/glob1var.i', 'pascl/sem.P',
    'pascl/semutil.P', 'pascl/symtab.P', 'pascl/sysprocs.P' und
    'pgram/pgram.y'. Neue Version: 1.5.82

63. Variable 'N' umbenannt in 'N_redu' (Files: 'pgram/yy.h' und
    'pgram/yyparse.c'), um bessere Erkennung zu garantieren.
    Neue Version: 1.5.83

64. Prozedur-Parameter 't1' und 't2' umbenannt in 'typ_1' bzw. 'typ_2'
    zur Unterscheidung von globalen Variablen 't1', 't2'.
    in 'EqualSizeTypes' ('common/genc.P') sowie
    'is_equal_set' ('common/utilities.P')
    Neue Version: 1.5.84

65. Aufraeumen in 'libpc/sql__catchae.c', auf MX300i ('SVR4') gibt es
    den zweiten Parameter ('code') nicht.
    Neue Version: 1.5.85

66. Umbenennen: 'ExitDescr' (in 'ProcTableType') wird 'ProcExitDescr'
    (unterscheiden von 'ExitDescriptor' und anderen Zusammensetzungen).
    Betroffen: 'optimizer/gl_types.i', 'optimizer/optm2.P' und
    'optimizer/optm9.P'. Neue Version: 1.5.86

67. 'optimizer/optm11.P' und 'optimizer/optm12.P' werden nicht benutzt,
    also aus 'pcomp/make.files' entfernt. Neue Version: 1.5.87.

68. Aufraeumen in 'optimizer/more_csg.def': Unbenutzt sind
    'Node1link', 'Node2link', 'Node3link', 'Node5link', 'Node9link',
    'Cnode11field', 'CdscField', 'CtailLink', 'CifLineNo', 'CssLineNo',
    'ClsLineNo' und 'CcaseNext'. Neue Version: 1.5.88.

69. Aufraeumen in 'ptoc/wait.h': Unbenutzt sind 'w_stopsig', 'WUNTRACED'
    und 'WIFEXITED'. Neue Version: 1.5.89.

70. Fuer MIPS (= 'NMP'), in 'ptoc.h' 'memcmp' benutzen statt 'sql__ucmp'.
    Version: 1.5.90.

71. In allen Moduln, fehlende 'what'-Strings eingebaut und fehlende Filenamen
    ergaenzt. Version: 1.5.91.

72. Angefangen mit Aufraeumen entsprechend 'tmp.dodel': in ..., geloescht ...
    'optimizer/set_util.c':  'Delete_from_Set'
    'optimizer/gl_consts.i': 'DISP_LIST'
    'pascl/sflags.def':      'AlphaFlag', 'ReferencedFlag', 'LoopFlag'
    'pascl/scanner.h':       'PrintErrorLine'
    'gram/manifest': 'CHAR', 'SHORT', 'INT', 'LONG', 'FLOAT', 'DOUBLE',
            'STRTY', 'UCHAR', 'USHORT', 'UNSIGNED', 'ULONG', 'TWORD'
    'gram/code.ch':    'BuildType', 'exname', 'is_structured' - jetzt leer
    'gram/codenode.h': 'gram/code.ch' ist leer, nicht mehr '#include'
    'pascl/p1m2.P': 'SCANNER' nie definiert, Zweig '#ifdef SCANNER' geloescht
    Neue Version: 1.5.93, gesichert in 'ptoc.tmp'.

73. Weiteres Aufraeumen entsprechend 'tmp.dodel': Unbenutzte 'SDisplacement', 
    'SAutoOff', 'SParmOff', 'SRmap', 'SProcsRef', 'SNextReg', 'ConInfo' und
    'SBitLen' geloescht in 'common/dumpsym.c', 'common/symtab.ci' und
    'common/symtab.i'. Neue Version: 1.5.94.

74. Weiteres Aufraeumen entsprechend 'tmp.dodel': in ..., geloescht ...
    'pascl/glob1const.i': 'ProcLocal', 'StatBase', 'LocalBase', 'InitBase', 
            'undefined', 'ProcOpen' and 'SetRange'
    'pascl/glob1type.i': 'ArgString'
    'pascl/glob1var.ci': 'ProcLevel' und 'CheckIOflag'
    'pascl/glob1var.i': 'CheckIOflag'
    'pascl/initialize.c': 'CheckIOflag'
    Version weiterhin 1.5.94.

75. Weiteres Aufraeumen entsprechend 'tmp.dodel': 'SCANNER' nie definiert,
    Zweig '#ifdef SCANNER' in 'pascl/_pascl_i.P' geloescht;
    dito undefinierten Kopf 'ScannerI' und 'scan' in 'pascl/scanner.h'.
    Version weiterhin 1.5.94.

76. Weiteres Aufraeumen entsprechend 'tmp.dodel': in 'gram/codegram.h'
    stehen 'XformInit' und 'XformDone', nirgends definiert oder benutzt,
    geloescht; File jetzt leer, entfernt (auch aus 'pascl/pcomp.P').
    Version weiterhin 1.5.94.

77. Weiteres Aufraeumen: In 'pascl/sem.P' wird in 'IndexedVar' eine lokale
    Variable 'padding' abhaengig von 'nflag' (= Option '-qn') gesetzt,
    aber nie benutzt: geloescht. 
    Dito in 'optimizer/gl_consts.i', unbenutzte Makros 'NEW' und 'DISPOSE'.
    In der durch 'datafile' adressierten Struktur 'datafield' werden die Felder
    'typefield' und 'offsetfield' zwar gesetzt (Modul 'pascl/initialize.c',
    Routine 'OutputInit'), aber nie benutzt: geloescht.
    Betroffen: 'common/genc_util.c', 'gram/data.h' und 'pascl/initialize.c'.
    In 'OutputInit' sind jetzt die Parameter 'typ' and 'offset' unbenutzt,
    geloescht; betroffen: 'pascl/initialize.c', 'pascl/initialize.h'
    und 'pascl/sysprocs.P'.
    Version weiterhin 1.5.94.

78. Version erfolgreich getestet, gesichert als 'ptoc.1594'.

79. Aufraeumen in 'ptoc/ptoc.c': Unbenutzte Variable eliminiert
    ('optim', 'optargs', 'p2', 'c2', 'pc3', 'mv', 'mvargs', 'ld', 'ldargs', 
    'ldargx', 'lpc', 'lc', 'lg', 'lm', 'crt0', 'gcrt0', 'mcrt0', 'pcmain', 
    'tmp', 'Tlflag', 'cflag', 'pflag', 'tflag', 'wflag', 'np', 'nxo', 'onepso',
    'opascal', 'npascal', 'environ'), Meldungs-String 'ptoc' (bisher 'pascal'). 
    Ausserdem 'how_pc' (Ausgabe bei Aufruf-Fehler) in '.keep'- und '.try'-
    Versionen integriert.
    Neue Version: 1.5.95.

80. 'optimizer/optm9.P' und 'optimizer/optm15.P' rufen Funktionen auf, die
    frueher in 'optimizer/optm11.P' und 'optimizer/optm12.P' standen und jetzt
    als Dummy in 'optimizer/kludge2.c' stehen; deshalb werden die alten 
    Header-Dateien doch noch gebraucht.  Version weiterhin 1.5.95.

81. Die Option '-v' an 'ptoc' ('ptoc/ptoc.c') setzt 'debug', darauf werden
    die aufgerufenen Programme mit Argumenten protokolliert. Bisher unterblieb
    dann die Ausfuehrung, jetzt erfolgt sie doch. Version weiterhin 1.5.95.

82. Abgabe Version 1.5.95

83. Aenderung 'libpc/sql__setrang.c' und 'libpc/sql__ucmp.c':
    Microsoft-C kann kein 'asm', deshalb Unterdrueckung durch andere
    '#if...'. Neue Version: 1.5.96

84. Integration Aenderungen fuer DEC-Alpha (Gloria), neue Version: 1.5.97.


===== Optionen =====
-O  : (1.5.94) <         i += 1; --- >         i = i + 1;
      common subexpression elimination
-OG : (1.5.94) kein Unterschied gegen '-O'


85. Ingo 2.9.96: Ersetzung von malloc durch calloc, wo frueher sbrk stand:
	./common/commonalloc.c
	./common/stab.c
	./pascl/pascalalloc.c
	./pgram/yyput.c
    Ptoc geht davon aus, dass der allozierte Bereich zero-filled ist.
    Malloc garantiert das nicht, calloc ja. Neue Version: 2.0.5.




===== TODO =====        Offene Punkte :
'Makedefs.c' fuer 'libpc'-Moduln erweitern ODER SUN-Assembler 'sql__ucmp'
Wenn Range Check, dann auch Pointer auf <> NIL pruefen
Wenn Range Check, dann bei 'CASE' ohne 'OTHERWISE' ein 'default: abort' gener.
Vergleich signed / unsigned soll Fehler liefern (Dialog: natural / int2,
	int2 mit -1 als undef: -1(int2) <= 10(nat) liefert FALSE !! )
bei 'fold_convert'-Fehler Zeilennummer ausgeben (Thomas Anhaus)
alle Optionen dokumentieren
Enumeration-Typen 0..255 in einem Byte
Modul-Struktur der 'libsqlptc', z.B. 'setops'
	sql__afile in sql__buffer nehmen
lokale Variable auf unsinnige Werte initialisieren (neue Option)
Warnings bei undefinierten Optionen (z.B. '-E')
Crashes bei unbekannten Identifiern beseitigen
bei Fehlern KEIN '.c'-File erzeugen, exit-Code setzen
bei Range-Check, fuer Laufzeit 'sql__pred' und 'sql__succ' generieren
geschachtelte Prozeduren umbenennen, z.Zt. nicht eindeutig
C-Code fuer Typ 'text' pruefen
Performance: IN [ kleiner Set ] ==> .. == a || .. == b || usw.
Performance: DIV 2**n ==>  >> n
Performance:  *  2**n ==>  << n
Performance: MOD 2**n ==>  & ( 2**n - 1 )
'cccprint' am Prozedur-Ende generieren (dann auch am Anfang)
Reservierte Identifier (Carsten S.): range, continue, leave, value
 " " (C): break, switch, loop, return
Identifier: 8 Zeichen signifikant fuer externe, 16 fuer interne
String-Laengen pruefen
