(* CODING.PAS -- translate GEOS characters to IBM code page 437 ** Copyright (c) 1995,1996 Jochen Metzinger ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2, or (at your option) ** any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *) UNIT Coding; INTERFACE USES global; TYPE CODE_TYPE = (uk_coding, ge_coding); FUNCTION default_code: CODE_TYPE; (* value of default coding style *) FUNCTION country: STRING; (* name of this style *) PROCEDURE SetCoding(code: CODE_TYPE); (* set coding style CODE *) FUNCTION TransStr(s: STRING): STRING; (* Translate S in a PC string *) FUNCTION TransChr(ch: CHAR): STRING; (* Translate CH in a PC string *) IMPLEMENTATION CONST CodeTable: ARRAY [CODE_TYPE, ' '..'~'] OF CHAR = ((* uk_coding: english *) (' ','!','"','#','$','%','&','''','(',')','*','+',',','-','.','/', '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?', '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_', '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o', 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~'), (* ge_coding: german *) (' ','!','"','#','$','%','&','''','(',')','*','+',',','-','.','/', '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?', '','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', 'P','Q','R','S','T','U','V','W','X','Y','Z','','','','^','_', '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o', 'p','q','r','s','t','u','v','w','x','y','z','','','','')); VAR used_code: CODE_TYPE; FUNCTION default_code: CODE_TYPE; BEGIN (*$IFNDEF GERMAN*) default_code := uk_coding; (*$ELSE*) default_code := ge_coding; (*$ENDIF*) END; (* default_code *) FUNCTION country: STRING; BEGIN (*$IFNDEF GERMAN*) country := 'uk'; (*$ELSE*) country := 'ge'; (*$ENDIF*) END; (* country *) PROCEDURE SetCoding(code: CODE_TYPE); BEGIN used_code := code; END; (* SetCoding *) FUNCTION TransChr(ch: CHAR): STRING; BEGIN IF ch < ' ' THEN TransChr := '^^' + CHR(ORD(ch)+64) ELSE IF ch <= '~' THEN TransChr := CodeTable[used_code,ch] ELSE IF ch = #$79 THEN TransChr := '{C=}' ELSE TransChr := '{'+long2str(ORD(ch),2)+'}'; END; (* TransChr *) FUNCTION TransStr(s: STRING): STRING; VAR i: INTEGER; r: STRING; BEGIN r := ''; FOR i := 1 TO Length(s) DO r := r + TransChr(s[i]); TransStr := r; END; (* TransStr *) BEGIN used_code := default_code; END. (* coding *)