EBCDIC-Codierung


%!PS-Adobe-1.0
%%Creator: Holger Gehringer
%%Title: Beispiel fuer EBCDIC Kodierung
%%CreationDate: Mo, 23.11.1998
%%DocumentMedia: A4 595 842 0 () ()
%%Orientation: Portrait
%%Pages: (atend)
%%DocumentFonts: Times-Roman Helvetica
%%EndComments

% In diesem Programm wird der Codierungsvektor eines Fonts komplett ersetzt. Als
% Beispiel wird ein Postscript-Standard-Font nach der EBCDIC-Konvention codiert.

/ReEncodeDict 5 dict def      % Lokaler Speicher fuer ReEncode
/ReEncode                     % ReEncode codiert einen existierenden Font neu;
{ ReEncodeDict begin          % 3 Parameter werden benoetigt:
    /NewEncoding exch def     % neuer Codierungsvektor
    /NewFontname exch def     % neuer Font-Name
    /BaseFontname exch def    % Name des Basis-Fonts
    /BaseFontDict             % Basis-Font
    BaseFontname findfont def
    /NewFont BaseFontDict     % Dictionary fuer neuen Font
    maxlength dict def

    BaseFontDict              % Alle Eintraege des alten Font-Dictionaries
    { exch dup dup /FID ne    % werden kopiert. Ausgenommen bleiben FID-
      exch /Encoding ne and   % Eintrag und Codierungsvektor.
      { exch NewFont
      3 1 roll put
      }
      { pop pop
      } ifelse
    } forall

    NewFont /FontName         % Der neue Name wird eingetragen.
    NewFontname put
    NewFont /Encoding         % neuer Codierungsvektor wird eingetragen
    NewEncoding put

    NewFontname NewFont       % Neuen Font definieren
    definefont pop            % Das von definefont auf dem Stack gelassene
  end                         % Dictionary wird nicht gebraucht.
} def

%%EndProlog

%%Page: 1 1
/EBCDIC 256 array def         % EBCDIC-Codierungsvektor
0 1 255                       % gesamten Vektor mit .notdef initialisieren
{ EBCDIC exch
  /.notdef put
} for
EBCDIC                        % Zeichen des Codes werden an entsprechende
dup 8#100 /space put          % Stelle geschrieben
dup 8#112 /cent put           % (Achtung: nicht alle 256 Codes sind besetzt
dup 8#113 /period put
dup 8#114 /less put
dup 8#115 /parenleft put
dup 8#116 /plus put
dup 8#117 /bar put

dup 8#120 /ampersand put

dup 8#132 /exclam put
dup 8#133 /dollar put
dup 8#134 /asterisk put
dup 8#135 /parenright put
dup 8#136 /semicolon put
dup 8#137 /asciitilde put

dup 8#140 /hyphen put
dup 8#141 /slash put

dup 8#153 /comma put
dup 8#154 /percent put
dup 8#155 /underscore put
dup 8#156 /greater put
dup 8#157 /question put

dup 8#172 /colon put
dup 8#173 /numbersign put
dup 8#174 /at put
dup 8#175 /quoteright put
dup 8#176 /equal put
dup 8#177 /quotedbl put

dup 8#201 /a put
dup 8#202 /b put
dup 8#203 /c put
dup 8#204 /d put
dup 8#205 /e put
dup 8#206 /f put
dup 8#207 /g put

dup 8#210 /h put
dup 8#211 /i put

dup 8#221 /j put
dup 8#222 /k put
dup 8#223 /l put
dup 8#224 /m put
dup 8#225 /n put
dup 8#226 /o put
dup 8#227 /p put

dup 8#230 /q put
dup 8#231 /r put

dup 8#242 /s put
dup 8#243 /t put
dup 8#244 /u put
dup 8#245 /v put
dup 8#246 /w put
dup 8#247 /x put

dup 8#250 /y put
dup 8#251 /z put

dup 8#301 /A put
dup 8#302 /B put
dup 8#303 /C put
dup 8#304 /D put
dup 8#305 /E put
dup 8#306 /F put
dup 8#307 /G put

dup 8#310 /H put
dup 8#311 /I put

dup 8#321 /J put
dup 8#322 /K put
dup 8#323 /L put
dup 8#324 /M put
dup 8#325 /N put
dup 8#326 /O put
dup 8#327 /P put

dup 8#330 /Q put
dup 8#331 /R put

dup 8#342 /S put
dup 8#343 /T put
dup 8#344 /U put
dup 8#345 /V put
dup 8#346 /W put
dup 8#347 /X put

dup 8#350 /Y put
dup 8#351 /Z put

dup 8#360 /zero put
dup 8#361 /one put
dup 8#362 /two put
dup 8#363 /three put
dup 8#364 /four put
dup 8#365 /five put
dup 8#366 /six put
dup 8#367 /seven put

dup 8#370 /eight put
dup 8#371 /nine put
pop                           % Array entfernen

/TR /Times-Roman findfont
10 scalefont def
/Times-Roman
/Times-Roman-EBCDIC EBCDIC
ReEncode
/TRE /Times-Roman-EBCDIC
findfont 10 scalefont def

TR setfont                    % Spaltenueberschriften drucken
0 1 3
{ /Counter exch def
  Counter 133 mul 40 add
  720 moveto
  (Oktal-  Standard-   EBCDIC-) show
  Counter 133 mul 40 add
  710 moveto
  (Code    Zeichen     Zeichen) show
} for
 
/ShowString 1 string def      % Lokale Variablen fuer Ausgabe der Codes und
/CounterString 3 string def   % der zugehoerigen Zeichen.

/YLine 690 def
/XStart 45 def
0 1 255                       % Ausgabe aller 256 Codes
{ /Counter exch def
  /CharString ShowString
  dup 0 Counter put def
  TR setfont
  XStart YLine moveto
  Counter 8 CounterString     % Umwandlung des Schleifenzaehlers in die
  cvrs show                   % Stringdarstellung einer Oktalzahl.
  XStart 42 add YLine moveto  % naechste Spalte:
  CharString show             % Postscript-Standardcodierung
  TRE setfont
  XStart 86 add YLine moveto  % naechste Spalte:
  CharString show             % EBCDIC-Codierung
  /YLine YLine 10 sub def     % neue Zeile
  Counter 1 add 64 mod 0 eq   % Nach 64. Zeile faengt neue Spalte an
  { /XStart
    XStart 133 add def
    /YLine 690 def
  } if
} for

showpage

%%Trailer
%%Pages: 1


Vorschau:

Download PostScript-File

© Holger Gehringer, Dezember 1998