ZSyntax10.Scn.FntSyntax10b.Scn.Fnt 1o#o'+9 Qn UU0U[ParcElemsAlloc+J MODULE HostSYS; (** RD 26-May-96*) IMPORT AmigaDos; CONST BigEndianMachine*=TRUE; (* 680x0 is big endian, i386 is little endian *) VAR (* Array which maps a character in the Oberon character set into a character in the host character set. *) inverseMapping:ARRAY 256 OF CHAR; (* Array which maps a character in the host character set into a character in the Oberon character set. *) mapping:ARRAY 256 OF CHAR; PROCEDURE StdOut*(str: ARRAY OF CHAR; len: LONGINT); BEGIN IF AmigaDos.Write(AmigaDos.Output(),str,len)=1 THEN END END StdOut; PROCEDURE IsNameChar1*(ch:CHAR):BOOLEAN; (* Is ch valid for first character of a name name? *) BEGIN RETURN (('A'<=ch) & (ch<='Z')) OR (('a'<=ch) & (ch<='z')) OR (ch='.') OR (ch='/') END IsNameChar1; PROCEDURE IsNameChar*(ch:CHAR):BOOLEAN; (* Is ch valid for second to last character of a name? *) BEGIN RETURN (('A'<=ch) & (ch<='Z')) OR (('a'<=ch) & (ch<='z')) OR (('0'<=ch) & (ch<='9')) OR (ch='.') OR (ch='/') OR (ch=':') OR (ch='_') END IsNameChar; PROCEDURE toHost*(ch:CHAR):CHAR; (* Convert charcter from host char set to Oberon char set *) BEGIN RETURN inverseMapping[ORD(ch)] END toHost; PROCEDURE toOberon*(ch:CHAR):CHAR; (* Convert charcter from host char set to Oberon char set *) BEGIN RETURN mapping[ORD(ch)] END toOberon; PROCEDURE makeMapping(ch1,ch2:CHAR); VAR ch:CHAR; BEGIN IF mapping[ORD(ch1)]#ch2 THEN (* other mappings caused this to be already ok. *) IF mapping[ORD(ch2)]#ch2 THEN (* was already substituted. Search for new location of ch2. *) ch:=mapping[ORD(ch2)]; WHILE mapping[ORD(ch)]#ch2 DO ch:=mapping[ORD(ch)] END; ch2:=ch END; mapping[ORD(ch2)]:=mapping[ORD(ch1)]; mapping[ORD(ch1)]:=ch2 END END makeMapping; PROCEDURE initMapping; VAR i:INTEGER; BEGIN FOR i:=0 TO 0FFH DO mapping[i]:=CHR(i) END END initMapping; PROCEDURE createInverseMapping; VAR i:INTEGER; BEGIN FOR i:=0 TO 0FFH DO inverseMapping[ORD(mapping[i])]:=CHR(i) END END createInverseMapping; BEGIN initMapping; makeMapping( 00DX,00AX); makeMapping( 0C4X,""); makeMapping( 0D6X,""); makeMapping( 0DCX,""); makeMapping( 0E4X,""); makeMapping( 0EBX,""); makeMapping( 0EFX,""); makeMapping( 0F6X,""); makeMapping( 0FCX,""); makeMapping( 0E2X,""); makeMapping( 0EAX,""); makeMapping( 0EEX,""); makeMapping( 0F4X,""); makeMapping( 0FBX,""); makeMapping( 0E0X,""); makeMapping( 0E8X,""); makeMapping( 0ECX,""); makeMapping( 0F2X,""); makeMapping( 0F9X,""); makeMapping( 0E1X,""); makeMapping( 0E9X,""); makeMapping( 0E7X,""); makeMapping( 0F1X,""); makeMapping( 0DFX,""); createInverseMapping END HostSYS. Date Author Modification 1996-08-11 degner@pallas.amp.uni-hannover.de Created first AMIGA version.