C/C++ Programmer's Guide (G06.27+, H06.08+, J06.03+)

Example 2 Calling a Guardian Procedure That Returns a Condition Code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tal.h> /* Note 1 */
#include <cextdecs.h(FILE_OPEN_,READX)>
_cc_status CC; /* Note 2 */
short filenum, bytesread, retcode;
char *filename;
char buffer[1024];
int main(int argc, char *argv[]) {
int i;
/* Get Guardian filename and open the file. */
if (argc > 1)
filename = argv[1];
else
filename = "$system.system.stdioh";
retcode = FILE_OPEN_(filename, /* name of Guardian file*/
(short)strlen(filename), /* filename length */
&filenum, /* file number returned */
1, /* open for read */
, /* exclusion */
, /* nowait depth */
, /* sync or receive depth */
);
/* Check if open was successful. */
if (retcode != 0) {
fprintf(stderr, "retcode = %d\n", retcode);
fprintf(stderr, "Can't open %s\n", filename);
exit(1);
}
/* Read from the file and check for valid condition code. */
CC = READX( filenum, /* file number */
buffer, /* buffer address */
1024, /* size of buffer */
&bytesread, /* number of bytes read */
);
if(_status_ne(CC)) { /* if condition code indicates an error */
fprintf(stderr, "Read error, bytes read = %d\n", bytesread);
exit(1);
}
/* Print number of bytes read and contents of first ten bytes.*/
printf("Bytes read = %d\n", bytesread);
printf("First 10 bytes read (in octal): ");
for (i = 0; i < 10; i++)
printf("%o ", buffer[i]);
printf("\n");
return(0);
Procedures With 16-Bit Addressable Parameters
Native C and C++ programs do not support 16-bit addressable parameters. All Guardian
procedures called from native programs use 32-bit addressable parameters. This subsection applies
only to TNS C and C++ programs.
Some Guardian procedures require 16-bit addressable parameters. 16-bit addressable parameters
are located in the user data segment instead of an extended data segment. Guardian procedures
that require 16-bit addressable parameters have corresponding versions that require 32-bit
addressable parameters. For example, READ requires 16-bit parameters and READX requires 32-bit
Calling Guardian Procedures 69