|
|
DataMuseum.dkPresents historical artifacts from the history of: DANOSI |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DANOSI Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 10930 (0x2ab2)
Types: TextFile
Names: »PASCF1.PAS«
└─⟦e2123b2a1⟧ Bits:30010498 DVBS1.SW2103.src.1.8-1 Pascal TOOLS JTAS 1989-04-26 LEIF NIELSEN E.d.
└─⟦this⟧ »PASCF1.PAS«
\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