Die Programmschnittstelle GPRBYTE des BS2000-PRNGD steht für die Sprachen C/C++ und ASSEMBLER zur Verfügung.
GPRBYTE ist die Schnittstelle der Routine NLKRES96 im Modul GPRBYTE des DSSM-Subsystems PRNGD. Die Routine NLKRES96 liefert dem Aufrufer Pseudo-Zufallszahlen.
Kompatibilität
Die Programmschnittstelle PRNGD ist source- und objekt-kompatibel ab PRNGD Version 1.0.
Entry-Name(n) und SVC-Nummer(n)
SVC 16 (dezimal)
Makro-Typ
Die folgenden MF-Werte für die Makrogenerierung werden unterstützt (siehe Handbuch „Makroaufrufe an den Ablaufteil“):
ASSEMBLER        MF = { C | D | E | L | M }
Der Assembler-Makro und die C/C++-Include-Datei finden sich in der LMS-Bibliothek SYSLIB.PRNGD.nnn.
Makro-Syntax
Operation  | Operanden  | |
<Marke>  | GPRBYTE  | DATAADR = <datenpufferadresse>  | 
Beschreibung der Operanden
DATAADR = <datenpufferadresse>
Zeiger (char*) auf den Speicherbereich, in den die Zufallszahlen geschrieben werden sollen.
NUM_BYT = { <integer 1..255> | <anzahlbytes> }
Anzahl der Zufalls-Bytes, die in den Speicherbereich geschrieben werden sollen. 
Die Anzahl der Zufalls-Bytes kann wie folgt spezifiziert werden:
<integer 1..255>
Ganzzahl zwischen 1 und 255
<anzahlbytes>
Variable vom Datentyp Integer
MODE = *NON_BLOCKING
Betriebsmodus des Zufallszahlen-Generators.
Derzeit wird nur der nicht-blockierende Modus unterstützt, d.h. die Zufallszahlen sollen von einem Generator geliefert werden, der nicht wegen Entropie-Mangels blockiert.
Sprachbesonderheiten
Sprache  | sprachspezifischer Operand  | 
ASSEMBLER  | [PREFIX = { G | <name> }]  | 
C  | SVC-#: 16, UNIT = 430, FUNCTION = 1, VERSION = 1  | 
Return-Codes
Returncode  | Identifier  | Bedeutung  | |||
SC2  | SC1  | Maincode  | ASS:  | ||
0  | 00  | 0000  | successful  | GPRBSUCC  | kein Fehler festgestellt  | 
0  | 20  | 0001  | int_error  | GPRBINTE  | interner Fehler  | 
0  | 01  | 0002  | parameter_error  | GPRBPARE  | Parameterfehler  | 
0  | 40  | 0003  | buffer_invalid  | GPRBBUFE  | Puffer zu klein oder nicht allokiert  | 
0  | 40  | 0004  | too_many_bytes  | GPRBTOOM  | mehr als 255 Bytes angefordert  | 
0  | 80  | 0005  | prngd_not_ready  | GPRBNRDY  | Zufallszahlen-Generator hat nicht genügend Entropie  | 
0  | 80  | 0006  | timeout  | GPRBTOUT  | Zufallszahlen-Generator zeitweilig nicht aufrufbar  | 
C-Beispielprogramm
#include <stdio.h>
#include "FHDR.H"
#include "GPRBYTE.H"
main(int argc, char *argv[])
{
  char randomBytes[128];
  struct GPRBYTE_pl_mdl param;
  enum {UNIT = 430, FUNCTION = 1, VERSION = 1, dataLen = 32};
  FHDR_SET_RC_NIL(param.hdr);
  FHDR_MOD_IFID(param.hdr, UNIT, FUNCTION, VERSION);
  param.in_data.mode = GPRBYTEnon_blocking;
  param.in_data.buffer = &randomBytes;
  param.in_data.num_bytes = dataLen;
  GPRBYTEC(param);
  if (param.hdr.FHDR_RC_MAINCODE == GPRBYTEsuccessful) {
    int i;
    printf("GPRBYTEC called successfully\nData: ");
    for (i = 0; i < dataLen; i++)
      printf("%02X", randomBytes[i]);
    printf("\n");
  }
  else
    printf("Error in call of GPRBYTEC: %08X\n", param.hdr.FHDR_RC_NBR);
}