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); }