DataMuseum.dk

Presents historical artifacts from the history of:

DANOSI

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DANOSI

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦bcf3cd1c3⟧ TextFile

    Length: 10930 (0x2ab2)
    Types: TextFile
    Names: »PASCF1.PAS«

Derivation

└─⟦e2123b2a1⟧ Bits:30010498 DVBS1.SW2103.src.1.8-1 Pascal TOOLS JTAS 1989-04-26 LEIF NIELSEN E.d.
    └─⟦this⟧ »PASCF1.PAS« 

TextFile

 \r
  CONST\r
    AlfaLeng = 10;\r
      {!!!!!!!!! Implementation Dependency !!!!!!! }\r
      {Minimum and Maximum Char Values }\r
    MinChar = 0;\r
    MaxChar = 127;\r
    LastPascSymbol = 40;\r
      {the following constants must all be changed together, so that their\r
      values agree with theri names:\r
      }\r
    BufferSize = 140;\r
    BuffSzP1 = 141;\r
    BuffSzM1 = 139;\r
    BuffSzDiv10 = 14;\r
      {                  }\r
    MaxReadRightCol = 999;\r
    MaxWriteRightCol = 72;\r
 \r
  TYPE\r
    LanguageTypes = (StandardPascal, RTP, TurboPascal3, TurboPascal4);\r
    LanguageVariations = (ProgramNotNeeded, Units, FreeDeclaration,\r
                          ElseInCase, OtherwiseInCase, UnderscoreId,\r
                          NestedComments, Loops, Locks, Processes, Pools,\r
                          Exports);\r
    CommentType = (CurlyComment, StarComment, AngleComment, EolComment);\r
    Alfa = PACKED ARRAY [1.. AlfaLeng] OF Char;\r
      {!!!!!!!!! Implementation dependency: !!!!!!!!!!}\r
      {set size may not allow set of char }\r
    CharSet = SET OF char;\r
    StatmntTypes = (ForWithwhileStatement, RepeatStatement, LoopStatement,\r
                    IfStatement, CaseStatement, CompoundStatement,\r
                    OtherStatement);\r
    Symbols = (ProgSymbol, Comment, BeginSymbol, EndSymbol,\r
               Semicolon, ConstSymbol, TypeSymbol,\r
               RecordSymbol, ColonSymbol, EqualSymbol,\r
               PeriodSymbol, Range, CaseSymbol, OtherSymbol,\r
               IfSymbol, ThenSymbol, ElseSymbol, DoSymbol,\r
               OfSymbol, ForSymbol, WithSymbol, WhileSymbol,\r
               RepeatSymbol, UntilSymbol, Identifier,\r
               VarSymbol, ProcSymbol, FuncSymbol, LeftBracket,\r
               RightBracket, CommaSymbol, LabelSymbol, UnitSymbol,\r
               UsesSymbol, IMPLEMENTATIONSYMBOL, LoopSymbol, EndloopSymbol,\r
               LockSymbol, LockmessSymbol, ProcessSymbol, PoolSymbol,\r
               ExportSymbol, OtherwiseSymbol,\r
               LeftParenth, RightParenth, AlphaOperator)\r
      { It is used that Progsymbol is the first and that AlphaOperator\r
      is the last };\r
    Width = 0 .. BufferSize;\r
    Margins = -100 .. BufferSize;\r
    SymbolSet = SET OF Symbols;\r
    OptionSize= -99 .. 99;\r
    CommentText = ARRAY [1.. BuffSzDiv10] OF Alfa;\r
    SymbolString = ARRAY [Width] OF Char;\r
 \r
  VAR\r
    LanguageName: LanguageTypes;\r
    Language: SET OF LanguageVariations;\r
    ProgramText: Boolean;\r
    ChIsEOL,\r
    NextChIsEOL: Boolean;\r
    I: Integer {Used as for loop index};\r
    Character: Char;\r
    ReadColumn,\r
    ReadRightCol:0 .. 1000;\r
    OutputCol,\r
    WriteColumn,\r
    LeftMargin,\r
    ActualLeftMargin,\r
    ReadLeftCol,\r
    WriteLeftCol,\r
    WriteRightCol: Margins;\r
    DisplayIsOn,\r
    ProcNamesWanted,\r
    EndCommentsWanted,\r
    PackerIsOff,\r
    SavedBunch,\r
    BunchWanted,\r
    NoFormatting: Boolean;\r
    LineNumber,\r
    Increment: Integer;\r
    IndentIndex,\r
    LongLineIndent,\r
    SymbolGap,\r
    DeclarAlignment,\r
    StatmtSeparation,\r
    ProcSeparation: OptionSize;\r
    StartSymbol,\r
    LastSymbol,\r
    SymbolName:Symbols;\r
    AlphaSymbols,\r
    EndUses,\r
    EndLabel,\r
    EndConst,\r
    EndTYpe,\r
    EndVar: SymbolSet;\r
    Symbol: SymbolString;\r
    Length: Width;\r
    SymbolIsNumber,\r
    LastProgPartWasBody: Boolean;\r
    Digits,\r
    BinaryDigits,\r
    OctalDigits,\r
    TenDigits,\r
    HexDigits,\r
    LettersAndDigits: CharSet;\r
    Oldest: Width;\r
    CharCount: LongInt { Count of total chars read.\r
                       But it is off by BufferSize after end of first body.\r
                       It is imperative that CharCount be monotonically\r
                       increasing during processing of a body. And that it\r
                       never return to a value <= BufferSize, After passing\r
                       that point. Thus "DoBlock" may reset it as low as\r
                       possible, limiting the length of a procedure to\r
                       "MaxInt - BufferSize" characters. };\r
    Main: CommentText;\r
    MainNmLength: Width;\r
    Blanks,\r
    Zeroes: Alfa;\r
    UnWritten: ARRAY [width] OF RECORD\r
                                   ch:Char;\r
                                   ChIsEndLine: Boolean;\r
                                   IndentAfterEOL: Margins;\r
                                END;\r
    PascalSymbol: ARRAY[1..LastPascSymbol] OF Alfa;\r
    PascSymbolName: ARRAY[1..LastPascSymbol] OF Symbols;\r
    NameOf: ARRAY[Char] OF Symbols;\r
    StatementTypeOf: ARRAY[Symbols] OF StatMntTypes;\r
    InputPtr: Char;\r
    I_buff, O_buff: ARRAY[1..File_Buff_size] OF byte;\r
 \r
      { Procedure for Turbo Pascal }\r
    PROCEDURE GetInput;\r
    LABEL NextInput;\r
    BEGIN\r
      NextInput:\r
        IF Eoln(Input)\r
          THEN\r
          BEGIN\r
            InputPtr := ' ';\r
            ReadLn;\r
          END\r
        ELSE\r
          Read(InputPtr);\r
      IF ord(InputPtr) <32 THEN GOTO NextInput;\r
    END {GetInput};\r
 \r
    PROCEDURE Pack(Symbol: SymbolString; I:Integer; VAR PackSymbol: Alfa);\r
 \r
    VAR\r
      J,\r
      K: Integer;\r
 \r
    BEGIN\r
      K := 1;\r
      FOR J := I TO I + AlfaLeng - 1 DO\r
        BEGIN\r
          PackSymbol[K] := Symbol[J];\r
          K := K + 1;\r
        END;\r
    END { Pack };\r
 \r
 \r
    PROCEDURE UnPack(PackSymbol: Alfa; VAR Symbol: SymbolString; I:Integer);\r
 \r
    VAR\r
      J,\r
      K: Integer;\r
 \r
    BEGIN\r
      K := 1;\r
      FOR J := I TO I + AlfaLeng - 1 DO\r
        BEGIN\r
          Symbol[J] := PackSymbol[K];\r
          K := K + 1;\r
        END;\r
    END { UnPack };\r
 \r
      { End Special Turbo Pascal Procedures }\r
 \r
 \r
    PROCEDURE ConstantsInitialization;\r
    BEGIN\r
      Main[1] := 'MAIN      '; MainNmLength := 4;\r
      Blanks := '          '; Zeroes :='0000000000';\r
      FOR I := 0 TO BuffSzM1 DO\r
        WITH UnWritten[I] DO\r
          BEGIN Ch:= 'A'; ChIsEndLine := False; IndentAfterEOL := 0\r
          END;\r
      FOR Character := Chr(MinChar) TO Chr(MaxChar) DO\r
        NameOf[Character] := OtherSymbol;\r
      Character := ' ';  NameOf['('] := LeftParenth;\r
      NameOf[')'] := RightParenth;  NameOf['='] := EqualSymbol;\r
      NameOf[','] := CommaSymbol;  NameOf['.'] := PeriodSymbol;\r
      NameOf['['] := LeftBracket; NameOf[']'] := RightBracket;\r
      NameOf[':'] := ColonSymbol; NameOf['<'] := EqualSymbol;\r
      NameOf['>'] := EqualSymbol;  NameOf[';'] := SemiColon;\r
      PascalSymbol[1] := 'PROGRAM   ';  PascalSymbol[2] := 'BEGIN     ';\r
      PascalSymbol[3] := 'END       ';  PascalSymbol[4] := 'CONST     ';\r
      PascalSymbol[5] := 'TYPE      ';  PascalSymbol[6] := 'VAR       ';\r
      PascalSymbol[7] := 'RECORD    ';  PascalSymbol[8] := 'CASE      ';\r
      PascalSymbol[9] := 'IF        ';  PascalSymbol[10] := 'THEN      ';\r
      PascalSymbol[11] := 'ELSE      ';  PascalSymbol[12] := 'DO        ';\r
      PascalSymbol[13] := 'OF        ';  PascalSymbol[14] := 'FOR       ';\r
      PascalSymbol[15] := 'WHILE     ';  PascalSymbol[16] := 'WITH      ';\r
      PascalSymbol[17] := 'REPEAT    ';  PascalSymbol[18] := 'UNTIL     ';\r
      PascalSymbol[19] := 'PROCEDURE ';  PascalSymbol[20] := 'FUNCTION  ';\r
      PascalSymbol[21] := 'LABEL     ';  PascalSymbol[22] := 'IN        ';\r
      PascalSymbol[23] := 'MOD       ';  PascalSymbol[24] := 'DIV       ';\r
      PascalSymbol[25] := 'AND       ';  PascalSymbol[26] := 'OR        ';\r
      PascalSymbol[27] := 'NOT       ';  PascalSymbol[28] := 'ARRAY     ';\r
      PascalSymbol[29] := 'UNIT      ';  PascalSymbol[30] := 'USES      ';\r
      PascalSymbol[31] := 'IMPLEMENTA';\r
      PascalSymbol[32] := 'LOOP      ';  PascalSymbol[33] := 'ENDLOOP   ';\r
      PascalSymbol[34] := 'LOCK      ';  PascalSymbol[35] := 'LOCKMES   ';\r
      PascalSymbol[36] := 'PROCESS   ';  PascalSymbol[37] := 'POOL      ';\r
      PascalSymbol[38] := 'EXPORT    ';  PascalSymbol[39] := 'OTHERWISE ';\r
      PascalSymbol[40] := 'NOSYMBOL  ';\r
      PascSymbolName[1] := ProgSymbol;   PascSymbolName[2] := BeginSymbol;\r
      PascSymbolName[3] := EndSymbol ;   PascSymbolName[4] := ConstSymbol;\r
      PascSymbolName[5] := TypeSymbol;   PascSymbolName[6] := VarSymbol;\r
      PascSymbolName[7] := RecordSymbol;   PascSymbolName[8] := CaseSymbol;\r
      PascSymbolName[9] := IFSymbol;   PascSymbolName[10] := ThenSymbol;\r
      PascSymbolName[11] := ElseSymbol;   PascSymbolName[12] := DoSymbol;\r
      PascSymbolName[13] := OfSymbol;   PascSymbolName[14] := ForSymbol;\r
      PascSymbolName[15] := WhileSymbol;   PascSymbolName[16] := WithSymbol;\r
      PascSymbolName[17] := RepeatSymbol;   PascSymbolName[18] := UntilSymbol;\r
      PascSymbolName[19] := ProcSymbol;   PascSymbolName[20] := FuncSymbol;\r
      PascSymbolName[21] := LabelSymbol;\r
      FOR I := 22 TO 28 DO PascSymbolName[I] := AlphaOperator;\r
      PascSymbolName[29] := UnitSymbol;   PascSymbolName[30] := UsesSymbol;\r
      PascSymbolName[31] := IMPLEMENTATIONSYMBOL;\r
      PascSymbolName[32] := LoopSymbol;    PascSymbolName[33] := EndloopSymbol;\r
      PascSymbolName[34] := LockSymbol;    PascSymbolName[35] := LockmessSymbol;\r
      PascSymbolName[36] := ProcessSymbol;    PascSymbolName[37] := PoolSymbol;\r
      PascSymbolName[38] := ExportSymbol;  PascSymbolName[39] := OtherwiseSymbol;\r
      PascSymbolName[40] := Identifier;\r
      IF NOT (FreeDeclaration IN Language) THEN\r
        BEGIN\r
          PascSymbolName[29] := Identifier;   PascSymbolName[30] := Identifier;\r
        END;\r
      IF NOT (Units IN Language) THEN\r
        PascSymbolName[31] := Identifier;\r
      IF NOT(Loops IN Language) THEN\r
        BEGIN\r
          PascSymbolName[32] := Identifier;    PascSymbolName[33] := Identifier;\r
        END;\r
      IF NOT(Locks IN Language) THEN\r
        BEGIN\r
          PascSymbolName[34] := Identifier;    PascSymbolName[35] := Identifier;\r
        END;\r
      IF NOT (Processes IN Language) THEN\r
        PascSymbolName[36] := Identifier;\r
      IF NOT (Pools IN Language) THEN\r
        PascSymbolName[37] := Identifier;\r
      IF NOT (Exports IN Language) THEN\r
        PascSymbolName[38] := Identifier;\r
      IF NOT (OtherwiseInCase IN Language) THEN\r
        PascSymbolName[39] := Identifier;\r
      FOR SymbolName := ProgSymbol TO AlphaOperator DO\r
        StatementTypeOf[SymbolName] := OtherStatement;\r
      StatementTypeOf[BeginSymbol] := CompoundStatement;\r
      StatementTypeOf[CaseSymbol] := CaseStatement;\r
      StatementTypeOf[IfSymbol] := IfStatement;\r
      StatementTypeOf[ForSymbol] := ForWithWhileStatement;\r
      StatementTypeOf[WhileSymbol] := ForWithWhileStatement;\r
      StatementTypeOf[WithSymbol] := ForWithWhileStatement;\r
      StatementTypeOf[LockSymbol] := ForWithWhileStatement;\r
      StatementTypeOf[LockmessSymbol] := ForWithWhileStatement;\r
      StatementTypeOf[RepeatSymbol] := RepeatStatement;\r
      StatementTypeOf[LoopSymbol] := LoopStatement;\r
    END {ConstantInitialization};\r