Benutzer:Mstma/svicc

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Das folgende G-Pascal-Programm wandelt Textdateien, die mit SVICC (Small VI Clone for Commodore) erstellt wurden, in ASCII um. Das Dateiende wird mit einem @-Zeichen ($40) markiert. Je nach Betriebssystem, für den der Text umgewandelt wird, kann es noch nötig sein, dass Zeilenende ($0d) zu konvertieren.

Beispiel[Bearbeiten | Quelltext bearbeiten]

Der Text in SVICC:

 Ein kurzer Text, der in SVICC erstellt
 wurde und nach der Umwandlung in ASCII
 z.B. auf dem Mac verwendbar ist.
 @

Hexdump der SVICC-Datei:

 0000  c5 49 4e 20 4b 55 52 5a  45 52 20 d4 45 58 54 2c  |.IN KURZER .EXT,|
 0010  20 44 45 52 20 49 4e 20  d3 d6 c9 c3 c3 20 45 52  | DER IN ..... ER|
 0020  53 54 45 4c 4c 54 0d 57  55 52 44 45 20 55 4e 44  |STELLT.WURDE UND|
 0030  20 4e 41 43 48 20 44 45  52 20 d5 4d 57 41 4e 44  | NACH DER .MWAND|
 0040  4c 55 4e 47 20 49 4e 20  c1 d3 c3 c9 c9 0d 5a 2e  |LUNG IN ......Z.|
 0050  c2 2e 20 41 55 46 20 44  45 4d 20 cd 41 43 20 56  |.. AUF DEM .AC V|
 0060  45 52 57 45 4e 44 42 41  52 20 49 53 54 2e 0d 40  |ERWENDBAR IST..@|
 0070  0d                                                |.|

Hexdump der umgewandelten Datei:

 0000  45 69 6e 20 6b 75 72 7a  65 72 20 54 65 78 74 2c  |Ein kurzer Text,|
 0010  20 64 65 72 20 69 6e 20  53 56 49 43 43 20 65 72  | der in SVICC er|
 0020  73 74 65 6c 6c 74 0d 77  75 72 64 65 20 75 6e 64  |stellt.wurde und|
 0030  20 6e 61 63 68 20 64 65  72 20 55 6d 77 61 6e 64  | nach der Umwand|
 0040  6c 75 6e 67 20 69 6e 20  41 53 43 49 49 0d 7a 2e  |lung in ASCII.z.|
 0050  42 2e 20 61 75 66 20 64  65 6d 20 4d 61 63 20 76  |B. auf dem Mac v|
 0060  65 72 77 65 6e 64 62 61  72 20 69 73 74 2e 0d     |erwendbar ist..|

Quelltext[Bearbeiten | Quelltext bearbeiten]

 var
   in, out: char ;
   j: integer ;
 begin
   open (1,8,0,"kurzertext");
   open (2,8,1,"out.txt");
   j := 0 ;
   repeat
     get (1); read (in); get (0);
     if in <> 64 then
     begin
       (* Grossbuchstaben *)
       (* $c1...$da - $80 = $41...$5a *)
       if (in >= 193) and (in <= 218) then
         out := in - 128
       else
         (* Kleinbuchstaben *)
         (* $41...$5a + $20 = $61...$7a *)
         if (in >= 65) and (in <= 90) then
           out := in + 32
         else
           out := in;
       put (2); write (chr (out)); put (0);
       (* Fortschrittsanzeige *)
       j := j + 1 ;
       if j mod 10 = 0 then
         write (".") ;
     end ;
   until in = 64;
   close (1);
   close (2);
   writeln ;
   writeln (j, " Bytes gelesen") ;
 end .