Programmiersprache Pascal

Zugriff auf Betriebssystemdienste

Der Zugriff auf Betriebssystemdienste ist in Pascal standardmäßig nicht vorgesehen.

Chancen, dennoch auf Betriebssystemdienste zugreifen zu können, ergeben sich dann, wenn

  1. das Laufzeitsystem des Pascal-Systems einen erweiterten Umfang an Prozeduren und Funktionen zur Verfügung stellt oder
  2. Assembler-Anweisungen in den Pascal-Quelltext integriert werden können oder
  3. das Laufzeitsystem eines C-Systems zur Verfügung steht und die von Pascal- und C-Compiler erzeugten Objektcodedateien miteinander verträglich sind.
Die Varianten 1 und 2 sind beispielsweise in Turbo Pascal nutzbar.
Die so entstehenden Lösungen sind nicht portabel.

Bei Variante 3 bestehen, in Abhängigkeit von der verwendeten Funktionalität und den eingesetzten Sprachmittel, Chancen zu Lösungen zu kommen, die innerhalb gewisser Grenzen portabel sind.


Beispiel 1:
Aufruf eines Befehls auf Betriebssystem-Ebene (Gnu Pascal)

  PROGRAM sys(OUTPUT);
  
  TYPE str = PACKED ARRAY[1..80] OF CHAR;
  VAR cmd : str;
  
  PROCEDURE system(VAR cmd: str); C;
  
  BEGIN
    Writeln('Start des Pascal-Programms');
    cmd := 'date' + Char(0);
    system(cmd);
    Writeln('Ende des Pascal-Programms');
  END.
Bemerkungen:

Beispiel 2:
Ausgabe der aktuellen Zeit für verschiedene Zeitzonen (Gnu Pascal)

  PROGRAM timzon(OUTPUT);
  
  TYPE str = PACKED ARRAY[1..80] OF CHAR;
  
  PROCEDURE putenv(VAR env: str); C;
  
  VAR ts : TimeStamp;
      env : str;
  BEGIN
    GetTimeStamp(ts);
    Writeln('Lokale Zeit : ', Time(ts));
    env := 'TZ=PST0BST' + Chr(0);
    putenv(env);
    GetTimeStamp(ts);
    Writeln('Greenwich   : ', Time(ts));
  END.
Verwendet wird hier die Prozedur putenv, die häfig in den Laufzeitsystemen von C vorhanden ist und die es gestattet, auf Betriebssystemebene eine Umgebungsvariable zu setzen.


Beispiel 3:
Übergabe von Parametern an das Programm beim Aufruf auf Betriebssystem-Ebene
Nutzung von Umgebungsvariablen zur Parameterübergabe
Ausgabe des Wertes von Umgebungsvariablen

  PROGRAM getpar(OUTPUT);
  
  TYPE str = PACKED ARRAY[1..80] OF CHAR;
       st = STRING(80);
       pstr = ^str;
  
  FUNCTION getenv(VAR env: str) : pstr; C;
  
  PROCEDURE write_env(env: st);
  { Schreibt den Wert der Umgebungsvariablen env nach OUTPUT }
  VAR par : str;
      p : pstr;
      i : INTEGER;
  BEGIN
    Write(env, ' = ');
    par := env + Chr(0);
  
    p := getenv(par);
  
    i := 1;
    WHILE ( p^[i] <> Chr(0) ) DO BEGIN
      Write(p^[i]);
      i := i + 1;
    END;
    Writeln;
  END;
  
  BEGIN
    write_env('Laenge');
    write_env('Breite');
  END.
Bemerkungen:

P. Böhme, 18.07.1996