United States    
COMPAQ STORE | PRODUCTS |
SERVICES | SUPPORT | CONTACT US | SEARCH
Compaq C

Compaq C
User's Guide for OpenVMS Systems


Previous Contents Index

6.2.2.11 Locate Character ( _LOCC)

The _LOCC function locates the first character in a string matching the target character.

The _LOCC function has the following format:

unsigned short _LOCC (char __target, unsigned short __length, const char *__string, ...);

__target

The character being searched.

__length

The length of the searched string. The length must be a value from 0 to 65,535.

__string

A pointer to the searched string.

...

An optional position argument, which is a pointer to a pointer to char . If the searched character is found, this output argument is updated to point to the character found. If the character is not found, this argument is set to the address one byte beyond the string.

If the target character is found, the return value is the number of bytes remaining in the string; otherwise, the return value is 0.

6.2.2.12 Move from Processor Register ( _MFPR)

The _MFPR function returns the contents of a processor register. This is a privileged function.

The _MFPR function has the following formats:

void _MFPR (int register_num, int *destination);
void _MFPR (int register_num, unsigned int *destination);

register_num

The number of the privileged register to be read.

destination

A pointer to the location receiving the value from the register. This location can be a signed or unsigned int .

6.2.2.13 Move Character 3 Operand ( _MOVC3)

The _MOVC3 function copies a block of memory.

The _MOVC3 function has the following format:

void _MOVC3 (unsigned short __length, const char *__src, char *__dest, ...);

__length

The length of the source string, in bytes. The length must be a value from 0 to 65,535.

__src

A pointer to the source string.

__dest

A pointer to the destination memory.

...

One or two optional arguments:

6.2.2.14 Move Character 5 Operand ( _MOVC5)

The _MOVC5 function allows the source string specified by the pointer and length pair to be moved to the destination string specified by the other pointer and length pair. If the source string is smaller than the destination string, the destination string is padded with the specified character.

The _MOVC5 function has the following format:

void _MOVC5 (unsigned short __srclen, const char *__src, char __fill,
unsigned short __destlen, char *__dest, ...);

__srclen

The length of the source string, in bytes. The length must be a value from 0 to 65,535.

__src

A pointer to the source string.

__fill

The fill character to be used if the source string is smaller than the destination string.

__destlen

The length of the destination string, in bytes. The length must be a value from 0 to 65,535.

__dest

A pointer to the destination string.

...

One to three optional arguments:

6.2.2.15 Move from Processor Status Longword ( _MOVPSL)

The _MOVPSL function stores the value of the Processor Status Longword (PSL).

The _MOVPSL function has the following format:

void _MOVPSL (void *__psl);

__psl

The address of the location for storing the value of the PSL.

6.2.2.16 Move to Processor Register ( _MTPR)

The _MTPR function loads a value into one of the special processor registers. It is a privileged function.

The _MTPR function has the following format:

int _MTPR (int src, int register_num);

src

The value to store into the processor register.

register_num

The number of a privileged register to be updated.

The return value is the V condition flag from the Processor Status Longword (PSL).

6.2.2.17 Probe Read Accessibility ( _PROBER)

The _PROBER function checks to see if you can read the first and last byte of the given address and length pair.

The _PROBER function has the following format:

typedef enum { _probe_not_accessible, _probe_accessible} _PROBE_STATUS;
_PROBE_STATUS _PROBER (char __mode, unsigned short __length, const void *__address);

__mode

The processor mode used for checking the access.

__length

The length of the memory segment, in bytes. The length must be a value from 0 to 65,535.

On OpenVMS Alpha systems, this parameter is the offset to the last byte in the memory segment, and not the memory segment length.

__address

The pointer to the memory segment to be tested for read access.

There are two possible return values:

6.2.2.18 Probe Write Accessibility ( _PROBEW)

The _PROBEW function checks the write accessibility of the first and last byte of the given address and length pair.

The _PROBEW function has the following format:

typedef enum { _probe_not_accessible, _probe_accessible} _PROBE_STATUS;
_PROBE_STATUS _PROBEW (char __mode, unsigned short __length, const void *__address);

__mode

The processor mode used for checking the access.

__length

On OpenVMS VAX systems, the length of the memory segment, in bytes. The length must be a value from 0 to 65,535.

On OpenVMS Alpha systems, this parameter is the offset to the last byte in the memory segment, and not the memory segment length.

__address

The pointer to the memory segment to be tested for write access.

There are two possible return values:

6.2.2.19 Read General-Purpose Register ( _READ_GPR)

The _READ_GPR function returns the value of a general-purpose register.

The _READ_GPR function has the following format:

int _READ_GPR (int register_num);

register_num

An integer constant expression giving the number of the general-purpose register to be read.

The return value is the value of the general-purpose register.

6.2.2.20 Remove Entry from Queue at Head Interlocked ( _REMQHI)

The _REMQHI function removes the first entry from the queue in an indivisible manner. This operation is interlocked against similar operations by other processors or devices in the system.

The _REMQHI function has the following format:

typedef enum { _remqi_removed_more, _remqi_not_removed, _remqi_removed_empty,
_remqi_empty} _REMQI_STATUS;
_REMQI_STATUS _REMQHI (void *__head, void *__removed_entry);

__head

A pointer to the queue header. The header must be aligned on a quadword boundary. (You can achieve alignment using the _align storage-class modifier.)

__removed_entry

A pointer that _REMQHI sets to point to the removed entry.

There are four possible return values:

6.2.2.21 Remove Entry from Queue at Tail Interlocked ( _REMQTI)

The _REMQTI function removes the last entry from the queue in an indivisible manner. This operation is interlocked against similar operations by other processors or devices in the system.

The _REMQTI function has the following format:

typedef enum { _remqi_removed_more, _remqi_not_removed, _remqi_removed_empty,
_remqi_empty} _REMQI_STATUS;
_REMQI_STATUS _REMQTI (void *__head, void *__removed_entry);

__head

A pointer to the queue header. The header must be aligned on a quadword boundary. (You can achieve alignment using the _align storage-class modifier.)

__removed_entry

A pointer to a pointer that _REMQTI sets to point to the removed entry.

There are four possible return values:

6.2.2.22 Remove Entry from Queue ( _REMQUE)

The _REMQUE function removes an entry from a queue.

The _REMQUE function has the following format:

typedef enum { _remque_removed_more, _remque_removed_empty,
_remque_empty} _REMQUE_STATUS;
_REMQUE_STATUS _REMQUE (void *__entry, void *__removed_entry);

__entry

A pointer to the queue entry to be removed.

__removed_entry

A pointer to a pointer that _REMQUE sets to the address of the entry removed from the queue.

There are three possible return values:

6.2.2.23 Scan Characters ( _SCANC)

The _SCANC function locates the first character in a string with the desired attributes. The attributes are specified through a table and a mask.

The _SCANC function has the following format:

unsigned short _SCANC (unsigned short __length, const char *__string,
const char *__table, char __mask, ...);

__length

The length of the string to be scanned, in bytes. The length must be a value from 0 to 65,535.

__string

A pointer to the string to be scanned.

__table

A pointer to the table.

__mask

The mask.

...

An optional match argument, which is a pointer to a pointer to char . The _SCANC function sets this output argument to the address of the byte that matched. (If no match occurs, this argument is set to the address of the byte following the string.)

The return value is the number of bytes remaining in the string if a match was found; otherwise, the return value is 0.

6.2.2.24 Skip Character ( _SKPC)

The _SKPC function locates the first character in a string that does not match the target character.

The _SKPC function has the following format:

unsigned short _SKPC (char __target, unsigned short __length, const char *__string, ... );

__target

The target character.

__length

The length of the string, in bytes. The length must be a value from 0 to 65,535.

__string

A pointer to the string to be scanned.

...

An optional position argument, which is a pointer to a pointer to char . The _SKPC function sets this output argument to the address of the nonmatching character. (If all the characters in the string match, this argument is set to the address of the first byte beyond the string.)

The return value is the number of bytes remaining in the string if an unequal byte was located; otherwise, the return value is 0.

6.2.2.25 Span Characters ( _SPANC)

The _SPANC function locates the first character in a string without certain attributes. The attributes are specified through a table and a mask.

The _SPANC function has the following format:

unsigned short _SPANC (unsigned short __length, const char *__string,
const char *__table, char __mask, ...);

__length

The length of the string, in bytes. The length must be a value from 0 to 65,535.

__string

A pointer. It points to the string to be scanned.

__table

A pointer to the table.

__mask

The mask.

...

An optional position argument, which is a pointer to a pointer to char . The _SPANC function sets this output argument to the address of the nonmatching character. (If all the characters in the string match, this argument is set to the address of the first byte beyond the string.)

The return value is the number of bytes remaining in the string if a match was found; otherwise, the return value is 0.


Appendix A
VAX C to Compaq C Differences

This appendix documents many features that distinguish Compaq C for OpenVMS Systems from VAX C Version 3.2.

This appendix was written for the first release of Compaq C as a guide for installations migrating from VAX C to Compaq C. It is not intended to be a complete compendium of new features for all Compaq C versions. For a summary of new features for the current version of the compiler, see the New and Changed Features section in the Preface of this manual. For additional help migrating from VAX C to Compaq C, see the DEC C Migration Guide for OpenVMS VAX Systems (VAX ONLY).

The major focus of Compaq C for OpenVMS Systems is to bring it into full conformance with the ANSI C Standard. The language described by the ANSI C Standard differs in many ways from the language originally implemented by VAX C. These differences include additional language features and constructs, the removal of obsolete features and usages, and a number of other changes that generally involve a tightening up of semantic rules.

Some of the new ANSI C Standard features have already been implemented in previous versions of VAX C. Some of these are: support for function prototypes, the const and volatile type qualifiers, and the void type specifier.

Although every attempt has been made to maintain compatibility with earlier versions of the VAX C compiler, many of the changes required to bring the compiler into conformance with the ANSI C Standard would introduce unavoidable incompatibilities with these earlier versions. For example, VAX C supports a number of language and semantic extensions that are not ANSI-conformant.

Therefore, to provide compatibility with previous versions of the compiler, Compaq C for OpenVMS Systems supports several modes of operation:

Note that some of the language changes dictated by the ANSI C Standard are present in VAX C mode. Some of these changes are quiet changes; that is, they cannot be detected as such by the compiler, so no diagnostic messages are issued. Also note that some extensions are permitted in the strict ANSI C mode. These extensions are diagnosed, but with no greater severity than Warning. Both types of changes are included in the following sections that describe all new and changed features.

A.1 Features Affecting the Compiler

This section describes Compaq C compiler features. ( Section A.2 describes features that affect the Compaq C run-time library and include files.)

A.1.1 Compaq C Qualifiers

Qualifiers new to Compaq C:


Previous Next Contents Index
  

1.800.AT.COMPAQ

privacy and legal statement