REFERENCE MANUAL Institute for Energy Technology OECD Halden Reactor Project

Institute for Energy Technology
OECD Halden Reactor Project
REFERENCE MANUAL
3.9
Graphical User Interface Management System
Institute for Energy Technology
OECD Halden Reactor Project
This document will be subjected to revisions in the future as the development of
ProcSee continues. New versions will be issued at new releases of the ProcSee system.
The information in this document is subject to change without notice and should not be construed as a commitment by Institute for Energy Technology.
Institute for Energy Technology, OECD Halden Reactor Project, assumes no responsibility for any errors that
may appear in this document.
Published by
: Institute for Energy Technology, OECD Halden Reactor Project
Date
: June 2014
Revision
: 3.9
PROCSEE
DOCUMENTATION
Table of Contents
Installation .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
Before starting ProcSee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Requirements . . . . . . . . . . . . . . . . . . . .
Differences between UNIX and Windows version
Installation from CD-ROM . . . . . . . . . . . . .
User Environment . . . . . . . . . . . . . . . . .
The Services Database . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
4
5
7
7
Related Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
ProcSee Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Software Bus Documentation . . . . . . . . . . . . . . . . . . . . . . . . . 9
ProcSee Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Languages and File Formats
. . . . . . . . . . . . . . . . . . . . . . . . . 13
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
pTALK Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Keywords . . . . . . . . .
Comments . . . . . . . .
Identifiers . . . . . . . . .
Literals . . . . . . . . . .
Expressions . . . . . . . .
Primary Expressions . . .
Postfix Expressions . . . .
Unary Operators . . . . .
Explicit Type Conversion
Multiplicative Operators .
Additive Operators . . . .
Shift Operators . . . . . .
Relational Operators . . .
Equality Operators . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ProcSee Reference Manual
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
18
18
18
20
20
20
22
23
23
24
24
24
25
i
Bitwise Operators . . . . . . . . . .
Logical Operators . . . . . . . . . .
Conditional Operator . . . . . . . .
Assignment Operators . . . . . . .
Lookup Operator . . . . . . . . . .
Comma Operator . . . . . . . . . .
Operator Precedence and Grouping.
Statements. . . . . . . . . . . . . .
Labeled Statement . . . . . . . . .
Expression Statement . . . . . . . .
Compound Statement . . . . . . . .
Selection Statements . . . . . . . .
Iteration Statements . . . . . . . . .
Jump Statements . . . . . . . . . .
Declaration Statement . . . . . . .
Declarations. . . . . . . . . . . . .
Function Definitions . . . . . . . .
Constructors and Destructors . . . .
What is code? . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
26
26
27
27
28
29
29
29
29
30
31
32
32
32
35
37
37
The Configuration Language . . . . . . . . . . . . . . . . . . . . . . . . 39
Introduction . .
Comments. . .
Identifiers . . .
Literals . . . .
pTALK Code .
Values . . . . .
Assignments .
Libraries. . . .
Processes . . .
Windows . . .
Display . . . .
Layers . . . . .
Colours . . . .
Patterns . . . .
Fonts . . . . .
Cursors . . . .
Line Styles . .
ResourceStyles
Attributes . . .
Functions . . .
Dialogues . . .
Enums . . . . .
Classes . . . .
Pictures . . . .
Groups . . . .
Instances . . .
Shapes. . . . .
Circles. . . . .
ii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ProcSee Reference Manual
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
39
40
41
41
42
43
43
46
47
48
49
50
52
54
56
56
58
59
59
61
62
63
64
68
70
72
74
76
Circle Arcs and Slices . . . . . .
Dialogue Areas . . . . . . . . . .
Ellipses . . . . . . . . . . . . . .
Ellipse Arcs . . . . . . . . . . . .
Images . . . . . . . . . . . . . .
Lines . . . . . . . . . . . . . . .
Polygons . . . . . . . . . . . . .
Rectangles . . . . . . . . . . . .
RoundRects . . . . . . . . . . . .
Text . . . . . . . . . . . . . . . .
Scales . . . . . . . . . . . . . . .
Trend . . . . . . . . . . . . . . .
Internal Trend Log . . . . . . . .
External Trend Log . . . . . . . .
Trend Variable Configuration File
COM Configuration . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 77
. 78
. 79
. 81
. 81
. 83
. 85
. 87
. 88
. 89
. 90
. 92
. 99
.101
.103
. 106
The ProcSee database file format (.pdat) . . . . . . . . . . . . . . . . . 111
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
The database file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
Windows to UNIX mapping file . . . . . . . . . . . . . . . . . . . . . . 119
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
Manual pages .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
ProcSee Executables Manual pages . . . . . . . . . . . . . . . . . . . . 123
control - a server for service management. . . . . . . . . . . .
controlutil - a utility program for sending messages to control.
Execute - A ProcSee utility to remotely execute pTALK code.
ged - The ProcSee editor. . . . . . . . . . . . . . . . . . . . .
p3sim - create small test applications . . . . . . . . . . . . . .
p3simTalk - send commands to p3sim . . . . . . . . . . . . .
pcc - The ProcSee configuration language compiler . . . . . .
rtm - The ProcSee Run-Time Manager . . . . . . . . . . . . .
Timer - a ProcSee cron(1M)/at(1) utility . . . . . . . . . . . .
TrPrint - The ProcSee trend print program . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
125
127
129
130
134
134
145
149
154
156
Application Programmers Interface Manual pages . . . . . . . . . . 159
apilib - ProcSee Application Programmer’s Interface . . . . . . . . . . . 161
ENVIRONMENT VARIABLES . . . . . . . . . . . . . . . . . . . . . . 161
COMPILING AND LINKING . . . . . . . . . . . . . . . . . . . . . . . 161
Windows - Microsoft Visual Studio . . . . . . . . . . . . . . . . . . . . . 162
Windows - Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Unix including Linux and Mac . . . . . . . . . . . . . . . . . . . . . . . . 167
API EXAMPLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
ProcSee Reference Manual
iii
List of Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285
Standard pTALK Functions Manual pages . . . . . . . . . . . . . . .287
List of Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .501
APPENDIX A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .509
Example Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .509
Example Colours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .510
Example Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511
APPENDIX B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .513
Example Classes
Example Classes
Example Classes
Example Classes
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.513
.514
.515
.516
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I
iv
ProcSee Reference Manual
PART
1
Installation
1
2
ProcSee Reference Manual
Before starting ProcSee
Requirements
Before starting ProcSee
This chapter describes the system requirements, the differences between
the UNIX and the Windows NT version of ProcSee and the installation
procedure.
Requirements
The following table is a list of the platforms ProcSee supports and the operating systems needed in order to run the system.
Platform
Arch
Operating system
Sun workstations (Sun SPARC) sunArch
Solaris 7, SunOS 5.7
Hewlett Packard workstations
(HP 9000/700)
hpArch
HP-UX 11
Apple Mac with Intel processor
macX86Arch
Mac OS X 10.6
Personal Computers,
x86 Compatible
linuxX86Arch
Linux 2.6 (Ubuntu 10.04)
winArch
Windows 7, Vista, XP
If only one architecture of the ProcSee system is installed, the hard disk
space needed is approximately 100 Mb and an additional of 25 Mb is needed if another architecture is installed.
For the linux and mac installations, additional libraries may be needed on
the computer, especially the OpenMotif run-time library is needed to be
able to run the Graphics Editor. These can normally be downloaded from
the internet and installed using the systems package manager.
ProcSee Reference Manual
3
Before starting ProcSee
Differences between UNIX and Windows version
Differences between UNIX and Windows version
ProcSee was originally developed on UNIX platforms running X-Windows. As the market for Microsoft Windows more and more became a central part in modern control room activity in the late 90’s the ProcSee system
was ported to this architecture as well.
However, UNIX and Windows are two completely different systems
which imply certain incompatibility. This chapter will focus on these differences. Despite this, the main functionality in ProcSee is remarkably
equal regardless of architectures.
The X-Windows version of ProcSee offers functionality to display pictures
on 16 different displays. This is the nature of the X-Windows protocol
which is run on UNIX and linux platforms. The Windows version supports
one display only, but has functionality which makes it possible to display
pictures on more than one screen. This is done by setting the coordinates
of the windows accordingly.
The utility program p3simTalk is not available on the Windows platform.
The utility program P3RegAdmin.exe (for setting up the ProcSee file
types) is only available on the Windows platform (2000 and XP).
On Windows the new graphics editor GED supports editing of several pictures or classes simultaneously.
The API function PfAddInput with the first argument set to the value
PfCKeyboardFd is not available on Windows platforms. The API’s main
loop waits in the select(2) system call. This function accepts file descriptors on UNIX platforms and SOCKETs on Windows platforms. Standard
input is a file descriptor on UNIX but it is not available on Windows as a
SOCKET.
All examples throughout the entire documentation where environment variables are referred uses the UNIX style format. When the UNIX style is
used the character $ is used in front of the environment variable. To access
the same environment variable on Windows platforms another syntax is
used, where the character % surrounds the variable. The variable ARCH,
which is used by ProcSee, can be written as $ARCH on a UNIX platform
or as %ARCH% on Windows. Note that some programs running on Windows platforms accepts the UNIX way of accessing environment variables.
The pTALK function system() accepts environment variables only on the
UNIX style format. See the paragraph above for more information about
the differences between UNIX and Windows environment variables.
It is recommended that UNIX file names is used as arguments to pTALK
functions accepting file names or directories (internally in ProcSee UNIX
file names are also referred to as normal files). Normal files uses the ’/’ to
separate directories instead of the ’\\’. When Windows file names are used
it is very easy to forget to add the extra ’\’ when entering file names or di-
4
ProcSee Reference Manual
Before starting ProcSee
Installation from CD-ROM
rectories. ProcSee has functionality to convert Windows file names to normal file names. Refer to the pTALK functions fileNameHost(),
fileNameNormal(), strquote() and strunquote().
The libraries distributed with ProcSee are delivered in optimized and debug versions. The naming convention used on UNIX platforms is, <alib>.a for an optimized library and <alib>_debug.a for a debug version.
On the Windows platforms the libraries are compiled with different compiler options producing six different libraries. The following naming convention is used.
• ML - single threaded (default compiler option).
• MD - multi threaded DLL.
• MT - multi threaded version of the run time library.
If it is followed by a lowercase d it means that it is a debug version of the
library.
The naming conventions are the same as the options used when compiling
the libraries. For more information about the compiler options see Microsoft Visual C++ on-line help (/MT, /MD, /ML and the debug options /
MTd, /MDd, /MLd).
The libraries distributed with ProcSee have been compiled with Microsoft
Visual C++ 6, 8 (=Visual Studio 2005), 9 (=Visual Studio 2008), and 10
(=Visual Studio 2010). We can make no warranty that these libraries will
work if they are linked with a compiler from another vendor. But if the
compiler used is compatible with Microsoft Visual C++ there should not
be any problem using the libraries delivered with ProcSee.
Installation from CD-ROM
The cd-rom contains the entire distribution of the ProcSee system for all
platforms.
Unix/Linux installation
The ProcSee file hierarchy should be placed on a disk at a suitable location.
The environment variable PROCSEE_DIR must be set to a directory
where to install the ProcSee system. The following example will step by
step explain how this installation can be done.
First, find a directory where to install ProcSee. If it does not exist, create it
(this example uses /usr/local/procsee as the install directory). The syntax
of environment variable assignment depends on the shell which is used. In
the example below, Bourne Shell sh(1) syntax is used.
> PROCSEE_DIR=/usr/local/procsee
> export PROCSEE_DIR
> mkdir $PROCSEE_DIR
ProcSee Reference Manual
5
Before starting ProcSee
Installation from CD-ROM
After the cd has been mounted, go to the directory procsee on the cd-rom,
and run the install.sh script. This script copies the files from the cdrom to
the PROCSEE_DIR location.
> cd /cdrom/procsee
> install.sh
After the script has copied the files the services database have to be updated and environment variables must be set. How this is done is explained
later in this chapter.
The install.sh script accepts the architectures to install as arguments. Running this script without options will install the architecture of the machine
running the script. To install all architectures, run the script with the option
’all’.
E.g.: to install ProcSee for HP and Sun, run:
> install.sh hpArch sunArch
To install all supported UNIX architectures run:
> install.sh all
Windows installation
To begin the installation insert the CD into the CD-ROM drive. If the autorun feature is enabled in Windows the installation will start automatically,
otherwise start the installation by running startup.exe located on the CDROM. If ProcSee is downloaded from the web or the ftp-server, run the setup.exe.
The installation program extracts all the files and start the installation automatically. The first dialogue displayed is the welcome screen, see the figure below. Follow the instructions to install ProcSee.
6
ProcSee Reference Manual
Before starting ProcSee
User Environment
User Environment
Before running ProcSee, several environment variables have to be set. This
applies to both UNIX and Windows platforms. When using the installation
on Windows these environment variables are set automatically. Use the
utility program p3regadmin to modify the environment variables after
completing the installation. On UNIX platforms the environment variables
must be set in a configuration file, e.g. .profile, .login, etc, or globally for
all users.
The following environment variables must be set:
PROCSEE_DIR
The location of the ProcSee files.
ARCH
The architecture of the computer.
At the moment the following values of ARCH are available:
hpArch, sunArch, macX86Arch, linuxX86Arch and winArch.
This variable should be set in a script that is run by the unix shell at startup (on each login and each rlogin and remsh command).
CONTROLHOST
The computer where CONTROL is running.
BUSTIMEOUT
The number of milli-seconds for SWBus messages to wait for response.
The default value is 30 seconds.
PATH
add $PROCSEE_DIR/bin/$ARCH to the path.
The X resources that can be set are listed on the man pages for RTM and
GED.
The Services Database
The communication system (SWBus) used by the ProcSee API expects
some entries found in the /etc/services file on UNIX and in the <windir>\system32\drivers\etc\services file on Windows. On Windows the installer program adds these entries. On Unix/Linux, these entries have to be
added manually.
One entry for the control server and two entries defining a range of ports
available for SWBus applications. The control program uses an entry
called "softbus_name". The other two entries are "comix_minfreeport" and
"comix_maxfreeport". The range between these two entries must be large
enough to cover all processes utilizing the SWBus as a communication
protocol (that is, ProcSee application programs as well as the ProcSee executables). If these services are not present in the services file, the default
values shown below will be used. The system administrator can add these
entries to the /etc/services file. The following example illustrates a services
file where the entries used by the SWBus are added:
softbus_name
17000/tcp
comix_minfreeport
17100/tcp
comix_maxfreeport
17499/tcp
ProcSee Reference Manual
7
Before starting ProcSee
8
The Services Database
ProcSee Reference Manual
Related Documents
ProcSee Documentation
Related Documents
This chapter lists the related ProcSee user documentation.
ProcSee Documentation
The ProcSee Tutorial - a brief introduction to the ProcSee system. The tutorial contains detailed examples of how to build a complete application,
including a small simulator program.
The ProcSee User’s Guide - a comprehensive guide to defining user interfaces in the ProcSee system.
Software Bus Documentation
The Software Bus Reference Manual - a detailed reference to the communication functions provided by the Software Bus.
The Software Bus User’s Guide - a description of how the functionality of
the Software Bus should be used.
ProcSee Reference Manual
9
Related Documents
10
Software Bus Documentation
ProcSee Reference Manual
ProcSee Release Notes
ProcSee Release Notes
The Release Notes document contains last minute updates, and is therefore
not included in this manual. The document is included in the ProcSee distribution, in the text file doc/ReleaseNotes.
11
ProcSee Release Notes
12
ProcSee Reference Manual
PART
2
Languages and File
Formats
13
14
ProcSee Reference Manual
Introduction
Introduction
This chapter briefly describes the two languages used in the ProcSee
system.
The ProcSee system uses two programming languages:
• pTALK
• The ProcSee Configuration Language
pTALK
pTALK is used to express dynamic behaviour in the user interface. The
language is based on C/C++ constructs, and support definition of functions.
If a graphic element is connected to data in an application program, e.g.
MyRectangle.foregroundColour = ‘MyProgram.state‘;
pTALK source code
this is expressed in pTALK. pTALK code is compiled by the pTALK compiler included in the rtm(1), and executed by the virtual machine in rtm(1).
15
Introduction
The ProcSee Configuration Language
The ProcSee Configuration Language is the document format (human
readable) of the graphic user interfaces created in ProcSee. An example of
the configuration language code is given below:
function `void MyFunc()
{
MyVar = 0;
MyAttribute = 0;
update();
}`
rectangle MyRectangle
{
x = 276;
y = 135;
width = 78;
height = 6;
pTALK code enclosed
in ‘ ‘.
configuration
language
visibility = 1;
foregroundFillColour = 20;
backgroundFillColour = -1;
foregroundColour = 20;
backgroundColour = -1;
lineWidth = 2;
linePattern = 1;
fillPattern = 1;
Since the configuration language describes all of the user interface,
pTALK code is also contained in a configuration language document. This
is indicated by the backquotes ‘<pTALK code>‘. (The backquote is the
character with ASCII code 96, found above the TAB key on US-keyboards.) Note however that the pTALK syntax is not part of the configuration language.
A configuration language document (often referred to as Tdoc format) is
compiled to binary format using the pcc(1) program. The pcc program
checks the syntax of the configuration language document, but pcc does
not check the syntax of the pTALK code.
16
ProcSee Reference Manual
pTALK Reference
Keywords
pTALK Reference
The ProcSee pTALK language will be a subset of ANSI C, with some
additional constructs from C++. Where the language definition differs
from C/C++, this is marked in the text.
Keywords
The table below shows the reserved keywords in the pTALK language. All
AT&T C++ 2.0 keywords are reserved, and some keywords in the configuration language (marked with ††) are also reserved in the pTALK language. Keywords specific to ProcSee are marked with †††. Those marked
with † are C++ keywords reserved for future use.
any †††
asm †
attribute ††
auto †
break
case
catch †
char
class ††
const †
continue
database ††
default
delete †
dialogue ††
do
double
dynamic ††
else
enum †
extern †
float
for
friend †
function ††
goto †
if
inline †
int
long †
new †
operator †
plugin ††
private †
protected †
public †
register †
return
short
signed
sizeof †
statement ††
static †
struct †
switch
template †
this †
throw †
try †
typedef †
union †
unsigned
use ††
virtual †
void
volatile †
while
17
pTALK Reference
Comments
Comments
pTALK accepts comments in both C style and C++ style:
1) The characters /* start a comment, which terminates with the characters
*/. The comment may span several lines.
2) The characters // start a comment, which terminates at the end of the
line on which they occur.
Comments cannot be nested, but the two kinds of comments can be used to
comment each other out.
Identifiers
An identifier is a sequence of letters and digits. The first character must be
a letter; the underscore _ counts as a letter. Identifiers are case-sensitive.
Identifiers longer than 31 characters are truncated by the lexical analyser.
Reserved keywords are not legal identifiers.
To make it possible to handle variables with special names, identifier can
also be a string of any characters surrounded by ’$’ characters. To include
a ’$’ character in such a name, it must be escaped with a back-slash ’\$’.
Backslash in the name is written as ’\\’. The variable with the special name
’34-XYZ 1290’ has to be written as $34-XYZ 1290$ in the pTALK code
because it starts with a digit, and contains a ’-’ and a ’ ’ (space) character.
A more extreme case: ‘0-$s\q‘ becomes: $0-\$s\\q$.
Literals
literal:
integer-constant
character-constant
floating-constant
string-literal
There are four kinds of literals, also called constants.
Integer Constants
An integer constant consisting of a sequence of digits is taken to be decimal base, unless it begins with 0, which is taken to be octal base. The digits
8 and 9 are not legal octal digits. A sequence of digits preceded by 0x or
0X is taken to be a hexadecimal integer. The hexadecimal digits include a
or A through f or F. A sequence of digits preceded by 0b or 0B is taken to
be a binary integer. Only 0 and 1 are legal binary digits. A sequence of digits preceded by 0o or 0O explicitly indicates octal base, and a sequence of
digits preceded by 0d or 0D explicitly indicates decimal base1. Constants
1. The 0b, 0B, 0o, 0O, 0d, and 0D prefixes are not defined in C/C++
18
ProcSee Reference Manual
pTALK Reference
Literals
may have any number of separators (_) in any position except as the first
character or within the prefix. Separators are allowed purely for readability
and are ignored1.
An integer constant is of type int if it can be represented by a 32 bit signed
integer, otherwise the constant is of type unsigned int (if the value is larger
than or equal to 0x80000000).
Integer constants can be suffixed with the following letters: L or l for long,
U or u for unsigned, and s, S, h, or H for short2. This makes it possible to
create integer constants of type short or unsigned short.
The following are all integer constants:
2134
054
0xf02c 0XABC 0
0b1101110 0D__2_134 0o54 0b_1101_0110_0011
100_000u 123s
198us
Character Constants
A character constant is a character enclosed in single quotes. Some characters have special meanings when preceded by a backslash, and some
characters must be preceded by a backslash. These escape sequences are
listed in the table below.
new-line
horizontal tab
form feed
backslash
single quote
back quote
double quote
octal number
hexadecimal number
NL (LF)
HT
FF
\
’
‘
"
ooo
hh
\n
\t
\f
\\
\’
\‘
\"
\ooo
\xhh
The escape \ooo consists of a backslash followed by one, two, or three octal
digits that are taken to specify the value of the desired character. The escape \xhh consists of a backslash followed by the letter x, followed by one
or two hexadecimal digits. The following are all character constants:
’n’ ’\n’ ’\\’ ’\’’ ’\"’ ’\0’ ’\245’ ’\x41’
A character constant is of type unsigned char.
1. Underscore as separator is inspired from ADA and is not allowed in C/C++
2. The s, S, h, and H suffixes are not defined in C/C++
ProcSee Reference Manual
19
pTALK Reference
Expressions
Floating Constants
A floating constant consist of an integer part, a decimal point, a fraction
part, an e or E, and an optionally signed integer exponent. Either the integer part or the fraction part (not both) may be missing; either the decimal
point or the letter e (or E) and the exponent (not both) may be missing. An
optional f or F suffix may also be added. The following are all floating constants:
2.0 2. .2 0.2e2 .2E-2 20e2 12.34f
A floating constant is of type double.
String Literals
A string literal is a sequence of characters enclosed in double quotes. Escape sequences are supported as for character constants. All string literals
are implicitly terminated by a ’\0’ character. The following are all string
constants:
"Hello world\n" "A\tB\tC" "I\’m \"cute\""
A string literal is of type char*. Multi-line strings are not supported.
Expressions
All expressions have a value and a type. The type may however be void, in
which case the value is undefined. An expression can also be an lvalue,
which means that the result refers to the location of some modifiable object
in memory.
The different kinds of expressions are presented in order of decreasing
precedence.
Primary Expressions
primary-expression:
literal
( expression )
identifier
:: identifier
The type and value of a primary expression is the type and value of the literal, identifier, or the expression enclosed in the parentheses. The primary
expression is an lvalue if the identifier or the enclosed expression is.
The scope resolution operator :: followed by an identifier indicates a global
identifier, i.e. an identifier that is not part of an application.
Postfix Expressions
Postfix expressions group left-to-right.
20
ProcSee Reference Manual
pTALK Reference
Postfix Expressions
postfix-expression:
primary-expression
postfix-expression [ expression ]
postfix-expression ( expression-listopt )
postfix-expression . identifier
postfix-expression -> identifier
postfix-expression ++
postfix-expression -expression-list:
lookup-expression
expression-list , lookup-expression
Array Subscripts
A postfix expression followed by an expression enclosed in square brackets
is a postfix expression indicating an array subscript. One of the expressions
must have the type "pointer to T", and the other must be of integral type.
The type of the result is "T". The expression E1[E2] is by definition equal
to *((E1)+(E2)), and it follows that E1[E2] is equal to E2[E1]. An array
subscript is an lvalue. A couple of examples follows:
names[10] 10[names] panel.switches[i+4]
Array bounds are checked at compile-time if the left operand is an array
whose size is known. Array bounds are always checked at run-time since
the actual size of the object pointed to by the left operand is then known. If
the left operand is a null pointer a run-time error will also occur.
Function Calls
A postfix expression followed by an optional expression list enclosed in
parentheses is a function call. The postfix expression must be of type
"function returning T", and the result is of type "T". When a function is
called, each formal argument is initialized with its actual argument, standard conversions are used to match types. The order of evaluation of arguments are undefined. A function call is an lvalue if the result type is a
reference. A couple of examples follows:
display() valve.close( 10, i )
Object Member Access
A postfix expression followed by a dot (.) or arrow (->) followed by an
identifier is a postfix expression1. The first expression must be a class object or a pointer to a class object, and the identifier must be a member of
that class. The result is the member of the object, and it is an lvalue if the
member is. Some examples follows:
valve.state startup->menu.quitButton
Class objects can in pTALK be almost any user interface component, i.e.
pictures, applications, windows, record variables, instances, shapes, colours, and fonts.
1. Unlike C/C++, the left operand of a dot operator might be a pointer, and the left operand of an arrow operator might
be an object. The two operators have identical behaviour.
ProcSee Reference Manual
21
pTALK Reference
Unary Operators
If the left operand is a null pointer, a run-time error occurs.
Increment and Decrement
A postfix expression followed by the ++ or -- operator is a postfix expression. The operand must be an lvalue and of arithmetic type or a pointer
type. The type and value of the expression is the type and value of the operand, and after the result is noted, the operand is incremented (or decremented) by 1. The result is not an lvalue.
Unary Operators
Expressions with unary operators group right-to-left.
unary-expression:
postfix-expression
++ unary-expression
-- unary-expression
unary-operator cast-expression
unary-operator: one of
* & - ! ~ @
Increment and Decrement
One of the operators ++ or -- followed by an unary expression is an unary
expression. The operand must be an lvalue of arithmetical type or a pointer
type. The operand is incremented (or decremented) by 1, and the result is
the new value of the operand, which is an lvalue.
The Unary * Operator
The unary * operator means indirection. The expression must be of type
"pointer to T", and the result is an lvalue referring to the object pointed to
by the operand. The type of the result is "T". If the operand is a null pointer,
a run-time error occurs
The Unary & Operator
The result of the unary & operator is a pointer to its operand. The operand
must be an lvalue, and if the operand is of type "T", the result is of type
"pointer to T".
The Unary - Operator
The unary - operator must have an arithmetic operand, and the result is the
negation of the operand.
The Logical NOT Operator
The unary ! operator must have an operand whose type is arithmetic or
pointer. The result is 1 if the value of its operand is 0, and 0 if the value of
its operand is nonzero. The result is of type int.
22
ProcSee Reference Manual
pTALK Reference
Explicit Type Conversion
The Bitwise NOT Operator
The operand of the unary ~ operator must be of integral type, and the result
is the bitwise complement of the operand. The type of the result is the type
of the operand.
The Dynamics Operator1
The operand of the unary @ operator must be an lvalue of an attribute, and
the result is a pointer to a string containing the source code of the dynamic
definition; or an empty string, "", if the attribute is not dynamic2. The type
of the result is char[].
{ char* dynString = @ valve5.state; .... }
Explicit Type Conversion
cast-expression:
unary-expression
( type-name ) cast-expression
Cast expression group right-to-left. The cast notation is used to explicitly
convert the operand expression to the type enclosed in parentheses. If the
type is arithmetic (char, int, float...) the operand is converted to the given
type. For all other types the type of the operand is checked against the type
given, and 0 is returned if the types are incompatible, the value is returned
unaltered if the types are compatible. This runtime type check can be used
in e.g. if tests to have different code for different types.
Examples:
float a = 3.14;
int b = (int)a;
MyClass* p = (MyClass*)instPtr;
if (p) p.func();
Multiplicative Operators
multiplicative-expression:
cast-expression
multiplicative-expression * cast-expression
multiplicative-expression / cast-expression
multiplicative-expression % cast-expression
1. The @ operator is not defined in C/C++
2. The result of the dynamics operator when the attribute is not dynamic, can be changed from "" to NULL in the future.
Please test both cases, like:
{ char* d = @attr; if ( !d || !*d ) { printf("No dynamics"); } else { printf("Dynamics: %s", d ); } }
ProcSee Reference Manual
23
pTALK Reference
Additive Operators
The operators *, /, and % group left-to-right. The operands of * and / must
have arithmetic type; the operands of % must have integral type. Division
by zero generates a run-time error.
Additive Operators
additive-expression:
multiplicative-expression
additive-expression + multiplicative-expression
additive-expression - multiplicative-expression
The additive operators + and - group left-to-right. The operands must be of
arithmetic or pointer type.
A pointer to an object and a value n of any integral type may be added. The
result is a pointer of the same type as the operand, pointing n objects beyond the object pointed to by the operand. The - operator works the same
way in the sense that an integral value may be subtracted from a pointer to
indicate a negative offset. Adding two pointers has no meaning and is thus
prohibited.
Two pointers to objects of the same type may be subtracted; the result is an
int representing the offset between the two objects.
Pointer arithmetic should only be performed on objects being part of the
same array.
Shift Operators
shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression
The shift operators << (shift left) and >> (shift right) group left-to-right.
The operands must be of integral type, and the type of the result is the same
as the left operand’s type.
The operators shift the bits of the left operand a number of positions to the
left (<<) or right (>>) given by the right operand. 0-filling is used to fill
vacant positions. The result is undefined if the right operand is negative.
Relational Operators
relational-expression:
shift-expression
relational-expression < shift-expression
relational-expression > shift-expression
relational-expression <= shift-expression
relational-expression >= shift-expression
24
ProcSee Reference Manual
pTALK Reference
Equality Operators
The relational operators < (less than), > (greater than), <= (less than or
equal to), and >= (greater than or equal to) group left-to-right, but grouping
them does not normally give useful constructs in the first place.
The operands must be of arithmetic or pointer type. The type of the result
is int, and the result is 1 if the given relational expression evaluates to true,
0 otherwise.
Pointers of the same type may be compared, and any pointer may be compared to a constant expression of value 0. Any pointer may be compared to
a pointer of type void*.
Equality Operators
equality-expression:
relational-expression
equality-expression == relational-expression
equality-expression != relational-expression
The equality operators == (equal to) and != (not equal to) behave exactly
like the relational operators except for their lower precedence.
Bitwise Operators
and-expression:
equality-expression
and-expression & equality-expression
exclusive-or-expression:
and-expression
exclusive-or-expression ^ and-expression
inclusive-or-expression:
exclusive-or-expression
inclusive-or-expression | exclusive-or-expression
The bitwise operators & (bitwise AND), ^ (bitwise exclusive OR), and |
(bitwise inclusive OR) apply only to integral operands.
Logical Operators
logical-and-expression:
inclusive-or-expression
logical-and-expression && inclusive-or-expression
logical-or-expression:
logical-and-expression
logical-or-expression || logical-and-expression
The logical operators && (AND), and || (OR) group left-to-right. The result is 1 if the expression evaluates to true, 0 otherwise. Short circuit evaluation is used, i.e. the right operand is not evaluated if the left operand
evaluates to 0 (AND) or 1 (OR). The type of the result is int.
ProcSee Reference Manual
25
pTALK Reference
Conditional Operator
Conditional Operator
conditional-expression:
logical-or-expression
logical-or-expression ? expression : conditional-expression
Conditional expressions group right-to-left. The first expression must have
arithmetic or pointer type. If it evaluates to a nonzero value, the result of
the conditional expression is taken to be the result of the second expression, otherwise the result is taken to be that of the third expression. The second and third expressions must be of the same type1, and the result is an
lvalue if the second and third operands are both lvalues.
Assignment Operators
assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-expression
assignment-operator: one of
= := *= /= %= += -= >>= <<= &= ^= |=
Assignment operators group right-to-left. The left operand must be an lvalue. The result of an assignment expression is the value of the left operand
after the assignment has taken place. The type of the result is that of the left
operand, and it is an lvalue.
The = operator assigns the value of the right operand to the object given by
the left operand.
The := operator2 performs dynamic assignment. The value of the right operand must be a character string, i.e. of type char[], and the left operand is
made dynamic using the right operand as source code for the dynamic connection.
valve5.state := "2.3 * simulator.v5.s - 1.0";
The character array aDynExpr is assigned the string "MyVar * 5.1"
char[20] aDynExpr = "MyVar * 5.1";
The content of the string aDynExpr is copied into valve5.state as a dynamic
dependency
valve5.state := aDynExpr;
If aDynExpr is assigned a new value, valve5.state is still dynamically connected to "MyVar * 5.1"
strcpy( aDynExpr, "YourVar * 1.1 " );
1. C/C++ allows the second and third expression to be of different types.
2. The := dynamic assignment operator is not defined in C/C++.
26
ProcSee Reference Manual
pTALK Reference
Lookup Operator
The other assignment operators are of the form op=, and the expression E1
op= E2 is equal to E1 = E1 op (E2), except that E1 is evaluated only once.
Lookup Operator1
lookup-expression:
assignment-expression
complete-class-name @ assignment-expression
The lookup operator groups right-to-left. The left operand is a user defined
or predefined class name T2. The right operand must be of type char[], and
it is interpreted as the name of an object of type T. The result of the expression is a pointer to this object, or NULL if the object does not exist. The
type of the result is pointer to T.
Colour @ "sapri.red"
(Picture@::sim.currentPicture)->iconify()
Comma Operator
expression:
lookup-expression
expression , lookup-expression
The comma operator groups left-to-right. Two expressions separated by a
comma are evaluated from left to right, and the result of the expression is
taken to be the type and value of the right operand. The result is an lvalue
if the right operand is.
1. The @ lookup operator is not defined in C/C++.
2. See section "Declarations" on page 32 for a description of these types.
ProcSee Reference Manual
27
pTALK Reference
Operator Precedence and Grouping
Operator Precedence and Grouping
The table below shows all operators in order of decreasing precedence. R
in the left most column means right-to-left associatively, L means left-toright associatively. The number specifies the precedence level; higher
numbers means higher precedences.
Level
28
Operator
Function
18R
::
scope resolution
17L
17L
17L
17L
-> .
[]
()
++ --
member selectors
array index
function call
postfix increment and decrement
16R
16R
16R
16R
16R
16R
++ -~
!
* &
@
unary increment and decrement
bitwise NOT
logical NOT
unary minus
dereference and address-of
get dynamics
15R
()
14L
* / %
13L
+ -
12L
<< >>
11L
< <= > >=
10L
== !=
9L
&
bitwise AND
8L
^
bitwise XOR
7L
|
bitwise OR
6L
&&
logical AND
5L
||
4R
? :
3R
3R
3R
= *= /= %=
+= -= <<= >>=
&= |= ^= :=
2R
@
lookup operator
1L
,
comma operator
type conversion (cast)
multiplicative operators
arithmetic operators
bitwise shift
relational operators
equality operators
logical OR
arithmetic if
assignment operators
ProcSee Reference Manual
pTALK Reference
Statements
Statements
statement:
labeled-statement
expression-statement
compound-statement
selection-statement
iteration-statement
jump-statement
declaration-statement
Labeled Statement
labeled-statement:
case constant-expression : statement
case [ constant-expression , constant-expression ] : statement
default : statement
Case labels and default labels may occur only in switch statements. The
variant with one expression is called a simple case or just a case. The variant with two expressions is called an interval case1, and the last form is
called a default case. The behaviour is discussed in section "Selection
Statements" on page 30.
Expression Statement
expression-statement:
expressionopt ;
An expression statement is simply any legal expression followed by a semicolon. The expression may be omitted, in which case the statement is
called a null statement.
Compound Statement
compound-statement:
{ statement-listopt }
statement-list:
statement
statement-list statement
A compound statement, also called a block, is a list of statements enclosed
in curly braces.
1. Interval case statements are not defined in C/C++
ProcSee Reference Manual
29
pTALK Reference
Selection Statements
Selection Statements
selection-statement:
switch ( expression ) switch-body
if ( expression ) statement else-clauseopt
else-clause:
else statement
switch-body:
statement
switch-operator compound-statement
switch-operator: one of
== != < <= > >= & | ^
The switch Statement
The switch expression can at the most be of arithmetic type, but is still limited by the type permitted by the switch operator, if any. Any statement
within the switch statement may be labeled with one or more case using
one of the following forms1:
case constant-expression :
case [ constant-expression , constant-expression ] :
There may be at most one label of the form
default :
within a switch statement.
Switch statements may be nested; a case or default label is associated with
the smallest switch enclosing it.
When the switch statement is executed, its expression is evaluated and
tried against each case. If one of the cases produces a match, control is
passed to the statement following the matched case label. If no cases produces a match, and if there is a default label, control passes to the statement
labeled by the default label, if no default label exists, none of the statements in the switch are executed.
The value V of the switch expression is tried against a simple case expression E by applying the switch operator, or the == operator if no switch operator is given2:
V switch-operator E
/*or == if switch-operator isn’t given*/
The value V of the switch expression is tried against an interval case
[E1,E2] by evaluating
V >= E1 && V <= E2
A match is defined as the expression returning true, i.e. non-zero.
1. The interval case construct is not defined in C/C++.
2. The switch operator construct is not defined in C/C++.
30
ProcSee Reference Manual
pTALK Reference
Iteration Statements
Case expressions can also be of arithmetic type1 but is still limited by the
type permitted by the switch operator, if any.
To exit from a switch, see section "Jump Statements" on page 32.
The if Statement
The if-expression must be of arithmetic or pointer type. If the expression
evaluates to nonzero the first substatement is executed. If the expression
evaluates to zero the last substatement is executed if it exists.
The ’dangling else’ ambiguity is resolved by connecting an else with the
last encountered else-less if.
Iteration Statements
iteration-statement:
while ( expression ) statement
do statement while ( expression ) ;
for ( for-init-statement expressionopt ; expressionopt ) statement
for-init-statement:
expression-statement
declaration-statement
The while Statement
The substatement is executed repeatedly, but only as long as the expression
does not evaluate to zero. The expression, which must be of arithmetic or
pointer type is evaluated before each execution of the substatement.
The do Statement
The substatement is executed repeatedly until the expression evaluates to
zero. The expression, which must be of arithmetic or pointer type, is evaluated after each execution of the substatement.
The for Statement
The for-init-statement, which may be an expression statement or a declaration statement, is executed first, and only once. Then the last substatement and the second expression is executed repeatedly as long as the first
expression evaluates to nonzero. The first expression is evaluated before
each iteration.
The first expression must have arithmetic or pointer type, and if it is omitted, the value 1 is used for all iterations, creating an infinite loop.
If the for-init-statement is a declaration statement, the scope of the declarations extends to the end of the scope enclosing the for-statement.
1. Arithmetic switch and case expressions are not allowed in C/C++.
ProcSee Reference Manual
31
pTALK Reference
Jump Statements
Jump Statements1
jump-statement:
break ;
continue ;
return expressionopt ;
The break Statement
The break statement may only occur within an iteration-statement or a
switch-statement, in which case the iteration- or switch-statement is terminated and control is transferred to the statement following the iteration- or
switch-statement.
The continue Statement
The continue statement may only occur within an iteration-statement, in
which case the control is transferred to the enclosing statement’s loop control expression.
The return Statement
The return statement causes the function in which it occurs to return control to its caller. If the function is of type void, the expression must be omitted; if the function is not of type void, the expression must be included, and
be of the same type as the function.
Declaration Statement
declaration-statement:
declaration
The declaration statement introduces one or more identifiers in the scope
(block) enclosing the declaration statement. Declarations will be covered
in the following.
Declarations
declaration:
decl-specifiers declarator-list ;
attribute-definition:
decl-specifiers declarator initializeropt ;
decl-specifiers:
decl-specifier
decl-specifiers decl-specifier
decl-specifier:
type-specifier
1. The goto statement as defined in C/C++ is not allowed.
32
ProcSee Reference Manual
pTALK Reference
Declarations
type-specifier:
simple-type-name
class-name
simple-type-name:
char
short
int
long
signed
unsigned
float
double
void
any
class-name:
identifier
declarator-list:
init-declarator
declarator-list init-declarator
init-declarator:
declarator initializeropt
declarator:
decl-name
* decl-name
decl-name [ integer-constant ]
decl-name:
identifier
initializer:
= initializer-expression
= { initializer-list }
initializer-expression:
constant-expression
dynamic-string
initializer-list:
initializer-expression
initializer-list , initializer-expression
Type Specifiers
The first part of a declaration consists of one or more type specifiers. A
type specifier is currently a simple type name, or a class name.
One of the words long or short may be specified together with the word int.
If they appear on their own, int is understood. The word unsigned may be
specified together with one of the words char, short, int and long. If it appear on its own, int is understood. The signed keyword is not supported for
now, and is ignored (a warning is issued). All types are signed except for
ProcSee Reference Manual
33
pTALK Reference
Declarations
char which is unsigned. The unsigned keyword is redundant together with
char. The void type is only legal as return type for functions that do not return any value, and as an unspecified pointer type.
Unlike C/C++, the ProcSee language defines the length of each data type;
they are listed in the table below1:
type
char
short
int
long
float
double
bits
8
16
32
32
32
64
Some examples of legal declaration specifiers are:
char
short int
unsigned short int
int
unsigned int
float
double
Declarator
After the type specifiers there is a declarator or a declarator list. Each declarator consists of the variable/attribute name declared, eventually preceded by a pointer operator. After an attribute name square brackets around
an integer constant indicates declaration of an array. It is not possible to
have arrays as local variables in functions and compound statements.
When the type is a class-name, only pointers of this type is legal.
Initializer
Every attribute or local variable may be initialized by an initializer following the declarator. An initializer begins with =, and continues with a constant expression of the required type. For arrays the initializer can be a
single constant expression, in which case every element in the array are initialized to the same value as the value of this constant expression. Arrays
can also be initialized by a list of constant expressions inside curly braces,
or by the value of a string constant if the attribute is of type char array.
Attributes can also be initialized to dynamic expressions. This is done by
using a dynamic-string. A dynamic-string is a pTALK expression surrounded by back quotes(‘).
1. The use of the long type is not recommended because it will probably be redefined to 64 bits in the future.
34
ProcSee Reference Manual
pTALK Reference
Function Definitions
Examples of declarations of local variables:
Example
int
localVar;
// A variable named localVar of type int.
float
tankPressure;
double
myEpsilon = 0.00001; // An initialized variable.
short int smallData = 12300; // the type short int is 2 words.
MyRecord * recPtr;
// Only pointers to classes/structs.
ValveClass * valvePtr = 0;
// Pointers may be initialized to 0.
Examples of declarations of attributes:
Example
int
localVar;
int
stateArray[15]; // Attributes can be arrays.
int
states[15] = { 1, 4, 7, 2, 5, 8, 3, 6, 9, 0, 0, 0, 2, 3, 5 };
float
tankPressure;
float
tankLevel[10] = 35; // 10 tanks initialized to same level.
float
anotherEpsilon = 0.001;
short int smallData = 12300;
MyRecord *recPtr;
ValveClass *valvePtr = 0;
char
*theString;
char
stringBuffer[100];
char
myStr[20] = "Hello world"; // Initialization of char array.
int
state = ‘valve_19_state‘; // Dynamic attribute.
Function Definitions
function-definition:
decl-specifiers function-declarator function-body
function-declarator:
decl-name formal-arguments
* decl-name formal-arguments
formal-arguments:
( argument-listopt )
argument-list:
argument
argument-list , argument
argument:
decl-specifiers declarator
function-body:
compound-statement
ProcSee Reference Manual
35
pTALK Reference
Function Definitions
Function definitions are composed of a type specification (the type of the
value returned by the function, or void if nothing is returned) followed by
the name of the function, followed by the formal arguments, followed by
the function body. A function can return a simple type, or a pointer to any
of the simple types, or a pointer to a struct or class.
The formal arguments is a comma separated list of simple declarations.
The types allowed in this list is one of the simple types, or pointers to any
of the simple types, or pointers to structs or classes.
The function body is a compound statement, as described in section "Compound Statement" on page 29. Inside the function body the formal arguments can be used. Functions can also contain a return statement, as
described in section "The return Statement" on page 32.
Examples of function definitions:
EXAMPLE
int myFunc( int arg1, int arg2 )
{
return arg1 * 10 + arg2;
}
void freeze()
{
Simulator.Running = 0;
}
char* helpString( int msgNo )
{
switch ( msgNo )
{
case WhatToDo: return "Click on OK button to continue";
case WhatIsIt: return "This is the Wait for user window";
default: return "Sorry, no help available on this msgNo";
}
}
int fact(int x)
{
if (x <= 1) return 1;
else return x * fact(x-1);
}
MyRec* changeData( MyRec* aRecArray, int anArrayIndex, float dTemp)
{
MyRec* theRec = aRecArray[anArrayIndex];
theRec->temp += dTemp;
return theRec
}
36
ProcSee Reference Manual
pTALK Reference
Constructors and Destructors
Constructors and Destructors
function-definition:
void constructor ( ) function-bodyopt function-body
void destructor ( ) function-body function-bodyopt
In ProcSee functions named constructor and destructor have special meanings1. They are called automatically when objects are created or deleted,
and constructors or destructors on child objects are called automatically
when a constructor/destructor is executed. Normally constructors are
called after the constructors of the child objects are called, and destructors
are normally called before the destructors of the child objects. Constructors
and destructors can have an optional body2. The constructors or destructors
of child objects are then called between the two bodies of these functions.
Se also "constructor,destructor" manual page on page 303
What is code?
code:
expression
compound-statement
function-definition
attribute-definition
In ProcSee the pTALK language is used to express dynamics, to express
dialogues, to define functions, and to define attributes.
To express dynamics, expressions are used. Expressions are described in
section "Expressions" on page 20. Dialogues are combined of expressions
for the event/trigger, and compound-statements for the action part. Compound statements are also used in the execute function. Compound statements are described in section "Compound Statement" on page 29.
Definitions of attributes and functions are typically done from the ProcSee
editor ged. Attributes, functions, and dialogues can also be defined using
the pTALK functions newAttribute, newFunction, and newDialogue. Declaration of attributes are described in section "Declarations" on page 32.
Definition of functions are described in section "Function Definitions" on
page 35.
1. This is different from C++, where constructor and destructor functions are named the same as the class they are in.
2. Double body on (constructor/destructor) functions is not defined in C/C++.
ProcSee Reference Manual
37
pTALK Reference
38
What is code?
ProcSee Reference Manual
The Configuration Language
Introduction
The Configuration Language
This chapter describes the ProcSee configuration language. This language
can be used to generate a User Interface Configuration Database using the
pcc compiler.
Introduction
An application’s user interface can be described in its entirety, using the
configuration language. The components of the interface, such as pictures,
libraries, and global resources can be described in a series of text files.
The table below shows the keywords in the configuration language. Those
marked with a dagger (†) are reserved for future use.
action
application
argument
attribute
blend
blob †
char
circle
circleArc
circleSlice
class
classGUI †
classGUICategory †
classGUIInstance †
classGUIPage †
colour
comClass
comEnum
comEventObject
comInterface
comInterfaceObject
comLibrary
comObject
comShape
const
cursor
database
dialogue
dialogueArea
double
dynamic †
element
ellipse
ellipseArc
ellipseSlice
enum
errorObject †
eventPlot
eventVar
extern †
float
font
function
group
image
instance
int
library
line
linestyle
long †
pattern
picture
plugin
pluginObject †
pluginShape †
point †
polygon
process
rectangle
resourceStyle
rgb
roundRect
scale
short
signed
startPicture
statement
static †
text
trend
trendGrid
trendLabels
trendLog
trendLogExternal
trendLogInternal
trendPlot
trendRuler
trendVar
trendVarConfig
unsigned
use
window
39
The Configuration Language
Comments
Comments
The configuration language accepts comments in both C style and C++
style:
1) The characters /* start a comment, which terminates with the characters
*/. The comment may span several lines.
2) The characters // start a comment, which terminates at the end of the
line on which they occur.
Comments cannot be nested. If a // comment contains the /* comment characters, they are treated as any other characters inside the comment. Inside
a /* */ comment, the // comment characters are treated like any other characters in the comment.
From release 3.8, the comments are stored as part of the objects as follows:
When PCC reads the file:
•
Comments before the object are part of the object.
•
Comments on same line as the object are part of the object.
•
Comments right after the object are part of the object.
•
The first empty line after an object separates comments after an object from comments before an object. If no empty line is found, the comments are part of the object
after the comments.
•
The first comment of a file before any empty lines, if followed by an empty line, is
not part of the first object in the file. This comment is generated by the RTM when
documenting, and contains meta-data about the file, like file version.
•
If the file has an empty line followed by comments at the end of the file these comments are also ignored.
Example:
// File comment, file version or ProcSee version is read by PCC.
// Second line of file comment.
// App comment 1
// App comment 2
application App // App comment 3
{
// App comment 4
// Attr comment 1
int Attr = 5; // Attr comment 2
// Attr comment 3
// App end comment 1
} // App end comment 2
// App end comment 3
// File end comment, ignored.
40
ProcSee Reference Manual
The Configuration Language
Identifiers
When RTM writes the file (document):
•
A predefined file comment is placed at the top.
•
The comment for each object is placed in front of the object.
In the RTM, only direct elements in the symbol table can hold comments.
This means that e.g. the attributes of shapes can not hold comments. PCC
merges all comments on attributes (and other places that exists in the document file that are not in the RTM symboltable) into its parent object comment.
In the RTM comments are accessed using pTalk functions getComment
and setComment.
When pasting copied/cut objects and some other times, like renaming a
picture, or changing the save-path of the picture file, the comments in the
new/changed object can be modified by the RTM1: lines of the comment
that matches /^\s*_#\S*\s*=/ will have the initial ’_#’ replaced with ’__#’.
This can be used to have meta-data in the comment, that is unique for the
initial object it is attached to.
Identifiers
An identifier is a sequence of letters and digits. The first character must be
a letter; An underscore _ counts as a letter. Identifiers are case-sensitive.
Reserved keywords are not legal identifiers.
Literals
literal:
integer-constant
character-constant
floating-constant
string-literal
There are four kinds of literals, also called constants.
Integer Constants
An integer constant consisting of a sequence of digits is taken to be decimal base, unless it begins with 0x or 0X in which case it is taken to be a
hexadecimal integer. The hexadecimal digits include a or A through f or F.
The following are all integer constants:
2134
0xf02c
0XABC
0
An integer constant is of type int if it can be represented by a 32 bit signed
integer, otherwise the constant is of type unsigned int.
1. Functionality added in ProcSee version 3.8.5.
ProcSee Reference Manual
41
The Configuration Language
pTALK Code
Character Constants
A character constant is a character enclosed in single quotes. Some characters have special meanings when preceded by a backslash, and some
characters must be preceded by a backslash. These escape sequences are
listed in the table below.
new-line
horizontal tab
form feed
backslash
single quote
double quote
octal number
NL (LF)
HT
FF
\
’
"
ooo
\n
\t
\f
\\
\’
\"
\ooo
The escape \ooo consists of a backslash followed by one, two, or three octal digits that are taken to specify the value of the desired character. The
following are all character constants:
’n’
’\N’
’\n’
’\\’
’\’’
’\"’
’\0’
’\245’
A character constant is of type char.
Floating Constants
A floating constant consist of an integer part, a decimal point, a fraction
part, an e or E, and an optionally signed integer exponent. Either the integer part or the fraction part (not both) may be missing; either the decimal
point or the letter e (or E) and the exponent (not both) may be missing. The
following are all floating constants:
2.0
2.
.2
0.2e2
.2E-2
20e2
A floating constant is of type double.
String Literals
A string literal is a sequence of characters enclosed in double quotes. Escape sequences are supported as for character constants. All string literals
are implicitly terminated by a ’\0’ character. The following are all string
literals:
"Hello world\n"
"A\tB\tC"
"I\’m \"cute\""
A string literal is of type char[]. Multi-line strings are not supported.
pTALK Code
A pTALK code sequence is any legal pTALK code enclosed in backquotes
(‘). The following are examples of pTALK code:
‘fact(4)+x‘
42
‘{ printf("Hello World"); }‘
ProcSee Reference Manual
The Configuration Language
Values
Values
In this chapter on the configuration language, reference is often made to a
generic value in the example code. A value is an integer constant, a float
constant or pTALK code, and in some cases may also be a string literal or
a character constant.
Assignments
assignment-statement:
identifier = value;
In special cases the following are also assignment statements:
argument[ integer-constant ] = value;
element[ integer-constant ] = value;
point[ integer-constant ] = ( value, value );
point[] = ( pTALK-code, pTALK-code );
Many of the components that are used to construct a description of a user
interface using the configuration language consists of either other components or of assignment statements. The most commonly used assignment
statement is of the type:
identifier = value;
e.g.
foregroundColour = ‘Red‘;
Several components also require assignment statements that vary from the
one above and are shown in the grammar at the beginning of this section.
The individual sections that follow make clear the type of assignment
statement that is required for each component.
The components where the special cases are used are linestyle, dialogue,
line, polygon, and text. Note that argument, element, point, and action
are not reserved keywords.
Warning: In some cases a value may be required to be of a specific type.
The configuration language compiler is not always able to check the type
of a value, so care should be taken to avoid frustration. This is particularly
the case where a value can be assigned pTALK code, since the configuration language compiler is not capable of evaluating pTALK code and cannot check that the code is valid. The compiler may therefore accept and
compile code that is actually incorrect. Errors in code that has been accepted will be reported by the Run-Time Manager when a configuration containing errors is run.
Configurations
configuration:
configuration-item
configuration configuration-item
ProcSee Reference Manual
43
The Configuration Language
Assignments
configuration-item:
application-definition
picture-definition
trendvarconfig-definition
library-definition
A configuration is the highest level in the configuration language, and is a
complete description of an application’s user interface. A configuration
may be spread over several text files, or be stored in a single file. Each file
will usually contain at least one picture, library, or application definition.
Applications
application-definition:
application identifier { application-bodyopt }
application-body:
application-item
application-body application-item
application-item:
font-definition
process-definition
colour-definition
window-definition
linestyle-definition
pattern-definition
cursor-definition
attribute-definition
dialogue-definition
function-definition
start-picture-definition
library-declaration
database-declaration
class-definition
trendlog-definition
layer-definition
A complete user interface configuration will need, in addition to pictures
and (optionally) a library, an application context file that contains global
information about the configuration.
An application is identified by an identifier, which must be given. The binary file is named identifier.pctx
The body of an application should contain definitions of the resources
used. These include windows, fonts, colours, cursors, line styles, and fill
patterns. Global attributes, functions and dialogues should also be placed
in the body of an application, as should the pictures that are to be displayed when the user interface is started up, and the libraries that are used.
A user interface configuration may contain one or more processes which
should be declared in the application body. If the configuration uses a global database then the database should also be declared here.
44
ProcSee Reference Manual
The Configuration Language
Assignments
It is also possible to define classes in the application body rather than in a
library. This can be useful if a class is not intended for reuse in other user
interface configurations.
A simple example application is shown below:
application System
{
use "./SystemLibrary.plib";
// use a library
database "./RecordDefs.pdat";
// usually contains record type definitions only
process extraProcess
{
// this database is local to the process:
database "./ProcessVariables.pdat";
}
colour Red { red = oxffff; green = 0; blue = 0; }
colour Blue { red = 0; green = 0; blue = 0xffff; }
colour Green { red = 0; green = 0xffff; blue = 0; }
font Helvetica
font Times
{ name = "-adobe-helvetica-..."; }
{ name = "-adobe-times-..."; }
display MainDisplay
{
connection = "";
width = 1280;
height = 1024;
resizeMode = 0;
}
window MainWindow // a window definition
{
parent = "MainDisplay";
x = 20; y = 20;
width = 640; height = 512;
}
dialogue // a global dialogue
{
event = ‘buttonPressed(1)‘; // left mouse button
action = ‘{
// pTALK code to do something useful
}‘;
}
}
ProcSee Reference Manual
45
The Configuration Language
Libraries
Libraries
Defining Libraries
library-definition:
library identifier { library-body }
library-body:
library-item
library-body library-item
library-item:
attribute-definition
function-definition
class-definition
colour-definition
font-definition
linestyle-definition
pattern-definition
layer-definition
A library is primarily a collection of classes and functions. A library must
always be given an identifier.
A Library can currently contain attributes, classes, and functions, as well
as resources. In order for an instance of a class to be displayed correctly in
a picture, the Run-Time Manager needs to have information about resources such as colours, fonts, and patterns. These resources can be defined either in the application body itself, or in the library.
Example:
library SystemLibrary
{
int MyAttribute;
int MyFunc()
{
// function body
}
class simpleValve
{
// class body
}
class simpleSwitch
{
// class body
Using Libraries
46
ProcSee Reference Manual
The Configuration Language
Processes
library-declaration:
use string-literal;
If classes or functions stored in a library are to be used as part of a userinterface configuration, then the library files containing the definitions that
are to be used must be declared in the application body. The required library is declared using the keyword use, followed by a string containing
the name of the library file. A semi-colon is required at the end of the declaration.
Note that the filename given is that of a compiled library, and not the configuration language file containing the library definition.
A file containing a compiled library has the postfix ".plib" appended to the
library’s identifier.
Example:
use "./SystemLibrary.plib";
A library declaration is global to the configuration, and may hence appear
in an application body only.
Processes
database-declaration:
database string-literal;
database = string-literal;
// deprecated
process-definition:
process identifier { process-bodyopt }
process-body:
database-declaration
process-body database-declaration
A process has an identifier and, optionally, a body containing declaration
of the databases that is used by the process. A database placed in a process body should contain variable definitions (since record definitions are
always global), whereas a database placed in an application body should
contain the global record definitions. Variable definitions in a database
placed in an application body will be placed in a default process named after the application and are, hence, not global.
From ProcSee 3.8, the ’=’ in the database declaration is optional, and will
no longer be part of the database declarations documented by the RTM.
The reason for this is that the database declaration is more like a library
declaration than an attribute value. Libraries, plugins and databases can appear more than once in a given scope, attributes can not.
ProcSee Reference Manual
47
The Configuration Language
Windows
Example:
process myProcess
{
database "./processDatabase.pdat";
}
A process is global to the configuration, and may appear in an application
body only.
If a configuration uses a database file then it must be declared either global
to an application, in an application body, or local to a process, in a process
body.
Example:
database "./SystemDatabase.pdat";
A database is a text file containing definitions of records and variables.
The syntax and semantics of a database file are described in the next chapter (The ProcSee database file format).
Windows
window-definition:
window identifier {window-body }
window-body:
assignment-statement
window-body assignment-statement
The Run-Time Manager needs to know about the windows that are to be
used by a user-interface configuration. The keyword is window, and is followed by the window’s identifier and a window body. Within the body are
usually six attributes (see the example definition of window "Win0" below).
The parent must always be defined. The parent should be the name of a
display or window defined in the same configuration file.
If the dimensions of the window and the background colour are not given,
then default values will be used for these (see the definition of window
"Win1" below).
48
ProcSee Reference Manual
The Configuration Language
Display
Examples:
window Win0
{
parent = "myDisplay";
x = 0; y = 0; width = 1024; height = 725;
backgroundColour = 0;
}
window Win1 { parent = "Win0"; x = 10; y = 10; }
Windows are global to the configuration and may be defined in an application body only.
Display
display-definition:
display identifier {display-body }
display-body:
assignment-statement
display-body assignment-statement
The Display object represents a drawing surface used by the RTM. It defines a display, virtual display area or a virtual display (all monitors). Normally the pictures (windows) are displayed inside the bounds of the
Display object.
A description of the attributes provided by the Display class follows next.
The attribute connection specifies the scheme and the connection device
string, i.e. which device to open a connection to. For instance WIN:0,
WIN:1, X:gandalf:0.0, X::0.0, etc. The WIN: and X: are the scheme
names. WIN: is the default scheme on the Microsoft Windows platforms
and X: is the default scheme name on Unix, Linux, and Mac (indicating the
X-Window System).
It is possible to specify several display devices with the connection string
attribute. Use the semicolon character ';' to separate the display device entries. For instance, the string "WIN:1;X::0.1;" defines two display device
entries. WIN: will be used on the Windows platforms, while X: will be
used on Unix/Linux platforms running X-Windows. Notice that the RTM
will try each entry from the connection attribute string until successful. Inserting a semicolon at the very end of the connection attribute string ensures that the display-object will open on the computer's default display if
all other items fail.
The attributes width and height defines the design time size of the display,
i.e. target display size.
The attribute resizeMode determines whether the Display object is rescaled to fit the display or not. The value 0 means, no rescaling. Setting this
value to 2, rescales the display and maintains the aspect ratio of the display
ProcSee Reference Manual
49
The Configuration Language
Layers
size (the attributes width and height). The value 1 means rescale the display to fit the display even if it means that the aspect ratio is different from
the design time size.
The attributes virtualX, virtualY, virtualWidth and virtualHeight defines a virtual display area, which can be smaller or larger than the display
size. Note that these attributes are not documented by the RTM if they are
equal to the Display object’s default values.
Examples:
display Display0
{
connection = "";
width = 1280;
height = 1024
virtualX = 1280;
virtualY = 1024;
virtualWidth = 1560;
virtualHeight = 2048;
}
Notice that displays can only be defined in an application body.
Layers
layer-definition:
layer identifier { layer-body }
layer-body:
assignment-statement
layer-body assignment-statement
When using layers, the application or library contains a series of layer definitions. The order of these defines the order of the layers, used when drawing pictures. A layer definition mainly gives the name of the layer, and its
position among the other layers. The layer that is used for shapes not assigned to a layer, is marked with the flags attribute of the layer having the
"default" string as value.
50
ProcSee Reference Manual
The Configuration Language
Layers
Example:
layer BgLayer
{
}
layer DefaultLayer
{
flags = "default";
}
layer FgLayer
{
}
Layers used in libraries define the name of the layers that the shapes of
classes will use. These layers only contain the name of the layer, and the
order, with one of the layers marked as default, like in the example above.
When a library with layers are used in an application, the layers of the library are assigned to layers in the application. This is performed by checking the application layers aliases attributes. If a library layer is found in an
aliases attribute of an application layer, this connects the library layer to
this application layer. If no alias is found, but there exists a layer in the application with the same name as the library layer, the library layer is connected to this layer. If no layer to connect to is found, a layer is created in
the application, with the same name as the layer in the library. If this name
is already used for something else, another name is used. When creating
new layers in the application, the order of the layers in the library will be
used for the order of the new layers.
Layers can contain the following attributes:
visibility - Draw the shapes of this layer or not. Default value is 1 = visible.
Only for application layers.
aliases - Names of library layers to connect to this application layer. Only
for application layers. Contains a string of alias names, each alias name on
the form libName.layerName, and each separated by comma ’,’, or bar ’|’.
flags - Can contain the string "default", to say that this is the default layer
(the layer to use for shapes not connected to a layer). Can contain "originalName=’name’" if the layer was created automatically, but the name
wanted was already in use, this is so that other libraries with layers should
connect to the same layer if the name matches. The originalName is only
for application layers.
ProcSee Reference Manual
51
The Configuration Language
Colours
Colours
colour-definition:
colour identifier { colour-body }
colour-body:
rgb-statement
colour-body rgb-statement
rgb-statement:
assignment-statement
rgb { rgb-body }
rgb-body:
assignment-statement
rgb-body assignment-statement
A colour definition has four predefined attributes that determine its colour.
The attributes red, green, and blue should be used to set the colour’s intensities of red, green, and blue. The values should be given as integers or
hexadecimal numbers in the range 0 to 65535 (or 0xffff). The transparency attribute determines the colour’s transparency. The value range for this
attribute is the same as for the red, green and blue attributes. The value 0
defines an opaque colour, while the value 65535 defines a transparent colour. Any value between these limits determines the transparency of the colour.
Example of normal (shared) colour:
colour red
{
red
= 0xffff;
green = 0;
blue
= 0;
transparency = 0;
}
A blink colour definition is composed of one or several rgb statements,
where each rgb definition has five attributes. The attributes red, green,
blue and transparency determines the colour and the transparency of the
colour, respectively. For more information about these attributes, see the
colour defintion described above. The attribute time specifies the time in
milliseconds that the actual rgb colour will be visible on the screen, before
the next rgb colour in the sequence is displayed.
52
ProcSee Reference Manual
The Configuration Language
Colours
Example of a blink colour:
colour cyan_red_green
{
rgb {
red=0;
green=65535;
blue=65535;
transparency = 32333;
time=500;
}
rgb {
red=65535;
green=0;
blue=0;
transparency = 0;
time=300;
}
rgb {
red=0;
green=65535;
blue=0;
transparency=10000;
time=300;
}
}
A colour definition can have a type attribute as well. This attribute has a
default value of 0 for colours with only one set of rgb values, and a default
value of number of rgb values for colours with several rgb values. Type =
0 indicates a shared colour, type = 1 indicates a private colour, and type
>= 2 indicates a blink colour. The type attribute should normally not be
used, unless a private colour is needed. For pseudo-colour displays shared
colours are preferred, because they don’t consume extra colours in the colour map if the colour already exist in the colour map. Private colours
should only be used when the colour has to be changed at run-time. Blink
colours on pseudo-colour displays are private colours that periodically
change their rgb components at specified intervals. On true-colour displays
blinking is implemented by redrawing the area covered with the blinking
colour, and the type attribute is ignored.
Example of a private colour:
colour myPrivateColour
{
type = 1;
rgb {
red = 0x7f7f;
green = 0x7f7f;
blue = 0x7f7f;
transparency = 0;
}
}
A colour definition may appear in an application body or a library body.
ProcSee Reference Manual
53
The Configuration Language
Patterns
Patterns
pattern-definition:
pattern identifier { pattern-body | gradient-pattern-body }
pattern-body:
assignment-statement
pattern-body assignment-statement
gradient-pattern-body:
assignment-statement
gradient-pattern-body assignment-statement
In ProcSee, Patterns are separated in two categories. These are regular patterns and gradient patterns, each category having different set of attributes.
Therefore, it is naturally that these categories are described in turn in the
next two sections. The first section describes regular patterns, while the
second section describes gradient patterns.
A pattern definition may appear in an application body or a library body.
Regular Patterns
Regular patterns can be defined in the Tdoc (pctx, plib) file or in a separate
X11 bitmap file or a pixmap file (.png, .bmp, .tiff ). Pattern definitions on
a separate file have a single attribute, called patternFile (or patternBitmap). The attribute is a text string giving the path to the X11 bitmap file
to be used as a pattern. Patterns defined in the Tdoc files have three attributes, these are: width and height (integer) and patternData as a string.
patternData is a string of hexadecimal digits defining the pattern.
Example:
pattern patSmiley
{
patternFile = "smileyFace.bm";
}
pattern patRaster
{
width = 8;
height = 8;
patternData = "8800885588008855";
}
Patterns, just like colours, are global to the configuration. Two predefined
patterns NoPattern and SolidPattern are always available and do not,
therefore, need to be defined. The X11 application bitmap(1) can be used
to create and modify bitmaps.
54
ProcSee Reference Manual
The Configuration Language
Patterns
Gradient Patterns
Gradient patterns are defined in the Tdoc (pctx, plib) file. The attribute
type is an integer specifying the default gradient type, and the default repeated and the reflected flags. Legal values for the gradient type are:
• Linear
=0
• Elliptical
=1
• Circular
=2
• Square
=3
• Rectangular = 4
The repeated and reflected modifiers are flags added to the gradient type to
produce the final attribute type. The flags have the following values:
• Repeated
= 256 (0x100)
• Reflected
= 512 (0x200)
The value of the attribute type, when creating a square pattern with the repeated and reflected flags on, is: 0x100 | 0x200 | 3 = 0x303.
The attributes x1, y1, x2, y2, x3, y3 are of type real and specifies the length
and direction of the vectors. ProcSee uses one vector (x1, y1) to (x2, y2) if
linear, square or circular gradient type is specified, and two vectors, (x1,
y1) to (x2, y2) and (x1, y1) to (x3, y3), for rectangular and elliptical gradient type. Normally, are these vectors in the value range [0, 1].
A gradient pattern may have zero or more blend definitions:
blend-definition:
blend { blend-body }
blend-body:
assignment-statement
blend-body assignment-statement
The blend definition is either a blend factor or a blend colour, also called a
blend stop. One attribute is common for the different types. The name of
this attribute is position, and is of type real and must be in the range [0, 1].
Values outside this range or duplicated positions are illegal and will issue
errors in ProcSee.
The blend factor has a single attribute factor of type real. This attribute determines the ratio between the previous- and next blend stop. This value
must be in the range [0, 1]. A value of 0 means, use the value of the previous blend stop, while a value of 1 means, use the next blend stop. Values
between these limits produce a blending of the colours at these blend stops.
The blend colour has three attributes of type integer which specifies the
RGB component of the colour, that is red, green and blue. These attributes
must be in the range [0, 65535]. The transparency attribute determines
whether the colour is opaque, transparent or semi-transparent. A value of
ProcSee Reference Manual
55
The Configuration Language
Fonts
0 means opaque, while a value of 65535 means transparent. Any value between these limits produces a semi-transparent colour. The attributes foreground and background are used when creating a colour based on the
colours of a shape or a picture, i.e. the colours are got from the object the
gradient is assigned to. These attributes must be in the range [0, 1]. Note
that the sum of these attributes must not exceed the value 1, otherwise an
error will be issued in ProcSee. If the sum of these attributes is less than 1,
the colour produced is a blending of the foreground and/or background and
the colour specified with the red, green and blue attributes.
Example:
pattern patternGradient
{
type = 0;
x1 = 0; y1 = 0;
x2 = 1; y2 = 1;
blend { position = 0; factor = 0; }
blend { position = 0.25; red = 65535; green = 0; blue = 0; }
blend { position = 0.5; red = 0; green = 0; blue = 65535;
transparency = 32768; foreground = 0.25; background = 0.25; }
blend { position = 0.75; foreground = 0.5; background = 0.5; }
blend { position = 1; factor = 1; }
}
Fonts
font-definition:
font identifier { font-body }
font-body:
assignment-statement
font-body assignment-statement
A Font has a single attribute, called name, which is used to specify which
X11 font is to be associated with the given identifier.
Example:
font Font0
{
name = "-adobe-helvetica-...";
}
The font can be any X11 font (both 8 bits and 16 bits fonts are supported).
A Font may be defined in an application body or a library body.
Cursors
cursor-definition:
cursor identifier { cursor-body }
56
ProcSee Reference Manual
The Configuration Language
Cursors
cursor-body:
assignment-statement
cursor-body assignment-statement
A cursor can be defined by
• using standard cursor shapes as defined in <X11/cursorfont.h>
• using userdefined cursor shapes defined in cursor files for the following
format: .xbm in both UNIX and Windows. In Windows also for the following formats: .cur and .ani.
• define a cursor in the Tdoc (pctx, plib) file.
If a font cursor is requested, the fontCursor attribute should be assigned
an integer corresponding to the desired cursor as defined in <X11/cursorfont.h>.
If a bitmap cursor is requested, the cursorFile (or bitmapCursor) attribute
should be assigned a text string giving the path to the X11 bitmap file
(.xbm) to be used as a cursor. (On MSWindows, the file can also be a native
Windows cursor file (.cur or .ani)).
The following attributes must be specified for the cursor when defined in
the Tdoc file. cursorShape, a text string of hexadecimal digits defining the
shape of the cursor. cursorMask, a text string of hexadecimal digits defining the cursor mask. width and height are the size of the cursor. xHotSpot
and yHotSpot define the cursor hotspot.
The two attributes backgroundColour and foregroundColour can be
used to set the background and foreground colour of the cursor. The default
values are black and white.
Twelve cursors are predefined. They are: NoHit, UpperLeft, UpperSide,
UpperRight, RightSide, LowerRight, LowerSide, LowerLeft, LeftSide,
OnBoundary, Linebox, and TextEdit.
Examples::
cursor WristWatch
{
fontCursor = 150; // the cursor font index
}
cursor MyCursor
{
cursorFile = "Cursorfile.xbm";
}
cursor BitmapCursor
{
cursorShape = "0008000FE000...00000000";
cursorMask = "0018801FF01F...03F0C011";
width
= 16;
height
= 16;
xHotSpot = 12;
yHotSpot = 1;
}
ProcSee Reference Manual
57
The Configuration Language
Line Styles
All cursor definitions are global to the configuration and may be defined in
an application body or in a library body.
Line Styles
linestyle-definition:
linestyle identifier { style-body }
style-body:
assignment-statement
style-body assignment-statement
A linestyle is defined as a sequence of integers specifying a dash pattern.
A maximum of 8 integer values may be specified. The element attribute is
an array where each entry must be given individually. The attribute numberOfElements is an integer specifying how many entries the element array is to have.
Example:
linestyle dashDot
{
element[0] = 4; element[1] = 2;
element[2] = 1; element[3] = 2;
numberOfElements = 4;
}
If only one element is given, the resulting linestyle is one where the dashes
and gaps between them are of equal length. If two elements are given, the
first element defines the length of the dashes and the second element the
length of the gaps. In general, if the number of elements is even, the dashgap pattern is repeated (e.g. element[0], element[2], element[4], etc., are
always dashes) but if the number of elements is odd, then the dash-gap sequence is alternately repeated as a gap-dash sequence. This is probably
best illustrated using graphical examples:
First pixel in line
{4}
{ 4, 2 }
{ 4, 2, 1 }
{ 4, 2, 1, 2 }
4
4
4
4
2
4
4
2
1
4
2
1 2
elements
Last pixel in line
4
2
4
4
2
4
4
1
2
4
2
4
1 2
4
2
1
4
4
2
4
4
2
2
1 2 4
1
pixels
Note that the dash is displayed in the foreground colour and the gap in the
background colour.
58
ProcSee Reference Manual
The Configuration Language
ResourceStyles
The predefined line styles NoStyle and SolidStyle are always available.
linestyle definitions may appear in an application body or a library body
only.
Note that the ‘s’ in linestyle is small, unlike the assignment label used in a
line shape where the ‘s’ is a capital ‘S’ (for example, in a line shape, one
can write lineStyle = ‘SolidStyle‘;).
ResourceStyles
resource-style-definition:
resourceStyle identifier { resource-style-body }
resource-style-body:
resource-style-elem
resource-style-body resource-style-elem
resource-style-elem:
use string-literal ;
colour-definition
A resource style is used to define resources that can be used to override the
global resources defined in the application or library that the resource style
is placed in. Resource styles can use other resource styles, by specifying
the name of the resource styles to use in use statements. When a resource
is needed, the current resource style in use will be searched first for this resource, if not found, each of the resource styles specified with use statements is searched in the same order as the use statements. The first match
will be used, or if no match, the global resource will be used.
Example:
resourceStyle myStyle
{
use "myOtherStyle";
use "myLib.myLibStyle";
colour myColour1
{
rgb { red=0x4B4b; green=0xB4B4; blue=0x7A7A; }
}
colour myColour2
{
rgb { red=0; green=0x5858; blue=0x8383; }
}
}
Attributes
attribute definition:
ProcSee Reference Manual
59
The Configuration Language
Attributes
type *opt identifier;
type identifier = attribute-value;
char identifier [] = string-literal;
char identifier [ integer-constant] = string-literal;
type identifier[ integer-constant];
type identifier[ integer-constant] = arrayOfValues;
identifier *opt identifier;
identifier []opt identifier;
arrayOfValues:
{ anArray }
value
anArray:
arrayValue
anArray , arrayValue
attributeValue:
arrayValue
pTALK-code
arrayValue:
float-constant
integer-constant
character-constant
type:
float
char
unsignedopt short
unsignedopt int
An attribute is defined using at least a type and identifier followed by a
semi-colon. An attribute may optionally be given a value. Non-initialised
attributes implicitly default to zero. Some examples of attribute definitions
are given below. Values given to attributes should be of the same type as
the attribute.
Pointer types can be declared but can not be initialised.
Examples:
int i;
int i2
= 123;
float ftArray[5] = 5.4321;
float ftArray2[5]= { 1.1, 2.2, 3.3, 4.4 };
char aString[]= "Hello World";
float liquidLevel= ‘level()‘; // dynamic
float fluidRatio= ‘liquidLevel/i‘;
int* ip; float* fp; rec* rp;
Note that the only legal types other than int, float, and char, is pointer to
struct and pointer to ProcSee classes (Picture, Window, and user defined
classes).
If an array is declared and a single value is given (see float ftArray[5] in
the above example) then all the elements of the array will be given that value. If an array is declared that is larger than the number of elements given
(see float ftArray2[5] in the above example) then the remaining elements
will be given null values. It is an error to give more elements to an array
than the size of the array declared.
60
ProcSee Reference Manual
The Configuration Language
Functions
Using an initialiser in an attribute definition does not only mean to assign
an initial value to that attribute. The liquidLevel attribute is assigned a
function call as value, and that means that liquidLevel will change dynamically as the function returns different values. Dynamic values are created
by assigning function calls or non-constant expressions to an attribute in a
definition statement - as for fluidRatio and liquidLevel in the above examples. Remember to put backquotes (‘) around the pTALK code for the
dynamic value.
Attribute definitions may be global to the configuration, or local to a class,
picture, pr library.
In an instance of a class the following syntax is used:
attribute-assignment:
attribute assignment-statement
assignment-statement
// deprecated
An attribute can be set in an instance of a class by using the keyword attribute.
The keyword attribute for instance attributes have been redundant since
version 3.0. From ProcSee 3.8 the keyword attribute is not documented by
the RTM when documenting instance attributes. PCC is still accepting the
attribute keyword.
Examples of the deprecated attribute assignments:
attribute anIdentifier = 123.456;
attribute anotherAttr = "another attribute";
This notation with attribute keyword can only be used in an instance.
Functions
function-definition:
function pTALK-code
A function is defined using the function keyword, followed by the complete function definition, in the pTALK language, within backquotes.
ProcSee Reference Manual
61
The Configuration Language
Dialogues
Examples:
function ‘int level( void )
{
int theLevel = 0;
if ( ! isEmpty() )
theLevel = (int)(volume / crossSection());
return theLevel;
}‘
function ‘double crossSection( void )
{
Function elements may be global to the configuration, or they may be local
to a class or picture. The pTALK language itself is discussed in the previous chapter (pTALK Reference on page 17).
Dialogues
dialogue-definition:
dialogue { dialogue-body }
dialogue-body:
event = pTALK-code;
action = statement pTALK-code;
action = pTALK-code;
// deprecated
A dialogue is an interaction between a user and a computer system. The
user makes the selection, by, for example, pressing a key on a computer
keyboard, or performing a mouse action, and the computer system responds by changing its state or requiring new user actions.
A dialogue consists of an event and an action to perform when the event
occurs. Events are generated by user input, side effects of previous user input, internal ProcSee messages, or messages passed between external applications and ProcSee.
The pTALK code for the event should be an expression, that will call at
least one of the event trigger pTALK functions listed on page 333.
The pTALK code for the action should be a statement; that is you would
normally use a compound-statement ’{...}’ for this value, see example below.
The keyword statement used in the action attribute of the dialogue, have
been redundant since version 3.0. From ProcSee 3.8 the statement keyword
is not documented when documenting dialogues. PCC still accepts the
statement keyword.
62
ProcSee Reference Manual
The Configuration Language
Enums
Example:
dialogue
{
event = ‘buttonPressed(0)‘;
action = ‘{ displayPicture( "win0", "start.ppic" ); }‘;
}
Dialogue definitions may be global to the configuration, or they may be local to a class or picture, or a shape in a class or picture.
Enums
enum-definition:
enum enum-typeopt identifier { enum-bodyopt enum-sepopt }
enum-type:
"int"
"short int"
"unsigned int"
"unsigned short int"
"float"
"double"
"char*"
enum-body:
enum-item
enum-body enum-sep enum-item
enum-sep:
;
,
enum-item:
identifier enum-initopt
enum-init:
= value
Enums are used to define a group of constants. If no value is given for a
numeric enum element, the value will be the previous elements value + 1.
If no enum-type is given, the default is int.
ProcSee Reference Manual
63
The Configuration Language
Classes
Examples:
enum numbers
{
one = 1; two; three; four; five,
six, seven, eight, nine, zero=0
}
enum "char*" myStrings
{
str1 = "abc";
str2 = "xyz";
}
Classes
class-definition:
class identifier { class-bodyopt }
class-body:
class-item
class-body class-item
class-item:
attribute-definition
function-definition
dialogue-definition
instance-definition
shape-definition
group-definition
assignment-statement
A class is a collection of objects (shapes, instances, groups,...), functions,
attributes, and dialogues that make up a type. This type can later be instantiated to form an instance of that type. This mechanism allows for easy reuse of complex collections of objects, which might have their own
complex behaviour as defined by the functions in the class. In the following example a class for a simple valve has been defined.
The class contains the following attributes (they are used when the class is
edited in the graphics editor only).
xSnap
ySnap
angleSnap
radiusSnap
worldX
64
The snap interval in the x-direction
The snap interval in the y-direction
The snap interval for angles (ellipse/circle arc/slice)
The snap interval for radius (ellipse/circle and corresponding arc/slice
The x-coordinate of the upper left corner of the class’ world coordinate
system
ProcSee Reference Manual
The Configuration Language
Classes
worldY
The y-coordinate of the upper left corner of the class’ world coordinate
system
worldWidth
The width of the class’ world coordinate system.
The width of the class’ world coordinate system.
The world coordinate to screen coordinate ratio. A value of 2 means that
there are 2 screen coordinates to each world coordinate
The background colour used when the class is edited in the graphics editor.
The foreground colour used when the class is edited in the graphics editor.
worldHeight
oneToOne
backgroundColour
foregroundColour
pattern
xReference
yReference
xScaleFactor
yScaleFactor
rotationAngle
The background pattern used when the class is edited in the graphics editor.
The x-coordinate of the reference point used in rotation and scaling operations
The y-coordinate of the reference point used in rotation and scaling operations
The scale factor in the x-direction. The class is scaled around the reference point.
The scale factor in the y-direction. The class is scaled around the reference point.
The rotation angle of the class, specified in degrees.
ProcSee Reference Manual
65
The Configuration Language
Classes
Example:
class simpleValve
{
int Closed = 0;
int ValveColour = ‘Green‘;
function ‘void switchValve()
{
if (Closed==0)
{ Closed = 1; ValveColour = ‘Green‘; }
else
{ Closed = 0; ValveColour = ‘Red‘; }
update(); // updates the picture
}‘
dialogue
{ // event is any mouse button pressed:
event = ‘buttonPressed(0)‘;
action = ‘{ switchValve(); }‘;
}
polygon
{
numberOfPoints = 4;
point[0] = (0,0); point[1] = (20,10);
point[2] = (20,0); point[3] = (0,10);
foregroundFillColour = ‘ValveColour‘;
}
xSnap
= 1;
ySnap
= 1;
angleSnap
= 2;
radiusSnap
= 2;
worldX
= -100;
worldY
= -100;
worldWidth
= 100;
worldHeight
= 100;
oneToOne
= 1;
backgroundColour = 0;
xReference
= -10;
yReference
= -10;
xScaleFactor
= 1.5;
yScaleFactor
= 1.5;
rotationAngle = 45.0;
}
This simpleValve class has two attributes, a function, a dialogue, and a
shape, which together define the class’s behaviour and appearance.
66
ProcSee Reference Manual
The Configuration Language
Classes
When an instance of this class is created, the attributes Closed and ValveColour will be set to the initial values as defined in the class definition
above ( 0 and Green). The fill colour of the polygon, which is used to represent the simple valve graphically, is dependent on the value of the attribute valveColour, and so will change colour if ValveColour changes.
The class contains a dialogue which specifies that if an instance of the
simpleValve is clicked on with a mouse, then the function switchValve()
will be called.
The function switchValve sets the attribute closed to 1 if it was 0 and to 0
if it was 1 and also changes the value of the ValveColour accordingly. It
then calls a function defined globally ( update() ).
The net result is that if an instance of the switchValve class is clicked on
with the mouse, it will switch colour, switching between green and red, and
its Closed attribute will switch between 0 and 1.
Class definitions are global to the configuration. They can be placed in an
application body or a library body.
classElementFlag
Attribute values of shapes and instances within a class are normally controlled by the class and should normally not be modified in the class' instances. Therefore, such values are by default not saved or loaded when
instances of the class are saved and loaded. Instead, the values specified in
the class are used. This ensures that the class can modify internal shapes
and instances and the modifications will influence all instances of the class.
However, in certain situations class designers may choose to make the attributes of internal shapes and instances configurable for each instance. To
enable this feature, a field called classElementFlag is available for all
named shapes and instances within a class. classElementFlag is a text
string specifying the name of the attributes for which values should be
saved and loaded for each instance of the containing class. By default, classElementFlag is an empty string. Note that the internal shape or instance
must have a name for this feature to be available.
The example below specifies that the attributes attr1 and attr2 of internal
instance c2 should be saved and loaded pr instance of class C1, while attribute attr3 should not.
class C1
{
instance C2 c2
{
attr1 = 123;
attr2 = 45;
attr3 = 67;
...
classElementFlag ="attr1, attr2";
}
}
ProcSee Reference Manual
67
The Configuration Language
Pictures
For a picture where class C1 is used, entries will exist for attributes attr1
and attr2, but not for attr3.
picture P1
{
instance C1 c1
{
c2.attr1 = 56;
c2.attr2 = 789;
}
}
The text string classElementFlag contains attribute names separated by
comma, and optional white-space. Attribute names may include subshapes nested to any depth, like "anInstance.aCircle.radius".
If no classElementFlag entry is found, the RTM inserts classElementFlag
settings with appropriate values to ensure backward compatibility with
versions prior to the introduction of classElementFlag.
Pictures
picture-definition:
picture identifier { picture-bodyopt }
picture-body:
picture-item
picture-body picture-item
picture-item:
attribute-definition
function-definition
dialogue-definition
instance-definition
shape-definition
group-definition
assignment-statement
The binary file is named identifier.ppic. A picture is very similar to a class
in the sense that it can contain objects, functions, attributes, shapes and dialogues. A picture contains some additional attributes. These allow the
user to set such things as a picture’s backgroundColour or updateMode.
The following attributes are available for a picture:
backgroundColour
foregroundColour
pattern
xSnap
ySnap
angleSnap
radiusSnap
68
The background colour of the picture. If this picture is displayed in a
window with a background colour of its own, the picture background
colour will override that of the window.
The foreground colour of the picture. Unused if this value is -1.
The pattern used in the picture. Unused if this value is -1.
The snap interval in the x-direction
The snap interval in the y-direction
The snap interval for angles (ellipse/circle arc/slice)
The snap interval for radius (ellipse/circle and corresponding arc/slice
ProcSee Reference Manual
The Configuration Language
Pictures
worldX
The x-coordinate of the upper left corner of The picture’s world coordinate system
worldY
The y-coordinate of the upper left corner of The picture’s world coordinate system
The width of the picture’s world coordinate system.
The height of the picture’s world coordinate system.
The world coordinate to screen coordinate ratio. A value of 2 means that
there are 2 screen coordinates to each world coordinate
This attribute defines how the picture is resized in the window. If this
value is set to the value 0 (default), the picture is clipped to the window.
Setting this attribute to the value 1, it means that the picture is resized
to fit inside the window. The picture’s aspect ratio is not maintained. To
maintain the aspect ratio but resize the picture to fit inside the window,
set this attribute to the value 2.
This attribute defines how a picture should be updated. Eight different
update modes are supported by ProcSee (Note, if the update modes 0 or
1 are used, it will automatically be set to split buffering mode, 3). It is
recommended to use a buffering update mode where the picture is
drawn into a double buffer and copied to the screen. This eliminates
flicker. One non-buffering mode is however supported by ProcSee (set
the attribute to the value 10). The best update mode to use cannot be predicted in advance, because it depends on several factors, like the
number of shapes, number of instances, number of overlapping shapes,
etc. in the picture. In most cases will split buffering mode (value 3,
which is the default) give an acceptable update frequence. However, if
the picture contain lots of static shapes it can be advantageous to use one
of the static buffering update modes (7, 8 or 9).
worldWidth
worldHeight
oneToOne
resizeMode
updateMode
crosshairStyle
crosshairLength
crosshairFollowSnap
crosshairVisibility
xReference
yReference
xScaleFactor
yScaleFactor
rotationAngle
Not used in the current version
This attribute specifies the size/length (in screen/pixel coordinates) of
the crosshair cursor.
This attribute specifies whether the crosshair cursor should follow the
snap intervals or not.
This attribute controls whether the crosshair cursor is visible or not.
The x-coordinate of the reference point used in rotation and scaling operations
The y-coordinate of the reference point used in rotation and scaling operations
The scale factor in the x-direction. The picture is scaled around the reference point.
The scale factor in the y-direction. The picture is scaled around the reference point.
The rotation angle of the picture, specified in degrees.
ProcSee Reference Manual
69
The Configuration Language
Groups
A special "attribute" is pictureFlags. It typically is used for marking the
picture as a drag and drop target. The pictureFlags should only be present
if it is set, and it can not have a dynamic value.
Example: pictureFlags = "dndDropCopy";
Example:
picture StartUp
{
function ‘void letsGo( int* aVal ) { ... }‘
instance Valve ValveA {...}
instance Valve ValveB {...}
rectangle myRect1{ ... }
rectangle myRect2{ ... }
int anArray[5] = {1,2,3,4,5};
backgroundColour = ‘darkBlue‘;
xSnap
= 5;
ySnap
= 5;
angleSnap
= 0;
radiusSnap
= 0;
worldX
= 0;
worldY
= 0;
worldWidth
= 1280;
worldHeight
= 1024;
oneToOne
= 1;
resizeMode
= 0;
updateMode
= 1;
crosshairStyle
= 1;
crosshairLength = 0;
crosshairFollowSnap = `isInEditMode()`;
crosshairVisibility = `isInEditMode()`;
xReference
= 50;
yReference
= 100;
Picture definitions are global to the configuration.
Groups
group-definition:
group identifieropt { group-body }
group-body:
group-item
group-body group-item
group-item:
instance-definition
shape-definition
group-definition
assignment-statement
70
ProcSee Reference Manual
The Configuration Language
Groups
A group is no more than a collection of objects and other groups that can
be treated (selected, moved, made visible/invisible, rotated, or scaled) like
a single object. A group can be used to arrange objects in a hierarchical
manner.
A group should contain two or more items.
A group has the same scope rules as objects, and can be placed within pictures, classes, or other groups in the same way as any other single shape or
instance of a class
Since a group is a collection of instances, groups, or shapes, it cannot be
connected to dialogues of its own. Dialogues connected to shapes within a
group continue to function even though the shape is part of a group, so if it
is necessary to connect a dialogue to a group then a dialogueArea shape
can be placed in the group, containing the required dialogue.
A group contains the following attributes:
visibility
xReference
yReference
xScaleFactor
yScaleFactor
rotationAngle
Specifies whether the group is visible or not. A value of 0 means invisible, a value of 1 visible.
The x-coordinate of the reference point used in rotation and scaling operations
The y-coordinate of the reference point used in rotation and scaling operations
The scale factor in the x-direction. The group is scaled around the reference point.
The scale factor in the y-direction. The group is scaled around the reference point.
The rotation angle of the group, specified in degrees.
The example below shows a group containing three objects and another
group. The inner group contains two more objects.
Example:
group outerGroup
{
rectangle{ ... }
circle{ ... }
group innerGroup
{
polygon{ ... }
instance Pipe { ... }
}
instance Valve { .. }
visibility = 1;
xReference = 50;
yReference = 100;
xScaleFactor = 1.5;
yScaleFactor = 1.5;
ProcSee Reference Manual
71
The Configuration Language
Instances
A group can be placed in a class, picture, or another group. It does not have
a position of its own, since the objects within it dictate its position.
Instances
instance-definition:
instance identifier identifieropt instance-initializer
instance-initializer:
{ instance-bodyopt }
instance-body:
instance-item
instance-body instance-item
instance-item:
assignment-statement
attribute-assignment
Instances are instances of classes. They are defined by specifying the class
name and optionally an identifier and an instance-body, with eight predefined attributes, as well as assignments of attributes that are local to the
class used.
An instance contains the following attributes:
x
y
visibility
xReference
yReference
xScaleFactor
yScaleFactor
rotationAngle
72
The x-coordinate of the instance.
The y-coordinate of the instance. The x and y attributes specifies the origo position of the coordinate system inside the instance.
If the attribute is 0 then the instance will be invisible. If the attribute is
set to 1 then the instance will be visible. The value can also be evaluated
using pTALK-code if a dynamic visibility is required.
The x-coordinate of the reference point used in rotation and scaling operations
The y-coordinate of the reference point used in rotation and scaling operations
The scale factor in the x-direction. The instance is scaled around the reference point.
The scale factor in the y-direction. The instance is scaled around the reference point.
The rotation angle of the instance, specified in degrees.
ProcSee Reference Manual
The Configuration Language
Instances
The layout of an instance is as follows:
instance classIdentifier identifier{}
instance classIdentifier identifier
{
attribute ... ;
attribute ... ;
attribute ... ;
...
x = value;
y = value;
visibility = 1; // can also be 0 or pTALK-code
xReference = value;
yReference = value;
xScaleFactor = value;
yScaleFactor = value;
rotationAngle = value;
}
It is not necessary to give all of these values for each instance as can be
seen in the first of the two instances in the following example, where scaling factors, etc. will be assigned default values.
Examples:
instance valve valveNrOne{}
instance valve valveNrTwo
{
closed = ‘true‘;
x = 500;
y = 500;
visibility = 1; // can also be 0 or pTALK-code
xScaleFactor = 1;
yScaleFactor = 1;
rotationAngle = 30;
xReference = 100;
yReference = 100;
}
The two instances valveNrOne and valveNrTwo are both instances of the
class valve. The first valve is instantiated without further adjustments of attributes, but the second valve’s attribute named closed is initially set to
true, and its position and visibility are assigned.
ProcSee Reference Manual
73
The Configuration Language
Shapes
Function calls and other non-constant expressions assigned to attributes
can be used to give an instance dynamic behaviour. In the example below,
the attribute Rad, which is defined in the class definition for a circularObject, has been set to equal the value returned from a function called radius() in another object called anotherObject.
Example:
instance circularObject
{
Rad = ‘anotherObject.radius()‘;
x = 100;
y = 400;
}
Instances cannot be global to a configuration. They must occur within the
scope of a class, group, or picture definition.
Shapes
shape-definition:
shape-keyword identifieropt { shape-body}
shape-body:
shape-item
shape-body shape-item
shape-item:
assignment-statement
dialogue-definitionopt
shape-keyword:
circle
circleArc
circleSlice
dialogueArea
ellipse
ellipseArc
ellipseSlice
image
line
rectangle
polygon
text
trend
A Shape consist of a keyword and a shape body. It can, optionally, have an
identifier. A shape has a number of predefined attributes that are used to
set its position, size, colour, etc.
A shape can have dialogues associated with them. A dialogue definition
placed anywhere within a shape body will connect the dialogue to the
shape. An unlimited number of dialogues can be placed within a shapebody.
74
ProcSee Reference Manual
The Configuration Language
Shapes
Examples:
circle littleCircle { x = 10; y = 20; }
circle // without an identifier
{
dialogue // this dialogue is connected to the circle
{
event = ‘buttonPressed(1);‘;
action = ‘{simpleValve.Closed = 1;}‘;
}
x = 100;
y = 100;
radius = 20;
foregroundFillColour = ‘Green‘;
visibility = 1;
}
Many of the predefined attributes have default values that are allocated if
no value is given. Some shapes require that certain attributes are allocated
values.
There are essentially two kinds of attributes; those that define the geometry
of a shape and those that define other features such as colours, fill patterns,
and so on. Most of the geometric attributes vary from shape to shape,
whereas the non-geometric attributes are the same for almost all of the
shapes.
Geometric attributes contained in all shapes are:
visibility
xReference
yReference
xScaleFactor
yScaleFactor
rotationAngle
foregroundColour
backgroundColour
foregroundFillColour
backgroundFillColour
If the visibility attribute is assigned a value of 0 then the shape will not
be visible. If the visibility is set to 1 then the shape will be visible. The
value can also be dependent on pTALK-code if the visibility of a shape
is to be dynamic.
The x-coordinate of the reference point used in rotation and scaling operations
The y-coordinate of the reference point used in rotation and scaling operations
The scale factor in the x-direction. The shape is scaled around the reference point. A negative value will mirror the shape around the x-axis.
The scale factor in the y-direction. The shape is scaled around the reference point. A negative value will mirror the shape around the y-axis.
The rotation angle of the shape, specified in degrees.
The non-geometric attributes that most shapes have are the following:
The foreground colour of the shape’s border, line, or text.
The background colour of the shape’s border, line or text.
The foreground colour of the shape’s fill.
The background colour of the shape’s fill.
ProcSee Reference Manual
75
The Configuration Language
fillPattern
lineWidth
linePattern
Circles
The pattern to be used for filled shapes.
The width (in the coordinate system units) of the border surrounding the
shape, or the width of the line. If a negative value is used, then the
lineWidth will be unchanged when x and yScaleFactor are different
from 1.
Similar to the fill pattern, but for the line or border rather than the fill.
Notable exceptions are the text, trend, line, image, and dialogue area
shapes. Text, line and trend shapes do not have all of the above attributes
available. Dialogue area and image shapes do not have any of the non-geometric attributes above. The entries for each shape that follow this general
description show which attributes each kind of shape has.
Colours, fonts, fill patterns, or line styles used should be defined in the application body or library body, unless a predefined value is used (such as
NoFill or SolidFill for fill patterns). If the value assigned to an attribute
does not exist, then the RTM will assign a default value when an attempt
is made to display the shape. The default value assigned will probably not
produce exactly the result intended, so it is important to check that all of
the resources that are required have been defined.
All attributes can be assigned to constants or to a dynamic pTALK expression:
visibility = ‘ (RoomTemperature > 25) ? 1 : 0 ‘;
The above code defines that if a variable called RoomTemperature is
greater then 25 then the visibility is 1 (visible) otherwise the visibility is 0
(invisible). As the value of RoomTemperature changes, the visibility of
the shape containing this assignment will be adjusted accordingly.
A special "attribute" is shapeFlags which may be placed in any shape. It
typically is used for marking the shape as a drag and drop target. The
shapeFlags should only be present if it is set, and it can not have a dynamic
value.
Example: shapeFlags = "dndDropCopy,enterLeaveArea";
A shape can be placed in a class, picture, or group. The coordinates given
use the world coordinate system of the class or picture that the shape is
placed in.
Circles
The non-geometric attributes of a circle are similar to those of a rectangle,
ellipse, or polygon. A circle definition differs from other shape definitions
in that it has the following three geometric attributes:
x
y
radius
76
The centre x-coordinate.
The centre y-coordinate.
The radius.
ProcSee Reference Manual
The Configuration Language
Circle Arcs and Slices
circle
{
x = value;
y = value;
radius = value;
visibility = 1; // or 0 or pTALK-code
foregroundFillColour = value;
backgroundFillColour = value;
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
linePattern = value;
fillPattern = value;
}
Example:
circle
{
x = 300;
y = 200;
radius = 150;
visibility = 1;
forgroundFillColour = ‘Red‘;
}
In the example above, a circle will be drawn at the position 300, 200 with
a radius of 150. It will be visible and filled with the colour Red.
Circle Arcs and Slices
The non-geometric attributes of a circleArc are similar to those of a circle.
A Circle arc definition differs from that of a circle in that it has two additional geometric attributes:
startAngle
openingAngle
The angle of the point where the arc starts.
The opening angle of the arc.
ProcSee Reference Manual
77
The Configuration Language
Dialogue Areas
circleArc
{
x = value;
y = value;
radius = value;
startAngle = value;
openingAngle = value;
visibility = 1; // or 0 or pTALK-code
foregroundFillColour = value;
backgroundFillColour = value;
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
linePattern = value;
fillPattern value;
}
Example:
circleArc
{
x = 300;
y = 200;
radius = 150;
startAngle = 30;
openingAngle = 60;
visibility = 1;
forgroundFillColour = ‘Red‘;
}
This will draw a circular arc similar to the circle in the circle example, except that a start angle of 30 degrees has been set, and the arc has an opening
angle of 60 degree.
To draw circle slices, use the identifier circleSlice instead of circleArc.
Dialogue Areas
A dialogueArea is an invisible rectangle that has a position, height and
width. In practice it is identical to a rectangle with visibility permanently
set to 0. It is not a requirement that dialogues must be placed in a dia-
78
ProcSee Reference Manual
The Configuration Language
Ellipses
logueArea as it is a shape like all the others, but it is of little use when empty. The main reason for the existence of this shape is to aid migration from
Picasso-2 to ProcSee.
dialogueArea
{
dialogue { dialogue-body }
x = value;
y = value;
width = value;
height = value;
}
See the description of dialogues for a description of the layout of the dialogue body. In common with all shapes, there is no limit to the number of
dialogues that can be connected to a dialogueArea.
Example:
dialogueArea
{
dialogue
{
event = ‘buttonPressed(1)‘;
action = ‘{ soundAlarm(); }‘;
}
x = 500;
y = 500;
width = 200;
height = 100;
}
In above example, a dialogue has been placed in a dialogue area 200 wide
and 100 high at the position 500, 500.
Ellipses
The non-geometric attributes of an ellipse are the same as those of a circle.
An Ellipse definition differs from that of a circle in that an ellipse has two
geometric attributes to describe its radii whereas a circle has only a single
radius attribute:
xRadius
yRadius
The horizontal semi axis length
The vertical semi axis length
ProcSee Reference Manual
79
The Configuration Language
Ellipses
ellipse
{
x = value;
y = value;
xRadius = value;
yRadius = value;
visibility = 1; // or 0 or pTALK-code
foregroundFillColour = value;
backgroundFillColour = value;
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
linePattern = value;
fillPattern = value;
}
Example:
ellipse
{
x = 300;
y = 200;
xRadius = 150;
yRadius = 250;
visibility = 1;
forgroundFillColour = ‘Red‘;
}
This example will draw an ellipse with a horizontal radius of 150 and a vertical radius of 250 with its centre at the position 300, 200. It will be visible
and filled with the colour Red.
80
ProcSee Reference Manual
The Configuration Language
Ellipse Arcs
Ellipse Arcs
An ellipseArc is similar to a circle arc, but with two radii attributes.
ellipseArc
{
x = value;
y = value;
xRadius = value;
yRadius = value;
startAngle = value;
openingAngle = value;
visibility = 1; // or 0 or pTALK-code
foregroundFillColour = value;
backgroundFillColour = value;
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
linePattern = value;
fillPattern = value;
}
Example:
ellipseArc
{
x = 300;
y = 200;
xRadius = 150;
yRadius = 250;
startAngle = 30;
openingAngle = 60;
visibility = 1;
forgroundFillColour = ‘Red‘;
}
This will draw a elliptical arc similar to the ellipse in the ellipse example,
except that a start angle of 30 degrees has been set, and the arc has an opening angle of 60 degree.
To draw ellipse slices, use the identifier ellipseSlice instead of ellipseArc.
Images
A graphical image is a picture file of one of the following formats1:
bmp - Windows Bitmap
gif
- Compuserve Graphics Interchange
1. Unix versions of ProcSee does not support the bmp or wmf image formats.
ProcSee Reference Manual
81
The Configuration Language
Images
jpg
- Joint Picture Group
png - Portable Network Graphics
pcx - Zsoft PaintBrush
tiff
- Tagged Image File Format
tga
- Truevision Targa
wmf - Windows Meta File
xwd - X-Windows Bitmap
All these file formats can be inserted as a ProcSee shape.
Images attributes:
x
y
filename
visibility
xReference
yReference
xScaleFactor
xScaleFactor
rotationAngle
The top left corner x-coordinate.
The top left corner y-coordinate.
The filename for the image file.
The image shapes visibility.
The x-coordinate of the reference point used in rotation and scaling operations.
The y-coordinate of the reference point used in rotation and scaling operations.
The scale factor in the x-direction. The shape is scaled around the reference point.
The scale factor in the y-direction. The shape is scaled around the reference point.
The rotation angle of the shape, specified in degrees.
The image can be rotated at any angle, and it can even be flipped in any
direction by using the xScaleFactor and yScaleFactor attributes.
82
ProcSee Reference Manual
The Configuration Language
Lines
Example:
image
{
x = value;
y = value;
filename = string-literal;
visibility = 1; // or 0 or pTALK-code
rotationAngle = value;
xScaleFactor = value;
yScaleFactor = value;
}
image
{
x = 300;
y = 200;
filename = "myImage";
visibility = 1;
rotationAngle = 47;
xScaleFactor = 2;
yScaleFactor = 2;
}
The example above will position the image stored in the image file "myImage" at the position 300, 200, the image will be visible, rotated 47 degrees, and zoomed to twice the size in both directions.
RotationAngle are default 0, and xScaleFactor / yScaleFactor are default
1, so these do not have to be specified unless you want other values.
Lines
A line has a number of points, pairs of coordinates, and five non-geometric
attributes.
The foregroundColour is always used, but the backgroundColour only
has any significance if a lineStyle other than SolidStyle is used. The
lineWidth defines the thickness of the line.
The number of points, and the point coordinates must always be given. Default values exist for a line’s visibility, colours, line width and line style.
The points are defined using an array-like notation:
point[ pointNumber ] = ( x-coordinate, y-coordinate );
where the pointNumber is between 0 and the value assigned to the attribute
numberOfPoints. The coordinates may be assigned either numerical values or dynamic values (values dependent on a numerical value returned
from some pTALK code).
ProcSee Reference Manual
83
The Configuration Language
Lines
There is a special case for lines where the values of the points are stored in
a pair of arrays (usually defined in a database file, declared in the application body). Given two arrays of numerical values, of equal length (or at
least the same or longer length as the value assigned to numberOfPoints),
the points are defined using the following notation:
point[] = ( ‘ArrayOfXpoints‘, ‘ArrayOfYpoints‘ );
where ArrayOfXpoints and ArrayOfYpoints are the identifiers for the two
arrays. Note that in this case there is no point index number between the
brackets ’[]’ after point.
line
{
numberOfPoints = n; // n is an integer-constant
point[0] = ( value, value );
point[1] = ( value, value );
point[...] = ( value, value );
point[n-1] = ( value, value );
visibility = 1; // or 0 or pTALK-code
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
lineStyle = value; // NOTE: capital S !
}
line
{
mode = 1;
numberOfPoints = n; // n is an integer-constant
point[] = ( ‘pTALK-code‘,‘pTALK-code‘ );
// non-geometric attributes are the same as above.
}
The lineStyle can be set to NoStyle or SolidStyle, or to a style defined in
the application body or in a library that has been declared in the application
body.
84
ProcSee Reference Manual
The Configuration Language
Polygons
Example:
line
{
numberOfPoints = 4;
point[0] = ( 100, 100 );
point[1] = ( 200, 200 );
point[2] = ( 300, 300 );
point[3] = ( 400, 100 );
lineStyle = ‘myStyle‘;
}
line
{
The first example above draws a line with four points, with default non-geometric attribute values for all of the values except the line style, where a
style called myStyle has been used, which should have been defined in the
application body or in a library body.
The second example draws a line with ten points, whose values are contained in two arrays, one called xPoints and the other called yPoints.
Polygons
A polygon has the same geometric attributes as a line, and the same nongeometric attributes to those of rectangles, circles, and ellipses. Unlike a
line, a polygon is a closed shape, and so the last point and first point given
will be joined together.
A polygon has a declared number of points, the points themselves, and
eight non-geometric attributes.
A fill pattern can be assigned using the attribute fillPattern and the foreground fill colour and background fill colour can be set using the foregroundFillColour and backgroundFillColour attributes. If there is no
fill pattern then neither of the fill colour values will be used. If the fill pattern is set to SolidPattern then only the foreground fill colour will be used.
The lineWidth attribute is for setting the width of the border around the
polygon. The border may also have a pattern and its own foreground and
background colours, which can be set using the foregroundColour and
backgroundColour attributes.
ProcSee Reference Manual
85
The Configuration Language
Polygons
The number of points, and the point coordinates must always be given. See
the explanation of how to define points in the section on lines.
polygon
{
numberOfPoints = n; // n is an integer-constant
point[0] = ( value, value );
point[1] = ( value, value );
point[2] = ( value, value );
point[...] = ( value, value );
point[n-1] = ( value, value );
visibility = 1; // or 0 or pTALK-code
foregroundFillColour = value;
backgroundFillColour = value;
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
linePattern = value;
fillPattern = value;
}
polygon
{
numberOfPoints = n; // n is an integer-constant
point[] = ( ‘pTALK-code‘,‘pTALK-code‘ );
visibility = 1; // or 0 or pTALK-code
foregroundFillColour = value;
backgroundFillColour = value;
foregroundColour = value;
backgroundColour = value;
Example:
polygon
{
numberOfPoints = 3;
point[0] = ( 100, 100 );
point[1] = ( 200, 200 );
point[2] = ( 300, 300 );
}
polygon
{
numberOfPoints = 10;
point[] = ( ‘xPoints‘, ‘yPoints‘ );
86
ProcSee Reference Manual
The Configuration Language
Rectangles
In the first example a three sided polygon will be drawn with three points
at the positions given. The non-geometric attributes will be set to default
values.
In the second example a ten sided polygon will be drawn with ten points,
whose coordinates are in two arrays, xPoints and yPoints. The polygon
will be filled with the colour Red.
Rectangles
A rectangle has four geometric attributes:
x
y
width
height
The top left corner x-coordinate.
The top left corner y-coordinate.
The width of the rectangle.
The height of the rectangle.
A rectangle also has eight non-geometric attributes.
A fill pattern can be assigned using the attribute fillPattern and the foreground fill colour and background fill colour can be set using the foregroundFillColour and backgroundFillColour attributes. If there is no
fill pattern then neither of the fill colour values will be used. If the fill pattern is set to SolidPattern then only the foreground fill colour will be used.
The line width gives the thickness of the border around a rectangle. The
border may also have a pattern and its own foreground and background
colours. The width of the border is set by assigning a value to the attribute
lineWidth and the fill pattern of the border is set by assigning a value to
the attribute linePattern. Its colours are set using the foregroundColour
and backgroundColour attributes.
rectangle
{
x = value;
y = value;
width = value;
height = value;
visibility = 1; // or 0 or pTALK-code
foregroundFillColour = value;
backgroundFillColour = value;
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
linePattern = value;
fillPattern = value;
}
ProcSee Reference Manual
87
The Configuration Language
RoundRects
Example:
rectangle
{
x =10;
y = 20;
width = 100;
height = 100;
foregroundFillColour = ‘Red‘;
In the example above a rectangle will be drawn at position 10, 20 with a
width of 100 and a height of 100 (this will, of course, be a square). The rectangle will be filled with the colour Red.
RoundRects
A roundRect has six geometric attributes:
x
The top left corner x-coordinate.
y
The top left corner y-coordinate.
The width of the roundRect.
The height of the roundRect.
Specifies additional properties for the RoundRect shape.
The x radius of the roundRect corners.
The y radius of the roundRect corners.
width
height
flags
xRadiusCorner
yRadiusCorner
A roundRect also has eight non-geometric attributes.
A fill pattern can be assigned using the attribute fillPattern and the foreground fill colour and background fill colour can be set using the foregroundFillColour and backgroundFillColour attributes. If there is no
fill pattern then neither of the fill colour values will be used. If the fill pattern is set to SolidPattern then only the foreground fill colour will be used.
The line width gives the thickness of the border around a roundRect. The
border may also have a pattern and its own foreground and background
colours. The width of the border is set by assigning a value to the attribute
lineWidth and the fill pattern of the border is set by assigning a value to
the attribute linePattern. Its colours are set using the foregroundColour
and backgroundColour attributes.
88
ProcSee Reference Manual
The Configuration Language
Text
roundRect
{
x = value;
y = value;
width = value;
height = value;
xRadiusCorner = value;
yRadiusCorner = value;
flags = "value";
visibility = 1; // or 0 or pTALK-code
foregroundFillColour = value;
backgroundFillColour = value;
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
linePattern = value;
fillPattern = value;
Example:
roundRect
{
x =10;
y = 20;
width = 100;
height = 200;
xRadiusCorner = 20;
yRadiusCorner = 20;
foregroundFillColour = ‘Red‘;
}
In the example above a roundRect will be drawn at position 10, 20 with a
width of 100 and a height of 200. The radius of the corners will be (20,20).
The roundRect will be filled with the colour Red.
Text
A text shape has four main attributes (i.e. not including its colours and visibility). In addition to the text’s position are:
format
theText
theFont
alignment
The format of the text.
The actual text to be written.
The font to be used.
The alignment of the text.
The foreground colour is the colour of the actual text, whereas the background colour is the colour of the rectangular area that surrounds the text.
ProcSee Reference Manual
89
The Configuration Language
Scales
The fonts used should be defined in a library or in the application body.
Both 8 bits and 16 bits fonts are supported.
Note that even though a text has rotation and scaling attributes (as described for shapes in section "Shapes" on page 74), the text itself cannot be
rotated or scaled, only its position.
The format is a string that is equivalent to the format used in a printf call.
The theText attribute is the only argument for this format. If the format includes a length, the string is shown with this number of ’*’-characters instead of the value when the value requires more space than this length. The
most commonly used formats are "%s" which declares that the text is a
string of characters, and "%d" which declares that an integer number is to
be written.
text
{
x = value;
y = value;
format = string-literal;
theText = string-literal; // or a value
alignment = value;
visibility = 1; // or 0 or pTALK-code
foregroundColour = value;
backgroundColour = value;
theFont = value;
}
Example:
text
{
x = 200;
y = 250;
format = "%s";
theText = "Hello World";
alignment = 0;
foregroundColour = ‘White‘;
theFont = ‘Times‘;
In the above example, the phrase Hello World will be written using the
font Times in the colour White. The format has been set to %s to declare
that the text is a string. The text will be written at the position 200, 250.
Scales
A scale has five geometric attributes:
x
y
length
90
The top left corner x-coordinate.
The top left corner y-coordinate.
The length of the scale shape.
ProcSee Reference Manual
The Configuration Language
lengthMajorTicks
lengthMinorTicks
Scales
The length of the major ticks.
The length of the minor ticks.
The scale shape has three label attributes:
format
offset
theFont
alignment
flags
majorTickStepValue
minorTickSteps
maxValue
minValue
The format of the labels.
The offset to the labels.
The font to be used.
The alignment of the text.
The scale shape has scale attributes:
Specifies additional properties for the scale shape.
Value between the major tick steps.
Number of minor tick steps between two major ticks.
Maximum value.
Minimum value.
A scale shape also has four colour and pattern attributes.
The line width gives the thickness of the line used by the scale shape. The
border may also have a pattern and its own foreground and background
colours. The width of the border is set by assigning a value to the attribute
lineWidth and the line pattern of the border is set by assigning a value to
the attribute linePattern. Its colours are set using the foregroundColour
and backgroundColour attributes.
scale
{
backgroundColour = value;
flags = string-literal;
foregroundColour = value;
format = string-literal;
length = value;
lengthMajorTicks = value;
lengthMinorTicks = value;
linePattern = value;
lineWidth = value;
majorTickStepValue = value;
minorTickSteps = value;
offset = value;
theFont = value;
visibility = 1; // or 0 or pTALK-code
x = value;
y = value;
alignment = value;
}
ProcSee Reference Manual
91
The Configuration Language
Trend
Example:
scale
{
backgroundColour = ´white´;
flags = "startAt=none, labelOverlap=hide";
foregroundColour = ´blue´;
format = "%.2f";
length = 100;
lengthMajorTicks = 5;
lengthMinorTicks = 2;
majorTickStepValue = 10;
minorTickSteps = 4;
offset = 20;
visibility = 1; // or 0 or pTALK-code
x = 100;
y = 100;
alignment = 33;
}
Trend
trend-definition:
trend identifieropt { trend-body }
trend-body:
trend-item
trend-body trend-item
trend-item:
trendplot-definition
trendlabels-definition
trendruler-definition
trendgrid-definition
eventplot-definition
assignment-statement
trendplot-definition:
trendPlot identifieropt { trendplot-body }
trendplot-body:
trendplot-assignment-statement
trendplot-body trendplot-assignment-statement
trendplot-assignment-statement:
assignment-statement
tr-assignment-statement
tr-assignment-statement:
identifier = tr( value );
trendlabels-definition:
trendLabels identifieropt { trendlabels-body }
trendlabels-body:
assignment-statement
trendlabels-body assignment-statement
92
ProcSee Reference Manual
The Configuration Language
Trend
trendruler-definition:
trendRuler identifieropt { trendruler-body }
trendruler-body:
assignment-statement
trendruler-body assignment-statement
trendgrid-definition:
trendGrid identifieropt { trendgrid-body }
trendgrid-body:
assignment-statement
trendgrid-body assignment-statement
eventplot-definition:
eventPlot identifieropt { eventplot-body }
eventplot-body:
assignment-statement
eventplot-body assignment-statement
Trend defines the position, height, width, colours, fonts, and other user definable attributes of the area in which trend plots are to be displayed.
The trendPlot, trendLabels, trendRuler, trendGrid and eventPlot themselves are defined within the scope of the trend. Any number of trendPlot,
trenbels, trendRuler, trendGrid and eventPlot can be defined within a trend
shape’s body.
ProcSee Reference Manual
93
The Configuration Language
Trend
trend anOptionalName
{
trLog = string-literal;
x = value;
y = value;
height = value;
width = value;
visibility = 1; // or 0 or pTALK-code
backgroundColour = value;
foregroundColour = value;
backgroundFillColour = value;
foregroundFillColour = value;
lineWidth = value;
linePattern = value;
fillPattern = value;
timespan = value;
orientation = value;
scroll = value;
updateMode = value;
trendPlot anOptionalName
{
variable = string-literal;
presentation = value;
upperLimit = value;
lowerLimit = value;
visibility = value;
logFrequency = value;
foregroundFillColour = value;
backgroundFillColour = value;
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
linePattern = value;
fillPattern = value;
autoScale = value;
upperBand = value;
lowerBand = value;
visibility = 1; // or 0 or pTALK-code
}
94
ProcSee Reference Manual
The Configuration Language
Trend
trendLabels anOptionalName
{
offset = value;
alignment = value;
interval = value;
theFont = value;
format = string-literal;
visibility = 1; // or 0 or pTALK-code
foregroundColour = value;
backgroundColour = value;
}
trendRuler anOptionalName
{
visibility = 1; // or 0 or pTALK-code
foregroundColour = value;
backgroundColour = value;
lineWidth = value;
linePattern = value;
rulerIsSelected = value;
} // end of trendRuler
trendGrid anOptionalName
{
depthPosition = value;
noOfLines = value;
timeInterval = value;
timeOffset = value;
visibility = 1; // or 0 or pTALK-code
lineWidth = value;
linePattern = value;
foregroundColour = value;
backgroundColour = value;
} // end of trendGrid
eventPlot anOptionalName
{
event = value;
offset = value;
shape = value;
theTrendPres = value;
visibility = 1; // or 0 or pTALK-code
} // end of eventPlot
}
// end of trend
ProcSee Reference Manual
95
The Configuration Language
Trend
Trend Attributes
The attributes specific to the trend shape are described below.
trLog
timespan
orientation
scroll
updateMode
The name of the trend log from where it is to receive its historic trend
data.
The number of seconds for which the trend. diagram is to show data.
Whether to plot the trend curves from left to right, right to left or circular.
Scrolls this percentage when one of the curves reaches the trend diagram’s last time.
The update mode to use for the trend.
TrendPlot Attributes
The attributes specific to the trendPlot shape is described below:
variable
Either the name of the variable to trend as a string ("MyVar1"), or a
pTALK expression containing a pointer to a variable to be trended (‘aVarPointer‘, assuming that aVarPointer is of pointer type).
presentation
Nine trend presentation forms are available. These are line, layer, step
with fill, step as line, layer and step with fill to offset, layer difference
which fills the area between two trend plots, layer and step which fills
the area above the trend plot.
The largest value that will be shown in the trend diagram.
The smallest value that will be shown in the trend diagram. The upperLimit and lowerLimit attributes define the value range of the trended
variable.
The number of seconds between each time the variable is logged. This
should be equal to the lCycle attribute defined for the corresponding
variable in the trend log variable file (see section "Trend Variable Configuration File" on page 103)
Turn auto scaling of the curve on or off.
Defines a band between the trend curve’s highest value and the trend.
Only used when autoscale is on.
Defines a band between the trend curve’s lowest value and the trend.
Only used when atuoscale is on.
upperLimit
lowerLimit
logFrequency
autoScale
upperBand
lowerBand
TrendLabelsAttributes
The attributes specific to the trendLabels shape are described below:
offset
alignment
interval
96
The relative position of the trendLabels in relation to the trend diagram.
A negative value will position the trendLabels above the trend diagram,
a positive value below.
The trend labels can be left, centred or right aligned.
The number of seconds between each label. If a trend is defined with a
timespan of 240 seconds, and a corresponding timeLabel is defined with
interval of 60 seconds, the trendLabel will consist of 5 texts.
ProcSee Reference Manual
The Configuration Language
format
Trend
The text format of the labels. The formats supported are the same as
those of the strftime(3C) function.
TrendRuler Attributes
The attributes specific to the trendRuler shape are described below:
rulerIsSelected
This attribute is used to set whether the ruler is active or not. A value of
1 means that it is active, whereas a value of 0 means that it is not selected.
TrendGrid Attributes
The attributes specific to the trendGrid shape are described below:
timeInterval
The grid can be placed behind any other trend shape, above any trend
shape but behind the rulers or above the rulers as well.
This attribute determines the number of horizontal lines the grid consists of.
Number of seconds between two vertical grid lines.
timeOffset
Number of seconds to the first vertical grid line.
depthPosition
noOfLines
EventPlot Attributes
The attributes specific to the eventPlot shape are described below:
event
shape
theTrendPres
offset
The name of an event type. This name must be specified in the trend variable configuration file.
Either a name of a class or a pTALK function with the following prototype: Shape* (*func)( char* owner, int theTime, void* data ). If setting
this attribute equal to a class then the eventPlot class will create instances of this class for all events. If it points to a pTALK function, then the
pTALK function can determine the shape to create based on the parameters theTime and/or data. The data passed as argument to the pTALK
function is a pointer to the data sent when the event was added.
This attribute is the name of a trend presentation in the same trend diagram as the eventPlot shape, or it is null. If it is set equal to a trend presentation then the shapes will be positioned on the trend curve. If set to
null all the shapes will be position in the middle of the trend diagram.
See also description of the attribute offset.
An offset added to current position. If the attribute theTrendPres is null
the position is half the height of the trend diagram, otherwise the position is the trend curve at the timestamp when the event occured.
ProcSee Reference Manual
97
The Configuration Language
Trend
Example
trend TrendDiagram1
{
trLog ="MyTrendLogger";
x = 10;
y = 20;
height = 300;
width = 500;
visibility = 1;
backgroundColour = ‘DarkGrey‘;
foregroundColour = ‘LightGrey‘;
backgroundFillColour = ‘DarkGrey‘;
foregroundFillColour = ‘LightGrey‘;
lineWidth = 1;
linePattern = 2;
fillPattern = 1;
timespan = 240;
orientation = 0;
scroll = 0;
updateMode = 2;
trendPlot plot1
{
variable = "SimVar1";
presentation = 0;
upperLimit = ‘Sim.HighValue‘;
lowerLimit = ‘Sim.LowValue‘;
visibility = 1;
logFrequency = 10;
foregroundFillColour = 0;
backgroundFillColour = 0;
foregroundColour = ‘Red‘;
backgroundColour = ‘Green‘;
lineWidth = 2;
linePattern = 1;
fillPattern = 0;
autoScale = 0;
upperBand = 0;
lowerBand = 0;
visibility = 1;
}
trendLabels label1
{
offset = 15;
alignment = 0;
interval = 0;
theFont = ‘Helvetica‘;
format = "%M:%S";
visibility = 1;
foregroundColour = ‘Black‘;
backgroundColour = ‘LightGrey‘;
}
98
ProcSee Reference Manual
The Configuration Language
Internal Trend Log
trendRuler Ruler1
{
visibility = 1; // or 0 0r pTALK-code
foregroundColour = ‘Black‘;
backgroundColour = -1;
lineWidth = 1;
linePattern = 1;
rulerIsSelected = 1;
} // end of trendRuler
trendGrid Grid1
{
visibility = 1; // or 0 0r pTALK-code
depthPosition = 0;
noOfLines = 5;
timeInterval = 60;
timeOffset = 0;
lineWidth = 0;
linePattern = 1;
foregroundColour = ‘Black‘;
backgroundColour = -1;
} // end of trendGrid
eventPlot Event1
{
event = "MyEvent";
offset = 0;
shape = "MyLib.MyClass";
theTrendPres = ‘plot1‘;
visibility = 1; // or 0 or pTALK-code
} // end of eventPlot
dialogue
{
event = `cursorMoved() `;
action = `{
Ruler1.moveRuler();
theWindow().update();
}`;
}
}
In this example a trend area of size 500 by 300 will be drawn at the position
10,20. The trend will plot the value of the variable SimVar1 (note that in
this example the variable is given as a string literal) within the limits defined in the trendPlot body.
Internal Trend Log
trendlog-definition:
trendLogInternal identifieropt { trendloginternal-body }
ProcSee Reference Manual
99
The Configuration Language
Internal Trend Log
trendloginternal-body:
trendloginternal-item
trendloginternal-body trendloginternal-item
trendloginternal-item:
assignment-statement
function-definition
The Trend object described above only handles the display of the historic
trend data. A separate part of the system, the trend log, takes care of logging the actual values of the variables specified for trending.
trendLogInternal anOptionalName
{
diskLogLimIntvl = value;
timeTickIntvl = value;
timeMaster = value;
timeVariable = string-literal;
trendVariableFile = string-literal;
logDirectory = string-literal;
eventPlotFile = string-literal;
diskFlushIntvl = value;
diskBufferSize = value;
diskForceWrite = value;
}
TrendLogInternal Attributes
diskLogLimIntvl
timeTickIntvl
timeMaster
timeVariable
trendVariableFile
100
The limit for logging to disk in number of seconds. Variables that are
logged more frequently will be logged in memory instead of disk.
The interval with which the trend log will be 'ticked' by the source indicated in the timeMaster attribute. A value of 10 means that the trend log
will be run (and possibly log variable) every 10 seconds.
The source that is responsible for updating the time. A value of 1 indicates the SWBus Library, a value of 2 indicates an external task, a value
of 3 indicates that the user is updating the time through the pTALK language, and a value of 4 indicates an external task but automatically
switching to SWBus Library when the task does not send updates. If the
timeMaster attribute is not present the SWBus Library will update the
time.
The name of a variable created by the external process providing the
time tick. The external process is responsible for updating the variable
with the current time for each interval specified by the timeTickIntvl parameter. This attribute is only valid if timeMaster is set to an external
task (2 or 4).
The name of the file (including path if necessary) where the trend variables are specified.
ProcSee Reference Manual
The Configuration Language
eventPlotFile
logDirectory
diskBufferSize
diskForceWrite
diskFlushIntvl
External Trend Log
Writing variables to disk (lcycle in the trend variable specification file
is greater than or equal to diskLogLimIntvl in trend logger) can be time
consuming because disk is a slow medium compared to memory. For
this reason, the trend logger has optional parameters that can be used to
tune performance according to the demands of different applications.
Reasonable default values are supplied.
The name of the configuration file (including path if necessary) where
events are specified.
The directory where to store the trend log files (.dir, .log and .elog files).
This directory will be created if it does not exist.
A buffer is used to store a set of values in memory before writing to file.
This reduces the number of disk accesses. The value of diskBufferSize
is the number of values stored in memory before writing to disk. Default
is set to 30 values.
Used together with diskBufferSize to control writing to disk. Buffered
disk writing works well if a variable is logged on a frequent interval, say
every 10 second. However, if a trend variable is set up to be logged on
disk every hour, it would take 30 hours before the values was actually
stored on disk because there are 30 values in disk buffer. The variable
can be forced written to disk say every 5 hour by setting diskForceWrite
to 18000 (note value in seconds). Default is set to 120 seconds.
When logging data to disk, the operating system does not regularly
write your log file to the physical disk device. The diskFlushIntvl parameter states in seconds the interval at which the file will be guaranteed
written physically to disk. Flushing disk buffers may add additional
CPU load to your system, but it will minimize data loss if the system
halts for some reason. Default is no flushing.
Example:
trendLogInternal myTrendLogger
{
diskLogLimIntvl = 60;
timeTickIntvl = 5;
timeMaster = 2; // external task
timeVariable = "globalTime";
trendVariableFile = "TrendVarSpecs.ptrv";
eventPlotFile = "EventSpecs.pevl";
logDirectory
= "../LOG";
}
External Trend Log
trendlog-definition:
trendLogExternal identifieropt { trendlogexternal-body }
trendlogexternal-body:
trendlogexternal-item
trendlogexternal-body trendlogexternal-item
ProcSee Reference Manual
101
The Configuration Language
External Trend Log
trendlogexternal-item:
assignment-statement
function-definition
The trend log system in an application can be set up such that one central
trend logger is serving one or several RTM’s with historical data. This is
referred to as an external trend logger. An internal trend logger is a
trend log system where one RTM is both displaying trend curves and logging historical data.
In case of an external trend logger, the central trend logger requires a trend
log specification as described above. The RTM’s that is responsible of displaying trend curves in such a system needs a special trend log specification. Hence, separate application Tdoc files are required in such a system.
If the process variables in all RTM’s in the external trend log system is updated by one external application, then the name of the application and the
process where the variables reside must be the same in all RTM’s. Optionally both name of the application and process can be specified
trendLogExternal anOptionalName
{
extLogRTM = string-literal;
extLogApp = string-literal;
extLogProc = string-literal;
}
TrendLogExternal Attributes
extLogRTM
extLogApp
extLogProc
This is the name of the central trend logger specified by the -n option
when starting the RTM. Default name is rtm.
Optionally the name of the application where trend variables reside can
be specified
Name of process in external application if different from current RTM
(Optional)
Example:
trendLogExternal myTrendLogger
{
extLogRTM = "Logger";
extLogApp = "System";
extLogProc = "PAgent";
}
102
ProcSee Reference Manual
The Configuration Language
Trend Variable Configuration File
Notice that these attributes also support enviroment variables. The attribute
values will be expanded with the shell environment settings before connecting to the external trend logger, for instance:
trendLogExternal myTrendLogger
{
extLogRTM = "$(EXTLOGRTM)";
extLogApp = "System";
extLogProc = "Agent$(NUM)";
}
Trend Variable Configuration File
trendvarconfig-definition:
trendVarConfig identifier { trendvarconfig-body }
trendvarconfig-body:
trendvar-definition
trendvarconfig-body trendvar-definition
trendvar-definition:
trendVar identifier { trendvar-body }
trendvar-body:
assignment-statement
trendvar-body assignment-statement
eventvar-definition:
eventVar identifier { eventvar-body }
eventvar-body:
assignment-statement
eventvar-body assignment-statement
The trend variable configuration file constis of a list of trend variables and
event types that are to be trended in the system. Each entry in this list has
a description of the attributes associated with trending a variable or event.
A single trend log in the RTM can load different configuration files for
trend variables and events.
When compiling the configuration file by pcc, two binary files are created:
identifier.ptrv and identifier.pevl. Note that trend variables and event types
can also be added using the pTALK functions TrendLog::addVariable
and TrendLog::addEvent.
A trend variable can be either a process variable or an attribute. Each trend
variable has 5 attributes associated with it.
ProcSee Reference Manual
103
The Configuration Language
Trend Variable Configuration File
Syntax:
trendVarConfig aFileName
{
trendVar aVarName
{
lCycle=value;
hist=value;
type=value;
lo=-value;
hi=value;
}
}
TrendVariable Attributes
lCycle
hist
type
lo
hi
The log cycle (in seconds) of the variable. That is how often the variable
is logged in memory or disk. Note that this log cycle should not be faster
than the timeTickInterval specified in the trend log directive.
The size of the history (in seconds) for the trend variable.
How the variable is to be logged:
1 - log average value
2 - log min value
3 - log max value
4 - alternate log between max/min
5 - log actual value
6 - log as often as possible; at every time
tick. Note that the log frequency of the trend variable in this mode must
be equal to the timeTickIntvl in the trend logger. Otherwise they will be
forced equal and a warning will be issued.
7 - predictive variable; only work for set of data. Variables of predictive
type will not be updated at each time tick.
The smallest value that will be logged.
The largest value that will be logged.
Example:
trendVarConfig TrendVarSpecs
{
trendVar SimVar1
{
lCycle=10;
hist=3600;
type=5;
lo=-999999;
hi=999999;
}
}
104
ProcSee Reference Manual
The Configuration Language
Trend Variable Configuration File
An event is specified using a data type and a history. The data type can be
any predifined or user defined data type as long as they do not contain
pointers. Pointer data types are not supported. To view an event an eventPlot must be created in a trend diagram. Each event has 2 attributes associated with it in the trend configuration file.
Syntax:
trendVarConfig aFileName
{
eventVar eventName
{
datatype=string-literal;
hist=value;
}
}
TrendEvent Attributes
datatype
hist
The data type for the event. This data type must be either a predefined
data type or an user-defined struct declaration. The predefined data
types are int, float, double etc. All user-defined data types must be declared in pdat files and loaded into the rtm using the database "myFile.pdat"; statement. Pointer data types are not legal as a data type for
an event. Struct declarations used in events can not contain fields of type
pointer. Arrays can be specified using either the syntax datatype[num]
or datatype#num.
The size of the history (in seconds) for the event variable. Events will
be autmatically deleted from the log when their history expires.
Example:
trendVarConfig EventVarSpecs
{
eventVar Event1
{
datatype="int32";
hist=3600;
}
eventVar Event2
{
datatype="float[10]";
hist=7200;
}
}
ProcSee Reference Manual
105
The Configuration Language
COM Configuration
COM Configuration
COM is only supported on the Windows platform. Loading an application
into the RTM on a Unix platform will fail if it contains COM definitions.
The declarations for the COM types follow here:
comLibrary
comLib-decl:
comLibrary identifier { comLib-body }
comLib-body:
comLib-item
comLib-body comLib-item
comLib-item:
assignment-statement
comClass-decl
comInterface-decl
comEnum-decl
ComLibraries are used as a container for the declarations of the comClasses, comInterfaces, and comEnums which should be available to the user
when using COM components. It must include a LIBID, which is used to
find the comLibrary.
Example:
comLibrary myComLib
{
LIBID = "TheComLibGUID ";
majorVersion = 1;
minorVersion = 0;
}
comClass
comClass-decl:
comClass identifier { comClass-body }
comClass-body:
assignment-statement
ComClasses are used to declare the COM component definitions which
should be available to the user. It must include a CLSID, which is used to
find the comClass. comClass is normally not specified, unless the comClass is renamed.
Example:
comClass myComClass
{
CLSID = "TheComClassGUID ";
}
106
ProcSee Reference Manual
The Configuration Language
COM Configuration
comInterface
comInterface-decl:
comInterface identifier { comInterface-body }
comInterface-body:
assignment-statement
ComInterfaces are used to declare the COM interface definitions which
should be available to the user when using COM components. It must include an IID, which is used to find the comInterface. comInterface is normally not specified, unless the comInterface is renamed.
Example:
comInterface myComInterface
{
IID = "TheComInterfaceGUID ";
}
comEnum
comEnum-decl:
comEnum identifier { comEnum-body }
comEnum-body:
assignment-statement
ComEnums are used to declare the constants available when using COM
components. It must include an ENUMID, which is used to find the
comEnum. comEnum is normally not specified, unless the comEnum is renamed. However, not all comEnums have ENUMIDs. These can not be renamed, and can not be specified in the .Tdoc file.
Example:
comEnum myComEnum
{
ENUMID = "TheComEnumGUID ";
}
ProcSee Reference Manual
107
The Configuration Language
COM Configuration
comObject
comObj-def:
comObject comClassId identifier { comObj-body }
comClassId:
identifier
longName
fullName
comObj-body:
comObj-item
comObj-body comObj-item
comObj-item:
comInterfaceObj-def
comEventObj-def
attribute-definition
function-definition
ComObjects are used to define the COM objects that should be running in
the RTM.
comShape
comShape-def:
comShape comClassId identifieropt { comShape-body }
comClassId:
identifier
longName
fullName
comShape-body:
comShape-item
comShape-body comShape-item
comShape-item:
comInterfaceObj-def
comEventObj-def
attribute-definition
function-definition
ComShapes are used to define COM objects that should be running in the
RTM, that may have a visible appearance. (Often called ActiveX controls.)
ComShapes have x, y, width, and height, and other attributes and functions
related to the display of the comShape.
comInterfaceObject
comInterfaceObj-def:
comInterfaceObject comInterfaceId identifier { comItfObj-body }
comInterfaceId:
identifier
longName
fullName
comItfObj-body:
comItfObj-item
comItfObj-body comItfObj-item
comItfObj-item:
assignment-statement
108
ProcSee Reference Manual
The Configuration Language
COM Configuration
ComInterfaceObjects are used to access the COM objects running in the
RTM. Assignment-statements in the comInterfaceObject are used for dynamics.
comEventObject
comEventObj-def:
comEventObject comInterfaceId identifier { comEventObj-body }
comInterfaceId:
identifier
longName
fullName
comEventObj-body:
comEventObj-item
comEventObj-body comEventObj-item
comEventObj-item:
function-definition
ComEventObjects are used to get callbacks from the COM objects running
in the RTM. A function in the comEventObject is called by the COM object if the function name matches the name of a function in the interface.
ProcSee Reference Manual
109
The Configuration Language
COM Configuration
Example:
comObject myComLib.myComClass myComObj
{
persist = 1;
data = "3242323233423213424164312391242..."
"903234234234234304324253043552358";
comInterfaceObject myComLib.myComItf itf {}
comEventObject myComLib.myComItf ev {}
}
comShape MSForms.CheckBox
{
x = 100; y = 105;
width = 145; height = 20;
visibility = 1;
foregroundColour = `white`;
backgroundColour = -1;
theFont = `helv_12`;
persist = 1;
data = "003204312312321412412412391242..."
"90324324820395230423048230482308";
comEventObject MSForms.MdcCheckBoxEvents dei
{
function `void Change()
{
printf("Toggled: %d", di.Value);
}`
}
comInterfaceObject MSForms.IMdcCheckBox di
{
ForeColor = `myComColFunc()`;
}
function `void onUpdate()
{
sprintf(buf,"abc %d", random(10000));
di.Caption = buf;
}`
}
110
ProcSee Reference Manual
The ProcSee database file format (.pdat)
Introduction
The ProcSee database file format (.pdat)
The ProcSee database files are used to define variables and struct data
types in RTMs and applications.
Introduction
A database file used by ProcSee is a text file containing definitions of
struct data types, variables, forward declarations, and pragma directives.
ProcSee accepts one or several database files to be loaded into a process in
the RTM.
A good guideline for developing ProcSee applications, are to separate the
variables and struct definitions in several files. The struct definitions
should normally be located in a dedicated file, separating them from the
variable definitions and variable initialization. Since the syntax of the
struct definitions resembles the "C" programming language (except for the
struct field initialization), these database files can be more or less included
directly into application source code (#include in a "C" language source
file).
A database file can, and will in most cases, be used both by the RTM and
the application program (loaded into the application using PfReadScript).
To be able to transfer variable values between an application and a RTM,
the variables and their data types have to be known and be of the same data
type in both processes. The easiest and least error prone method to achieve
this is to use database files. Struct definitions are a lot easier to specify in
a database file compared to using API functions.
ProcSee uses process variables to transfer updated data values between an
application and a RTM. These process variables can be linked dynamically
to GUI components, which automatically will be update by the RTM. In
many cases when designing a ProcSee application, the GUI is created
without the application program running. To be able to link process variables to GUI components, these variables must exist and be loaded into a
process in the RTM using one or several database files.
ProcSee Reference Manual
111
The ProcSee database file format (.pdat)
The database file
To load a database file into the RTM, insert the following entry in the application resource file (<applicationName>.Tdoc):
database "./filename.pdat";
The database files can also be read by the application using the API function PfReadScript(3c).
In the ProcSee documentation the terms structures and records may be
used interchangeably. Both refer to the type specified struct.
The database file
The database file should have .pdat as file extension. The database file is
a human readable ascii file, defining structs, and variables, including default values for the variables. The file contains six types of constructs:
struct definitions, struct declarations, variable definitions, variable initialization, function declarations and pragma directives.
Structure Definitions and Declarations
Structure definitions start with the keyword struct, followed by the name
of the type name that we want to use for this structure. After the structure
name, the definition of the struct consists of lines of struct field definitions.
The start of these definitions is marked by a left curly brace {, and the end
of the struct definition is marked by a right curly brace } followed by a semicolon ;. Struct field definitions look exactly like variable definitions.
Possible initialization values in the struct only take effect reading the database file from the application, and are more like default values, in that the
values of the struct fields are often set later by the use of variable initialization constructs.
If a structure definition does not have the { struct-fields } part, it is called
a structure declaration, and is used in cases where a pointer to the structure
is needed before the definition of the structure.
Variable Definitions
Variable definitions start with a type name, which can be one of the following types: int32, uint32, int16, uint16, char, float, double, void, or a
struct name. After the type name a pointer operator * can be specified if
the variable is to be a pointer to the specified type. The variable name to
define follows after this. If the variable should be an array, the size of the
array is specified after the variable name. The array size is specified inside
square brackets [,]. Then there can be a possible initialization. The initialization starts with =, and consists of an integer, character, string or floating
point constant. The variable definition end with a semicolon ; .
112
ProcSee Reference Manual
The ProcSee database file format (.pdat)
The database file
Variable Initialization
Variable initialization consists of a variable name, eventually with array indexes [ integer constant ] , eventually concatenated with a dot . by one or
more struct field names with eventual array indexes. This location is then
followed by = followed by a constant as described above. The variable initialization ends with a semicolon ; .
Function Declarations
The remote functions that a process defines, can be declared in the .pdat
files, to allow the RTM to compile pTALK code containing call to remote
functions, without the process being connected. These function declarations start with the type void, followed by the name of the function and the
function arguments inside parentheses. Then a semicolon ; ends the declaration.
Pragma Directives
A pragma directive in ProcSee .pdat files provides additional information
to the RTM, or the application when reading database files using PfReadScript. The syntax of a pragma directive is #pragma followed by a string
or directive, like #pragma PpPush. The directive is interpreted by the
RTM or the API (application). Notice that if a pragma directive is unknown, it is ignored without issuing any warning. Therefore, it is important
that pragma directives are not misspelled.
All the directives used by ProcSee begins with a capital P followed by a
small p, i.e. Pp (ProcSee pragma). Some of the pragma directives accept
values indicating whether they are enabled or disabled. Use on or true to
enable a pragma directive, or off or false to disable. The syntax is as follows:
#pragma PpReceiveRtmUpdates=on
#pragma PpSendApiStringUpdates=off
The following pragma directives are known by ProcSee:
Table 1: Pragma Directives
Directive
Description
PpPush
Saves current states of all the pragma
settings. A call to PpPush should
always be followed by a corresponding call to PpPop.
PpPop
Restores the states which previously
was pushed by PpPush.
ProcSee Reference Manual
113
The ProcSee database file format (.pdat)
Examples
Table 1: Pragma Directives
Directive
Description
PpReceiveRtmUpdates
Whether updated variables in the
RTM should be transferred to the
application or not. For more information, see the API function PfReceiveRtmUpdates
PpReceiveRtmStringUpdates
Whether updated string variables or
string fields in struct variables should
be transferred from the RTM to the
application or not. For more information, see the API function PfReceiveRtmStringUpdates
PpSendApiStringUpdates
Whether string variables or string
fields in struct variables updated in the
API should be transferred to the RTM
or not. For more information, see the
API function PfSendApiStringUpdates.
The pragma directives PpReceivRtmUpdates, PpReceiveRtmStringUpdates and PpSendApiStringUpdates accept the following assignment
values: on, true, off or false.
Examples of pragma directives:
#pragma PpPush
#pragma PpSendApiStringUpdates=true
char*
aString = “This is a string”;
#pragma PpPop
Examples
Examples of definition of simple variables:
int32
int16
char
float
double
114
anInt;
aShort;
aChar;
aFloat;
aDouble;
ProcSee Reference Manual
The ProcSee database file format (.pdat)
Examples
Examples of definition of simple arrays:
int32
int16
char
float
double
anIntArray[10];
aShortArray[5];
aCharArray[100];
aFloatArray[20];
aDoubleArray[7];
Examples of definition of simple pointers:
int32*
int16*
char*
float*
double*
void*
anIntPtr;
aShortPtr;
aCharPtr;
aFloatPtr;
aDoublePtr;
aVoidPtr
Examples of definition of simple variables, with initialization:
int32 testvar = 0;
int32 counter = 0;
float level = 0;
float value = 50.0;
int32 n = 5;
int32 var1 = 5;
Declaration of structures (type declaration) :
struct Node;
struct myRec;
// After these declarations it is possible to make
// pointers to these structures.
ProcSee Reference Manual
115
The ProcSee database file format (.pdat)
Examples
Definition of structures (type definitions) :
struct ValveRec
{
char theName[32];
int32 theValue;
};
struct Vect
{
float x0;
float y0;
float x1;
float y1;
int32 col;
int32 lineWidth;
char name[16];
};
struct startRec
{
int32 F1;
};
struct inRec
{
int32 F1;
startRec* F2;
};
struct outRec
{
int32 F1;
inRec F2[3];
int32 F3[5];
startRec* F4;
int32 F5;
float F6;
float F7[5];
char F8[32];
int16 F9;
int16 F10[5];
uint16 F11;
uint16 F12[5];
uint32 F13;
uint32 F14[5];
char F15;
};
116
ProcSee Reference Manual
The ProcSee database file format (.pdat)
Examples
Example of structure declaration, and its use:
struct node;
// Declaration of node struct.
struct connect
{
int32 visited;
node* conectTo;
connect* next;
};
// Ptr to node struct.
struct node
// Definition of node struct.
{
char nodeName[32];
connect* firstConnect;
};
Definition of structures (type definitions) with default values. Note however that the default values specified here will only be used for variables
defined in a .pdat file.
struct REC1 // A structure with default values.
{
double aDouble = 5678.89;
char theName[32] = "A string initialization";
int32 theValue = 45;
char aChar = 'p';
char anotherChar = 123;
int16 aShort = 'd';
double anotherDouble = 567;
};
struct REC2
{
int32 F11 = 11;
REC1 R12;
REC1 *F12;
int32 F13 = 13;
};
Examples of definition of structure variables:
Vect vectors[100];
startRec startRecVar;
inRec inRecVar;
outRec outRecVar[3];
ValveRec RA00P901;
ValveRec YX13X801;
ProcSee Reference Manual
117
The ProcSee database file format (.pdat)
Examples
Examples of initialization of the variable structure fields:
RA00P901.theName = "RA00P901";
RA00P901.theValue = 0;
YX13X801.theName = "RA00P901";
YX13X801.theValue = 0;
startRecVar.F1 = 3;
outRecVar[1].F1 = 3;
outRecVar[1].F2[1].F1 = 3;
outRecVar[1].F3[3] = 3;
outRecVar[1].F5 = 3;
outRecVar[1].F6 = 3.0;
outRecVar[1].F7[3] = 3.0;
outRecVar[1].F8 = "Test case started var set to 3";
outRecVar[1].F9 = 3;
outRecVar[1].F10[3] = 3;
outRecVar[1].F11 = 3;
Examples of remote function declarations:
void myFunc1();
void myFunc2(int a, char* b);
void anotherRemoteFunction(float x, float y);
Examples of pragma directives:
// Disable receive RTM updates and enable API string transfers
#pragma PpReceiveRtmUpdates=off
#pragma PpSendApiStringUpdates=on
int32 v1;
char* s1=”This string will be sent to the RTM”;
...
// Store current settings and enable string and variable updates.
#pragma PpPush
#pragma PpReceiveRtmUpdates=on
#pragma PpReceiveRtmStringUpdates=on
char* s2 = “Transferred: both directions”;
...
// Note a PpPush must be followed by a PpPop.
// After this point receive RTM updates is disabled.
#pragma PpPop
int32 v2;
char* s3 = “Not transferred to the application”;
118
ProcSee Reference Manual
Windows to UNIX mapping file
Introduction
Windows to UNIX mapping file
The ProcSee mapping file is used to convert Windows drive letters to UNIX
paths.
Introduction
Since ProcSee can be running on both Windows and UNIX platforms we
have made the document, .Tdoc, files compatible. In order to achieve this
compatibility a mapping file which convert UNIX paths to Windows
drives where needed.
This mapping file is only needed if the ProcSee application should be running on both UNIX and Windows platforms. Internally in the RTM all file
paths are converted to UNIX paths. If the file windrvux.pth does not exist
file names like h:\app.pctx will be converted to /LOCALPC/H/app.pctx.
When trying to run an application referring to /LOCALPC/... on a UNIX
platform the RTM will fail. If a mapping file is used associating the drive
H: with for instance the UNIX path /prj/project1 the .Tdoc files would be
compatible.
This mapping file has a predefined name which is called windrvux.pth. It
is a plain text file which must be situated on either the $PROCSEE_DIR
directory, your $HOME directory or in current working directory.
ProcSee searches for this mapping file in the following order:
1) ./windrvux.pth
2) $HOME/windrvux.pth
3) $PROCSEE_DIR/windrvux.pth.
If the file is found in one of the above locations ProcSee stops searching
for it in the other directories.
ProcSee Reference Manual
119
Windows to UNIX mapping file
Layout
Layout
The layout of the windrvux.pth text file is as follows:
<Drive_1>: <Path_1>
<Drive_2>: <Path_2>
...
<Drive_n>: <Path_n>
, where <Drive_#>: is a letter indicating the Windows drive. An example
is C:. The next word is the full path to the disk the Windows drive is associated with. An example of a windrvux.pth file is given in the section below.
Each line in this file is separated by a new line. Multi line comments are
surrounded by /* and */, and single line comments starts with //. Observe
that forward slashes are used and not back slashes as would be expected on
a computer running Windows.
Examples
An example of a windrvux.pth file.
/**************************************************
*
* Configuration file:
*
* Mapping file from window drive to unix path.
*
**************************************************/
120
// Drive: Path:
Comment:
P:
M:
// Project directory
// Home directory
/prj
/users/gandalf
ProcSee Reference Manual
PART
3
Manual pages
121
122
ProcSee Reference Manual
ProcSee Executables Manual pages
ProcSee Executables Manual pages
ProcSee Reference Manual
123
124
ProcSee Reference Manual
ProcSee Executables Manual Pages
control (1)
NAME
control - a server for service management.
SYNOPSIS
control [ -? | -p portNumber | -d debugOpts ]
DESCRIPTION
control is a server that is used to register and unregister services. A service is a uniquely
named port on a host. Software Bus processes register themselves with control in order
to locate other processes. Users do not need to be aware of control’s existence as it should
normally be running as a service. A utility program called controlutil can be used to query
control’s state and send administrative messages to control.
OPTIONS
-?
Writes a summary of the control options to stdout.
-p
Specifies the port number control should use when listening for clients. Using
this option will override environment variable CONTROLPORT.
-d
Specifies that control should write debug output to stdout for certain conditions. <debugOpts> specifies a combination of conditions. Available conditions are: ALL, CONNECT, ARCH, REGISTER, COMIX, HOSTACCEPT,
PING. Conditions can be combined using a non-whitespace character, for instance CONNECT|PING.
NOTE
control requires a specific entry in the services database in order to start properly. See instructions on how to install the SWBus in the SWBus User’s Guide for details.
ENVIRONMENT
The host on which control is running can be specified using the environment variable
CONTROLHOST.
The port control will use when listening for clients can be specified using the environment variable CONTROLPORT.
The location of the control executable can be specified using the environment variable
CONTROLPATH, if it is not located in $BUSPATH/bin/$ARCH. This enables processes to start control automatically on the local host if one is not already running and CONTROLHOST is not set to a remote host.
See the SWBus User’s Guide for a complete list of environment variables.
ProcSee Reference Manual
125
ProcSee Executables Manual Pages (1)
FILES
$BUSPATH/bin/$ARCH/control
SEE ALSO
controlutil, SWBus
126
ProcSee Reference Manual
control (1)
ProcSee Executables Manual Pages
controlutil (1)
NAME
controlutil - a utility program for sending messages to control.
SYNOPSIS
controlutil [ -? | -d -h hostName -k -q -Q -c className -V -u -i serviceName -t timeout ]
DESCRIPTION
controlutil is used to extract information from control, to unregister all services or to tell
control to stop running.
OPTIONS
-?
Write a summary of the controlutil options to stdout.
-d
Enable debug output from controlutil to stdout.
-h
Specify the name of the host where control is running. If no hostname is
specified, the value of the environment variable CONTROLHOST is used if
set, otherwise localhost is assumed.
-k
Tell control to stop running.
-q
Write information to stdout. The output includes hostname and version number of control and a list of all registered services with service ids. Services
that are connected to control when controlutil extracts its information are
specified with processname, process class, hostname and processId. Formerly
registered services that has exited without unregistering are listed as disconnected. See below for an example output.
-Q
Like the -q option, but more informaiton about each connected process is listed. The additional information includes IP-addresses, SWBus version, and
ping information.
-c
Like the -q option, but only information about processes of class className
is listed.
-V
Write the hostname and version number of control to stdout.
-u
Unregister all services. Using this option will fail if one or more services are
currently connected to control.
-i
Get the unique identifier of the named service.
-t
Timeout in milliseconds used when connecting to control. Default=500ms.
EXAMPLES
$ controlutil -h castor -q
controlutil (SWBus Release 2.0 June 97)
Process information from control (2.0) at castor:
1: performanceServer disconnected
ProcSee Reference Manual
127
ProcSee Executables Manual Pages (1)
controlutil (1)
2: performanceClient disconnected
3: simpleServer host: castor, port: 17101, pid: 11513, version: 2.0
4: simpleClient host: castor, port: 17103, pid: 11520, version: 2.0
There are 4 processname(s) registered, 2 of these are currently connected.
ENVIRONMENT
The default host for control can be set using the environment variable CONTROLHOST.
See the SWBus User’s Guide for a complete list of environment variables.
FILES
$BUSPATH/bin/$ARCH/controlutil
SEE ALSO
control
128
ProcSee Reference Manual
ProcSee Executables Manual Pages
Execute (1)
NAME
Execute - A ProcSee utility to remotely execute pTALK code
SYNOPSIS
Execute [option...]
Options
Execute recognizes the following options:
-h <host>
- explicitly state the control server hostname. Default is
CONTROLHOST if specified or the machine where
Execute is started.
-a <application>
- explicitly state the name of the application in the RTM to
connect to. Default is “System”.
-p <process>
- explicitly state the name of the process to which Execute
will connect. Default is “Execute”.
-r <rtm>
- explicitly state the name of the RTM. Default is “rtm”.
-c <command>
- specify a pTALK command to execute. The command
should be specified as a character string of pTALK code
(pTALK compound statement).
-s <scope>
- explicitly state the scope in which to execute the command.
Default is ::<application name>
-d
debug - set Execute in debug mode.
-v
vervose - set Execute in verbose mode.
-?
help - write a summary of the Execute options to stdout.
DESCRIPTION
Execute will connect to the application given as option and execute the given pTALK
compound statement in the given scope. The scope is given as a fullname. Execute disconnects and terminates immediately when the command has been executed.
EXAMPLE
Execute -a demoSim -s “::demoSim” -c “{ freeze(); }”
ProcSee Reference Manual
129
ProcSee Executables Manual Pages (1)
ged (1)
NAME
ged - The ProcSee editor.
SYNOPSIS
ged [options]
DESCRIPTION
ged is used to interactively edit a user interface displayed by the ProcSee Run-Time Manager(RTM). ged is an X-Windows OSF/Motif program that has two main windows: the main
window, and the drawing editor window. The main window is used to edit the top-level
properties of an application or library. The drawing editor window is used to edit pictures or
classes, and the properties of the pictures or classes and all objects contained within them.
Because ged relies on the editing capabilities of the ProcSee Run-Time Manager, the control
program and the RTM have to be running for ged to be able to work. If control or RTM is
not started, ged will display a message stating that it is trying to connect.
Options
ged accepts these options:
-rtmName <RtmName>
- connect to the RTM with the given name.
-gedName <GedName>
- explicitly state the name of ged.
-controlHost <HostName> - name of computer where control/controlService is running.
On X-Windows ged accepts most of the Motif options in addition to the following options
-application <AppName> - connect to this application at startup. The application
should be running in the RTM.
-debug
- print activity information.
-extDebug
- print additional activity information.
-?
help - write a summary of the ged options to stdout.
X Resources
In addition to consulting standard locations for X resources, ged also looks for the file Ged
in the user’s home directory. This resource file has priority over the other X resource files.
130
ProcSee Reference Manual
ProcSee Executables Manual Pages
ged (1)
ged accepts the following X resources in addition to standard X and OSF/Motif resources:
Name
Class
Type
DefaultValue
Explanation
autoUpdate
AutoUpdate
Boolean
True
whether ged should automatically call update() when
commands are entered on
ged’s command line, or
when OK buttons on Attribute editors are selected
application
Application
String
"NoName"
The application to connect
to at startup.
classList
ClassList
Boolean
False
classList/classBrowser. True
means classList
controlHost
ControlHost
String
“localhost“
The computer to connect to
to find control/controlService, which is used for finding all other processes to
connect to.
debug
Debug
Boolean
False
debug information on/off.
drawEdWinGeometry
DrawEdWinGeometry
String
““
The size of the Drawing Editors main window
extDebug
ExtDebug
Boolean
False
extended debug information
on/off.
gedName
GedName
String
“___GED”
The name ged uses when
connecting to the RTM
imagePath
ImagePath
String
““
Specifies the directory
where ged will look for the
user’s images.
libPath
LibPath
String
““
Specifies the directory
where ged will look for the
user’s libraries.
mainWinGeometry
MainWinGeometry
String
““
The size of ged’s main window
overrideVueColours
OverrideVueColours
Boolean
True
Whether ged should override Vue’s way assigning
colours
pictPath
PictPath
String
““
Specifies the directory
where ged will look for the
user’s pictures.
rtmName
RtmName
String
"rtm"
The name of the RTM to
connect to. (The rtm -n
option).
startInTestMode
StartInTestMode
Boolean
True
False means to start drawing editor in select mode.
ProcSee Reference Manual
131
ProcSee Executables Manual Pages (1)
Name
toolIconSize
Class
ged (1)
Type
ToolIconSize
String
DefaultValue
LARGE
Explanation
Whether ged should use
large or small icons. Two
options available: SMALL
and LARGE.
Windows Resources
ged look for the resources in the Registry under the key
HKEY_CURRENT_USER\Software\IFE\ProcSee
It is recommended that the ProcSee utillity program p3RegAdmin which is part of the distribution, is used when changing the ged resources. Start the p3RegAdmin program and
press the ged tab. Do the changes to the resources and press the ok or apply button. The
changes will take effect next time ged is started. This utillity program is not documented.
On Windows the following resources are available:
Resource name
Type
Default value
Explanation
libPath
String
““
Specifies the directory where ged will
look for the user’s
libraries
imagePath
String
““
Specifies the directory where ged will
look for the user’s
images.
picturePath
String
““
Specifies the directory where ged will
look for the user’s
pictures.
ENVIRONMENT
PROCSEE_DIR
The path to the ProcSee installation directories, e.g.:
PROCSEE_DIR=/usr/local/procsee
ARCH
The computer hardware and software architecture; at the
moment it is one of: winArch, hpArch, sunArch, macX86Arch,
or linuxX86Arch.
FILES
$PROCSEE_DIR/bin/<ARCH>/ged The ProcSee editor executable.
$PROCSEE_DIR/etc/<ARCH>/*
The files used internally by ged.
$HOME/Ged and $HOME/.Xdefaults User specific X resources for ged.
132
ProcSee Reference Manual
ProcSee Executables Manual Pages
ged (1)
WARNINGS
In the current release, there are no warnings if you try to save or document an application,
picture, or library to an already existing file. The existing files will be overwritten unless
they have been write protected.
EXAMPLES
Below is a sample of a Ged X-resource file. This file should be located in the user’s home
directory.
ged*background:red
ged*foreground:yellow
ged*overrideVueColours:True
ged*rulersForeground:white
ged*rulersBackground:#9a9a9a
ged*XmText*fontList:-*-courier-bold-r-*-12-*-iso*
ged*XmTextField*fontList:-*-helvetica-bold-r-*-14-*-iso*
ged*fontList:-*-helvetica-bold-r-*-12-*-iso*
ged*libPath:./libraries
ged*pictPath:./pictures
ged*imagePath:./images
ged*mainWinGeometry:300x300+100+100
ged*drawEdWinGeometry:600x550-10-100
ged*autoUpdate:False
SEE ALSO
rtm, control
ProcSee Reference Manual
133
ProcSee Executables Manual Pages (1)
p3sim (1)
NAME
p3sim - create small test applications
p3simTalk - send commands to p3sim
SYNOPSIS
p3sim [ -f simFile ] [ -e errorLog ] [ -v ] [ -h host ]
p3simTalk [ -p processName ] [ -h host ]
DESCRIPTION
p3sim is a program that is used to create small test applications. The program sends updated
variables to the RTM at regular intervals. It is very easy and it is very fast to develop small
simulators to test for instance dynamics in a picture or a trend configuration. The only thing
one have to do is to create a configuration file which describes the entire simulator. This configuration file consists of one or several variable definitions.
Options
p3sim recognizes the following options:
-v
verbose - turning verbose mode on.
-f <simFile>
- name of the configuration file describing the simulator.
-e <errorLog>
- specifies the error log file where error messages will be
written.
-h <host>
- name of the host where the control server is running.
-?
help - write a summary of the p3sim options to stdout.
The configuration file can be divided into two parts. The first part describes among other
things the connection to the RTM, and the second part describes the variables and the way
these are updated. Observe that the first part must precede the second part in the configuration file. The general layout of the configuration file is as follow:
simulator “<sim>”
{
}
where simulator is a predefined keyword which must be the first word in the specification
file. The next word is the name of the simulator. This name must be surrounded by double
quotes and is only used internally in the p3sim program. Owing to this fact the simulator can
be called whatever you like. It is part of the syntax because it maybe will be used in the future. In the body which is surrounded by curly braces comes the two parts described in the
previous paragraph.
The following keywords are used in the first part:
application
134
name of the application
ProcSee Reference Manual
ProcSee Executables Manual Pages
process
name of the process
rtmName
name of the rtm
database
the database file name
timeVariable
name of the time variable
startTime
the time variable’s start time
timeTickIntvl
trend logger time tick interval
randomCycle
random cycle probability
p3sim (1)
All these keywords are not necessary to specify but some of them must be set otherwise
p3sim will use its own default settings. This setting will probably not correspond to the
names in your environment. This includes the keywords application, process and rtmName. The keywords timeVariable, startTime and timeTickIntvl is only necessary to
specify if the simulator is connected to an RTM containing trend curves. Observe that all
names in p3sim must be specified using double quotes and all statements must be terminated by a semi-colon.
With the keyword application the name of the application in the RTM to connect to is
specified. This name must correspond to the name of the application loaded into the
RTM.
The process keyword specifies the name of the process in the RTM the variables in the
configuration file used by p3sim, are defined in. This is usually the same name as the application name.
Notice that p3sim is always opened as a server. The RTMs can always take the initative
to connect to p3sim using the pTALK function connectToProcess(...). p3sim can also act
as a client to the RTMs. If the keyword rtmName is specified in the configuration file,
the p3sim application will be a client to the specified RTMs. The keyword rtmName
specifies the name of the RTM p3sim will try to establish a connection to. The name of
the RTM is specified using the option -n at start up. The default name of the RTM is rtm.
For more information about this see rtm(1). No connection will be established if these
names do not match. If the simulator is going to establish connections to more than one
RTM, specify the name of the rtms on several lines using the keyword rtmName. The
syntax is as follows:
rtmName = “rtm1”;
rtmName = “rtm2”;
.
.
rtmName = “rtm-n”;
If the variable description part of the configuration file consists of a complex variable, like
a struct or an array the database file (*.pdat) must be specified. Use the keyword database
followed by a file name to specify the RTM database file. If the RTM database is separated in several files these files can be specified on several lines using the keyword database.
The keyword timeVariable specifies the variable used as a time master for the trend logger. This variable name must correspond with the timeVariable attribute in the trend logger entry in the application. The timeMaster attribute in the same trend logger must be
ProcSee Reference Manual
135
ProcSee Executables Manual Pages (1)
p3sim (1)
set to 2 (external driven). For more information about this see the description about the configuration of the trend logger in the users guide. This attribute is not necessary to specify if
the RTM p3sim is connected to does not contain a trend logger.
With the keyword startTime you specify the start time of the timeVariable. This attribute
can be set to a non negative value or to the keyword current. If it is set to current the time
variable will be set to the current unix time every time the periodic function is called. The
periodic function will be called every second. If it is set to an integer value then the simulation will start on this time and it will be incremented 1 second ahead each time the periodic
function is called.
The next keyword to describe is timeTickIntvl. This attribute determines how often the updated time variable is sent to the connected RTMs. In the trend logger entry in the application
the value of the attribute timeTickIntvl must correspond to this attribute value. It is only necessary to specify this attribute if the simulator is connected to an RTM containing a trend
logger.
In the next section where the variable specification part is described the keyword cycle is one
of the attributes in a variable description. This attribute can be set to the value random meaning that the value will be updated not cyclic but at random intervals. The keyword randomCycle specifies the probability for the variables where the attribute cycle is set equal to the
keyword random to be updated. This attribute can be set to a floating point value between 0
and 100 percent. For more information about cycle see the description in the sections below.
This attribute can be changed from the program p3simTalk. A detailed description of
p3simTalk is given in a later section.
The second part of the configuration file consists of the variable descriptions. A variable in
this configuration file consists of a set of predefined attributes which must be set. This includes the variable name, the data type, the update cycle and the update method. The update
method must be set equal to one of the predefined functions in p3sim which will change the
variable value each time it is updated. The update functions can be combined to produce
more complex functions.
Specification of a variable in the configuration file is very easy owing to the fact that there
are a limited number of keywords and functions. A variable is specified using the keyword
update followed by the variable name and a body in curly braces. In the body the variable’s
properties are described. The syntax for a variable is as follows:
update “<variable>”
{
cycle = <theCycle>;
datatype = <dataType>;
value = <function>;
}
where <variable> must be surrounded by double quotas. The variable can be either a single
variable or a more complex variable like structs or arrays in general. If more complex variables are specified in the configuration file the database file (.pdat) for the RTM must be specified using the keyword database. For more information about this see the paragraph above
describing the database.
136
ProcSee Reference Manual
ProcSee Executables Manual Pages
p3sim (1)
The keyword cycle determines how often the variable is updated. Setting the attribute to
1 will update the variable every second. This attribute can be set to any non negative integer value or the keyword random. Setting it to random will not update the variable at
regular intervals but instead at random intervals. The probability for updating the variable
in random mode is set by the keyword randomCycle. For more information about this
mode see the paragraph above describing the randomCycle keyword. The smallest possible resolution for this attribute is 1 second.
The dataType attribute can be set equal to one of the predefined data types:
int16
- short int, 16 bit
uint16
- short unsigned int, 16 bit
int32
- int, 32 bit
uint32
- unsigned int, 32 bit
float
- float, 32 bit
double
- float double, 64 bit
The value field is maybe the most important part of the entire variable specification. The
variable can be set equal to a number of predefined set of functions. Two or more functions can be combined by addition or subtraction. As a matter of fact there are no limits
whatsoever for the number of function that can be specified in one value field.
There are two modes of operations of the function specification which in ProcSee terminology is called dynamic and static binding. With a dynamic binding the variable value
will every time it is updated also call the predefined function’s update method. It is very
likely that the value will change, off course this depends on the function. A dynamic binding is set using back quotes surrounded the function specifications.
value = `<function>`;
A syntax for a static binding is much like dynamic binding except that the back quotes
surrounding the specification is omitted. The purpose with this mode is to initialize a variable once to a specific value or to a random value. The variable value will never change
after the first update. In other words the variable will remain the same as long as p3sim is
running. This mode is hardly very useful since a variable can be set to an initial value in
the ProcSee database file. The syntax is as follows:
value = <function>;
The <function> can be as described above combined by addition or subtraction. The symbols + and - are used for addition and subtraction, respectively. The syntax is as follows.
value = `func1() +- func2() ... +- func-n()`;
value = func1() +- func2() ... +- func-n();
// dynamic
// static
Observe that p3sim recognizes everything inside /* and */ as a comment and also the rest
of the line from // as a comment.
p3sim has a set of predefined functions as described above which the value field of the
variable can be set equal. The following is a list of predefined functions in p3sim which
later can be used for easy reference. Each and every of these will be described in detail in
a later section.
ProcSee Reference Manual
137
ProcSee Executables Manual Pages (1)
p3sim (1)
aValue
const( aValue )
step( initValue, min, max, stepValue, inc )
step( initValue, max, min, stepValue, dec )
cosine( amplitude, phaseDelay, cycle, meanValue )
sine( amplitude, phaseDelay, cycle, meanValue )
random( minValue, maxValue )
noise( probability, minValue, maxValue )
probability( probability, minValue, maxValue )
gauss( meanValue, standardDeviation, minValue, maxValue )
predefined( probability, v1, v2, ..., vn )
sequence( v1, v2, ..., vn )
p3simTalk is a program when connected to p3sim can change the state of some settings in
p3sim. This includes for instance turning verbose mode on or off, turning on or off the printing of the total number of variables sent to the RTM, etc. Note that p3simTalk is not available on Windows.
Options
p3simTalk recognizes the following options:
-p <processName>
- name of the process to connect to. This name must correspond
with the name set for the attribute processName in the
configuration file used by the program p3sim.
-h <host>
- name of the host where the control server is running.
-?
help - write a summary of the p3simTalk options to stdout.
The keywords in p3simTalk are the following:
138
help
print a summary of the available keywords in p3simTalk.
verbose
turns verbose mode in p3sim on or off. The keyword verbose
can take the values on or off.
randomCycle
setting this variable will change the probability for when the
variables with cycle set equal to random will be updated. This
variable must be set to a value between 0 and 100.
updatedVariables
turns printing of the total number of variables updated in each
cycle on or off. The variable must be set to either on or off.
quit
terminates p3simTalk.
precision
setting this variable will change the limits for when to print error
outputs from p3sim. p3sim will only take notice of this setting
if p3sim is started with the -e option. It is specified in milli
seconds. The default in p3sim is 1000 (1 second). This is the
time between two calls to the periodic function in an optimal
situation. Maybe the p3sim configuration file contains to many
variables so the periodic function is not called every second. By
changing this variable the limit for when to print error messages
can be changed.
ProcSee Reference Manual
ProcSee Executables Manual Pages
runPfExecute
p3sim (1)
the variable can be set to the values on or off. If this variable
is on the api function PfExecute() will be called every time
the periodic function is called. This way it is possible to
measure how much time the RTMs connected to p3sim
spend in the update process. The default setting for this
variable is off. p3sim will only take notice of this setting if
p3sim is started with the -e option. By changing the variable
precision to a value less than 1000 a printout will be sent to
standard output and to the error log file.
FUNCTIONS
This section describes in detail the predefined functions available in p3sim.
NAME
const
SYNOPSIS
value = `aValue`;
value = ‘const( aValue )‘;
DESCRIPTION
The value field of the variable is set equal to the specified value. It is not much point surrounding this update field in back quotes if the constant update field is not combined with
any other non constant function.
NAME
step
SYNOPSIS
value = `step( initValue, min, max, stepValue, inc )`;
value = `step( initValue, max, min, stepValue, dec )`;
DESCRIPTION
The value is changed from min to max or max to min with the given step value. The last
parameter to the step() function is the reserved keywords inc or dec which describes
whether to increment or decrement the value, respectively. The first parameter is the functions initial value.
NAME
cosine
SYNOPSIS
value = `cosine( amplitude, phaseDelay, cycle, meanValue )`;
ProcSee Reference Manual
139
ProcSee Executables Manual Pages (1)
p3sim (1)
DESCRIPTION
The variable value will be changed like a cosine curve. The function should be self explanatory so it is not much point in describing it in detail. The amplitude is the height of the curve.
This value combined with the last parameter meanValue will define the range from minimum to the maximum value the variable will get. The parameter phaseDelay defines the
number of updates there are needed before the function reaches its first maximum value. This
value should be less than the parameter cycle which defines the number of updates in one
oscillation. Small values for this parameter will give a cosine curve with a high frequency,
and a large value will produce a curve with a low frequency.
NAME
sine
SYNOPSIS
value = `sine( amplitude, phaseDelay, cycle, meanValue )`;
DESCRIPTION
This function is much like the cosine function except that the variable will be set equal to a
sine curve. The only difference between the parameters to the sine() function from the cosine() function is that phaseDelay has another meaning. In the sine() function it defines the
number of updates before the first intersection with the value of the parameter meanValue.
A detailed description of the other parameters is given in the paragraph describing the function cosine().
NAME
random
SYNOPSIS
value = `random( minValue, maxValue )`;
DESCRIPTION
The variable value will change randomly between minValue and maxValue each time it is
updated.
NAME
noise
SYNOPSIS
value = `noise( probability, minValue, maxValue )`;
DESCRIPTION
140
ProcSee Reference Manual
ProcSee Executables Manual Pages
p3sim (1)
The function noise() changes the variable to a value between minValue and maxValue
with the given probability. If the probability for changing the variable value fails in a update then the value is set to 0. This function combined with sine() or cosine() curves will
to some extent produce realistic trend curves.
NAME
probability
SYNOPSIS
value = `probability( probability, minValue, maxValue )`;
DESCRIPTIONS
This function will change the variable with the given probability to a value between minValue and maxValue. If the probability for changing the variable value fails the function
returns the same value as it did in the last update.
NAME
gauss
SYNOPSIS
value = `gauss( meanValue, standardDeviation, minValue, maxValue )`;
DESCRIPTION
The function gauss() will produce random values between minValue and maxValue
where the probability for a value will be increasing as closer the value is to meanValue.
Try not to set the parameters minValue and maxValue too far from the value of the parameter meanValue or it will loop for quite some time before the function gives up and
returns either minValue or maxValue. The value is calculated in two steps. First a random
value between minValue and maxValue is generated. Then a new random value between
0 and 1 is generated which is used to check whether the value is inside the gaussian distribution or not. This process continues until a value is found which is inside. The parameter standardDeviation is used in the gaussian distribution which defines the steepness of
the gaussion bell-shaped curve. The smaller the parameter standardDevaiation the greater the probability for returning a value in a close area around meanValue. In a gaussian
distribution 68% of the values will be inside +-1 standard deviation from the mean value,
95.5% inside +-2 and 99.7% inside +-3 standard deviations. Based on these facts there are
very little possibility that this gauss() function will return a value outside +-3 standard deviations. As a matter of fact it is only 0.3%.
NAME
predefined
SYNOPSIS
ProcSee Reference Manual
141
ProcSee Executables Manual Pages (1)
p3sim (1)
value = `predefined( probability, v1, v2, ..., vn )`;
DESCRIPTION
The function predefined() will change the variable value with the given probability to one
of the values defined in the variable parameter list. v1, v2, ..., vn is a variable number of values where a value is either a single float or int variable or an interval. An interval is two values separated by two dots, like vMin..vMax. The variable will be set to a random value
between these limits. Single variables and intervals can be combined in the variable parameter list, thus it is legal to write something like v1, v2, v3min..v3max, v4, v5min..v5max, etc.
NAME
sequence
SYNOPSIS
value = `sequence( v1, v2, ..., vn )`;
DESCRIPTION
The function sequence() changes the variable’s value in a sequence. The first time the variable is updated it gets the first value in the variable parameter list, the next time the second
parameter and so on until it reaches the last value. Then the sequence starts all over again
from the first value. A value is in this function either a single float or int value or an interval.
An interval is two numbers separated by two dots. The variable will be set to a random value
between the minimum and the maximum value in the specified interval. It is legal to specify
the variable parameter list to the function sequence() like v1, v2min..v2max, v3, v4,
v5min..v5max etc. In other words a single number and an interval can be combined in the
parameter list.
EXAMPLES
A simple simulator file may look something like this:
simulator “Sim”
{
application = “test”;
process = “test”;
rtmName = “rtm”;
update “var1”
{
cycle = 1;
datatype = float;
value = `gauss( 0, 1, -100, 100 ) + noise( 10, 1, 50 )`;
}
update “var2”
{
cycle
142
= 1;
ProcSee Reference Manual
ProcSee Executables Manual Pages
p3sim (1)
datatype = int32;
value = `step( 1, 1, 200, 1, inc )`;
}
}
This example illustrates a simulator which is connected to two RTMs with trend loggers.
simulator “trendSim”
{
application = “trTest”;
process
= “trTest”;
rtmName
= “rtm1”;
rtmName
= “rtm2”;
database
= “../trTest.pdat”;
timeVariable = “timeVar”;
startTime = current;
timeTickIntvl = 1;
randomCycle = 10;
update “trVar1”
{
cycle = 1;
datatype = float;
value = `cosine( 100, 0, 30, 50 ) + gauss( 0, 1, -100, 100 )`;
}
update “myColour”
{
cycle = 1;
datatype = int32;
value = `sequence( 10, 1, 3, 50..60, 2, 9, 12..15 )`;
}
update “isVisible”
{
cycle = 1;
datatype = int16;
value = `sequence( 1, 0, 1, 0, 0, 1 )`;
}
update “myTest.r1”
{
cycle = random;
datatype = int32;
value = `100 - sine( 10, 0, 100, 20 ) + probability( 10, 20, 30 )`;
}
update “myTest.r2”
{
cycle = random;
datatype = uint32;
ProcSee Reference Manual
143
ProcSee Executables Manual Pages (1)
value
= `1000 + noise( 10, 0, 10 ) - random( 100, 200 )`;
}
update “myTest.r3”
{
cycle = random;
datatype = float;
value = `predefined( 50, 0.1..0.5, 1, 10..20, 50, 200 ) + 256`;
}
}
WARNINGS
Observe that characters, strings and pointers are not supported by p3sim.
SEE ALSO
rtm
144
ProcSee Reference Manual
p3sim (1)
ProcSee Executables Manual Pages
pcc (1)
NAME
pcc - The ProcSee configuration language compiler
SYNOPSIS
pcc [ options ] filenames
pcc -h
DESCRIPTION
pcc generates files that can be used by the ProcSee Run-Time Manager from user interface descriptions written in the ProcSee configuration language.
Application resource configurations, picture descriptions and library descriptions are
compiled and then saved to individual files. The filenames allocated are generated from
the application, picture, or library name with the following suffixes appended:
.pctx
Application resource file.
.ppic
Picture file.
.plib
Library file.
.ptrv
Trend variable file
By convention, configuration language files have the suffix ‘.Tdoc’.
Options
pcc recognizes the following options:
-d
debug - provides detailed information about what pcc is
doing. This option allows the user to follow what pcc is
writing to files in detail.
-v
verbose - Provides warnings when pcc writes default values
for missing data. Each object is also listed when it is written
to file.
-s
suppress - suppresses output other than error messages and
anachronism warning generated by pcc.
-m <maxMessages>
Max number of messages to show for each file.
-n
no defaults - suppresses the use of default values when a
necessary assignment statement has not been provided. An
error message is issued if data is missing and the compilation
is terminated. This option can also be used together with the
-d, -s or -v options.
-a
anachronism - suppress anachronism warnings - suppresses
output of anachronism warnings generated by pcc. This
option should be used when compiling large applications that
have been converted from Picasso-2. This option can also be
used together with the -d, -s or -v, and/or -n options.
-o <options>
miscelaneous options, separated by comma. These are:
ProcSee Reference Manual
145
ProcSee Executables Manual Pages (1)
pcc (1)
comPersistSeparateFile - specifies that the default value of
the comShape and comObject persist mode should be 2 instead
of the normal default of 1.
textNonAntiAliased - specifies that antiAlias should not be
added to eventually existing shapeFlags for text shapes when
reading old files. (Should never be needed).
version=’a.b’ or fileVersion=’c.d’- overrides the ‘ProcSee
version’ and ‘File version’ in the .Tdoc file. a,b,c,d should be
integers. You should not use both. version is the ProcSee
version, typically 3.7. fileVersion is the internal file version,
typically 1.21. If the file contains both, the file version is used.
When reading .Tdoc files from ProcSee 3.5 or older (before the
file version was added to the .Tdoc files), you could use
-o version=’3.5’. This version number is used to automatically
add compatibility flags etc. depending on the version.
comments=none,first,all - how to handle comments: none
means to ignore all comments, first means to ignore comments
on attributes and end of block comments, all means to store all
comments found in the document file in the produced binary
file. For files documented with ProcSee RTM 3.8 or newer or
files without a version, the default is to store all comments
(except for the file header comment). For older files, the default
is to store no comments, but remember the -o version=’3.5’ for
older files.
-w
wait - wait for input on error.
-W <numLines>
wait for userinput every numLines lines of output.
-c
name - use application name in .Tdoc file to name the .pctx file.
-f <filename>
filename - specify application filename - This option’s
argument is used to create a filename for the first application
resource file generated, <name>.pctx.
-p <directory>
directory - specifies the directory where pcc will write the
output file.
-P
output - places the output file in the same directory as the .Tdoc
file.
-h
help - gives a list of the available options and a short description
of pcc.
-?
help - write a summary of the pcc options to stdout.
If a filename is provided without any options then pcc will inform the user of the type and
name of each file generated.
EXAMPLE
$ pcc myFile.Tdoc
ProcSee PCC R3.0, June 2003
myFile.Tdoc parsed OK
146
ProcSee Reference Manual
ProcSee Executables Manual Pages
pcc (1)
Saved 'picture myPicture' to file 'myPicture.ppic' OK
Saved 'application myApplication' to file 'myFile.pctx' OK
$
A user interface description in a <filename>.Tdoc file may look something like this:
picture myPicture
{
function ‘int fact( int n )
{ return n <= 1 ? 1 : n*fact(n-1); }‘
circle
{ x = 320; y = 265; radius = ‘fact( 3 )‘; }
rectangle
{ x = 700; y = 700; width = 50; height = 100; }
instance buttonToMenu
{ ButtonColour = ‘Green‘; x = 50; y = 115; }
backgroundColour = ‘Red‘;
}
application myApplication
{
font Helvetica { name = "helvetica-bold-18-*"; }
font Times { name = "times-italic-12-*"; }
colour Green { red = 0;
green = 0xffff; blue = 0; }
colour Red { red = 0xffff; green = 0;
blue = 0; }
display disp0 { connection=””; }
window win0 { parent = "disp0"; backgroundColour = 2; }
startPicture { name = "./myPicture.ppic"; targetWindow = "win0";}
}
FILES
$PROCSEE_DIR/bin/<ARCH>/pcc The pcc executable.
<filename>.Tdoc
A user interface description file.
<filename>.pctx
An application resource file.
<filename>.plib
A library file.
<filename>.ppic
A picture file.
<filename>.ptrv
A trend log definition file.
<filename>.pevl
An event log definition file.
WARNINGS
If a picture, library or application resource description is compiled, with the same name
as one saved previously to the same place, then the old files will be overwritten, unless
they have been protected.
If an error is found in a configuration language file after pcc has started to write to a file,
pcc will produce an error message and stop compilation, and the generated file will be removed.
pcc does not check the validity of pTALK code used.
ProcSee Reference Manual
147
ProcSee Executables Manual Pages (1)
pcc (1)
The size of a piece of code, a string, or an array in a configuration language file is limited to
around 65500 characters. Missing the final quote on pTALK code, or strings, can give errors
about too long code/string.
SEE ALSO
rtm
148
ProcSee Reference Manual
ProcSee Executables Manual Pages
rtm (1)
NAME
rtm - The ProcSee Run-Time Manager
SYNOPSIS
rtm [ options ]
DESCRIPTION
The ProcSee Run-Time Manager (rtm) is the main part of the ProcSee system.
Options
rtm recognizes the following options:
-t
terminal - allow terminal input to rtm.
-h <controlHostName>
- explicitly state the control server hostname.
-n <rtmName>
- explicitly state the name of rtm.
-r <appFile>
- explicitly state the name of the application resource file to
load.
-g
- use the GMT time.
-v
verbose - set rtm in verbose mode.
-F
- No Text Font scaling.
-c <behavConsDest>
- Sets default constructor and destructor behaviour used in
the rtm. The option behavConsDest can be a combination
of the following strings. Each string is separated by comma.
Add :off after the option to reverse its meaning.
descend - call constructor and destructor in descendent
shapes. This is the default.
callable - must be set if constructor and destructor should
be callable from the pTALK language.
ifCalledWarn - issues a warning message if constructor or
destructor is called from pTALK. This is the default.
dtorAutoCallWarn - issues a warning message if the
destructor is automatically called from a constructor
function.
ctorCalled:dtor - must be set if the destructor should
automatically be called from the constructor function.
The destructor will be called automatically if object is in
constructed state. This is the default.
ctorCalled:ctor - Call the constructor, but don’t
automatically call the destructor.
ctorCalled:ignore - Don’t call the constructor if object
already is in constructed state.
-M <mapOpt>
- window Mapping options.
mapOpt can be one of:
Off : Windows can be mapped everywhere. (default on X,
because window manager normally handles this)
ProcSee Reference Manual
149
ProcSee Executables Manual Pages (1)
rtm (1)
Virtual : Windows will be moved inside virtual screen when
mapped. (Default on MS Windows)
On : same as Virtual
Primary : Windows will be moved inside primary screen
when mapped.
On X there is no difference between Virtual and Primary
screen.
-o <options>
- A comma separated string of options. Can be a combination
of one or several of the following options:
focusFollowPointer => the keyboard focus follows the
mouse cursor.
comPersistSeparateFile => this option is valid only when
reading old files saved with version 3.3 or earlier of ProcSee.
It tells ProcSee how to handle the persist mode of ComShapes
and ComObjects. When set, the persist mode of each
ComShape and ComObject will be set to the value 2. The
ComShape’s and ComObject’s configuration data will be
saved in a separate COM binary file. If not set the persist
modes will be set to the value 1. The configuration data will be
saved together with the ComShapes and ComObjects.
-x <allowOpts>
- Enable/disable pTALK operations.
allowOpts is a comma-separated string of the following,
prefixed with no, since the default is to allow everything:
system => allows the pTALK system command.
save => allows saving from pTALK.
ctor => allows the constructors to run.
com
=> allows use of COM.
server => allows programs to connect to the RTM.
insecure => allows all of the above.
secure => allows none of the above.
Example: -x "nosystem,nosave" disables the pTALK system()
function, and disables saving and documenting.
The noserver option makes it impossible to connect GED to
the RTM, so this option should only be used when the editing
is completed, and the connection to the data-source is initiated
from the RTM with the pTALK function connectToProcess or
when using the OPC-plugin.
-W <warnOpts>
- Enables or disables warnings.
warnOpts is a comma-separated string of the following:
runTime => give runtime warnings.
loading => give warnings when loading.
all
=> show all warnings. (Default)
none
=> give no runtime warnings.
Example: -W noRunTime disables runtime warnings.
-?
help - write a summary of the rtm options to stdout.
MS Windows specific options
150
-S
- on fatal error terminate the rtm silently without displaying a
message box.
-L <logfile>
- store terminal output in logfile.
ProcSee Reference Manual
ProcSee Executables Manual Pages
-T <terminalOptions>
rtm (1)
- options for the RTM output window.
terminalOptions is one or more of the following values:
StayOnTop:On or StayOnTop:Off : Initial setting of Always On Top menu choice.
TrayIcon:On or TrayIcon:Off : Initial setting of Use Tray Icon menu choice.
Close or NoClose : Enables or disables the Close action on the window menu and the
close button in the window frame of the RTM output window.
AskClose or NoAskClose : Ask if user want to stop the RTM, or not, when the RTM output window is closed by the user or by the system.
AskApplicationClose : Redirect the window close action on the RTM output window to
a main window in the users application, so that the closing of the RTM can be controlled
by pTalk code. The windowClose() dialogue trigger is first tried on the mapped or iconified normal (=top-level) windows, then on the rest of the normal windows. The order of
the windows is determined by the order they are defined in the .Tdoc file. The first of these
windows that handles the windowClose() dialogue will be notified about the window
close action. The windowClose dialogue can be placed in the window (by some pTalk
code, e.g. in a constructor), in the picture displayed in the window, or in the application.
If no normal window is handling the windowClose() dialogue trigger, the first mapped or
iconified normal window is unmapped, and nothing more happens. Notice that if AskApplicationClose is specified, and no windowClose() dialogue is handling the close request,
the RTM will NOT stop. To stop the RTM, use the pTalk function shutdown().
The default is: StayOnTop:Off, TrayIcon:On, Close, AskClose
If AskApplicationClose is given, AskClose is suppressed, unless also given.
If both AskApplicationClose and AskClose is given, the sequence is as follows: first, the
dialog asking if you want to quit is displayed. If you answer No to this, closing is aborted.
If you answer Yes, the handling of the AskApplicationClose is performed.
ENVIRONMENT
CONTROLHOST
The computer on which control is running. Default is the
same computer as rtm is running on.
PROCSEE_DIR
The ProcSee installation directory. Many of the ProcSee
programs will look for different setup files in subdirectories
below this point.
PROCSEE_NB
The size of the non-blocking FIFO buffer used for
communication from the RTM to the processes connected to
the RTM via the API, like GED. This environment variable
is specified in KB. The default FIFO size is 512KB. Setting
this environment variable to the value zero will set this
communication channel to blocking mode (the default before
release 3.8.8). If the size of the non-blocking FIFO buffer is
too small, the connection will be disconnected when the
buffer is full.
PROCSEE_TREND_NB_LOGGER The size of the nonblocking FIFO buffer used
between the trend log RTM and the trend display RTMs. This
environment variable is specified in KB. The default FIFO
ProcSee Reference Manual
151
ProcSee Executables Manual Pages (1)
rtm (1)
size is 512KB. Setting this environment variable to the value
zero will set the communication channel to the trend display
RTMs in blocking modes.
PROCSEE_TREND_NB_DISPLAYThis environment variable specifies the nonblocking FIFO buffer size used between the trend display RTM
and the trend log RTMs. This is the opposite direction compared
to the PROCSEE_TREND_NB_LOGGER environment
variable. For more information, see the description above.
Resources
The following resources are recognized by the rtm:
MultiClickTimeout
The time, in tenths of a second, that differentiates a double click
from two single clicks. Default value: 3.
MarkerSize
The size, in pixels, of markers put on selected objects in a
picture. Default value: 7.
DragThreshold
The minimum distance, in pixels, that is considered a mouse
drag operation. A drag (button down, followed by move,
terminated by a release) shorter that this distance will be
considered to be a simple click. Default value: 5.
AutoRepeatDelay
The time, in tenths of a second, from a button press event, until
the first button repeat event. Default value: 5.
AutoRepeatInterval
The time, in tenths of a second, between each button repeat
event. If this value is set to 0, no button repeat events are
generated. Default value: 2.
PasteDelta
When copy/paste is done in the editor, PasteDelta tells how
much left/down the pasted shape(s) should move. Default value:
7.
X RESOURCES
X resources can be put in your ~/.Xdefaults file. The class name for all resources recognized
by the Run-Time Manager is ‘ProcSee’. For example, to set the resource MarkerSize to the
value 11, add the following line to your ~/.Xdefaults file:
ProcSee.MarkerSize : 11
Windows Resources
rtm look for the resources in the Registry under the key
HKEY_CURRENT_USER\Software\IFE\ProcSee
It is recommended that the ProcSee utillity program p3RegAdmin which is part of the distribution, is used when changing the rtm resources on Windows. Start the p3RegAdmin program and press the rtm tab. Do the changes to the resources and press the ok or apply button.
The changes will take effect next time rtm is started. This utillity program is not documented.
152
ProcSee Reference Manual
ProcSee Executables Manual Pages
rtm (1)
TERMINAL INPUT
If the rtm is started with the terminal input option (-t), pTALK source code can be entered
in the terminal window. The syntax of terminal input is:
<applicationName>:{pTALK-code}
To execute the pTALK code ‘MyPicture.MyRectangle.foregroundFillColour = 4;’ in the
application MyApplication, type the following
MyApplication:{ MyPicture.MyRectangle.foregroundFillColour = 4; }
ProcSee Reference Manual
153
ProcSee Executables Manual Pages (1)
Timer (1)
NAME
Timer - a ProcSee cron(1M)/at(1) utility
SYNOPSIS
Timer [option...]
void Timer::atIntervalDo( int reqId, int hours, int minutes,
int seconds, int millisecs,
char* scope, char* command );
void Timer::atTimeDo( int reqId, int hours, int minutes,
int seconds, int millisecs,
char* scope, char* command );
void Timer::cancel( int reqId );
void Timer::quit();
Options
Timer recognizes the following options:
-t
tty - allow tty input. In this mode, Timer allows input from the
terminal and accepts the command “:quit” (which will stop the
program) and “:lj” (which lists the currently scheduled jobs).
-h <host>
- explicitly state the control server hostname.
-p <process>
- state the name of this instance of Timer. Default is “Timer”.
-a <application>
- explicitly state the name of the application to connect to.
Default is “___rtm”.
-r <rtm>
- explicitly state the name of the rtm. Default is “rtm”.
-d
debug - set the ProcSee API to debug mode
-v
verbose - set the Timer to verbose mode
-?
help - write a summary of the Timer options to stdout.
DESCRIPTION
When started the Timer program will connect to the ProcSee rtm. If neither the -p nor the h option is used, Timer will connect to the System application in the rtm as process Timer.
The functions atIntervalDo(...), atTimeDo(...), cancel(), and quit() are then available in
pTALK.
atIntervalDo() and atTimeDo() takes the same parameters, and the only difference between
the two is that atIntervalDo() will execute the command at the given interval, while atTimeDo() will execute the command only once.
The time is given in hours, minutes, seconds and milliseconds.
154
ProcSee Reference Manual
ProcSee Executables Manual Pages
Timer (1)
The command should be a legal pTALK compound statement, and the scope must be the
fullname of a scope in which the command is to be executed. The value of the reqId argument can be freely chosen, and should be used in a call to cancel() if you want to cancel
a scheduled job.
The reqId must be unique for each scheduled job.
quit() will make the Timer program stop.
NOTES
atTimeDo() should execute the job at a given time (like at(1)), but as it is now, atTimeDo()
acts as atIntervalDo() with an automatic cancel() after the first execution.
From Picasso-3 R2.7 the RTM contains timer objects inside the RTM. We recomend that
you use these internal timers instead of the Timer program.
EXAMPLES
The following example assumes that the Timer program has been connected to the rtm as
process Timer.
MyFunc()
{
// a pTALK function
Timer.atIntervalDo( 101, 0, 0, 1, 0, “::MyApp.MyPicture”,
“calculate()” );
// Cancel a previous request
Timer.cancel( 100 );
}
SEE ALSO
In this reference manual: pTALK classes: TimerInterval and TimerAt.
ProcSee Reference Manual
155
ProcSee Executables Manual Pages (1)
TrPrint (1)
NAME
TrPrint - The ProcSee trend print program
SYNOPSIS
TrPrint [-a appname] [-P processname] [-f fromtime [-h rtmname]
[-l loggername] [-L language] [-m margins] [-n columns]
[-o outputfile] -p printername] [-s papersize] [-t timespan]
[-v varfilename | !varname]
DESCRIPTION
TrPrint requests data from the ProcSee trendLog and makes a hardcopy of the trend curve
to a postscript printer as a plot or dumps it to a file in a tabular format. The purpose of the
TrPrint program is to get data from a specified last time and timespan from the trendLog
and to display the data in a presentable form. rtm and control must be active to be able to
use the TrPrint program.
The variables to be used to request trend log data for can be specified in one of the following
ways using the -v option. If the first character is an exclamation mark it indicates that the
name is a variable, otherwise it is considered by the TrPrint program to be a file containing
the variables. The layout of the variable file is as follows:
<variable name 1> <comment for variable 1>
<variable name 2> <comment for variable 2>
.
<variable name n> <comment for variable n>
The trend variables can be specified with or without a full name If the full name is omitted
TrPrint uses the application name and the process name to create a full name of the variable.
The application and the process can be specified using the options -a and -P to TrPrint. If
the variable file contains a variable from another process or application or an attribute the
full name must be given.
If trend log data is wanted for more than one variable the output file will contain a dump of
all the trend data ordered in a tabular format separated by a heading. When dumping the trend
curve to a postscript printer there will be exactly one trend curve per sheet.
The output file containing trend data in tabular format is a text file and is therefore cannot be
sent directly to a PostScript printer. The file must be manually converted to PostScript before
sending it to the printer.
Options
TrPrint recognizes the following options:
156
-a <appname>
- specifies the name of the application. This option is required.
-P <processname>
- name of the process where the variables are defined. If this
option is omitted TrPrint sets the process name equal to the
ProcSee Reference Manual
ProcSee Executables Manual Pages
TrPrint (1)
application name.
-f <fromtime>
- indicates from time. The format of this option is either 0
meaning from current time or from a given time using the
syntax yy:mm:dd:hh:mm. The data is fetched from this point
of time and backwards in seconds specified with the -t
option. If this option is omitted current time is used as
default.
-h <rtmname>
- specifies the name of the rtm the trendLog program is
communicating with. This option is required.
-l <loggername>
- specifies the name of the trend logger. This option is
required.
-L <language>
- indicates the language to use. For the time being TrPrint
only supports two languages, English and Norwegian.
English setting is used by default. Language can also be set
in TrPrint using the environment variable
PROCSEELANG. When using Norwegian language settings
there is a mapping which converts the characters []\{}| to the
special Norwegian vowels æøåÆØÅ.
-m <margins>
- indicates the margins in cm on the printer paper. The output
is always produced in landscape format. This option has four
parameters which are separated with comma: LEFT, TOP,
RIGHT, BOTTOM.
-n <columns>
- number of columns in a row. This option is used when
dumping the data from trendLog to a file in a tabular format
and it indicates how many columns to print in one row. The
default settings is 5 columns.
-o <outputfile>
- name of the file where the data from the trendLog is put.
The data is put into this file in a tabular format. Option -n is
used by TrPrint to determine how many columns of data
there should be in a row. TrPrint will always produce an
output file. If this option is omitted an output file with the
name TREND_PRINT will be generated. There is no way to
suppress this output.
-p <printername>
- indicates the name of the printer. To get a hardcopy of the
trend curve as plot on the postscript printer this option must
be given to TrPrint.
-s <papersize>
- specifies the size of the printer paper in cm. The trend curve
will always be printed in landscape format. The format of this
option is: WIDTHxHEIGHT. The default setting is A4
landscape format.
-t <timespan>
- number of seconds back in time the TrPrint should request
data from the trendLog. The data is requested from the time
specified with the -f option. This options must be specified
otherwise no data will be requested.
-v <varname>
- name of the variable to request trend data for or a name of
a file where a collection of trend variables with comments are
specified. The character ! is used to separate whether the
argument should be considered by TrPrint to be a file or a
ProcSee Reference Manual
157
ProcSee Executables Manual Pages (1)
TrPrint (1)
variable name. An exclamation mark as the first character
indicates that the name is a variable. The layout of the variable
file is described above.
-?<
help - write a summary of the TrPrint options to stdout.
VARIABLES
PROCSEELANG will be used by TrPrint to determine the language to use. For the time being only English and Norwegian are supported.
WARNING
TrPrint is in a development phase and will probably change dramatically in the near future.
There is however a slight possibility that the functionality in the TrPrint program will be
incorporated in the rtm and that TrPrint will not be part of future releases of ProcSee.
EXAMPLES
$ TrPrint -h rtm1 -l TrendLogger -a System -v !trendvar1 -f 0 -t 3600
-p pr50
This command will request data for the variable trendvar1 from the
trend logger and make a hardcopy of the trend curve from current time and
one hour back in time on the postscript printer pr50.
$ TrPrint -h rtm1 -l TrendLogger -a System -v trendfile -f 94:07:21:12:00 -t 36000 -p pr50 -o myOutput
-m 1,2,1,2 -s 24x18
This command will setup the TrPrint program to use a paper sheet with
the format 24x18 cm and the margins 1,2,1,2. The variable to request data
from will be read from the file trendfile. The data will be requested
from the time 94:07:21:12:00 and 10 hours back in time. The data will be
written to the output file myOutput.
SEE ALSO
trendLog
158
ProcSee Reference Manual
Application Programmers Interface Manual
pages
ProcSee Reference Manual
159
160
ProcSee Reference Manual
Application Programmers Interface
apilib (3c)
MODULE
apilib - ProcSee Application Programmer’s Interface
DESCRIPTION
The ProcSee Application Programmer’s Interface(api) deals with the interface between
the application program and the Run Time Manager (rtm). api contains several high level
functions, which are used to communicate with one or more rtms.
The maximum legal length of variable names are 32 characters, including the terminating
’\0’. A size is used to indicate the number of elements for array variables, single variables
should use size = 0. All variables have a type, coded as bit patterns found in the file
$PROCSEE_DIR/include/TypeCodes.h The available types are PfCChar, PfCUnsignedChar, PfCInt, PfCUnsignedInt, PfCShortInt, PfCUnsignedShortInt, PfCFloat, PfCDouble and PfCRecord. PfCPointer can be added to (bit wise OR) all of these
types.
ENVIRONMENT VARIABLES
PROCSEE_DIR - Mandatory. The location of the ProcSee files.
ARCH - Mandatory. The architecture of the computer. Valid values are hpArch, sunArch, macX86Arch, linuxX86Arch and winArch.
CONTROLHOST - Optional. The host where the control is running. Default value is
local host.
BUSTIMEOUT - Optional. The maximum period of time (given in milliseconds) to wait
for a reply from a function call to an rtm. If there is no reply within this duration of time,
the function returns and set the value of apiError to SbFailed. Default value is 30000
milliseconds.
BUSRETRY - Optional. The period of time (given in milliseconds) between each attempt
to connect to an rtm. Default value is 4000 milliseconds.
BUSCONNECT - Optional. The maximum period of time (given in milliseconds) before
the application should give up getting connection to an rtm. Default value is -1, i.e the
application will try forever, at intervals given by BUSRETRY
COMPILING AND LINKING
The directive #include <api/api.h> must be included in the application program code
wherever the api is used. To compile the application program, the compiler must be told
where to locate the api header files, and to link you need to have the ProcSee library path
set and use the correct library. The C/C++ preprocessor also needs to have the architecture
you are on defined. Please refer to the table below to find this.
ARCH
Description
hpArch
HP 9000/700 series PA-RISC running HP-UX
ProcSee Reference Manual
161
Application Programmers Interface
apilib (3c)
ARCH
Description
linuxX86Arch
Intel 80x86 running linux
macX86Arch
Apple Mac running Mac OS X on Intel 80x86
sunArch
Sun SPARC running Solaris
winArch
Intel 80x86 running Windows 7, Vista, XP
Depending on the platform, additional libraries are also required. The minimum set of library
options required to link a ProcSee application program are listed in the table below.
ARCH
link options
hpArch
-lProcSeeApiC
linuxX86Arch
-lProcSeeApiC
macX86Arch
-lProcSeeApiC
sunArch
-lProcSeeApiC -lsocket -lnsl
winArch
<installdir>/lib/winArch/[vc8-vc10]/
ProcSeeApiC_[MD|MT|MDd|MTd].lib
WS2_32.lib
Specific instructions for Windows, and Unix is given in the following sections.
Windows - Microsoft Visual Studio
This section shows the required ProcSee C API configuration options for a Microsoft Visual
Studio. We have used Visual Studio 2010 version for the screenshots.
Remember that for Visual Studio 2010 the project needs to have a C(++) file added before
you can change the C/C++ project options.
The project need to use the ProcSee and ws2_32 libraries, the ProcSee header file include
path, as well as set the winArch define.
162
ProcSee Reference Manual
Application Programmers Interface
apilib (3c)
Figure 1
Linker Settings
This can be done by selecting the Project menu and Properties. Select and expand the entry that says Linker which should also select General. Under the General edit the Additional Library Directories field and add the path to the ProcSeelibraries.
The path suffix indicate which version of the Visual Studio Runtime the libraries are
linked. MS Visual Studio 2010 have the suffix vc10, 2008 have vc9, 2005 have vc8.
In this example we use VS 2010 and will use the ProcSee library path:
"$(PROCSEE_DIR)\lib\winArch\vc10" as shown in Figure 1.
The next we need to do is specifying which libraries we want to link into our project. Select the entry that says “Input” and then edit the field "Additional Dependencies" option
as show in Figure 2.
ProcSee Reference Manual
163
Application Programmers Interface
apilib (3c)
Add the following two libraries: ws2_32.lib, and ProcSeeApiC_MDd.lib or
ProcSeeApiC_MTd.lib for Debug or ProcSeeApiC_MD.lib or ProcSeeApiC_MT.lib for
Release. Use the MD or MT version of the ProcSee library depending on which of the compiler settings: MD, MDd, MT or MTd, that you are using.
Figure 2
Linker Input
You now need to define "winArch" as a preprocessor definition. Press the C/C++ entry and
select "Preprocessor". Edit Preprocessor Definitions" and enter "winArch" at the end of the
text area, as shown in Figure 3. Click on the OK button
Figure 3
C++ Settings
164
ProcSee Reference Manual
Application Programmers Interface
apilib (3c)
You also need to specify where the header files for ProcSee can
be found. Select General under the "C/C++" entry. Edit the "Additional include directories" field and add the ProcSee include
directory (usually "$(PROCSEE_DIR)\include"). (see Figure 4).
Click on the OK button.
Figure 4
C++ Include Directory
Windows - Command Line
This section describes the compile and linker options you will have to use to compile and
link your program against the ProcSee C Api using the basic Microsoft Visual Studio
C(++) toolchain.
ProcSee Reference Manual
165
Application Programmers Interface
apilib (3c)
Compiling
The libraries distributed with ProcSee are compiled with Microsoft Visual C++ 6.0 to 10.0. It is recommended that you use
the library compiled against the latest version of Visual Studio,
when creating applications for Windows XP, Vista and newer.
We are in no position to make any warranties that compilers
from other vendors will work, but if they are compatible with
Microsoft Visual C++ 9.0 there should be no problem.
The compiler to use is cl.exe. The following compilation options must be set.
/c
Compiles the hello.c program without
linking.
/DwinArch
Needed by api.h.
/I <path>
The compiler must be told where it can
locate the header files. The include path
for ProcSee is <installdir>/include, where <installdir> is the directory where ProcSee is installed.
/MT or /MD
Creates a multi-threaded executable file
when linking. For more information see
next section about linking the hello.c
program.
Linking
The follwing library files are needed when linking the hello.c
program on a Windows platform using Microsoft Visual C++
9.0. The cl.exe linker is used in this example to generate the hello.exe application.
<installdir>\lib\winArch\vc9\ProcSeeApiC_MD.lib
WS2_32.lib
An example of linking the hello.exe program:
cl /MD hello.obj d:\procsee\lib\winArch\vc9\ProcSeeApiC_MD.lib WS2_32.lib
166
ProcSee Reference Manual
Application Programmers Interface
apilib (3c)
Unix including Linux and Mac
Compiling
The C compiler is typically called cc on UNIX systems. If you
use C++, then the compiler is probably called CC. A GNU compiler called gcca can also be used, which is capable of compiling both C and C++ code. Irrespective of which architecture or
compiler is used, the following compilation options must be
set:
-I <path>
The compiler must be told where it can
locate the header files. The include path
for ProcSee is <installdir>/include, where <installdir> is the directory where ProcSee is installed.
If ProcSee is installed in /usr/local/procsee, then, for a
program file called hello.c, a typical compile command on a
workstation would be:
% cc -c -I/usr/local/procsee/include hello.c
a. GNU stands for ’Gnu’s Not Unix’. The Free Software Foundation (FSF) produces high quality software that can be
obtained at no charge. Emacs, bison, flex, gcc, and ghostscript are widely used GNU software.
Linkin
After the code has been compiled, it has to be linked to create an executable program.
The following options are needed when linking the hello.c program on a UNIX platform:
-L <path>
This option informs the linker about
where to find the libraries it needs. The
link path is <installdir>/lib/
<arch>, where <installdir> is the
directory where ProcSee is installed,
and <arch> is the architecture.
-lProcSeeApiC
This tells the linker to link the ProcSee
API library into the program. The linker
will search for the libraries at the path(s)
indicated by the -L option.
The cc or CC commands can also be used to link the program. A
typical link command on a workstation might look something
like this:
% cc hello.o -L/usr/local/procsee/lib/sgi -lProcSeeApiC -o hello
ProcSee Reference Manual
167
Application Programmers Interface
apilib (3c)
To link your application, use the following linker options: -L$PROCSEE_DIR/lib/$ARCH
and -lProcSeeApiC (or -lProcSeeApiC_debug for debugging purposes).
Additional libraries are required on some platforms. On sunArch the -lsocket and -lnsl options are required.
FUNCTIONS
A list of the available api functions sorted by category, follows:
Connection: PfAddRtmToCurrent, PfClose, PfGetNumAllRtms, PfGetNumCurrentRtms,
PfIsConnected, PfInit, PfInitialize, PfNonBlocking, PfSetAllRtmsCurrent, PfSetProcessClass, PfSetRtmCurrent, PfWinInit, PfWinInitialize, PfWithdrawRtmFromCurrent, PfXtInit, PfXtInitialize
Main Loop: PfDispatch, PfEndLoop, PfGetFDSet, PfMainLoop, PfPeriodic
Records: PfAddField, PfBeginRecord, PfDeleteRecord, PfEndRecord, PfPrintAllRecords,
PfReadScript
Variables: PfCreateVar, PfCreateArray, PfData, PfDeleteVar, PfDeleteVarId, PfFlushCreateVar, PfGetDefinedVars, PfGetTypeId, PfGetVarId, PfId, PfIndex, PfName, PfNextVarId, PfPrintAllVars, PfReadScript
Updating variable values: PfDisableInitialUpdate, PfEnableInitialUpdate,PfFlush, PfFlushUseFields, PfPut, PfReceiveRtmUpdates, PfReceiveRtmStringUpdates, PfSend, PfSendApiStringUpdates,
PfSendToOne,
PfSetFlushBehaviour,
PfUpdateValuesId,
PfUseField
Miscellaneous: PfAddInput, PfAddVarAction, PfDiagnosticsSubscribe, PfDiagnosticsSubscribeEx, PfEditLogBuffer, PfExecute, PfExecuteAsync, PfExportWindow, PfFlushEditLogBuffer, PfGetChanges, PfGetChildren, PfGetCurrentObject, PfGetDefinition,
PfGetDiagnosticsMessage, PfGetFuncArg, PfGetSystemError, PfGetWindowChanges, PfPrintSystemError, PfQuoteString, PfRegisterFunction,
PfRegisterFunctionEx, PfReleaseWindow,
PfRemoveAllInputs,
PfRemoveInput,
PfRemoveProcessHandler,
PfRemoveVarAction, PfSetDefinition, PfSetMaxQuotedStrings PfSetProcessHandler, Pfsor, PfUnquoteString
Events: PfEvent, PfEvents, PfClearEvents
AUTHOR
api was developed by Håkon Jokstad at IFE.
168
ProcSee Reference Manual
Application Programmers Interface
apiError (3c)
VARIABLE
apiError - A global variable to hold error codes returned from the api functions
SYNOPSIS
extern int32 apiError;
DESCRIPTION
The api functions assign specific values to apiError in order to reflect an error condition
that has occurred. The value of apiError should be checked after each call to an api function to verify a successful operation. Possible values for apiError are found in the file
$PROCSEE_DIR/include/ErrorCodes.h. The value OK indicates "No error".
The two functions PfGetSystemError and PfPrintSystemError converts the value of
apiError to a meaningful text.
SEE ALSO
PfGetSystemError in "ProcSee Reference Manual"on page 211
PfPrintSystemError in "ProcSee Reference Manual"on page 230
ProcSee Reference Manual
169
Application Programmers Interface
PfAddField (3c)
FUNCTION
PfAddField - Add a field to a specified record
SYNOPSIS
int32 PfAddField( recName, fieldName, fieldSize, fieldType,
fieldRecName, value)
char* recName;
char* fieldName;
int32 fieldSize;
int32 fieldType;
char* fieldRecName;
void* value;
DESCRIPTION
PfAddField adds a field to the record given by recName. fieldName is the name of the field
to be added. A fieldSize of 0 indicates a non array field, else it gives the size of the array.
fieldType should be one of the type codes specified in $PROCSEE_DIR/include/TypeCodes.h, like PfCInt, PfCFloat or PfCRecord. If fieldType is PfCRecord or PfCRecord
| PfCPointer, fieldRecName should give the name of that record, else NULL should be
used. value should point to a default value for this field. If fieldType is PfCRecord and value
is NULL, the default values in the record named fieldRecName, will be used. The value returned is apiError.
WARNING
A simpler and safer way to create records is using PfReadScript.
EXAMPLE
See man page for PfBeginRecord.
SEE ALSO
PfBeginRecord in "ProcSee Reference Manual"on page 174
PfEndRecord in "ProcSee Reference Manual"on page 187
PfReadScript in "ProcSee Reference Manual"on page 234
170
ProcSee Reference Manual
Application Programmers Interface
PfAddInput (3c)
FUNCTION
PfAddInput - Set up a call back function to be called from PfMainLoop
SYNOPSIS
int32 PfAddInput( fd, condition, func )
int32
fd;
int32
condition;
PfTInputFunc func;
typedef int32 (*PfTInputFunc) ( int32 fd );
DESCRIPTION
PfAddInput prepares PfMainLoop to listen for activity on the specified file descriptor
fd. condition should be one of the constants PfCReadCondition, PfCWriteCondition,
PfCExceptCondition or PfCAllConditions. func is the function to be called whenever
activity on that file descriptor is discovered. The value returned is apiError.
The function func should return OK, otherwise it will be suspended and never be called
again.
EXAMPLE
/* How to add a callback function for keyboard input */
int32 kbdHandler( int32 fd )
{
:
return OK;
}
PfAddInput( PfCKeyboardFd, PfCReadCondition, kbdHandler );
SEE ALSO
PfRemoveInput in "ProcSee Reference Manual"on page 242
PfRemoveAllInputs in "ProcSee Reference Manual"on page 241
PfMainLoop in "ProcSee Reference Manual"on page 223
ProcSee Reference Manual
171
Application Programmers Interface
PfAddRtmToCurrent (3c)
FUNCTION
PfAddRtmToCurrent - Add an rtm to the set of current rtms
SYNOPSIS
int32 PfAddRtmToCurrent( rtmId )
int32 rtmId;
DESCRIPTION
PfAddRtmToCurrent adds the rtm given by rtmId to the set of current rtms. The value returned is apiError. The set of current rtms is those rtms which the application program talks
to at the moment.
Within the user supplied connection call back functions (referred to as usrConnectFunc and
usrDisconnectFunc at the man page for PfInitialize) the set of current rtms by default consists of the single rtm to which connection is established or lost. Anywhere else, the set of
current rtms by default consists of all rtms for which the usrConnectFunc has finished.
The id of an rtm can be obtained by using PfId.
WARNING
Note that the application must have contact with the rtm to be added.
EXAMPLE
int32 rtmId = PfId( PfLocalProcess, "myRtmName" );
PfWithdrawRtmFromCurent( rtmId );
/* Do something that doesn’t involve rtm "myRtmName" */
:
PfAddRtmToCurrent( rtmId );
SEE ALSO
PfWithdrawRtmFromCurrent in "ProcSee Reference Manual"on page 259
PfSetAllRtmsCurrent in "ProcSee Reference Manual"on page 248
PfSetRtmCurrent in "ProcSee Reference Manual"on page 253
PfInitialize in "ProcSee Reference Manual"on page 217
PfId in "ProcSee Reference Manual"on page 215
172
ProcSee Reference Manual
Application Programmers Interface
PfAddVarAction (3c)
FUNCTION
PfAddVarAction - Set up a call back function to be called when a variable value is
changed from the rtm
SYNOPSIS
int32 PfAddVarAction( varId, func )
int32
varId;
PfTVarActionFunc func;
typedef int32 (*PfTVarActionFunc) ( int32 varId );
DESCRIPTION
PfAddVarAction registers a call back function func that is to be called whenever the variable varId is changed from the rtm. The value returned is apiError.
func should return OK.
EXAMPLE
int32 varHandler( int32 varId )
{
:
return OK;
}
int32 myVar = ...; /* Anything giving a varId */
PfAddVarAction( myVar, varHandler );
SEE ALSO
PfRemoveVarAction in "ProcSee Reference Manual"on page 244
PfMainLoop in "ProcSee Reference Manual"on page 223
ProcSee Reference Manual
173
Application Programmers Interface
PfBeginRecord (3c)
FUNCTION
PfBeginRecord - Start building a record structure
SYNOPSIS
int32 PfBeginRecord( recordName )
char* recordName;
DESCRIPTION
PfBeginRecord starts building a record structure, given the name of the record, recordName. The value of apiError is returned.
PfAddField should be called next, once for each field in the record. PfEndRecord should
be called to end the construction of the record.
WARNING
A simpler and safer way to create records is using PfReadScript.
EXAMPLES
int32 defaultInt = 45; /* Default value to use for rec1.Field1 */
PfBeginRecord( "rec1" );
PfAddField( "rec1", "Field1", 0, PfCInt, NULL, &defaultInt );
PfAddField( "rec1", "Field2", 0, PfCRecord, "rec2", NULL );
PfEndRecord( "rec1" );
SEE ALSO
PfAddField in "ProcSee Reference Manual"on page 170
PfEndRecord in "ProcSee Reference Manual"on page 187
PfReadScript in "ProcSee Reference Manual"on page 234
174
ProcSee Reference Manual
Application Programmers Interface
PfClearEvents (3c)
FUNCTION
PfClearEvents - Clears all events for one or several event types in the trend logger
SYNOPSIS
int32 PfClearEvents( logger, numEventNames, eventNames );
char* logger;
int32 numEventNames;
char* eventNames[];
DESCRIPTION
PfClearEvents clears all the events for the event types contained in the argument eventNames. The first argument logger is the name of the historic trend logger. The next argument numEventNames is the number of event type names that is passed as argument in the
character string array eventNames. This array must contain event type names.
This function can be sent to all the rtms contained in the set of current rtms. Only the rtm
that contains the actual historical trend logger will execute the function.
The value of apiError is returned.
EXAMPLES
char* eventNames[2];
eventNames[0] = "Ev321_V1";
eventNames[1] = "Ev234_V4";
PfClearEvents( "Logger", 2, eventNames );
SEE ALSO
PfEvent and PfEvents in "ProcSee Reference Manual"on page 188
ProcSee Reference Manual
175
Application Programmers Interface
PfClose (3c)
FUNCTION
PfClose - closes the connection to the rtm
SYNOPSIS
int32 PfClose();
DESCRIPTION
PfClose closes the connection to the rtms contained in the set of current rtms. The value of
apiError is returned.
Within the user supplied connection call back functions (referred to as usrConnectFunc and
usrDisconnectFunc at the man page for PfInitialize) the set of current rtms by default consists of the single rtm to which connection is established or lost. Anywhere else, the set of
current rtms by default consists of all rtms for which the usrConnectFunc has finished.
SEE ALSO
PfInitialize in "ProcSee Reference Manual"on page 217
PfAddRtmToCurrent in "ProcSee Reference Manual"on page 172
PfWithdrawRtmFromCurrent in "ProcSee Reference Manual"on page 259
176
ProcSee Reference Manual
Application Programmers Interface
PfCreateArray (3c)
FUNCTION
PfCreateArray - Create an array variable
SYNOPSIS
int32 PfCreateArray( varName, baseType, size, recordName, fix, value )
char* varName;
int32 baseType;
int32 size;
char* recordName;
int32 fix;
void* value;
DESCRIPTION
PfCreateArray creates an array variable. varName is the name of the variable. baseType
is the data type of the elements, for instance PfCInt or PfCFloat. The legal types are
found in $PROCSEE_DIR/include/TypeCodes.h and are listed at the man page for
apilib(3c). size is the number of elements in the array. If baseType is PfCRecord, recordName should specify the name of the record, otherwise NULL should be used. Argument
fix is ignored. If value is non-NULL, the api assumes that it points to a corresponding C
array where the data is stored. If value is NULL, the api will allocate memory for a corresponding C array. The value returned is the variable id if apiError is OK, else NullId
is returned.
PfCreateArray creates the variable locally in the api, and puts the variable information
into a local buffer to be used by PfFlushCreateVar. It relies on the user to call PfFlushCreateVar to create the variables in the rtm. If the buffer is full, PfCreateArray will call
PfFlushCreteVar itself in order to empty the buffer.
EXAMPLE
char charArray[100];
int32 charArrayId;
float floatArray[5];
int32 floatArrayId;
int32 recArrayId;
charArrayId = PfCreateArray( "charArray", PfCUnsignedChar, 100, NULL,
True, charArray );
floatArrayId = PfCreateArray( "floatArray", PfCFloat, 5, NULL,
True, floatArray );
recArrayId = PfCreateArray( "recArray", PfCRecord, 20, "myRecord",
True, NULL );
PfFlushCreateVar(); /* Creates the variables in the RTM */
SEE ALSO
PfCreateVar in "ProcSee Reference Manual"on page 178
PfFlushCreateVar in "ProcSee Reference Manual"on page 195
ProcSee Reference Manual
177
Application Programmers Interface
PfCreateVar (3c)
FUNCTION
PfCreateVar - Create a variable
SYNOPSIS
int32 PfCreateVar( varName, type, recordName, fix, value )
char* varName;
int32 type;
char* recordName;
int32 fix;
void* value;
DESCRIPTION
PfCreateVar creates a variable with the name varName. type is the data type of the variable,
e.g. PfCInt or PfCFloat. The legal types can be found in $PROCSEE_DIR/include/TypeCodes.h, and are listed at the man page for apilib(3c). If type is PfCRecord or PfCRecord|PfCPointer recordName should specify the name of the record, else NULL
should be used. Argument fix is ignored. If value is non-NULL, the api assumes that it points
to a corresponding C variable where the data is stored. If value is NULL, the api will allocate
memory for a corresponding C variable. The value returned is the variable id if apiError is
OK, else NullId is returned.
PfCreateVar creates the variable locally in the api, and puts the variable information into a
local buffer to be used by PfFlushCreateVar. It relies on the user to call PfFlushCreateVar
to create the variables in the rtm. However, if the buffer is full, PfCreateVar will call PfFlushCreateVar itself in order to empty the buffer.
EXAMPLES
int32
myInt;
int32
myIntId;
struct MyRec myRec;
int32
myRecId;
myIntId = PfCreateVar( "myInt", PfCInt, NULL, True, &myInt);
myRecId = PfCreateVar( "myRec", PfCRecord, "MyRec", True, &myRec);
PfFlushCreateVar();
SEE ALSO
PfFlushCreateVar in "ProcSee Reference Manual"on page 195
PfCreateArray in "ProcSee Reference Manual"on page 177
178
ProcSee Reference Manual
Application Programmers Interface
PfData (3c)
FUNCTION
PfData - Get the data pointer of an object
SYNOPSIS
void* PfData( id )
int32 id;
DESCRIPTION
PfData returns a pointer to the value of the object specified by id. The object might be a
variable, a field in a record variable or an entry of an array.
EXAMPLES
int32 myIntId, myRecId, myArrId;
int32 myRecF1Id, myArr3Id;
/* Create variables */
myIntId = PfCreateVar( "myInt", PfCInt, NULL, True, NULL );
myRecId = PfCreateVar( "myRec", PfCRecord, "MyRec", True, NULL );
myArrId = PfCreateArray( "myArr", PfCInt, 5, NULL, True, NULL );
PfFlushCreateVar();
/* Extract a field of a record variable and an entry of an array */
myRecF1Id = PfId( myRecId, "F1" );
myArr3Id = PfIndex( myArrId, 3 );
anInt = *(int32*) PfData( myIntId ); /* data pointer of a variable */
aFloat = *(float*) PfData( myRecF1Id ); /* data pointer of a field */
anInt = *(int32*) PfData( myArr3Id ); /* data pointer of array entry */
SEE ALSO
PfId in "ProcSee Reference Manual"on page 215
PfIndex in "ProcSee Reference Manual"on page 216
PfCreateVar in "ProcSee Reference Manual"on page 178
PfCreateArray in "ProcSee Reference Manual"on page 177
ProcSee Reference Manual
179
Application Programmers Interface
PfDeleteRecord (3c)
FUNCTION
PfDeleteRecord - Delete a record
SYNOPSIS
int32 PfDeleteRecord( recName )
char* recName;
DESCRIPTION
PfDeleteRecord deletes the record definition specified by recName. PfDeleteRecord fails
and returns an error status if the record is used in other record definitions or by some variable.
The value of apiError is returned.
SEE ALSO
PfBeginRecord in "ProcSee Reference Manual"on page 174
PfAddField in "ProcSee Reference Manual"on page 170
PfEndRecord in "ProcSee Reference Manual"on page 187
PfReadScript in "ProcSee Reference Manual"on page 234
180
ProcSee Reference Manual
Application Programmers Interface
PfDeleteVar (3c)
FUNCTION
PfDeleteVar, PfDeleteVarId - Delete a variable
SYNOPSIS
int32 PfDeleteVar( varName )
char* varName;
int32 PfDeleteVarId( varId )
int32 varId;
DESCRIPTION
PfDeleteVar and PfDeleteVarId delete a variable given its name or id. The value of
apiError is returned.
SEE ALSO
PfCreateVar in "ProcSee Reference Manual"on page 178
PfCreateArray in "ProcSee Reference Manual"on page 177
ProcSee Reference Manual
181
Application Programmers Interface
PfDiagnosticsSubscribe, PfDiagnosticsSub-
FUNCTION
PfDiagnosticsSubscribe, PfDiagnosticsSubscribeEx - Subscribe for messages from the
rtm
SYNOPSIS
int32 PfDiagnosticsSubscribe( scope, categories, func )
char*
scope;
int32
categories;
PfTCallback func;
int32 PfDiagnosticsSubscribeEx( scope, categories, func, PfTReqId reqId )
char*
scope;
int32
categories;
PfTCallback func;
PfTReqId reqId;
typedef int32 (*PfTCallback) ( PfTReqId reqId, void* data );
typedef long PfTReqId;
DESCRIPTION
PfDiagnosticsSubscribe and PfDiagnosticsSubscribeEx are used to subscribe for messages of different categories sent from the rtm. scope is a full name indicating the part of the
user interface for which the subscription is valid. categories is a bit mask that indicates the
categories. If bit number n in categories is set, then message category n is involved. func is
the function to be called whenever a message satisfying the required categories and scope is
received. reqId is a user supplied request identifier which is passed back as an argument in
the call back function. The value returned is apiError.
If categories is negative or func is NULL, then the subscription to those categories will be
unsubscribed. It is possible to broaden or narrow an existing subscription, and only one subscription will be registered for a given scope. Subsequent calls to PfDiagnosticsSubscribe/
PfDiagnosticsSubscribeEx for the same scope change the existing subscription rather than
create a new one.
Messages are sent from the rtm by calling message(3pTALK).
EXAMPLE
See an example at the man page for PfGetDiagnosticsMessage
SEE ALSO
PfGetDiagnosticsMessage in "ProcSee Reference Manual"on page 205
message(3pTALK) in "ProcSee Reference Manual"on page 392
182
ProcSee Reference Manual
Application Programmers Interface
PfDisableInitialUpdate (3c)
FUNCTION
PfDisableInitialUpdate - Prevent initial variable values to be transferred from application to RTM
PfEnableInitialUpdate - Enable initial variable values to be transferred from application
to RTM
SYNOPSIS
int32 PfDisableInitialUpdate()
int32 PfEnableInitialUpdate()
DESCRIPTION
By default the initial variable values are transferred from the application to the RTM when
variables are created using PfCreateVar, PfCreateArray or PfReadScript. PfDisableInitialUpdate disables this default update. PfDisableInitialupdate must be called prior to
PfCreateVar, PfCreateArray or PfReadScript to take effect. PfEnableInitialUpdate restores to the default behaviour.
EXAMPLES
/* This function is called when connection to an RTM is established */
void onRtmConnect( int32 status, const char* rtmName )
{
PfDisableInitialUpdate();
PfCreateVar( "abc", PfCInt, NULL, 0, NULL );
PfReadScript( "file1.pdat" );
}
ProcSee Reference Manual
183
Application Programmers Interface
PfDispatch (3c)
FUNCTION
PfDispatch - Receive input from rtm or other external sources
SYNOPSIS
int32 PfDispatch( r,w,e )
fd_set* r;
fd_set* w;
fd_set* e;
DESCRIPTION
PfDispatch is to be used after the select(2) function call if the application implements its
own main loop. PfDispatch performs SWBus operations for receiving input from the rtm.
Functions set by PfAddInput are executed if the specified file descriptor has been activated.
If a variable used by PfAddVarAction is changed, the corresponding function is executed.
The value of apiError is returned.
EXAMPLES
switch( select( sizefds, &r, &w, &e, interval ) )
{
case -1:
/* Error */
break;
default:
PfDispatch( &r, &w, &e );
}
SEE ALSO
PfMainLoop in "ProcSee Reference Manual"on page 223
PfPeriodic in "ProcSee Reference Manual"on page 227
PfAddVarAction in "ProcSee Reference Manual"on page 173
PfAddInput in "ProcSee Reference Manual"on page 171
184
ProcSee Reference Manual
Application Programmers Interface
PfEditLogBuffer (3c)
FUNCTION
PfEditLogBuffer - create a new, append or cancel set of data in trend logger
SYNOPSIS
int32 PfEditLogBuffer( fullName, lCycle, mode, numOfValues, tArr, vArr )
char* fullName;
int32 lCycle;
int32 mode;
int32 numOfValues;
int32* tArr;
float* vArr;
DESCRIPTION
PfEditLogBuffer is used for altering the content of the trend log buffer for a trend variable uniquely defined by fullName and lCycle. The same trend variable can be logged at
different frequencies, and this is the reason why lCycle has to be specified to uniquely define the variable. A lCycle value set to -1 can be used if the trend variable is logged at one
frequency only. The mode parameter is used for deciding the type of action that is to be
performed on the variable. Legal values for mode are PfCLogBufferNew, PfCLogBufferAppend and PfCLogBufferCancel. If mode is PfCLogBufferCancel, only the first
two parameters are required, all others should be set to 0. Data is logged in the trend logger as a time/value pair. tArr is an array containing the time stamps for the data set and
vArr is containing the corresponding values. The first element of the arrays is the oldest
time/value pair.
PfEditLogBuffer is storing the information locally in the api, and puts the variable information into a local buffer to be used by PfFlushEditLogBuffer. It relies on the user to
call PfFlushLogEditBuffer to create the variables in the RTM. If the buffer is full, PfEditLogBuffer will call PfFlushEditLogBuffer itself in order to empty the buffer.
The value of apiError is returned.
SEE ALSO
PfFlushEditLogBuffer in "ProcSee Reference Manual"on page 196
TrendLog (3pTALK) in "ProcSee Reference Manual"on page 462
ProcSee Reference Manual
185
Application Programmers Interface
PfEndLoop (3c)
FUNCTION
PfEndLoop - Terminate PfMainLoop
SYNOPSIS
int32 PfEndLoop()
DESCRIPTION
PfEndLoop makes PfMainLoop terminate. The value of apiError is returned.
SEE ALSO
PfMainLoop in "ProcSee Reference Manual"on page 223
186
ProcSee Reference Manual
Application Programmers Interface
PfEndRecord (3c)
FUNCTION
PfEndRecord - Send a record definition to the rtm
SYNOPSIS
int32 PfEndRecord( recName )
char* recName;
DESCRIPTION
PfEndRecord sends the record definition specified by recName to the rtm. After PfEndRecord is completed the record is ready to be used by variables or other records. The
value returned is the record id if apiError is OK, else NullId is returned.
WARNING
A simpler and safer way to create records is using PfReadScript.
EXAMPLE
See an example at the man page for PfBeginRecord.
SEE ALSO
PfBeginRecord in "ProcSee Reference Manual"on page 174
PfAddField in "ProcSee Reference Manual"on page 170
PfReadScript in "ProcSee Reference Manual"on page 234
ProcSee Reference Manual
187
Application Programmers Interface
PfEvent, PfEvents (3c)
FUNCTION
PfEvent, PfEvents - Sends one or several events to the historic trend logger
SYNOPSIS
int32 PfEvent( trendLogger, eventName, dataType, recordName, size,
timeStamp, data )
char* trendLogger;
char* eventName;
int32 dataType;
char* recordName;
uint32 size;
uint32 timeStamp;
void* data;
int32 PfEvents( trendLogger, numEventData, eventData )
char*
trendLogger;
uint32 numEventData;
PfTEvents* eventData;
typedef struct
{
char* eventName;
/* Name of the event type
*/
int32 dataType;
/* Data type from <TypeCodes.h> */
char* recordName; /* Name of record if PfCRecord */
uint32 size;
/* >1 array.
*/
uint32 numEvents;
/* Number of events.
*/
uint32* timeStamps; /* When the events occured.
*/
void* data;
/* The data.
*/
} PfTEvents;
DESCRIPTION
PfEvent sends a single event to an rtm containing a historic trend logger. The argument
trendLogger is the name of the trend logger in the rtm. The name of the event type is specified in the argument eventName. The name must match one of the event types specified in
the trend variable configuration file. The argument dataType is the data type of the variable,
e.g. PfCInt, PfCFloat, PfCRecord. The legal types can be found in $PROCSEE_DIR/include/TypeCodes.h, and are listed in the man page for apilib(3c). If the data type is PfCRecord, recordName should specify the name of the record, else NULL should be used. If
the data type is an array the size attribute should be specified to match the array size of the
data parameter. The time when the event occured is specified with the parameter timeStamp
and is given in seconds since 1. january 1970. The value 0 can be used if the current time of
the trend logger shold be used. The last argument is the actual data that is sent to and saved
in the historic trend logger.
PfEvents sends one or several event types each containing one or several events to an rtm
containing a historic trend logger. The first argument to this function is trendLogger which
is the same as for PfEvent. numEventData is the number of event data put in the last argument eventData. eventData is an array of type struct PfTEvents. The PfTEvents data type
structure is used to describe one event type that will be sent to the historical trend logger.
188
ProcSee Reference Manual
Application Programmers Interface
PfEvent, PfEvents (3c)
When initializing one event type in the PfTEvents structure several events can be sent in
a single function call. The fields numEvents and data are arrays of time stamps and corresponding event data, respectively. The time stamp pointer can be set to 0 if the current
time of the trend logger shold be used.
This paragraph applies to array data types only. If the PfCPointer bit is specified for the
dataType then the array will be pointers to the data and not an array of the data itself. An
example will clarify this. If the dataType is set to PfCInt and the size is 10 the data must
point to an array of 10 integers. On the other hand if the dataType is set to PfCInt | PfCPointer and the size is 10 the data field must point to an array of 10 pointers to integers.
Each cell in the array must then point to an integer variable containing the value.
Note that the data type, record name and size must match the data sent in the data argument or the data field of the PfTEvents struct. The api uses this information when sending
the data to the rtm containing the historic trend logger.
To visualize the events the class EventPlot in the rtm is used. The EventPlot is a subshape of Trend.
The value of apiError is returned.
EXAMPLES
/* Send a single event of type float to the trend logger */
float value;
value = 3.14;
PfEvent( "Logger", "Ev321_V1", PfCFloat, 0, 1, time( 0 ), &value );
/* Send the event types Ev321_V1 of type float and Ev432_S1 of */
/* type int[2] to the trend logger.
*/
PfTEvents ev[2];
float v1;
int
v2[2];
v1 = 2.71;
v2[0] = 10;
v2[1] = 20;
ev[0].eventName = "Ev321_V1";
ev[0].dataType = PfCFloat;
ev[0].recordName = 0;
ev[0].size
= 1;
ev[0].numEvents = 1;
ev[0].timeStamps = 0;
ev[0].data
= &v1;
ev[1].eventName = "Ev432_S1";
ev[1].dataType = PfCInt;
ev[1].recordName = 0;
ev[1].size
= 2;
ev[1].numEvents = 1;
ev[1].timeStamps = 0;
ProcSee Reference Manual
189
Application Programmers Interface
ev[1].data
PfEvent, PfEvents (3c)
= v2;
PfEvents( "Logger", 2, ev );
SEE ALSO
PfClearEvents in "ProcSee Reference Manual"on page 175
190
ProcSee Reference Manual
Application Programmers Interface
PfExecute, PfExecuteAsync (3c)
FUNCTION
PfExecute, PfExecuteAsync - Send pTalk code to rtm for execution
SYNOPSIS
char* PfExecute( scope, sourceCode, ... )
char* scope;
char* sourceCode;
int32 PfExecuteAsync( scope, sourceCode, ... )
char* scope;
char* sourceCode;
DESCRIPTION
PfExecute sends a pTALK(the ProcSee language) compound statement or expression
specified in sourceCode to rtm for execution. The code is compiled and executed in the
scope given as parameter. The scope is given as a fullname; if scope is NULL or an empty
string, then the code is executed in the application scope.
PfExecute accepts a variable argument list together with formatting options in the source
code, just like printf(3).
If sourceCode is an expression, then the calculated value of that expression is returned as
a character string by PfExecute. If the result is a string value, the returned string includes
the quotes around the string, The PfUnquoteString function can be used to remove these
quotes. If the sourceCode is a statement, the empty string "" is returned. NULL is returned in case of errors. The length of sourceCode must not exceed 60000 bytes.
PfExecuteAsync is identical to PfExecute except that the RTM will not return a result
from the execution of sourceCode. The value returned from PfExecuteAsync is apiError.
We recomend to use PfExecuteAsync instead of PfExecute wherever possible, refer to
the examples below.
EXAMPLES
char *win, *pic, *result, *varName;
:
PfExecuteAsync( NULL, "{ displayPicture( \"%s\", \"%s\" ); }", win, pic );
varName = "myVar";
PfExecuteAsync( NULL, "{ printf( \"%s = %%d\", %s ); }", varName, varName );
result = PfExecute( "mainPicture", "4 * xSnap" );
SEE ALSO
printf(3) in "ProcSee Reference Manual"on page 407, and PfUnquoteString on page
233.
ProcSee Reference Manual
191
Application Programmers Interface
PfExportWindow (3c)
FUNCTION
PfExportWindow - Export an X window to the rtm
SYNOPSIS
#include <api/p3xapi.h>
int32 PfExportWindow( windowName, displayName, win, mask, func, reqId )
char*
windowName;
char*
displayName;
Window
win;
int32
mask;
PfTCallback func;
PfTReqId reqId;
typedef long PfTReqId;
typedef int32 (*PfTCallback) ( PfTReqId reqId, void* data );
DESCRIPTION
PfExportWindow is a function used to integrate ProcSee into a Motif application. This is
described in detail in a separate chapter in the ProcSee Users Guide.
PfExportWindow gives the rtm an X window to manipulate. name is the name of the window. displayName is the display name used by X, e.g "hostName:0.0". win is the X windowid. mask is a bit mask specifying the events for which a call back should be received. func
is the call back function to be called when an event of the specified type occurs. reqId is a
user-defined id to be used as a parameter to the call back function. This id is used to match
the request from api and the replay from rtm. The value returned is apiError.
Legal values for mask is any combination of the constants WOpNone, WOpAll ,WOpMove, WOpResize, WOpBackgroundColor, WOpForegroundColor, WOpColor,
WOpPattern, WOpOneSelected, WOpOneUnselected, WOpAllUnselected, WOpSelection, WOpChangeSelected, WOpIconify, WOpClose, WOpRaise, WOpLower,
WOpMap, WOpUnmap, WOpZoomPan and WOpScrollBar. These constants are found
in the file $PROCSEE_DIR/include/WindowOp.h.
The data argument to the callback function is a pointer to one of the following structures defined in the header file $PROCSEE_DIR/include/WindowOp.h.
struct WOpAnyStruct
{
int32 operation;
Window window;
};
struct WOpMoveStruct
/* The application should move */
{
/* the window manager window. */
int32 operation;
Window window;
int32 x;
int32 y;
};
192
ProcSee Reference Manual
Application Programmers Interface
PfExportWindow (3c)
struct WOpResizeStruct
/* The application should resize */
{
/* the window manager window. */
int32 operation;
Window window;
int32 width;
int32 height;
float32 worldWidth;
float32 worldHeight;
};
struct WOpColorStruct /* Set the backgroundcolour of the window */
{
int32
operation;
Window
window;
unsigned long background;
unsigned long foreground;
};
struct WOpZoomPanStruct /* Move and resize the window */
{
/* Only for windows in scrolled windows */
int32
operation;
Window
window;
int32
width;
int32
height;
int32
x;
int32
y;
};
struct WOpScrollBarStruct
{
int32
operation;
gilWindowHandle window;
int32
style;
/* Scrollbars On/Off */
};
SEE ALSO
PfReleaseWindow in "ProcSee Reference Manual"on page 240
PfGetWindowChanges in "ProcSee Reference Manual"on page 214
Window(3pTALK) in "ProcSee Reference Manual"on page 488
ProcSee Reference Manual
193
Application Programmers Interface
PfFlush (3c)
FUNCTION
PfFlush - Transfer variable values, perform a display update and tick trendlogger
SYNOPSIS
int32 PfFlush();
DESCRIPTION
PfFlush performs three tasks. First it transfers any variable values put in the transfer buffer
(by PfPut, PfSend, PfSendToOne or PfUpdateValuesId) to the rtm. When the variable
values are transferred, the rtm is asked to perform a display update. Lastly the rtm is asked
to tick its trend logger if existing. PfFlush is an asynchronous function, sending data to the
rtm without waiting for an answer. The value of apiError is returned.
The behaviour of PfFlush can be modified by PfSetFlushBehaviour. PfFlush will always
transfer data values, but display update and trend log ticking can be switched off.
For a more complete description of what happens inside rtm when updating displays, see the
update(3pTALK) man page.
SEE ALSO
PfSetFlushBehaviour in "ProcSee Reference Manual"on page 250
update(3pTALK) in "ProcSee Reference Manual"on page 482
194
ProcSee Reference Manual
Application Programmers Interface
PfFlushCreateVar (3c)
FUNCTION
PfFlushCreateVar - Create variables and arrays in the rtm
SYNOPSIS
int32 PfFlushCreateVar()
DESCRIPTION
PfFlushCreateVar use the information stored by PfCreateVar and PfCreateArray to
create variables in the rtm. PfCreateVar and PfCreateArray creates variables locally in
the api, and relies on the user to call PfFlushCreateVar when all variables are created.
PfFlushCreateVar is also called internally from PfCreateVar or PfCreateArray if the
internal buffer is full.
EXAMPLE
int32 myIntId = PfCreateVar( "myInt", PfCInt, NULL, True, NULL );
int32 myArrId = PfCreateArray( "myArr", PfCInt, 10, NULL, True, NULL );
PfFlushCreateVar();
SEE ALSO
PfCreateVar in "ProcSee Reference Manual"on page 178
PfCreateArray in "ProcSee Reference Manual"on page 177
ProcSee Reference Manual
195
Application Programmers Interface
PfFlushEditLogBuffer (3c)
FUNCTION
PfFlushEditLogBuffer - execute operations on trend log buffers in the RTM
SYNOPSIS
int32 PfFlushEditLogBuffer();
DESCRIPTION
PfFlushEditLogBuffer transfers all trend variables and the corresponding values put in the
transfer buffer PfEditLogBuffer to the RTM. When the variable values are transferred, the
RTM is asked to perform the required operations. PfFlushEditLogBuffer is an asynchronous function, sending data to the RTM without waiting for an answer. The value VariableNotExist is returned if the specified variable is not a trended variable, otherwise OK.
SEE ALSO
PfEditLogBuffer in "ProcSee Reference Manual"on page 185
TrendLog (3pTALK) in "ProcSee Reference Manual"on page 462
196
ProcSee Reference Manual
Application Programmers Interface
PfFlushUseFields (3c)
FUNCTION
PfFlushUseFields - Send useField information to the rtm
SYNOPSIS
int32 PfFlushUseFields()
DESCRIPTION
PfFlushUseFields sends the information stored in an internal buffer by PfUseField to the
rtm. When PfFlushUseFields has finished successfully, PfPut, PfSend. PfSendToOne
and PfUpdateValuesId can be used for updating single fields of record variables or entries of arrays. The value returned is apiError.
SEE ALSO
PfUseField in "ProcSee Reference Manual"on page 256
PfPut in "ProcSee Reference Manual"on page 231
PfSend in "ProcSee Reference Manual"on page 245
PfUpdateValuesId in "ProcSee Reference Manual"on page 255
ProcSee Reference Manual
197
Application Programmers Interface
PfGetChanges (3c)
FUNCTION
PfGetChanges - Set up a call back function for changes in rtm’s symbol table.
SYNOPSIS
int32 PfGetChanges( scope, func, reqId )
char*
scope;
PfTChangeFunc func;
PfTReqId
reqId;
typedef int32 (*PfTChangeFunc) (PfTReqId reqId, int operation, void* data);
typedef long PfTReqId;
DESCRIPTION
PfGetChanges instructs the rtm to call function func whenever certain changes occur in
rtm’s symbol table. The scope argument is used to filter out the changes that the rtm should
send. scope is the full name of an object that exists in the symboltable. Only changes in the
symbol table at this level or in any of the child levels will result in a call of the call back function. If a lot of changes happen, only the top-level changes are reported. This means that if
both a shape and the picture that contains the shape are created in the same execution cycle
of pTALK, only the creation of the picture is reported. The application should then use PfGetChildren to get everything below the picture. The reqId argument is a user-defined argument that is passed on to the call back function. Only one function can be registered at each
scope, and if PfGetChanges is called with the func argument set to NULL, the subscription
will be removed. The rtm also removes the subscription if the object at the given scope is
removed. The subscription will also be removed if the connection between the rtm and the
api is removed. The return value is the value of apiError.
operation has the value of one of the constants PfCObjectCreated, PfCObjectRenamed,
PfCObjectRemoved, which is found in the file $PROCSEE_DIR/include/WindowOp.h.
Information about the actual change can be obtained using Pfsor functions with the data
pointer as input argument. The data will always contain the full name and the idmask of the
object that is created, renamed, or removed. For created or renamed objects, the new signature of the object is also part of the data.
The PfCObjectCreated will be used when an object is inserted into the symbol table, e.g.
when the pTALK function newRectangle() etc. is used, or when a shape is drawn.
The PfCObjectRemoved will be used when an object is removed from the symbol table, e.g.
when the pTALK function remove is used. If an object containing child objects are created
or removed, only the "parent" object is reported.
The PfCObjectRenamed will be used when an object is renamed. All calls after this will use
the new name in the full names. The data for rename also uses the Extra field of the sor data,
for the new name of the object.
EXAMPLE
int32 changeCB(PfTReqId rId, int op, void* data)
{
198
ProcSee Reference Manual
Application Programmers Interface
PfGetChanges (3c)
printf("SymbolTable change: rId=%d", rId);
// update local view of rtm’s symboltable
switch (op) {
case PfCObjectCreated:
insertObj(PfsorFullName(data));
break;
case PfCObjectRenamed:
renameObj(PfsorFullName(data), PfsorExtra(data));
break;
case PfCObjectRemoved:
removeObj(PfsorFullName(data));
break;
}
return OK;
}
connectCb()
{
:
PfGetChanges("::myApp.myPict", changeCB, 12345);
:
}
SEE ALSO
Pfsor in "ProcSee Reference Manual"on page 254
PfGetChildren in "ProcSee Reference Manual"on page 200
PfExportWindow in "ProcSee Reference Manual"on page 192
PfGetWindowChanges in "ProcSee Reference Manual"on page 214
ProcSee Reference Manual
199
Application Programmers Interface
PfGetChildren (3c)
FUNCTION
PfGetChildren - Get the children of an object
SYNOPSIS
int32 PfGetChildren( fullName, mask, func, reqId )
char*
fullName;
int32
mask;
PfTCallback func;
PfTReqId reqId;
typedef long PfTReqId;
typedef int32 (*PfTCallback) ( PfTReqId reqId, void* data );
DESCRIPTION
PfGetChildren sends a request to rtm, asking rtm to send back the children of the object
specified by fullName. mask specifies the type of the children to be returned, func is the call
back function to be called for each child and reqId is a user specified id to be used to match
the request from api and the replay from rtm. The value returned is apiError.
The legal values for mask can be found in the header file $PROCSEE_DIR/include/IdCodes.h, NullId returns all. The SelectedObjectsIdMask value is special, in that it gives
the selected objects in the picture specified by fullName, or the selected objects in any picture, if fullName is the name of any composite object other than a picture, preferably the
empty string "".
func is called once for each child, and then once more to indicate endOfChildren. The data
for each child can be extracted from the data argument by the use of Pfsor functions. To
mark endOfChildren, PfsorIdMask returns NullId. func should return the value OK.
EXAMPLE
int numChilds;
int32 childCB( PfTReqId reqId, void* data )
{
if ( PfsorIdMask(data) == NullId )
{
/* End of children */
printf( "Total number of children received for reqId %d was %d\n",
reqId, numChilds );
}
else
{
printf( "FullName:\"%s\", Signature:\"%s\".\n",
PfsorFullName(data), PfsorSignature(data) );
numChilds++;
}
return OK;
}
:
200
ProcSee Reference Manual
Application Programmers Interface
PfGetChildren (3c)
numChilds = 0;
PfGetChildren("::myApp.myPict", NullId, childCB, 45);
SEE ALSO
Pfsor in "ProcSee Reference Manual"on page 254
ProcSee Reference Manual
201
Application Programmers Interface
PfGetCurrentObject (3c)
FUNCTION
PfGetCurrentObject - Get information about the current object in rtm
SYNOPSIS
void* PfGetCurrentObject()
DESCRIPTION
The PfGetCurrentObject gets the complete name and signature of the current object in rtm
The current object is the one that is selected, the last one selected if more than one object is
selected. The value returned is a pointer to a static buffer which holds the data about the current object in the rtm until the next call to an api function. These data can be extracted by
the use of Pfsor functions.
SEE ALSO
Pfsor in "ProcSee Reference Manual"on page 254
202
ProcSee Reference Manual
Application Programmers Interface
PfGetDefinedVars (3c)
FUNCTION
PfGetDefinedVars - Get the number of variables defined in the api
SYNOPSIS
int32 PfGetDefinedVars()
DESCRIPTION
PfGetDefinedVars returns the number of variables defined in the api. This function
should be used in combination with PfNextVarId.
EXAMPLE
See an example at the man page for PfNextVarId.
SEE ALSO
PfNextVarId in "ProcSee Reference Manual"on page 225
ProcSee Reference Manual
203
Application Programmers Interface
PfGetDefinition (3c)
FUNCTION
PfGetDefinition - Get the definition of an object in rtm
SYNOPSIS
void* PfGetDefinition( fullName, defSize )
char* fullName;
int32 defSize;
DESCRIPTION
PfGetDefinition is used to get the definition of an object in the rtm. The value returned is a
pointer to a static buffer which contains the name and the definition.
The fullName parameter is the full name of the object, and the defSize parameter is the expected size of the definition, and is used as the size of the buffer for the communication of
the definition back from the RTM. (It does no harm except for heavier load on the net if this
size is larger than the definition.)
The pointer returned by PfGetDefinition points to a static buffer which is unchanged until
the next use of an api function.
SEE ALSO
PfSetDefinition in "ProcSee Reference Manual"on page 249
204
ProcSee Reference Manual
Application Programmers Interface
PfGetDiagnosticsMessage (3c)
FUNCTION
PfGetDiagnosticsMessage - Extract a diagnostics message
SYNOPSIS
void PfGetDiagnosticsMessage( buffer, category, scope, text )
void* buffer;
int32* category;
char** scope;
char** text;
DESCRIPTION
PfGetDiagnosticsMessage extracts the data received in a diagnostics message. buffer is
the pointer received in the message call back function. category is filled with the category
bit mask. scope and text are pointers to character pointers set to the actual scope and message text respectively.
EXAMPLE
int32 msgCb( PfTReqId unused, void* msg )
{
int32 category;
char* scope;
char* text;
PfGetDiagnosticsMessage( msg, &category, &scope, &text );
printf( "Message received for category %x:\n", category );
printf( "Scope: %s, Text: %s\n", scope, text );
return OK;
}
PfDiagnosticsSubscribe( "::myApp", aCategoryMask, msgCb );
SEE ALSO
PfDiagnosticsSubcribe in "ProcSee Reference Manual"on page 182
message(3pTALK) in "ProcSee Reference Manual"on page 392
ProcSee Reference Manual
205
Application Programmers Interface
PfGetFDSet (3c)
FUNCTION
PfGetFDSet - Get the file descriptors in use by the SWBus
SYNOPSIS
int32 PfGetFDSet( fdc, fds )
int32 fdc;
fd_set* fds;
DESCRIPTION
The PfGetFDSet is used to get a file descriptor set fds, given a file descriptor class fdc.The
file descriptor class can be PfCReadCondition, PfCWriteCondition, PfCExceptCondition or PfCAllConditions. The value returned is the length, in bits, of the file descriptor set.
EXAMPLES
fd_set fds;
int32 sizefds = PfGetFDSet( PfCReadCondition, &fds );
select( sizefds, &fds, NULL, NULL, interval )
206
ProcSee Reference Manual
Application Programmers Interface
PfGetFieldId (3c)
FUNCTION
PfGetFieldId - Get the id of a field of a record
SYNOPSIS
int32 PfGetFieldId( recordId, fieldName )
int32 recordId;
char* fieldName;
DESCRIPTION
PfGetFieldId is used to get a field id, given a record id, recordId, and a field name, fieldName. The value returned is the field id if apiError is OK, else NullId is returned.
WARNING
PfGetFieldId is an anachronism that will cease to exist in future releases of ProcSee. It
is only used in connection with other anachronism functions like PfLocalPutValueId,
PfPutValue(Id) and PfPutValues(Id). These anachronisms should be replaced by PfId
and PfPut.
Be aware of the difference between the id of a field of a record (as returned by PfGetFieldId) and the id of a field of a record variable (as returned by PfId).
SEE ALSO
PfId in "ProcSee Reference Manual"on page 215
ProcSee Reference Manual
207
Application Programmers Interface
PfGetFuncArg (3c)
FUNCTION
PfGetFuncArg - Extract a logical argument in a function called from the rtm
SYNOPSIS
void* PfGetFuncArg( args, dataType, size )
void** args;
int32* dataType;
int32* size;
typedef int32 (*PfTFunction) (int32 numArgs, void* args );
DESCRIPTION
PfGetFuncArg extracts the data of an argument to a function registered with PfRegisterFunction or PfRegisterFunctionEx. PfGetFuncArg should be called once for each argument. It will return a pointer to the data for the specific argument. *args will be updated to
point to the next argument. The type and size of the argument will be delivered in the dataType and size arguments if non-NULL.
EXAMPLE
See an example at the man page for PfRegisterFunction.
SEE ALSO
PfRegisterFunction and PfRegisterFunctionEx in "ProcSee Reference Manual"on page
237
208
ProcSee Reference Manual
Application Programmers Interface
PfGetNumAllRtms (3c)
FUNCTION
PfGetNumAllRtms - Get the total number of rtms connected
SYNOPSIS
int32 PfGetNumAllRtms()
DESCRIPTION
PfGetNumAllRtms returns the total number of rtms the application program is connected to.
SEE ALSO
PfGetNumCurrentRtms in "ProcSee Reference Manual"on page 209
PfIsConnected in "ProcSee Reference Manual"on page 222
ProcSee Reference Manual
209
Application Programmers Interface
PfGetNumCurrentRtms (3c)
FUNCTION
PfGetNumCurrentRtms - Get the number of rtms in the set of current rtms
SYNOPSIS
int32 PfGetNumCurrentRtms()
DESCRIPTION
PfGetNumCurrentRtms returns the number of rtms in the set of current rtms, that is, the
number of rtms the application program talks to right now. Within usrFuncConnect and usrFuncDisconnect, this set by default consists of the single rtm to which connection is established or lost. Anywhere else, the set consists all rtms for which the usrFuncConnect has
finished.
SEE ALSO
PfGetNumAllRtms in "ProcSee Reference Manual"on page 209
PfAddRtmToCurrent in "ProcSee Reference Manual"on page 172
PfWithdrawRtmFromCurrent in "ProcSee Reference Manual"on page 259
PfInitialize in "ProcSee Reference Manual"on page 217
PfIsConnected in "ProcSee Reference Manual"on page 222
210
ProcSee Reference Manual
Application Programmers Interface
PfGetSystemError (3c)
FUNCTION
PfGetSystemError - Convert an error status to an error text
SYNOPSIS
char* PfGetSystemError( errorCode )
int32 errorCode;
DESCRIPTION
PfGetSystemError returns the error text corresponding to errorCode.
EXAMPLE
printf( "Error message is %s\n", PfGetSystemError(apiError) );
SEE ALSO
apiError in "ProcSee Reference Manual"on page 169
PfPrintSystemError in "ProcSee Reference Manual"on page 230
ProcSee Reference Manual
211
Application Programmers Interface
PfGetTypeId (3c)
FUNCTION
PfGetTypeId - Get the type of a variable
SYNOPSIS
int32 PfGetTypeId( varId )
int32 varId;
DESCRIPTION
PfGetTypeId is used to get the type of a variable, given the variable id, varId. The value
returned is the type if apiError is OK, else -1.
SEE ALSO
apilib in "ProcSee Reference Manual"on page 161
212
ProcSee Reference Manual
Application Programmers Interface
PfGetVarId (3c)
FUNCTION
PfGetVarId - Get the id of a variable
SYNOPSIS
int32 PfGetVarId( varName )
char* varName;
DESCRIPTION
PfGetVarId returns the variable id given a variable name, varName. The value returned
is the variable id if apiError is OK, else NullId.
PfGetVarId is an anachronism for the more general function PfId. The following lines
are equal:
PfGetVarId( "myVar" )
PfId( PfLocalProcess, "myVar" )
SEE ALSO
PfId in "ProcSee Reference Manual"on page 215
PfCreateVar in "ProcSee Reference Manual"on page 178
ProcSee Reference Manual
213
Application Programmers Interface
PfGetWindowChanges (3c)
FUNCTION
PfGetWindowChanges - Set up a call back function for window changes
SYNOPSIS
int32 PfGetWindowChanges( winName, func )
char*
winName;
PfTCallback func;
typedef int32 (*PfTCallback) ( PfTReqId operation, void* data );
typedef long PfTReqId;
DESCRIPTION
PfGetWindowChanges instructs the rtm to call function func whenever certain changes occur in the window specified by winName. The value of apiError is returned.
operation is one of the constants PfCOneSelected, PfCOneUnselected, PfCAllUnselected,
PfCShapeFinished, PfCShapeMoved, which is found in the file $PROCSEE_DIR/include/WindowOp.h. Information about the actual change can be obtained using Pfsor functions with the data pointer as input argument.
If operation is PfCShapeMoved, the relative movement is found in the full Name (dx) and
Signature(dy) strings in the object passed in the call back function. The C function atof can
be used to get the x and y movement from these strings. PfCShapeMoved is also used to
report changes in the picture that are not pure moving of a shape, like resizing. In these cases,
the dx and dy values are "0" (zero).
SEE ALSO
Pfsor in "ProcSee Reference Manual"on page 254
PfExportWindow in "ProcSee Reference Manual"on page 192
214
ProcSee Reference Manual
Application Programmers Interface
PfId (3c)
FUNCTION
PfId - Get the id of an object
SYNOPSIS
int32 PfId( parent, name )
int32 parent;
char* name;
DESCRIPTION
PfId can return the id of an rtm, of a variable and of a field of a record variable. PfId returns the id if apiError is OK, else NullId.
EXAMPLES
/* Get the id of RTM "rtm1" */
int32 anRtmId = PfId( PfLocalProcess, "rtm1" );
/* Get the id of variable "myVar" */
int32 myVarId = PfId( PfLocalProcess, "myVar" );
/* Get the id of field "f1" of variable "myVar" */
int32 myFieldId = PfId( myVarId, "f1" );
ProcSee Reference Manual
215
Application Programmers Interface
PfIndex (3c)
FUNCTION
PfIndex - Get the id of an entry of an array
SYNOPSIS
int32 PfIndex( arrayId, index )
int32 arrayId;
int32 index;
DESCRIPTION
PfIndex returns the id of entry number index in the array specified by arrayId. The first entry
has index 0. The returned value is the id if apiError is OK, else NullId.
EXAMPLE
int32 id = PfIndex( myArray, 3 );
216
ProcSee Reference Manual
Application Programmers Interface
PfInit (3c)
FUNCTION
PfInit - initialize the API and make the application ready for rtms to connect.
SYNOPSIS
int32 PfInit( processName, hostName, usrConnectFunc, usrDisconnectFunc )
char*
processName;
char*
hostName;
PfTConnectFunc usrConnectFunc;
PfTConnectFunc usrDisconnectFunc;
typedef void (*PfTConnectFunc) ( int32 status, const char* rtmName );
DESCRIPTION
PfInit should be the first ProcSee API function called in an application. PfInit initiates a
SWBus connection to a process named processName. The application will register itself
to the Control Server as process processName. The hostname argument specifies the
host where the Control Server is running. Default value for hostName is the value specified by the environment variable CONTROLHOST if set, else local host.
PfInit does not establish a connection to an rtm. Instead it is the rtm’s responsibility to
establish this connection. To establish a connection an rtm must call the pTALK function
connectToProcess(pTALK) where the argument processName is the same name that
was used as the first argument to PfInit. When using PfInit an application can be regarded
as a server where the rtms are clients responsible for connecting to the server.
When an rtm establish a connection to the application, the function usrConnectFunc is
called, and when the connection is lost, the usrDisconnectFunc is called. These are user
defined functions for initialization and cleanup, respectively. A usrConnectFunc typically contains creation of variables and records, and a usrDisconnectFunc could contain
printouts and cleanup. The functions take two arguments, a bit mask status and a character
string rtmName. In usrConnectFunc the value of status will always be PfCrtmStart, in
usrDisconnectFunc it will be PfCrtmStop if the rtm terminated gracefully and PfCrtmStop|PfCrtmCrash if the rtm crashed or was killed. rtmName is the name of the rtm
to which connection was established or lost.
Within usrConnectFunc and usrDisconnectFunc the set of current rtms consists of the
single rtm to which connection is established or lost. Anywhere else, the set of current
rtms consists of all rtms for which the usrConnectFunc has finished.
The value returned from this function is apiError.
WARNING
See Warning section for PfInitialize.
EXAMPLES
void usrFuncConnect( int32 status, char* rtmName )
{
ProcSee Reference Manual
217
Application Programmers Interface
PfInit (3c)
printf( "Connected to rtm \"%s\".\n", rtmName );
/* Create records and variables in rtm rtmName */
PfCreate......
...
}
void usrFuncDisConnect( int32 status, char* rtmName )
{
char* why;
why = (status&PfCrtmCrash) ? "crashed" : "stopped";
printf( "Lost contact with rtm \"%s\". (Rtm %s.)\n",
rtmName, why );
...
}
main()
{
...
PfInit( "prim", "ola", usrFuncConnect, usrFuncDisConnect );
...
PfMainLoop();
...
PfClose();
...
}
SEE ALSO
PfClose in "ProcSee Reference Manual"on page 176
PfMainLoop in "ProcSee Reference Manual"on page 223
PfIsConnected in "ProcSee Reference Manual"on page 222
PfInitialize in "ProcSee Reference Manual" on page 222
218
ProcSee Reference Manual
Application Programmers Interface
PfInitialize (3c)
FUNCTION
PfInitialize - initialize the API and connect the application to an rtm.
SYNOPSIS
int32 PfInitialize( appName, processName, rtmName, hostName, cacheSize,
master, usrConnectFunc, usrDisconnectFunc )
char*
appName;
char*
processName;
char*
rtmName;
char*
hostName;
int32
cachesize;
int32
master;
PfTConnectFunc usrConnectFunc;
PfTConnectFunc usrDisconnectFunc;
typedef void (*PfTConnectFunc) ( int32 status, const char* rtmName );
DESCRIPTION
PfInitialize should be the first ProcSee API function called in an application. PfInitialize
initiates a SWBus connection to a process named processName in an application named
appName in an rtm named rtmName. The application will register itself to the Control
Server as process processName. The hostname argument specifies the host where the
Control Server is running. The value returned is apiError.
The cacheSize and master arguments are ignored. Default value for processName is a
string equal to the argument appName. Default value for rtmName is "rtm". Default value
for hostName is the value specified by the environment variable CONTROLHOST if
set, else local host.
When connecting to more than one rtm, PfInitialize should be called once for each rtm,
using different values for rtmName. The arguments appName and processName must be
equal for every call to PfInitialize in a program.
When connection to the specified rtm is established, the function usrConnectFunc is
called, and when the connection is lost, the usrDisconnectFunc is called. These are user
defined functions for initialization and cleanup, respectively. A usrConnectFunc typically contains creation of variables and records, and a usrDisconnectFunc could contain
printouts and cleanup. The functions take two arguments, a bit mask status and a character
string rtmName. In usrConnectFunc the value of status will always be PfCrtmStart, in
usrDisconnectFunc it will be PfCrtmStop if the rtm terminated gracefully and PfCrtmStop|PfCrtmCrash if the rtm crashed or was killed. rtmName is the name of the rtm
to which connection was established or lost.
Within usrConnectFunc and usrDisconnectFunc the set of current rtms consists of the
single rtm to which connection is established or lost. Anywhere else, the set of current
rtms consists of all rtms for which the usrConnectFunc has finished.
ProcSee Reference Manual
219
Application Programmers Interface
PfInitialize (3c)
WARNING
Make sure that the argument processName matches the name of the process in which the database containing the variables is defined in the application resource file. If the database is
placed within the application body, the database variables will be placed in a default process
named after the application. In the example below, variables from file "Sim.pdat" will be
placed in process "::Simulator.Simulator"
application Simulator
{
database "Sim.pdat"
...
}
If the application process now calls PfInitialize using e.g. processName "Sim", then variables from the application process will be created within the process "::Simulator.Sim", and
the variables in process "::Simulator.Simulator" will never be updated and hence waste a lot
of memory. The correct way of calling PfInitialize in such a situation is shown below.
/* Wrong, processName doesn’t match definition from the resource file */
PfInitialize("Simulator","Sim","rtm",NULL,0,0,up,down);
/* Correct, processName equals application name */
PfInitialize("Simulator",NULL,NULL,NULL,0,0,up,down);
On the other hand, if the database contain the variables are placed within a process body, the
argument processName must be set individually.
application Simulator
{
process Sim
{
database "Sim.pdat";
}
...
}
/* Correct, processName equals processName from resource file */
PfInitialize("Simulator","Sim",NULL,NULL,0,0,up,down);
EXAMPLES
void usrFuncConnect( int32 status, char* rtmName )
{
printf( "Connected to rtm \"%s\".\n", rtmName );
/* Create records and variables in rtm rtmName */
PfCreate......
...
}
void usrFuncDisConnect( int32 status, char* rtmName )
{
char* why;
why = (status&PfCrtmCrash) ? "crashed" : "stopped";
printf( "Lost contact with rtm \"%s\". (Rtm %s.)\n",
220
ProcSee Reference Manual
Application Programmers Interface
PfInitialize (3c)
rtmName, why );
...
}
main()
{
...
PfInitialize( "Reactor", "prim", "rtm", "ola", 0, True,
usrFuncConnect, usrFuncDisConnect );
...
PfMainLoop();
...
PfClose();
...
}
SEE ALSO
PfClose in "ProcSee Reference Manual"on page 176
PfMainLoop in "ProcSee Reference Manual"on page 223
PfIsConnected in "ProcSee Reference Manual"on page 222
PfInit in "ProcSee Reference Manual" on page 217
ProcSee Reference Manual
221
Application Programmers Interface
PfIsConnected (3c)
FUNCTION
PfIsConnected - Are there any rtms in the set of current rtms?
SYNOPSIS
int32 PfIsConnected()
DESCRIPTION
PfIsConnected returns True if there are one or more rtms in the set of current rtms, False
otherwise.
PfIsConnected is identical to PfGetNumCurrentRtms.
SEE ALSO
PfGetNumCurrentRtms in "ProcSee Reference Manual"on page 210
PfInitialize in "ProcSee Reference Manual"on page 217
PfAddRtmToCurrent in "ProcSee Reference Manual"on page 172
PfWithdrawRtmFromCurrent in "ProcSee Reference Manual"on page 259
222
ProcSee Reference Manual
Application Programmers Interface
PfMainLoop (3c)
FUNCTION
PfMainLoop - Enter the program main loop
SYNOPSIS
int32 PfMainLoop()
DESCRIPTION
PfMainLoop handles input from rtm and from input sources set up by PfAddInput. It
calls the functions registered with PfSetProcessHandler at the specified intervals, and
the functions registered with PfAddVarAction when the corresponding variables are
changed in the rtm. To break the loop PfEndLoop must be called. The value of apiError
is returned.
PfMainLoop can be replaced with a loop calling PfPeriodic, PfGetFDSet, select, and
PfDispatch.
SEE ALSO
PfEndLoop in "ProcSee Reference Manual"on page 186
PfAddInput in "ProcSee Reference Manual"on page 171
PfSetProcessHandler in "ProcSee Reference Manual"on page 252
PfAddVarAction in "ProcSee Reference Manual"on page 173
ProcSee Reference Manual
223
Application Programmers Interface
PfName (3c)
FUNCTION
PfName - Get the name of an object
SYNOPSIS
char* PfName( id )
int32 id;
DESCRIPTION
PfName returns the name of the object specified by id if apiError is OK, else NULL. id
might specify an rtm, a variable, or a field of a record variable.
SEE ALSO
PfId in "ProcSee Reference Manual"on page 215
224
ProcSee Reference Manual
Application Programmers Interface
PfNextVarId (3c)
FUNCTION
PfNextVarId - Get the id of the next api variable in a traversal
SYNOPSIS
int32 PfNextVarId( iterator )
int32* iterator;
DESCRIPTION
PfNextVarId is used to iterate over all variables known to the api. iterator must be initialized to 0, and is incremented by PfNextVarId. The value returned is the variable id if
apiError is OK else NullId is returned.
EXAMPLE
int32 iterator;
int numVars;
int32* varBuf;
int i;
PfReadScript( "variables.pdat" );
numVars = PfGetDefinedVars();
varBuf = (int32*)calloc( numVars, sizeof(int32) );
for ( i = 0, iterator = 0; i < numVars; i++ )
varBuf[i] = PfNextVarId( &iterator );
/* varBuf (containing variable ids) can now be used in PfUpdateValuesId */
SEE ALSO
PfGetDefinedVars in "ProcSee Reference Manual"on page 203
PfReadScript in "ProcSee Reference Manual"on page 234
ProcSee Reference Manual
225
Application Programmers Interface
PfNonBlocking (3c)
FUNCTION
PfNonBlocking - set the connection to the RTM nonblocking
SYNOPSIS
int32 PfNonBlocking()
int32 fifoSize;
DESCRIPTION
PfNonBlocking sets the communication channels to the RTMs in the current set of RTMs in
nonblocking mode. For each RTM, PfNonBlocking allocates a buffer of fifoSize bytes that
is used as a fifo circular buffer when sending data.
Using TCP/IP and sockets in blocking mode, which is the default in the SWBus, means that
a process will be halted whenever the socket FIFO is full. The sender will have to wait for
the receiver to read some bytes from the FIFO before continuing to send. As long as the receiver doesn’t read from the FIFO, the sender will be halted. In some situations this can lead
to a deadlock. Consider two processes sending data to each other simultaneously and the
amount of data exceeding the FIFO size. None of them will ever read, as they are both busy
sending, and a deadlock situation has occured.
In nonblocking mode (when PfNonBlocking is used), a sending process will not be halted.
It will append the data to the allocated circular buffer, and then send as much data as possible
without blocking. If it was unable to send the entire message, the SWBus will leave the rest
in the circular buffer and return from send. In future iterations of the main loop, or when
sending the next message, the SWBus will try to send more data from the circular buffer. The
flow of control is handled entirely by the SWBus, and application developers don’t need to
know about it.
The probability of entering a deadlock situation is significantly reduced when nonblocking
mode is used. However, there is a possibility that the internal circular buffer gets full. If that
happens, the last operation that tried to send will fail, but no blocking will occur, and no other
data will be lost.
PfNonBlocking should be called from within the usrConnectFunc specified as argument to
PfInitialize, as the connection should be set nonblocking whenever it is established.
RETURN VALUES
PfNonBlocking returns the value of apiError.
SEE ALSO
PfInitialize in "ProcSee Reference Manual"on page 217
226
ProcSee Reference Manual
Application Programmers Interface
PfPeriodic (3c)
FUNCTION
PfPeriodic - Execute all periodic functions
SYNOPSIS
struct timeval* PfPeriodic()
DESCRIPTION
PfPeriodic executes internal SWBus periodic functions and all periodic functions set up
by PfSetProcessHandler. The value returned is the amount of time to next periodic function is to be called. If no periodic functions are active, it returns a NULL pointer. This
pointer can be used as input to select. The returned pointer is pointing to a static data area.
EXAMPLES
struct timeval *interval;
fd_set fds;
int32 sizefds = PfGetFDSet( READ_FDS, &fds );
interval = PfPeriodic();
switch( select( sizefds, &fds, NULL, NULL, interval ) )
SEE ALSO
PfSetProcessHandler in "ProcSee Reference Manual"on page 252
PfMainLoop in "ProcSee Reference Manual"on page 223
ProcSee Reference Manual
227
Application Programmers Interface
PfPrintAllRecords (3c)
FUNCTION
PfPrintAllRecords - Print all records known to the api
SYNOPSIS
void PfPrintAllRecords()
DESCRIPTION
All records with their elements will be printed to stdout.
228
ProcSee Reference Manual
Application Programmers Interface
PfPrintAllVars (3c)
FUNCTION
PfPrintAllVars - Print all variables known to the api
SYNOPSIS
void PfPrintAllVars()
DESCRIPTION
All variables will be printed to stdout.
ProcSee Reference Manual
229
Application Programmers Interface
PfPrintSystemError (3c)
FUNCTION
PfPrintSystemError - Print an error text to stdout
SYNOPSIS
void PfPrintSystemError( errorCode )
int32 errorCode;
DESCRIPTION
PPfPrintSystemError
prints the error text corresponding to errorCode to stdout.
EXAMPLE
PfPrintSystemError( apiError );
SEE ALSO
apiError in "ProcSee Reference Manual"on page 169
PfGetSystemError in "ProcSee Reference Manual"on page 211
230
ProcSee Reference Manual
Application Programmers Interface
PfPut (3c)
FUNCTION
PfPut - Update a variable, and put it in the transfer buffer
SYNOPSIS
int32 PfPut( id, valuePtr )
int32 id;
void* valuePtr;
DESCRIPTION
PfPut updates a variable and puts the updated value into the transfer buffer for later transfer by PfFlush. PfPut can also be used for fields in record variables and for entries in arrays.
Argument id is the id of a variable as returned by PfCreateVar or PfCreateArray, the
field of a variable as returned by PfId, or an entry in an array as returned by PfIndex.
Argument valuePtr should point to a location where the updated value is found.
PfPut returns the value of apiError.
WARNING
Unless PfUseField and PfFlushUseFields are called prior to PfPut, using PfPut for
fields in record variables or for entries in arrays will just update locally without putting
the value into the transfer buffer.
EXAMPLES
int32 myIntId = PfCreateVar("myInt",PfCInt,NULL,True,NULL);
int32 myRecVarId = PfCreateVar("myRecVar",PfCRecord,"REC",True,NULL);
int32 myArrayId = PfCreateArray("myArray",PfCInt,100,NULL,True,NULL);
PfFlushCreateVar();
int32 myFieldId = PfId(myRecVarId,"aFieldName");
int32 myArrayEntry = PfIndex(myArrayId,47);
PfUseField( myFieldId );
PfUseField( myArrayentry );
PfFlushUseFields();
:
int32 anInt = 5;
PfPut( myIntId, &anInt );
PfPut( myFieldId, &anInt );
PfPut( myArrayEntry, &anInt );
PfFlush();
SEE ALSO
PfFlush in "ProcSee Reference Manual"on page 194
PfSend in "ProcSee Reference Manual"on page 245
ProcSee Reference Manual
231
Application Programmers Interface
PfPut (3c)
PfCreateVar in "ProcSee Reference Manual"on page 178
PfCreateArray in "ProcSee Reference Manual"on page 177
PfId in "ProcSee Reference Manual"on page 215
PfIndex in "ProcSee Reference Manual"on page 216
PfUseField in "ProcSee Reference Manual"on page 256
PfFlushUseFields in "ProcSee Reference Manual"on page 197
232
ProcSee Reference Manual
Application Programmers Interface
PfQuoteString, PfUnquoteString, PfSetMax-
FUNCTION
PfQuoteString - add quotes ("...") around a string.
PfUnquoteString - remove quotes from a string
PfSetMaxQuotedStrings - init the circular buffer of quoted/unquoted strings.
SYNOPSIS
const char* PfQuoteString( const char* unquotedStr );
const char* PfUnquoteString( const char* quotedStr );
void PfSetMaxQuotedStrings( int32 numStrs );
DESCRIPTION
PfQuoteString returns a pointer to a copy of the string with quotes added. Some characters
inside the string are escaped with a backslash, like the quote character ("), and the backslash (\).
PfUnquoteString returns a pointer to a copy of the string with quotes removed. Characters
inside the string which were escaped with a backslash, are replaced with their intended
values.
PfSetMaxQuotedStrings sets the number of results from these functions to store. Before this function is
called, the default is to store the last 10 results.
WARNING
If PfQuoteString and PfUnquoteString are called more times than the number set with PfSetMaxQuotedStrings, or its default, the earlier returned poniters may point to the same
buffers as the newly returned strings, or to freed memory, which may give problems in
e.g. printf statements.
EXAMPLES
char* s = PfUnquoteString(PfExecute("","\"abc\""));
printf("Resulting string is %s", PfQuoteString(s));
SEE ALSO
PfExecute (string results returned are quoted) in "ProcSee Reference Manual" on page
191
ProcSee Reference Manual
233
Application Programmers Interface
PfReadScript (3c)
FUNCTION
PfReadScript - Create records and variables from a ProcSee database file (.pdat)
SYNOPSIS
int32 PfReadScript( fileName )
char* fileName;
DESCRIPTION
PfReadScript creates records and variables acording to the specifications in the ProcSee database file, fileName.
PfReadScript is very well suited for creating records as using the same database file in the
rtm and the api guarantees consistency in record definitions. Creating variables using
PfReadScript implies that the api will allocate memory for all variables, as PfReadScript
calls PfCreateVar with value NULL.
If there are any syntax errors in the database file, the line numbers where the errors occurred
will be printed to stdout. The value returned is the number of errors encountered.
EXAMPLES
/* See the Referance manual for ProcSee database file format (.pdat) */
SEE ALSO
PfBeginRecord in "ProcSee Reference Manual"on page 174
PfAddField in "ProcSee Reference Manual"on page 170
PfEndRecord in "ProcSee Reference Manual"on page 187
PfCreateArray in "ProcSee Reference Manual"on page 177
PfCreateVar in "ProcSee Reference Manual"on page 178
Referance manual for the ProcSee database file format (.pdat)
234
ProcSee Reference Manual
Application Programmers Interface
PfReceiveRtmUpdates (3c)
FUNCTION
PfReceiveRtmUpdates - Enable/disable variable updates from RTM to application
SYNOPSIS
int32 PfReceiveRtmUpdates( int enable )
DESCRIPTION
When a variable value is modified by a pTALK statement in the RTM, the RTM by default transfers the new value to the application. PfReceiveRtmUpdates can be used to
modify this default behaviour for all or a selected set of variables. Notice that string variables are by default not transferred from the RTM to the application even if variable updates are enabled. This functionality must be enabled by the API function
PfReceiveRtmStringUpdates.
PfReceiveRtmUpdates enables (if enable is true) or disables (if enable is false) variable
updates from RTM to application. The function should be called prior to creating the variables for which the modified behaviour is wanted.
In general, disabling variable updates from RTM to the application reduces the amount of
memory required by the RTM and has a positive effect on performance for creating variables, for clean-up after a communication break and for shutdown.
EXAMPLES
/* This function is called when connection the an RTM is established */
void onRtmConnect( int32 status, const char* rtmName )
{
/* The variables created below comply with the deafult behaviour
when updated in the RTM */
PfCreateVar ( "abc", PfCInt, NULL, 0, NULL );
PfReadScript( "file1.pdat" );
/* Values for the variables created below will not be transferred to
the application when updated in the RTM */
PfReceiveRtmUpdates( 0 );
PfCreateVar ( "def", PfCInt, NULL, 0, NULL );
PfReadScript( "file2.pdat" );
/* Values for the variables created below will be transferred to
the application when updated in the RTM */
PfReceiveRtmUpdates( 1 );
PfCreateVar ( "ghi", PfCInt, NULL, 0, NULL );
PfReadScript( "file3.pdat" );
}
SEE ALSO
PfReceiveRtmStringUpdates in "ProcSee Reference Manual"on page 236
ProcSee Reference Manual
235
Application Programmers Interface
PfReceiveRtmStringUpdates (3c)
FUNCTION
PfReceiveRtmStringUpdates - Enable/disable string variable updates from RTM to application
SYNOPSIS
int32 PfReceiveRtmStringUpdates( int enable )
DESCRIPTION
String variables or fields of type string in struct variables are by default not transferred from
the RTM to the application. The API function PfReceiveRtmStringUpdates can be used to
change this behaviour. This function accepts one argument which enables (true) or disables
(false) this functionality.
Call this function before creating the variable(s) with any of the API functions PfCreateVar,
PfCreateArray or PfReadScript. This function will not have any affect on the variables after they have been created.
Notice that the variable transfer functionality from the RTM to the application must be enabled (PfReceiveRtmUpdates) for this function to have any effect.
SEE ALSO
PfReceiveRtmUpdates in "ProcSee Reference Manual"on page 235
236
ProcSee Reference Manual
Application Programmers Interface
PfRegisterFunction,PfRegisterFunctionEx
}FUNCTION
PfRegisterFunction, PfRegisterFunctionEx - Make an application function known in
the rtm
SYNOPSIS
int32 PfRegisterFunction( funcName, func, numArgs, args )
char*
funcName;
PfTFunction func;
int32
numArgs;
PfTArg
args[];
int32 PfRegisterFunctionEx( funcName, func, numArgs, args, reqId )
char*
funcName;
PfTFunctionEx func;
int32
numArgs;
PfTArg
args[];
PfTReqId reqId;
typedef int32 (*PfTFunction) ( int32 numArgs, void* args );
typedef int32 (*PfTFunctionEx) ( PfTReqId reqId, int32 numArgs, void* args );
typedef long PfTReqId;
typedef struct
{
int32 dtype; /* Data type, from $PROCSEE_DIR/include/TypeCodes.h */
int32 size; /* 0 = pointer, 1 = single variable, >1 = array */
} PfTArg;
DESCRIPTION
PfRegisterFunction and PfRegisterFunctionEx make a function in the application program known to the rtm and thereby avaiable from pTALK. funcName is the name of the
function, func is the function itself, numArgs is the number of arguments, and args is an
array containg the argument descriptions. The function PfRegisterFunctionEx accepts
one additional argument reqId. This is a user supplied request identifier which is passed
back in the first argument in the registered call back function. The value returned is
apiError.
When the function is available to the rtm, it can be called from pTALK as if it were written in pTALK itself. Since C is a compiled language, it is not possible to remotely call a
function with a variable number of arguments. All remotely declared functions must have
the same physical signature although they might have different logical signatures. The
logical signature is the signature of the function as the rtm sees it, for example as void
f(int,float[4], char*). The Run-Time Manager sees f as a void function taking an int, an
array of 4 floating point numbers and a character string. The physical signature for all
functions that are to be called remotely must be int32 f(int32,void*) when the function is
registered by PfRegisterFunction, and int32 f(PfTReqId, int32, void*) when registered
by PfRegisterFunctionEx. reqId is the same request identifier supplied when the function was registered. numArgs holds the actual number of logical arguments passed, and
ProcSee Reference Manual
237
Application Programmers Interface
PfRegisterFunction,PfRegisterFunctionEx (3c)
args is a pointer to a data block containing all the logical arguments. The data block holds
each argument’s actual size and type in addition to the value itself. The api function PfGetFuncArg helps retrieving the actual data.
EXAMPLE
/* Declaring the function storeData( int, float[4], char* ) to the RTM */
PfTArg formals[] =
{
{PfCInt,1},
{PfCFloat,4}
{PfCUnsignedChar,0}
};
PfRegisterFunction( "storeData", store, 3, formals );
:
:
int32 store( int32 numArgs, void* data )
{
int32 size, type;
void* theData;
int32 intVal;
float floatVals[4];
char stringVal[32];
int i;
if ( numArgs != 3 )
return !OK;
/* Extract first argument */
theData = PfGetFuncArg( &data, &type, &size );
if ( type != PfCInt || size != 1 )
return !OK;
intVal = *(int32*)theData;
/* Extract second argument */
theData = PfGetFuncArg( &data, &type, &size );
if ( type != PfCFloat || size != 4 )
return !OK;
for ( i = 0; i < 4; i++ )
floatVals[i] = ((float*)theData)[i];
/* Extract third argument */
theData = PfGetFuncArg( &data, &type, &size );
if ( type != PfCUnsignedChar && size > 32 )
return !OK;
strcpy( stringVal, (char*)theData );
:
return OK;
}
238
ProcSee Reference Manual
Application Programmers Interface
PfRegisterFunction,PfRegisterFunctionEx
SEE ALSO
PfGetFuncArg in "ProcSee Reference Manual"on page 208
ProcSee Reference Manual
239
Application Programmers Interface
PfReleaseWindow (3c)
FUNCTION
PfReleaseWindow - End the use of an X-Window in rtm
SYNOPSIS
void PfReleaseWindow( name )
char* name;
DESCRIPTION
PfReleaseWindow releases the window specified by name. The window should previously
have been exported by PfExportWindow.
SEE ALSO
PfExportWindow in "ProcSee Reference Manual"on page 192
240
ProcSee Reference Manual
Application Programmers Interface
PfRemoveAllInputs (3c)
FUNCTION
PfRemoveAllInputs - Remove all input handler callback functions
SYNOPSIS
int32 PfRemoveAllInputs()
DESCRIPTION
PfRemoveAllInputs removes all callback functions previously set up by PfAddInput.
The value of apiError is returned.
SEE ALSO
PfAddInput in "ProcSee Reference Manual"on page 171
PfRemoveInput in "ProcSee Reference Manual"on page 242
PfMainLoop in "ProcSee Reference Manual"on page 223
ProcSee Reference Manual
241
Application Programmers Interface
PfRemoveInput (3c)
FUNCTION
PfRemoveInput - removes an input handler callback function.
SYNOPSIS
int32 PfRemoveInput( fd, condition, func )
int32
fd;
int32
condition;
PfTInputFunc func;
typedef int32 (*PfTInputFunc) ( int32 fd );
DESCRIPTION
PfRemoveInput removes a callback function previously set up by PfAddInput. fd is the file
descriptor. condition is PfCReadCondition, PfCWriteCondition, PfCExceptCondition,
or PfCAllCondition. func is the function to be removed from the function list. The value of
apiError is returned.
EXAMPLES
PfRemoveInput( PfCKeyboardFd, PfCReadCondition, kbdHandler );
SEE ALSO
PfAddInput in "ProcSee Reference Manual"on page 171
PfRemoveAllInputs in "ProcSee Reference Manual"on page 241
PfMainLoop in "ProcSee Reference Manual"on page 223
242
ProcSee Reference Manual
Application Programmers Interface
PfRemoveProcessHandler (3c)
FUNCTION
PfRemoveProcessHandler - Remove a periodic process handler callback function
SYNOPSIS
int32 PfRemoveProcessHandler( id )
int32 id;
DESCRIPTION
PfRemoveProcessHandler removes a process handler previously set up by PfSetProcessHandler. id is the id returned by PfSetProcessHandler. The value of apiError
is returned.
EXAMPLES
int32 id;
:
id = PfSetProcessHandler( ... );
:
PfRemoveProcessHandler( id );
SEE ALSO
PfSetProcessHandler in "ProcSee Reference Manual"on page 252
PfMainLoop in "ProcSee Reference Manual"on page 223
ProcSee Reference Manual
243
Application Programmers Interface
PfRemoveVarAction (3c)
FUNCTION
PfRemoveVarAction - Remove a variable action
SYNOPSIS
int32 PfRemoveVarAction( varId, func )
int32
varId;
PfTVarActionFunc func;
typedef int32 (*PfTVarActionFunc) ( int32 varId );
DESCRIPTION
PfRemoveVarAction removes a variable action previously set up by PfAddVarAction.
varId is the variable identifier and func is the callback function. The value of apiError is
returned.
SEE ALSO
PfAddVarAction in "ProcSee Reference Manual"on page 173
PfMainLoop in "ProcSee Reference Manual"on page 223
244
ProcSee Reference Manual
Application Programmers Interface
PfSend (3c)
FUNCTION
PfSend - Put a value into the transfer buffer
PfSendToOne - Put a value into the transfer buffer for a specific RTM
SYNOPSIS
int32 PfSend( id )
int32 id;
int32 PfSendToOne( id, rtmId )
int32 id;
int32 rtmId;
DESCRIPTION
PfSend puts the value of the variable specified by id into the transfer buffer for later transfer by PfFlush. PfSend can also be used for a field in a record variable or for an entry in
an array. Argument id should be the id of a variable as returned by PfCreateVar or PfCreateArray, the id of a field in a record variable as returned by PfId, or the id of an entry
in an array as returned by PfIndex. The value returned is apiError.
PfSendToOne works like PfSend, but the value is only put into the transfer buffer for the
specific RTM identified by rtmId. When PfFlush is later invoked, only the specified
RTM receives the value. rtmId can be obtained by using PfId.
WARNING
Unless PfUseField and PfFlushUseFields, are called prior to PfSend, using PfSend for
fields in record variables or for entries in arrays will have no effect.
EXAMPLES
int32 myInt = 0;
struct REC myRecVar;
int32 myArray[100];
:
int32 myIntId, myRecVarId, myArrayId, myFieldId, myArrayEntry;
:
myIntId = PfCreateVar("myInt",PfCInt,NULL,True,&myInt);
myRecVarId = PfCreateVar("myRecVar",PfCRecord,"REC",True,&myRecVar);
myArrayId = PfCreateArray("myArray",PfCInt,100,NULL,True,myArray);
PfFlushCreateVar();
myFieldId = PfId(myRecVarId,"aFieldName");
myArrayEntry = PfIndex(myArrayId,47);
PfUseField( myFieldId );
PfUseField( myArrayEntry );
PfFlushUseFields();
:
myInt++;
myRecVar.aFieldName = 3.14;
myArray[47] += 100;
ProcSee Reference Manual
245
Application Programmers Interface
PfSend (3c)
PfSend( myIntId );
PfSend( myFieldId );
PfSend( myArrayEntry );
PfFlush();
SEE ALSO
PfFlush in "ProcSee Reference Manual"on page 194
PfId in "ProcSee Reference Manual"on page 215
PfIndex in "ProcSee Reference Manual"on page 216
PfUseField in "ProcSee Reference Manual"on page 256
PfFlushUseFields in "ProcSee Reference Manual"on page 197
PfPut in "ProcSee Reference Manual"on page 231
PfCreateVar in "ProcSee Reference Manual"on page 178
PfCreateArray in "ProcSee Reference Manual"on page 177
246
ProcSee Reference Manual
Application Programmers Interface
PfSendApiStringUpdates (3c)
FUNCTION
PfSendApiStringUpdates - Enable/disable string variable updates from application to
RTM
SYNOPSIS
int32 PfSendApiStringUpdates( int enable )
DESCRIPTION
String variables or fields of type string in struct variables are by default not transferred
from the application to the RTM. The API function PfSendApiStringUpdates can be
used to change this behaviour. This function accepts one argument which enables (true)
or disables (false) this functionality.
Call this function before creating the variable(s) with any of the API functions PfCreateVar, PfCreateArray or PfReadScript. This function will not have any affect on the
variables after they have been created.
ProcSee Reference Manual
247
Application Programmers Interface
PfSetAllRtmsCurrent (3c)
FUNCTION
PfSetAllRtmsCurrent - insert all rtms into the set of current rtms
SYNOPSIS
int32 PfSetAllRtmsCurrent()
DESCRIPTION
PfSetAllRtmsCurrent inserts all connected rtms into the set of current rtms. The value returned is apiError. The set of current rtms is those rtms which the application program talks
to at the moment.
Within the user supplied connection callback functions (refered to as usrConnectFunc and
usrDisconnectFunc at the man page for PfInitialize) the set of current rtms by default consists of the single rtm to which connection is established or lost. Anywhere else, the set of
current rtms by default consists of all rtms for which the usrConnectFunc has finished.
SEE ALSO
PfAddRtmToCurrent in "ProcSee Reference Manual"on page 172
PfWithdrawRtmFromCurrent in "ProcSee Reference Manual"on page 259
PfSetRtmCurrent in "ProcSee Reference Manual"on page 253
PfInitialize in "ProcSee Reference Manual"on page 217
248
ProcSee Reference Manual
Application Programmers Interface
PfSetDefinition (3c)
FUNCTION
PfSetDefinition - Set the definition of a function or attribute in the rtm
SYNOPSIS
int32 PfSetDefinition( idMask, changeMask, fullName, definition )
int32 idMask;
int32 changeMask;
char* fullName;
char* definition;
DESCRIPTION
PfSetDefinition is used to create and change variables, functions, and dialogues in the
symboltable in the rtm. The definition is a string containing a definition of a function or
a variable or a dialogue . The fullName tells the parent of what to create, or the fullName
of what to change. Constants for idMask are found in the file $PROCSEE_DIR/include/
IdCodes.h. Constants for changeMask are found in the file $ROCSEE_DIR/include/
P3Misc.h. The value of apiError is returned.
SEE ALSO
PfGetDefinition in "ProcSee Reference Manual"on page 204
ProcSee Reference Manual
249
Application Programmers Interface
PfSetFlushBehaviour (3c)
FUNCTION
PfSetFlushBehaviour - Modify the behaviour of PfFlush
SYNOPSIS
int32 PfSetFlushBehaviour( behavior )
int32 behaviour;
DESCRIPTION
PfSetFlushBehaviour modifies the behaviour of PfFlush. PfFlush by default performs
three tasks, it transfers variable values, updates displays and ticks the trendlogger. Updating
displays and ticking the trendlogger can be switch off and on by PfSetFlushBehaviour. behaviour is a bitmask containing a combination of the constants PfCTransferData, PfCUpdateDisplay and PfCTickTrendLogger. The value of apiError is returned.
EXAMPLES
/* Don’t tick trend logger */
PfSetFlushBehaviour( PfCTransferData | PfCUpdateDisplay );
/* Just transfer data */
PfSetFlushBehaviour( PfCTransferData );
SEE ALSO
PfFlush in "ProcSee Reference Manual"on page 194
250
ProcSee Reference Manual
Application Programmers Interface
PfSetProcessClass (3c)
FUNCTION
PfSetProcessClass - Set the process class to use when connecting to control
SYNOPSIS
int32 PfSetProcessClass( const char* processClass )
DESCRIPTION
PfSetProcessClass sets the process class to use when connecting to the SWBus control
program. This function should be called before PfInit, PfInitialize or SbInit is called the
first time.
apiError is returned.
EXAMPLE
int main()
{
SetProcessClass( "MyProcessClass" );
PfInitialize(...)
:
:
}
ProcSee Reference Manual
251
Application Programmers Interface
PfSetProcessHandler (3c)
FUNCTION
PfSetProcessHandler - Set up a function to be called periodically from PfMainLoop
SYNOPSIS
int32 PfSetProcessHandler( func, interval )
PfTPeriodicFunc func;
int32
interval;
typedef int32 (*PfTPeriodicFunc) ( int32 processHandlerId );
DESCRIPTION
PfSetProcessHandler makes func beeing called periodically at intervals specified by interval from PfMainLoop. interval is specified in milliseconds.
The value returned is the unique id of the process handler if apiError is OK,else PfBADINDEX is returned. This id is used as parameter for the callback function, and can be used to
differentiate the callbacks from each other, when more than one process handler is registered
using the same callback function. The callback function should return OK, otherwise it will
be suspended and not be called again.
EXAMPLE
int32 ph( int32 id )
{
printf( "ProcessHandler %d called\n",id );
:
return OK;
}
:
:
PfSetProcessHandler( ph, 1000); /* call ph every second */
SEE ALSO
PfRemoveProcessHandler in "ProcSee Reference Manual"on page 243
PfMainLoop in "ProcSee Reference Manual"on page 223
252
ProcSee Reference Manual
Application Programmers Interface
PfSetRtmCurrent (3c)
FUNCTION
PfSetRtmCurrent - make the set of current rtms consist of a single rtm
SYNOPSIS
int32 PfSetRtmCurrent( rtmId )
int32 rtmId;
DESCRIPTION
PfSetRtmCurrent makes the set of current rtms consist of the single rtm specified by
rtmId. The value returned is apiError. The set of current rtms is those rtms which the application program talks to at the moment.
Within the user supplied connection callback functions (refered to as usrConnectFunc and
usrDisconnectFunc at the man page for PfInitialize) the set of current rtms by default
consists of the single rtm to which connection is established or lost. Anywhere else, the
set of current rtms by default consists of all rtms for which the usrConnectFunc has finished.
WARNING
PSetRtmCurrent does not control distribution of data values by PfPut, PfSend or PfUpdateValuesId. In order to send data to a specific RTM, use PfSendToOne.
SEE ALSO
PfSetAllRtmsCurrent in "ProcSee Reference Manual"on page 248
PfAddRtmToCurrent in "ProcSee Reference Manual"on page 172
PfWithdrawRtmFromCurrent in "ProcSee Reference Manual"on page 259
PfInitialize in "ProcSee Reference Manual"on page 217
PfSentToOne
ProcSee Reference Manual
253
Application Programmers Interface
Pfsor (3c)
FUNCTION
Pfsor - Get data about an object
SYNOPSIS
int32 PfsorLength( data )
int32 PfsorIdMask( data )
int32 PfsorDefinitionLength( data )
char* PfsorFullName( data )
char* PfsorSignature( data )
char* PfsorExtra( data )
void* data;
DESCRIPTION
The Pfsor functions returns the contents of the data structure asked for in PfGetChildren
and the data structure returned by PfGetCurrentObject and PfGetChanges.
PfsorLength returns the total length of the data structure
PfsorIdMask returns the idMask of the object. Legal values for idMask can be found in
$PROCSEE_DIR/include/IdCodes.h.
PfsorDefinitionLength returns the length to use if the definition of this object is to be requested later.
PfsorFullName returns the fullName of the object.
PfsorSignature returns the signature of the object.
PfsorExtra returns extra information, like the new name in PfGetChanges with PfCObjectRenamed. If no extra data is present, it returns a NULL pointer.
SEE ALSO
PfGetChildren in "ProcSee Reference Manual"on page 200
PfGetCurrentObject in "ProcSee Reference Manual"on page 202
PfGetChanges in "ProcSee Reference Manual"on page 198
254
ProcSee Reference Manual
Application Programmers Interface
PfUpdateValuesId (3c)
FUNCTION
PfUpdateValuesId - Put variable values into the transfer buffer
SYNOPSIS
int32 PfUpdateValuesId( varIds, numIds )
int32 varIds[];
int32 numIds;
DESCRIPTION
PfUpdateValuesId puts the variable values for all variables specified by varIds into the
transfer buffer for later transfer by PfFlush. varIds is an array containing variable ids, numIds specifies the number of entries in the array. The value returned is apiError.
PfUpdateValuesId is identical to calling PfSend for each entry in varIds.
SEE ALSO
PfFlush in "ProcSee Reference Manual"on page 194
PfPut in "ProcSee Reference Manual"on page 231
PfSend in "ProcSee Reference Manual"on page 245
ProcSee Reference Manual
255
Application Programmers Interface
PfUseField (3c)
FUNCTION
PfUseField - Make it possible to update single fields or entries
SYNOPSIS
int32 PfUseField( id )
int32 id;
DESCRIPTION
PfUseField makes it possible to send just some fields of a record variable or some entries of
an array to the rtm. id is the field of a record variable as returned by PfId or an entry of an
array as returned by PfIndex. PfUseField stores the information in an internal buffer and relies on the user to call PfFlushUseField when PfUseField is called for all relevant fields. If
the internal buffer is full PfUseField will call PfFlushUseFields itself to empty the buffer.
The value returned is apiError.
If the application program contains rather large structs, where most fields contain static data,
PfUseField might be an appropriate function to use for updating the dynamic fields of the
struct variables. Using PfUseField will enable transferring just the relevant fields instead of
the entire struct when values change.
WARNING
Care should be taken when using PfUseField. It might happen that the performance of the
application suffers when using PfUseField, due to the fact that putting several small fields
into the transfer buffer can be inefficient compared to putting the entire variable. PfUsefield
will also increase the use of dynamic memory. However, if just a few field of a large record
variable need to be updated, PfUseField will improve performance.
SEE ALSO
PfFlushUseFields in "ProcSee Reference Manual"on page 197
PfId in "ProcSee Reference Manual"on page 215
PfIndex in "ProcSee Reference Manual"on page 216
PfPut in "ProcSee Reference Manual"on page 231
PfSend in "ProcSee Reference Manual"on page 245
PfFlush in "ProcSee Reference Manual"on page 194
256
ProcSee Reference Manual
Application Programmers Interface
PfWinInit, PfWinInitialize (3c)
FUNCTION
PfWinInitialize - connect a window application ( with windows mainloop ) to a rtm.
PfWinInit - initialize the API and make the application (with windows mainloop) ready
for rtms to connect.
SYNOPSIS
int32 PfWinInitialize( hInstance, appName, procName, rtmName, hostName,
cacheSize, master, usrWC, usrWDC )
HINSTANCE hInstance;
char* appName;
char* procName;
char* rtmName;
char* hostName;
int32 cacheSize;
int32 master;
void (*usrWC)();
void (*usrWDC)();
int32 PfWinInit( hInstance, procName, hostName, usrWC, usrWDC )
HINSTANCE hInstance;
char* procName;
char* hostName;
void (*usrWC)();
void (*usrWDC)();
DESCRIPTION
PfWinInitialize and PfWinInit should be used instead of PfInitialize and PfInit, respectively, if your application have to use the Windows mainloop. (Most Windows applications). The hInstance is the handle to current instance of the application. This is the first
argument to WinMain. If MFC is used call AfxGetInstanceHandle() to get the instance
handle. An explanation of the remaining parameters, see PfInitialize and PfInit.
EXAMPLES
int WINAPI WinMain( HINSTANCE hInstance, ...... );
{
.....
PfWinInitialize( hInstance, .... );
....
MSG msg;
while( GetMessage( &msg, 0, 0, 0 ) )
//windows main loop
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
ProcSee Reference Manual
257
Application Programmers Interface
PfWinInit, PfWinInitialize (3c)
SEE ALSO
PfInitialize in "ProcSee Reference Manual"on page 217
258
ProcSee Reference Manual
Application Programmers Interface
PfWithdrawRtmFromCurrent (3c)
FUNCTION
PfWithdrawRtmFromCurrent - Withdraw an rtm from the set of current rtms
SYNOPSIS
int32 PfWithdrawRtmFromCurrent( rtmId )
int32 rtmId;
DESCRIPTION
PfWithdrawRtmFromCurrent withdraws the rtm specified by rtmId from the set of
current rtms. The value returned is apiError.
Within the user supplied connection callback functions (refered to as usrConnectFunc and
usrDisconnectFunc at the man page for PfInitialize) the set of current rtms by default
consists of the single rtm to which connection is established or lost. Anywhere else, the
set of current rtms by default consists of all rtms for which the usrConnectFunc has finished.
The id of an rtm can be obtained by using PfId.
WARNING
PWithdrawRtmFromCurrent does not control distribution of data values by PfPut, PfSend or PfUpdateValuesId. In order to send data to a specific RTM, use PfSendToOne.
EXAMPLES
int32 rtmId = PfId( PfLocalProcess, "myRtmName" );
PfWithdrawRtmFromCurent( rtmId );
/* Do something that doesn’t involve rtm "myRtmName" */
:
PfAddRtmToCurrent( rtmId );
SEE ALSO
PfAddRtmToCurrent in "ProcSee Reference Manual"on page 172
PfSetAllRtmsCurrent in "ProcSee Reference Manual"on page 248
PfSetRtmCurrent in "ProcSee Reference Manual"on page 253
PfInitialize in "ProcSee Reference Manual"on page 217
PfId in "ProcSee Reference Manual"on page 215
ProcSee Reference Manual
259
Application Programmers Interface
PfXtInit, PfXtInitialize (3c)
FUNCTION
PfXtInitialize - connect an X application ( with XtMainloop ) to an rtm.
PfXtInit - initialize the API and make the application (with XtMainLoop) ready for rtms to
connect.
SYNOPSIS
int32 PfXtInitialize( appContext, appName, procName, rtmName, hostName,
cacheSize, master, usrWC, usrWDC )
XtAppContext appContext;
const char* appName;
const char* procName;
const char* rtmName;
const char* hostName;
int32 cacheSize;
int32 master;
void (*usrWC)();
void (*usrWDC)();
int32 PfXtInit( appContext, procName, hostName, usrWC, usrWDC )
XtAppContext appContext;
const char* procName;
const char* hostName;
void (*usrWC)();
void (*usrWDC)();
DESCRIPTION
PfXtInitialize and PfXtInit should be used instead of PfInitialize and PfInit, respectively,
if your application must use the XToolkit mainloop functions XtMainloop or XtAppMainloop. Motif applications should use PfXtInitialize or PfXtInit to initialize the API. The first
parameter appContext is the application context. Use the XtAppInitialize to get the context.
An explanation of the remaining parameters see PfInitialize and PfInit.
EXAMPLES
Widget tlw;
tlw = XtAppInitialize( &appContext, ... );
...
PfXtInitialize( appContext, ... );
...
XtAppMainLoop( appContext );
SEE ALSO
PfInitialize in "ProcSee Reference Manual"on page 217
260
ProcSee Reference Manual
Application Programmers Interface
PWinApp (3c)
NAME
PWinApp - class for integration of ProcSee API with Microsoft Foundation Classes
(MFC).
SYNOPSIS
#include <p3MFC.h>
class PWinApp : public CWinApp
{
...
protected: // Callback methods:
virtual void OnConnect(
int32 status, const char* rtmName );
virtual void OnDisconnect(
int32 status, const char* rtmName );
virtual void OnDisconnectCleanup( int32 status, const char* rtmName );
virtual void OnFatalError( const char* errorMessage );
public: // Call these if you override them:
virtual BOOL PreTranslateMessage( MSG* pMsg );
virtual BOOL OnIdle( LONG lCount );
public: // The constructor:
PWinApp( LPCTSTR lpszAppName = NULL );
public: // Methods you could call:
BOOL InitializeRTM( const char* appName, const char* processName,
const char* rtmName, const char* hostName = 0,
INT cacheSize = 0, BOOL master = true,
BOOL useSbLoop = true );
BOOL InitPf( const char* processName, const char* hostName = 0,
BOOL useSbLoop = true );
};
DESCRIPTION
This class makes it easier to integrate ProcSee with MFC applications.
When you have created an MFC application, you have an application class that inherits
from CWinApp. By replacing this inheritance with PWinApp, the needed extras for communication with the RTM is handled well.
The PWinApp contains some callback methods that can be implemented, to get information about connection status etc. Normally the OnConnect method is implemented, so you
can load .pdat files and export windows when the connection is up.
There are some MFC methods used by the class, PreTranslateMessage, and OnIdle. Remember to call these if you override them in your application class.
ProcSee Reference Manual
261
Application Programmers Interface
PWinApp (3c)
The constructor can have the SWBus application class name as parameter.
The InitializeRTM() method should be called to connect to a given RTM. This is normally
done from the OnInitDialog() or OnCreate() or InitInstance(), but can be called from other
places as well.
The InitPf() method should be called if it is the RTM that is going to initiate the connection
to your MFC application instead of your MFC application initiating the connection to the
RTM. This is normally done from the OnInitDialog() or OnCreate() or InitInstance().
EXAMPLES
...
SEE ALSO
PfWinInit and PfWinInitialize. PWindow and PScrolledWindow.
262
ProcSee Reference Manual
Application Programmers Interface
PWindow, PScrolledWindow (3c)
NAME
PWindow, PScrolledWindow - classes for integration with Microsoft Foundation Classes (MFC).
SYNOPSIS
#include <p3MFC.h>
class PWnd : public CWnd
{
...
public:
/* Special ProcSee functions.
*/
BOOL ExportWindow(const CString& expWndName, int32 mask = WOpAll);
BOOL ReleaseWindow();
public:
/* ProcSee window op functions.
*/
virtual void WinOpMove( WOpMoveStruct& move ) =0;
virtual void WinOpResize( WOpResizeStruct& resize ) =0;
virtual void WinOpZoomPan( WOpZoomPanStruct& zoomPan ) =0;
virtual void WinOpColour( WOpColorStruct& colour );
virtual void WinOpSelect( WOpSelectStruct& select );
virtual void WinOpMap();
virtual void WinOpUnmap();
virtual void WinOpIconify();
virtual void WinOpClose();
virtual void WinOpRaise();
virtual void WinOpLower();
};
/*
* Definition of a ProcSee window.
*/
class PWindow : public PWnd
{
...
public:
/* Interface
*/
PWindow();
~PWindow();
virtual BOOL Create( LPCTSTR lpszWindowName,
const RECT& winRect,
DWORD dwStyle, DWORD dwExStyle,
CWnd* pParentWindow, UINT nId,
CCreateContext* pContext );
};
ProcSee Reference Manual
263
Application Programmers Interface
PWindow, PScrolledWindow (3c)
/*
* Definition of a ProcSee window with scrollbars.
*/
class PScrolledWindow : public PWnd
{
...
public:
PScrolledWindow();
~PScrolledWindow();
virtual BOOL Create( LPCTSTR lpszWindowName,
DWORD dwStyle, DWORD dwExStyle,
const RECT& winRect,
CWnd* pParentWindow, UINT nId,
CCreateContext* pContext,
float scrollPage = 100.,
float scrollLine = 0. );
};
DESCRIPTION
The PWindow class is a MFC window for displaying ProcSee exported windows in an MFC
application. The PScrolledWindow class also handles scrollbars and scrolling of this exported window. They are used like other MFC windows. To display an exported window in this
window, you have to call the ExportWindow method, after the connection to the RTM is established.
EXAMPLES
...
SEE ALSO
PfExportWindow. PWinApp.
264
ProcSee Reference Manual
Application Programmers Interface
apiExamples (3c)
API EXAMPLE
Makefile
# Makefile for apiExample
CC = cc -g
IFLAGS = -I$(PROCSEE_DIR)/include
LFLAGS = -L$(PROCSEE_DIR)/lib/$(ARCH)
# Add the following line if $(ARCH) is sunArch
#ARCHLIBS = -lnsl -lsocket
P3LIBS = -lProcSeeApiC $(ARCHLIBS)
all : apiExample apiExample.pctx apiExamplePicture.ppic
apiExample : apiExample.o
$(CC) apiExample.o $(LFLAGS) $(P3LIBS) -o apiExample
apiExample.o : apiExample.c
$(CC) -c $(IFLAGS) apiExample.c
apiExample.pctx : apiExample.Tdoc
pcc apiExample.Tdoc
apiExamplePicture.ppic : apiExamplePicture.Tdoc
pcc apiExamplePicture.Tdoc
Database Definition File
/* File Records.dat */
struct MyStruct
{
char theString[6];
float theFloat;
int32 theInt;
};
Program apiExample.c
/* File apiEksample.c */
/* Executable is run by typing apiEksample -r rtmName1 -r rtmName2 ... */
#include <api/api.h>
#include <stdio.h>
static char applName[PfVARLENGTH] = "apiExample";
/* Definition of structs matching the defintions from Records.pdat */
typedef struct
{
char theString[6];
float theFloat;
ProcSee Reference Manual
265
Application Programmers Interface
apiExamples (3c)
int32 theInt;
} MyStruct;
/* C variables updated by processHandler and sent to RTM */
#define FloatArraySize 10
int32 myInt;
float myFloatArray[FloatArraySize];
double myDouble;
char myString[6];
MyStruct myStruct;
/* C variables set when receiving remote function calls from an RTM */
int intValueStep = 1;
float floatValueStep = 1.0;
double doubleValueStep = 1.0;
/* ProcSee variable ids */
#define MaxNumVariables 100
int32 myIntId, myFloatArrayId, myDoubleId, myStringId, myStructId;
int32 myStructTheFloatId, myStructTheIntId;
int32 varIds[MaxNumVariables];
int32 numVarIds;
int32 processHandlerId = PfBADINDEX;
/* Function prototypes */
void initVariables();
void whenRtmConnects();
void whenRtmDisconnects();
void quit();
int32 KbdHandler();
int32 processHandler();
int32 createRecords();
int32 createVariables();
int32 registerFunctions();
int32 stopApplication();
int32 incValueSteps();
int main( argc, argv )
int argc;
char* argv[];
{
extern char* optarg;
char* rtmNames[10];
int numRtmNames = 0;
int i;
/* Initialize C variable values */
initVariables();
/* Get the name of the RTMs to connect to */
while( getopt( argc, argv, "r:") != EOF )
rtmNames[numRtmNames++] = strdup(optarg);
266
ProcSee Reference Manual
Application Programmers Interface
apiExamples (3c)
if ( numRtmNames == 0 )
rtmNames[numRtmNames++] = strdup("rtm");
/* Call PfInitialize for each RTM */
for ( i = 0; i < numRtmNames; i++ )
{
PfInitialize( applName, NULL, rtmNames[i], NULL, 0, 0,
whenRtmConnects, whenRtmDisconnects );
if ( apiError != OK )
printf( "[%s]: PfInitialize failed for RTM %s\n",
applName,
rtmNames[i] );
}
/* Create a keyboard handler to allow terminal input */
PfAddInput( PfCKeyboardFd, PfCReadCondition, KbdHandler );
if ( apiError != OK )
printf( "[%s]: PfAddInput failed (%s)\n",
applName, PfGetSystemError(apiError) );
/* Enter the main loop */
PfMainLoop();
/* Close connection to all RTMs */
PfClose();
return(0);
}
/* Function to initialize variable values */
void initVariables()
{
int i;
myInt = 0;
for ( i = 0; i < FloatArraySize; i++ )
myFloatArray[i] = 0.5;
myDouble = 0.5;
strcpy( myString, "abcde" );
strcpy( myStruct.theString, "ABCDE" );
myStruct.theFloat = 0.5;
myStruct.theInt = 0;
}
/* Function called when an RTM stops or crashes */
void whenRtmDisconnects( status, rtmName )
int32 status;
char* rtmName;
{
printf( "[%s]: Lost contact with RTM %s\n", applName, rtmName );
}
ProcSee Reference Manual
267
Application Programmers Interface
apiExamples (3c)
/* Function called when connection to an RTM is established */
void whenRtmConnects( status, rtmName )
int32 status;
char* rtmName;
{
printf( "[%s]: Established contact with RTM %s\n", applName, rtmName );
/* Create records, variables and funcitons in RTM rtmName */
if ( createRecords() != OK )
quit();
if ( createVariables() != OK )
quit();
if ( registerFunctions() != OK )
quit();
/* Ticking trendlogger is not needed in this application */
PfSetFlushBehaviour( PfCTransferData|PfCUpdateDisplay );
/* Transfer initial variable values and update displays */
PfFlush();
/* Create processHandler to be called every 2 seconds
if not already created */
if ( processHandlerId == PfBADINDEX )
{
processHandlerId = PfSetProcessHandler( processHandler, 2000 );
if ( apiError != OK )
printf( "[%s]: PfSetProcessHandler failed (%s)\n",
applName, PfGetSystemError(apiError) );
}
}
/* Function to terminate the main loop */
void quit()
{
PfEndLoop();
}
/* Function called from PfMainLoop whenever terminal input is available */
int32 KbdHandler( handlerId )
int32 handlerId;
{
char c;
scanf("%c",&c);
/* Terminate program if user types q<return> or Q<return> */
if ( c == 'q' || c == 'Q' )
quit();
return OK;
}
/* Function called periodically from PfMainLoop */
268
ProcSee Reference Manual
Application Programmers Interface
apiExamples (3c)
int32 processHandler( pHandlerId )
int32 pHandlerId;
{
int i;
char firstChar;
static bool even = True;
/* Update variable values */
myInt += intValueStep;
for ( i = 0; i < FloatArraySize; i++ )
myFloatArray[i] += floatValueStep;
myDouble += doubleValueStep;
firstChar = myString[0];
for ( i = 0; i < strlen(myString)-1; i++ )
myString[i] = myString[i+1];
myString[strlen(myString)-1] = firstChar;
even = !even;
if ( even )
{
/* The struct is just updated every other time this function is called */
myStruct.theFloat += floatValueStep;
myStruct.theInt += intValueStep;
if ( PfIsConnected() )
{
/* Put the updated field values into the transferbuffer */
/* A better aproach with such a small struct
would be to call PfSend( myStructId ) */
PfSend( myStructTheFloatId );
PfSend( myStructTheIntId );
}
}
if ( PfIsConnected() )
{
/* Put the variable values into the transfer buffer... */
PfUpdateValuesId( varIds, numVarIds );
/* ... and send them to the RTMs. Update displays as well */
PfFlush();
}
return OK;
}
int32 createRecords()
{
int32 numErrors;
char* fileName = "Records.pdat";
/* PfReadScript is a simple and safe function for creating records */
/* Record definitions are found in the file "Record.pdat", and the
application resource file (.Tdoc) includes a
database "Records.pdat"; statement */
numErrors = PfReadScript( fileName );
if ( apiError != OK )
ProcSee Reference Manual
269
Application Programmers Interface
apiExamples (3c)
printf( "[%s]: PfReadScript reported %d errors for %s\n",
numErrors, fileName );
return apiError;
}
int32 createVariables()
{
numVarIds = 0;
/* Create variables locally int the api and in the RTM
Store variable ids into an array used when calling PfUpdateValuesId */
myIntId = PfCreateVar( "myInt", PfCInt, NULL, 0, &myInt );
if ( apiError == OK )
varIds[numVarIds++] = myIntId;
myFloatArrayId = PfCreateArray( "myFloatArray", PfCFloat, FloatArraySize,
NULL, 0, myFloatArray );
if ( apiError == OK )
varIds[numVarIds++] = myFloatArrayId;
myDoubleId = PfCreateVar( "myDouble", PfCDouble, NULL, 0, &myDouble );
if ( apiError == OK )
varIds[numVarIds++] = myDoubleId;
myStringId = PfCreateArray( "myString", PfCUnsignedChar, 6, NULL,
0, myString
);
if ( apiError == OK )
varIds[numVarIds++] = myStringId;
myStructId = PfCreateVar( "myStruct", PfCRecord, "MyStruct", 0, &myStruct );
if ( apiError == OK )
varIds[numVarIds++] = myStructId;
PfFlushCreateVar();
if ( apiError == OK )
printf( "[%s]: %d variables sucessfully created\n",
applName, numVarIds );
/* Get the id of some fields of the struct variable */
/* Call PfUseField and PfFlushUseFields to be able
to update these fields individually.
With such a small struct one would be better off avoid
using PfUseField and transfer the entire struct instead */
myStructTheFloatId = PfId( myStructId, "theFloat" );
if ( apiError == OK )
PfUseField( myStructTheFloatId );
myStructTheIntId = PfId( myStructId, "theInt" );
if ( apiError == OK )
PfUseField( myStructTheIntId );
PfFlushUseFields();
if ( apiError != OK )
printf( "[%s]: PfFlushUseFields failed (%s)\n",
applName, PfGetSystemError(apiError) );
return apiError;
}
270
ProcSee Reference Manual
Application Programmers Interface
apiExamples (3c)
int32 registerFunctions()
{
PfTArg formals[3];
/* Register a function for terminating the program */
PfRegisterFunction( "stopApplication", stopApplication, 0, NULL );
if ( apiError != OK )
printf( "[%s]: PfRegisterFunction failed (%s)\n",
applName, PfGetSystemError(apiError) );
/*Register function for receiving value steps to be used in processHandler*/
formals[0].dtype = PfCInt;
formals[0].size = 1;
formals[1].dtype = PfCFloat;
formals[1].size = 1;
formals[2].dtype = PfCDouble;
formals[2].size = 1;
PfRegisterFunction( "incValueSteps", incValueSteps, 3, formals );
if ( apiError != OK )
printf( "[%s]: PfRegisterFunction failed (%s)\n",
applName, PfGetSystemError(apiError) );
return OK;
}
/* Function to be called from an RTM */
int32 stopApplication( numArgs, args )
int32 numArgs;
void* args;
{
quit();
return OK;
}
/* Function to be called from an RTM */
int32 incValueSteps( numArgs, args )
int32 numArgs;
void* args;
{
void* data;
int32 type, size;
if ( numArgs != 3 )
return !OK;
/* Get data for first argument */
data = PfGetFuncArg( &args, &type, &size );
if ( type != PfCInt || size != 1 )
return !OK;
intValueStep += *(int32*)data;
/* Get data for second argument */
data = PfGetFuncArg( &args, &type, &size );
if ( type != PfCFloat || size != 1 )
ProcSee Reference Manual
271
Application Programmers Interface
apiExamples (3c)
return !OK;
floatValueStep += *(float*)data;
/* Get data for third argument */
data = PfGetFuncArg( &args, &type, &size );
if ( type != PfCDouble || size != 1 )
return !OK;
doubleValueStep += *(double*)data;
return OK;
}
272
ProcSee Reference Manual
Message Output Formatter
Message Output Formatter (3c)
MODULE
Message Output Formatter
DESCRIPTION
The message output formatter functionality provides a set of functions to control the format and type of messages to print, and user defined call-back functions to be called when
the Software Bus, or the ProcSee API prints messages. The output to the callback functions can be enabled/disabled for each combination of context and category, with some
reasonable defaults. Using this functionality, messages can be tailor-made to the task they
are used for, for instance in GUI applications where the error and warning messages are
likely to be added to an output list where the user or system administrator can view the
output.
FUNCTIONS
A list of the available Message Output Formatter functions, follows:
Message initialization function: MfInitialize
Message function: MfMessage.
Message output selection functions: MfSetOutputs, MfGetOutputs.
Message category functions: MfSetCategoryName, MfGetCategoryName, MfSetCategoryDefaultOutputs, MfGetCategoryDefaultOutputs.
Message format functions: MfSetFormat, MfGetFormat, MfSetCategoryFormat, MfGetCategoryFormat, MfSetOutputFormat, MfGetOutputFormat, MfSetDefaultFormat,
MfGetDefaultFormat.
Message output functions: MfRegisterOutput, MfSetOutputFunc, MfGetOutputFunc,
MfGetNumOutputs, MfGetOutput, MfSetDefaultOutputFunc, MfGetDefaultOutputFunc.
Message module functions: MfRegisterModule, MfSetModuleName, MfGetModuleName, MfSetModuleDescription, MfGetModuleDescription, MfGetNumModules, MfGetModule.
Message context functions: MfRegisterContext, MfSetContextName, MfGetContextName, MfSetContextDescription, MfGetContextDescription, MfGetNumContexts, MfGetContext, MfGetContextModule.
ProcSee Reference Manual
273
Message Output Formatter
MfInitialize (3c)
FUNCTION
MfInitialize - initializes the message output formatter library.
SYNOPSIS
void MfInitialize( MfTOutputFunc outputFunc, const char* format )
DESCRIPTION
MfInitialize initializes the message output formatter functionality and provides a call-back
function and a message format used as the default. This function must be called prior to any
of the other message formatter functions to initialize the internal structures and set up the default call-back function.
SEE ALSO
MfSetDefaultFormat in "ProcSee Reference Manual" on page 279
MfSetDefaultOutputFunc in "ProcSee Reference Manual" on page 281
274
ProcSee Reference Manual
Message Output Formatter
MfMessage (3c)
FUNCTION
MfMessage - function used in code to output a message.
SYNOPSIS
void MfMessage( MfTCategory category, MfTContext context, const char* file, int line,
const char* obj, const char* func,
const char* msg, ... )
DESCRIPTION
The MfMessage function is used by the API and SWBus code to output messages, and
can be used in user programs to output messages. The msg argument is creating a message
by formatting the msg and the following arguments like the printf function. The message
together with the other arguments, like category, context, etc., are used by the Mf library
to select if the message should be output, and how the output is formatted on the different
output functions that can be registered. The selection of what messages to output is done
by the function MfSetOutputs.
EXAMPLE
SEE ALSO
MfSetOutputs in "ProcSee Reference Manual" on page 276
ProcSee Reference Manual
275
Message Output Formatter
Message output selection (3c)
FUNCTION
Message output selection functions - enables/disables message output.
SYNOPSIS
MfTBool MfSetOutputs( MfTCategory category, MfTContext context, MfTOutputBits outputs )
MfTOutputBits MfGetOutputs( MfTCategory category, MfTContext context )
DESCRIPTION
For each category - context combination, the different output functions can be enabled/disabled. When a context is created, it gets a default value for what outputs that are enabled.
The MfSetOutputs function sets what outputs that are enabled and disabled. The outputs argument is 0 to disable all, and a value that is the result of or-ing the different output handles
to tell what outputs that should be enabled. This argument can contain bits set for nonexisting
outputs without any problem, and the default for all outputs enabled is the value
0xFFFFFFFF, i.e. all bits on.
The MfGetOutputs function gets the currently enabled outputs for the given category - context combination.
EXAMPLE
SEE ALSO
MfSetCategoryDefaultOutputs in "ProcSee Reference Manual" on page 277
276
ProcSee Reference Manual
Message Output Formatter
Message categories (3c)
FUNCTION
Message categories - message output format categories, like error, warning, information,
etc.
SYNOPSIS
MfTBool MfSetCategoryName( MfTCategory category, char* name )
const char* MfGetCategoryName( MfTCategory category )
MfTBool MfSetCategoryDefaultOutputs( MfTCategory category, MfTOutputBits outputs )
MfTOutputBits MfGetCategoryDefaultOutputs( MfTCategory category )
DESCRIPTION
A set of predefined message categories are supported by the Mf library, i.e. categories like
warning, error, debug, flow, information, etc. Next follows a table of supported message
categories. Notice that not all of these message categories are used by the Software Bus or
the ProcSee API, but can be utilised in the application by calling the MfMessage function.
Table 1: Message Categories
Message Categories
Category default text
Description
MfCCritical
Critical
Used for critical errors.
MfCError
Error
Used for error messages.
MfCWarning
Warning
Used for warning messages.
MfCInfo
Info
Used for information messages.
MfCDebug1
Debug1
Used for important debug messages.
MfCDebug2
Debug2
Used for debug messages.
MfCDebug3
Debug3
Used for debug messages.
MfCDebug4
Debug4
Used for debug messages.
MfCDebug5
Debug5
Used for very frequent debug messages, like
inside of loops.
MfCFlow
Flow
Used for execution flow messages (reduces
performance dramatically).
Whether the message output callback functions are called, depends on whether the output
is enabled for the given message category and context. This enabling can be changed at
any time during the execution of the application, using the MfSetOutputs function. By default critical, error, warning and info categories are enabled. The debug1 message category is by default enabled in debug-builds. The other message categories (debug2-debug5,
flow) are by default not enabled.
ProcSee Reference Manual
277
Message Output Formatter
Message categories (3c)
The MfSetCategoryName function can be used to change the output text for a category, e.g.
when one wants to use another language for the categories. The default text in the table above
is used by default. The MfGetCategoryName function can be used to retrieve the current
text set for a given category.
The MfSetCategoryDefaultOutputs function is used to change the default outputs that are
enabled for a given category. This default is copied to the context when a context is registered. It is the value in the context that determines if a category is output or not. The MfGetCategoryDefaultOutputs function is used to get the current outputs that are set in this
default value.
SEE ALSO
MfMessage in "ProcSee Reference Manual" on page 275
MfSetOutputs in "ProcSee Reference Manual" on page 276
278
ProcSee Reference Manual
Message Output Formatter
Message format (3c)
FUNCTION
Message format - specification of the message output format
SYNOPSIS
MfTBool MfSetFormat( MfTCategory category, MfTOutput output, const char* format )
const char* MfGetFormat( MfTCategory category, MfTOutput output )
MfTBool MfSetCategoryFormat( MfTCategory category, const char* format )
const char* MfGetCategoryFormat( MfTCategory category )
MfTBool MfSetOutputFormat( MfTOutput output, const char* format )
const char* MfGetOutputFormat( MfTOutput output )
MfTBool MfSetDefaultFormat( const char* format )
const char* MfGetDefaultFormat()
DESCRIPTION
A message format can be provided with the category and output, with the category, with
the output, or globally. Normally one provides a format for each output, so that output to
file can have one format and output to a list in the GUI can have another format. If the
format is not provided for the output, the default (global) format is used. In addition, the
format can be provided for a given category, and if it is this is used instead of the format
given for the output. The most specific configuration can set a format for a given category
and output combination, and if this is given, it is used instead of any of the other formats.
If no format is found (i.e. it is set to NULL), a default message format will be used, which
is "{TIME:T} {CAT} {MSG}", i.e. time, category and message.
The message format is a compound string composed of pure text and directives. A directive in this context is a keyword surrounded by curly braces. To output a curly brace, it is
written twice. The directives can be used to output the time, the category, the message,
and other elements, as specified in the table below.
Table 2: Directives
Directive
Description
{{
the character ’{’ is copied to the output buffer.
}}
the character ’}’ is copied to the output buffer.
{TIME:A}
{TIME:z}
the output is the result of the strftime function with the
character after : used as the format. E.g. {TIME:T} is
replaced with the result from strftime with the format
"%T", which results in the time as HH:MM:SS.
{CAT}
the category, e.g. Error.
{MSG}
the message to output.
{OBJ}
the name of the object issuing the message.
{FUNC}
the name of the function issuing the message.
ProcSee Reference Manual
279
Message Output Formatter
Message format (3c)
Table 2: Directives
Directive
Description
{FILE}
the name of the file where the message was issued.
{LINE}
the line number in the file where the message was issued.
{PROG}
the program name if set, or an empty string.
{SERVICE}
the service name if set, or an empty string.
{ARCH}
the architecture, for instance winArch, linuxX86Arch,
etc.
{HOST}
the host name.
{PID}
the process identifier.
{MOD}
the module.
{CTX}
the context.
{DESC:MOD}
the description of the module.
{DESC:CTX}
the description of the context.
The MfSetFormat function sets the format for a given category and output combination. The
MfGetFormat retrieves the current format for the given category and output combination.
The MfSetCategoryFormat function sets the format for a given category. The MfGetCategoryFormat function gets the format for the category.
The MfSetOutputFormat function sets the format for a given output. The MfGetOutputFormat function gets the format for a given output.
The MfSetDefaultFormat function sets the format to use if no format is specified with the
other MfSet...Format functions. This is the same as the format set with MfInitialize. The MfGetDefaultFormat function gets this format.
The MfSet... functions return MfCFalse if the format contains illegal directives, meaning that
the message format will not be stored for the specified message category or output in the
message output formatter's internal structures. MfCTrue is returned if the format was successfully parsed and stored. Passing a null pointer in the format argument to these functions
makes the format unset for this category or output.
SEE ALSO
MfInitialize in "ProcSee Reference Manual" on page 274
MfMessage in "ProcSee Reference Manual" on page 275
280
ProcSee Reference Manual
Message Output Formatter
Message output (3c)
FUNCTION
Message output - the callback functions that are called when a message is going to be
output.
SYNOPSIS
void (*MfTOutputFunc)( MfTCategory category, MfTContext context, MfTOutput output,
const char* message )
MfTOutput MfRegisterOutput( MfTOutputFunc outputFunc, const char* format )
MfTBool MfSetOutputFunc( MfTOutput output, MfTOutputFunc outputFunc )
MfTOutputFunc MfGetOutputFunc( MfTOutput output )
unsigned int MfGetNumOutputs()
MfTOutput MfGetOutput( unsigned int ix )
void MfSetDefaultOutputFunc( MfTOutputFunc outputFunc )
MfTOutputFunc MfGetDefaultOutputFunc()
DESCRIPTION
MfTOutputFunc defines the type of the message callback function used by the library.
This function is called when messages are issued in the Software Bus, the ProcSee API or
when invoking the function MfMessage(...). The arguments category, context, and output
is information about the current message, that may have been incorporated into the message via the format used. The argument message, is the message to output. Typically the
output function appends the message to a log-file, or outputs it to a message window.
More than one output function can be registered, and for each message, all output functions that are enabled for the given category will be called.
The MfRegisterOutput is used to register a new output callback function. It returns a
handle to the output. The arguments are a callback function and a format. If the call-back
function is NULL, the call-back registered with the MfInitialize function will be used instead. If the format is NULL, the format registered with the MfInitialize function will be
used. If no outputs are registered, the call-back registered with the MfInitialize will be
used.
The MfSetOutputFunc function is provided to change the call-back function set with the
specified output. The MfGetOutputFunc gets the currently registered call-back function.
The MfGetNumOutputs returns the number of outputs registered. The MfGetOutput
function returns an output handle from an input in the range 0 to number of outputs - 1.
The MfSetDefaultOutputFunc function sets the default function to use. This is the same
as the function set with MfInitialize. The MfGetDefaultOutputFunc functions gets this
function.
SEE ALSO
MfInitialize in "ProcSee Reference Manual" on page 274
MfMessage in "ProcSee Reference Manual" on page 275
ProcSee Reference Manual
281
Message Output Formatter
Message modules (3c)
FUNCTION
Message modules - message modules.
SYNOPSIS
MfTModule MfRegisterModule( const char* moduleName, const char* description )
MfTBool MfSetModuleName( MfTModule module, const char* moduleName )
const char* MfGetModuleName( MfTModule module )
MfTBool MfSetModuleDescription( MfTModule module, const char* description )
const char* MfGetModuleDescription( MfTModule module )
unsigned int MfGetNumModules()
MfTModule MfGetModule( unsigned int ix )
DESCRIPTION
A module has a name and a description. All messages are defined to be in a specific context,
and every context is in a specific module. The name and description of the module can be
output in the messages.
The function MfRegisterModule registers a new module, and returns a handle to the module.
The function MfSetModuleName can be used to change the name of a module. The function
MfGetModuleName returns the name of the given module.
The function MfSetModuleDescription can be used to change the description of the module. The function MfGetModuleDescription returns the description of the given module.
The MfGetNumModules function returns the number of modules. The MfGetModule
function returns a module handle from the input index in the range 0 to number of modules
- 1.
EXAMPLE
SEE ALSO
MfRegisterContext in "ProcSee Reference Manual" on page 283
282
ProcSee Reference Manual
Message Output Formatter
Message contexts (3c)
FUNCTION
Message contexts - message contexts.
SYNOPSIS
MfTContext MfRegisterContext( MfTModule module, const char* contextName, const char* description );
MfTBool MfSetContextName( MfTContext context, const char* contextName );
const char* MfGetContextName( MfTContext context );
MfTBool MfSetContextDescription( MfTContext context, const char* description );
const char* MfGetContextDescription( MfTContext context );
MfTModule MfGetContextModule( MfTContext context );
unsigned int MfGetNumContexts();
MfTContext MfGetContext( unsigned int ix );
DESCRIPTION
The MfRegisterContext function creates a new context in the given module, and gives it
a name and a description.
The MfSetContextName function changes the name of the context. The MfGetContextName function gets the name of the context.
The MfSetContextDescription function changes the description of the context. The MfGetContextDescription function gets the description of the context.
The MfGetContextModule function returns the module that the given context is in.
The MfGetNumContexts function returns the number of contexts. The MfGetContext
function returns the context from the ix argument in the range 0 to number of contexts - 1.
EXAMPLE
SEE ALSO
MfMessage in "ProcSee Reference Manual" on page 275
ProcSee Reference Manual
283
Message Output Formatter
284
Message contexts (3c)
ProcSee Reference Manual
Application Programmers Interface
List of Functions
List of Functions
MfInitialize . . . . . . . . . . . . . . . . . . . . . . . . 274
MfTOutputFunc . . . . . . . . . . . . . . . . . . . . 281
PfAddField . . . . . . . . . . . . . . . . . . . . . . . . 170
PfAddInput . . . . . . . . . . . . . . . . . . . . . . . . 171
PfAddRtmToCurrent . . . . . . . . . . . . . . . . 172
PfAddVarAction. . . . . . . . . . . . . . . . . . . . 173
PfBeginRecord . . . . . . . . . . . . . . . . . . . . . 174
PfClearEvents . . . . . . . . . . . . . . . . . . . . . . 175
PfClose . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
PfCreateArray. . . . . . . . . . . . . . . . . . . . . . 177
PfCreateVar . . . . . . . . . . . . . . . . . . . . . . . 178
PfData . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
PfDeleteRecord. . . . . . . . . . . . . . . . . . . . . 180
PfDeleteVar . . . . . . . . . . . . . . . . . . . . . . . 181
PfDeleteVarId. . . . . . . . . . . . . . . . . . . . . . 181
PfDiagnosticsSubscribe . . . . . . . . . . . . . . 182
PfDiagnosticsSubscribeEx . . . . . . . . . . . . 182
PfDisableInitialUpdate . . . . . . . . . . . . . . . 183
PfDispatch . . . . . . . . . . . . . . . . . . . . . . . . 184
PfEditLogBuffer . . . . . . . . . . . . . . . . . . . . 185
PfEnableInitialUpdate . . . . . . . . . . . . . . . 183
PfEndLoop . . . . . . . . . . . . . . . . . . . . . . . . 186
PfEndRecord. . . . . . . . . . . . . . . . . . . . . . . 187
PfEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
PfEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
PfEvents . . . . . . . . . . . . . . . . . . . . . . . . . . 188
PfEvents . . . . . . . . . . . . . . . . . . . . . . . . . . 188
PfExecute . . . . . . . . . . . . . . . . . . . . . . . . . 191
PfExecuteAsync . . . . . . . . . . . . . . . . . . . . 191
PfExecuteAsync . . . . . . . . . . . . . . . . . . . . 191
PfExportWindow . . . . . . . . . . . . . . . . . . . 192
PfFlush . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
PfFlushCreateVar . . . . . . . . . . . . . . . . . . . 195
PfFlushEditLogBuffer . . . . . . . . . . . . . . . 196
PfFlushUseFields . . . . . . . . . . . . . . . . . . . 197
PfGetChanges . . . . . . . . . . . . . . . . . . . . . . 198
PfGetChildren. . . . . . . . . . . . . . . . . . . . . . 200
PfGetCurrentObject . . . . . . . . . . . . . . . . . 202
PfGetDefinedVars . . . . . . . . . . . . . . . . . . 203
PfGetDefinition . . . . . . . . . . . . . . . . . . . . 204
PfGetDiagnosticsMessage . . . . . . . . . . . . 205
PfGetFDSet. . . . . . . . . . . . . . . . . . . . . . . . 206
PfGetFieldId . . . . . . . . . . . . . . . . . . . . . . . 207
PfGetFuncArg. . . . . . . . . . . . . . . . . . . . . . 208
PfGetNumAllRtms . . . . . . . . . . . . . . . . . . 209
PfGetNumCurrentRtms . . . . . . . . . . . . . .
PfGetSystemError . . . . . . . . . . . . . . . . . .
PfGetTypeId . . . . . . . . . . . . . . . . . . . . . .
PfGetVarId. . . . . . . . . . . . . . . . . . . . . . . .
PfGetWindowChanges . . . . . . . . . . . . . .
PfId . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PfIndex. . . . . . . . . . . . . . . . . . . . . . . . . . .
PfInit . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PfInitialize . . . . . . . . . . . . . . . . . . . . . . . .
PfIsConnected . . . . . . . . . . . . . . . . . . . . .
PfMainLoop . . . . . . . . . . . . . . . . . . . . . . .
PfName . . . . . . . . . . . . . . . . . . . . . . . . . .
PfNextVarId. . . . . . . . . . . . . . . . . . . . . . .
PfNonBlocking . . . . . . . . . . . . . . . . . . . .
PfPeriodic . . . . . . . . . . . . . . . . . . . . . . . .
PfPrintAllRecords . . . . . . . . . . . . . . . . . .
PfPrintAllVars . . . . . . . . . . . . . . . . . . . . .
PfPrintSystemError . . . . . . . . . . . . . . . . .
PfPut . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PfQuoteString . . . . . . . . . . . . . . . . . . . . .
PfReadScript . . . . . . . . . . . . . . . . . . . . . .
PfReceiveRtmStringUpdates . . . . . . . . . .
PfReceiveRtmUpdates . . . . . . . . . . . . . . .
PfRegisterFunction . . . . . . . . . . . . . . . . .
PfRegisterFunctionEx . . . . . . . . . . . . . . .
PfReleaseWindow . . . . . . . . . . . . . . . . . .
PfRemoveAllInputs . . . . . . . . . . . . . . . . .
PfRemoveInput . . . . . . . . . . . . . . . . . . . .
PfRemoveProcessHandler . . . . . . . . . . . .
PfRemoveVarAction . . . . . . . . . . . . . . . .
PfSend . . . . . . . . . . . . . . . . . . . . . . . . . . .
PfSendApiStringUpdates . . . . . . . . . . . . .
PfSendToOne. . . . . . . . . . . . . . . . . . . . . .
PfSetAllRtmsCurrent . . . . . . . . . . . . . . . .
PfSetDefinition . . . . . . . . . . . . . . . . . . . .
PfSetFlushBehaviour . . . . . . . . . . . . . . . .
PfSetMaxQuotedStrings . . . . . . . . . . . . .
PfSetProcessClass . . . . . . . . . . . . . . . . . .
PfSetProcessHandler . . . . . . . . . . . . . . . .
PfSetRtmCurrent . . . . . . . . . . . . . . . . . . .
PfsorDefinitionLength . . . . . . . . . . . . . . .
PfsorFullName . . . . . . . . . . . . . . . . . . . . .
PfsorIdMask. . . . . . . . . . . . . . . . . . . . . . .
PfsorLength . . . . . . . . . . . . . . . . . . . . . . .
PfsorSignature . . . . . . . . . . . . . . . . . . . . .
ProcSee Reference Manual
210
211
212
213
214
215
216
217
219
222
223
224
225
226
227
228
229
230
231
233
234
236
235
237
237
240
241
242
243
244
245
247
245
248
249
250
233
251
252
253
254
254
254
254
254
285
PfUnquoteString . . . . . . . . . . . . . . . . . . . .233
PfUpdateValuesId. . . . . . . . . . . . . . . . . . .255
PfUseField . . . . . . . . . . . . . . . . . . . . . . . .256
PfWinInitialize . . . . . . . . . . . . . . . . . . . . .257
PfWithdrawRtmFromCurrent . . . . . . . . . .259
PfXtInitialize. . . . . . . . . . . . . . . . . . . . . . .260
PfXtInitialize. . . . . . . . . . . . . . . . . . . . . . .260
286
ProcSee Reference Manual
Standard pTALK Functions Manual pages
ProcSee Reference Manual
287
288
ProcSee Reference Manual
Standard pTALK Functions
array (3pTALK)
NAME
array - creates arrays of any type.
SYNOPSIS
any*
newArray( char* elementType, int size );
char*
newCharArray( int size );
short int* newShortIntArray( int size );
int*
newIntArray( int size );
float*
newFloatArray( int size );
double* newDoubleArray( int size );
int
arrayLength( any array );
int
arrayIndex( any pointer );
DESCRIPTION
newArray is a generic function for creating single- or multi dimensional arrays. This
function accepts two arguments, elementType and size.
The first argument, elementType is a string specifying the data type of each element in the
array. The element type can be a simple data type, like int, char, float, etc, or an array of
a simple data type, like int[10], float[5], int[3][4], etc. Specifying for instance int[10]
creates a two dimensional array, where each element in the first dimension is an array of
10 integers. Notice that there isn't possible to create a jagged array, i.e. a multi dimensional array where the elements in each dimension have different element size. The elementType can also be a pointer to a ProcSee meta-class, like Rectangle*, Picture*, etc. Each
element in this array is a pointer to a meta-class.
The second argument, size specifies the number of elements in the array. In a multi dimensional array the size argument is the number of elements of the first dimension, i.e.
newArray( "int[4]", 3 ) creates a two dimensional array where the first dimension has 3
elements, while the second dimension has 4 elements.
The return value from this function is a pointer to the specified elementType, i.e. it returns
int* if the element type is int, int** if the element type is int[10], char* if the element type
is char, etc. A null pointer is returned if an unknown element type or an illegal size is specified.
Notice that arrays created with this function are automatically deallocated when the last
reference to the array goes out of scope. An example is an array created in a function.
When the function returns, the array is deallocated.
The arrays created with newArray() are zero based, meaning that the first index in the
array is 0. To access an element in a multi dimensional array, an ordered list of integers,
such as arr[2][3][1] is used. An error message is issued if trying to access an element outside the array bounds.
The functions newCharArray(), newShortIntArray(), newIntArray(), newFloatArray() and newDoubleArray() are specialized functions used to create arrays of simple
data types, in contrast to the generic function newArray() which can be used to create arrays of any type and dimension. These functions create single arrays of simple types. To
ProcSee Reference Manual
289
Standard pTALK Functions
array (3pTALK)
create an integer array of 10 elements, use either the specialized function newIntArray( 10 )
or the generic newArray( "int", 10 ). The result is, as expected the same, they create a pointer
to an integer array of 10 elements. In fact, the specialized functions is the same as calling the
more generic function newArray(), where the element type is set to a simple data type. For
more information about these functions see the description about newArray().
arrayLength() accepts one argument of type array and returns the number of elements in the
array. The remaining number of elements in the array is returned if a pointer to an element
in the array is passed as argument.
arrayIndex() accepts one argument of type pointer, where the pointer points to an element
in an array. This function returns the index to that element. In multi dimensional arrays, it
returns the index in the array at the n'th dimension.
EXAMPLE
char* F(int a)
{
char* t = newCharArray(16); // array created.
sprintf(t,"%d",a);
return t;
}
void G()
{
char* s = F(random(25));
printf("%s",s);
} // s goes out of scope => array memory released.
int** GetRandomMatrix()
{
int** m = newArray( "int[2]", 2 ); // Creates a 2x2 array
for ( int y = 0; y < 2; y++ )
for ( int x = 0; x < 2; x++ )
m[y][x] = random( 100 );
return m;
}
NOTES
If the size parameter is 0 or less than 0, the new array functions returns 0.
SEE ALSO
newList() and newMatrix() in "ProcSee Reference Manual"on page 380 and page 385
290
ProcSee Reference Manual
Standard pTALK Functions
atof, atoi (3pTALK)
NAME
atof, atoi - conversion functions
SYNOPSIS
double atof( char* aString );
int atoi( char* aString );
DESCRIPTION
atof() takes one string argument and converts it to the corresponding floating point value.
For both functions, the string argument is scanned up to the first character inconsistent
with the base (0..9). Leading white-space is ignored. If no conversion can take place, zero
is returned.
atoi() takes one string argument and converts it to the corresponding integer value.
EXAMPLES
int anInt;
float aFloat;
:
anInt = atoi( "45" );
aFloat = atof( "38" );
In this example, the string argument to atoi() and atof() is converted to the integer value 45 and the float
value 38.
ProcSee Reference Manual
291
Standard pTALK Functions
Colour (3pTALK)
NAME
Colour - colour functions
SYNOPSIS
int
int
int
int
int
int
Colour::red( int ix = 0 );
Colour::green( int ix = 0 );
Colour::blue( int ix = 0 );
Colour::time( int ix = 0 ):
Colour::numBlinkColours();
Colour::edit( int red = -1, int green = -1, int blue = -1,
int time = -1, int ix = 0 );
int Colour::add( int red, int green, int blue, int time=500, int ix=-1 );
int Colour::remove( int ix=-1 );
int Colour::setTransparency( int transparency, int ix= 0 );
int Colour::getTransparency( int ix = 0 );
int Colour::comRGB();
int Application::comRGB(int colour);
Colour* Application::getColour(int colour, ::ResourceStyle* rs = 0);
Colour* Application::getColourFromRGB(int r, int g, int b, int exact=0);
Colour* Application::getColourFromRGB(int rgb, int exact=0);
DESCRIPTION
red(), green() and blue() return the red, green and blue component of the colour, respectively. If the colour is a blink colour the argument ix specifies an index into the blink colour array.
Returns -1 on failure.
time() returns the blink time in milliseconds for a specific blink colour. The argument ix
specifies an index into the blink colour array. This function has no meaning if the colour is a
not blinking. Returns -1 on failure.
numBlinkColours() returns 0 if the colour is shared, 1 if the colour is private or the number
of blink colours if it is blinking. For more information about shared, private and blink see the
notes section.
edit() changes the red, green, blue or time attributes of an already existing colour. If the colour is a blink colour the argument ix specifies an index into the blink colour array. Returns 0
on success, -1 on failure.
add() adds a new red, green, blue and time attribute to the colour object. If the colour is
shared it becomes private. If it is private it becomes blinking. For more information about
shared, private and blink see the notes section. If the argument ix is –1 it is added last, otherwise at the specified index. Returns 0 on success, –1 on failure.
remove() removes a red, green, blue and time attribute from the colour object. If the argument ix is –1 the last blink colour is removed otherwise the blink colour at the specified index. Returns 0 on success, -1 on failure.
292
ProcSee Reference Manual
Standard pTALK Functions
Colour (3pTALK)
setTransparency() changes the colour’s transparency. The first argument defines the
magnitude of the transparency. A value of 0 specifies an opaque colour, while 65535 specifies a transparent colour. The last argument ix specifies the blink colour index to modify.
This argument has a default value of 0.
getTransparency() returns the colour’s transparency attribute.The argument ix specifies
the blink colour index. This argument has a default value of 0.
comRGB() returns an int combining the red, green, and blue components (8 bits each).
Normally used when a Windows colour is needed, e.g. when using COM.
Application::comRGB() finds the colour in the application, and returns an int combining
the red, green, and blue components (8 bits each). Typically used when a Windows colour
is needed, e.g. when using COM.
Application::getColour() returns a pointer to the Colour that is given as input argument.
Used to convert integer colour index back to the Colour it represents. An optional ResourceStyle can be given.
Application::getColourFromRGB() finds the Colour closest to the input colour. The input colour is either red, green, and blue components in the range 0-65535, or a combined
rgb value with 8 bits for each colour component. If the exact parameter is true, the colour
must match at least 8 bits for each colour component.
NOTES
A colour object can be in three different states:
Shared: which means that the colour is not blinking. On PseudoColor on X-Windows it
means that the colour can be shared by any other application.
Private: which means that the colour is not blinking but it has a blink time specified. On
PseudoColor on X-Windows this has a meaning because the colour is allocated as private
and cannot be shared with any other application. Using private colours on X-Windows are
resource consuming and may result in the problem that application cannot allocate colours. Only 256 colours are available on PseudoColor.
Blink: which means that the colour is blinking. It is a colour that has more than one RGB
component.
SEE ALSO
create(3pTALK) in "ProcSee Reference Manual"on page 306
ProcSee Reference Manual
293
Standard pTALK Functions
Colour matrix functions (3pTALK)
NAME
Colour matrix functions – functions for initializing matrices with colour adjustment data.
SYNOPSIS
::Matrix* setGreyMatrix( ::Matrix* m, double min, double max );
::Matrix* setRGBMatrix( ::Matrix* m, double min, double max );
DESCRIPTION
The functions setGreyMatrix(…) and setRGBMatrix(…) initialize a Matrix object with
colour information data. The Matrix object must be a matrix of size 4 by 4. A 4 by 4 Matrix
object will be created in these functions if null is specified for the parameter m. The return
value from these functions is a pointer to a matrix initialized with colour data.
The colour matrices can be used to adjust the colour balance for all colours used in a picture.
It is possible to let the entire picture be displayed in a grey-scale tone, or make the entire picture become darker or brighter by modifying the lightness. The Picture class has a function
called adjustColours(…) which can be used to modify all colours in a picture without making any permanent changes to the colours.
The function setGreyMatrix(…) initializes the 4 by 4 matrix with grey-scale data. The greyscale will range from the argument min to max. The value of min and max must be in the
range 0 to 1. A value close to 0 will produce a matrix with dark grey data, while a value close
to 1 will produce a matrix with light grey data.
The function setRGBMatrix(…) initializes the 4 by 4 matrix with colour adjustment data.
The colour values will range from the arguments min to max. These values must be in the
range 0 to 1. Values close to 0 will produce dark colour matrices, while values close to 1 will
produce light colour matrices.
EXAMPLE
function `void setColours()
{
// Modify the colours using dark greyscale fill and
// brighter border.
::Matrix* border = setRGMatrix( 0, 0.5, 1.0 );
::Matrix* fill = setGreyMatrix( 0, 0, 0.5 );
adjustColours( fill, border );
}`
SEE ALSO
Picture::adjustColours, Matrix
294
ProcSee Reference Manual
Standard pTALK Functions
COM functions (3pTALK)
NAME
COM functions - functions used when creating and accessing COM functionality
SYNOPSIS
int
int
double
int
comAdvise( eventObject, interfaceObject )
comUnadvise( eventObject )
comDateFromTime( int uxTime )
comDateToTime( double comDate )
ComEventObject* newComEventObject( char* fullName, char* name,
char* comEventClass )
ComInterfaceObject* newComInterfaceObject( char* fullName, char* name,
char* comInterfaceClass )
ComObject* newComObject( char* fullName, char* name, char* comClass )
ComShape* newComShape( char* fullName, char* name, char* comClass,
float x, float y, float w, float h )
int Application::newComLibrary( char* libraryId,
int major = -1, int minor = -1 )
int Library::newComLibrary( char* libraryId,
int major = -1, int minor = -1 )
int ComInterfaceObject::queryInterface( ComInterface** interface );
int ComInterface::queryInterface( ComInterface** interface );
DESCRIPTION
The function comAdvise() registers an event object to receive event callbacks from a
ComShape or ComObject. The interfaceObject is a pointer associated with a ComShape
or ComObject. ComShape or ComObject is the object which fires the event. The comAdvise() function takes the following arguments, eventObject and interfaceObject. EventObject is either the fullname of the event object or a pointer to the event object. The
argument interfaceObject is either a character string or a pointer to one of the following
data types, ComInterfaceObject, ComShape, ComObject, attribute or local variable of
type ComInterface pointer. The comAdvise() function returns true if the registration was
successful and false otherwise.
The function comUnadvise() cancels a registration previously established with comAdvise(). No event callbacks will be received in the event object sent from the ComShape or
ComObject after this function has been called. See comAdvise() for a description of the
argument. The comUnadvise() function returns true if the un-registration was successful
and false otherwise.
The function comDateFromTime() converts and returns a time specified in seconds since
January 1, 1970 to a double value. This double value is represented as time elapsed since
December 30, 1899. The time value can be used in COM components accepting time parameters.
The function comDateToTime() converts and returns a time specified in seconds since
December 30, 1899 to a time elapsed since January 1, 1970. For more information see
comDateFromTime(). This function can be used to convert time arguments received
from COM components.
ProcSee Reference Manual
295
Standard pTALK Functions
COM functions (3pTALK)
The function newComEventObject() creates a new ComEventObject, where the argument
fullName is the owner's fullname and name is the new event object's name. The event object
will be of the interface class specified by the last argument comEventClass. This function returns a pointer to a ComEventObject if the event object was successfully created and 0 otherwise. See also comAdvise() and comUnadvise().
The function newComInterfaceObject() creates a new ComInterfaceObject, where the argument fullName is the owner's fullname and name is the new interface object's name. The
interface object will be of the interface class type specified by the last argument comInterfaceClass. This function returns a pointer to a ComInterfaceObject if the interface object was
successfully created and 0 otherwise.
The newComObject() function creates a ComObject of a component class specified by the
last argument comClass. The argument fullName is the owner's fullname and name is the new
name of the com object. It returns 0 if the function fails, otherwise a pointer to the created
COM object.
The newComShape() function create a ComShape object of a component class type specified by the argument comClass. The argument fullName is the owner's fullname and name is
the new name of the COM shape. The owner fullname is normally a Picture or Class. x and
y specify the position of the COM shape in world coordinates. The arguments w and h specify the COM shape's width and height. The COM shape will try to use its own default size if
a negative value is given for w or h. If the COM shape does not have a default size then the
absolute value of the arguments w and h will be used. The function newComShape() returns
a pointer to a ComShape if it returned successfully and 0 otherwise.
The function newComLibrary() adds all the definitions in the COM library to the symboltable specified by the arguments libraryId, major and minor version number. The argument
libraryId is a unique library identifier (known as LIBID, GUID, UUID). An example of a
GUID is "{898B4426-679D-4544-99E9-B98AF501B9EB}". The major and minor version
number is the COM library version to load. It returns 1 on success and 0 otherwise.
The member function ComInterfaceObject::queryInterface() initializes a pointer to the
interface requested by the argument interface. When a ComInterfaceObject is initialized
properly it has reference to a COM shape or COM object. The interface passed as argument
to this function must be of a COM interface type supported by the same COM object or COM
shape as the ComInterfaceObject. The pointer will be set to the value 0 if the requested interface is not supported by the COM shape or COM object. It returns 1 if the interface was
successfully initialized and 0 otherwise.
The member function ComInterface::queryInterface() initializes a pointer to the interface
requested by the argument interface. It returns 1 if the interface was successfully initialized
and 0 otherwise.
NOTES
These functions are only available on the Windows platform.
296
ProcSee Reference Manual
Standard pTALK Functions
ComShape (3pTALK)
NAME
ComShape - Graphical user interface COM component
SYNOPSIS
int
ComShape::backgroundColour;
int
ComShape::foregroundColour;
int
ComShape::theFont;
int
ComShape::resizeable;
float
ComShape::x;
float
ComShape::y;
float
ComShape::width;
float
ComShape::height;
void
ComShape::hideProperties();
void
ComShape::showProperties( char* title );
void
ComShape::showProperties( char* title, int x, int y );
int
ComShape::persist( int mode = -1 );
int
ComShape::queryInterface( ComInterface** interface );
ComClass* ComShape::theComClass();
DESCRIPTION
The attributes backgroundColour, foregroundColour and theFont control the background colour, foreground colour and font used by the COM shape, respectively. Not all
COM shapes support this feature. Only COM shapes supporting the following ambient
properties can be used to change a COM shape's appearance through these attributes,
DISPID_AMBIENT_BACKCOLOR,
DISPID_AMBIENT_FORECOLOR
and
DISPID_AMBIENT_FONT. These attributes will by default be set to the value -1, meaning that they will use the COM shape's own initial default values. Setting the attribute
backgroundColour to -2 will use the Picture's background colour. Setting foregroundColour to -2 will use either white or black colour. It depends on whether white or black
produces best contrast to the Picture's background colour. To set a user specified value,
use a ProcSee resource. These attributes can be regarded as hints to the COM component.
It is up to the component if it accepts the settings.
The attribute resizeable is used to control whether the COM shape is allowed to be resized
on request from the component or not. Setting this attribute to 1 will allow resizing, 0 will
deny any attempt from the component to resize itself. It is by default set to the value 1.
The attributes x, y, width and height controls the COM shape's position and size.
The functions hideProperties() and showProperties() hides and displays the COM
shape's property pages, respectively. showProperties() displays the property pages at the
coordinates x, y relative to the upper left corner of the screen. If x, y is not given, a default
position is used. The first argument title specifies the caption used for the property page
window. A property page is used to display a COM shape's configuration information to
the user and to enable the user to modify that information. Notice that not all COM shapes
have property pages.
ProcSee Reference Manual
297
Standard pTALK Functions
ComShape (3pTALK)
The persist() function controls whether the configuration data for the ComShape is saved to
file or not, and where the data is saved. Current persist setting is returned if it is called without argument. Setting the mode argument to the value 0 will ignore the configuration data
when saving the picture. Setting this parameter to the value 1 will save the configuration data
together with the ComShape. This is the default when creating new ComShape objects. When
this parameter is set to the value 2, the configuration data will be saved to a separate binary
file.
The function queryInterface() initializes and returns a pointer to the interface requested by
the argument interface. The interface passed as argument must be of an interface definition
type which is supported by the COM shape. The pointer will be set to the value 0 if the requested interface is not supported by the COM shape. A COM shape may have support for
several interfaces. In ProcSee only the default interface is created and initialized automatically. This function can be used to initialize the other interfaces. It returns 1 if the interface
was successfully initialized and 0 otherwise.
The function theComClass() returns a pointer to the COM shape's COM class definition.
NOTES
The ComShape is only available on the Windows platform.
298
ProcSee Reference Manual
Standard pTALK Functions
ComObject (3pTALK)
NAME
ComObject - non-graphical COM component.
SYNOPSIS
int ComObject::persist( int mode = -1 );
int ComObject::queryInterface( ComInterface** interface );
ComClass* ComObject::theComClass();
DESCRIPTION
The persist() function controls whether the configuration data for the ComObject is saved
to file or not, and where the data is saved. Current persist setting is returned if it is called
without argument. Setting the mode argument to the value 0 will ignore the configuration
data when saving the application, library or picture. Setting this parameter to the value 1
will save the configuration data together with the ComObject. This is the default when
creating new COM objects. When this parameter is set to the value 2, the configuration
data will be saved to a separate binary file.
The function queryInterface() initializes and returns a pointer to the interface requested
by the argument interface. The interface passed as argument must be of an interface definition type which is supported by the COM object. The pointer will be set to the value 0
if the requested interface is not supported by the COM object. A COM object may have
support for several interfaces. In ProcSee only the default interface is created and initialized automatically. This function can be used to initialize the other interfaces. It returns 1
if the interface was successfully initialized and 0 otherwise.
The function theComClass() returns a pointer to the COM object's COM class definition.
NOTES
The ComObject is only available on the Windows platform.
ProcSee Reference Manual
299
Standard pTALK Functions
COM definitions (3pTALK)
NAME
COM definitions - base classes for the COM definitions.
SYNOPSIS
ComLibrary
ComClass
ComInterface
DECSRIPTION
ComLibrary is the base class for all the COM library definitions added to a ProcSee application. A derived ComLibrary definition is used as a container for all the COM definitions
in the COM library.
The ComClass type is the base class for all the COM component definitions added to a ProcSee application. It keeps information about the interfaces and event interfaces supported by
the ComClass. A ComClass derived type is a COM definition used by a ComShape or ComObject when being created.
The ComInterface is the base class for all COM interface definitions added to a ProcSee application. Objects of definitions derived from ComInterface are used as ComInterfaceObject and ComEventObject.
NOTES
These COM definitions are only available on the Windows platform.
300
ProcSee Reference Manual
Standard pTALK Functions
Comments (3pTALK)
NAME
Comments - functions for handling comments.
SYNOPSIS
int setComment( char* fullName, char* comment );
char* getComment( char* fullName );
List* searchComments( char* str, char* startEntry=0, List* L=0, char* flags=0 );
DECSRIPTION
The setComment function sets the comment on the element specified in the fullName. It
returns a value different from 0 if all is OK. It returns 0 if the fullName was not found, or
not a legal place to set comments. It is not allowed to set comments on primitive attributes,
since they have no entry in the symboltable except for the definition in some meta-class.
It is not allowed to set comments on elements inside instances, since it will be lost when
the instance is saved, or the class is updated.
The getComment function return the comment of the element specified by the fullName.
If no comment is set, or the fullName was not found, it returns 0.
The searchComments function finds all elements in the symboltable under the startEntry, that has a comment containing the search string in str. If list is specified, this list is
added to, if not a new list is created. The list is returned. If the startEntry is not given, the
current position of the call is used. The flags argument is currently not used.
SEE ALSO
"Comments" on page 40 in "The Configuration Language" chapter, document function on
page 425, and PCC option -o comments on page 146.
ProcSee Reference Manual
301
Standard pTALK Functions
containsName (3pTALK)
NAME
containsName - testing for a named object given full name of the object’s owner.
SYNOPSIS
int containsName( char* ownerFullName, char* objectName );
DESCRIPTION
containsName() takes two arguments, the first is the full name of the owner and the second
is the name of the object. Returning an int with the following interpretation:
• less than zero for illegal name
• zero for a name that does not exist
• greater than zero is the symboltable identifier for the named object
302
ProcSee Reference Manual
Standard pTALK Functions
constructor, destructor (3pTALK)
NAME
constructor, destructor - functions called when objects are created/removed.
SYNOPSIS
void constructor();
void destructor();
unsigned int Application::setConstructorBehaviour( char* ctorMask );
unsigned int Application::setConstructorBehaviour( int ctorMask );
unsigned int Application::getConstructorBehaviour();
DESCRIPTION
Constructors and destructors are functions that are called when an object is created, or removed. If you create a function named constructor in one of the different objects that supports constructors in ProcSee, this function will be called when the object have been
created, e.g. loaded from file. Objects that can have a constructor, can also have a destructor, which will be called when the object is removed, right before the object disappears.
The following objects supports constructors and destructors:
Application, TrendLog, Library, Picture, Instance.
To get a constructor into an instance, it must be defined in the class.
The call sequence of the constructors and destructors are as follows:
First
constructors: Instances
...
Last
Pictures Libraries TrendLog Application
destructors: Application TrendLog Libraries Pictures Instances
Since the pictures normally are loaded from the Application constructor, the actual sequence for constructors will be:
Libraries TrendLog Application -- Instances Pictures
In some cases one wants the call sequence of the constructors and destructors to be different. To support this, both constructors and destructors can have an extra optional function
body. In these cases, the code in the first function body is called before the child objects
constructor/destructor, and the second function body is called after the child objects constructor/destructor.
The function setConstructorBehaviour() is used to change the way constructors and destructors are called in ProcSee. The argument ctorMask is a combination of one or several
of the following strings or integers constants (add :off after the string to reverse its meaning):
• descend - call the constructor and destructor in the child objects. Can be set to true or
ProcSee Reference Manual
303
Standard pTALK Functions
constructor, destructor (3pTALK)
false (constant value 1). This is the default.
• callable - set to true if the constructor and destructor can be called from pTALK and otherwise false (constant value 2).
• ctorCalled - set this value to one of the following values.
If it is set to the value dtor, it will automatically be called from the constructor function.
The destructor will be called automatically if object is in constructed state. This is the
default. (constant value 4).
If it is set to the value ctor, then call the constructor, but do not automatically call the
destructor. (constant value 8).
If the value is ignore then ignore the constructor call if the object is in constructed state
(constant value 16).
• ifCalledWarn - if true, a warning message is displayed when the constructor or destructor is called from pTALK (constant value 32). This is default.
• dtorAutoCallWarn - if this value is set to true a warning message is displayed when a
destructor is automatically called from a constructor (constant value 64).
The function getConstructorBehaviour() returns current setting for the constructor and destructor behaviour in the application.
EXAMPLES
application myApp
{
...
function ‘void constructor()
{
load("myPicture.ppic");
displayPicture("myWindow","myPicture");
}‘
...
}
class myClass
{
...
int myAttr = 23;
instance aClass myInst
{
myInstAttr = 45;
...
}
function ’void constructor() // with double body.
{
myInst.myInstAttr = myAttr; // Set before myInst.constructor called.
}
{
...
}‘
...
}
304
ProcSee Reference Manual
Standard pTALK Functions
constructor, destructor (3pTALK)
SEE ALSO
"Constructors and Destructors" on page 37 in the ProcSee Reference Manual.
ProcSee Reference Manual
305
Standard pTALK Functions
create (3pTALK)
NAME
create - functions for instantiation of user interface objects
SYNOPSIS
// container objects:
Library* newLibrary( char* ownerFullName, char* name );
Class* newClass( char* ownerFullName, char* name );
// shapes:
Instance* newInstance( char* ownerFullName, char* name,
char* classFullName, float x, float y );
Rectangle* newRectangle( char* ownerFullName, char* name,
float x, float y, float width, float height );
RoundRect* newRoundRect( char* ownerFullName, char* name,
float x, float y, float width, float height, float xRadiusCorner, float yRadiusCorner );
DialogueArea* newDialogueArea( char* ownerFullName, char* name,
float x, float y, float width, float height );
Circle* newCircle( char* ownerFullName, char* name,
float x, float y, float radius );
CircleArc* newCircleArc( char* ownerFullName, char* name,
float x, float y, float radius,
float startAngle, float openingAngle, int mode);
Ellipse* newEllipse( char* ownerFullName, char* name,
float x, float y, float xradius, float yradius );
EllipseArc* newEllipseArc( char* ownerFullName, char* name,
float x, float y, float xradius, float yradius,
float startAngle, float openingAngle, int mode);
Text* newText( char* ownerFullName, char* name,
float x, float y, char* text );
Image* newImage( char* ownerFullName, char* name, char* filename,
float x, float y);
Line* newLine( char* ownerFullName, char* name,
float x1, float y1, float x2, float y2 );
Line* addLinePoint( char* ownerFullName, char* name,
float x, float y );
Polygon* newPolygon( char* ownerFullName, char* name,
float x1, float y1, float x2, float y2 );
Polygon* addPolygonPoint( char* ownerFullName, char* name,
float x, float y );
Trend* newTrend( char* ownerFullName, char* name,
float x, float y, float width, float height );
Group* newGroup( char* ownerFullName, char* name );
Scale* newScale( char* fullName, char* name, float x, float y, float length,
int orientation = 1 );
// attributes, functions and dialogues:
Attribute* newAttribute( char* ownerFullName, char* definition );
Function* newFunction( char* ownerFullName, char* definition );
Dialogue* newDialogue( char* ownerFullName, char* event, char* action );
int newVariable( char* processFullName, char* name, int type, int size, char* recordName, any defaultValue );
306
ProcSee Reference Manual
Standard pTALK Functions
create (3pTALK)
// Picture
pPicture* newPicture( char* ownerFullName, char* name );
// Application
int newProcess( char* ownerFullName, char* processName );
int Application::newWindow( char* windowName, char* parentName,
int x, int y, int width, int height );
// Colours
Colour* Application::newColour( char* name, int red, int green, int blue,
int time = -1);
Colour* Library::newColour( char* name, int red, int green, int blue,
int time = -1);
// Enum
Enum* newEnum(char* fullName, char* name, char* dataType);
EnumElement* newEnumElement(char* fullName, char* name, any value);
DESCRIPTION
These functions can be used to create (instantiate) new objects at run-time. All functions
for shape creation take the owner’s fullname and the new object’s name as the first two
parameters. An empty name string indicates an anonymous shape. All the functions return
a pointer to the created object, except the functions newProcess and newVariable() that
return a value different from 0 if object created OK. All functions return 0 if it fails.
newLibrary() creates an empty library.
newClass() creates a graphics class. The class is initially empty, and should be filled by
the use of the other create functions.
newInstance() creates a new instance of class given by classFullName, and coordinates
given by x and y. An empty name string indicates an anonymous shape.
new<Shape>() creates a new <Shape> shape at the coordinates given by x and y. The
mode parameter in newCircleArc() and newEllipseArc() determines if the arc should be
a chord (mode=0) or a slice (mode=1). The startAngle and openingAngle parameters in
newCircleArc() and newEllipseArc() are specified in degrees. newLine() and newPolygon() creates a line or a polygon with 2 points, more points should be added by the use
of addLinePoint() or addPolygonPoint(). The filename parameter in newImage()
should be the filename of an image in one of the supported graphics formats. newTrend
creates a trend shape with a trend label. New trend labels, grid lines, rulers and curves
must be added using the member functions new<TrendShape>. Refer to the
Trend(3pTALK) manual entry for a detailed description of these functions. newGroup
creates an empty group.
The function newScale(…) creates a new Scale shape. If the Scale shape was successfully
created a pointer to the shape is returned, otherwise 0. The length argument is the length
of the Scale shape in world coordinates. The argument orientation controls the direction
of the scale shape. Legal values are 1 and 2, where the value 1 creates a vertical shape and
2 creates a horizontal shape.
The function newRoundRect(...) creates and returns a pointer to a new RoundRect
shape. The RoundRect shape is created at the coordinates given by x and y, with the size
given by the arguments width and height. The last two arguments xRadiusCorner and
ProcSee Reference Manual
307
Standard pTALK Functions
create (3pTALK)
yRadiusCorner determines the x- and y-radius of the corners, respectively. The arguments
fullName and name specifies the scope and the name of the new shape, respectively. To create an anonymous shape specify 0 in the name argument.
newAttribute() creates a new attribute as defined in the definition string. E.g.: newAttribute(“MyPicture”, “int myAttr = 45;”);
newFunction() creates a new function as defined in the definition string. E.g.: newFunction(“MyPicture”, “int myFunc(int x) { myAttr = x; }”);
newDialogue() creates a new dialogue as defined by the event and action strings. E.g.: newDialogue(“MyPicture”, “buttonPressed(0)“, “{ myFunc( 45 ); }”);
newPicture() creates an empty picture with the name specified. If name is empty a default
name NoName1 (increasing the number if several) will be given.
newProcess() creates an empty process with the name specified, located under the the application specified in the parameter ownerFullName.
newVariable() creates a variable in a process. The first argument is the fullName of the process. The rest of the arguments specified are the same as for the API function PfCreateVar()
and PfCreateArray(). The size field should be 0 to create a simple variable, and >= 1 to create
an array. Record name should be an empty string if not used.
newWindow() creates a new window in the application with the name windowName and
parent parentName. The initial position of the window is given by x and y. The window dimension is specified in the parameters width and height. These values must be non-negative.
A subwindow is created if the parentName contains the name of another window in the application. To create a top-level window specify the name of a display in the application as
the parentName.
newColour() creates a new colour either on the Application level or on the Library level. If
time is set the colour become private else it will be a shared colour on X when running with
pseudo-colour, i.e. with X using a colour lookup table.
The function newEnum() creates a new enumeration of a data type specified by the last argument dataType. The enumeration can be of any primitive data types inclusive character
strings, i.e. int, float, char* etc. The argument fullName is the owner's fullname and name is
the new name of the enumeration. If the enumeration was successfully created a pointer to
the object is returned and 0 otherwise.
The function newEnumElement() adds a new enumerator element to the enumeration. The
argument fullName must be a fullname of an enumeration. The argument name is the name
of the enumerator and value is the enumerator value. This value argument must match the
data type specified when the enumeration was created. It returns a pointer to the enumerator
if it was successfully created and 0 otherwise.
NOTES
The routines for instantiating new primitive shapes use RTM’s internal defaults for all attributes not given as argument. These attributes can be set prior to the creation by calling setPrimitiveAttr().
308
ProcSee Reference Manual
Standard pTALK Functions
create (3pTALK)
SEE ALSO
edit(3pTALK) in "ProcSee Reference Manual"on page 327
remove(3pTALK) in "ProcSee Reference Manual"on page 416
ProcSee Reference Manual
309
Standard pTALK Functions
Cursor (3pTALK)
NAME
Cursor - cursor functions
SYNOPSIS
void Window::setCursor( int cursor=-2 );
void Picture::setCursor( int cursor=-2 );
void Application::setCursor( int cursor=-2 );
void Application::defaultCursor( int cursor );
void Application::setCursorColours( int cursor, int foregroundColour,
int backgroundColour );
Cursor* Application::getCursor( int cursor, ::ResourceStyle* rs = 0 );
DESCRIPTION
The setCursor() function on the window and picture changes the cursor used by this window. This function would normally be called from a cursorMoved() dialogue, to display a
temporary cursor over specific areas in your pictures. The default value -2 means to change
to the cursor that the window normally would have displayed. The value -1 means to change
to the cursor that is set as the default cursor for the application.
The setCursor() function on the application changes the cursor used by all the windows displayed by the application. This can among other things be used to change to another cursor
when something time consuming is going on.
The defaultCursor() function changes the default cursor used by all the windows in the application that is set up to use the default cursor.
The setCursorColours() function changes the colours of the given cursor.
Application::getCursor() returns a pointer to the Cursor that is given as input argument.
Used to convert integer cursor index back to the Cursor it represents. An optional ResourceStyle can be given.
The cursor parameter is the index number of the cursor or the cursor name. The foregroundColour and backgroundColour parameters is the index number of the colours or the colour
names.
NOTES
It is not possible to make the cursor colours blink by setting the cursor colours to blink colours.
SEE ALSO
"Cursors" on page 56.
"Defining Cursors" in "ProcSee User’s Guide".
310
ProcSee Reference Manual
Standard pTALK Functions
debug (3pTALK)
NAME
debug - debugging functions and utilities
SYNOPSIS
void dumpSymbolTable();
void trace( int toggle, func = 0 );
DESCRIPTION
These debugging functions are of little or no use to ordinary users, but have proved useful
when tracking down bugs in the system.
dumpSymbolTable() prints the contents of RTM’s symboltable on the terminal.
trace() turns on (if toggle argument is non-zero) or off (if toggle argument is zero) the
Virtual Machine’s tracing capabilities. When tracing is enabled, top element of the Virtual
Machine’s CPU stack will be printed for each instruction that is executed.
The func argument is a pointer to a function, or a string containing the name of a function.
If the func argument is given, and toggle is 1, the RTM will turn on tracing when the function given is executed, and tracing will be set to its previous state when the function has
ended its execution.
ProcSee Reference Manual
311
Standard pTALK Functions
dialogue (3pTALK)
NAME
dialogue - dialogue functions
SYNOPSIS
char* getDialogueTrigger( Dialogue* d );
void setDialogueTrigger( Dialogue* d, char* trigger );
char* getDialogueAction( Dialogue* d );
void setDialogueAction( Dialogue* d, char* action );
void dialogueToFront( Dialogue* d, int skipElems=0x7FFFFFFF );
void dialogueToFront( Dialogue* d, Dialogue* d2, int skipElems=0 );
void dialogueToBack( Dialogue* d, int skipElems=0x7FFFFFFF );
void dialogueToBack( Dialogue* d, Dialogue* d2, int skipElems=0 );
DESCRIPTION
These dialogue functions are mainly used by the ProcSee editor GED. The Dialogue* arguments can be specified either as a pointer to a Dialogue, or as a fullName string.
The getDialogueTrigger() and getDialogueAction() functions returns the trigger or action
part of a dialogue. The setDialogueTrigger() and setDialogueAction() functions changes
the trigger or action part of a dialogue. The trigger argument must be a string that contains a
pTALK expression and this expression should call at least one of the trigger functions given
on page 333. The action argument must be a string that contains a pTALK statement, preferably a compound statement, ie. code surrounded by curly braces.
The dialogueToFront() and dialogueToBack() functions changes the order of the dialogue
list. If more than one dialogue trigger can be activated by the same event, the one closest to
the front will be executed. The d argument is the dialogue to move. If this is the only argument, the dialogue is moved to the front or back of the dialogue list. If the skipElems argument is given the dialogue is moved over this number of dialogues in the front or back
direction. If the d2 argument is specified, the dialogue d is moved in front of or behind the
d2 dialogue. If both d2 and skipElems are specified, the dialogue is first moved in relation
to d2, then the dialogue is moved the number in skipElems toward the front or back.
SEE ALSO
For trigger functions to use in a dialogue, see the event functions on page 333.
For creation of dialogues by pTALK, see the newDialogue() function on page 308.
312
ProcSee Reference Manual
Standard pTALK Functions
Display (3pTALK)
NAME
Display- defines a display surface where windows can be placed.
SYNOPSIS
char*
int
int
int
int
int
int
int
Display::connection;
Display::width;
Display::height;
Display::resizeMode;
Display::virtualX;
Display::virtualY;
Display::virtualWidth;
Display::virtualHeight;
DisplayInfo* Display::getDisplayInfo();
Display* Application::newDisplay( char* name, char* connection );
DESCRIPTION
The Display object represents a display surface where the ProcSee RTM can display its’
windows. The display surface can be a physical monitor, a virtual display, an area on a
display (virtual display area), etc. The purpose with the Display object is to better control
the size and position of the windows that the RTM uses for displaying its’ pictures. A
powerful feature which is provided by the Display object is the ability to scale the display
coordinate system to new monitor sizes. If the application was initially designed to fit the
display resolution 1280x1024, it can easily be adapted to 1024x768 or any other display
resolution for that matter. Another feature provided by the Display class is the ability to
move the entire application from one display to another just by making one simple modification to the Display object.
The Display object provides a set of attributes which can be changed programmatically
from the pTALK language. Notice that the changes will not take effect before the global
pTALK function update() is run.
The Display object is a resource, just like the meta-classes Window, Colour, Font, etc.
All Window objects in ProcSee are associated with a Display object. The Window class
attribute parent must specify a Display object if the Window instance isn’t a child window or a group window.
The attributes width and height specifies the width and the height of the display in pixels,
respectively. By default these attributes are set to the actual display size when the Display
object is created. It is important that these attributes are set to the size of the display the
application was designed for. Note that these attributes have an effect only when the resizeMode attribute is set or when the virtual display area attributes are set.
The resizeMode attribute controls whether the Display object is automatically rescaled
to fit the display or maintain its’ original size independent of the display size. Setting the
resizeMode attribute to the value 0 means no resizing. To resize the Display object and
ProcSee Reference Manual
313
Standard pTALK Functions
Display (3pTALK)
maintain the aspect ratio, set this attribute to the value 2. Setting this attribute to the value 1
means resize the Display object to fit the entire display area, even if it means that the aspect
ratio becomes different from the design aspect ratio.
In resizeMode 2, the default is that the Display object is anchored to the centre of the display.
Use the enum AnchorStyle constants to change where the Display object is anchored, i.e.
left, centre, top, right or bottom position of the display surface. To change the Display object’s default anchor position set this attribute equal to the value 2, and perform a bitwise or
combination of this value and the enum AnchorStyle constants. This attribute does not have
any effect on the Display object unless the attributes width and height are set.
The attributes virtualX, virtualY, virtualWidth and virtualHeight define an area on a display surface. This area can be smaller or larger than the physical size of the display. This is
called a virtual display area in ProcSee. The area where the ProcSee RTM is allowed to display its’ pictures can be controlled with these attributes. An example of this usage is a multidisplay ProcSee application where each display is associated with a Display object. It is easy
to allow this type of ProcSee application to be displayed on a laptop with a single monitor
just by modifying the Display object’s virtual display area and connection attribute. Another example where the virtual display area attributes are used is when a Display object should
automatically be adjusted to a ProcSee window. This functionality is useful when an application should be rescaled when the application’s top-level window is resized or moved. This
functionality is provided in the Window class member function adjustVirtualDisplay().
Note that virtual display area attributes doesn’t have any effect unless the attributes width
and height are set.
The attribute connection is the name of the display device. For more information and a description of this attribute, see the description of the pTALK function newDisplay().
The function getDisplayInfo() returns the DisplayInfo associated with the Display instance.
A null pointer is returned if the function fails to get a DisplayInfo.
The Application member function newDisplay() creates a new Display object. The first argument is the name of the Display object. The second argument connection is the name of
the display device to open a connection to. To open a connection to a specific display, use
the DisplayInfoSet class to return the qualified name of the display. The connection string
is composed of a scheme name, followed by a colon character and a connection device string.
For the time being, ProcSee only supports the WIN and the X schemes. ProcSee will support
other schemes as well in the future. If the connection string is empty, the default is WIN: on
Microsoft Windows operating systems, and X: on Linux/Unix systems running X-Windows.
Specify an empty string to open a connection on the primary display on Microsoft Windows
platforms. Examples of connection strings on Windows are “WIN:1”, “WIN:2”, etc. Notice
that the connection string “WIN:0” has a special meaning. In a multi-display setup, “WIN:0”
means: open a connection to the entire desktop, i.e. the virtual display (all monitors). The
numbering of the displays on Windows are assuming that the display monitors are placed in
one or more rows. The leftmost display monitor in the upper row will be "WIN:1". The mon-
314
ProcSee Reference Manual
Standard pTALK Functions
Display (3pTALK)
itors in the row is counted from left to right. The rows will be counted from top to bottom,
see example below. Note that this doesn’t always correspond with the number displayed
by the screen resolution setting in the Windows control panel.
WIN:3
WIN:1
WIN:2
WIN:4
WIN:5
WIN:6
On Linux/Unix operating systems running X-Windows the connection string is the name
of the hardware display screen, like “X:gandalf:0.0”, “X::0.0”, etc. After the scheme
name X: the host name is specified. In the previous examples the host names are gandalf
and the current machine (empty string), respectively. The syntax of the device string is as
follows [host]:[number].[screen number], where host is the machine name, number is the
display on that machine, and screen number is the screen to use on that machine. If an
empty string is specified the display is opened on the device where the DISPLAY environment variable is pointing, or the local host if not specified.
It is possible to specify several display devices with the connection string attribute. Use
the semicolon character ';' to separate the display device entries. For instance, the string
"WIN:1;X::0.1;" defines two display device entries. WIN: will be used on the Windows
platforms, while X: will be used on Unix/Linux platforms running X-Windows. Notice
that the RTM will try each entry from the connection attribute string until successful. Inserting a semicolon at the very end of the connection attribute string ensures that the display-object will open on the computer's default display if all other items fail.
SEE ALSO
DisplayInfo in "ProcSee Reference Manual"on page 316
DisplayInfoSet in "ProcSee Reference Manual"on page 318
ProcSee Reference Manual
315
Standard pTALK Functions
DisplayInfo (3pTALK)
NAME
DisplayInfo- Returns properties and capabilities supported by a display.
SYNOPSIS
Rect*
Rect*
int
int
char*
DisplayInfo::displayArea();
DisplayInfo::workArea();
DisplayInfo::isPrimary();
DisplayInfo::getCapability( char* capability, any* arg1, … );
DisplayInfo::connection();
DESCRIPTION
The DisplayInfo class provides methods which return properties and capabilities supported
by a display. Examples are the display’s display area and work area.
The function displayArea() returns a Rect object initialized with the display’s viewable area
in pixels. On X-Windows the x and y attributes are always set to the value 0.
The function workArea() returns a Rect object initialized with the display’s work area in
pixels, i.e. the area on the display which can be used by client applications. This is the display’s viewable area minus the area of some stay-on-top windows controlled by the window
manager, like the Windows taskbar, or the Gnome panel.
isPrimary() returns true (1) if the display is the primary display, otherwise false (0).
connection() returns the name of the connection string, like “WIN:1”, “X::0.0”, "X:gandalf:0.0", etc.
The functionality provided by the getCapability() function is device dependent. The first argument capability is the name of the capability supported by the display. If the capability
isn’t supported false (0) is returned, otherwise true (1). Always check the return value before
using the result of this function. The number of, and the type of arguments depends entirely
on the kind of capability requested. Notice that the getCapability() function returns the result in the arguments following the capability name. These arguments must be specified with
the address operator which yields the pointer to the operands, like getCapability( “resolution”, &resolution ). The arguments are left as is if the capability isn’t supported by the display.
Some of the capabilities which can be requested from the DisplayInfo object accept one, two
or three arguments. An example is the “resolution” capability. The diagonal size in pixels is
returned if one argument is specified. The width and the height in pixels are returned if two
arguments are specified. If three arguments are specified, the first two arguments are the
width and the height, while the diagonal size is specified in the third argument.
On Microsoft Windows platforms the capabilities supported by the virtual display (WIN:0)
are only a subset of the capabilities supported by the other displays. For instance, it is not
possible and it makes no sense to get the name of the physical monitor from a virtual display.
Notice that the last column in the following table tells whether the capability is supported by
the virtual display or not.
316
ProcSee Reference Manual
Standard pTALK Functions
DisplayInfo (3pTALK)
The following table is the capabilities supported by the Microsoft Windows operating systems:
Table 3:
Arguments
Virtual
Display
Capabiltiy
Description
resolution
The size and diagonal resolution in pixels
See description of the inch
capability arguments.
*
depthsys
Number of colour planes.
Integer
*
inch
The size of the physical
monitor in inches. This
functionality is not supported by older monitors.
1, 2 or 3 arguments.
One arg: diagonal size.
Two args: width and height.
Three args: width, height and
diagonal size.
Accepts integers and reals.
cm
See description of inch. The
result is in centimetres.
mm
See description of inch. The
result is in millimetres.
name
The name of the monitor.
char*
The following table is the capabilities supported by X-Windows on Linux/Unix operating
systems:
Table 4:
Capabiltiy
Description
Arguments
resolution
The size and diagonal resolution in pixels
1, 2 or 3 arguments.
One arg: diagonal size.
Two args: width and height.
Three args: width, height and diagonal
size.
Accepts integers and reals.
depth
Number of colour planes.
Integer
SEE ALSO
Display in "ProcSee Reference Manual"on page 313
DisplayInfoSet in "ProcSee Reference Manual"on page 318
ProcSee Reference Manual
317
Standard pTALK Functions
DisplayInfoSet (3pTALK)
NAME
DisplayInfoSet- Stores a collection of DisplayInfo data objects.
SYNOPSIS
int
DisplayInfoSet::numDisplays();
DisplayInfo* DisplayInfoSet::display( int index );
static DisplayInfoSet* DisplayInfoSet::get( char* connection );
DESCRIPTION
The DisplayInfoSet stores a collection of DisplayInfo data objects.
The method numDisplays() returns the number of DisplayInfo objects in the collection. Use
this upper bound when iterating through the DisplayInfo objects.
display() returns the DisplayInfo at the given index. A null pointer is returned if the index
is out of the legal bounds (legal index values are; 0 <= index < numDisplays()).
The static method get() returns a DisplayInfoSet object based on the information passed in
the connection string. Information about all displays are stored in this set if the connection
string "*" (asterisk) is specified, i.e. it means match all displays. Notice, the virtual display
is stored at index 0 when the connection string is "*" on the Microsoft Windows platforms.
To get the default display specify an empty string. For more information how to specify the
connection string, see page 313. A null pointer is returned if the specified display device
doesn’t exist.
SEE ALSO
Display in "ProcSee Reference Manual"on page 313
DisplayInfo in "ProcSee Reference Manual"on page 316
318
ProcSee Reference Manual
Standard pTALK Functions
DnDSource (3pTALK)
NAME
DnDSource – source of a drag and drop operation.
SYNOPSIS
// Member functions:
int DnDSource::drag( char* action = "copy", int n = 0 );
void DnDSource::setBitmap( any bitmap,
int xOffset,
int yOffset,
int transparentColour );
void DnDSource::setBitmap( char* bitmapFile,
int xOffset,
int yOffset,
int r = -1,
int g = -1,
int b = -1 );
int DnDSource::setCursor( ::Cursor* cursor,
char* type = "none | copy | "
"move | link" );
int DnDSource::setData( any data, char* typeName = 0 );
// Global functions:
DnDSource* ::dndSource();
DESCRIPTION
The ProcSee class DnDSource is used as a data source when starting a drag and drop operation. When using drag and drop, user defined data can be transferred between different
applications, within the same application or in its simplest form within shapes in the same
picture.
All drag and drop operations start in the action part of a dndBegin() dialogue trigger.
There are two different ways to start a drag operation, either by using the global function
dndSimpleDrag(…) or by using an object of class type DnDSource. See page 325 for
more information about dndSimpleDrag(…).
To start a drag operation a DnDSource pointer must be obtained either from the dialogue
trigger dndBegin() or the global function dndSource(). These calls will fail if used outside the body of the action part of dndBegin(). The DnDSource class has methods which
can customise the drag operation as opposed to dndSimpleDrag(…). One of the features
only available in the DnDSource class is the ability to use an image while dragging.
In this version of ProcSee only plain text is supported for the drag and drop operation. The
plain text can have different meaning when added to the drag source. This is accomplished
by something called type names. The type name is specified in the last argument to setData(…). To exchange information through drag and drop both the drag source and drop
target must conform to the same protocol, i.e. they must use the same type name. Sending
for example data like “RECTANGLE 10, 10, 32, 3, 23” has no meaning if dropped in a
text editor. In this example a type name like “SHAPE_INFO” would have been much better. Data sent by the drag source which must be interpreted by the drop target should not
be sent using default type name. Avoid using default type name if the target must interpret
ProcSee Reference Manual
319
Standard pTALK Functions
DnDSource (3pTALK)
the data. Information that everybody can read and understand should always be sent using
default type name (in Windows, CF_TEXT). New clipboard formats like bitmap, filename,
etc. will probably be implemented in future versions of ProcSee.
The function setData(…) puts data into the drag source data object. The first argument to
this function is the data and the second is the type name. For a detailed description of type
name, see previous paragraph. It is possible to put different data with different type names
into the drag source data object. It is up to the drop target to decide the most appropriate data
to use based on the type name. If the example in the previous paragraph is continued assuming that the setData(…) function is called with “SHAPE_INFO” and plain text as type
names. It is very likely that plain text would have been copied if the data was dropped in a
text editor. It is likely that “SHAPE_INFO” would be requested if the same operation was
performed dropping the same data in a ProcSee picture. Plain text could also have been requested in the last example, it is up to the drop target to decide what kind of data to use when
the drag source offers several data types. It all depends on the drop target. Notice that successive calls to the setData(…) function will delete the old data when the same type names
are used.
The DnDSource is responsible for generating the visual feedback to the end user. In ProcSee
it is possible to control both the visual cursor and a semi-transparent image which can be used
during the drag and drop operation.
The function setCursor(…) is used to control the cursors used during the drag operation.
The first argument to this function is a pointer to a ProcSee cursor. Individual cursors can be
set for different drag effects. The second and last argument controls this behavior. The default is “copy | move | link | none”, meaning that a call to this function using the default argument will change cursors for all drag effects. The cursors must be set before the drag
operation starts, cursor Ca can for example be set when using “copy”, cursor Cb when using
“move” etc.
The function setBitmap(…) controls the semi-transparent image used during a drag and drop
operation. The arguments xOffset and yOffset specifies the offset from the upper left corner
of the image in relation to the mouse cursor. The function setBitmap( any bitmap, int xOffset, int yOffset, int transparentColour ) creates an image of the shape, which is specified
in the first argument bitmap. The argument must be a shape pointer. The last argument transparentColour is a ProcSee colour index and it defines the transparency colour used by the
image. The function setBitmap( char* bitmapFile, int xOffset, int yOffset, int r = -1, int
g = -1, int b = -1 ) reads the image to use during the drag operation from file. The first argument bitmapFile is the name of the image file. The last argument r,g,b defines the transparency colour used by the image. Notice that show window contents while dragging must be
enabled in Windows to be able to use an image during a drag and drop operation.
The function drag(…) starts the drag and drop operation. Calling this function will start a
modal drag and drop loop. It will not return from this function till the drag operation ends.
The first argument action is the actions the source allows the drag operation to have. The following are legal actions: copy, move or link. The default is copy. If several actions are applied it is up to the drop target to request an action. The visual cursor will by default change
when different drag effects are used. The drag and drop effects are controlled with the mouse,
the shift key and the control key. Move is default when neither the shift key nor the control
key is down. Copy cursor is default when the control key is down, while the link cursor is
default when both the shift key and the control key are down. This function returns the drop
320
ProcSee Reference Manual
Standard pTALK Functions
DnDSource (3pTALK)
effect the target applied in the action part of the dndDrop() dialogue trigger. The return
value is set either using the function setDropEffect(…) on the DnDTarget object or the
function dndSimpleDrop(…).
EXAMPLES
dialogue
{
event = `dndBegin(0)`;
action = `{
DnDSource* s = dndSource();
s->setBitmap( (Shape@fullName()), 10, 10, black );
s->setData( "RECTANGLE 10, 10, 32, 32", "SHAPE_INFO" );
s->setData( "Dragging a RECTANGLE" );
s->drag( "copy" );
}`;
...
}
SE ALSO
DnDTarget, dndBegin
ProcSee Reference Manual
321
Standard pTALK Functions
DnDTarget (3pTALK)
NAME
DnDTarget – target of a drag and drop operation.
SYNOPSIS
// Member functions
int DnDTarget::getData( any* data, char* typeName = 0 );
char* DnDTarget::getDropEffect();
void DnDTarget::setDropEffect( char* dropEffect );
int DnDTarget::isLeftMouseButtonDown();
int DnDTarget::isMiddleMouseButtonDown();
int DnDTarget::isRightMouseButtonDown();
int DnDTarget::isAltDown();
int DnDTarget::isControlDown();
int DnDTarget::isShiftDown();
int DnDTarget::isCopy();
int DnDTarget::isLink();
int DnDTarget::isMove();
// Global functions
DnDTarget* dndTarget();
DESCRIPTION
The class DnDTarget provides a communication mechanism between a drag source, DnDSource, and a drop target. It handles the receiving portion of the drag and drop operation,
that is functionality for accepting data through the drag and drop protocol. It also provides
functionality for requesting status information during a drag and drop operation, like the status of the mouse buttons, the keyboard keys, etc. The drop target can also modify the visual
appearance of the cursor for instance when the target does not accept the data the source has
put on the data object.
Objects of the class DnDTarget can only be requested in the action part of one of the dialogue triggers dndDrop(), dndEnter(), dndLeave() or dndMotion(). For more information
about these dialogue triggers, see page 333. Notice that the DnDTarget object is undefined
outside the body of these triggers. To get a drop target object of type DnDTarget use either
one of the dialogue triggers, dndDrop(), dndEnter(), dndLeave(), dndMotion() or the
global function dndTarget(). Each of these functions return a pointer to a DnDTarget object.
A simpler variant of the drop target functionality is provided by the global function dndSimpleDrop(…). For more information see page 325.
To get the data set by the drag source use the function getData( … ). This function returns
true if the requested type name is available on the drag source, otherwise false. For more information about type names, see page 319. If not specified the last argument typeName has
a default value. The type name will by default be plain text if for instance the first argument
data is a character string. Notice that a pointer to a variable or attribute must be passed in the
first argument to the getData(…) function.
322
ProcSee Reference Manual
Standard pTALK Functions
DnDTarget (3pTALK)
The function getDropEffect() returns the drop effect for the current drag and drop operation. The drop effect is set on the drag source using either the function dndSimpleDrag(…) or the function setDropEffect(…) in the class DnDSource. For more
information, see page 325 and page 319.
The function setDropEffect(…) modifies current drop effect. The drop effects which can
be changed are copy, move, link or none. To set for instance copy or move call this function with the argument “copy | move”. When the drop effect is modified the visual appearance of the cursor will be changed to better reflect the drop effect in current drop zone.
The drop effect should be set to none if the drop target does not accept the drag and drop
data provided by the data source. The cursor will then immediately change indicating that
the drop zone is not an active drop target for the data. Notice that it is not possible to set
a drop effect to a value unsupported by the source. It will fail if the target tries to change
the drop effect to move if for example the source only supports copy. The drop effect set
in the action part of dndDrop() will be the return value from the functions dndSimpleDrag(…) or the DnDSource object function drag(…).
The functions isLeftMouseButtonDown(), isMiddleMouseButtonDown() and isRightMouseButtonDown() returns true when the respective left, middle and right mouse button is down.
The functions isAltDown(), isControlDown() and isShiftDown() returns true when the
respective alt, ctrl and key shift key is down.
The functions isCopy(), isLink() and isMove() returns true when the drag source supports
copy, link or move, respectively.
EXAMPLE
dialogue
{
event = ´dndEnter()´;
action = ´{
DnDTarget* t = dndTarget();
// Only copy is supported by the target
if ( !t->isCopy() )
t->setDropEffect( "none" );
}´;
}
dialogue
{
event = ´dndDrop()´;
action = ´{
DnDTarget* t = dndTarget();
char* data;
if ( t->getData( &data ) )
printf( "Dropped data \"%s\"", data );
else
ProcSee Reference Manual
323
Standard pTALK Functions
DnDTarget (3pTALK)
printf( "Unsupported data type" );
}´;
}
SEE ALSO
DnDSource, dndEnter, dndLeave, dndMotion, dndDrop, dndSimpleDrop, dndSimpleDrag
324
ProcSee Reference Manual
Standard pTALK Functions
Drag’n’Drop (3pTALK)
NAME
Drag’n’Drop - drag and drop functions
SYNOPSIS
void Picture::dndActivate( char* dropEffect = "copy" );
void Picture::dndDeactivate();
void Shape::dndActivate( char* dropEffect = "copy" );
void Shape::dndDeactivate();
int dndSimpleDrag( any data,
char* action = "copy",
char* typeName = 0 );
int dndSimpleDrop( any* data,
char* dropEffect = "copy",
char* typeName = 0 );
DESCRIPTION
The functions Picture::dndActivate(…) and Shape::dndActivate(…) activates a drop
zone. The argument to these functions is the drop effect. The following drop effects are
available: copy, move, link or none. The default for this argument is copy. When setting
for example copy or move as the drop effect, use the string “copy | move” as argument to
these functions. The entire picture will become an active drop zone when calling Picture::dndActivate(…). Calling Shape::dndActivate(…) will activate only the drop
zone for the shape. Notice that individual shapes can have different drop effects. Some
shapes only accept copy operations while others only accept link or move or a combination. These functions are rarely used because functionality is provided in the graphics editor GED to activate and deactivate drop zones. The dialogue triggers dndEnter(),
dndLeave(), dndMotion() and dndDrop() will not work unless the picture or shape is
enabled as an active drop zone.
To deactivate an active drop zone use the functions Picture::dndDeactivate() or
Shape::dndDeactivate().
The function dndSimpleDrag( … ) starts a new drag and drop operation. This function
is only applicable within the action part of the dndBegin(…) dialogue trigger. It will fail
if used outside the body of this event function. The first argument data is the data to put
onto the drag source object. The second argument action is the actions provided by the
source. The following actions are available, copy, move or link. If the source supports both
copying and moving of data, use “copy | move”. This argument has a default value which
is copy. The last argument is typeName. The type name allows the data source to add data
with different meaning onto the drag source object. For more information about type
name, see page 319. Returns true on success, otherwise false.
The function dndSimpleDrop(…) gets the data available from a drag and drop operation.
This function is applicable and should only be used within the action part of the dialogue
trigger dndDrop(). It returns true if the data was successfully converted and returned in
the first argument data, otherwise false. Notice that the first argument is a pointer to the
data. The second argument dropEffect is used to modify current drop effect. It can be set
ProcSee Reference Manual
325
Standard pTALK Functions
Drag’n’Drop (3pTALK)
to any of the values copy, move, link, none or a combination of these. The last argument is
typeName. This argument must match the drag source type name set either by dndSimpleDrag(…), DnDSource::setData(…) or another drag source. For more information about
type names, see page 319 or page 325.
SEE ALSO
DnDSource, DnDTarget
326
ProcSee Reference Manual
Standard pTALK Functions
edit (3pTALK)
NAME
edit - functions to manipulate the currently selected picture elements in edit mode
SYNOPSIS
void Picture::copy();
void Picture::cut();
void Picture::clear()
void Picture::paste();
void Window::paste();
void Picture::toFront();
void Picture::toBack();
void Picture::group();
void Picture::ungroup();
void Picture::align( int alignment );
void Picture::distribute( int distribution );
void Picture::setPrimitiveAttr( int attribute, int value );
void Picture::setDynPrimitiveAttr( int attribute, char* value );
int Picture::getPrimitiveAttr( int attribute );
char* Picture::getDynPrimitiveAttr( int attribute );
int Picture::numberOfSelected();
DESCRIPTION
All these functions manipulate on the current selection. If no objects are selected, they do
nothing at all.
copy() copies the currently selected objects to the clipboard. cut() removes the currently
selected objects and puts a copy of them on the clipboard. paste() is a member function
of both Window and Picture. paste() copies the objects currently on the clipboard into the
picture from which it was called. The new objects becomes the current selection. If no objects are present on the clipboard, paste() does nothing at all. clear() removes the currently selected objects from the picture.
toFront() moves the currently selected objects to the front of the shape stacking order in
the picture. toBack() moves the currently selected objects to the back of the shape stacking order.
group() groups the currently selected objects into a group shape and that group shape becomes the new current selection. If the original selection contains less than two objects,
group() does nothing. ungroup() explodes all groups in the current selection, i.e. the
group shapes are removed and their contents becomes part of the current selection.
align() aligns the currently selected objects vertically and/or horizontally. The argument
alignment can have the following values:
argument
name
comment
0
alignNone
do nothing
1
alignLeft
all objects will have the same left border position
ProcSee Reference Manual
327
Standard pTALK Functions
argument
edit (3pTALK)
name
comment
2
alignRight
all objects will have the same right border position
3
alignTop
all objects will have the same top border position
4
alignBottom
all objects will have the same bottom border position
5
alignCentre
all objects will be centred both in x and y direction
6
alignHCentre
all objects will be centred to the same x position
7
alignVCentre
all objects will be centred to the same y position
distribute() distributes the objects evenly in the vertical or horizontal direction. The argument distribution can have the following values:
argument
name
comment
0
distributeNone
do nothing
1
distributeEquidistant
not implemented
2
distributeSpaced
not implemented
3
distributeHCentre
distribute centre positions evenly horizontally
4
distributeVCentre
distribute centre positions evenly vertically
5
distributeHEdge
adjust horizontally to equal spacing between
6
distributeVEdge
adjust vertically to equal spacing between
setPrimitiveAttr() sets the primitive attribute given as argument to the value given as argument for all currently selected objects. setDynPrimitiveAttr() set the primitive attribute given as argument to the dynamic value given as argument for all currently selected objects. The
value is a character string, and is parsed as an expression in the function language. getPrimitiveAttr() returns the value of the primitive attribute given as argument for the last (most in
front) of the currently selected objects. If this attribute has a dynamic binding, the return value is undefined. setDynPrimitiveAttr() returns the dynamic value of the primitive attribute
given as argument for the last (most in front) of the currently selected objects. The return value is the function language source code of the dynamic expression, or an empty string if the
attribute is not dynamic.
328
ProcSee Reference Manual
Standard pTALK Functions
edit (3pTALK)
If no objects is currently selected, then setPrimitiveAttr(), getPrimitiveAttr(), setDynPrimitiveAttr(), and getDynPrimitiveAttr() set/get RTM’s internal defaults for the
attribute. These internal defaults are used when new objects are instantiated from the
function language, for example by newRectangle(). The attribute codes used as argument
are given in the table below (they are also found in the include file <AttrCodes.h>:
code
name
0
PaVisibility
6
PaXcoord
7
PaYcoord
8
PaForegroundColour
9
PaBackgroundColour
10
PaPattern
11
PaLineWidth
12
PaForegroundFillColour
13
PaBackgroundFillColour
14
PaFillPattern
15
PaWidth, PaRadius, PaXradius
16
PaHeight, PaYradius
17
PaStartAngle, PaFont
18
PaOpeningAngle
numberOfSelected() returns the number of selected objects, zero if no objects are currently selected.
SEE ALSO
create(3pTALK) in "ProcSee Reference Manual"on page 306
Picture(3pTALK) in "ProcSee Reference Manual"on page 395
Window(3pTALK) in "ProcSee Reference Manual"on page 488
ProcSee Reference Manual
329
Standard pTALK Functions
editWindow (3pTALK)
NAME
editWindow - set a picture in edit mode.
SYNOPSIS
void editWindow(char * windowName, int editState, char * optName, int optData = 0);
DESCRIPTION
The editWindow() function is used to change the edit mode of a picture displayed in the window windowName. This function is mainly intended for use in editor applications.
Pictures have the following editStates:
0 normal mode. (Called test mode in the ProcSee Editor).
1 select mode. Used for interactive selection and moving of shapes.
ShapeClassId draw mode. Used for interactive drawing of shapes.
ShapeClassId can be one of the following constants:
pCirArcClass, pEllArcClass, pCircleClass, pEllipseClass, pDiaAreaClass, pImageClass,
pLineClass, pPolygonClass, pRectangleClass, pTextClass, pInstanceClass, pTrendClass,
pComShapeClass, pScaleClass, pRoundRectClass.
These constants are found in the file $PROCSEE_DIR/include/P3ShapeClassId.h.
If editState is pInstanceClass the optName parameter holds the name of the class to instantiate. If editState is pImageClass, the optName holds the file name of the imagefile. If editState are pEllArcClass or pCirArcClass the optName holds the string "chord" or the string
"slice", which makes the arcs of the requested type. If editState is pComShapeClass, optName is the ComClass to instantiate. In all other cases the optName parameter should be the
empty string "".
The optional parameter optData can have the following values, ored together:
• 0x0100 Use the cursors defined in the application, instead of the default edit cursors.
When editState is pComShapeClass, the following values can also be used:
• 0x0001 Give the comShape a name automatically.
• 0x0002 Use the RTM internal default colours and font (set with setPrimitiveAttr()) when
creating the comShape, instead of the comShape defaults.
When the picture is in a draw mode, it waits for the end user to press the left button to place
a shape in the picture. Some shapes have a rubber band that is used for the interactive drawing of the shape. More information of how this drawing is performed, are presented in the
ProcSee Users Guide.
330
ProcSee Reference Manual
Standard pTALK Functions
editWindow (3pTALK)
EXAMPLES
editWindow("myWindow", 1, ""); // Make selection and moving available
editWindow("myWindow", 631, "slice"); // Interactive drawing of elliptic arc slices.
editWindow("myWindow", 0, ""); // Set the picture into normal mode.
SE ALSO
PfGetWindowChanges(3C) in "ProcSee Reference Manual"on page 214
ProcSee Reference Manual
331
Standard pTALK Functions
environment (3pTALK)
NAME
environment - functions for getting and setting environment variables.
SYNOPSIS
char* getenv( char* name );
int
putenv( char* name, char* value );
DESCRIPTION
getenv() searches the environment list for a string of the form name=value, and returns a
pointer to the string value if such a string is present. Otherwise, getenv() returns an empty
string.
putenv() adds or changes an environment variable. The arguments are the name of the environment variable (name) and the value (value). The function returns 1 if the environment
variable was successfully added/changed, otherwise 0.
NOTES
Unlike its C-code equivalent, ProcSee getenv() returns an empty string (and not a NULL
pointer) if the environment variable doesn’t exist.
332
ProcSee Reference Manual
Standard pTALK Functions
event (3pTALK)
NAME
event - event handling functions used in dialogues
SYNOPSIS
// event trigger routines:
int
buttonPressed( int button );
int
buttonReleased( int button );
int
buttonDoubleClicked( int button );
int
buttonTripleClicked( int button );
int
buttonRepeated( int button );
int
keyPressed( int key );
int
keyReleased( int key );
int
cursorMoved();
int
mouseWheel();
int
shapeEntered();
int
shapeLeft();
int
viewableStateChanged( int mask = -1 );
int
windowClose();
Window*
windowEntered();
Window*
windowLeft();
Window*
windowMoved();
Window*
windowResized();
Window*
windowMapped();
Window*
windowUnmapped();
Shape*
focusLost();
// Obsolete, use lostKeyFocus()
Shape*
gotKeyFocus();
Shape*
lostKeyFocus();
Shape*
trendUpdated();
Shape*
limitsChanged();
Picture*
pictureDisplayed();
Picture*
pictureUndisplayed();
Picture*
beforePictureUpdate();
Picture*
afterPictureUpdate();
DnDSource* dndBegin( int button );
DnDTarget* dndDrop();
DnDTarget* dndEnter();
DnDTarget* dndLeave();
DnDTarget* dndMotion();
// event status routines:
int
buttonIsDown( int button );
int
shiftIsDown();
int
controlIsDown();
int
altIsDown();
int
metaIsDown();
float
cursorX();
float
cursorY();
float
Shape::shapeCursorX( char* flags=0 );
float
Shape::shapeCursorY( char* flags=0 );
Picture*
eventPicture();
Picture*
lastSelectionPicture();
ProcSee Reference Manual
333
Standard pTALK Functions
// misc:
void
void
void
void
void
event (3pTALK)
ungrabPointer( int mode );
Window::postKeyEvent( int keyCode, int keyEvents );
Picture::postKeyEvent( int keyCode, int keyEvents );
Window::postMouseButtonEvent( int buttonNo, int buttonEvents );
Picture::postMouseButtonEvent( int buttonNo, int buttonEvents );
DESCRIPTION
These functions are typically used in the trigger and action part of dialogues. They come in
three categories as illustrated in the above listing. The event trigger routines should be used
in the trigger part of the dialogue. In fact, there should always be at least one call to a trigger
routine in a dialogue trigger! The event status routines all return various information concerning the last event that occurred in the system.
X-Windows numbers mouse buttons from 1 to 5; on a three button mouse the numbers 1 to
3 corresponds to the left, middle and right button respectively.
X-Windows uses so-called keysyms to index keyboard characters. For normal printable characters, these keysyms corresponds to ASCII values. For special characters like function keys,
the keysym values typically is in the range 0xff00 to 0xffff. The X-Windows utility program
xev(1) can be used to find the keysym value corresponding to a given keyboard character.
A zero argument to the event functions can be thought of as the value “ANY”, while a zero
return value can be thought of as the value “NONE”.
buttonPressed() takes one argument button, which corresponds to an X-Window button
number. If button is non-zero, buttonPressed() returns the value of button if the given
mouse button was pressed, zero otherwise. If button is zero, buttonPressed() returns zero if
no mouse button was pressed, otherwise it returns the number of the pressed button.
buttonReleased() behaves identically with buttonPressed() except for that it tests for the
release of mouse buttons.
buttonDoubleClicked() and buttonTripleClicked() behave identically with buttonPressed() except for that they test for mouse double/triple clicks.
buttonRepeated() tests for button events that are repeated. When a mouse button has been
kept down for a certain period of time (called AutoRepeatDelay), the system will start to generate repeated events. These events are generated at a certain time interval (called
AutoRepeatInterval) until a button is pressed or released, or until ungrabPointer() is called.
The button argument is similar to that of buttonPressed().
keyPressed() takes one argument key, which corresponds to an X-Window keysym value. If
key is non-zero, keyPressed() returns the value of key if the given keyboard character was
pressed, zero otherwise. If key is zero, keyPressed() returns zero if no keyboard character
was pressed, otherwise it returns the keysym number of the pressed key.
keyReleased() behaves identically with keyPressed() except for that it tests for the release
of keyboard characters.
cursorMoved() returns true if the cursor was moved, false otherwise.
334
ProcSee Reference Manual
Standard pTALK Functions
event (3pTALK)
The mouseWheel() dialogue trigger returns a value different from 0 when the mouse
wheel is rolled, 0 otherwise. Rolling the wheel towards you returns a value <0, rolling the
wheel in the opposite direction return a value >0. By rolling the mouse slowly the dialogue will be triggered repeatedly with values of +/- 1, rolling faster may return larger values.
shapeEntered() returns true when a shape is entered, shapeLeft() returns true when a
shape is left. These functions are based on a shape hierarchy where some shapes are children of other shapes. Typically an instance is a shape that have children shapes. shapeEntered() returns true when the mouse pointer is moved into a shape or any of its children
shapes, otherwise it returns false. shapeLeft() returns true when the mouse is moved out
of a shape. This applies to all descendent shapes. Note that overlapping shapes often do
not have a parent/children relationship.
The viewableStateChanged() dialogue trigger returns a bit-mask with the bits set that has
changed in the viewableState of a shape. The optional mask argument is anded with the
result. The returned bit-mask is composed of the bits from the ViewableState enumeration. The returned bits contains changes in the mapped and displayed state of the picture,
in addition to the visibility state of the shape calculated from the visibility of the shape
itself and the visibility of its parent shapes. This dialogue trigger is called when the RTM
becomes idle, a short time after a picture is displayed/undisplayed, a window is mapped/
unmapped, or visibility attributes are changed. See also the Shape::getViewableState()
function on page 433. An example of use is:
dialogue
{
event = ‘viewableStateChanged( ViewableState.viewable )‘;
action = ‘{
if ( getViewableState( ViewableState.viewable ) )
printf( "shape is viewable" );
else
printf( "shape is not viewable" );
}‘;
}
windowClose() returns true if closing the window from the window frame. This trigger
works only in dialogues immediately under pictures.
If the cursor is moved into a window, then windowEntered() returns a pointer to that window, otherwise it returns 0. If the cursor is moved out of a window, then windowLeft()
returns a pointer to that window, otherwise it returns 0. These functions only works in dialogues immediately under pictures.
windowMoved() returns a pointer to the window that has been moved, otherwise 0.
windowResized() returns a pointer to the window that has been resized, otherwise 0.
windowMapped() returns a pointer to the window that has been mapped.
windowUnmapped() returns a pointer to the window that has been unmapped.
These window event triggers only works in dialogues immediately under pictures.
ProcSee Reference Manual
335
Standard pTALK Functions
event (3pTALK)
The routine focusLost() is only valid for Text shapes. Note that this dialogue trigger is obsolete. Use insead the event function lostKeyFocus(). The return value is a pointer to the text
shape about to loose its focus, otherwise 0. Only one text shape can be in edit mode in a picture. All keyboard input will be directed to this text shape. When setting another text shape
in edit mode the text shape currently in edit mode will loose its focus. Typically an action
part of this trigger function will be to save or discard the text buffer.
The event function gotKeyFocus() returns a pointer to the shape receiving the key focus. Notice that all keyboard input will be directed to the shape having the key focus. When a shape
receives the key focus, a lostKeyFocus() event will be sent to the shape about to loose the
key focus.
The event function lostKeyFocus() returns a pointer to the shape which has lost the key focus. This event is raised either when calling the pTALK function Shape::setKeyFocus(), or
when the key focus is changed automatically, for instance if a Text shape is set to edit mode.
trendUpdated() returns a pointer to a Trend shape after it has updated the trend diagram
based on the data received from the trend logger, otherwise 0. The purpose with this function
is to update other parts of the picture if these parts depends on the new trend data. This problem can only arise when using an external trend logger because the update() will be executed
before the trend data is received.
limitsChanged() returns a pointer to a TrendPress shape when the autoscale limits have
changed.
pictureDisplayed() returns a Picture pointer just after the picture is displayed using displayPicture(). pictureUndisplayed() returns a Picture pointer just before the picture is undisplayed. The pictureDisplayed and pictureUndisplayed dialogues can be located in
application, window or picture scope.
beforePictureUpdate() and afterPictureUpdate() returns a Picture pointer before and after a picture is updated, respectively. The purpose with these two events are to trig a dialogue,
if some action have to take part, before and after an update. These dialogues can be located
in application, window or picture scope.
dndBegin(…) dialogue trigger returns true when a drag and drop operation can be started.
The argument button corresponds to a button number. A zero value means all buttons. This
dialogue trigger returns a pointer to a DnDSource objects which acts as a source for a drag
operation. The object DnDSource can only be obtained in the action part of this trigger. Calling member functions on DnDSource or calling the global function dndSimpleDrag(…)
has a meaning only within the action part of dndBegin(…). The dialogue trigger dndBegin(…) can be applied to shapes, pictures and windows only.
dndDrop() dialogue trigger returns true when dropping an object in an active drop zone.
dndEnter(), dndLeave() and dndMotion() returns true when entering, leaving or moving
the mouse cursor in a drop zone during a drag and drop operation, respectively. These dialogue triggers can be applied to shapes, pictures and windows only. These triggers return a
pointer to an active DnDTarget class object.
Calling member function on DnDTarget or calling the global function dndSimpleDrop(…)
has a meaning only within the action part of these trigger functions. Notice that these event
functions must be activated before they can be used. Functionality is provided in the graphics
editor GED to activate and deactivate drop zones. The following functions can also be used
336
ProcSee Reference Manual
Standard pTALK Functions
event (3pTALK)
to activate and deactivate drop zones, even if they are rarely used: dndActivate(…), dndDeactivate(), Picture::setPictureFlags(…), Shape::setShapeFlags(…) and Window::setWindowFlags(…).
buttonIsDown() takes one argument button, which corresponds to an X-Window button
number. If button is non-zero, buttonIsDown() returns 1 if the given mouse button is currently being pressed, i.e. is down, zero otherwise. If button is zero, buttonIsDown() returns zero if no mouse button is currently down, otherwise it returns 1. Note that
buttonIsDown() reports on the previous event, not the event that triggered the action.
shiftIsDown() returns true if one of the shift keys are currently being pressed, i.e. is
down, false otherwise.
controlIsDown() returns true if the control key is currently being pressed, i.e. is down,
false otherwise.
altIsDown() returns true if the alt key is currently being pressed, i.e. is down, false otherwise.
metaIsDown() returns true if the meta key is currently being pressed, i.e. is down, false
otherwise.
cursorX() and cursorY() returns the current cursor position in world coordinates, i.e. in
picture coordinates.
shapeCursorX() and shapeCursorY() return the coordinates of the cursor, in the shapes
coordinate system. See Shape (page 432) and xyConv (page 497) for more information.
eventPicture() returns a pointer to the picture in which the last event occurred.
lastSelectionPicture() returns a pointer to the picture where a shape last was marked for
selection or unmarked. It was added for compatibility with earlier versions of ProcSee.
Always check if this function returns 0 before using it. Since the global functions copy(),
cut() and clear() from release 2.3 have become member functions in the picture class, this
function is normally used when creating these functions in the application scope. An example of the function copy() in the application scope is given in the examples section.
ungrabPointer() is used to eliminate the effect of an active grab. When a mouse button
is pressed, the shape (if any) and window catching that event will grab the cursor. As long
as the cursor is grabbed, the "grabbing" object will receive all incoming events, regardless
of the cursor position. A grab is active until all mouse buttons are released or the function
ungrabPointer() is called. Calling ungrabPointer() with a parameter value of 1 means
that the window will still grab the cursor, but the shape will not. Calling ungrabPointer()
with a parameter value of 3 means that neither the window, nor the shape will grab the
cursor.
postKeyEvent(...) posts a user generated key event or key release event and add this event
on the message queue in the RTM. When the RTM process this user generated event, it
will be handled just as if it was a key that was actually pressed on the keyboard. That is,
key pressed and key release dialogues will be invoked in the application. The argument
keyCode is the key code to post. This is the same key code which are returned by the event
trigger functions keyPressed(0) and keyReleased(0). The second argument keyEvents
determines what kind of events to generate. Legal values for this argument are: key press
(1), key release (2) or both (3).
ProcSee Reference Manual
337
Standard pTALK Functions
event (3pTALK)
postMouseButtonEvent(...) posts a user generated mouse button press or mouse button release event on the message queue in the RTM. When the RTM process this user generated
event, it will be handled just as if it was a mouse button that was actually pressed or released.
That is, mouse button dialogues will be invoked in the application, buttonPressed(...), buttonReleased(...), buttonRepeated(...), buttonDoubleClicked(...) and buttonTripleClick(...). The argument buttonNo is the virtual mouse button being pressed. The following
values are legal for this argument: left (1), middle (2), right (3). The last argument buttonEvents determines what kind of events to generate. Legal values for this argument are: button
press (1), button release (2) or both (3).
WARNINGS
Be aware that all event functions returns data associated with the last event that occurred. The
only place where the contents of this event is predictable is within a dialogue trigger or action. If data returned from these functions are needed elsewhere, store the data in variables
or attributes.
EXAMPLES
application TestApp
{
...
function `copy()
{
Picture* p = lastSelectionPicture();
if ( p ) p->copy();
}`
...
}
338
ProcSee Reference Manual
Standard pTALK Functions
EventPlot (3pTALK)
NAME
EventPlot - user interface component for visualizing events in trend diagrams
SYNOPSIS
// attributes
char* EventPlot::event;
float EventPlot::offset;
char* EventPlot::shape;
char* EventPlot::theTrendPres;
DESCRIPTION
The EventPlot class is used for visualizing events in a trend diagram. The EventPlot instance must be connected to an event type specified in the trend variable configuration
file. When an event of the requested event type is generated using either the pTALK functions TrendLog::event or TrendLog::events or the API functions PfEvent or PfEvents,
instances of any class or basic shape can be created to visualize the event in the trend diagram. The EventPlot class can be initialized to generate different classes or shapes for
different type of events based on the information stored in the event data.
The attribute event is a text string and must be set equal to the name of an event type specified in the trend variable configuration file.
The shape attribute can be set equal to the name of a user defined class or a pTALK function. When setting this attribute equal to a class in the application or library, all events
will produce instances of the same class. If this attribute is set to a pTALK function, different shapes can be created based on either the time stamp when the event occured or the
event data. The callback function that is called from the EventPlot shape will be called
with the following arguments: the full name of the EventPlot shape, the time when the
event occured and a pointer to the event data. The callback function has the following prototype:
Shape* eventCB( char* fullName, int timeStamp, void* data )
Shapes created in this callback function must use the fullName argument as the parent’s
fullname when they are created. This is extremly important. If this rule is broken the event
shapes will not move as expected. The data argument will be of the same type as the event
data type which is defined in the trend variable configuration file. If for instance the event
type is defined to be of type float, the last argument will be a pointer to a float variable.
The void pointer used in the callback function can be changed to be a pointer of the actual
data type, for instance float* data. The return value from the callback function must be a
pointer to the created shape. If for any reason no shape is created for the event then 0 must
be returned. When creating the shapes, use the position (0,0) for x and y. The shapes will
be automatically repositioned by the EventPlot shape and the visibility attribute will be
set to visible. Do not call the pTALK function updateShape() from within the callback
function.
ProcSee Reference Manual
339
Standard pTALK Functions
EventPlot (3pTALK)
The attribute theTrendPres can be set to 0 or to the name of a trend presentation (TrendPres) curve in the same trend diagram. If setting this attribute to 0 all events will be put in
the middle of the trend diagram. On the other hand if this attribute is set to a trend curve, the
events will follow the trend curve at the time stamp when the events occured. It will look as
if the events are placed on the trend curve.
The attribute offset will move the position of the shapes up or down compared to the position
they would have been given unless this attribute had not been specified. A negative value
moves the shapes up and a positive value down. For instance, setting this attribute to half the
height of the trend diagram and setting the attribute theTrendPres to 0 will position the
shapes right below the trend diagram.
EXAMPLES
/* An example of an event plot creating instances of different */
/* classes based on the event data. The data type is of a user */
/* defined alarm struct (defined in a pdat file).
*/
Shape* myEventCB( char* ofName, int theTime, Alarm* alarm )
{
if ( alarm->state == 1 )
{
// High alarm. Create an instance of the class CHiAlarm.
CHiAlarm* h = newInstance( ofName, 0, "CHiAlarm", 0, 0 );
// Intitialize the instance by calling a user defined
// function using the event data.
h->Initialize( alarm );
return h; // Return the instance.
}
if ( alarm->state == 2 )
{
// Lo alarm. Create an instance of the class CLoAlarm.
CLoAlarm* l = newInstance( ofName, 0, "CLoAlarm", 0, 0 );
// Save the event data Alarm in the CLoAlarm instance.
l->Alarm = alarm;
return l;
}
// Do not create any instance for other alarm states.
// Just return 0.
return 0;
}
...
trend T
{
...
eventPlot myEventPlot
{
event = "Ev321_Alarm"; // The name of the event type
shape = "myEventCB"; // Points to the call-back function
offset = 0;
340
ProcSee Reference Manual
Standard pTALK Functions
EventPlot (3pTALK)
theTrendPres = "myTP";
}
...
}
SEE ALSO
TrendLog(3pTALK) in "ProcSee Reference Manual"on page 462
Trend(3pTALK) in "ProcSee Reference Manual"on page 455
ProcSee Reference Manual
341
Standard pTALK Functions
execute, executeAsync, eval (3pTALK)
NAME
execute, executeAsync, eval, strEval - compile and execute a pTALK statement
SYNOPSIS
void execute( char* source, ... );
void executeAsync( char* scope, char* source, ... );
any eval( char* scope, char* source, ... );
char* strEval( char* scope, char* source, ... );
DESCRIPTION
execute() takes one argument source and can contain all formatting options supported by
printf(). Optional formatting arguments can follow the first argument.
The source string is compiled as a compound statement, meaning that the result isn’t returned
back to the caller, if the source is be surrounded by the characters ’{’ and ’}’. It is executed
only if the source compiled successfully. The statement is compiled and executed within the
scope of the owner of the caller, which means that the code executed doesn’t have access to
local variables defined in the function containing the execute() call. Example:
int a = 45; // attribute a, at same scope as f().
void f()
{
int a = 123; // local variable a, not accessible from execute().
execute("{ printf(\"%%d\",a); }");
}
When f() is called, the value printed is 45. Also note the %% and the \" in the example. The
\" is required because it is a string within a string. The %% is needed because of the printf
formatting of the source argument to execute(). %% is then converted to a single % used
by the printf in the source string.
executeAsync() behaves much like execute() with two important exceptions: The statement
is compiled and executed within the scope given as first parameter. And - the statement is
executed asynchronously. This means that the statement is queued up internally in RTM and
compiled and executed when RTM becomes idle. executeAsync() is useful for performing
background operations.
eval() and strEval() accept the same arguments as executeAsync(). The difference is that
these methods compiles and runs the source code synchronously and returns the result of the
execution back to the caller.
The integer value 1 is returned from the eval() function if the execute string passed as argument is a compound statement.When an expression is executed, the data type of the value
returned to the caller is the data type of the pTALK evaluation. For instance, the result of the
expression float value = eval(fullName(), "4*3.14"), is the value 12.56, where the data type
of the result is a float.
342
ProcSee Reference Manual
Standard pTALK Functions
execute, executeAsync, eval (3pTALK)
The result of the method strEval() is an empty string if the source code is a compound
statement. If the source code is an expression, the result of the evaluation is returned back
to the caller as a character string. For instance, the expression eval(fullName(), "4*3") returns the character string "12", while the compound statement eval(fullName(), "{4*3;}")
returns the empty string "". The value 0 is returned in case of errors, i.e. if the compilation
or the execution of the source code fails.
execute() is useful for executing statements stored in variables, or entered by end users at
run-time. Another example is delayed compilation:
void createR1()
{
newRectangle(fullName(), "R1", 100, 100, 200, 150);
execute( "{ R1.foregroundFillColour = green; }" );
}
In this example, the compilation of the statements is delayed, because the object R1
doesn’t exist at the time createR1() is compiled.
ProcSee Reference Manual
343
Standard pTALK Functions
exportDxf (3pTALK)
NAME
exportDxf - export Dxf-Script code to file of a ProcSee picture.
SYNOPSIS
int exportDxf( char* sourceName, char* targetName,
int xMax, int yMax, int exportMode );
DESCRIPTION
exportDxf() takes five arguments, sourceName and targetName to make a Dxf file, named
from the second argument; targetName, and placed in the current directory. This file reflects
the graphical state of the displayed ProcSee picture, specified by the first parameter; sourceName. The xMax and yMax are width and height of the screen where the AutoCad is running.
exportMode controls what dxf codes to use in the exported dxf file. A value of 0 indicates
that the graphics in the exported dxf file is made as identical as possible to the original ProcSee picture. A value of 1 indicates that solid circles in ProcSee are to be exported as circle
outlines in the dxf file.
Due to different font representations in ProcSee and dxf, a font conversion file
"x2dxfFonts.pfon" is needed. This is a conversion between X11 fonts and dxfScript fonts.
Tuning of the width and height parameters in the conversion file might be necessary to get
the correct size of the dxf fonts.
If the program/system that is going to import the dxf file is running on a different computer
system, the dxf file might need to converted. If the system is running on a PC running MSDOS, the unix2dos program must be run on the generated file.
If your AutoCad version always starts up with a default header when importing a dxf-file, it
will only read the ENTITIES section of the file. Tables specified in the dxf-file header and
later used, will become undefined. The Linetypes must be created in the autocad before importing the dxf-file. The linetype names are described under LTYPE following the 3 group
code in the dxf-file. The same goes for style tables( the fonts ). The Blocks specified will also
be unknown.
EXAMPLE
exportDxf( "MyPicture", "MyPicture.dxf", 1024, 768, 0 );
x2dxfFonts.pfon:
#
# X11 fonts:
# ----------
scale:
# dxf fonts: height width
------------
-adobe-courier-bold-o-normal-*-12- ROMANS
-adobe-courier-bold-r-normal-*-12- ROMANS
344
0.9
1.0
1.0
0.7
ProcSee Reference Manual
Standard pTALK Functions
exportImage (3pTALK)
NAME
exportImage - creates image of window(s) or picture and exports the result to clipboard
or file.
SYNOPSIS
int Application:exportImage( char* sourceName, char* targetName,
char* format=0, char* mode=0, [Rect*|Rect**|Size*|Size**] sizeOutput=0 );
DESCRIPTION
exportImage() exports an image containing either one or several windows or a single picture that are displayed in the RTM either to clipboard or file. This function supports screen
capturing directly from the screen or drawing to image. When capturing directly from the
screen other windows that overlaps the RTM pictures will become part of the captured image. The advantage of using screen capturing mode is that what is displayed on the screen
is what is saved in the image. When drawing into the image the window border will also
be drawn which will not produce an exact copy of the window manager frame. The advantage of using drawing mode is that overlapping windows will not affect the image
dump. The mode argument is used to select source (capturing) mode.
If exportImage fails, it will return 0. If everything is OK, it will return a number different
from 0.
The argument sourceName controls the source that will be exported to an image. The
RTM supports three different source types, which are Display, Window and Picture. This
can be specified using a string containing the fullname of the object, or by specifying a
pointer to the object.
The argument targetName is either an empty string (""), null pointer (0) or a file name
with or without a file extension. If an emtpy string or a null pointer is specified the image
dump will be copied to the clipboard, otherwise the specified file. If the file extension is
omitted the RTM will add a file extension based on the image format.
The image format is specified with the argument format. The RTM supports the following graphic formats:
• tiff - Tag Image File Format
• png - Portable Network Graphcis format
• xwd - X Windows Dump format
• bmp - Windows bitmap format
The format argument must be set to one of the file formats listed above. In ProcSee compression is only used in the png graphics file format. Note that this argument is not used
if the image is copied to the clipboard. If it is set to an empty string ("") or a null pointer
(0), the extension of the file given in targetName will be used, if it is one of the legal formats, if not the format will be png.
ProcSee Reference Manual
345
Standard pTALK Functions
exportImage (3pTALK)
The argument mode is used to specify additional options. By default the screen capturing
function exportImage() will capture the image from screen using black background, white
window background, border frames, and give an error if the specified file exists. This default
behaviour can be changed using the argument mode.
The following options for the mode argument can be specified:
• exists
• source
• frame
• backgroundColour
• windowColour
The option exists is used to control whether to overwrite, enumerate or return with an error
if the specified file exists. Setting exists=overwrite will overwrite the file if the file exists.
Setting exists=enumerate will add additional numbers to the file name. The RTM will create
a file name using underscore plus three digits. It will start enumerating from 0. The file name
produced by the RTM will be on the format <file>_###.<type>, where ### will be set to values in the range 000 to 999. For instance rtmImage_001.tiff. If setting exists=error the RTM
will return with an error if the image file exists when executing the exportImage() function.
Default is that the RTM will return with an error if the file exists.
The source option is used to control whether the image will be captured from the screen or
drawn. Set source=draw to draw the image. Set source=screen to capture the image directly
from the screen. The latter is default.
The frame option can be set to yes or no. If frame=yes is specified the exportImage() function will dump all the RTM windows with the window manager frames visible. If frame=no
the window frames will not be included in the image dump. The default is that frames are on.
The option backgroundColour is used to specify the colour to use for the image background. If capturing several windows using the display as source the image may have regions
that are not occupied by RTM windows. These areas will be cleared using this backgroundColour. The syntax for setting the background colour is backgroundColour=<colour>,
where colour is a ProcSee colour that is defined in the application. For instance red, green,
blue etc. The default background colour is black.
The option windowColour is only applicable if the ProcSee application uses exported windows and the source is drawing into image. The area between the window frame and the exported ProcSee windows will be cleared using this colour. The syntax for using this option
is windowColour=<colour>, where the colour is one of the colours defined in the RTM. The
default value for windowColour is white.
The options are separated using comma (,). Note that it is not necessary to type the entire
words when specifying the options. Just see to it that the abbreviated words are unique. However, the colour names can not be abbreviated. Instead of typing "exists=overwrite,
source=draw, frame=yes, backgroundColour=red", you may type "ex=ov, so=dr, fr=yes,
ba=red".
The mode argument can also specify the resource styles to use. For information about the
values that controls this, see resource styles on page 419.
346
ProcSee Reference Manual
Standard pTALK Functions
exportImage (3pTALK)
The sizeOutput argument is an optional argument for getting the size of the exported image, and optionally the position on the screen that refers to the upper left corner of the image. The size is in number of pixels in the exported image. The position is in pixel
coordinates.
If the type of this argument is Size*, the object must exist before calling exportImage. If
the type is Size**, exportImage will create a new Size object, and set the argument to
point to this. If the type of this argument is Rect* or Rect**, the same applies, but the Rect
object will also get the position of the area on screen that the image is captured from.
EXAMPLE
// This example dumps the display DefaultDisplay1 to the clipboard.
exportImage( "DefaultDisplay1", "", "", "so=sc, fr=yes, ba=white" );
// This example dumps the window MainWin to the tiff file Img.tiff
exportImage( "MainWin", "Img", "tiff", "ex=ov" );
// This example dumps the picture P543 to the png file Img_###.png
exportImage( "P543", "Img", "png", "ex=en" );
// Using a Size object to get the size of the genereated image:
Size* A = newSize(); // Create the object, that will hold the size.
exportImage( Display2, "Img", "png", "", A ); // After this call, A created above contains the size.
// or:
Size* A;
exportImage( Display2, "Img", "png", "", &A ); // After this call, A points to a new Size object.
ProcSee Reference Manual
347
Standard pTALK Functions
exportPostScript (3pTALK)
NAME
exportPostScript - export PostScript code to file or printer.
exportPostScriptEx - export PostScript code to file or printer. Part of the window is specified.
SYNOPSIS
int exportPostScript( char* sourceName, char* targetName,
char* printerName, char* options="" );
int exportPostScriptEx( char* sourceName, char* targetName,
char* printerName, int orientation,
int offsetX, int offsetY,
int width, int height, char* options="" );
DESCRIPTION
exportPostScript() takes three arguments, sourceName, targetName, and printerName to
make a PostScript file, named from the second argument; targetName, and placed in the
start-up or fullpath directory. This file reflects the graphical state of the displayed ProcSee
pictures. The first parameter; sourceName, is able to convert and export four different sources; Picture, Window, Display, and Application. Use the name of the source known to the
ProcSee system. When exporting a picture, use only the picture-name without extension. For
a display, use the Display object name. And when exporting an application, remember to
start the application-name with two leading colons; like "::myApp".
The second parameter; targetName, is the name of the file where the PostScript code is exported. If this parameter is empty, the system is executing an unix printer command specified
in the printerName parameter described below, and sending a temporary file to this printer.
The printerName parameter contains the name of a printer tuning file. The tuning file contains margin definitions and colour tuning factors. The printer tuning file is described in
printer(3pTALK). printerName should contain the file name without the ".pprn"extension,
or default values will be used. There is an example of this file, with extension ".pprn", delivered in each release of ProcSee. If printerName is empty, default values for a printer is
used. Another file that is required in order to get a successful export is the "x2psFonts.pfon"
file. This is a conversion between X11 fonts and PostScript fonts. Example files are located
in the $PROCSEE_DIR/etc directory.
exportPostScriptEx() takes five more arguments, orientation where 0 is best fit, 1 is portrait
and 2 is landscape, offsetX, offsetY, width and height specify the part of the display to be
printed.
The optional parameter options can bu used to specify the resource styles to use. For more
information about the values of the options parameter, se resource styles on page 419.
EXAMPLE
exportPostScript( "MyPicture", "MyPicture.ps", "printer" );
348
ProcSee Reference Manual
Standard pTALK Functions
exportPostScript (3pTALK)
The above example will export the picture "MyPicture.ppic"(that is mapped on the
screen), and put it into a PostScript file named "MyPicture.ps". The "printer.pprn" file
have to be present in the $PROCSEE_DIR/etc directory, the $HOME directory, or in
the directory containing the .pctx application file. The x2psFonts.pfon file have to be present in in the directory containing the .pctx application file, the directory where the RTM
was started or in the $PROCSEE_DIR/etc directory.
An example of the printer.pprn file is found on the printer(3pTALK) manual page.
Example of the x2psFonts.pfon file:
#_______________________________________________________________#
#
#
# Relations between fonts used in the ProcSee application
#
# resource file (****.pctx) (X11 font names),
#
# and the relating PostScript fonts.
#
#
#
# The ProcSee system will interpret the beginning of each line as
#
# either a comment line (with a leading # or //),
#
# or a legal font conversion line with X11 and PostScript
#
# font-syntax separated with one or more spaces between.
#
# If its an XLFD font you just have to include the
#
# first six -*- values of the whole name. The rest is taken
#
# care of by the system.
#
#
#
# If you want another encoding vector for your PostScript
#
# font which is often used in Scandinavian fonts dealing
#
# with special characters as aring, ae etc. You have to
#
# add an extension to this font name; like *ISOLatin1.
#
# Or create a new encoding vector yourself. Use the
#
# syntax shown in the example, "/MyVec", below.
#
#_______________________________________________________________#
# New Encoding Vector
/MyVec
[
8#133 /AE
8#134 /Oslash
8#135 /Aring
8#173 /ae
8#174 /oslash
8#175 /aring
]
# X11 fonts:
# ----------
# PostScript fonts:
-------------------
-adobe-courier-bold-o-normal-adobe-courier-bold-r-normal-adobe-courier-medium-o-normal-adobe-courier-medium-r-normal-adobe-helvetica-bold-o-normal-adobe-helvetica-bold-r-normal-adobe-helvetica-medium-o-normal-adobe-helvetica-medium-r-normal-
Courier-BoldOblique
Courier-Bold
Courier-Oblique
Courier
Helvetica-BoldOblique
Helvetica-Bold
Helvetica-Oblique
Helvetica
ProcSee Reference Manual
349
Standard pTALK Functions
exportPostScript (3pTALK)
-adobe-times-bold-i-normal-adobe-times-bold-r-normal-adobe-times-medium-i-normal-adobe-times-medium-r-normal-
Times-BoldItalic
Times-Bold
Times-Italic
Times-Roman
ife5x7
ife7x10
Helvetica*ISOLatin1
Helvetica*ISOLatin1
sap6x9
sap7x10
Courier*ISOLatin1*MyVec
Courier*ISOLatin1*MyVec
SEE ALSO
printer(3pTALK) in "ProcSee Reference Manual"on page 405
350
ProcSee Reference Manual
Standard pTALK Functions
fileNames (3pTALK)
NAME
fileNames - functions for converting file names between host format and ProcSee’s internal formats.
SYNOPSIS
char* fileNameHost( char* fileName );
char* fileNameNormal( char* fileName );
DESCRIPTION
fileNameHost() converts the argument (fileName) to host file format which is returned
from the function. On Microsoft Windows platforms the host file format includes the
drive letter and uses the backslash character, ’\’, to separate directories. The forward slash
’/’ is used to separate directories on UNIX platforms .
fileNameNormal() converts the argument (fileName) to ProcSee’s internal file format.
EXAMPLES
char* normal = "/LOCALPC/C/My Documents/Test.txt";
char* host = fileNameHost( normal ); // Returns c:\My Documents\Test.txt
ProcSee Reference Manual
351
Standard pTALK Functions
Font (3pTALK)
NAME
Font - object holding information about an X11 font.
SYNOPSIS
int
int
int
int
int
int
int
int
int
Font::width( Window* w, float scale=1.0 );
Font::height( Window* w, float scale=1.0 );
Font::ascent( Window* w, float scale=1.0 );
Font::descent( Window* w, float scale=1.0 );
Font::lbearing( Window* w, float scale=1.0 );
Font::rbearing( Window* w, float scale=1.0 );
Font::capHeight( Window* w, float scale=1.0 );
Font::xHeight( Window* w, float scale=1.0 );
Font::textWidth( char* str, int len, Window* w, float scale=1.0 );
Font* Application::getFont( int font, ::ResourceStyle* rs = 0 );
DESCRIPTION
The Font object holds information about an X11 font. The Window* parameter in the functions is a pointer to the window in which the font or text is being used. The optional scale
parameter tells the scaling of the font to use.
The width() function returns the width (in screen coordinates) of the widest character in the
font.
The height() function returns the height (in screen coordinates) of the highest character in
the font (i.e. ascent + descent).
The ascent() function returns the logical extent (in screen coordinates) of the font above the
baseline of the font. The ascent is normally greater than the capHeight.
The descent() function returns the logical extent (in screen coordinates) of the font below the
baseline of the font.
The lbearing() function returns the minimum left bearing (in screen coordinates) of the font.
The rbearing() function returns the maximum right bearing (in screen coordinates) of the
font.
The capHeight() function returns the height (in screen coordinates) of the capital characters
in the font (e.g. the height of the H character).
The xHeight() function returns the height (in screen coordinates) of the lowercase characters
without ascenders and descenders, like the x character.
The textWidth() function returns the width (in screen coordinates) of the len first characters
in the string str.
Application::getFont() returns a pointer to the Font that is given as input argument. Used to
convert integer font index back to the Font it represents. An optional ResourceStyle can be
given.
352
ProcSee Reference Manual
Standard pTALK Functions
fullName (3pTALK)
NAME
fullName - functions for manipulating an object’s full name
SYNOPSIS
char* nameOfFullName( char* fullName );
char* ownerOfFullName( char* fullName );
char* fullNameOf( any* addr );
char* nameOf( any* addr );
char* quoteId( char* id );
char* unquoteId( char* quotedId );
char* typeNameOf( char* fullName );
DESCRIPTION
nameOfFullName() takes an objects’s full name as an argument. The last part of the fullName is then returned. It behaves like if the fullName is looked up, and the function
name() is called on this object, except that the object does not have to exist. Examples:
nameOfFullName( "::myApp.someName" ) returns "someName", nameOfFullName(
"::someApp.myPict.0xe000001" ) returns "", and nameOfFullName( "::app.pict.$s-23$ )
returns "s-23".
ownerOfFullName() is splitting the full name given as argument, returning the full name
of the owner. Example: ownerOfFullName( "::app.pict.sh" ) returns "::app.pict".
fullNameOf() gets a fullName from the address given. This can be used on attributes,
functions, dialogues and variables in addition to all the other elements in the symboltable.
The fullNameOf() function is needed since the function Object::fullName() isn’t available
for attributes, functions, dialogues and variables.
nameOf() gets the name from the address given. This can be used on attributes, functions,
dialogues and variables in addition to all the other elements in the symboltable. The nameOf() function is needed since the function Object::name() isn’t available for attributes,
functions, dialogues and variables. Note that nameOf(...) is conceptually the same as
nameOfFullName( fullNameOf(...) ), and that possible ’$’-quotes is not included in the
result.
quoteId() adds ’$’-quotes around the id when the id argument is not a legal identifier. If
the id argument is a legal identifier, it is returned unchanged.
unquoteId() removes the ’$’-quotes that was added by quoteId(). If no ’$’-quotes had
been added, it will not try to remove any. In cases where the quotedId argument is not a
possible result from quoteId(), unquoteId() returns a legal identifier found at the start of
the quotedId argument. If the quotedId argument does not start as a legal identifier, an
empty string is returned.
typeNameOf() returns the type of the object passed as argument in (fullName). The argument must be the full qualified name of the object whose type to return.
EXAMPLES
char* ptr = "myApp.procLib.Valve1";
ProcSee Reference Manual
353
Standard pTALK Functions
fullName (3pTALK)
char* name;
char* ownerName;
name = nameOfFullName( ptr ); // name pointing to "Valve1"
ownerName = ownerOfFullName( ptr ); // pointing to "myApp.procLib"
char* ptrFN = fullNameOf( & ptr ); // The fullName of ptr: "::myApp.ptr"
354
ProcSee Reference Manual
Standard pTALK Functions
getDependencies (3pTALK)
NAME
getDependencies – returns a list of symbol table objects that an object depends on
SYNOPSIS
::List* getDependencies( char* fullName,
::List list = 0,
char* flags = 0 );
DESCRIPTION
The function getDependencies(…) returns a list of symbol table objects. Put in the fully
qualified name of the entry of the object in the fullName parameter and the getDependencies(…) function will find all the objects that is referenced from this object or any object under it, including references from inside of pTalk expressions. If the list argument is
given it is appended to and returned, if not, a new list is created and returned. The flags
argument can change what objects to include, and how the output is filtered. See the table
below.
flags options
description
directDependenciesOnly
Only mark the direct dependencies. The default is to find all
dependencies recursively.
asUpdate
Don't check functions and attributes, unless they are used by
other elements.
primAttrs
Mark the primitive attributes in the metaClasses, in addition
to the object it is in.
objFuncs:instance
objFuncs:class
objFuncs:both
Output functions for each instance it is in (default), or class,
or both.
valuePointers
Follow pointers in values that have no dynamics.
valueResources
Mark resources for int values on some primitive attributes.
values
Same as valuePointers,valueResources.
class=’...’
Filter the output to only the meta-classes specified here, with
+ or - for each. This is the same filtering as is used in the
getList function.
outsideOnly
Filter the output, so that only things outside the object is
reported.
insideOnly
Filter the output, so that only things inside the object is
reported.
ProcSee Reference Manual
355
Standard pTALK Functions
getDependencies (3pTALK)
flags options
description
reCompile
Force recompilation of all pTalk code. Default is to only
compile pTalk code that has not compiled successfully
before.
failedToCompile
The output is the list of symboltable objects that has pTalk
code that failed to compile, instead of dependencies.
quiet
Don’t write compile errors to output window or stdout.
debug
Write to output window or stdout the pTalk code that is recompiled.
Since this function scans the pTalk code, and tries to compile code that has not yet been compiled, it can be used to check that all code compiles. By using the failedToCompile flag, the
result is a list of objects that failed to compile, instead of the list of objects that the input object depends on.
Even though this function finds dependencies in pTalk code, content of strings are not
checked, so the fact that the following code depends on a window and a picture is not detected:
displayPicture( "MainWin", "MyPict" );
This function can be used to find dependencies. By storing these in e.g. a database-table, the
reverse can be checked, e.g. what pictures depends on a given variable.
EXAMPLE
List* L = getDependencies( "::App1.Pict1", 0, "class=’Variable’ " );
int n = L.length();
printf( "Picture Pict1 depends on %d variables", n );
for ( int i = 0; i < n; i++ )
{
printf( " %s", fullNameOf( L.get( i ) ) ); // The fullName of each variable.
}`
SEE ALSO
getList, fullNameOf, List
356
ProcSee Reference Manual
Standard pTALK Functions
getErrorString (3pTALK)
NAME
getErrorString – returns the string describing an error code
SYNOPSIS
char* getErrorString( int errorCode );
DESCRIPTION
The function getErrorString() returns a string for each error code. This function does the
same as the API function PfGetSystemError() documented on page 211. This function can
be used for the return values of the pTALK functions load, save, and document.
ProcSee Reference Manual
357
Standard pTALK Functions
getList (3pTALK)
NAME
getList – returns a list of matching symbol table objects contained in an object
SYNOPSIS
::List* getList( char* fullName, ::List list = 0, char* flags = "class=’all’ " );
DESCRIPTION
The function getList(…) returns a list of symbol table objects. Put in the fully qualified name
of the entry of the parent object and the getList(…) function will find all the objects that
matches class in the flags argument. The first argument fullName is the name of the parent
object. The second argument list is a List object where the matching objects are put. If the
list argument is 0 a new object of type List is created and returned. If a List object is specified
the matching objects are appended to the existing list. The list is not cleared.
The following values can be specified for the flags argument; class, levels, name, ignoreCase, descendInto, inherited, onlyInherited, and selected. The default value for the flags argument is class=’all’, meaning that all objects will be put into the list. The levels flag requires
an int-value, like levels=3. The default for levels is 0. Only objects at current level will be
traversed when the levels flag is zero. Setting this value to a non-negative value will recursively scan this number of sub-levels for objects matching the flag class. The name=’match’
is used to only store symbol table objects that have a name that matches the match string. The
match string can contain ’*’ for 0 or more characters, and ’?’ for matching one character, in
addition to all other characters that will match the character itself. E.g. for finding all elements that have 4 letters in its name and the second letter is ’a’, use "name=’?a??’" as a match
string. For finding all elements that have 2 or more characters in the name, use ’??*’ as the
match string. If the ignoreCase flag is given, the match is performed case insensitively. The
descendInto=’metaclasses’ makes it only descend into the given meta-class types, specified
in the same way as for the class flag. When the descendInto flag is given, the levels defaults
to a very large value if not given. If descendInto is not given, all types is traversed when levels > 0. The inherited flag makes getList also get elements from inherited objects, like the
iterator functions. E.g. it can list the predefined attributes of a shape. The onlyInherited flag
makes it only report the inherited elements. To get all shapes in a picture use the getList(…)
function and set the class flag to Shape and levels to a large value, for instance 9999. These
settings will return all the shapes created in the picture. If the flag selected is specified in the
flags string only selected shapes will be appended to the list. If selected is enabled the fullName passed as argument to getList(…) must be an entry containing shapes, like Picture,
Instance, etc.
The flags class and descendInto can have one of or a combination of the metaClass, Class,
ComClass and ComInterface names in the RTM. Each name should have a ’+’ or ’-’ sign in
front of it, to indicate if this one is supposed to be in or out of the set. The first metaClass
name given does not need this sign, and it will then be understood as having a ’+’ sign. The
string ’all’ can also be used, and is typically used when one wants to get a list off all objects
except some few types. This all string can only be given with the ’+’ modifier, since ’-all’
would mean nothing can be added to the list. An example of the flags string is:
"class=’Shape-Instance+Attribute’", resulting in looking for shapes and attributes, but ignor-
358
ProcSee Reference Manual
Standard pTALK Functions
getList (3pTALK)
ing instance shapes. The flags string "class=’all-Shape’" will make getList add all objects
except shapes to the list. Notice that the Object function metaClass() returns the class of
an object. The following is a list of some of the metaClass names that can be used:
Application,
Attribute, Circle,
CircleArc,
Class,
ClassPicture,
Colour,
ComClass,
ComEnum,
ComEventObject, ComInterface, ComInterfaceObject,
ComLibrary,
ComObject,
ComShape,
Cursor,
Dialogue,
DialogueArea, DnDSource, DnDTarget,
Drawable,
Ellipse,
EllipseArc,
Enum,
EnumElement, EventPlot,
Font,
Function,
Group,
Image,
Instance,
Interpolator, Library,
Line,
Linestyle, List,
Matrix,
Object,
Pattern,
Picture,
Polygon,
Printer,
Rectangle,
ResourceStyle, RoundRect, Scale,
Shape,
Text,
TimeTag,
TimerAt,
TimerInterval, Trend,
TrendGrid,
TrendLog, TrendLogExternal,
TrendLogInternal, TrendPres, TrendRuler,
Window, Display
The objects put into the ::List object are addresses to entries in the ProcSee symbol table.
Either use the cast operator or the function fullNameOf(…) to get an object from the list.
For instance ::Shape* s = (Shape *)L.get( n ), where L is the List object, n is an index in
the list and (Shape *) is the cast operator. Notice that the cast operator returns null if the
cast operation fails.
This function is an alternative to the symbol table iterator functions available in ProcSee,
createIterator(…), nextFullName(…) and deleteIterator(…).
EXAMPLE
function `void getSelRect( char* fn )
{
// Get all selected rectangles in fn
::List* l = getList( fn, 0, "class=’Rectangle’, selected" );
if ( !l ) return;
int n = l->length();
for ( int i = 0; i < n; i++ )
{
Rectangle* r = (Rectangle *)l->get( i );
if ( r ) do-something-with-the-rectangle-r
}
}`
SEE ALSO
fullNameOf, List, iterator
ProcSee Reference Manual
359
Standard pTALK Functions
getpid (3pTALK)
NAME
getpid - return the process identifier for the rtm
SYNOPSIS
int getpid();
DESCRIPTION
getpid() obtains the process identifier for the rtm. The rtm process is uniquely identified on
the system with this identifier.
360
ProcSee Reference Manual
Standard pTALK Functions
Gradient (3pTALK)
NAME
Gradient - creates and stores information about a gradient.
SYNOPSIS
Gradient* gradient( Pattern* pattern,
[ [ float x1, float y1, float x2, float y2, [ float x3, float y3, ] ]
char* options ] );
DESCRIPTION
The Gradient class is an empty class which does not contain any attributes or methods.
An instance of this class stores internal information needed when drawing a gradient. This
information is not available from pTALK. Actually, it is unnecessary to store attribute
pointers to the Gradient class because ProcSee handles this more efficiently. However,
even if it is unusual, Gradient pointer attributes can be created in ProcSee using the gradient(…) function. Situations where it can be useful are when several shapes use the same
Gradient instance, and changes made to one or more of the gradient's properties should
be reflected in all shapes.
The pTALK gradient(…) function creates and assigns a gradient to a shape's line- or fill
pattern attributes, or to a picture's pattern attribute. Use this function either to create a gradient that is different from the gradient pattern's default values, or to create a gradient impossible to create using default values.
The return value from this function is an instance of the class Gradient initialized with
the specified arguments. The first argument pattern must be a pattern of type gradient pattern, 0 is returned otherwise (the shape or picture is drawn using a solid pattern when this
function returns 0).
The remaining arguments are optional. Calling this function with only the gradient pattern
argument is the same as assigning an attribute of type gradient pattern to a pattern attribute
directly, like this:
S.fillPattern = 'GradientPatttern1';
S.fillPattern = 'gradient( GradientPattern1 )';
In the example above the properties of the gradient come from the gradient pattern's default values.
The arguments x1, y1, x2, y2, x3, y3 define one or two vectors used when creating the gradient. These vectors determine the direction and size of the gradient. Whether one or two
vectors are needed depend on the gradient type. If not specified in the options argument,
ProcSee Reference Manual
361
Standard pTALK Functions
Gradient (3pTALK)
the gradient type is determined by the gradient pattern's default value. The next table provides information about the available gradient types and the number of arguments and vectors needed to be specified for each of these.
Table 5: Vector arguments
Gradient Type
Arguments
Vectors
Linear
4
1
Elliptical
6
2
Circular
4
1
Rectangular
6
2
Square
4
1
A vector consists of two coordinate pairs, which is the vector (x1, y1) to (x2, y2) or the vector
(x1, y1) to (x3, y3). The vectors origin is the coordinate (x1, y1). Therefore, if specified, four
or six coordinates must be provided, otherwise an error message is issued. The interpretation
of these vectors depends on the flag coordType, which is specified with the options argument. See the options sections for more information about the values of this flag. The coordinates do not need to be specified as real or integer literals. One or more of these arguments
can be specified using a statement, i.e. an attribute, a variable, a function, etc.
S.fillPattern = 'gradient( G1, 0, 0, 1, 0 )';
\\ Default gradient type is linear
S.fillPattern = 'gradient( G2, 0.5, 0.5, 1, 0.5, 0.5, 1 )'; \\ Default gradient type is elliptical
The last argument options are optional. This argument is used when specifying properties
different from the gradient pattern's default values or which are impossible to specify when
creating the gradient pattern. The following table provides information about the available
options.
Table 6: Options
Flag
type
Abbreviation
t
Options
linear
elliptical
circular
rectangular
square
repeated
rep
true or false
reflected
ref
true or false
coordBaseObject
coordB
<shape or picture>
362
ProcSee Reference Manual
Standard pTALK Functions
Gradient (3pTALK)
Table 6: Options
Flag
coordType
Abbreviation
coordT
Options
sizeRelative
coord
offsetCoord
The flag type controls the shape of the gradient. Use this flag to change the type from the
gradient pattern's defaults, for instance: gradient( G1, "type=circular" ).
The flag repeated and reflected changes the repeated and reflected gradient pattern's default settings, respectively. The following statements are all legal: "repeated", "norepeated", "repeated=true", "repeated=false", "rep".
The flag coordBaseObject is used to let another shape or picture determine the size and
position of the gradient. This flag makes it possible to let the gradient be connected to a
bounding box of another shape or picture, and not the shape or picture the gradient function is assigned to. This option can be quite powerful when used properly, for instance in
classes where several shapes can use the same shape as coordinate base object. The following example illustrates this option, where the shape R and C are shapes in a class called
C1, where they use the shape B as coordinate base object.
class C1
{
polygon B
{
}
Rectangle R
{
fillPattern = 'gradient (G1, "coordBaseObject=B )';
}
Circle C
{
fillPattern = 'gradient( G1, "coordBaseObject=B )';
}
}
The flag coordType determine the interpretation of the vectors (x1, y1) to (x2, y2) and (x1,
y1) to (x3, y3). Note that this flag changes the interpretation of all the coordinates. If not
specified the default value of this flag is sizeRelative, which means that the coordinates
are relative to the shape or picture. Normally, these coordinates are specified in the range
[0, 1], but negative values and values larger than 1 are also accepted. For instance, the coordinates (0, 0) is in the upper left corner, (1, 1) is in the lower right corner, (0.5, 0.5), is
in the centre, (-1, 0) is to the left of the shape (actually, it is one times the width of the
bounding box to the left).
Setting the flag coordType to coord changes the coordinates to become absolute inside the
coordinate system the shape is located in. The following objects in ProcSee have their
own coordinate system, pictures, instances of user defined classes and trend. Legal values
ProcSee Reference Manual
363
Standard pTALK Functions
Gradient (3pTALK)
of the coordinates, when this option is used, are actually any legal floating point value, but
in practice are values inside the screen size normal. Examples of coordinates are, (20.5,
30.5), (100, 200), (-70, 400), etc.
When the flag coordType is set to the value offsetCoord, all coordinates are relative to the
shape or the picture the gradient is assigned to (can be changed by using the flag coordBaseObject). The coordinates (0, 0) is the shape's upper left, (100, 100) is 100 pixels to the right
and 100 pixels down from the shape's upper left corner.
EXAMPLES
// G1, G2 and G3 are gradients
Gradient* commonG = 0; // Attribute of type Gradient pointer
rectangle R1
{
fillPattern = ‘gradient( G1, 0, 0, 1, 1, "rep, ref" )‘;
}
circle C1
{
fillPattern = ‘gradient( G2, 0.5, 0.5, 1, 0.5, 0.5, 1, "type=elliptical, coordB=R1" )‘;
}
rectangle R2
{
fillPattern = ‘commonG‘;
}
rectangle R3
{
fillPattern = ‘commonG‘;
}
void constructor()
{
commonG = gradient( G3, 1, 0, 0, 0, "type=linear" );
}
364
ProcSee Reference Manual
Standard pTALK Functions
HashTable (3pTALK)
NAME
HashTable- provides functionality for storing and retrieving data.
SYNOPSIS
int
int
any
::List
int
int
int
int
char*
HashTable::clear();
HashTable::contains( any key );
HashTable::get( any key );
HashTable::getKeys( [::List* list ] );
HashTable::length();
HashTable::put( any key, any value );
HashTable::putAll( ::HashTable* from );
HashTable::remove( any key );
HashTable::toString( [char|char*] delimiter=’|’, [char|char*] keyValueDelimiter=’=’ );
HashTable*::newHashTable();
DESCRIPTION
HashTable objects provides functionality for storing and retrieving large amount of data
efficiently by using user defined keys to identify data elements in the hash table. When
putting data into the hash table the value to add is associated with a key. To retrieve a value from the hash table the key must be given and the corresponding data is returned. The
value 0 is returned if the key is not found in the hash table. The key can be character
strings or integral numbers. The value can be a number or a pointer. (E.g. pointers to symboltable elements like instances, or pointers to strings.)
HashTable can be created as attributes or as anonumous objects in functions or dialgoues
using the pTALK function newHashTable(). When the hash table is created, it is initially
empty. Note that the contents of the hash table is not stored when a picture, library or application is saved. HashTables created with newHashTable() is removed from memory
when there are no pointers left pointing to the created HashTable.
The HashTable function length() return the number of elements in the HashTable.
clear() clears the HashTable.
put() puts an element into the HashTable, at the position given by the argument key. If
the key is alredy in the HashTable, the value in the HashTable is replaced by the new value.
putAll() puts all elements found in the from HashTable into this HashTable. Values at
keys found in both HashTables will be replaced with the value in the from HashTable.
get() return the element specified by key. 0 if not found.
getKeys() returns a list of all the keys in the hash table. The function accepts one optional
argument, list of type ::List. If not specified a ::List object is created in the function. The
keys are added to the list and returned. The list returned can be used to traverse the items
in the hash table, i.e. for each key item in the list, use the function get() to return the value
associated with each key.
ProcSee Reference Manual
365
Standard pTALK Functions
HashTable (3pTALK)
contains() returns 0 if the specified key is not found in the HashTable, and a value != 0 if it
is found in the HashTable. If the values put into the HashTable are numbers, the value 0 will
return 0 from get(), but 1 from contains().
remove() remove the element specified by key from the HashTable.
toString() returns a string which is the concatenation af all elements in the HashTable, with
the given delimiter between each element. For each element the key and value will be given,
delimited by the keyValueDelimiter. Each key and value is converted to a string like using
the global pTALK function toString(). The delimiters can be a single character, or a string.
If no delimiter is given, the default is a single bar ’|’ between each element. If no keyValueDelimiter is given, the default is a the ’=’ character between the key and the value.
EXAMPLES
HashTable aHashTable
aHashTable.put( "Zero", 0 );
aHashTable.put( 1, "The number one" ); // Key can be integer.
aHashTable.put( "myKey", "myValue" );
aHashTable.put( "myKey", "otherValue" );
if ( aHashTable.contains( "Zero" ) )
printf( "Zero = %d", aHashTable.get("Zero") );
printf( "Value for myKey: %s", aHashTable.get("myKey") ); // prints Value for myKey: otherValue
HashTable* tmpHT = newHashTable(); // Creates a HashTable
tmpHT.put( "aKey", "aValue" );
tmpHT = 0;
// The hash table is removed from memory here.
void traverseShapeMap( ::HashTable* shapeMap )
{
::List* keyL = shapeMap->getKeys();
for ( int i = 0; i < keyL->length(); i++ )
{
Shape* s = (Shape *)shapeMap->get( keyL->get( i ) );
…
}
}
366
ProcSee Reference Manual
Standard pTALK Functions
Image (3pTALK)
NAME
Image - user interface component displaying an image.
SYNOPSIS
// attributes
char* Image::filename;
float Image::x;
float Image::y;
// functions
int Image::reload();
DESCRIPTION
The Image shape displays a graphical image in ProcSee.
The attributes x, y specifies the upper left corner of the image. The attribute filename is
the name of the graphical image file to load. This file can be a path relative to the application or an absolute path.
The function reload() loads the image from file if the image has changed on disk. It returns 1 on success, otherwise 0.
NOTE
The bmp and wmf file format is not available in the Unix versions of ProcSee.
SEE ALSO
Shape(3pTALK) in "ProcSee Reference Manual"on page 430
ProcSee Reference Manual
367
Standard pTALK Functions
Instance (3pTALK)
NAME
Instance - an object of class type.
SYNOPSIS
char* Instance::classFullName();
int Instance::changeClass( char* classFullName );
DESCRIPTION
All instances, share some common behaviour. Although the Instance class is not defined as such
in ProcSee, this common behaviour is still described here.
classFullName() returns the full name of the class from which this instance is created.
changeClass() changes the class this instance is of, keeping as many of the attribute values as
possible.
SEE ALSO
Shape(3pTALK) in "ProcSee Reference Manual"on page 430
368
ProcSee Reference Manual
Standard pTALK Functions
Interpolator (3pTALK)
NAME
Interpolator - linearly interpolating new values between a set of known values.
SYNOPSIS
// member functions
int
int
int
int
int
int
int
int
Interpolator::set( double in1, double out1, [char* i1,] double in2, double out2, ... );
Interpolator::modifyInterpolator( int interpolatorIndex, char* interpolator );
Interpolator::modifyInValue( int inIndex, double newInValue );
Interpolator::modifyOutValue( int outIndex, double newOutValue );
Interpolator::numPoints();
Interpolator::add([char* segment], double inValue, double outValue, int position = -1 );
Interpolator::insert( double inValue, double outValue, [char *segment], int position = 0 );
Interpolator::remove( int position = -1 );
double
double
double
double
double
Interpolator::minValueOut();
Interpolator::maxValueOut();
Interpolator::value( double inValue );
Interpolator::getInValue( int inIndex );
Interpolator::getOutValue( int outIndex );
char*
Interpolator::getInterpolator( int interpolatorIndex );
Interpolator*::newInterpolator();
DESCRIPTION
The Interpolator class linearly interpolate new values which lie between two or several
known values. The segments can be either linear or logarithmic. When an interpolator object is used, input values are mapped to a new coordinate system. The output value is calculated using an interpolation algorithm and the result is inside the range of legal values.
The legal values are specified when initializing the Interpolator using the member functions set(...), modifyInValue(...) or modifyOutValue(...).
The Interpolator object consist of two or several points. A point is composed of an input
value and an output value. Between each point in the Interpolator object is an interpolator segment. Each interpolator segment can be linear or logarithmic, which can be specified individually. There are numPoints() - 1 segments. If an input value is within the
range of legal values for a segment, the segment will interpolate the input value and calculate a value between the output values. The interpolation segments are specified using
strings. Legal options for the interpolation segments are:
• linear - linear segment.
• ln - logarithmic segment.
• noLowerLimit, noLoLim - the Interpolator does not check the lower limit. This option is valid for the first segment only.
• noUpperLimit, noUpLim - the Interpolator does not check the upper limit. This op-
ProcSee Reference Manual
369
Standard pTALK Functions
Interpolator (3pTALK)
tion is valid for the last segment only.
• equalInputs, eqInp - this option defines what to do if the lower and upper points’ input
values are equal, i.e. the slope is undefined. The default is that the output value of the
previous point is returned. If this option is specified the output value can be determined
using minium, maximum, middle or any value between the previous and next points’
output value. The legal options for this flag are:
- min - returns the minimum value of the previous and next points’ output values.
- mid - returns the middle value of the previous and the next points’ output values.
- max - returns the maximum value of the previous and next points’ output values.
- <value>, <value>% - this value must be specified in the interval [0,1] or [0,100]%.
The returned value will be calculated using a percentage of the difference between the
next and previous points’ output values.
Note that the input values must be specified in increasing order. The Interpolator object will
fail if an input value of 100 is followed by an input value of 10. In this case an error message
will be issued and the initialization data will not be accepted. When using logarithmic segments input values less or equal to 0 can not be accepted. The output values have no limit.
This paragraph only applies if the flags noUpperLimit or noLowerLimit are not specified. If
the input value does not lie inside the legal input value range, the output value will be cut
using either the output value of the first point or the last point. The output value of the first
point will be returned if the input value is less than the input value of the first point, and the
output value of the last point will be returned if the value exceed the input value of the last
point.
The function set(...) initializes an Interpolator object. This function accepts a variable number of arguments. The Interpolator is cleared if the set() function is called without arguments. If a single value is specified the Interpolator object will act as an offset, where the
offset value will be added to the input value. The set(...) function does not accept two or three
arguments. If more than three arguments are specified, two and two values can be viewed as
input and output pair or points. Each point is composed of an input value and an output value.
To specify a segment at least two points (four values) must be specified. Between each point
can an optional interpolation segment be specified, for instance "linear" or "ln". The default
is linear. In the following examples are i the Interpolator object. i.set( 0.1, 0, "ln", 10000,
50 ) specifies a logarithmic interpolation segment where the legal input range is within the
values 0.1 and 10000, and the output range is between 0 and 50. i.set( 0, 0, 1000, 100 ) specifies a linear interpolator which maps input values in the range 0 to 1000 to the output range
0 to 100. The last example illustrated how to use the set(...) function using the default interpolator function (linear). Several segments can be specified adding new points with an optional interpolator segment between each point. To specify four segments, five points must
be specified. An example: i.set( 0, 0, "lin", 1, 0, "ln", 1000, 200, "ln", 10000, 300, 100000,
350 ). The return value is 1 if the arguments was accepted by the set(...) function, otherwise 0.
modifyInterpolator(...) modifies the interpolation algorithm used by an interpolator segment. The first parameter interpolatorIndex specifies the interpolation segment to change.
This index must be in the range 0 to numPoints() - 1. The last argument interpolator is the
type of interpolation algorithm to use. The legal values for this argument is given in the list
above. The value 1 is returned if the input was accepted, otherwise 0.
370
ProcSee Reference Manual
Standard pTALK Functions
Interpolator (3pTALK)
modifyInValue(...) modifies the input value of the point specified with the argument inputIndex. The second argument newInValue is the point’s new input value. Note that this
function might fail if the input value is not inside the legal value range, that is, it can not
be less than the previous point’s input value or exceed the next point’s input value. The
input value affects the previous and the next interpolation segments as well. These segments will be recalculated. The segment(s) in question will be invalid if the input value is
not accepted by one or both of these segments. For instance setting the input value to 0 if
the next segment is logarithmic will be invalid because a logarithmic value of 0 is an illegal mathematical operation. A value of 0 is returned if this function fails, otherwise 1.
modifyOutValue(...) modifies the output value of the point specified with the argument
outputIndex. The second argument newOutValue is the point’s new output value. The
previous and next interpolation segments will be recalculated. A value of 1 is returned if
this function accepts the new value, otherwise 0.
numPoints() returns the number of points in the Interpolator object.
The function add(...) adds a new segment to the Interpolator object at the index specified
with the argument position. The segment will be added after the specified position. The
first argument segment is optional and can be omitted. The default type is linear if this
argument is not specified. The arguments inValue and outValue specify the input and
output values for the point, respectively. The last argument position is a default argument.
If this function is called without this argument, the segment will be appended to the Interpolator object.
The function insert(...) inserts the new segment to the Interpolator object at the index
specified with the argument position. Note that the segment will be inserted before the
specified position. The arguments inValue and outValue specify the input and output values for the point, respectively. The third argument segment is optional. The default type
is linear if the segment argument is not specified. The last argument position has a default
value of 0. If not specified, this function will insert the new segment first in the Interpolator object.
The function remove(...) removes a point and segment at the given position. If the argument position is not specified, then the last segment is removed from the Interpolator object.
minValueOut() returns the minimum output value of the points specified in the Interpolator object.
maxValueOut() returns the maximum output value of the points specified in the Interpolator object.
getInValue(...) returns the input value of the point at the index specified with the argument inIndex.
getOutValue(...) returns the output value of the point at the index specified with the argument outIndex.
value(...) returns an interpolated output value based on the input value passed in the argument inValue.
getInterpolator(...) returns the interpolator at the index specified with the argument interpolatorIndex. The index must be in the range 0 to numPoints() - 1.
ProcSee Reference Manual
371
Standard pTALK Functions
Interpolator (3pTALK)
The global function ::newInterpolator() creates a new local Interpolator object. This function is normally used to create temporary Interpolator objects used in local functions or in
Line, Polygon or TrendPres shapes.
EXAMPLE
// The following example illustrates how to connect Interpolator objects to a Line shape. The line will
// map the original points within the value range (200, 400) for x values and (300,500) for y values.
::Interpolator XInterpolator;
::Interpolator YInterpolator;
void constructor()
{
XInterpolator.set( 0, 200, 1000, 400 );
YInterpolator.set( 0, 300, 1000, 500 );
L.setInterpolatorX( XInterpolator );
L.setInterpolatorY( YInterpolator );
}
Line L
{
...
}
// The next example illustrates how to initialize an Interpolator object which is updated with new input
// values.
::Interpolator I;
void updateInterpolator( float in1, float out1, float in2, float out2 )
{
I.set( in1, out1, "noLowerLimit, noUpperLimit, equalInputs=0.5", in2, out2 );
}
SEE ALSO
Line(3pTALK) in "ProcSee Reference Manual"on page 376
TrendPres(3pTALK) in "ProcSee Reference Manual"on page 474
372
ProcSee Reference Manual
Standard pTALK Functions
iterators (3pTALK)
NAME
iterators - functions to get information about what objects are contained in an object.
SYNOPSIS
int createIterator( char* parentFullName, int mask );
char* nextFullName( int iteratorId );
void deleteIterator( int iteratorId );
DESCRIPTION
createIterator() creates an iterator that can be used to find all objects with the given parent and mask. The parentFullName and the mask have the same meaning as the name
and mask parameters used in the API function PfGetChildren(). The value returned is an
iteratorId, that is to be used by the other iterator functions. If the iterator was not created,
the value returned is <= 0.
nextFullName() returns the fullname of the next object, found by the given iterator. If no
more objects can be found, or the iteratorId is illegal, the return value is 0. When nextFullName() returns 0, the iterator is also freed.
deleteIterator() frees an iterator given in iteratorId. This should be done if the next fullname is not needed, and nextFullName() has not yet returned 0 for the given iteratorId.
SEE ALSO
PfGetChildren(3C) in "ProcSee Reference Manual"on page 200
ProcSee Reference Manual
373
Standard pTALK Functions
Layers (3pTALK)
NAME
Layers - functions for layers.
SYNOPSIS
Layer* ::newLayer(char* ownerFullName, char* name, char* behindLayer=0, char* flags=0);
int Layer::isDefault();
void Layer::setAsDefault();
int Layer::getVisibility();
void Layer::setVisibility(int visibility);
void Layer::moveBehind(char* behindLayer);
void Layer::toBack(int skipElems = 99999);
void Layer::toFront(int skipElems = 99999);
void Layer::addAlias(char* libLayer);
void Layer::delAlias(char* libLayer);
List* Layer::getAliases(List* L=0);
char* Layer::getOriginalName();
void Layer::setOriginalName(char* origName);
char* Shape::getLayer();
void Shape::setLayer(Layer* layer);
DESCRIPTION
The Layer objects determine the order that the shapes are drawn, and can be used to have
shapes inside classes that are assigned to different layers. When instances of these classes are
drawn, the shapes will be drawn in (application) layer order, making it possible to have e.g.
selection or alarm information in layers that are not dependent on the overlap order of nearby
shapes.
The following functions are used to create and change layers, and should normally only be
used by editor applications:
newLayer() creates a new Layer in ownerFullName, with the given name. If behindLayer is
specified, the new layer will be placed behind this layer, if not, the layer will be placed above
all other layers. If flags is set to "default", this layer will be made the default layer. If flags
are not set to "default", a default layer will be automatically created if none exists.
isDefault() returns 1 if this layer is the default layer, 0 if not. setAsDefault() sets this layer
as the default layer.
getVisibility() returns this layers visibility. setVisibility() sets this layers visibility.
moveBehind(), moves the layer behind the behindLayer. toBack() moves the layer behind
the other layers. toFront() moves the layer in front of the other layers. The skipElems argument controls the number of positions to move the layer.
addAlias() and delAlias() is used to add or delete aliases for the layer.
374
ProcSee Reference Manual
Standard pTALK Functions
Layers (3pTALK)
getAliases() returns a list of strings for the aliases for this layer. If a List is given as input
argument, the aliases of this layer is added to this list which is returned.
getOriginalName() gets the originalName for this layer if one is set, returns 0 if not. setOriginalName() sets the originalName.
A shape can be connected to a layer. If the shape is not connected to a layer, the shape will
use the same layer as its parent shape (e.g. if it is inside a group or an instance). A special
value "#default" makes the shape have the same layer as the instance it is inside.
getLayer() gets the layer this shape is connected to. setLayer() sets the layer this shape
is connected to.
SEE ALSO
Layers on page 50, in "ProcSee Reference Manual", chapter "The Configuration Language".
ProcSee Reference Manual
375
Standard pTALK Functions
Line, Polygon (3pTALK)
NAME
Line/Polygon - multi-segment line and polygon shape.
SYNOPSIS
// NOTE: These functions are also available in the Polygon class
// Attributes:
float* Line::x;
float* Line::y;
// Methods:
int
Line::numberOfPoints();
void
Line::setX( int point, float value );
void
Line::setY( int point, float value );
void
Line::setDynamicX( int point, char* dynamicValue );
void
Line::setDynamicY( int point, char* dynamicValue );
void
Line::set( char* xDynamicValue, char* yDynamicValue );
void
Line::get( char** xDynamicValue, char** yDynamicValue );
void
Line::addPoint( float x, float y, int maxNumberOfPoints = -1 );
void
Line::removePoint( int pointNo );
float Line::getX( int point );
float Line::getY( int point );
char* Line::getDynamicX( int point );
char* Line::getDynamicY( int point );
::Interpolator* Line::getInterpolatorX();
::Interpolator* Line::getInterpolatorY();
void
Line::setInterpolatorX( ::Interpolator* xI );
void
Line::setInterpolatorY( ::Interpolator* yI );
void
Line::setCapStyle( int capStyle );
void
Line::setJoinStyle( int joinStyle );
int
Line::getCapStyle();
int
Line::getJoinStyle();
DESCRIPTION
Line and Polygon are graphics shapes. These are very similar except for the fact that lines
are open, i.e. have different start and end points, while polygons are closed and can have fill.
The two classes do however share the same set of member functions and editing behaviour
to be described in the following.
When the picture is in edit mode, you can manipulate the line or polygon shape with the
mouse. The following operations are defined if the cursor is currently on a marker, i.e. on a
line/polygon point:
left button drag
Move point
control left button click Delete point
The following operations are defined if the cursor is currently on a line/polygon segment, i.e.
not on any line point:
left button drag
376
Move whole line/polygon
ProcSee Reference Manual
Standard pTALK Functions
Line, Polygon (3pTALK)
control left button click Add point on this line/polygon segment
The following attributes are defined in both Line and Polygon:
The attributes x and y give direct access to the points in the Line/Polygon. These attributes
are of type float array. Individual elements in the array can be modified or values can be
returned using the array index operator [], for instance float v = l.x[2], l.x[10] = 3, l.y[1]
= ´SQ_32.value´, char* d = @l.y[4], etc. To return a pointer to the array use the attributes
x or y without the array operator, for instance float* lx = l.x. The attributes x and y replaces
the functions getX(), getY(), setX(), setY(), setDynamicX(), setDynamicY(), getDynamicX() and getDynamicY().
The following member functions are defined in both Line and Polygon:
numberOfPoints() returns the number of definition points in the shape.
Individual Line/Polygon points have to be manipulated using the setX(), setY(), setDynamicX(), setDynamicY(), set(), getX(), getY(), getDynamicX(), and getDynamicY().
setX() and setY() are used to give static values to an x- or y-coordinate, respectively. The
point index is given as first parameter, which has a range from 0 to numberofPoints()-1.
The second parameter is the new value, given as a floating point number in picture coordinates.
setDynamicX() and setDynamicY() are used to give dynamic values to an x- or y-coordinate, respectively. The point index is given as first parameter, which has a range from 0
to numberofPoints()-1. The second parameter is the new dynamic value, given as a
pTALK source code string.
set() is used to bind the coordinates of a line dynamically to two arrays, one for the x coordinates, and one for the y coordinates. The arguments are given as pTALK source code
strings, the first on for the x coordinates, and the second one for the y coordinates. get()
is used to get these array dynamics back if they were set.
addPoint() is used to add a new point to the line. The coordinate of the point is given by
x and y. The last argument maxNumberOfPoints is optional. If this argument is specified
it gives the total number of points the line accepts. If the line has more points than maxNumberOfPoints these points will be removed starting from index 0.
removePoint() is used to remove an existing point on the line. The point is given by pointNo.
getX() and getY() return the current value of an x- or y-coordinate, respectively. The parameter point is the index, i.e. line point number in the range 0 to numberOfPoints()-1.
The value returned is a floating point number given in picture coordinates. Note that these
functions works also for dynamically bound coordinates; the current value is then returned as a constant.
getDynamicX() and getDynamicY() return the dynamic binding of an x- or y-coordinate,
respectively. The parameter point is the index, i.e. line point number in the range 0 to numberOfPoints()-1. The value returned is the dynamic binding as a pTALK source code
character string. Note that these functions works also for statically bound coordinates; an
empty string is then returned.
ProcSee Reference Manual
377
Standard pTALK Functions
Line, Polygon (3pTALK)
getInterpolatorX() and getInterpolatorY() return the Interpolator used to calculate the x- or
y-coordinates of points in the Line/Polygon, respectively. The value 0 is returned if no Interpolator is specified for the x- or y-coordinate. To set an interpolator, use the functions
setInterpolatorX(...) or setInterpolatorY(...).
setInterpolatorX(...) and setInterpolatorY(...) set or clear the x or y Interpolator objects
used by the Line/Polygon shape, respectively. These functions accept one argument, an Interpolator object. Setting the argument to the value 0 will clear the Interpolator object used
by the Line/Polygon shape. The purpose with the interpolator is to map either the x or y
points or both points into a new coordinate system.
setCapStyle(...) determines how the end points of the line are displayed. The following cap
styles can be set on the Line shape: butt (1), round (2) and square (3). These constant values
are available in the enum LineCap. The default value of the cap style is butt.
setJoinStyle(...) determines how the line segments meeting at the corners should be displayed. The following join styles can be set on the Line and Polygon shapes: bevel (16), miter (48) and round (32). These constant values are available in the enum LineJoin. The
default value of the join style is miter for the Polygon shape and bevel for the Line shape.
getCapStyle() returns current line cap style and getJoinStyle() returns current line join style.
Note that the cap style functions are not available in Polygon shape.
SEE ALSO
Shape(3pTALK) in "ProcSee Reference Manual"on page 430
378
ProcSee Reference Manual
Standard pTALK Functions
Linestyle (3pTALK)
NAME
Linestyle - linestyle functions
SYNOPSIS
Linestyle* Application::getLinestyle( int linestyle,
::ResourceStyle* rs=0 );
DESCRIPTION
The Application::getLinestyle() function returns a pointer to the Linestyle that is given
as input argument. Used to convert integer linestyle index back to the Linestyle it represents. An optional ResourceStyle can be given.
ProcSee Reference Manual
379
Standard pTALK Functions
List (3pTALK)
NAME
List- functions used to handle lists.
SYNOPSIS
int
int
int
int
int
int
any
any
int
char*
char*
List::length();
List::insert( any elem, int positon = 0 );
List::add( any elem, int position = -1 );
List::sort( int (*sortFunc)( any v1, any v2 ) );
List::clear( int fromPos = 0, int length = -1 );
List::copy( ::List* fromList, int fromPos = 0, int length = -1 );
List::get( int position );
List::remove( int position );
List::concat( ::List* fromList, int fromPos = 0, int length = -1,
int insPos = -1);
List::toString( char delimiter = ’|’ );
List::toString( char* delimiter );
List*
::newList();
DESCRIPTION
List objects can hold numbers and pointers. (E.g. pointers to symboltable elements like instances, or pointers to strings.)
Named List objects are created like attributes. The content of a list is not saved or documented, so it is initially empty.
Anonymous List objects can be created with the function newList(), which creates a List object, and returns a pointer to it. When there are no pointers left pointing to the created List, it
will be removed automatically.
The List function length() return the number of elements in the List.
insert() inserts an element into the List. If the argument position is not used, the element is
inserted first in the list, else it is inserted before this position. Return value is the position if
OK, else -1.
add() adds an element to the end of the List. If the argument position is used, the element is
inserted after this position. Return value is the position if OK, else -1.
sort() sort the List, using the user made pTalk function sortfunc. sortfunc takes two arguments of any type. Return < 0 if v1 is less than v2, 0 if v1 is equivalent to v2 and > 0 if v1 is
greater than v2 if an increasing sort is taking place, see example below. Return value is the
number of sorted elements if OK, else -1.
clear() clear length elements from the List, from the fromPos argument. If not length is given, clear to the end of the List. Return value is the number of cleared elements if OK, else -1.
copy() clear the List and copy length elements starting at fromPos in the fromList to List.
Return value is the number of copied elements if OK, else -1.
get() return the element specified by position. 0 if failed.
380
ProcSee Reference Manual
Standard pTALK Functions
List (3pTALK)
remove() remove the element specified by position from the List. Return a pointer to the
element that is removed if OK, else 0.
concat() inserts a subset of fromList into the List at insPos. The fromList subset is
length elements starting at fromPos in the fromList. If insPos is -1 (it’s default), the
fromList subset is appended to the List. If length is -1 (it’s default), all elements after
fromPos is inserted
toString() returns a string which is the concatenation af all elements in the list, with the
given delimiter between each element. Each element is converted to a string like using the
global pTALK function toString(). The delimiter can be a single character, or a string. If
no delimiter is given, the default is a single bar ’|’ between each element.
EXAMPLES
List aList;
int I1 = 6;
int I2 = 3;
int I3 = 5;
int sortFunc( int v1, int v2 )
{
if( v1 > v2 ) return 1;
if( v1 == v2 ) return 0;
return -1;
}
aList.add( I1 );
aList.add( I2 );
aList.add( I3 );
aList.sort( sortFunc );
List* tmpList = newList(); // Creates a List
tmpList.add( I1 );
tmpList = 0;
// The list is removed from memory here.
ProcSee Reference Manual
381
Standard pTALK Functions
load, display (3pTALK)
NAME
load, display - routines for loading and displaying pictures, libraries, and applications
SYNOPSIS
int load( char* fileName, char* flags = "" );
void displayPicture( char* windowName, char* pictureName, char* flags = "async, uc, map" );
DESCRIPTION
load() loads the picture, library or application given by fileName from file. If the file is a
picture, then this picture is not displayed. The argument is a complete file name (i.e. a .ppic,
.plib, or .pctx file). If the file is a picture object which is already present internally in RTM,
the picture will still be loaded and replace the old representation.
Additional functionality can be specified with the flags argument. load() accepts the following options for the flags argument:
• comPersistSeparateFile - this flag only applies when loading an old file saved with version 3.3 or earlier of ProcSee. It controls how to handle the persist mode used by the
ComShape and the ComObject. If this flag is specified the persist mode will be set to the
value 2, meaning that the ComShape’s and the ComObject’s configuration data will be
saved in a separate COM file. If this flag is false, which is the default, the persist mode
will be set to the value 1. In the latter case the ComShape’s and the ComObject’s configuration data will be saved together with the object.
• rename - this flag renames the picture, library or application when it is loaded. To specify a new name use the following syntax: rename=NewName, where NewName is the
new name of the picture, library or application. It is a replacement for the pTALK sequence load() followed by rename().
• scope - specifies the fullname of the entry in the rtm where the load function is executed.
This flag is not applicable when the file to load is an application (pctx file). Use the following syntax to specify the scope: scope = fullname. fullname is either application or
library. Notice that library scope is legal only when loading pictures (ppic files).
load() returns 0 on success, otherwise an error code describing the failure is returned. The
api function PfGetSystemError(3c) or the pTALK function getErrorString() can be used
to obtain the error text corresponding to the error code.
displayPicture() displays the picture given by pictureName in the window given by windowName. If pictureName is not a file name, the picture must already be loaded in the RTM.
If pictureName is a complete picture file name, displayPicture() will attempt to load the picture from the specified file if the picture does not already exist in the RTM. If the window is
not mapped, it will by default be mapped by displayPicture().
With the flags argument additional functionality can be specified. displayPicture() accepts
the following options for the flags argument:
• asynchronous/synchronous - a boolen flag inidicating whether to run the displayPicture() immediately (synchronous) or put it on an internal queue (asynchronous) and perform the action at a later stage. The default value for this flag is asynchronous. No
assumptions about the picture being loaded or displayed can be made immediately after
382
ProcSee Reference Manual
Standard pTALK Functions
load, display (3pTALK)
the call when running displayPicture() asynchronously.
• unmapChildren - a boolean flag indicating whether to unmap the sub windows when
displaying the picture or leave the sub windows as is. The default value for this property is true. The flag uc is an abbreviation for unmapChildren. When the picture is
already displayed in the window, this property is ignored, and the sub-windows are
not unmapped.
• map - by specifying map=false, the window will not be mapped by displayPicture().
The default is to map the window (map=true).
EXAMPLES
load("./pictures/MyPicture.ppic");
// the following usage of displayPicture assumes that MyPicture already
// exists in the RTM
displayPicture("MainWindow", "MyPicture");
// the following usage of displayPicture will load MyPicture from file
// if it is not already loaded
displayPicture("MainWindow", "./pictures/MyPicture.ppic");
// The following example will display the picture immediately and leave all sub-windows as is.
displayPicture( "TrendWindow", "./pictures/TrendPic.ppic", "async=false, uc=false" );
SEE ALSO
remove(3pTALK) in "ProcSee Reference Manual"on page 416
save/document(3pTALK) in "ProcSee Reference Manual"on page 425
Picture(3pTALK) in "ProcSee Reference Manual"on page 395
Window(3pTALK) in "ProcSee Reference Manual"on page 488.
ProcSee Reference Manual
383
Standard pTALK Functions
math (3pTALK)
NAME
log, log10, exp, pow, floor, ceil, round, roundToInt, fabs, abs - mathematical utility functions
SYNOPSIS
double log( double x );
double log10( double x );
double exp( double x );
double pow( double x, double y );
double floor( double x );
double ceil( double x );
double round( double x );
int roundToInt( double x );
double fabs( double x );
int abs( int x );
DESCRIPTION
The log() function returns the natural logarithm of x. The log10() function returns the base
10 logarithm of x. The exp() function returns the exponential function of x (e to the power
of x). The pow() function returns x to the power of y. pow(x,y) = xy
The floor() functions returns the largest integer less than or equal to x. The ceil() function
returns the smallest integer greater than or equal to x. The round() function returns the integer closest to x. The roundToInt() function returns an integer closest to x.
The fabs() and abs() functions returns the absolute value of x.
SEE ALSO
log(3), log10(3), exp(3), pow(3), floor(3), ceil(3), fabs(3)
384
ProcSee Reference Manual
Standard pTALK Functions
Matrix (3pTALK)
NAME
Matrix – a rectangular array of double values
SYNOPSIS
// member functions:
void Matrix::clear();
void Matrix::set( int row, int column, double value );
int Matrix::columns();
int Matrix::rows();
int Matrix::isNull();
int Matrix::isSquare();
int Matrix::isIdentity();
int Matrix::isSymmetric();
int Matrix::isOrthogonal();
int Matrix::isDiagonal();
int Matrix::isTriangular();
int Matrix::isUpperTriangular();
int Matrix::isLowerTriangular();
int Matrix::isEqual( ::Matrix* m1, ... );
double Matrix::determinant();
double Matrix::trace();
double Matrix::get( int row, int column );
::Matrix* Matrix::identity();
::Matrix* Matrix::inverse();
::Matrix* Matrix::transpose();
::Matrix* Matrix::cofactors();
::Matrix* Matrix::adjoint();
::Matrix* Matrix::add( ::Matrix* m1, ... );
::Matrix* Matrix::subtract( ::Matrix* m1, ... );
::Matrix* Matrix::multiply( [::Matrix* m1 | double s1], ... );
// Static functions:
int
Matrix::isEqual( ::Matrix* m1, ::Matrix* m2 );
::Matrix* Matrix::identity( ::Matrix* m );
::Matrix* Matrix::inverse( ::Matrix* m );
::Matrix* Matrix::transpose( ::Matrix* m );
::Matrix* Matrix::cofactors( ::Matrix* m );
::Matrix* Matrix::adjoint( ::Matrix* m );
::Matrix* Matrix::add( ::Matrix* m, , ::Matrix* m2,… );
::Matrix* Matrix::subtract( ::Matrix* m1, ::Matrix* m2, … );
::Matrix* Matrix::multiply( [::Matrix* m1 | double s1],
[::Matrix* m2 | double s2], ... );
// create functions:
::Matrix* ::newMatrix( int row, int column );
::Matrix<int rows, int columns> name;
ProcSee Reference Manual
385
Standard pTALK Functions
Matrix (3pTALK)
DESCRIPTION
The class for the matrix data type is called Matrix in ProcSee. A matrix is a rectangular array
of numbers. The size of the matrix is called its order, and it is denoted by rows and columns.
By convention, rows are always mentioned first. So a matrix of order 3 by 2 is a matrix of 3
rows and 2 columns. An element in a matrix is always denoted by ij, where i is the row and
j is the column. ProcSee supports only some of the basic elementary algebraic operations on
matrices. The elements in the matrix are represented by double values.
Several Matrix functions are defined both as member functions and as static functions.
When a member function is called on a Matrix object the modification will apply to the object itself and not to a copy. If M for example is an object of type Matrix and the identity()
method is called the effect of the operation will be on M, for instance ::Matrix* identityM =
M. identity(). In this example the Matrix variable identityM will point to the same object as
M points to. Several of the Matrix member functions will return a pointer to itself when they
succeed, otherwise null. When the static Matrix functions are called, new matrices are created and returned. The modifications will not apply to any of the Matrix objects which where
passed as arguments to the Matrix functions, but to the matrix created in the function. Calling the same identity() method as above using the static function will not modify the matrix
M, but instead return a new matrix initialized with the identity matrix. For instance ::Matrix*
identityM = ::Matrix.identity( M ).
A Matrix in ProcSee can be created as an attribute or as a local variable. To create a matrix
as an attribute, use the syntax:
::Matrix<int rows, int columns> name;
Where name is the name of the attribute and rows and columns are the size of the matrix. To
create a Matrix attribute called M with 4 rows and 3 columns use the following syntax:
::Matrix<4,3> M;
To create a Matrix as a local variable, i.e. in functions or dialogues, use the global function
newMatrix( int row, int column ). This function returns a pointer to a Matrix of the specified size. The Matrix is released from memory when no pointers point to it anymore. To
create a local Matrix variable with 10 rows and 2 columns, use the following syntax: Matrix* LM = newMatrix( 10, 2 ); , where LM is the name of the local variable. All matrices
created as attributes or as local variables are by default initialized to zero, that is all elements
in the rectangular array are set to the value 0.0.
To get the number of rows and columns of a matrix use the functions rows() and columns(),
respectively.
Individual elements in a matrix can be accessed using the member functions set( int row, int
column, double value ) and get( int row, int column ). To set the ij element in a matrix use
the function set(…), where i denotes the row and j denotes the column. To get an element in
the matrix use the function get(…).
The function clear() resets all the elements in the matrix to the value 0.0.
isNull() returns true when all the element in the matrix are 0.0.
isSquare() returns true when the rows and columns in the matrix are equal, e.g. a 2 by 2 matrix, a 5 by 5 matrix etc.
386
ProcSee Reference Manual
Standard pTALK Functions
Matrix (3pTALK)
The functions transpose() and ::Matrix.transpose( ::Matrix* m ) converts the m by n
matrix into an n by m matrix, by flipping the rows and the columns. The transpose of the
matrix is formed by interchanging the rows and the columns. The transpose of a matrix A
is denoted AT. After transposing the matrix the value A.get( i, j ) is equal to AT.get( j, i )
for all elements of A.
The functions add( ::Matrix* m, … ) and ::Matrix.add( ::Matrix* m1, ::Matrix* m2,
… ) adds two or more matrices of the same sizes together. Notice that this function will
fail if the matrices to be added have different order, that is different number of rows or
columns. On failure a null pointer is returned.
The functions subtract( ::Matrix* m, … ) and ::Matrix.subtract(::Matrix* m1, ::Matrix* m2, … ) subtracts two or more matrices of the same sizes together. It is analogous
to the method add(…).
The functions multiply( [::Matrix* m1 | double s1], … ) and ::Matrix.multiply( [::Matrix* m1 | double s1], [::Matrix* m2 | double s2], … ) multiplies two or more matrices
together, or one or several scalar numbers. When multiplying two matrices the order of
the matrices do matter, that is the number of columns of the first matrix must be equal to
the number of rows of the next matrix, etc. The size of the resulting matrix is the row of
the first matrix and the columns of the last matrix. Multiplication of the three matrices A(
3, 2 ), B( 2, 5 ) and C( 5, 4 ) will produce a matrix of size 3 by 4. This function will fail if
the matrices are not conformable, i.e. they are not of the correct sizes. On failure a null
pointer is returned.
Some matrix operations can only be applied if the matrix is square, i.e. it must have the
same number of rows and the same number of columns. This applies to the following
functions. determinant(), trace(), identitiy(…), inverse(…), cofactors(…) and adjoint(…). These functions fail if the matrix is not square.
The function determinant() calculates the determinant of the matrix.
The function trace() calculates the trace of the matrix, that is the sum of the elements of
the leading diagonal.
identity() and ::Matrix.identity( ::Matrix* m ) are used when initializing a matrix to the
identity matrix. An identity matrix is a square matrix where the elements on the leading
diagonal are 1 and all the other elements are 0.
The functions cofactors() and ::Matrix.cofactors( ::Matrix* m ) calculates the cofactor
matrix. It returns a null pointer if it fails.
The functions adjoint() and ::Matrix::adjoint( ::Matrix* m ) calculates the adjoint of
the matrix. The adjoint of a matrix is the transpose of the cofactor matrix. It returns a null
pointer if it fails.
The functions inverse() and ::Matrix.inverse( ::Matrix* m ) calculates the inverse of a
matrix. An inverse matrix of A is denoted A-1. Notice that not all matrices have an inverse.
To determine whether the inverse of a matrix can be calculated or not use the determinant() function. The determinant returns a non-zero value if the inverse matrix can be
found. The inverse() function returns a null pointer on failure.
The function isIdentity() returns true if the matrix is an identity matrix, otherwise false.
See the description of the function identity() for more information.
ProcSee Reference Manual
387
Standard pTALK Functions
Matrix (3pTALK)
The function isDiagonal() returns true if the matrix is a diagonal matrix. A diagonal matrix
is a matrix in where the elements are zero except for the elements on the leading diagonal.
The function isSymmetric() returns true if the matrix is symmetric. A symmetric matrix is a
matrix where all the elements is symmetrical about the leading diagonal, that is the element
Aij is equal to Aji for all elements of matrix A. A symmetric matrix is equal to its transpose
that is A = AT.
The function isOrthogonal() returns true if the matrix is orthogonal. An orthogonal matrix
has the characteristic that it is always invertible and the inverse matrix is orthogonal. Another
characteristics of an orthogonal matrix is the fact that AAT=I , where I denotes the identity
matrix.
The functions isUpperTriangular(), isLowerTriangular() and isTriangular() returns true
if the matrix is triangular. An upper-triangular matrix is a matrix where all the entries below
the leading diagonal are zero. A lower-triangular matrix has all its entries above the main diagonal set to zero. A matrix that is either upper- or lower-triangular is called triangular.
The functions isEqual( ::Matrix* m1, … ) and ::Matrix.isEqual( ::Matrix* m1, ::Matrix
* m2, … ) returns true if the matrices m1, m2, etc. have the same sizes and their corresponding entries are equal.
EXAMPLES
::Matrix<2,4> M1; // Attributes
::Matrix<4,2> M2;
::Matrix* P1; // Pointer attribute
...
void testFunc()
{
::Matrix* lM = newMatrix( 2, 2 ); // Create local matrix
lM->identity();
lM->set( 0, 1, 4 );
lM->set( 1, 0, 2 );
// The result will be returned in P1. It will not modify
// M1 or M2. The result is a 2 by 2 matrix.
P1 = ::Matrix.multiply( M1, M2 );
// Multiply P1 with the value 3.14. The call will modify
// the matrix P1.
P1->multiply( 3.14 );
// The addition of P1 and lM will be returned in sumM,
// a new local variable.
::Matrix* sumM = ::Matrix.add( P1, lM );
// The next function will fail because M1 and M2 cannot
// be added due to different sizes. A null pointer will
// be returned.
sumM = ::Matrix.add( M1, M2 );
}
388
ProcSee Reference Manual
Standard pTALK Functions
Matrix (3pTALK)
SEE ALSO
ProcSee Reference Manual
389
Standard pTALK Functions
min,max,arrayMinIndex,arrayMaxIndex
NAME
min- returns the minimum value in a set of values.
max- returns the maximum value in a set of values.
arrayMinIndex - returns the index of the minimum value in an array.
arrayMaxIndex - returns the index of the maximum value in an array.
SYNOPSIS
any min( any v1, any v2, ... );
any max( any v1, any v2, ... );
int arrayMinIndex( any array, int last = 0, int startIx = 0, int length = 0 );
int arrayMaxIndex( any array, int last = 0, int startIx = 0, int length = 0 );
DESCRIPTION
min returns the minimum value and max returns the maximum value in a set of values, respectively. The arguments to these functions can be any number or array of numbers, like
integers, unsigned integers, double, array of integers, etc. These function accepts a variable
number of arguments.
The data type returned from the min or max function is the data type of the minum or maximum value to return. If for instance the minimum value is an integer, the return type is integer, if the minimum value is a double, the return type is a double, etc.
arrayMinIndex( ... ) returns the index of the minimum value in the array passed as argument, and arrayMaxIndex( ... ) returns the index of the maximum value in the array. The
first argument array is an array of type short, int, float or double.
The second argument last determines whether to start searching from the last element going
backward, or starting from the first element going forward. This flag has a meaning only if
there is a possibility that several elements in the array can have equal values. If last is 1, the
last index with the minimum/maximum value is returned, otherwise the first index. The default value for this argument is start searching from index startIx.
The third argument startIx is the index in the array where to start searching for the minimum
or the maximum value. The default value of this argument is 0.
The last argument length is the number of elements in the array to search for the minimum
or the maximum value, starting from startIx. The default value of this argument is 0, which
means use the length of the array.
EXAMPLE
float fA[3] = { 3.14, 2.71, 12.3 };
int iA[4] = { 1, 2, 3, 4 };
int aI[6] = { 3, 2, 4, 5, 3, 2 };
void test()
{
390
ProcSee Reference Manual
Standard pTALK Functions
int
iMin
int
iMax
double dMin
double dMax
min,max,arrayMinIndex,arrayMaxIndex
= min( 12, 13, iA, 3 );
= max( iA, 4 );
= min( iA, fA, 4, 3 12.34 );
= min( 3.43, 12.43, 34.56, 654.4, 12.99 );
int i1 = arrayMinIndex( aI );
int i2 = arrayMinIndex( aI, 1 );
int i3 = arrayMinIndex( aI, 0, 2 );
int i3 = arrayMinIndex( &aI[2] );
// Returns 1
// Returns 5
// Returns 5, while
// this function call returns index 3.
}
ProcSee Reference Manual
391
Standard pTALK Functions
message (3pTALK)
NAME
message - message broadcasting
SYNOPSIS
void message( int category, char* text, ... );
DESCRIPTION
message() broadcasts the text message given as argument text to all external processes subscribing to the message category given as first argument.
The argument text can contain all formatting options supported by printf(), and can be followed by optional arguments to be formatted.
N
The category is an integer with only 1 bit set, i.e on the form 2 , where N is in the range 031. Values in the range 0-15 is reserved for predefined message categories while bits in the
range 16-31 can be used freely to define own message categories.
A list of some useful predefined message categories follows. The category masks indicated
are available in the header file <P3Misc.h> :
Bit
Mask
Comment
0
CompilationErrors
Errors in pTALK source code
1
CompilationWarnings
Warnings in pTALK source code
2
RunTimeErrors
Run-Time messages from Virtual Machine
3-7
StatusMessages
Miscellaneous status messages
8 - 12
ErrorMessages
Miscellaneous error messages
SEE ALSO
PfDiagnosticsSubscribe(3C) in "ProcSee Reference Manual"on page 182
392
ProcSee Reference Manual
Standard pTALK Functions
Object (3pTALK)
NAME
Object - a base class for all user interface components
SYNOPSIS
// member functions:
char* Object::name();
char* Object::fullName();
Object* Object::owner();
char* Object::metaClass();
int
Object::isMetaClass( char* mClass );
These functions are available in all objects in ProcSee.
name() returns the name of the object, if the object is anonymous, "" is returned.
fullName() returns the fullname of the object. For anonymous objects, the fullName contains the hexadecimal id code for this object instead of the name. Names that contain illegal characters are quoted with ’$’s around the name.
owner() returns the owner of the object. Typically the owner of a picture, is the application.
metaClass() returns the name of the meta class of the object. The meta class of a rectangle
is Rectangle, and so on. The available class names are listed below.
isMetaClass() returns 1 if the class name passed as argument in mClass matches the object class, or one of the classes the objects’ meta class inherits from. E.g. the isMetaClass
function called on a rectangle, returns true both when the mClass argument is "Rectangle"
and when the mClass argument is "Shape". The mClass argument must be a meta class,
like one of the class names listed below:
Window, Picture, Class, Library, TrendLog, Application, Rectangle, RoundRect, Circle,
CircleArc, Ellipse, EllipseArc, DialogueArea, Text, Image, Line, Polygon, Instance, Dialogue, Group, Scale, Trend, TrendGrid, TrendRuler, TrendPres, TimeTag, Colour, Font,
Pattern, Linestyle, Cursor.
ProcSee Reference Manual
393
Standard pTALK Functions
Pattern (3pTALK)
NAME
Pattern - pattern functions
SYNOPSIS
Pattern* Application::getPattern( int pattern,
::ResourceStyle* rs = 0 );
DESCRIPTION
The Application::getPattern() function returns a pointer to the Pattern that is given as input
argument. Used to convert integer pattern index back to the Pattern it represents. An optional
ResourceStyle can be given.
394
ProcSee Reference Manual
Standard pTALK Functions
Picture (3pTALK)
NAME
Picture - user interface component for displaying graphics
SYNOPSIS
// attributes:
float Picture::angleSnap;
int
Picture::crosshairFollowSnap;
int
Picture::crosshairLength;
int
Picture::crosshairVisibility;
int
Picture::gridMajor;
int
Picture::gridMinor;
float Picture::oneToOne;
float Picture::radiusSnap;
float Picture::rotationAngle;
int
Picture::updateMode;
float Picture::worldX;
float Picture::worldY;
float Picture::worldWidth;
float Picture::worldHeight;
float Picture::xReference;
float Picture::yReference;
float Picture::xScaleFactor;
float Picture::yScaleFactor;
float Picture::xSnap;
float Picture::ySnap;
int
Picture::backgroundColour;
int
Picture::foregroundColour;
int
Picture::pattern;
int
Picture::resizeMode
// member functions:
void
Picture::align( int alignment );
void
Picture::adjustColours( ::Matrix* fillM = 0,
::Matrix* borderM = 0 );
void
Picture::clear();
void Picture::clearKeyFocus();
void
Picture::copy();
void
Picture::cut();
void
Picture::distribute( int distribution );
int
Picture::exportEMF( char* destination, int x=0, int y=0
int width=0, int height=0, char* options=0 );
int
Picture::freeze(int mode = -1);
char* Picture::fullName();
char* Picture::getDynPrimitiveAttr( int attribute );
Shape* Picture::getKeyFocusShape()
int
Picture::getPictureFlags();
int
Picture::getPrimitiveAttr( int attribute );
int
Picture::getShapesWithinCircle( float x, float y, float radius,
List* toList,
any (*selectFunc)(Shape*) = 0,
int maxShapes = 0,
char* flags = 0 );
void
Picture::group();
ProcSee Reference Manual
395
Standard pTALK Functions
Picture (3pTALK)
bool
Picture::isDisplayed();
bool
Picture::isIconic();
bool
Picture::isInEditMode();
bool
Picture::isMapped();
bool
Picture::isViewable();
void
Picture::lower();
void
Picture::map();
void
Picture::moveCursor( float x, float y);
void
Picture::moveSelected( int dx, int dy );
char* Picture::name();
int
Picture::numberOfSelected();
void
Picture::pan( float x, float y );
void
Picture::paste();
void
Picture::raise();
int
Picture::selectAllIn( int mode, float x, float y,
float width, float height );
int
Picture::selectShape( int mode, char* shapeFullName );
void
Picture::setDynPrimitiveAttr( int attribute, char* value );
void
Picture::setCursor( int cursor=-2 );
void
Picture::setFocus();
void
Picture::setPictureFlags(int flags);
void
Picture::setPrimitiveAttr( int attribute, int value );
Shape* Picture::shapeAt( float x, float y, int level = 0 );
char* Picture::shapeFullNameAt( float x, float y, int level = 0);
void
Picture::sound( int volume, int pitch, int duration );
Window* Picture::theWindow();
void
Picture::title( char* s );
void
Picture::toBack();
void
Picture::toFront();
void
Picture::ungroup();
void
Picture::unmap();
void
Picture::unmapChildren();
void
Picture::updatePicture();
float Picture::xSnapped( float x );
void
Picture::xy2dxy( float wx, float wy, int* dx, int* dy );
int
Picture::xy2sx( float wx, float wy );
int
Picture::xy2sy( float wx, float wy );
float Picture::xy2wx( int sx, int sy );
float Picture::xy2wy( int sx, int sy );
int
Picture::xy2winxy( float inX, float inY, int* outX, int* outY );
int
Picture::winxy2xy( int inX, int inY, float* outX, float* outY );
float Picture::ySnapped( float y );
void
Picture::zoom( double scale );
double Picture::zoomFactor();
DESCRIPTION
xSnap and ySnap are attributes used in edit mode when new shapes are introduced, moved,
or resized. The values for xSnap and ySnap (given in world coordinates) form an invisible
grid to which points snap. For creation and resizing, the definition points itself snap to the
grid, for motion the motion takes place in multiples of the snap size. angleSnap is given in
degrees and applies to opening and start angles for circular and elliptical arcs. ;Picture:radi-
396
ProcSee Reference Manual
Standard pTALK Functions
Picture (3pTALK)
usSnap applies to the radii of circles and circular arcs. Initial snap sizes are all 0, which
means that snap is disabled. Negative snap settings are ignored by RTM(1), but is interpreted by GED(1) as a disabled snap setting.
crosshairLength, crosshairFollowSnap, and crosshairVisibility are attributes that control the appearance and behaviour of the crosshair cursor. The crosshairLength attribute
indicates how long each crosshair "arm" should be (in pixels), and a negative length indicates an infinite length (default). The crosshairFollowSnap attribute is a boolean specifying if the crosshair should jump in snap units. The default binding is ‘isInEditMode()‘,
which means that the crosshair only follows snap when the picture is in editmode. The
crosshairVisibility attribute is a boolean that controls the visibility of the crosshair. The
default binding is ‘isInEditMode()‘, which means that the crosshair is visible in edit mode
only.
gridMinor and gridMajor controls the appearance of the picture grid when in edit mode.
The gridMinor attribute is an integer specifying the resolution of the grid, relative to the
snap setting. The default value is 1, which means that the grid equals the "snap grid". A
value of 2 means that the grid is twice as coarse as the "snap grid". The gridMajor attribute is an integer specifying the distance between each grid line, measured in grid points.
The default value is 10, which means that every 10th grid point forms a grid line. If either
gridMajor or gridMinor are negative, the grid is invisible. If both gridMajor and gridMinor are negative, then the origin cross is also invisible.
worldX, worldY, worldWidth, and worldHeight are attributes indicating the limits of the
picture in world coordinates, i.e. the part of the world that the picture represents. The oneToOne attribute specifies how many pixels represent one world coordinate unit. The actual relation between screen coordinates and world coordinates will also be affected by
the zoomFactor() of the picture.The default setting is 0 for worldX and worldY, 1280 for
worldWidth, 1024 for worldHeight, and 1 for oneToOne. These settings correspond to a
picture where the world coordinates fully correspond to the screen (pixel) coordinates.
xReference and yReference defines the reference point (in world coordinates) for scaling
and rotation operations. Default value for xReference and yReference is 0, the origin of
the picture coordinate system. xScaleFactor and yScaleFactor specify the factors used to
scale the picture in the x and y direction respectively. Default value for the scale factors
is 1, indicating no scaling. A scale factor of 2 indicates twice the original size. The rotationAngle specifies the rotation angle of the picture in degrees. Default value is 0.
backgroundColour, foregroundColour and pattern are all attributes which can be used
to control a picture's background. The attribute backgroundColour is by default the only
attribute needed to set when changing a picture's background using a solid pattern. The
attributes foregroundColour and pattern are initially set to the value -1, which means that
they are unused. Notice that these attributes will not be documented when set to the value
-1. These attributes are normally used when displaying a pattern or a gradient as a picture's
background. However, the attribute foregroundColour overrides the attribute backgroundColour when it is set to a value unequal to -1 and the pattern is solid. The pattern
attribute can also be used to visualize an image as background by setting this attribute
equal to an RGB pattern.
ProcSee Reference Manual
397
Standard pTALK Functions
Picture (3pTALK)
The updateMode attribute controls the way the picture is updated. The different updatemodes are described in the following table:
Value
Name
Description
0
Partial
Obsolete, automatically uses split buffering mode.
(Was: Redraws only changed shapes.
Nonbuffering.)
1
Full
Obsolete, automatically uses split buffering mode.
(Was: Redraws all changed shapes and shapes
overlapping the changed shapes. Nonbuffering.)
2
Buffering
Redraws the whole picture if anything changed,
but using buffering.
3
Split-Buffering
The picture is split into rectangles, and everything
in a rectangle containing changed shapes will be
redrawn.
4
Smart Split-Buffering
Same as split-buffering, but the areas that have
changed may be smaller for instances and groups.
5
Region-Buffering
All shapes in the regions containing changed
shapes are redrawn. A region is built from the
bounding-boxes of all changed shapes.
6
Smart Region-Buffering
Same as region-buffering, but the areas that have
changed may be smaller for instances and groups.
7
Static-Buffering
The shapes in the picture is sorted into two lists,
the static shapes, and the shapes that have
nonstatic dynamics or are marked as nonstatic
shapes. All the static shapes are drawn into a
buffer, that is used as the background, and all
nonstatic shapes are drawn on top of this, if any
shape have changed.
8
Static-Region-Buffering
Same as static-buffering, but the nonstatic shapes
are drawn as in the region-buffering mode.
9
Static-Split-Buffering
Same as static-buffering, but the nonstatic shapes
are drawn as in the split-buffering mode.
10
Unbuffered
Unbuffered split-buffering mode.
The buffering modes uses a double buffer to prevent flicker on the screen. The unbuffered
mode draws directly to the screen. It is not recommended to use the unbuffered mode.
398
ProcSee Reference Manual
Standard pTALK Functions
Picture (3pTALK)
The "smart" update-modes tries to find smaller changed areas, by using the bounding box
of the inner shapes in instances and groups, whereas the other update-modes uses the
bounding-boxes of the shapes at the picture level.
The static update-modes requires that the static shapes that is in front of and overlaps nonstatic shapes are manually marked with the nonstaticShape shape-flag. If not, they will be
drawn into the background pixmap behind the nonstatic shapes.
The best update mode can not be predicted in advance, it all depends on the size and complexity of the picture.
The attribute resizeMode defines how the picture is resized in the window. ProcSee supports the following resize modes:
Value
Name
Description
0
ResizeWithClipping
The picture is clipped if the window is smaller
than the picture size. The picture is not resized if
the window size is changed.
1
ResizeFitWithNoMargins
Resizes the picture and all the shapes within the
picture to fit into the window, i.e. it is
automatically resized when the size of the
window is changed. There is no margins. The
ascpect ratio is not maintained.
2
ResizeFitWithMargins
Resizes the picture and all the shapes within the
picture to fit into the window, i.e. it is
automatically resized when the size of the
window is changed. The ascpect ratio is
maintained. Depending on the window size,
margins to the left/right or top/bottom will be
visible. The margins will be drawn using the
window’s background colour.
name() returns the name of the picture object, while fullName() returns the complete
name, including all ancestors, for example “::Sim.MainPic”.
map() maps the window associated with the picture, if any. unmap() unmaps the window
associated with the picture, if any, and it disappears from the screen. unmapChildren()
unmaps all children windows of the window associated with the picture, if any.
raise() moves the window associated with the picture to the top of the stacking order
among its siblings. lower() moves the window object to the bottom of the stacking order
among its siblings. Siblings are windows on the same level, i.e. windows sharing the same
parent window. All top-level windows are considered siblings. If no window is associated
with the picture, nothing happens.
ProcSee Reference Manual
399
Standard pTALK Functions
Picture (3pTALK)
title() sets the title of the window associated with the picture according to the parameter. The
title is not to be confused with the name of the window. The window manager is hinted about
the new title and will probably display it as part of the window decoration if it’s a top-level
window. The default title of a window is the name of the picture object displayed in the window. If no window is currently associated with the picture, nothing happens.
moveSelected() moves all selected shapes in the picture dx and dy relative to their current
position.
zoom() zooms the picture by a scale given as argument. The scale is given in percent and
indicates the new scale relative to scale 1:1 (oneToOne).
pan() pans the picture displayed in the window. The x and y panning coordinates are given
as arguments. The picture is panned so that the upper left corner of the view is in position
(x,y).
zoomFactor() returns the current zoom factor in percent, relative to the current 1:1 setting.
xSnapped() and ySnapped() takes a picture coordinate as input and returns the same coordinate snapped according to the current snap setting.
paste() copies all objects from the clipboard onto the picture. copy() copies the currently selected objects to the clipboard. cut() removes the currently selected objects from the picture
and puts a copy of them on the clipboard. clear() removes the currently selected objects from
the picture. toFront() and toBack() moves the currently selected object to the front or back
of the shape stacking order, respectively. group() groups the currently selected objects. ungroup() explodes all the groups and the shapes in the groups becomes part of the selection.
align() aligns the currently selected objects vertically or horizontally. distribute() distributes
the objects evenly in vertical or horizontal direction. setPrimitiveAttr() and setDynPrimitiveAttr() sets the primitive attribute to the value or dynamic value given as argument to all
selected object, respectively. getPrimitiveAttr() and getDynPrimitiveAttr() returns the
value or the dynamic value of the primitive attribute given as argument for the last of the currently selected objects, respectively. Refer to the edit(3pTALK) manual entry for a detailed
description of these functions.
getShapesWithinCircle() fills the toList with the shapes within the circle given by x,y, and
radius, sorted with the shapes closest to x,y first. If a selectFunc function is given, it must
return 0 if the shape given as input parameter to the select function should not be added to
the list, or the value to add to the list if it should be added. If maxShapes is given, this specifies the maximum number of shapes to add to the toList. The flags argument specifies the
point of the shapes to use in the calculation of the distance from the x,y point. The values for
flags can be: shapeposition=xyposition or shapeposition=boundingboxcenter. xyposition
is the point given by the x and y attributes of the shape, or the first point in a line/polygon,
or the upper left corner of the boundingbox of a group. boundingboxcenter is the center of
the smallest enclosing nonrotated rectangle. The default is to use boundingboxcenter. The
names in the flags string can be abbreviated to the shortest prefix of the name that is still
unique, in addition shapeposition can be abbreviated to sp, and boundingboxcenter can be
abbreviated to the shortest unique prefix of bbcenter. It is also possible to find subshapes in
a picture, by specifying how many levels down in each shape to go. This is done by using
levels=N where N is a positive number in the flags string. The default is to only search for
the toplevel shapes.
400
ProcSee Reference Manual
Standard pTALK Functions
Picture (3pTALK)
getKeyFocusShape() returns a pointer to the shape that has got the key focus, otherwise
null. To set the key focus, call Shape::setkeyFocus().
clearKeyFocusShape() clears the key focus. No shape in the picture will have the key
focus after this function has been called. A lostKeyFocus() event will be sent to the shape
about to loose the key focus.
isMapped() returns true if a window is associated with the picture, and that window is
currently mapped on the displayed, false otherwise. This does not imply that it is currently
viewable.
isViewable() returns true if a window is associated with the picture, and that window is
currently viewable on the displayed, false otherwise.
isIconic() returns true if the window associated with the picture is iconified, false otherwise.
isDisplayed() returns true if a window is currently associated with the picture, false otherwise.
isInEditMode() returns true if the picture is currently in edit mode, false otherwise.
shapeFullNameAt() returns the full qualified name of the foremost shape located at the
given x, y world coordinate, or an empty string if no shape is present. If the last argument
level is set to a value larger than zero sub shapes will be returned as well, that is shapes in
instance, groups and trend. If level is set it will recursively scan this number of sub levels.
shapeAt() is analogues to shapeFullNameAt() except that it returns a Shape pointer instead of a full qualified name. A null pointer is returned if no shape is present at the given
position.
setFocus() set focus on the window associated with the picture, if any.
theWindow() returns a pointer to the window in which the picture is currently displayed,
or 0 if the picture is not currently displayed in any window.
selectShape() changes the selection state of the shape given by shapeFullName. If mode
is 0, the shape is unselected, if mode is 1, the shape is selected, and if mode is 2 the shape
is toggle selected. The routine returns the number of shapes whose selection state were
changed by the call, i.e. 0 or 1.
selectAllIn() changes the selection state of all shapes completely included in the rectangular area given by x, y, width, and height. If mode is 0, the shapes are unselected, if mode
is 1, the shapes are selected, and if mode is 2 the shapes are toggle selected. If both width
and height are 0, all shapes in the picture is affected by the call. The routine returns the
number of shapes whose selection state were changed by the call.
setCursor() changes the cursor temporarily for this window. See "Cursor - cursor functions" on page 310.
sound() rings a bell at the display on which this picture is displayed. The volume is given
in the range -100 to 100; see the XBell(3X) man page for a description of this setting. The
pitch is given in Hz, and the duration is given in milliseconds. Note that the actual sound
is hardware dependent.
ProcSee Reference Manual
401
Standard pTALK Functions
Picture (3pTALK)
xy2dxy() convert picture world coordinates to display coordinates relative to upper left corner of the display. This function is useful when posting a popup- or pulldown-menu at a given position on the screen.
xy2sx() and xy2sy() converts picture world coordinates to screen coordinates, relative to upper left corner of the picture.
xy2wx() and xy2wy() converts screen coordinates relative to upper left corner of the picture,
to picture world coordinates.
xy2winxy() converts picture world coordinates to screen coordinates relative to the upper left
corner of the window, winxy2xy() converts screen coordinates relative to the upper left corner of the window to picture world coordinates.
moveCursor() will move the mouse cursor to the position given by x and y. The (x,y) position
is given in world coordinates.
exportEMF() exports the picture to an enhanced Windows meta file (EMF). Windows meta
file is a vector based file format that is widely used on the Windows platforms. This function
supports exporting of the EMF file directly to the clipboard or to a file. The first argument
destination is either a file name, an emtpy string ("") or a null pointer (0). If a file name is
specified the EMF file will be saved to disk. If an emtpy string or a null pointer is specified
the EMF file will be copied to the clipboard. The arguments x, y, width and height are used
to define the picture area that will be exported to the EMF file. These arguments have default
values which will dump the entire picture to the EMF file (The value 0 is used as default argument). The optional argument options is used to specify eventual resource styles to use.
For more information about the values this option can have, see resource styles on page 419.
This function is only available on the Windows platform.
The freeze() function inhibits the picture from being updated. If the input argument is -1, or
not given, the function only returns the freeze status. If the input argument is 0 it unfreezes
the picture, and if it is 1 it freezes the picture. It returns the new freeze status (0 or 1).
The updatePicture() function is used to update the picture immediately. As opposed to the
normal update functions, the updatePicture function does not merge consecutive updates.
The setPictureFlags() function is used to mark this picture as a Drag and Drop target area,
by using the values DnDFlags.none, or DnDFlags.copy, DnDFlags.move, or DnDFlags.link
ored together. The value 0 means that the picture is not a Drag and Drop target area. The getPictureFlags() function returns the current setting.
The function adjustColours(…) modifies all the colours used in a picture. The arguments to
this function are one or two 4 by 4 Matrix objects filled with colour adjustment data. The
functions setGreyMatrix(…) and setRGBMatrix(…) can be used to initialize the matrices.
Different colour adjustments can be made to the shapes’ fill- and border colour. The parameter fillM is the fill colour and borderM is the border colour. If only one Matrix argument is
specified the same adjustment will be made to both fill- and border colour. To reset the colours to default, call this function without arguments. This function can be used to make a picture look brighter, darker or displayed in grey-scale. It can for example also be used to
highlight the shapes’ border. Notice that the original colours will be left unchanged when this
function is used.
The format of the 4 by 4 colour matrix is as follows:
402
ProcSee Reference Manual
Standard pTALK Functions
Picture (3pTALK)
Rr
Gr
Br
0
Rg
Gg
Bg
0
Rb
Gb
Bb
0
Rt
Gt
Bt
1
r
r'
g = g'
b
b'
1
0
Where Rr, Rg, Rb are the red, green and blue factors are multiplied with the colour producing the red colour component. It is analogous to calculate the green and blue colours,
where G* and B* are used instead. Rt, Gt an Bt are the translation, i.e. lightness. Values
close to 0 will produce dark colours, while values close to 1 will produce light colours.
EXAMPLES
alarms.raise();
// raise the picture “alarms”
spreadSheet.title( “NoName” ); // entitle picture “spreadSheet” NoName
alarms.zoom( 200 );
// zoom in to scale 2:1
SEE ALSO
Window(3pTALK) in "ProcSee Reference Manual"on page 488
load/display(3pTALK) in "ProcSee Reference Manual"on page 382
edit(3pTALK) in "ProcSee Reference Manual"on page 327
save/document(3pTALK) in "ProcSee Reference Manual"on page 425
XBell(3X), Matrix, setGreyMatrix, setRGBMatrix
ProcSee Reference Manual
403
Standard pTALK Functions
Point (3pTALK)
NAME
Point - object for storing a position.
SYNOPSIS
double
double
Point::x;
Point::y;
void
Point::set( double x, double y );
Point*
::newPoint();
DESCRIPTION
Point objects holds a position. It has the attributes x, and y, all of type double. The Point function set() can be used to set all the values of the Point object in one operation.
Named Point objects are created like attributes. The values of a Point object is not saved or
documented.
Anonymous Point objects can be created with the function newPoint(), which creates a Point
object, and returns a pointer to it. When there are no pointers left pointing to the created
Point, it will be removed automatically.
404
ProcSee Reference Manual
Standard pTALK Functions
printer (3pTALK)
NAME
printer - functions for printer configuration
SYNOPSIS
void Application::loadPrinterFiles( int loadOption );
DESCRIPTION
The loadPrinterFiles() function is used to load or reload the printer definition files used
by the exportPostScript() function.
The loadOption parameter defines how the loading is done:
0 (LoadNew) : Only load printer definition files for printer definitions not yet loaded into
the application.
1 (ClearAndReload) : Remove all existing printer definitions from the application, and
load all printer definition files.
2 (Reload) : Load all printer definition files, and keep the definitions that does not have
any printer definition files.
The printer definition files are files on the $PROCSEE_DIR/etc, $HOME, and Application directory, that has the extension .pprn.
EXAMPLE
Example of a printer.pprn file:
#-----------------------------------------------#
#
#
# Configuration file for the printer named #
# after the file name except the extention. #
#
#
#-----------------------------------------------#
# topMargin in cm.
tm
2.3
# bottomMargin in cm.
bm
2.6
# leftMargin in cm.
lm
0.2
# rightMargin in cm.
rm
0.2
# paperHeight in cm
height
29.7
# paperWidth in cm
width
21.0
ProcSee Reference Manual
405
Standard pTALK Functions
loadPrinterFiles (3pTALK)
# colour printer (yes/no)
color
yes
# blackAndWhite output (yes/no)
bw
no
# rgbTuning values in % (whitepoint)
rgb
80 100 100
# rgbGamma values
rgbg
1.0 1.0 1.0
# includePsFile, adding extra PostScript into the generated file.
# (normally not used)
incl printerSetup.ps
# printerInfo text about the printer
info This colour printer is located in the computerlab at second floor.
# printCommand to use, %F is the filename, %P is the printername
cmd lp -d%P %F
Instead of the short forms used in the example above, topMargin can be used instead of tm,
bottomMargin instead of bm and so on. (The long name is written as the first word in the
comments above). Tags not found in the .pprn file, will get default values; To make a printer
available for pTALK, just create an empty file in one of the locations given above with the
name of the printer with the .pprn extension added.
Examples of printer configuration files are found in $PROCSEE_DIR/etc.
NOTES
The loadPrinterFiles() function is run automatically when an application is loaded.
For Microsoft Windows, see "ProcSee User’s Guide", Section 12.2 - The File Menu: "Configure printing on Windows".
SEE ALSO
exportPostScript(3pTALK) in "ProcSee Reference Manual"on page 348
406
ProcSee Reference Manual
Standard pTALK Functions
print (3pTALK)
NAME
printf - formatted output
sprintf, strformat - store/create a formatted string
SYNOPSIS
void printf( char* format, ...);
int sprintf( char* targetString, char* format, ... );
char* strformat( char* format, ...);
DESCRIPTION
printf() is writing output to the standard output stream. On the Microsoft Windows platform, this is the output window of the RTM, and the log-file if rtm is started with the -L
option. On the other platforms (Linux, Mac, ...) this output is displayed in the terminal
window where the RTM was started, and can eventually be redirected to a file there using
normal shell operations.
sprintf() place output, followed by the null-character (\0), in consecutive bytes starting at
targetString[0]. sprintf() returns the number of characters put into the targetString. If the
result is longer than the targetString buffer, an error message is given, and the result is cut
at the length of the targetString buffer. It is the user's responsibility to ensure that enough
storage is available.
strformat() does the same as sprintf(), but it allocates the buffer needed by the result of
the formatting, and returns this. If there are errors in the format, it can return 0, but in most
cases it returns a string.
All these functions use formatting of strings like in the C language printf function. The
allowed formatting options are described below. A string will be generated in most cases,
even if there are errors or warnings.
The format parameter is a character string containing two types of objects: plain characters that are copied to the output, and conversion specifications, each of which results in
fetching zero or more arguments. The result is undefined if there is insufficient arguments
for the format.
The conversion specification starts with a ’%’-character, and ends with a conversion specifier character. Between these, there can be (in order): flags, length, precision, exponentSize, valueSize.
The flags can be a combination of the following characters:
Flag
Description
-
Left adjust (Pad with space at right end, requires width).
!
Center adjust (Pad with space at both sides, requires width).
ProcSee Reference Manual
407
Standard pTALK Functions
Flag
0
space
print (3pTALK)
Description
Pad with zeros on the left of numbers (ignore if - or !, or precision
for numbers, or no width).
Use space in front of positive numbers.
+
Use + in front of positive numbers.
#
Use alternate form for the value.
For integer conversions, a prefix is added, so that it can be read back
by the pTalk parser. For o the octal number is prefixed with 0, for the
other integer formats, the number is prefixed with 0r where r is b for
binary, d for decimal, and x for hexadecimal. If an upper-case letter
is wanted, the format type letters b, d, x can be written with uppercase when the ’#’-flag is given.
For e, E, f, F, g, G, the result will always contain a decimal point,
even if no digits follow it, For g and G trailing zeros are not
removed.
’
Use thousand-separators in the number. For binary every 4 digits are
grouped, for decimal and octal every 3 digits are grouped, for hexadecimal every 2 digits are grouped.
The width can be specified as a number, or with the character ’*’, meaning to read the next
integer from the arguments for this value. The width is the minimum width of the result. If
the result is smaller than this width, it will be padded with spaces at the left, or according to
the ’-’, ’!’, and ’0’ flags. For the Text shape and the Scale shape, the width is also the maximum width, resulting in ’*’-characters instead of the value when the value is too large. All
other places, the result is expanded to show the value when the value needs more room than
the width.
The precision starts with a ’.’-character, and can be specified as a number, or with the character ’*’, meaning to read the next integer from the arguments for this value. For integer format conversions, the precision gives the minimum number of digits to use, resulting in extra
zeros added in front of shorter numbers. For e, E, f, and F, it gives the number of digits after
the decimal separator. For g and G, it gives the number of significant digits. For s, it gives
the maximum number of characters to use from the string.
For the format types e, E, g, and G, the format can contain an exponent size1. This starts with
the ’:’-character, and can be followed by a ’+’ or ’-’ character, and then a number or the character ’*’, meaning to read the next integer from the arguments for this value. The ’-’ character
means to have a sign on the exponent only for negative exponents. The ’+’ sign means to
have a sign on the exponent always, and is the default. The default number of digits for the
exponent is 2.
1. The exponent size specification is specific to pTalk, and not available in normal C/C++.
408
ProcSee Reference Manual
Standard pTALK Functions
print (3pTALK)
The optional valueSize can be ’hh’, ’h’, or ’V’. ’hh’ treats the value as an 8 bits value, ’h’
treats the value as a 16 bits value. The ’V’ flag treats the value as the type and size it has,
resulting in negative numbers being displayed with a sign even for the unsigned integer
conversions. If none of ’hh’, ’h’, or ’V’ is specified, the value is treated as a 32 bits value.
The valueSize is only useful on the unsigned integer conversions, e.g. for ’b’, ’o’, ’u’, ’x’
and ’X’, where it will influence how negative values are displayed. Examples: strformat("%x", -1) results in "ffffffff", strformat("%hhx", -1) results in "ff", strformat("%Vx",
-123) results in "-7b". If the value is larger than the size specified, the next larger size will
be used (8 -> 16 -> 32bits), and a warning will be given.
The following conversion specifier characters are supported:
Conversion
specifier
Description
%
Output the % character, uses no arguments.
b
Binary number.a
o
Octal number.
d, i
Decimal number.
u
Decimal number.
x, X
Hexadecimal number using abcdef or ABCDEF for 10, ..., 15.
e, E
Floating point number with exponent.
f, F
Floating point number without exponent.
g, G
Floating point number with good presentation (with or without
exponent)
c
Character.
s
String.
p
Output the fullname of the object in the RTM symbol table
pointed to.
a. Output of binary numbers are specific to pTalk, and not available in normal C/C++.
For the integer conversions d and i, the value can be both a signed or an unsigned value,
and the output is done according to the type of the argument. For all the other integer conversions, e.g.: b, o, u, x, X, the value is treated as an unsigned value.
In addition to the above, the position of the arguments can be specified, using %N$ and
*N$ where N is the index into the argument to use, in the range 1 to number of arguments.
%N$ is for the argument to be converted, *N$ is instead of the * character on the width,
precision, and exponent size. When using one position specifier, all arguments must be
referenced in this way. Examples: strformat( "%2$d and %1$f", 3.14, 123 ); strformat(
"%3$*1$.*2$f", 10, 2, 123.45 );
ProcSee Reference Manual
409
Standard pTALK Functions
print (3pTALK)
EXAMPLES
char* charPtr; // pointing to a character array
int anInt = 55;
:
// after the following sprintf has bee executed
// charPtr will point to a character string containing
// Hello world
sprintf( charPtr, "Hello %s", "world" );
// execution of the following printf will print
// Value of an Int 55
// to the terminal window where the rtm was started in
printf( "Value of an Int %d", anInt );
410
ProcSee Reference Manual
Standard pTALK Functions
process (3pTALK)
NAME
process - process functions
SYNOPSIS
int Application::connectToProcess( char* processName );
int Application::disconnectFromProcess( char* processName );
void Application::processNotify( int status, char* processName );
int processIsConnected( char* processFullName );
int loadDatabase( char* processFullName, char* dbFileName );
DESCRIPTION
connectToProcess() connects the RTM to the process with the name processName. The
process the RTM trying to establish a connection to must be initialized with PfInit(3c).
The argument processName in PfInit(3c) must be equal to the argument used in this
pTALK function. processName is the name the application process is registered as with
the Control Server.
disconnectFromProcess() disconnects the RTM from the process. The argument processName is the process to disconnect from.
processNotify() is not a standard pTALK function but is a user defined callback function
located in the application scope that is called when the connection state of a remote process changes. If the connection state of the remote process is needed, create a user defined
pTALK function with the name processNotify() in the application scope. This function
is also invoked when the connection to an external trend logger is established or lost. The
arguments to this function is the name of the process changing state (processName) and
the status itself (status). Notice that the status parameter is a bitmask. Several bits can be
set. The bits have the following meaning:
Bit
mask
Meaning
0x1
Connection established.
0x2
Waiting for connection from process.
0x4
Remote process wanted connection.
0x8
RTM has given up establish connection to the remote process. Timeout.
0x10
Gracefully disconnected from the remote process.
0x80
The connection to the remote process has been broken.
0x200
Incompatible SWBus versions. Check that the process is using the
same SWBus version as the RTM.
ProcSee Reference Manual
411
Standard pTALK Functions
process (3pTALK)
processIsConnected() returns true if the process specified by processFullName is connected to the RTM, otherwise false. The name processFullName is either the fullname to the process or just the process name.
loadDatabase() load the database file named specified in dbFileName located in the named
process scope.
EXAMPLE
void processNotify( int status, char* processName )
{
if ( status & 0x1 )
printf( "Connection to process \"%s\" established!", processName );
else
if ( status & ( 0x10 | 0x80 ) )
printf( "Lost connection to process \"%s\"!", processName );
else
if ( status & 0x8 )
printf( "Failed to connect to process \"%s\"!", processName );
else
if ( status & 0x200 )
printf( "Incompatible SWBus versions. Check \"%s\"!", processName );
}
SEE ALSO
PfInit(3c) in "ProcSee Reference Manual" on page 217.
412
ProcSee Reference Manual
Standard pTALK Functions
random (3pTALK)
NAME
random - random number generator
SYNOPSIS
int random( int max );
DESCRIPTION
random() returns a random number in the interval [0,max>, i.e. excluding max. This routine uses the UNIX function drand48(3C), and will be seeded by a call to srand48(3C)
(taking the current time as input) each time a new application is loaded into RTM(1).
ProcSee Reference Manual
413
Standard pTALK Functions
readdir (3pTALK)
NAME
readdir - read filenames from a directory
SYNOPSIS
int readdir(List* list, char* directory, char* match="*", char* flags="");
DESCRIPTION
readdir() reads filenames from the directory and adds them to the list. If a match parameter
is given, only files matching this string will be added to the list. The match parameter can
contain ’*’ which matches zero or more characters, and ’?’ which matches one character. The
flags parameter can have the following values:
files - match if the filename is an ordinary file.
directories - match if the filename is a directory.
symlinks or linkssym - match if the filename is a symbolic link.
all - match all (the above) filetypes. This is the default.
In addition casesensitive or nocasesensitive can be given, to set the case sensitivnes of the
match. Default on MS-Windows is not case-senisitve, on all other platforms the default is
case-sensitive matches.
Wanted permissions can also be specified using permissions=P, where P is combinations of
the following: r : readable, w : writable, x : executable, h : hidden, s : system (s is ignored
on unix, h is a file flag on MSWindow, and that the file starts with ’.’ on unix), with ’+’ for
wanted, and ’-’ for not wanted. Example: permissions=+rw-h which means that the file
should be both readable and writable, but should not be hidden.
The values in the flags parameter can be abbreviated to the shortest unique prefix.
EXAMPLES
To find all writable files on the /tmp directory, starting with the letter a or A:
fileNameList.clear();
readdir(fileNameList, "/tmp", "a*", "files,nocase,perm=+w");
414
ProcSee Reference Manual
Standard pTALK Functions
Rect (3pTALK)
NAME
Rect - object for storing position and size of a rectangular area.
SYNOPSIS
double
double
double
double
Rect::x;
Rect::y;
Rect::width;
Rect::height;
void
Rect::set( double x, double y, double width, double height );
Rect*
::newRect();
DESCRIPTION
Rect objects holds the position and size of a rectangular area. It has the attributes x, y,
width, and height, all of type double. The Rect function set() can be used to set all the
values of the Rect object in one operation.
Named Rect objects are created like attributes. The values of a Rect object is not saved or
documented.
Anonymous Rect objects can be created with the function newRect(), which creates a
Rect object, and returns a pointer to it. When there are no pointers left pointing to the created Rect, it will be removed automatically.
ProcSee Reference Manual
415
Standard pTALK Functions
remove (3pTALK)
NAME
remove - delete user interface objects
SYNOPSIS
bool remove( char* objectFullName );
DESCRIPTION
remove() deletes the user interface object given by objectFullName. Currently this applies
to shapes, instances, pictures, libraries, applications, user defined functions and attributes,
and classes. remove() returns true if the object was successfully removed, false otherwise.
If an attempt to remove the object that will receive the return value is made, the remove()
operation will be executed asynchronously. An example of this can be to remove a picture
from within a dialogue in the same picture. In this case, the return value will always be true.
416
ProcSee Reference Manual
Standard pTALK Functions
rename (3pTALK)
NAME
rename - rename a named user interface object
SYNOPSIS
int rename( char* objectFullName, char* newName );
DESCRIPTION
rename() renames the object specified by objectFullName to the string pointed to by
newName. Currently this applies to shapes, instances, pictures, libraries, user defined
functions and attributes, and classes. The routine returns true if the object was successfully renamed, otherwise false.
ProcSee Reference Manual
417
Standard pTALK Functions
ResourceStyle (3pTALK)
NAME
ResourceStyle – container for modified resources
DESCRIPTION
The class ResourceStyle is a container for the ProcSee resources Colour, Pattern, Cursor,
Linestyle and Font. Resources defined in the application or library can be added to a resource style, modified and used for instance when printing or dumping an image to file.
If a computer is connected to a black and white printer, a resource style using grey scale colours would be preferred. If the background colours used in a picture is black it would have
been nice to have the opportunity to modify this colour to be white when printed. This is
where ResourceStyle comes in handy. The black colour can be added to a ResourceStyle
called for instance BWPrinter and modified from being black to become white. The background colour used when printing will be white when this BWPrinter ResourceStyle is used
in the exportPostScript(…) function.
Another use of resource styles are the ability to change the resources used by the application
or the pictures without modifying the original resources. Different ResourceStyle can be
used for instance for daylight and night. Another use of resource styles is the possibility to
customize the colours to different users. The resource style can be set when the user is logging into the system.
When a ResourceStyle is created not all resources defined in the application or library needs
to be added. Only the resources necessary to modify needs to be added. The graphics editor
GED has built in support for adding and modifying resources used in resource styles.
SEE ALSO
ResourceStyle functions
418
ProcSee Reference Manual
Standard pTALK Functions
ResourceStyle functions (3pTALK)
NAME
ResourceStyle functions - resource style functions
SYNOPSIS
void Window::useResourceStyle( ResourceStyle* frs,
ResourceStyle* lrs);
void Picture::useResourceStyle( ResourceStyle* frs,
ResourceStyle* lrs);
void Application::useResourceStyle( ResourceStyle* frs,
ResourceStyle* lrs );
... ...( ..., char* options="" ); // resource style options.
DESCRIPTION
The useResourceStyle() function for windows and pictures changes the resource style
used for drawing in this window or the window the picture is displayed in. The useResourceStyle() function for applications changes the resource style used globaly.
The arguments to these functions are the resource style to use on the fill areas, and on the
line areas of the shapes. If only one argument is used, the same resource style will be used
on both the fill and the line areas. If no arguments are used, no resource style is used, and
the global resources will be used for all drawing.
Some functions like exportPostScript, have an options parameter, that can be used to
specify the resource styles to use. The values that specifies resource styles are as follows:
resourceStyleFill=RSF or rsf=RSF
resourceStyleBorder=RSB or rsb=RSB
resourceStyle=RS or rs=RS
Where RSF is the name of a resource style to use for fill, RSB is the name of a resource
style to use for borders, and RS is the name of a resource style to use for both fill and border areas. Example: exportPostScript(....., "rsf=myRS1,rsb=myRS2");
SEE ALSO
"ResourceStyles" on page 59 in "The Configuration Language" chapter in the ProcSee
Reference Manual.
ProcSee Reference Manual
419
Standard pTALK Functions
RoundRect (3pTALK)
NAME
RoundRect – rectangle shape with rounded corners.
SYNOPSIS
// Attributes:
float
RoundRect::x;
float
RoundRect::y;
float
RoundRect::width;
float
RoundRect::height;
float
RoundRect::xRadiusCorner;
float
RoundRect::yRadiusCorner;
char*
RoundRect::flags;
DESCRIPTION
RoundRect is a graphic rectangle shape in ProcSee with rounded corners. A RoundRect
shape does not have sharp 90 degree angle corners, in contrast to a Rectangle shape. The size
of the rounded corners can be specified with the attributes xRadiusCorner and yRadiusCorner. These attributes are used to determine the shape of the RoundRect shape. Smaller values will produce a RoundRect resembling a rectangle shape, while large values will
produce a RoundRect resembling a ellipse shape. Setting one or both of these attributes to
the value 0 will produce a rectangle shape with sharp corners.
The attributes x and y specifies the location of the RoundRect shape, and the attributes
width and height specifies the size of the shape.
The attribute flags is used to modify the RoundRect's default values. The RoundRect's default corners are round, but these can be changed by the flags attribute. The following table
describes the corner flags (notice that the next table describes the corner flags options):
420
Corner Flags
Description
corners
the flag applies to all the RoundRect's corners
topleftCorner
lefttopCorner
tlC
ltC
this flag applies to the RoundRect's top left
corner.
toprightCorner
righttopCorner
trC
rtC
this flag applies to the RoundRect's top right
corner.
bottomleftCorner
leftbottomCorner
blC
lbC
this flag applies to the RoundRect's bottom left
corner.
ProcSee Reference Manual
Standard pTALK Functions
bottomrightCorner
rightbottomCorner
brC
rbC
RoundRect (3pTALK)
this flag applies to the RoundRect's bottom right
corner.
Each of these corner flags must be set to one of the RoundRect’s supported corner options, as described in the following table:
Corner Options
Description
round
the corner is round, i.e. drawn as an ellipse arc.
square
the corner is square, i.e. just like a Rectangle corner.
cut
the corner is cut, i.e. the corner is drawn straight
between the xRadiusCorner and yRadiusCorner values.
invertedRound
the corner is round, but is drawn inwards, i.e.
towards the centre.
iround
a shorthand notation for invertedRound.
invertedSquare
the corner is square, but is drawn inwards.
isquare
a shorthand notation for invertedSquare.
EXAMPLE
// Defines a roundRect were the top left corner is square.
roundRect r1
{
...
flags = "tlC=square";
}
// Defines a roundRect were all the corners are interved round, except for the bottom right corner
which
// is round.
roundRect r1
{
...
flags = "corners=iround, brC=round";
}
SEE ALSO
newRoundRect
ProcSee Reference Manual
421
Standard pTALK Functions
rtmName, rtmVersion (3pTALK)
NAME
rtmName - get the name of the Run-Time Manager
rtmVersion - return the version string of the Run-Time Manager
SYNOPSIS
char* rtmName();
char* rtmVersion();
DESCRIPTION
rtmName() returns the name of the Run-Time Manager. This name can be specified using
the -n option to the rtm(1). If this option is omitted the default value is rtm. The name returned from this function is the one registered with control(1).
rtmVersion() returns the version string of the Run-Time Manager. The string returned is on
the format: "ProcSee 3.3 RTM (January 2006)".
422
ProcSee Reference Manual
Standard pTALK Functions
runTime environment (3pTALK)
NAME
runTime environment - functions used to manipulate the run-time environment
SYNOPSIS
void maxRunTimeMessages( int n = -1 );
void ignoreWatchdog( int state );
DESCRIPTION
maxRunTimeMessages changes the maximum number of run-time messages printed between two states where the Run-Time Manager is idle (normally between two global updates). maxRunTimeMessages is used to limit the number of error messages printed and
should only be used during application development. Printing a large number of run-time
messages can dramatically reduce system performance. The argument n can have one of
the following values. Setting the argument n to the default value -1 will clear the limit, all
run-time messages will be printed. Setting the argument to zero will ignore all run-time
messages. Settting this argument to a value greather than zero will print maximum this
number of run-time messages.
ignoreWatchdog disables or enables the watch dog counter used when running pTALK
code. The watch dog counter prevents pTALK code from running in an infinite loop. The
initial value of the watch dog counter in the Run-Time Manager is one million virtual machine instructions. When the counter reaches the value zero, the loop terminates and an
error message is isssued. ignoreWatchdog can be used to disable this check and prevent
pTALK code from terminating during lengthy operations, like multi nested for loops. The
argument state accepts the following values. The value 0 enables the watch dog. The value
1 ignores the watch dog in current pTALK function only. The value 2 ignores the watch
dog in current pTALK function and functions called from current function. Any other value will be ignored.
EXAMPLE
double calculate()
{
ignoreWatchdog( 2 );
// Ignore watch dog check in this as well as in calcPart
double sum = 0.0;
for ( int i = 0; i < 10000; i++ )
for ( int j = 0; j < 10000; j++ )
{
double part = calcPart( i, j );
sum = calcAverage( i, j, part );
}
}
double calcPart( int i, int j )
{
double part = 0.0;
// This function uses the caller’s ignoreWatchDog
// settings.
ProcSee Reference Manual
423
Standard pTALK Functions
runTime environment (3pTALK)
for ( int x = 0; x < i; x++ )
for ( int y = 0; y < j; y++ )
part += ...;
return part;
}
double calcAverage( int i, int j, double part )
{
ignoreWatchdog( 0 ); // Enables the watch dog in this function only. It does
// not affect the caller function.
return ...;
}
424
ProcSee Reference Manual
Standard pTALK Functions
save,document (3pTALK)
NAME
save/document - saving and documenting user interface objects
SYNOPSIS
int save( char* objectFullName );
int document( char* objectFullName, char* options=0 );
void setPath( char* objectFullName, char* path );
char* getPath( char* objectFullName );
void setFileName( char* applicationFullName, char* fileName );
char* getFileName( char* applicationFullName );
char* getApplicationName( char* applicationFileName );
DESCRIPTION
These functions all work on pictures, libraries and whole applications.
save() saves the object given by objectFullName to binary file. The file gets an extension
according to the table below:
object type
file extension
picture
.ppic
library
.plib
application
.pctx
The file name will be the same as the object name, and the path will be the one it was previously loaded from, or if it was not loaded, the path set by setPath(). For applications,
the filename defaults to the object name, but can be set by setFileName().
document() saves the object given by objectFullName to an ASCII file in a format readable by pcc(1). The file gets the extension .Tdoc. The file name will be the same as the
object name, and the path will be the one it was previously loaded from, or if it was not
loaded, the path set by setPath(). The optional options parameter to document (introduced
in ProcSee 3.8), can specify a comma-separated combination of the options in the table
below:
option
description
noDefaults
Don’t document attributes that have default values. Implies
noScaleRotateDefaults.
noScaleRotateDefaults
Don’t document xScaleFactor, yScaleFactor or rotationAngle attributes when they have default values
noXYreference
Don’t document any scale/rotate attribute, including xReference and
yReference attributes if the scale and rotate attributes have default
values. Gives all or no scale/rotate attributes unless used together
with noDefaults or noScaleRotateDefaults.
ProcSee Reference Manual
425
Standard pTALK Functions
option
save,document (3pTALK)
description
oldComments
Add a lot of automatic comments to the file produced, e.g. comments on some end braces ’}’, like // end of picture ...
Should not be used, and if used, the option ’-o comments=none’
should be used on pcc.
oldKeywords
Adds the word "attribute" in front of user defined instance attributes.
Adds the word "statement" to the event attribute of dialogues. Adds
an "=" to the database elements.
oldNewLines
Outputs some resources on a single line, e.g. colour definitions.
oldOrder
In ProcSee 3.8 the document order was changed to match the order
used in the binary files, to make internal testing easier. This option
outputs the elements in the order used before version 3.8.
old
Short for all the old... options above.
Even though the old... options gives the old behaviour, there are still some changes in amount
of whitespace between the files before version 3.8 and newer versions.
The functions save() and document() returns 0 on success, otherwise an error code describing the problem is returned. The api function PfGetSystemError(3c) or the pTALK function getErrorString() can be used to obtain the error text corresponding to this error code.
setPath() sets the path of the object given by objectFullName to the value given as argument. This affects the behaviour of save() and document() according to the description
above.
The path argument to setPath() for applications must be absolute. For pictures and libraries,
the path argument can be relative to that of the application.
getPath() returns the path of the object given by objectFullName.
setFileName() sets the basename part (no extension or path) of the filename of the application given in the applicationFullName parameter to the fileName parameter.
getFileName() returns the complete filename (including path and extension) of the application given in the applicationFullName parameter.
getApplicationName() returns the application name of the application that has a complete
filename equal to the applicationFileName parameter.
SEE ALSO
load/display(3pTALK) in "ProcSee Reference Manual"on page 382
426
ProcSee Reference Manual
Standard pTALK Functions
Scale (3pTALK)
NAME
Scale – scale and grid shape
SYNOPSIS
// Attributes:
char*
Scale::flags;
char*
Scale::format;
float
Scale::length;
float
Scale::lengthMajorTicks;
float
Scale::lengthMinorTicks;
float
Scale::majorTickStepValue;
float
Scale::maxValue;
float
Scale::minValue;
int
Scale::minorTickSteps;
float
Scale::offset;
int
Scale::theFont;
// Functions:
int Scale::getPosValue( double x, double y, double* value );
int Scale::getValuePos( double value, double* x, double* y );
DESCRIPTION
Scale is a graphic shape. It is composed of four parts, which are a base line, major and
minor ticks, plus labels. The Scale shape can be used both as a scale shape and as a grid
shape. The difference between a scale shape and a grid shape is just the visualization of
the shape. The major and minor grid lines when used as a grid shape are equal in size and
are longer than the corresponding major and minor ticks used by a scale shape. Another
difference is that the labels are displayed on opposite sides of the base line. When creating
a Scale shape in the graphics editor GED, using interactive drawing, the scale shape
changes appearance depending on the width of the shape. If the width is large, a grid shape
is created, otherwise a scale shape. The differences between a scale shape and a grid shape
are just the attribute settings. Notice that a vertical Scale shape is rotated 90 degrees. The
Scale shape can be used for example when creating XY-plot or in trend diagrams to display the curves’ values.
The attribute length specifies the length of the Scale shape in world coordinates. The attributes lengthMajorTicks and lengtMinorTicks control the length of major and minor
ticks, respectively.
minValue and maxValue specifies the minimum and maximum value of the Scale shape.
Notice that the value of maxValue can be smaller than the value of minValue. The labels
will be displayed from maximum to minimum, instead of minimum to maximum when
this is true.
The major tick lines are visually evenly spaced within the Scale shape. The attribute majorTickStepValue gives the length between each major tick step. This value must be given in the same unit as the attribute minValue and maxValue. If the Scale shape is
logarithmic the value between each major tick step are majorTickStepValue times larger
than the previous value. If the shape is linear the value of the next major tick step is the
ProcSee Reference Manual
427
Standard pTALK Functions
Scale (3pTALK)
previous tick step value plus the value of the attribute majorTickStepValue. See the flags
section on how to set the shape in linear or logarithmic mode. The attribute minorTickSteps
controls the number of minor ticks between two major ticks.
The attributes theFont and format controls the labels which are displayed. The format attribute has the same syntax as in the Text shape, but only the number formatting specifiers
are legal in addition to pure text, for instance “%.2f”, “%g”, “%-10.2f Kb”. The position of
the labels can be changed via the attribute offset. The offset is specified in world coordinates
from the base line. A positive offset will display the labels above or to the right of the base
line, a negative value in the opposite direction.
alignment specifies where to display the text relative to its position. The default value of this
attribute is center, vcenter. The text can be left (0), center (1), decimal (3) and right (2)
aligned in the horizontal direction, and top (0x10), vcenter (0x20), baseline (0) and bottom
(0x30) aligned in the vertical direction. The constants for these values are defined in the
enum TextAlign. (This is the same as for the Text shape.)
The Scale shape has an attribute called flags where a lot of extra functionality can be specified. Most of the functionality provided by this attribute is set during design-time and should
not be changed during run-time, for instance on every update. The following flags are available for the flags attribute:
Flag
Options
Description
labelOverlap
hide
Hides overlapping labels. See flag labelSpace.
off
Overwrite overlapping labels. This is default.
labelSpace
>= 0
Used together with labelOverlap when set to hide.
Labels inside this value will be hidden. Must be an
integer value >= 0. Default is 2.
label
major
Show labels at major ticks. Default on.
minor
Show labels at minor ticks.
min
Always show label at minimum value.
max
Always show label at maximum value.
all
Show all labels.
none
Do not display any labels.
min
Start major ticks at minimum value. Default value.
max
Start major ticks at maximum value.
none
Start major ticks at a value divisible by the attribute
majorTickStepValue.
minor
Show minor ticks. Default on.
startAt
ticks
428
ProcSee Reference Manual
Standard pTALK Functions
line
function
Scale (3pTALK)
major
Show major ticks. Default on.
ends
Show ticks at the maximum and minimum value.
all
Show all ticks.
none
Do not display any ticks.
on
Show the base line. Default on.
off
Do not show the base line.
linear
Display the scale using linear values. Default value.
ln
Display the scale using natural logarithm values.
log
Display the scale using 10th logarithm values.
The flags in the table above can be combined. Use the following combination of flags to
set for instance the Scale shape to 10th logarithm, starting at majorTickStepValue and hiding labels which overlap.
flags = "labelOverlap=hide, startAt=none, function=log";
The function getPosValue(…) calculates and returns a value between the attributes minValue and maxValue based on the value of the x, y position. True is returned if the coordinate passed as argument to the function was inside the Scale shape, otherwise false.
The function getValuePos(…) calculates and returns an x, y position in world coordinates
based on the value passed in the argument value. The parameter value must be in the range
minValue and maxValue. It returns false if the value is outside the range, otherwise true.
SEE ALSO
newScale
ProcSee Reference Manual
429
Standard pTALK Functions
Shape (3pTALK)
NAME
Shape - general behaviour of all shapes
SYNOPSIS
// attributes:
int
Shape::visibility;
float Shape::xReference;
float Shape::yReference;
float Shape::xScaleFactor;
float Shape::yScaleFactor;
float Shape::rotationAngle;
// member functions:
char* Shape::name();
char* Shape::fullName();
Picture* Shape::thePicture();
void
Shape::updateShape( char* flags = "fast" );
int
int
float
float
int
int
float
float
int
int
Shape::xy2sx( float wx, float wy );
Shape::xy2sy( float wx, float wy );
Shape::xy2wx( int sx, int sy );
Shape::xy2wy( int sx, int sy );
Shape::xy2shxy( float x, float y, float* retX, float* retY );
Shape::shxy2xy( float x, float y, float* retX, float* retY );
Shape::shapeCursorX( char* flags=0 );
Shape::shapeCursorY( char* flags=0 );
Shape::shapeToBack()
Shape::shapeToFront()
float
float
float
float
Shape::bX();
Shape::bY();
Shape::bHeight();
Shape::bWidth();
int
int
Shape::containsPoint( float wx, float wy );
Shape::grabPointer( int relBtn );
void
void
Shape::select();
Shape::unselect();
void
int
Shape::setShapeFlags( int flags );
Shape::getShapeFlags();
void
Shape::setKeyFocus();
int Shape::getViewableState( int mask=-1 );
430
ProcSee Reference Manual
Standard pTALK Functions
Shape (3pTALK)
DESCRIPTION
All shapes, i.e. rectangles, circles, text, groups, instances, etc. share some common behaviour. Although the Shape class is not defined as such in ProcSee, this common behaviour
is still described here.
If the visibility is assigned a value of 0 the shape will not be visible1. If the value is set to
1 then the shape will be visible. xReference and yReference defines the reference point
(in world coordinates) for scaling and rotation operations. Default values for xReference
and yReference vary depending on the specific shape. Some examples; rectangle - upper
left corner, circle/ellipse (arc/slice) - centre, line/polygon - coordinate of the first point.
xScaleFactor and yScaleFactor specify the factors used to scale the shape in the x and y
direction, respectively. Default value for the scale factors is 1, indicating no scaling. A
scale factor of 2 indicates twice the original size. A negative scale factor makes the shape
mirrored. The rotationAngle specifies the rotation angle of the shape in degrees. Default
value is 0.
name() returns the name of the shape, or an empty string "" if the shape is anonymous,
i.e. has no name.
fullName() returns the full name of the shape.
thePicture() returns a pointer to the picture in which the shape is contained.
The function updateShape() updates the shape and all of its sub-shapes (if it’s an instance, a group or a trend shape). It is executed immediately (synchronous) but the redraw
is delayed. The redraw action is put either on the system’s event queue or the action queue.
The default is that the action is put on the event queue. It will in this case be executed
when the RTM processes the messages on the event queue (which includes window
events, display events, SWBus update events, etc.). Note that the action queue in the RTM
are normally processed when the system’s event queue is empty, i.e. the RTM is idle.
updateShape() provides an optional flags argument which accepts the following options:
• fast - The redraw action is put on the event queue (this is default).
• slow - The redraw action is put on the action queue.
xy2sx() and xy2sy() converts the shapes world coordinates to screen coordinates (relative
to the upper left corner of the window).
xy2wx() and xy2wy() converts screen coordinates (relative to the upper left corner of the
window) to the shapes world coordinates. If the shape is rotated or scaled, the shapes
world coordinates are not the same as the pictures world coordinates.
xy2shxy() returns coordinates in the shapes coordinate system, given coordinates in the
picture coordinate system. shxy2xy() returns the coordinates in the pictures coordinate
system, given coordinates in the shape coordinate system. Has only effect where the shape
is rotated or scaled, or the shape is an instance of a class.
1. The visibility attribute also controls if the shape is sensitive to dialogue events. This can be useful on e.g.
the dialogueArea shape.
ProcSee Reference Manual
431
Standard pTALK Functions
Shape (3pTALK)
shapeCursorX() and shapeCursorY() return the coordinates of the cursor, in the shapes coordinate system. The flags argument can contain one of the following flags: xyOrigo (this is
the default), xyXy, or xyOld. xyOrigo means that the coordinate system of the shape is with
origo in the shapes x,y coordinate. Shapes that do not have x,y attributes like group, are handled as if it had x=0 and y=0. The same is true for the line and polygon shapes. xyXy means
that the shapes coordinate system is treated as if the shapes x,y attributes specifies the x,y
position in the shapes coordinate system. xyOld means that instance and trend is handled as
xyOrigo, and the rest of the shapes as xyXy. See xyConv (page 497) for more information
about coordinate systems.
shapeToBack() and shapeToFront() moves the shape behind or in front of all the sibling
shapes. Returns 0 if it fails.
bX(), bY(), bWidth(), and bHeight() returns the x, y, width, and height of the bounding box
of the shape. The bounding box of a shape is the smallest surrounding rectangle. The coordinates returned are given in the picture coordinate system (world coordinates).
containsPoint() returns a non zero value if the shape contains the (wx,wy) point. The point
is given in the pictures world coordinates.
grabPointer() grabs the mouse pointer to the shape. If the argument relBtn is -1, a call to
ungrabPointer() is needed to ungrab the shape. If relBtn is 0, the currently pressed mouse
buttons have to be released to ungrab the shape. If relBtn is 1,2, or 3, this mouse button has
to be released to ungrab the shape. Returns 0 on failure, 1 on ok.
The select() and unselect() functions are used to select or unselect the shape.
The setShapeFlags() function can be used to set several flags on the shape.
Flag value
432
Description
DnDFlags.none
The value none is used to mark the shape as not a target area for drag
and drop. The value none should not be combined with the other DnDFlags.
DnDFlags.copy
DnDFlags.move
DnDFlags.link
These values are used to mark the shape as a drag and drop target area.
The values copy, move, and link can be ored together.
ShapeFlags.enterLeaveArea
The value enterLeaveArea is used to mark this shape as an enter leave
area, so that enter and leave events are given according to the area of
this shape, even if the shape is overlayed with other shapes.
ShapeFlags.nonstaticShape
The value nonstaticShape is used to mark this shape so it will not go
into the static background image used with the "static" update modes.
ShapeFlags.bboxDialogue
The value bboxDialogue is used to get old behaviour for instances and
groups: If this flag is set (for the class of the instance, or for the group),
the bounding box of the instance or group will be used as the active
area for dialogues. If this flag is not set, the active area is the active
area of the shapes in this instance or group.
ShapeFlags.antiAlias
The value antiAlias is used to tell that this shape should be drawn using
anti-aliasing, i.e. the pixels at the edge of the shape can be combined
with the background in a way that makes the edge look smooth. This
makes e.g. curves and sloping lines look much better.
ProcSee Reference Manual
Standard pTALK Functions
Shape (3pTALK)
These flags can be ored together. The value 0 means that the shape is a normal shape. The
getShapeFlags() function returns current shape flag setting. An example of changing
shape flags: s1.setShapeFlags( s1.getShapeFlags() | ShapeFlags.antiAlias )
The function setKeyFocus() sets the key focus to this shape. A lostKeyFocus() event will
be sent to the shape about to loose the key focus, and a gotKeyFocus() event to this shape,
i.e. the shape that receives the key focus. All key input will be directed to this shape after
calling setKeyFocus(). Note that only one shape can have the keyboard focus.
The function getViewableState() returns the current viewable state of the shape. The optional mask argument is anded with the result, so that only bits specified in the mask is
returned. The viewable state of the shape is based on the visibility of the shape and its parent shapes, and the mapped and displayed state of the picture the shape is in. This state is
composed of several bits defined in the ViewableState enumeration. This enumeration
contains mapped, displayed, and visible values. The value all is the or of the mapped,
displayed, and visible bits. If all these bits are set, the bit for viewable will also be set.
Changes in the viewable state can be detected with the dialogue trigger viewableStateChanged(), see page 335.
SEE ALSO
Picture(3pTALK) in "ProcSee Reference Manual" on page 395
Instance(3pTALK) in "ProcSee Reference Manual" on page 368
Text(3pTALK) in "ProcSee Reference Manual" on page 440
Line/Polygon(3pTALK) in "ProcSee Reference Manual" on page 376
ProcSee Reference Manual
433
Standard pTALK Functions
shutdown (3pTALK)
NAME
shutdown - bring down Run-Time Manager
SYNOPSIS
void shutdown();
DESCRIPTION
shutdown() is an asynchronous function that will take the RTM(1) through a graceful shutdown procedure.
EXAMPLE
:
shutdown();
434
// last thing you do is to stop RTM
ProcSee Reference Manual
Standard pTALK Functions
Size (3pTALK)
NAME
Size - object for storing a size.
SYNOPSIS
double
double
Size::width;
Size::height;
void
Size::set( double width, double height );
Rect*
::newSize();
DESCRIPTION
size objects holds a size. It has the attributes width, and height, all of type double. The
Size function set() can be used to set all the values of the Size object in one operation.
Named Size objects are created like attributes. The values of a Size object is not saved or
documented.
Anonymous Size objects can be created with the function newSize(), which creates a Size
object, and returns a pointer to it. When there are no pointers left pointing to the created
Size, it will be removed automatically.
ProcSee Reference Manual
435
Standard pTALK Functions
sqrt (3pTALK)
NAME
sqrt - square root
SYNOPSIS
double sqrt( double x );
DESCRIPTION
sqrt() returns the square root of x.
SEE ALSO
trig(3pTALK) in "ProcSee Reference Manual"on page 481
436
ProcSee Reference Manual
Standard pTALK Functions
string (3pTALK)
NAME
strcat, strcmp, strcpy, strncpy, strlen, strstr, strchr, strrchr, strdup, strtrim, strfield,
strsplit, stricmp, strnicmp, strnatcmp, strnaticmp, strformat - string operations
SYNOPSIS
char* strcat( char* s1, char* s2 );
int strcmp( char* s1, char* s2 );
int strncmp( char* s1, char* s2, int n );
char* strcpy( char* s1, char* s2 );
char* strncpy( char* s1, char* s2, int n );
int
strlen( char* s );
char* strstr( char* s1, char* s2 );
char* strchr( char* s1, char c );
char* strrchr( char* s1, char c );
char* strdup( char* s );
char* strtrim( char* str, [int|char*] options=0 );
char* strfield( char* str, int fieldNumber, [char|char*] delim=’|’ );
List* strsplit( char* str, [char|char*] delim='|', limit=0 );
char* strquote( char* s1, char quote=’"’ );
char* strunquote( char* s1 );
char* strlower( char* str );
char* strupper( char* str );
int
stricmp( char* s1, char* s2 );
int
strnicmp( char* s1, char* s2, int n );
int
strnatcmp( char* s1, char* s2, int n );
int
strnaticmp( char* s1, char* s2, int n );
char* strformat( char* format, ... );
DESCRIPTION
All functions operate on null-terminated strings. A run-time error will occur if any of the
strings are actually null pointers.
strcat() appends a copy of string s2 to the end of string s1. A pointer to the null-terminated
result is returned. If the string object pointed to by s1 is not big enough to hold the con
catenated result, a run-time error occurs.
strcmp() compares its arguments and returns an integer greater than, equal to, or less than
0, according as s1 is lexicographically greater than, equal to, or less than s2. strncmp() is
equal to strcmp() except that it compares the first n characters of s1 and s2.
strcpy() copies string s2 to s1 until the null character has been copied. strncpy() copies
string s2 to s1 until either the null character has been copied or n characters have been
copied. Both functions returns s1. If the string object pointed to by s1 is not big enough
to hold the result, a run-time error occurs.
strlen() returns the number of characters in s, not including the null-terminating character.
strstr() is returning a pointer to the first occurrence of string s2 in the first string (s1). A
null- pointer is returned if s2 does not occur in s1. If s2 has zero length, strstr() returns
the first string, s1
ProcSee Reference Manual
437
Standard pTALK Functions
string (3pTALK)
strchr() is returning a pointer to the first occurrence of the character c in the string (s1). A
null- pointer is returned if c does not occur in s1.
strrchr() is returning a pointer to the last occurrence of the character c in the string (s1). A
null- pointer is returned if c does not occur in s1.
strdup() is returning a copy of the input argument string (s). The string is released from
memory when no pointers point to it anymore.
strtrim() is returning a copy of the input argument string (str), with leading and ending
whitespace removed. The optional options argument can specify TrimOption.start or
"start" to only remove leading whitespace, or TrimOption.end or "end" to only remove ending whitespace. The default is to remove both leading and ending whitespace. Whitespace
here is characters in the range ’\x01’ to ’\x20’.
strfield() is returning a pointer to the fieldNumber in the string (str). The delim argument
specifies the seperator. The separator is either a single character or a character string. If the
delim argument is 0, the separator is white-space. A null-pointer is returned if fieldNumber
exceed the number of fields in s1.
strsplit() is returning a List of strings, resulting from splitting the string (str). The delim argument specifies the seperator. The separator is either a single character or a character string.
If the delim argument is 0, the separator is white-space. The limit argument specifies the
number of elements in the resulting list, with the last element containing the rest of the string.
Its default value of 0 means to split the string at all places the delimiter is found.
strquote() returns a pointer to a string where the input string (s1) is surrounded by the quote
character (quote). Further the backslash character, ’\’, is inserted before any escape sequence. The last argument (quote), specifies the character to surround the input string. The
default value of (quote) is the character, ".
strunquote() returns a pointer to a character string where the first and the last characters,
plus all back slash characters in front of each escape sequence characters are removed from
the input string (s1).
strlower() and strupper() converts the string (character array) passed as argument to lowerand upper case letters, respectively. The return value from these function are the converted
character array.
The stricmp() and strnicmp() functions compares the strings passed as argument using a
case insensitive algorithm, and returns a value indicating their relationship. For more information about the return values, see the case sensitive equivalents, strcmp() and strncmp().
The strnatcmp() and strnaticmp() functions compares the strings passed as arguments using a "natural" order algorithm. Return value is <0, 0, or >0. strnatcmp() is case sensitive,
and strnaticmp() is case insensitive. The "natural" order is comparing numbers in the strings
as numbers, and not as digit characters, so that e.g. the strings "a1", "a2", "a10" sorts in this
order, and not like "a1","a10","a2". In addition, it sorts space and control characters before
symbols before digits before letters before characters with the hi-bit set. Each of these groups
are in ASCII-code order, except letters, where the sort order is A,a,B,b,...,Z,z.
The strformat() function creates a string formatted according to the format argument, in the
same way as the sprintf function. For more information see the description of printf/sprintf/
strformat on the print man page.
438
ProcSee Reference Manual
Standard pTALK Functions
system (3pTALK)
NAME
system - execute a UNIX command
SYNOPSIS
int system( char* string, ... );
DESCRIPTION
system() causes the string to be given to the shell as input, as if the string had been typed
as a command at a terminal. RTM(1) waits until the shell has completed, and then returns
the exit status of the shell. The string argument can contain formatting options like those
supported by printf(), and arguments to be formatted can be given.
EXAMPLES
char* gedOptions;
:
system( “ged %s &”, gedOptions ); // starts ged with the given options
WARNINGS
Be sure to include a trailing & to the shell so that RTM(1) doesn’t hang for an unacceptable amount of time.
ProcSee Reference Manual
439
Standard pTALK Functions
Text (3pTALK)
NAME
Text - text and input graphics shape.
SYNOPSIS
// Attributes
char*
Text::format;
any
Text::theText;
int
Text::alignment;
// Functions
void
Text::edit( bool on, float width = 0 );
char*
Text::buffer();
bool
Text::isInEditMode();
int
Text::clearSelection();
int
Text::selectWord();
int
Text::selectAll();
int
Text::moveRight();
int
Text::moveLeft();
int
Text::moveToEnd();
int
Text::moveToHome();
int
Text::deleteForward();
int
Text::deleteBackward();
int
Text::position();
int
Text::put( char c );
int
Text::textWidth();
void Application::setTextEditorAttributes( int curType,
int curBlinkTime = -1, int curFg = -1, int curBg = -1,
int selFg = -1, int selBg = -1 );
DESCRIPTION
Text is a graphics text shape used to visualize text and entering input values in ProcSee.
The format attribute provides a description of the text to visualize. The format attribute can
consist of two types of characters, plain text which are displayed as is and a conversion specification, used to determine how the attribute theText is displayed. For more information
about the format attribute, see printf. Only one conversion specification is accepted by this
format attribute. In addition to the normal printf handling, the format specification part of
the result will be replaced with ’*’-characters if the format specification contains a length,
and the resulting value needs more space than this length. Note that the data type of the theText value must correspond to the type expected by the format. For "%s", NULL is displayed in the Text shape if the data type of the attribute theText does not match the
conversion specification in the format attribute. If "%d" is specified in the format string,
then the attribute theText must specify an integer value. The attribute theText is of type any
and accepts values of any primitive data type.
alignment specifies where to display the text relative to its x, y position. The default value
of this attribute is left, baseline. The text can be left (0), center (1), decimal (3) and right (2)
aligned in the horizontal direction, and top (0x10), vcenter (0x20), baseline (0) and bottom
(0x30) aligned in the vertical direction. The constants for these values are defined in the
440
ProcSee Reference Manual
Standard pTALK Functions
Text (3pTALK)
enum TextAlign. For decimal alignment, the decimal position has to be within the area
where the format specifier is inserting the value from the theText attribute. If not, the
alignment is at the end of this area.
edit() toggles edit (input) mode. If the argument on is true, edit mode is turned on, i.e. an
I-beam cursor is displayed in the text near the pointer cursor position, and the text is ready
to receive keyboard input. If the on argument is false, edit mode is turned off, i.e. the Ibeam cursor disappears and the text is redisplayed. The width argument set the width on
the text inputfield when the text is in edit (input) mode. If width is not given the default
value is 0, i.e. the width is the same as the original width of the text.
buffer() returns the current input buffer if the text is in edit (input) mode, otherwise the
function returns an empty string.
isInEditMode() returns true if the text object is currently in edit (input) mode, false otherwise.
clearSelection() clears the selected text if the text object is in edit mode, otherwise it does
nothing. The routine returns the current I-beam position (0 is before the leftmost character), or -1 if the text object isn’t in edit mode.
selectWord() selects the word in which the I-beam cursor is currently positioned. A word
is any sequence of characters limited by spaces, tabs, or newlines. The I-beam cursor is
moved to the beginning or end of the word, whichever is nearest. The routine returns the
current I-beam position, or does nothing and returns -1 if the text object isn’t currently in
edit mode.
selectAll() selects all characters in the text. The I-beam cursor is moved to the beginning
or end of the text, whichever is nearest. The routine returns the current I-beam position,
or does nothing and returns -1 if the text object isn’t currently in edit mode.
moveRight() and moveLeft() clear the selection and moves the I-beam cursor one position to the right or left, if possible. The routines return the current I-beam position, or do
nothing and return -1 if the text object isn’t currently in edit mode.
moveToEnd() and moveToHome() clear the selection and moves the I-beam cursor to
the end or beginning of the text, if possible. The routines return the current I-beam position, or do nothing and return -1 if the text object isn’t currently in edit mode.
deleteForward() and deleteBackward() both have dual behaviour: If the text object contains selected characters, both routines behave identical and deletes all selected characters
from the text. If the text doesn’t contain a selection, then the routines delete the character
after or before the I-beam cursor, if possible. The routines return the current I-beam position, or do nothing and return -1 if the text object isn’t currently in edit mode.
position() returns the current I-beam position, or -1, if the text object isn’t currently in edit
mode. The position ranges from 0 to n, where n is the number of characters in the text.
put() inserts the character c given as input parameter in the text at the current I-beam position. The I-beam position is advanced one step to the right, i.e. to the right of the newly
inserted character. If the text object contains a selection, the inserted character replaces
the selected characters. The routine returns the current I-beam position, or does nothing
and return -1 if the text object isn’t currently in edit mode.
textWidth() returns the width of the text shape in screen coordinates.
ProcSee Reference Manual
441
Standard pTALK Functions
Text (3pTALK)
setTextEditorAttributes() is an application function and sets the behaviour to all text
shapes used in the application. If the value on the attribute is -1, it will not be changed by this
function. The curType attribute can have the following values:
0: Standard P3 cursor, it’s the default
1: Windows cursor ( | )
2: Motif cursor ( I )
3: Block cursor ( a )
To make the cursor more noticeable, it can be set to blink by the attribute curBlinkTime. The
time is given in milliseconds. Recommended time is 500. The minimum value is 20. The value 0 stop the blinking, it’s the default value. The colour on the cursor is set by curFg (default
black) and curBg (default white). At the moment only curType = 0 use the curBg. To change
the selection colour on the cursor, selFg (default white) and selBg (default black) should be
set.
When a text shape is in edit mode, the user can enter keyboard input to the shape. Shift together with the arrow buttons select the text. The edit mode contains predefined dialogues
(behaviour) that is reasonably compatible with GNU Emacs, but the behaviour can still be
redefined by adding dialogues to the text object. The corresponding pTALK routines are
shown in parentheses, if applicable:
Ctrl-A
Go to beginning of line ( moveToHome() )
Ctrl-E
Go to end of line ( moveToEnd() )
Ctrl-F
Go one character forward ( moveRight() )
Ctrl-B
Go one character backward ( moveLeft() )
Ctrl-D
Kill character after cursor ( deleteForward() )
Ctrl-K
Kill characters to end of line
The mouse can also be used to mark (select) characters in the text:
left button click
Place I-beam cursor
left button double click Mark word ( selectWord() )
left button triple click
Mark whole input buffer ( selectAll() )
shift left button click
Extend current selection to cursor position
left button down drag
Mark characters
ProcSee supports copy/paste of text using X-Windows’ cut buffers. Marking characters rolls
the cut buffer stack 1 step and places the marked characters in cut buffer 0. Pressing the middle mouse button pastes in the characters currently in X cut buffer 0 at the current I-beam
cursor position.
SEE ALSO
Shape(3pTALK) in "ProcSee Reference Manual"on page 430
442
ProcSee Reference Manual
Standard pTALK Functions
time (3pTALK)
NAME
time, cftime, strcftime, mktime, localtime - get time, convert time to string and convert
year, month, day, etc. to or from a standard unix time
msecsToday - get the number of milliseconds since midnight.
setTimeZone - sets the time zone used by all time functions in ProcSee.
SYNOPSIS
int time( int* clock );
int cftime( char* s, char* format, int clock, int zone=0 );
char* strcftime( char* format, int clock, int zone=0 );
int mktime( int year, int month, int day, int hour, int minute,
int second, int dst=-1, int zone=0 );
int localtime( int theTime, int* year, int* month, int day*,
int* hour, int* minute, int* second, int* dst,
int zone=0 );
int msecsToday( int zone=0 );
void setTimeZone( char* timeZone );
DESCRIPTION
time() returns the value of time in seconds since 00:00:00 UTC, January 1, 1970. If clock
is non-zero, the return value is also stored in the location to which clock points. time()
fails and returns -1 if the clock parameter does not point to a legal integer object.
The zone parameter used in the time functions below can have the following values:
0 : use default timezone (UTC if the RTM is started with -g, local time if not.)
1 : use local timezone.
2 : use UTC timezone.
msecsToday() returns the number of milliseconds since midnight. The "millisecond" time
is reset to 0 at midnight.
cftime() and strcftime() converts the time in seconds since 1970, from the clock argument, to a string, using the format, and optional zone arguments. strcftime() returns this
string, and cftime() copies this string into the buffer pointed to by the first argument s.
The format string consists of zero or more directives and ordinary characters. All ordinary
characters (including the terminating null character) are copied unchanged into the result.
Each directive is replaced by appropriate characters as described in the following list. The
appropriate characters are determined by the LC_TIME category of the Run-Time Manager’s locale and by the time represented by the clock parameter.
%%
same as the "percent" character (%)
%a
locale's abbreviated weekday name
%A
locale's full weekday name
ProcSee Reference Manual
443
Standard pTALK Functions
time (3pTALK)
%b
locale's abbreviated month name
%B
locale's full month name
%c
locale's appropriate date and time representation
%d
day of month ( 01 - 31 )
%D
date as %m/%d/%y
%e
day of month ( 1 - 31; single digits are preceded by a space)
%h
locale's abbreviated month name.
%H
hour ( 00 - 23 )
%I
hour ( 01 - 12 )
%j
day number of year ( 001 - 366 )
%k
hour ( 0 - 23; single digits are preceded by a blank)
%l
hour ( 1 - 12; single digits are preceded by a blank)
%m
month number ( 01 - 12 )
%M
minute ( 00 - 59 )
%n
same as \n
%p
locale's equivalent of either AM or PM
%r
time as %I:%M:%S [AM|PM]
%R
time as %H:%M
%S
seconds ( 00 - 61 ), allows for leap seconds
%t
insert a tab
%T
time as %H:%M:%S
%U
week number of year ( 00 - 53 ), Sunday is the first day of
week 1
%w
weekday number ( 0 - 6 ), Sunday = 0
%W
week number of year ( 00 - 53 ), Monday is the first day of week
1
%x
locale's appropriate date representation
%X
locale's appropriate time representation
%y
year within century ( 00 - 99 )
%Y
year as ccyy ( for example 1986)
%Z
time zone name or no characters if no time zone exists
The difference between %U and %W lies in which day is counted as the first of the week.
Week number 01 is the first week in January starting with a Sunday for %U or a Monday for
%W. Week number 00 contains those days before the first Sunday or Monday in January for
%U and %W, respectively.
444
ProcSee Reference Manual
Standard pTALK Functions
time (3pTALK)
cftime() returns the number of characters placed into the array pointed to by s not including the terminating null character.
mktime() converts the time specified in the parameters year, month, day, hours, minutes,
seconds, and dst to a standard unix time. It is not necessary to specify all the parameters
given to the function because mktime() uses current time as default. Setting the parameter
to -1 means that current time will be used instead. The dst parameter have the following
values: -1 : find out if daylight saving time is in effect for the specified time given. 0 : do
not use daylight saving time. 1 : use daylight saving time.
The parameters to the function mktime() are given below
year
- the year, must be in the range 1970 to 2038.
month
- month of the year. 1 to 12. 1 is January, 2 is February etc.
day
- day of the month. 1 to 31
hours
- hour of the day. 0 to 23
minutes
- minutes since last precise hour. 0 to 59
seconds
- number of second since last precise minute. 0 to 59
localtime() converts the time given (theTime) to its year, month, day, hour, minute, second, and dst. The arguments must be pointers to integer values. A NULL pointer (0) can
be used for the arguments which are not needed.
setTimeZone(...) sets the time zone used by all time functions in ProcSee. The following
strings are legal argument values accepted by setTimeZone():
UTC
- use universal time. UTC (Coordinated Universal Time)
never changes with the season, i.e. it is not affected by
daylight saving time (summer time). Note that starting the
RTM with the -g option sets UTC as the default time zone in
ProcSee.
GMT
- it’s an abbreviation for Greenwich Mean Time. This is the
same as UTC.
local
- use local time. Local time includes daylight saving time
(summer time) if approriate. Local time is the default time
zone used in ProcSee, unless the RTM is started with the -g
option.
NOTES
Although an extensive listing of format options accepted by cftime() is given above, the
number of options actually supported might vary across hardware and software platforms.
As a rule ProcSee accepts the format options for strftime(3C) on each specific platform.
EXAMPLES
int uxTime;
ProcSee Reference Manual
445
Standard pTALK Functions
time (3pTALK)
:
// Get the standard unix time for the date 01/04/1996 at 12:00:00
uxTime = mktime( 1996, 1, 4, 12, 0, 0 );
// Get the standard unix time New Years Day year 2000 at the same hour as
// current hour
uxTime = mktime( 2000, 1, 1, -1, -1, -1 );
// Set UTC time zone in the RTM
setTimeZone( "UTC" );
SEE ALSO
setlocale(3C), strftime(3C), strftime(4), environ(5)
446
ProcSee Reference Manual
Standard pTALK Functions
TimerAt (3pTALK)
NAME
TimerAt - executes a pTALK statement or function at a specified time.
SYNOPSIS
int
int
int
int
TimerAt::start( char* statement, int theTime );
TimerAt::start( void (*funcCB)(), int theTime );
TimerAt::stop();
TimerAt::isRunning();
DESCRIPTION
The class TimerAt executes a pTALK statement or function at a given time specified in
seconds since 1 january 1970. Instances of the class TimerAt are created like attributes.
Object of this class can be created in Application, Library, Class or Picture. Note that the
state of the timer object is not saved. They must be initialized when beeing loaded from
file.
The function start( ... ) initializes the timer class. The first parameter to this function is a
pTALK statement or a callback function. The callback function has the following prototype:
void (*funcCB)()
The last parameter theTime is the time specified in seconds since 1 january 1970. The
pTALK functions time( ... ) or mktime( ... ) are two functions that can be useful when
specifiying this time. The function returns 1 if the timer was successfully added, otherwise
0.
stop() stops the timer if it is running. The function returns 1 if the timer was successfully
stopped, otherwise 0.
The function isRunning() returns 1 if the timer is running or 0 if it is stopped.
EXAMPLES
TimerAt MyTimer;
...
void myCB()
{
// Called after one hour
}
void constructor()
{
// In Application constructor. Let the timer execute the
// function myCB() one hour from when the application was
// started
MyTimer.start( myCB, time( 0 ) + 3600 );
}
ProcSee Reference Manual
447
Standard pTALK Functions
TimerAt (3pTALK)
SEE ALSO
TimerInterval(3pTALK) in "ProcSee Reference Manual"on page 449
448
ProcSee Reference Manual
Standard pTALK Functions
TimerInterval (3pTALK)
NAME
TimerInterval - executes a pTALK statement or function periodically.
SYNOPSIS
int TimerInterval::start( char* periodStatement, int interval,
int count = -1, int thePeriod = -1,
char* terminateStatement = 0 );
int TimerInterval::start( char* periodStatement, int interval,
int count = -1, int thePeriod = -1,
void (*termCB)() = 0 );
int TimerInterval::start( void (*periodCB)(), int interval,
int count = -1, int thePeriod = -1,
void (*termCB)() = 0 );
int TimerInterval::start( void (*periodCB)(), int interval,
int count = -1, int thePeriod = -1,
char* terminateStatement = 0 );
int TimerInterval::stop();
int TimerInterval::isRunning();
int TimerInterval::setInterval( int interval );
int TimerInterval::count();
DESCRIPTION
The class TimerInterval executes a pTALK statement or function periodically at given
intervals. Object of this class can be created in Application, Library, Class or Picture. Note
that the state of the timer object is not saved. They must be initialized when loaded from
file.
The function start( ... ) starts the timer interval object. The first parameter is either a
pTALK statement (periodStatement) or a callback function (periodCB) which will be
called periodically at specified intervals. The second parameter interval is specified in
milliseconds. If the parameter count is set to -1 it means that the timer object will run forever unless the parameter thePeriod is specified. If count is set to a positive integer value
the timer will run the pTALK statement or callback function this number of times before
terminating. The parameter thePeriod is used for specifying the period of time the timer
will be running before terminating. This argument is specified in milliseconds. The last
argument is a pTALK statement or a callback function. This statement or callback function
is called when the timer terminates due to the fact that the counter has reached zero or the
time period has expired for the timer. The termintion condition is specified either in the
arguments count or thePeriod. Note that this function is not called if the pTALK function
stop() is called. The start function returns 1 if the timer was successfully started, otherwise 0. Only the pTALK statement or callback function and the interval must be specfied.
The rest of the parameters to the start(...) function will have default values and will be
ignored by the TimerInterval class if not specified.
The callback functions funcCB and termCB have the following prototype:
void (*periodCB)()
void (*termCB)()
ProcSee Reference Manual
449
Standard pTALK Functions
TimerInterval (3pTALK)
stop() stoppes the timer object. The function returns 1 if the timer object was successfully
stopped, otherwise 0.
setInterval(...) changes the periodic interval of a running timer object. The parameter interval is specified in milliseconds. Note that the timer object must be running for this function
to take any effect. Returns 1 if the periodic interval was successfully changed, otherwise 0.
isRunning() returns 1 if the timer object is running or 0 if the timer is stopped.
count() returns the number of times the periodic function or statement is called since
start(...) was called.
EXAMPLES
TimerInterval UpdateTimer;
...
void updateCB()
{
// Called every second for 2 hours.
...
}
...
void termCB()
{
// The time period has expired for the update timer.
...
}
...
void constructor()
{
// In Application constructor. Let the timer execute the
// function updateCB() every second for two hours. The pTALK
// function termCB will then be called.
UpdateTimer.start( updateCB, 1000, -1, 7200, termCB );
}
SEE ALSO
TimerAt(3pTALK) in "ProcSee Reference Manual"on page 447
450
ProcSee Reference Manual
Standard pTALK Functions
tolower, toupper (3pTALK)
NAME
tolower, toupper - character conversion functions
SYNOPSIS
int tolower( int c );
int toupper( int c );
DESCRIPTION
tolower() and toupper() takes one character argument and returns its corresponding lower-case or upper-case character. The parameter c should be in the range 0 to 255 (unsigned
char).
EXAMPLES
printf("%c",toupper(’a’));
ProcSee Reference Manual
451
Standard pTALK Functions
toString (3pTALK)
NAME
toString - get a string from any expression.
SYNOPSIS
char* toString( any value );
DESCRIPTION
toString() converts its input argument to a string, and returns this string. If the input argument already is a string this is returned unchanged. Integers and floats are converted as expected, addresses are converted to strings containg the fullName of the element pointed to,
or the string "0" if it is a null pointer.
452
ProcSee Reference Manual
Standard pTALK Functions
tr (3pTALK)
NAME
tr - connects a trend variable to a trend shape attribute.
trTime - gets the time at the current tr position.
SYNOPSIS
float tr( char* variable );
unsigned int trTime();
DESCRIPTION
The function tr() connects a trend variable to a trend shape attribute. For the time being
the tr() function can only be used in the TrendPres shape.
The purpose with this function is to connect a trend variable to an attribute in a shape. For
instance to better reflect the state of the historical data the attribute foreground colour of
a trend curve may be trended together with the amplitude value. The tr() function is guaranteed not to be handled as regular dynamics, but each historic trend point is used to determine the attribute’s value.
The parameter variable is the name of the trend variable, this name must be specified in
the trend specification file. The log frequency of the parameter variable must correspond
with the log frequency of the amplitude variable, the result is otherwise unpredictable.
Note that the tr() function uses the log frequency of the trend shape (TrendPres) it is defined in. If for instance the logFrequency attribute in a TrendPres shape is set to 5 seconds
the variable in the tr() function must be logged with an interval of 5 seconds as well. The
parameter variable can be a string, a pointer to a trended variable or any legal pTALK expression returning a trend variable name.
Several tr() functions can be specified in one statement. If for instance a function is depending upon several float values, several tr() functions may be specified.
The trTime() function gets the current time for the trend point the tr() function corresponds to. It can only be used in combination with the tr() function.
EXAMPLES
function ‘int func( float a, float b )
{
if ( a > b ) return 0;
if ( a == b ) return 1;
return 2;
}‘
class TrendPlot
{
.
.
variable
= "var1";
foregroundColour = ‘tr( "trFgCol" )‘;
ProcSee Reference Manual
453
Standard pTALK Functions
presentation
.
.
tr (3pTALK)
= ‘func( tr( "var1" ), tr( "var2" ) )‘;
};
NOTE
The tr() function can only be used in a TrendPres shape.
SEE ALSO
TrendPres(3pTALK) in "ProcSee Reference Manual"on page 474
454
ProcSee Reference Manual
Standard pTALK Functions
Trend (3pTALK)
NAME
Trend - user interface component displaying historical data.
SYNOPSIS
// attributes
int Trend::orientation;
int Trend::scroll;
int Trend::timespan;
char* Trend::trLog;
// functions
TrendGrid* Trend::newTrendGrid( char* name );
TimeTag* Trend::newTimeLabel( char* name );
TrendPres* Trend::newTrendPres( char* name );
TrendRuler* Trend::newTrendRuler( char* name );
EventPlot* Trend::newEventPlot( char* name );
int
Trend::numTimeLabel();
int
Trend::numTrendGrid();
int
Trend::numTrendPres();
int
Trend::numTrendRuler();
int
Trend::numEventPlot();
void
Trend::panAbs( int time );
int
Trend::panFreeze( int freeze );
void
Trend::panRel( int delta );
void
Trend::reset();
int
Trend::scrollValue( int timeAlignment, int scrollFactor);
void
Trend::setScrollModifier( void (*funcCB)( ::Trend* trend,
int* theTime,
int lastTime,
int type,
any userData = 0 ),
any userData = 0 );
unsigned int Trend::theTime();
unsigned int Trend::xyW2Time( float x, float y );
unsigned int Trend::xW2Time( float x );
DESCRIPTION
The Trend class displays historical data received from the TrendLog(3pTALK).
The orientation attribute determines whether the trend curve is displayed left-to-right,
right-to-left, or circular. Setting the attribute to 0 will display the positive time axis from
left to right. This is the default behaviour for the Trend. If this attribute is set to the value
1 the time and there for also the curves will be displayed from right to left. The curves in
a circular Trend diagram are always displayed counter-clockwise. Setting the orientation
attribute to 2 will display the curves in a circular manner. All other values for this attribute
will be ignored.
The attribute scroll is used when calculating the trend time window's last time. It controls
two behaviours; how much the trend diagram is scrolled in percentage of the time-span,
and how the last time in the trend diagram is aligned. Notice that the last time is re-calcu-
ProcSee Reference Manual
455
Standard pTALK Functions
Trend (3pTALK)
lated only when one or several of the trend presentation curves have reached the last time in
the trend diagram, or the scroll attribute has been changed. It is recommended to use the
pTALK function scrollValue(…) when setting this attribute, for instance, scroll = `scrollValue( 60, 50 )`. The lower eight bits (least significant bits) are used for the scroll factor. This
factor is in percentage of the Trend attribute timespan, and must be in the range [0,100].
Values outside this range will be ignored. A warning message will be issued to the output
window if values outside this range are set. A value of 50% means that the trend presentation
curve(s) will be moved to the middle of the trend diagram. Notice that a value of 0 will not
influence on the calculation of the trend diagram's last time. The upper twenty four bits (most
significant bits) are used to better control the alignment of the trend diagram's last time. The
value of the time alignment must be in the range [0, timespan], i.e. inside the values 0 and
the Trend attribute timestamp. If the attribute is set to a value outside this range a warning
message will be issued and the value will be ignored. Setting for instance the time alignment
value to 60 will align the trend diagrams last time to minutes. The time alignment factor can
be set regardless whether the scroll factor is set or vice versa. Notice that the scroll factor is
calculated before the time is aligned. If the scroll modifier call-back function is enabled via
the pTALK function setScrollModifier(…), the second argument to the call-back function is
the calculated time and not the trend subscription's last time.
trLog is the name of the trend logger the Trend diagram is receiving its historical data from.
The trend logger may be an internal or an external trend logger. The RTM looks up in the
symbol table to find the trend logger specified in the application. This name is the default
name for this attribute. One trend diagram can only be receiving data from a single trend logger. A good practise is to define the trend logger in the application before creating any picture
with Trends. If you do so you may ignore this attribute, otherwise this attribute must be set
to the name you are going to give the trend logger.
timespan is the attribute used to specify the number of seconds or the interval the Trend diagram is displaying data for. All the shapes contained in a Trend diagram use this attribute
to calculate their positions.
newTrendGrid(), newTimeLabel(), newTrendPres(), newTrendRuler() and newEventPlot() are functions which add a time label, a trend grid, a trend presentation a trend ruler
and an event plot respectively to a trend diagram. These functions take as the only parameter
the name of the new shape. This name must be unique.
The functions numTimeLabel(), numTrendGrid(), numTrendPres(), numTrendRuler()
and numEventPlot() returns the number of time labels, trend grids, trend presentations,
trend rulers and event plots defined in a trend diagram.
When calling the function panAbs() the trend diagram requests for data from the trend logger for the given time and the attribute timespan seconds back in time and displays the data.
The time which is the parameter to this function is given in standard unix time format. If the
time specified is back in time and it is not contained in the trend diagram sent from the application no more updates will be sent to the Trend. The only possible way to get new data
is to pan the trend so the diagram is inside current trend time, this can be obtained with the
function panAbs() given that the parameter is set equal to the trend time variable.
The function panRel() has the same properties as panAbs() but the parameter is added or
subtracted from the trend’s current time. If the value is negative the trend will be panned this
number of seconds back in time, or if it is positive it will be panned forward in time.
456
ProcSee Reference Manual
Standard pTALK Functions
Trend (3pTALK)
The function panFreeze() is used to freeze a trend at a given time. If the parameter freeze
is 1 it will freeze the time, 0 means unlock the freeze. This function will normally be
called before the functions panAbs() or panRel().
The reset() function will clear all trend plots currently contained in the Trend.
The function int scrollValue( int timeAlignment, int scrollFactor = 0 ) calculates a value composed of a time alignment and a scroll factor. This function is applicable only when
setting the Trend's scroll attribute. The intention with this function is to make it easier
and less error-prone when setting the value of the scroll attribute. The last argument
scrollFactor has a default value of 0. For instance to align the trend diagram’s last time
on hours, use scrollValue( 3600 ). For more information, see the scroll atribute.
The function setScrollModifier(…) registers a call-back function which is called each
time one of the trend curves reach the last visual time in the trend diagram. The purpose
with this call-back function is to modify and better control the last time used in the trend
diagram. The setScrollModifier(…) function has two arguments, a pointer to a call-back
function funcCB and user specific data, userData. The last argument is optional. If it is
specified it must be specified in the call-back function as well. The user data will be sent
unmodified in the last argument to the call-back function. The first argument in the callback function is a pointer to the Trend object calling the function. The next argument is
theTime. This is an in/out parameter controlling the last time used by the trend diagram.
Notice that the function is called after the parameter theTime has been altered with the attribute scroll. The argument lastTime is the last time of the trend curves got in the update
message from the trend log. The argument type is 1 for normal cyclic updates and 0 for a
complete new data set (a new request).
theTime() returns the last visual time in the trend diagram.
The xW2Time() function takes a world coordinate x in the Trend, and convert it to a corresponding time. This function is typically used in the action part of a dialogue in the
Trend.
The function xyW2Time() converts a world coordinate (x,y) pair to a standard unix time.
The time returned will always be inside the Trend diagram’s time interval. This function
is typically used in the action part of a dialogue in the Trend or in any other shape to move
one or several Trend rulers.
NOTES
Note that when the orientation attribute is set to circular Trend the time labels within the
diagram will not behave properly if the shape is rotated. If a circular trend is rotated then
remove the trend labels.
The functions xW2Time() and xyW2Time() are identical as long as the functions are
used within a non-circular Trend diagram. Note that the function xW2Time() can not be
used in a circular Trend. This function may be removed in the next release of ProcSee so
do not use xW2Time(), use xyW2Time() instead.
ProcSee Reference Manual
457
Standard pTALK Functions
Trend (3pTALK)
Setting the background fill style to none is not recommended because the trend curves are
not erased when new trend points are received from the trend logger. If a non buffering update mode is used the curves will look erroneously. Another problem is that the ruler will not
be erased in its old position when it is moved.
EXAMPLES
function `void timeCB( ::Trend* theTrend, int* theTime,
int lT, int reqType, int deltaT )
{
int t = *theTime + deltaT;
t /= deltaT;
t *= deltaT;
*theTime = t;
}
Trend T
{
...
}
...
{
T.setScrollModifier( timeCB, 3600 );
}
SEE ALSO
TrendLog(3pTALK) in "ProcSee Reference Manual"on page 462
TrendPres(3pTALK) in "ProcSee Reference Manual"on page 474
TrendRuler(3pTALK) in "ProcSee Reference Manual"on page 480
TrendGrid(3pTALK) in "ProcSee Reference Manual"on page 459
TimeTag(3pTALK) in "ProcSee Reference Manual"on page 461
EventPlot(3pTALK) in "ProcSee Reference Manual"on page 339
458
ProcSee Reference Manual
Standard pTALK Functions
TrendGrid (3pTALK)
NAME
TrendGrid - trend diagram component displaying a grid
SYNOPSIS
// attributes
float TrendGrid::autoStep;
int TrendGrid::depthPosition;
int TrendGrid::noOfLines;
char* TrendGrid::theTrendPres;
int TrendGrid::timeInterval;
int TrendGrid::timeOffset;
// functions
void TrendGrid::toBack();
void TrendGrid::toFront();
int TrendGrid::getLine( float* pos, float* value, int major,
int minor = -1, TrendPres* tp = 0 );
int TrendGrid::getNumLines();
DESCRIPTION
The TrendGrid class displays a grid in a trend diagram.
The attributes autoStep and theTrendPres are used to connect the grid to a trend curve.
When set the horizontal grid lines are locked to the values of the curve. A change in the
trend curve's upper or lower limit will result in a change in the trend grid. The grid lines
will also appear as logaritmic if the attribute presentationFunc in the TrendPres shape is
set to either 1 or 2.
The attribute theTrendPres must be set to 0 or to the name of a TrendPres shape. The
autoStep attribute specifies a factor. If it is set to 10 and the TrendPres::presentationFunc
is set to log10, the horizontal grid lines will appear at the positions 1, 10, 100, 1000, ... .
If the TrendPres::presentationFunc is set to linear the horizontal grid lines will appear at
the positions 0, 10, 20, 30, ... . The attribute noOfLines specifies the number of lines between each line given by autoStep.
The attribute depthPosition controls the position of the grid among the other shapes contained in the trend diagram. The attribute can be set to the values 0,1,2 which will put the
grid behind any other non-grid trend shape, behind the trend rulers or in front of any other
non-grid trend shape, respectively.
Horizontal grid lines is set with the attribute noOfLines. A value of 0 will display a grid
with no horizontal grid lines.
The timeInterval attribute determines the amount of space between two successive vertical grid lines in a trend diagram. Setting this attribute to 0 will remove any vertical grid
lines. Number of vertical grid lines are controlled with the attributes timeInterval, timeOffset and Trend::timespan.
The attribute timeOffset determines the position of the first vertical grid line.
ProcSee Reference Manual
459
Standard pTALK Functions
TrendGrid (3pTALK)
The function toBack() displays the grid behind any other grid shape in the same depthPosition defined in the trend diagram.
The function toFront() displays the grid in front of any other grid shape in the same depthPosition defined in the trend diagram.
The function getLine() calculates the vertical position and value of a horizontal grid line
specified by the arguments major and minor. The result is returned in the arguments pos and
value. The vertical position is returned in world coordinates. If the argument tp is set to a
TrendPres then the argument value is calculated based on its minimum and maximum limits.
Setting the tp argument to 0 forces the function getLine() to use the first TrendPres it finds
in the Trend. The attributes autoStep and noOfLines are used to create a grid with both major and minor horizontal grid lines. The argument major must be in the range 0 to the value
returned from the function getNumLines(). The argument minor must be in the range 0 to
the value of the attribute noOfLines. To get only the major grid lines set minor to 0. This
function is normally used to calculate the position and value of horizontal grid lines when
logarithmic or follow trend grid is set.
The function getNumLines() returns the number of major grid lines which is created in the
TrendGrid.
SEE ALSO
Trend(3pTALK) in "ProcSee Reference Manual"on page 455
460
ProcSee Reference Manual
Standard pTALK Functions
TimeTag (3pTALK)
NAME
TimeTag - trend diagram component displaying historic time
SYNOPSIS
// attributes
int TimeTag::alignment;
char* TimeTag::format;
int TimeTag::interval;
float TimeTag::offset;
int TimeTag::theFont;
// functions
int TimeTag::getStartTime();
void TimeTag::setStartTime( int startTime );
DESCRIPTION
The TimeTag class displays the time received from the Trend logger in given intervals
above or below the trend diagram.
The alignment attribute determines whether the time labels should be aligned left, centered or right. This attribute can be set to 0, 1 or 2 where a value equal to 0 means that the
time labels are aligned left, 1 are centered and 2 is right aligned.
The format attribute consists of zero or more directives and ordinary characters. All ordinary characters are copied unchanged into the time labels. For more information about
the directives available for the format attribute see the format parameter in the function
cftime(3pTALK) The default value for this attribute is "%T".
The attribute interval together with the attribute timespan in Trend controls the total
number of time labels in a TimeLabel shape. Between two successive time labels there are
interval number of seconds.
The offset attribute controls whether the labels should be placed above or below the trend
diagram. A negative offset displays the labels above and a positive offset places the labels
below the trend diagram. The absolute value of the offset attribute is the amount of space
between the edge of the trend diagram to the trend labels.
The theFont attribute is the font used to display the time labels.
setStartTime(…) sets current start time for the trend labels. Setting a new start time will
modify the time received from the trend. The argument startTime will be subtracted from
the time got in the update message.
getStartTime() returns the time set by the function setStartTime(…) or 0.
SEE ALSO
Trend(3pTALK) in "ProcSee Reference Manual"on page 455
time(3pTALK) in "ProcSee Reference Manual"on page 443
ProcSee Reference Manual
461
Standard pTALK Functions
TrendLog (3pTALK)
NAME
TrendLog - base class for trend logger functionality.
SYNOPSIS
int TrendLog::addEvent( void (*funcCB)( int requestId,
char* eventName,
int state ),
char* eventName,
char* dataType,
int history );
void TrendLog::addVariable( void (*funcCB)( int requestId,
char* varName, int state ),
int requestId, char* variableName,
int logFrequency, int history,
int logType = 5,
int mode = 1,
float lowerLimit = -1e10,
float upperLimit = 1e10 );
int TrendLog::analyse( int mode );
int TrendLog::clearEvents( void (*funcCB)( int requestId,
char* eventName,
int state ),
int requestId,
char* eventName );
void TrendLog::document( void (*funcCB)( int requestId, int state ),
requestId );
int TrendLog::event( void (*funcCB)( int requestId,
char* eventName,
int state ),
int requestId, char* eventName,
int timeStamp, void* data );
int TrendLog::events( void (*funcCB)( int requestId,
char* eventName,
int state ),
int requestId, char* eventName,
int num, int* timeStamps, void* data );
void TrendLog::freeze ( int mode );
int TrendLog::getEventInfo( void (*funcCB)( int requestId, List* list ),
int requestId, List list,
char* inputMask, char* outputMask,
char* eventName = "",
char* dataType = "",
int history = 0 );
void TrendLog::getVariableInfo( void (*funcCB)( int requestId, List l ),
int requestId, List list,
char* inputMask,
char* outputMask,
char* variableName = "",
int logFrequency = 0,
int history
= 0,
int logType = 5,
int mode = 1,
float lowerLimit = -1e10,
462
ProcSee Reference Manual
Standard pTALK Functions
TrendLog (3pTALK)
float upperLimit = 1e10 );
void TrendLog::logMode( int mode );
void TrendLog::maxInterpolTime( int time );
int TrendLog::removeEvent( void (*funcCB)( int requestId,
char* eventName,
int state ),
int requestId,
char* eventName, );
int TrendLog::removeVariable( void (*funcCB)( int requestId,
char* varName, int state ),
int requestId, char* variableName,
int logFrequency,
int logType = 5,
int mode = 1 );
void TrendLog::save( void (*funcCB)( int requestId, int state ),
requestId );
int TrendLog::setTime( int time, int mode );
int TrendLog::timeTick( int time );
DESCRIPTION
The class TrendLog is a base class for the pTALK classes TrendLogInternal and
TrendLogExternal. Common functionality for these classes are put into this class.
The pTALK function addEvent(...) adds a new event type to the historic trend logger. It
accepts five arguments. The arguments in the correct order are: a user defined callback
function, a request identifier, an event type name, a data type name and history in seconds.
The third argument eventName is the name of the event type. This name is the same name
that must be used in the functions event(..) and events(...) to add new events to the historic
trend logger and in the event attribute in the EventPlot shape when the event should be
visualized. The dataType argument is either a primitive data type like float, int, etc. or a
complex data type (struct). Pointer data types are not supported. The last argument history is the number of seconds events of this type should be stored in the log before they are
automatically deleted. The first two arguments funcCB and requestId are optional and
can be set to 0. The funcCB is a callback function and is called asynchronously to indicate
wheter the function returned successfully or not. The callback function must have the following prototype:
void (*funcCB)( int requestId, char* eventName, int status )
, where requestId is the same request identifier that was passed as the second argument
to addEvent(...). eventName is the name of the event type and status will be set to one
of the following values. 0 indicates success.
Status
Value
Successful
0
Event exists already
257
Undefined data type
513
ProcSee Reference Manual
463
Standard pTALK Functions
TrendLog (3pTALK)
The pTALK function save(...) must be called after events have been added if the events added
should be made permanent between subsequent runs.
addVariable() adds a new trend variable to the trend logger. The argument funcCB(…) is a
callback function that will be called to indicate the status of the operation. The first two arguments to the callback function are requestId and variableName. These are the same arguments that were passed as the second and third argument to the addVariable() function.
The third argument is the status that indicates whether the operation was successful or not.
The function prototype for the callback function is:
void (*funcCB)( int requestId, char* variableName, int status )
, where requestId is a user supplied id, variableName is the name of the trend variable. The
least significant byte of status is 0 on success or 1 on failure. (status & 0x000F indicates
whether the operation was successful or not). The three most significant bytes include more
information. If the trend variable already existed in the trend logger the following bits indicate the difference between the existing variable and the variable that was added. See table
below.
Description
Value
Bit
Mode
256
8
History
512
9
Lower limit
1024
10
Upper limit
2048
11
Log type
4096
12
If the least significant byte was 1 (failure) the most significant bytes indicate the reason for
the failure. See table below.
Description
Value
Bit
Variable did not exist
256
8
The arguments funcCB(…) and requestId can be 0 if no status of the add trend variable operation is required. The argument logFrequency is the log cycle (in seconds) the trend logger
will use when updating the trend variable, i.e. how frequent the variable is logged to memory
or disk. Note that this log cycle must not be faster than the timeTickInterval specified in the
trend logger. The argument history specifies the number of seconds the trend logger will
store historic data for the variable. logType tells the trend logger how it will update the trend
variable. See table below.
464
Log Type
Value
Average value
1
Minimum value
2
ProcSee Reference Manual
Standard pTALK Functions
TrendLog (3pTALK)
Maximum value
3
Minimum/Maximum value. Alternate
4
Raw data
5
Each time
6
Prediction
7
The argument mode can be either 1 (real time, temporary) or 0 (historic, permanent). Note
that trend variables added with the mode parameter set to 1 (real time) will be available
immediately, while historic trend variables are not available until the function save() is
called. The arguments lowerLimit and upperLimit are the smallest and largest value that
will be logged, respectively.
The analyse() function is mainly used for debugging purposes. Be aware that printing debug information to standard out will slow down the system significantly. The following
values for the mode parameter will be recognized:
• 0 .. 10 different debug levels
• 11 show start-up banner from trend logger
• 12 list current subscriptions in trend logger
• 13 print a list of trend variables
The function clearEvents(..) clears all events of event type eventName from the historic
trend logger. The parameters funcCB and requestId is used to get status information. For
more information about these two arguments see addEvent(...). Note that this function
will automatically clear all trend diagrams displaying events of the event type that was
cleared. In the status field in the callback function, 0 indicates success and >0 indicates
failure.
document() documents all trend variables with the mode attribute (function addVariable(…)) set to 0 (historic trend variables) to the .Tdoc file. The arguments to this function
is the same as for save(). For more information about these argument see the description
for save(). document() should always be called after calling save(). Note that added trend
variables will not be available before save() is called and hence will not be documented.
The function document() also documents all events added with addEvent(...).
The function event(...) sends a single event to the historic trend logger. This function accepts five arguments. The first two arguments to this function is a user supplied callback
function and a request identifier. Status information is returned in the callback function.
These arguments are optional and can be set to 0. The callback function must have the following prototype:
void (*funcCB)( int requestId, char* eventName, int status )
ProcSee Reference Manual
465
Standard pTALK Functions
TrendLog (3pTALK)
, where requestId is the same identifier that was supplied in the second argument to the
event(...) function. The status is returned in the status parameter. The following table lists
possible status values. 0 indicates success.
Status
Value
Successful
0
Warning
2
Undefined event
257
Unknown type
513
Failed to convert
769
Internal error
1025
The parameter eventName is a name of one of the event types specified in the event configuration file (pevl). The parameter timeStamp is the time when the event occured. 0 can be
specified for this parameter meaning current trend logger time. The data to send to the historic trend logger is given in the last parameter data. This parameter can be a single primitive
data type like int, float etc. or a more complex data type like a struct variable. The data type
for the variable specified in the data parameter must be compatible with the event data type
given in the event configuration file (pevl). Note that the RTM will automatically try to convert the data to the correct data type. An error message will be returned if the type conversion
results in loss of precision.
The function events(...) is the plural version of the function event(...) described above and is
used for sending several events of the same event type simultaneously to the historic trend
logger. Note that the parameter num must be equal to the array size of the parameters timeStamps and data. Setting the parameter timeStamps to 0 will use current trend logger time.
freeze() is used with a mode parameter to make the trend logger acting on time ticks or not.
A mode value of 1 will set the trend logger in freeze mode (not logging data) while a value
of 0 will set the trend logger in run mode (default).
The function getEventInfo(...) is used to get specific event information from the historic
trend logger. This is an asyncronous function and the result is not applicable before the callback function is called. The information is stored as text strings in an instance of a List object.
This List instance is passed as argument to this function in the argument list. The prototype
for the callback function is as follows:
void (*funcCB)( int requestId, List list )
The requested information is specified in the input argument inputMask, eventName, dataType and history. The inputMask specifies which fields that contain information. These
fields must exactly match the events types stored in the historic trend logger. It is a text string
and is a combination of the following characters:
Description
466
Char
Input
Output
ProcSee Reference Manual
Standard pTALK Functions
TrendLog (3pTALK)
Event name
E
x
x
Data type
T
x
x
History
H
x
x
The outputMask specifies what kind of information that is wanted back from the historic
trend logger. It is like inputMask a text string and is a combination of one of the above
characters. The information stored in the text strings are separated with the character ’|’.
The function strfield(...) can be used to split this string into fields. The List instance will
contain text strings with the following format if "ETH" is specified for the outputMask.
“Ev321_V2|float|72000”
getVariableInfo() gets specific information about trend variables in the trend logger. The
requested information is put in a variable of type List. For more information about the
List class object see "List- functions used to handle lists." on page 380. The List variable
will contain character strings in the following format:
“::App.proc.var1|10|5”
, where the character ‘|’ is a separator used to divide the different information. The
pTALK function strfield() can be used to split the string in different parts.
The argument funcCB(…) is a callback function that will be called when the information
requested from the trend logger is stored successfully in the List variable. Note that the
information is not available before this callback function is invoked. Do not ever call getVariableInfo() and immediately operate on the List variable. Wait until the callback
function is called. The prototype for the funcCB() callback function is as follows:
void (*funcCB)( int requestId, List list )
Where requestId is the same user supplied id that was passed as the second argument to
getVariableInfo(). list is the same List variable that was passed as the third argument to
getVariableInfo().
inputMask is used to control which of the input arguments that contain valid information.
This is a string with a combination of one or several of the following characters. If 0 is
passed as argument, it means request all information.
Description
Char
Input
Output
Name
V
x
x
Fullname
F
Log frequency
C
x
x
History
S
x
x
Log type
T
x
x
Mode
M
x
x
Lower limit
L
x
x
x
ProcSee Reference Manual
467
Standard pTALK Functions
TrendLog (3pTALK)
Upper limit
U
x
x
outputMask is used to control what kind of information that is wanted back from the trend
logger. This is a string with a combination of one or several of the characters specified in table above. Note that name (V) and fullname (F) are mutually exclusive (F has precedence
over V if both are specified). The character strings stored in the List variable are on the format:
“V|C|S|T|M|L|U” or “F|C|S|T|M|L|U”
The description of the remaining arguments can be found in addVariable(). See the examples section for more information about how to use this function.
The trend logger can be ticked by cyclic update from SWBus (mode=1, default), by an external application(mode=2) or by pTALK code(mode=3). The logMode() function makes it
possible to select any of these three log modes from pTALK. Please note that this function
should be used together with the setTime() function.
The trend logger is expecting to be ticked at a regular interval. Data is logged according to
the following rules:
• the actual value is logged if trend logger is ticked regularly.
• if one or more time ticks are missing, the corresponding time span is calculated. If this
time span is below the value set by maxInterpolTime(), then values are interpolated for
the missing interval.
• if one or more time ticks are missing, and the missing time span is above the value set
by maxInterpolTime(), then data is assumed lost and illegal value is stored for the variables.
Default value is 30 seconds.
The function removeEvent(...) removes an event type from the historic trend logger. The
name of the event type to remove is specified in the argument eventName. The arguments
funcCB and requestId is described for the function addEvent(...). The status is returned in
the status parameter in the callback function. It will have one of the following values:.
Status
Value
Successful
0
Event does not exist
257
removeVariable() removes a variable from the trend logger. Only trend variables added with
the mode argument set to 1 (real time, temporary) can be removed. For a detailed description
about the arguments to this function, see addVariable().
save() saves all trend variables with the mode attribute (function addVariable(…)) set to 0
(historic trend variables) to the .ptrv file. The argument funcCB(...) is a callback function
that will be called when the save operation is finished to indicate the status of the call. This
argument can be 0 if no status is required. The argument requestId is a user-supplied number
468
ProcSee Reference Manual
Standard pTALK Functions
TrendLog (3pTALK)
that will be passed as the first argument in the callback function. The same callback function can be used if unique requestIds are used for instance for save() and document().
The function prototype for the callback function is:
void (*funcCB)( int requestId, int status )
, where requestId is the user supplied id that was passed in the second argument to save().
status is the status of the save operation. 0 indicates success, 1 failure. Note that save()
only has an effect when historic trend variables are added (mode parameter set to 0 in addVariable(…)). It is recommended that all trend variables are added before calling save()
and document(). Historic trend variables added on-line will not be updated before save()
is called. All event variables added with addEvent(...) will be saved to the trend configuration file.
To control the time for the trend logger, the setTime() function can be used. If the mode
parameter has the value -1, all existing historical data will be cleared. A value of 1 indicates to keep as much historical data as possible for variables logged in memory. The
trend logger will be set to the time contained in the time parameter.
The timeTick() function can be used to tick the trend logger when the logging mode
(timemaster) is set to be user driven (3). The time parameter is the Unix time in seconds.
Note that time must be incremented according to the expected interval between time ticks
(timeTickIntvl) parameter.
EXAMPLES
List aList;
void getVarCB( int requestId, List L )
{
for( int = 0; i < L.length(), i++ )
printf( "%s", L.get( i ) );
}
getVariableInfo( getVarCB, 10, aList, "CM","FT", "", 5, 0, 0, 1, 0, 0 );
SEE ALSO
Trend(3pTALK) in "ProcSee Reference Manual"on page 455
TrendPres(3pTALK) in "ProcSee Reference Manual"on page 474
TrendRuler(3pTALK) in "ProcSee Reference Manual"on page 480
ProcSee Reference Manual
469
Standard pTALK Functions
TrendLogExternal (3pTALK)
NAME
TrendLogExternal - class for accessing historical trend log data in an external RTM.
SYNOPSIS
void TrendLogExternal::execute(char* scope, char* source, ... );
int TrendLogExternal::isConnected();
void TrendLogExternal::connectTo( char* rtmName,
char* appName = "" );
DESCRIPTION
The class TrendLogExternal is used in an RTM to access trend logger data stored in an external RTM. This class is derived from TrendLog.
The function execute(...) executes a pTALK statement in the trend logger RTM. The statement is compiled and executed in the scope given as first parameter. The second parameter
can contain all formatting options supported by printf(). Optional formatting arguments can
follow the second argument.
isConnected() returns 1 if the connection to the external trend logger is established, otherwise 0.
connectTo(…) connects the external trend log to a process (RTM) running an internal trend
log. The name of the process is rtmName. The name of the application to connect to in the
external process is appName. If not specified it uses the name of the application where the
trend log is defined. If the TrendLogExternal object is connected to an external trend log it
will be closed before initiating a new connection to the process (RTM) specified in the first
argument to this function.
SEE ALSO
Trend(3pTALK) in "ProcSee Reference Manual"on page 455
TrendPres(3pTALK) in "ProcSee Reference Manual"on page 474
TrendRuler(3pTALK) in "ProcSee Reference Manual"on page 480
470
ProcSee Reference Manual
Standard pTALK Functions
TrendLogInternal (3pTALK)
NAME
TrendLogInternal - class logging historical data
SYNOPSIS
void TrendLogInternal::appendLogBuffer( char* fullName,
int logFrequency,
int numOfPoints,
int* tArr, float* vArr );
void TrendLogInternal::cancelLogBuffer( char* fullName,
int logFrequency );
void TrendLogInternal::connectedRTMs( List list );
int TrendLogInternal::eventTypeHandling( char* name,
char* convert = "",
char* less = "",
char* larger = "")
void TrendLogInternal::execute( char* rtms,
char* scope, char* source, ... );
void TrendLogInternal::execute( List rtms,
char* scope, char* source, ... );
void TrendLogInternal::getLogBuffer( char* fullName, int logFrequency,
int numOfPoints, int lastTime,
int* tArr, float* vArr );
int TrendLogInternal::isConnected( char* rtm );
void TrendLogInternal::newLogBuffer( char* fullName, int logFrequency,
int numOfPoints,
int* tArr, float* vArr );
void TrendLogInternal::setLogBuffers( int timeSpan );
void TrendLog::setTrigger( int mode );
int TrendLogInternal::snapshotSave( char* fileName, char* comment="" );
int TrendLogInternal::snapshotLoad( char* fileName );
int TrendLogInternal::snapshotGetTime( char* fileName );
char* TrendLogInternal::snapshotGetComment( char* fileName );
DESCRIPTION
The class TrendLogInternal is the class used for logging historical trend variables and
events. It is derived from the pTALK class TrendLog.
newLogBuffer() and appendLogBuffer() are functions for adding a set of predictive
data to the trend variable specified by the fullName and logFrequency parameters. A logFrequency value of -1 will use the first variable with this name (if more than one). The
tArr and vArr parameters are arrays that are supposed to contain time stamps and the corresponding values for all numOfPoints of data. Thus the first element of tArr will be the
oldest (back in time) time stamp and the first element vArr will hold the corresponding
value.
cancelLogBuffer() is a function for deleting predictive data in the trend logger. The fullName and logFrequency parameters will specify a trend variable uniquely as for the functions above.
ProcSee Reference Manual
471
Standard pTALK Functions
TrendLogInternal (3pTALK)
As opposed to the other functions that alter the actual content of the log buffers, the getLogBuffer() function is retrieving information from the log buffers and connects it to process
variables or attributes. The first parameters specify the trend variable and number of points
in the same way as the functions above. In addition it is required to specify the last time from
which the number of points is to be extracted. The lastTime parameter is used for this. The
points returned will be from lasTime and numOfPoints*logFrequency back in time.
The getLogBuffer() function will return logged data in two arrays, tArr and vArr. The first
element of this array will be the oldest value in tArr and the corresponding time stamp in
vArr. Element number numOfPoints-1 will contain data for lastTime.
One potential use of the getLogBuffer() function is to extract data from the trend logger each
time the logger is ticked. This can be done by calling the function setTrigger() function with
the mode parameter set to 1 from e.g. the constructor of the trend logger. The system will
then search for a user defined function in the trend logger which much be named trigger().
This functionality can be turned off again by calling the setTrigger() function with mode parameter set to 0.
All variables logged in memory can have their log buffers set to current (last logged) value
for a specified interval by calling the setLogBuffers() function. The timeSpan parameter is
time span in seconds that will be set. A value of -1 indicates setting the whole buffer to the
value last logged.
The function connectedRTMs(...) returns a list of the RTMs currently connected to the historic trend logger. The name of the RTMs are put into the list as text strings. The argument
list to this function is an instance of type List.
The pTALK function eventTypeHandling(...) is used to change the default rules for converting data types when using the pTALK functions event(...) and events(...) or the API functions
PfEvent(...) and PfEvents(...). The RTM will return an error message if a data type can not
be converted without loosing precision or there is a mismatch in an array size when adding
an event. This function can be used to change this behaviour. The parameter name is either
a data type or an event type. If an event type is specified it means that the conversion rules
for this event type is changed. If a data type is specified the historic trend logger will change
the default conversion rules for all the event types of this data type. This function is for advanced users only and should be left as is. In the RTM all data types are converted without
errors as long as the conversion does not result in loss of precision. For instance converting
a float to double is OK, but vice versa issues by default an error message.
The parameters convert, less and larger are text strings and legal characters for these strings
are shown in the table below. The mark x in the convert, less and larger columns gives the
legal character in the char column. The legal characters for convert is for instance "CWE".
Description
472
Char
Convert
Less
Larger
Convert
C
x
Warning
W
x
x
x
Error
E
x
x
x
Null padding
N
x
x
ProcSee Reference Manual
Standard pTALK Functions
Strip
TrendLogInternal (3pTALK)
S
x
The parameter convert is used to change the default rules for converting data types. The
next two parameters are used for arrays only. The data type char arrays are handled different compared to other array data types. Char arrays are treated as character strings and
by default these are null terminated. All other data types will issue error messages when
the data array does not match the event data type. The parameter less is used to change the
rules when the array data type passed as argument to any of the event functions are less in
size than the size of the event data type. If the size of the array data type is larger, the larger parameter must be used to change this default rules.
If setting the parameters convert, less and larger to the empty string "" the default convertion rules used by the RTM will be restored.
The function execute(...) executes a pTALK statement in one or several connected RTMs.
The statement is compiled and executed in the scope given as second parameter. The third
parameter can contain all formatting options supported by printf(). Optional formatting
arguments can follow the third argument. The first parameter rtm is either a character
string or a List instance. If the parameter rtm is a character string this string must be a
name of one of the connected RTMs. If the parameter rtm is an instance of a List class the
objects in this list must be names of RTMs to send the execute command to. Setting this
argument to 0 will send the execute command to all the connected RTMs.
The function isConnected(...) returns 1 if the name of the rtm passed as argument is connected to the RTM, otherwise 0.
To support simulator applications the trendlogger can store its current state and historic
values into a snapshot. The snapshot can later be loaded bringing the trendlogger back to
the exact same state. A snapshot consists of a single file with the extention .ptss. An optional comment and trendlogger's time are also included in the file. The function snapshotSave() saves a snapshot with the specified comment to the specified file. Directories
are created automatically if not present. snapshotLoad() clears the trendlogger's history
and replaces it by the contents of the snapshot file. Return values from these functions are
0 if the operation completed successfully and an error number if the operation failed. If
the snapshotLoad() function fails, the trendlogger will be cleared. Note that the functions
snapshotSave() and snapshotLoad() may take several seconds to complete if the trendlogger's history is large. snapshotGetTime() and snapshotGetComment() returns the
time and comment stored as part of the snapshot respectively. Any extention supplied in
the fileName argument to these functions is replaced by the extention .ptss.
SEE ALSO
Trend(3pTALK) in "ProcSee Reference Manual"on page 455
TrendPres(3pTALK) in "ProcSee Reference Manual"on page 474
TrendRuler(3pTALK) in "ProcSee Reference Manual"on page 480
ProcSee Reference Manual
473
Standard pTALK Functions
TrendPres (3pTALK)
NAME
TrendPres - user interface component displaying a trend plot.
SYNOPSIS
// attributes
int TrendPres::autoScale;
float TrendPres::fillOffset;
int TrendPres::logFrequency;
float TrendPres::lowerBand;
float TrendPres::lowerLimit;
int TrendPres::presentation;
int TrendPres::presentationFunc;
float TrendPres::upperBand;
float TrendPres::upperLimit;
char* TrendPres::variable;
// functions
float
TrendPres::getRulerValue( int rulerNo );
float
TrendPres::getRulerValue( char* rulerName );
unsigned int TrendPres::getRulerTime( int rulerNo );
unsigned int TrendPres::getRulerTime( char* rulerName );
int
TrendPres::getValue( int theTime, float* value,
char* flags = "previous",
int* time = 0 );
int
TrendPres::getValuePos( int theTime,
float* x, float* y,
char* flags = "previous" );
int
TrendPres::legalRulerValue( int rulerNo );
int
TrendPres::legalRulerValue( char* rulerName );
void
TrendPres::setLimitModifier( void (*funCB)(
::TrendPres* trendPres,
float* lowerLimit,
float* upperLimit,
any userData ),
any userData );
void
TrendPres::toBack();
void
TrendPres::toFront();
::Interpolator* TrendPres::getInterpolator();
void
TrendPres::setInterpolator( ::Interpolator i );
DESCRIPTION
The TrendPres class displays historical data for one variable. In addition the graphic attributes in this shape can use the tr() function to trend other variables to better reflect the state
of the historical data.
The autoScale attribute determines whether auto scaling of the curve is on or off. Setting this
attribute to 1 will turn auto scaling on, 0 is off. A value of 2 indicates that auto scaling is carried out for all trend presentations (with autoScale = 2) in the trend diagram to ensure consistency between the trend presentations. If auto scaling is off the curve will be cut-off if the
value exceeds the attributes lowerLimit or upperLimit. The Trend curve will ignore these
474
ProcSee Reference Manual
Standard pTALK Functions
TrendPres (3pTALK)
two attributes if auto scale is on. The RTM will of course update these attributes when the
curve is re-scaled. Whenever the trend presentation receives a value that exceeds any other value contained in the diagram the curve will re-scale itself for the new value. It will
also be re-scaled when the maximum or minimum value for the curve is no longer inside
the trend diagram.
logFrequency is the attribute that determines how often the curve will be updated. If this
attribute is set to 5, it means that the curve will be updated every 5. second. This logger
frequency together with the attribute variable which is the name of the logged variable
the Trend is displaying historical data for, must correspond with the trend specification
file. The value -1 has a special meaning which is also the default value for this attribute.
In ProcSee terminology this mode is called best-fit. What this mean is that the trend logger
will send data to the trend presentation with the highest possible resolution. If the trend
logger logs a variable with different log-frequencies where the slower log frequencies
have longer history, the trend presentation will display the curve with different log frequencies as the trend is panned back in time.
The attributes lowerBand and upperBand are only in use when auto scaling is on. The
purpose with these attributes is to display a band between the edge of the trend to the highest or lowest value of the curve contained in the diagram. These values are given in percentage of the total height of the trend diagram and not the value of the curves upper or
lower limit. A value of 0 means that no band is wanted.
The lowerLimit and upperLimit attributes are used when the auto scaling of the curve is
turned off. Curve values exceeding these values will be cut-off, which will cause a straight
line in the trend diagram. As long as the attribute autoScale is off these attributes can be
both written to and read from. When changing the value of any of these two attributes the
curve will be re-scaled to fit the new limits. If the attribute autoScale is on these attributes
are read only. Changing these attributes will not lead to a re-scaling of the curve. The values of these attributes will be changed by the RTM whenever a new value received from
the trend logger exceeds the maximum or minimum value of the curve contained in the
diagram. The attributes lowerLimit and upperLimit will always reflect the minimum
and maximum value of the curve as long as auto scaling is on.
The attribute presentation is used to change the visualization of a trend curve. Nine different presentation forms are available for the trend curve. The shape of the trend curve
depends on this presentation attribute. Three major presentation types existst, these are:
line, layer and step. Line curves draws a line between two adjacent values. Layer has the
same form as line but fills an area above or below the curve. Step is a shape that resembles
a bar graph. A step curve can be filled or not filled.
The following table shows the presentation forms that can be used and the next table
shows the affected attributes for the different visualization types.
Presentation Form
Value
Line
0
Layer
1
Step fill
2
ProcSee Reference Manual
475
Standard pTALK Functions
TrendPres (3pTALK)
Step line
3
Layer offset
4
Step fill offset
5
Layer difference
6
Layer maximum
7
Step maximum
8
Attribute
0
1
2
3
4
5
6
7
8
foregroundColour
x
x
x
x
x
x
x
x
x
backgroundColour
x
x
x
x
x
x
x
x
x
foregroundFillColour
x
x
x
x
x
x
x
backgroundFillColour
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
linePattern
x
fillPattern
lineWidth
x
fillOffset
x
x
The attribute fillOffset is used when the presentation form is set to 4 (layer offset), 5 (step
offset) or 6 (layer difference). For all other visualization types this attribute is ignored. If the
presentation form is 4 or 5 the fillOffset controls the filled area between the curve and the
value of this attribute. If the presentation form is 6 this attribute must be set dynamically
equal to another trend presentation curve in the same trend diagram. The area between these
two curves will be filled using current attribute settings.
Setting the attribute presentationFunc can change the curve from linear to logaritmic. Legal
values for this attribute is:
- 0: normal linear
- 1: ln - natural logartimic.
- 2: log10 - 10 logartimic.
The default value for this attribute is linear (0). Notice that when using logaritmic trend the
trend values must be greater than zero. This applies to upperLimit and lowerLimit as well.
The name of the variable the presentation is displaying its historical data for is specified using the attribute variable. This name together with the log frequency must correspond with
a name in the trend specification file. If the logFrequency attribute is set to -1 (best-fit) only
the name must match. Elements in arrays or fields in structs can be trended as well as single
476
ProcSee Reference Manual
Standard pTALK Functions
TrendPres (3pTALK)
variables. If the variable is located in another application or it is an attribute in a picture
the name must be specified using a full-name. The variable attribute can also be set dynamic equal to a pointer variable if the name is surrounded by back-quotes. This pointer
variable must point to a trended variable specified in the trend specification file. This attribute can also be set to an arbitrary pTALK expression as long as the result of the evaluation is a name of a trended variable.
The function getRulerValue() returns the value for the current ruler position given by parameter rulerNo or rulerName. The parameter to this function may be either a ruler name
or a number. If the parameter is a number this is the ruler number as it is specified in the
picture or .Tdoc file.
The getRulerTime() returns the time for the current ruler position for the ruler given by
parameter rulerNo or rulerName. This function has the same parameter as the function
getRulerValue().
legalRulerValue() returns true if the value for the ruler specified by rulerNo or rulerName in current ruler position is a legal float value, otherwise false. This function has the
same parameter as the function getRulerValue().
The function toBack() puts the trend curve behind any other presentations defined in the
trend diagram. This attribute is typically used for filled trend curves.
The function toFront() puts the trend curve at top of any other presentations defined in
the trend diagram. This attribute is typically used for filled trend curves.
The function getValue(…) returns the value of the trend curve in the out parameter value
at the time specified in the first argument theTime. False is returned if the time given is
outside the visual time span displayed by the trend diagram, otherwise true. The flags argument is used when the time given does not exactly match a data point on the curve. The
following flags are supported.
Flag
Description
interpolated
Calculates an interpolated point between the two adjacent
data points.
previous
Get previous data point.
next
Get next data point.
closest
Get the nearest data point.
timepos
Uses the interpolated time when calculating the position in
the function getValuePos(…).
force
Forces the function to return a value even if the time given
contains illegal data points.
Notice that the flags interpolated, previous, next and closest are mutually exclusive and
can not be combined.
ProcSee Reference Manual
477
Standard pTALK Functions
TrendPres (3pTALK)
The function getValuePos(…) is analogous to getValue(…) except that it returns the position within the trend diagram. The position is returned in the arguments x and y. The world
coordinates are relative to the Trend shape.
It is sometimes required to better control the values of the lower- and upper limits when a
TrendPres shape is in one of the auto-scale modes. The function setLimitModifier(…) registers a call-back function which will be called each time the auto-scale limits change. The
call-back function can modify the limits calculated by the TrendPres shape. It should for
example be possible to set the limits to 0 and 100 if the TrendPres calculates the limits to
0.23 and 99.42. The setLimitModifier(…) function accepts two arguments, a pointer to a
call-back function funcCB and user specific data, userData. The last argument is optional. If
it is specified it must be specified in the call-back function as well. The user data will be sent
unmodified in the last argument to the call-back function. The first argument in the call-back
function is a pointer to the TrendPres object calling the function. The next two arguments
lowerLimit and upperLimit in the call-back function are in/out parameters. Modify these values to change the auto-scale limits.
getInterpolator() returns the Interpolator associated with the TrendPres shape. The value
0 is returned if the TrendPres shape has not been initialized with an Interpolator.
setInterpolator(...) sets or clears the Interpolator used by the TrendPres shape. This function accepts an Interpolator as argument. Setting this arguments to the value 0 will clear the
interpolator. The purpose with the interpolator is to map the trend curve’s data into a new
coordinate system. An Interpolator can for instance be used to magnify values within a value
range, and reduce values which lie outside this range.
NOTE
Only the following attributes in the TrendPres shape can use the tr() function. For the other
attributes the result is unpredictable.
• foregroundColour
• backgroundColour
• foregroundFillColour
• backgroundFillColour
• presentation
• lineWidth
• pattern
• fillPattern
• visibility
EXAMPLES
function `void modifier( ::TrendPres* tp, float* ll, float* ul )
{
*ul += 5;
478
ProcSee Reference Manual
Standard pTALK Functions
TrendPres (3pTALK)
*ll -= 5;
}`
Trend T
{
...
TrendPres TP
{
// Example using the tr() function
foregroundColour = ‘tr( "trFgCol" )‘;
// Trending the attribute attr in the picture pic1.
variable = "::myApp.pic1.attr";
}
...
}
function `void constructor()
{
T.TP.setLimitModifier( modifier );
}`
...
SEE ALSO
TrendLog(3pTALK) in "ProcSee Reference Manual"on page 462
Trend(3pTALK) in "ProcSee Reference Manual"on page 455
EventPlot(3pTALK) in "ProcSee Reference Manual"on page 339
tr(3pTALK) in "ProcSee Reference Manual"on page 453
ProcSee Reference Manual
479
Standard pTALK Functions
TrendRuler (3pTALK)
NAME
TrendRuler - user interface component displaying a ruler in a Trend.
SYNOPSIS
// attributes
int TrendRuler::rulerIsSelected;
// functions
int TrendRuler::setRulerPosition( int time );
int TrendRuler::moveRuler();
DESCRIPTION
The TrendRuler class displays a ruler that can be used to get exact time position and value
for a TrendPres.
The rulerIsSelected attribute determines whether the ruler can be moved by the functions
setRulerPosition() or moveRuler() or not. Setting the attribute to 0 disables the ruler, the
value 1 enables the ruler.
The setRulerPosition() moves the ruler to the position in the Trend given by the time parameter. The time can be calculated using the functions Trend::xyW2Time() or mktime().
The function moveRuler() moves the ruler to a new position determined by the position of
the mouse cursor. This function is typically used in a dialogue action. This function can only
be called if the event contains a coordinate position.
SEE ALSO
TrendPres(3pTALK) in "ProcSee Reference Manual"on page 474
Trend(3pTALK) in "ProcSee Reference Manual"on page 455
480
ProcSee Reference Manual
Standard pTALK Functions
trig (3pTALK)
NAME
sin, cos, tan, asin, acos, atan, atan2 - trigonometric functions
SYNOPSIS
double sin( double x );
double cos( double x );
double tan( double x );
double asin( double x );
double acos( double x );
double atan( double x );
double atan2( double y, double x );
DESCRIPTION
sin(), cos(), and tan() return trigonometric functions of radian arguments. asin(), acos()
and atan() are the inverse functions of sin(), cos(), tan() respectively.
atan2() returns
the arctangent of y/x, in the range -pi to pi, using the signs of both arguments to determine
the quadrant of the return value.
SEE ALSO
sin(3M), cos(3M), tan(3M), asin(3M), acos(3M), atan(3M), atan2(3M)
ProcSee Reference Manual
481
Standard pTALK Functions
Update functions (3pTALK)
NAME
update - updates applications, pictures, shapes and resources in the RTM
onUpdate - user defined pTALK function automatically called from within a global update.
onVariableUpdate - user defined pTALK function automatically called when variables
have been updated by an external source (i.e. by the ProcSee API).
SYNOPSIS
update( [char* fullName|Object* entry]=0, char* flags = 0 );
void onUpdate();
void onVariableUpdate( char* processName );
DESCRIPTION
The pTALK function update() updates applications, pictures, shapes and resources in the
RTM. This function is by default asynchronous, i.e. the update action will not be executed
immediately but will be put on an asynchronous queue and executed later when the RTM is
idle. Calling this function without arguments is the same as putting a global update on the
asynchronous queue. In this context a global update is an update that updates all applications
in the RTM. Applying frequent calls to the global update() within the pTALK code does not
reduce performance since consecutive global updates put on the queue will be merged into a
single update.
The update() function provides one or two optional arguments. The argument fullName is
the full qualified name of the entry to update in the RTM (note that an Object pointer can be
passed as argument instead of the fullname). The entry must be, either:
• :: (same as global update)
• application
• picture
• shape
The optional argument flags provides additional options to the update() function. The following flags are supported:
• sync -The update action is not put on the asynchronous queue in the RTM but executed
immediately. Note that this option should be used with care when applying frequent
global update calls because it will hurt performance.
All pictures that are currently mapped on the screen will be updated when invoking a global
update or an application specific update. Those not currently mapped will be flagged so that
they will be updated next time they are mapped.
The following operations are performed upon update for each currently displayed and
mapped picture:
• All dynamic bindings are evaluated. A dynamic binding is an attribute with a dynamic
value, i.e. a value expressed in pTALK. If a dynamic value is referred to from several
482
ProcSee Reference Manual
Standard pTALK Functions
Update functions (3pTALK)
places, it is only evaluated once.
• The new evaluated value of a dynamic binding is compared to the old value, and the
need for graphical changes on the screen is determined based on this comparison.
• The picture is redrawn on the screen. Only areas that will actually change appearance
are redrawn.
onUpdate is a user defined pTALK function invoked when updating the application or
pictures. It can be created at different levels in the object hierarchy, i.e. at the Application,
Library, Picture, ComObject, ComShape, Instance, Group and Trend scope. Before each
update, ProcSee will search for this function. If it is found, it is executed prior to updating
the dynamic attributes and the graphics for the object. This function is normally used to
update ComObject and ComShape objects.
onVariableUpdate is a user defined pTALK function called when variables have been
updated by an external source, like simulators, data acquisition systems, etc. This function
must be declared at the application scope in the object hierarchy. The argument processName is the name of the process which have updated the variables. This function will be
called every time new variable values are available from an external source and it will be
called immediately. That is, it will be called before the global update function is executed
and it is called synchronously.
NOTES
By default the update() function is asynchronous which means that an update() call is
queued internally and executed when the RTM(1) becomes idle. If the internal queue contains more than one global update() call, only the last one is executed. This means that
applying frequent calls to the global update() within your pTALK code does not hurt performance.
onVariableUpdate is a synchronous function which will be called immediately when
variable values have been received from an external source.
WARNINGS
Do not call update() from a dynamic binding! This will cause system crawl because one
update will put another one on the queue, ad nauseam. update() should only be called
from dialogue actions or remotely from external applications.
EXAMPLE
// The next examples illustrates how to invoke the update() function to update a specific application,
// a shape, etc.
update( "::System" );
// Only update the ::System application.
update( "::System.MainPicture.I1" );
// Update the I1 instance shape.
update( "sync" );
// Make a synchronous global update.
update( "::System.MainPicture", "sync" ); // Update the picture synchronously.
// The following example shows how to implement a user defined onUpdate function to update a
// data grid. The data grid is a ComShape object.
ProcSee Reference Manual
483
Standard pTALK Functions
Update functions (3pTALK)
function onUpdate()
{
// This function updates the data grid with process data. The variable pdata is an array of
// floating point numbers.
int n = 0;
for ( int c = 0; c < di.Columns; c++ )
for ( int r = 0; r < di.Rows; r++ )
di.Update( c, r, pdata[ n++ ] );
}
// The following example illustrates how to implement an user defined onVariableUpdate function.
// This function checks whether the data received is from the process "PROCSEE_S1" or not
// before calling the pTALK function updateS1()
void onVariableUpdate( char* processName )
{
if ( strcmp( processName, "PROCSEE_S1" ) == 0 )
{
updateS1();
}
}
SEE ALSO
Picture(3pTALK) in "ProcSee Reference Manual"on page 395
Window(3pTALK) in "ProcSee Reference Manual"on page 488
Shape(3pTALK) in "ProcSee Reference Manual"on page 430
484
ProcSee Reference Manual
Standard pTALK Functions
updateResources (3pTALK)
NAME
updateResources - updates all resources in the application scope.
SYNOPSIS
void Application::updateResources( int async = 0 );
DESCRIPTION
updateResources() is a function that updates all the resources defined in the application
scope. This function accepts an optional argument async. Setting this argument to 1 will
put the update resources action on the asynchronous queue and suspend the update until
the RTM becomes idle. Calling this function several times with the async flag will remove
unnecessary update actions on the queue, and thereby improve the overall performance.
When this argument is 0, which is the default, will execute the update of the resources immediately.
SEE ALSO
updateWindows(3pTALK) in "ProcSee Reference Manual"on page 485
update(3pTALK) in "ProcSee Reference Manual"on page 482
ProcSee Reference Manual
485
Standard pTALK Functions
updateWindows (3pTALK)
NAME
updateWindows - updates all windows in the application scope.
SYNOPSIS
void Application::updateWindows();
DESCRIPTION
updateWindows() is a function that updates all the windows defined in the application
scope. The global update() function do not include windows in the update. Any changes to
a window attribute must be followed by a call to updateWindows().
In updateWindows() all dynamic bindings are evaluated. A dynamic binding is an attribute
with a dynamic value, i.e. a pTALK expression. If the new value compared to the old one has
changed then the window is updated based on the new value.
SEE ALSO
Window(3pTALK) in "ProcSee Reference Manual"on page 488
update(3pTALK) in "ProcSee Reference Manual"on page 482
486
ProcSee Reference Manual
Standard pTALK Functions
Value Changes (3pTALK)
NAME
hasValueChanged - function to check if a value has changed.
SYNOPSIS
int
hasValueChanged( any* valueAddress );
DESCRIPTION
The hasValueChanged() function returns true (a value different from 0) if the value at
valueAddress has changed since last time hasValueChanged was called with this address. It returns false (0) if the value at valueAddress is the same. The first time it is called
for a new valueAddress, it returns true. valueAddress can point to a variable or an attribute. valueAddress must point to the top-level of the value, i.e. it can not point to a field in
a struct or an element in an array. The change status is on the whole variable or attribute.
EXAMPLE
// Assume v1 is a struct variable with many fields, making it tedious to check if it has changed
// by comparing the fields with a stored copy of the previous value:
void onUpdate()
{
if ( hasValueChanged( &v1 ) )
{
// do something using v1, requiring a lot of pTALK code...
}
}
ProcSee Reference Manual
487
Standard pTALK Functions
Window (3pTALK)
NAME
Window - user interface component for displaying pictures
SYNOPSIS
// attributes
int Window::backgroundColour;
int Window::x;
int Window::y;
int Window::height;
int Window::width;
char* Window::decorations;
char* Window::functions;
char* Window::mode;
char* Window::parent;
int Window::theCursor;
char* Window::theTitle;
char* Window::type;
// member functions
char* Window::name();
char* Window::fullName();
void
Window::raise();
void
Window::lower();
void
Window::map();
void
Window::unmap();
void
Window::unmapChildren();
int
Window::alwaysOnTop(int onTop=1);
void
Window::minimize();
void
Window::iconify();
void
Window::maximize();
void
Window::restore();
void
Window::title( char* s );
void
Window::move( int x, int y );
void
Window::moveFrame( int x, int y );
void
Window::resize( int w, int h );
void
Window::zoom( double scale );
void
Window::pan( float x, float y );
double Window::zoomFactor();
float Window::xSnapped( float x );
float Window::ySnapped( float y );
void
Window::update();
void
Window::updatePicture(int mode=0);
void
Window::paste();
bool
Window::isMapped();
bool
Window::isViewable();
bool
Window::isIconic();
bool
Window::isInEditMode();
char* Window::shapeFullNameAt( float x, float y );
Display* Window::display();
Picture* Window::thePicture();
int
Window::grabPointer();
int
Window::selectShape( int mode, char* shapeFullName );
488
ProcSee Reference Manual
Standard pTALK Functions
Window (3pTALK)
int
Window::selectAllIn( int mode, float x, float y,
float width, float height );
void
Window::setCursor( int cursor=-2 );
void
Window::sound( int volume, int pitch, int duration );
void
Window::moveCursor( float x, float y);
void
Window::setDecorations( char* decoration );
void
Window::setFocus();
void
Window::setFunctions( char* function );
Window* Window::windowAt( float x, float y );
int
Window::translateCoordinates( float inX, float inY,
Window* toWin,
float* outX, float* outY );
int
Window::translateCoordinates( float inX, float inY,
char* toWin,
float* outX, float* outY );
void
Window::buttonRepeatInterval( int startDelay,
int repeatInterval );
void
Window::getFrameSize( int* left, int* top,
int* right=0, int* bottom=0, char* flags = "" );
void
Window::getScreenSize(int* width, int* height,
int* x=0, int* y=0, int s=0);
void
Window::modSysKeyBehaviour( char* sysKeys );
int
Window::adjustVirtualDisplay( int x = 0, int y = 0, int w = 0, int h = 0 );
DESCRIPTION
Although all windows are global to the application, they are arranged in an hierarchical
manner. Two windows B and C may be sub windows of window A. Top-level windows
are managed by the window manager.
Window attributes can be changed at run-time and they can be dynamic, but remember
that any changes to a window attribute must be followed by a call to the function updateWindows() or the global update() function.
The attribute backgroundColour is used to control the colour of the window. A value of
-1 means that the background colour in the picture associated with the window is used.
This is default behaviour. Any other value will set the window background to the value
specified. This attribute will however not change the picture’s background colour. It only
has an effect when the picture’s attributes worldWidth and worldHeight are smaller than
the window it is displayed in (or no picture is displayed in the window). Only the area outside the picture will be displayed in this colour.
x, y, width and height are attributes indicating the position and dimension of the window.
Resizing or moving the window using the pointer will change these attributes. These attributes are specified in display coordinates. Where the coordinate (0,0) is upper left corner of the display. x, y specifies the position of the upper left corner of the window, inside
the window frame. For sub-windows, the position is relative to the parent window. width,
height specifies the size of the window inside the window frame.
The attribute decorations controls the appearance of the decoration the window manager
put on any top level window. This attribute has only an effect when a mwm window manager is used or any other window manager defining the same window manager hints as
ProcSee Reference Manual
489
Standard pTALK Functions
Window (3pTALK)
mwm. This includes Microsoft Windows, vue, cde or 4DWM from Silicon Graphics. Setting
this attribute will not affect the window decoration if a window manager like open-look,
uwm, twm etc. is used. The following values are legal for the decoration:
Property
Comment
ΝΟΝΕ
No decoration
ALL
All decorations are on
BORDER
Turn border on/off
RESIZEH
Switch resize handlers on/off
TITLE
Display window title
MENU
Turn menu in window frame on/off
MINIMIZE
Minimize button on/off
MAXIMIZE
Maximize button on/off
A minus sign in front of the property means that it is removed from the window manager
frame and a plus sign means that is added. For instance setting all properties except the minimize and maximize, use "ALL - MINIMIZE - MAXIMIZE". Setting just the title and border
use, "TITLE + BORDER". Some of these properties can not be removed unless other properties are removed as well. For instance the border is removed only if BORDER and RESIZEH are removed.
functions is an attribute that specifies what kind of functions that will be available from the
menu in the window frame. This attribute has an effect only on top-level windows and if a
window manager like mwm is used. For more information about what kind of window managers this attribute applies to, see the description of decorations. The following properties
are recognized by the rtm. Mixed case are legal for the property strings.
Property
490
Comment
NONE
Remove all functions
ALL
All functions are available
RESIZE
Enable or disable resize function
MOVE
Move window on/off
MINIMIZE
Enable or disable the minimize function
MAXIMIZE
Enable or disable the maximize function
CLOSE
Kill window through the window frame menu
QUIT
Same as CLOSE (Silicon Graphics only)
ProcSee Reference Manual
Standard pTALK Functions
Window (3pTALK)
It is not possible to remove for instance raise and lower from the functions menu. This is
a restriction in the window manager. A plus in front of the property string will enable the
function in the menu frame. A minus will disable the same function. To disable for instance the close/quit function set this attribute equal to "ALL - CLOSE - QUIT".
The mode attribute applies to UNIX and linux platforms only. It is used to prevent other
parts of the application or system to receive input as long as the window is mapped. The
attribute can be set to either MODELESS or SYSTEM_MODAL. The system default is
MODELESS which means that all windows in the application can receive keyboard and
pointer input. If this attribute is set equal to SYSTEM_MODAL the only window that will
be receiving input from keyboard or pointer will be this one. The entire workstation will
be blocked until the window is unmapped. This mode should be used with care. The
modes FULL_APPLICATION_MODAL and PRIMARY_APPLICATION_MODAL
are not available in this release of ProcSee.
The parent attribute should either be the name of a display, or another window. See description of the type attribute below for details. For backwards compatibility; If the name
is not the name of another window or display, it is assumed to be a display connection
string, and is replaced with the name of a display created with this connection string.
theCursor is an attribute that overrides the application’s default cursor. Setting this value
to another value than the default cursor (-1) will display the specified cursor in the window.
The attribute theTitle controls the window title. If this value is set to a non-empty string
this value overrides the setting from displayPicture(). For more information see the function title().
The type attribute controls what kind of window to create. ProcSee supports the following
window types:
Type
Description
NORMAL
Creates a top level window. The attribute parent must specify
the name of a Display object.
SUB
Creates a sub window. The parent attribute must specify the
name of a Window object.
MENU
Creates a menu window. A menu window is a window that is
not controlled by the window manager (X-Windows only).
This kind of window is not decorated with a border. The parent attribute must specify a name of a Display object.
GROUP
Creates a group window. The group owner is specified with
the parent attribute, i.e. a Window object. A group window is
always on top of the group owner, and it is iconified when the
group owner is iconified.
ProcSee Reference Manual
491
Standard pTALK Functions
Type
TOOL
Window (3pTALK)
Description
A tool window has the same characteristics as a GROUP window except that it has a tinner (tool) border. Notice that on XWindows it depends on the window manager if tool windows
use a different border than the group windows.
When a new window is created, it will by default be a NORMAL window where the parent
attribute is automatically set to point to a default Display object in the application (either automatically created by the pTALK function newWindow(), or an existing Display object).
A top-level window is entirely controlled by the window manager. A top level window can
be moved using the mouse and it can be iconified, minimized, maximized, etc. A SUB window is a window displayed inside and controlled by its’ parent window. A MENU window
is a window that is not controlled by the window manager, meaning that it has no window
decoration. A MENU window is normally used to create menus or popup-menus. To create
a menu use the functions ungrabPointer() and grabPointer(). The GROUP window and
the TOOL window types behave the same, and may have the same visual appearance on XWindows. Note that the group owner window must be mapped before the GROUP window
or TOOL window is displayed in order to function properly.
name() returns the name of the window object, while fullName() returns the complete name,
including all ancestors, for example “::Sim.MainWin”.
raise() moves a window object to the top of the stacking order among its siblings. lower()
moves a window object to the bottom of the stacking order among its siblings. Siblings are
windows on the same level, i.e. windows sharing the same parent window. All top-level windows are considered siblings.
map() maps the window object. If all ancestor windows are also mapped, the window object
will display on the screen. unmap() unmaps the window object, and it disappears from the
screen. unmapChildren() unmaps all children windows.
alwaysOnTop() makes the window stay on top of other windows, or not, depending on the
argument. This functionality is only supported on MS Windows. On the X Windows platforms, this function does nothing.
minimize() and iconify() are two names for the exact same functionality, both iconifies the
window. maximize() maximizes the window. restore() restores the window from maximized or iconified to maximized or normal window state. maximize() and restore() does not
work on X, since this is behaviour that programs are not allowed to control.
title() sets the theTitle attribute of the window object according to the parameter s. The title
is not to be confused with the name of the window. The window manager is hinted about the
new title and will probably display it as part of the window decoration if it’s a top-level window. If the theTitle attribute is an empty string, the window will use the name of the window
if no picture is displayed in the window, or the name of the picture displayed in window, as
window title.
move() moves the upper left corner of the clientArea (inside of the window frame) of the
window to the specified position.
492
ProcSee Reference Manual
Standard pTALK Functions
Window (3pTALK)
moveFrame() moves the upper left (outside) corner of the window frame to the specified
position.
resize() resizes the width and height of the window. The specified size is the inside of the
window frame.
zoom() zooms the picture displayed in the window by a scale given as argument. The
scale is given in percent (100 is normal size) and indicates the new scale relative to scale
1:1. If no picture is currently associated with the window, nothing happens.
pan() pans the picture displayed in the window. The x and y panning coordinates are given
as arguments. The picture is panned so that the upper left corner of the view is in position
(x,y). If no picture is currently associated with the window, nothing happens.
zoomFactor() returns the current zoom factor in percent, relative to the current 1:1 setting, of the picture displayed in the window. If no picture is currently associated with the
window, the value 0 is returned.
xSnapped() and ySnapped() takes a picture coordinate as input and returns the same coordinate snapped according to the picture’s current snap setting.
paste() copies all objects from the clipboard onto the picture. Refer to the edit(3pTALK)
manual entry for a detailed explanation.
update() is updating the picture currently displayed in the window. It acts like the global
pTALK update() functions, but only operates on the picture that is displayed in this window. See the update(3pTALK) manual entry for a detailed explanation.
The updatePicture() function is used to update the picture displayed in the window immediately. As opposed to the normal update functions, the updatePicture function does
not merge consecutive updates. The optional mode argument can have the following values:
• 0 : Update the dynamics. Redraws the changed areas, according to the picture updateMode.
• 1 : Update dynamics and redraw all shapes.
• 2 : Don’t update the dynamics, but redraw all the shapes.
isMapped() returns true if the window is currently mapped on the display, false otherwise. This does not imply that it is currently viewable.
isViewable() returns true if the window is currently viewable on the displayed, false otherwise.
isIconic() returns true if the window is iconified, false otherwise.
isInEditMode() returns true if a picture is currently associated with the window, and that
picture is currently in edit mode, false otherwise.
shapeFullNameAt() returns the full name of the foremost shape located at the given (x,y)
world coordinate, or an empty string if no shape is present or if no picture is associated
with the window.
display() returns the Display associated with the window.
ProcSee Reference Manual
493
Standard pTALK Functions
Window (3pTALK)
thePicture() returns a pointer to the picture that is currently displayed in the window, or 0 if
no picture is currently displayed in the window.
grabPointer() actively grabs control of the pointer. Further pointer events are reported to the
window until a ungrabPointer() is called or the window is unmapped. Grabbing of pointers
are mainly used in menus where the menu should receive all pointer input after it is mapped.
Observe that an active grab may lock the system forever.
selectShape() changes the selection state of the shape given by shapeFullName. If mode is
0, the shape is unselected, if mode is 1, the shape is selected, and if mode is 2 the shape is
toggle selected. The routine returns the number of shapes whose selection state were changed
by the call, i.e. 0 or 1.
selectAllIn() changes the selection state of all shapes completely included in the rectangular
area given by x, y, width, and height. If mode is 0, the shapes are unselected, if mode is 1,
the shapes are selected, and if mode is 2 the shapes are toggle selected. If both width and
height is 0, all shapes in the picture are affected by the call. The routine returns the number
of shapes whose selection state were changed by the call.
setCursor() changes the cursor temporarily for this window. See "Cursor - cursor functions"
on page 310.
sound() rings a bell at the display on which this window is displayed. The volume is given
in the range -100 to 100; see the XBell(3X) man page for a description of this setting. The
pitch is given in Hz, and the duration is given in milliseconds. Note that the actual sound is
hardware dependent.
moveCursor() will move the mouse cursor to the position given by x and y. The (x,y) position is given in world coordinates.
setDecorations() changes the current window decoration. The parameter decoration is set
equal to any combination of the property strings described for the attribute decorations. If
the parameter starts with a minus or a plus sign then the current decoration setting is changed
accordingly. A minus means that the property string specified is removed from the window
decoration and a plus means that it is added. If the parameter starts with a property string then
the value of the parameter decoration will replace current window decoration. For more information about the property strings available see the description of the attribute decorations.
setFocus() set the focus on the window
setFunctions() manipulates the menu in the window frame. The parameter function is set
equal to any combination of the property strings described for the attribute functions. If the
parameter function do not start with a plus or minus sign then the property string specified
will replace current function menu setting. On the other hand if the parameter starts with a
minus or plus then the menu property specified will be enabled or disabled leaving the other
menu options as they are. For more information about the property strings available see the
description of the attribute functions.
windowAt() returns a pointer to a ProcSee window at position (x,y). The position is specified
in the window’s coordinate system. It returns 0 if no ProcSee window is found at this position.
494
ProcSee Reference Manual
Standard pTALK Functions
Window (3pTALK)
translateCoordinates() translates the coordinates inX,inY from the current window to
the window specified in the argument toWin’s coordinate system. If successfully converted the result is placed in outX,outY
buttonRepeatInterval() modifies the repeat interval and the initial delay for button repeated events received by the window’s display. The arguments startDelay and repeatInterval are specified in milliseconds.
getFrameSize() returns the window’s border size in the arguments left, top, right and bottom. The arguments right and bottom can be ignored if set to null pointer (0). The majority
of the window managers on the market use the same border size for left, right and bottom.
If it is a top level window the top border may include a caption bar. By default the border
size is returned in the Display object’s scale factor. This can be changed by specifying
pixels in the optional flags argument, i.e the border size is returned in device pixels.
getScreenSize() returns the size of the screen, and the position of the upper left pixel of
the screen. If the last argument is -1, the size of the virtual screen is returned. If the last
argument is 0 then the size of the primary screen is returned. On X Windows the last argument is not in use.
modSysKeyBehaviour(...) modifies the default behaviour of some predefined system
keys on the Microsoft Windows platforms. The following system keys can be modified:
F10 and Alt+F4. The key F10 is by default used to activate the menu bar on Windows.
When this feature is enabled (which is the default), only every second key stroke will be
registered in ProcSee. The key focus will alternate between the ProcSee window and the
menu bar (even if the window does not have a menu bar). The system key combination
Alt+F4 is used on Windows platforms to close the window which has the key focus. Calling this function with a string specifying the system keys to disable will modify the default
actions of these keys. This function accepts one argument of type character string. Only
F10 and Alt+F4 are legal values. The comma character ’,’ is used to separate the keys
specified in the string. For instance "F10", "Alt+F4" or "F10, Alt+F4". Calling this function several times will override the old settings. To reset the system keys to their default
actions, call this function with an empty string.
adjustVirtualDisplay(...) adjust the Display object’s virtual display area’s (virtualX,
virtualY, virtualWidth and virtualHeight) attributes to fit the size of the Window. This
functionality is mainly used when resizing the entire application based on the size of a toplevel window, i.e. all windows including sub-windows are automatically repositioned and
rescaled. The optional arguments x, y, width and height are in device pixels. These arguments specify the initial size of the Display. To cover the entire display, use this function
with the size arguments to initialize the Display object. It should be called from the application’s constructor before any picture is displayed. The DisplayInfo class provides
the display size. If the top-level window has a frame, then get the initial size in pixels by
subtracting the frame size from the display size. To get the frame size in pixels use the
pTALK function getFrameSize where the flags argument is set to pixels. To implement
interactive resizing functionality, call this function from the action part of the dialogues
windowMoved() and windowResized() (with no arguments).
EXAMPLES
alarms.raise();
// raise the window “alarms”
ProcSee Reference Manual
495
Standard pTALK Functions
Window (3pTALK)
spreadSheet.title( “NoName” ); // entitle window “spreadSheet” NoName
alarms.zoom( 200 );
// zoom in to scale 2:1
// Remove border and resize handlers
// from the window frame.
alarms.setDecorations( "-BORDER-RESIZEH" );
alarms.setFunctions( "-MOVE" ); // The window can no longer be moved
// by the user.
alarms.setDecorations( "NONE" ); // Remove all window decorations
// Enable all menu functions except
// minimize.
alarms.setFunctions( "ALL-MINIMIZE" );
// Get the border size. Do not get the right border, it is the same as
// left
int leftright, top, bottom;
alarm.getFrameSize( &leftright, &top, 0, &bottom );
NOTES
In order to change the window decoration or the functions menu the window manager must
accepts the hints sent to it. If the window manager that is used does not know the hints they
are simply ignored. Here comes a list of known window managers that ignores the hints: olwm, twm, uwm
SEE ALSO
Picture(3pTALK) in "ProcSee Reference Manual"on page 395
edit(3pTALK) in "ProcSee Reference Manual"on page 327
load/display(3pTALK) in "ProcSee Reference Manual"on page 382
save/document(3pTALK) in "ProcSee Reference Manual"on page 425
XBell(3X)
updateWindows(3pTALK) in "ProcSee Reference Manual"on page 485
496
ProcSee Reference Manual
Standard pTALK Functions
xyConv (3pTALK)
NAME
xyConv - converts between different coordinate systems of displays, windows, pictures,
and shapes.
SYNOPSIS
int xyConv( Object* from, float fromX, float fromY, Object* to, float* toX, float* toY, char* flags=0
);
float xyConvX( Object* from, float fromX, float fromY, Object* to, char* flags=0 );
float xyConvY( Object* from, float fromX, float fromY, Object* to, char* flags=0 );
DESCRIPTION
The xyConv() function converts between coordinate systems of displays, windows, pictures, and shapes. The from and to arguments are either a pointer or a fullName string to
an object of one of these types. If the from or to argument is 0, the coordinate system used
is the device pixels. The fromX and fromY arguments are the coordinate in the from objects’ coordinate system. The result is returned in the to objects’ coordinate system in the
float arguments pointed to by toX and toY. The functions xyConvX() and xyConvY() returns only the x or the y part of the to coordinate, and is typically used inside dynamics
where out arguments are unusable. The flags argument can contain flags that modify how
the coordinate system of shapes are viewed. The legal values of flags are in the following
table:
Table 7: xyConv flags values
Option
from or src
to or dest
Value
Description
xyOrigo
If the from object is a shape, the source coordinate system has
its origo at the point given by the shapes x and y attributes. This
is the default.
xyXy
If the from object is a shape, the source coordinate system has
its (x, y) coordinate at the point given by the shapes x and y
attributes.
xyOld
If the from object is a shape, the source coordinate system is
handled as if xyOrigo was specified for instances and trend, and
as if xyXy was specified for all other shapes.
xyOrigo
If the to object is a shape, the destination coordinate system has
its origo at the point given by the shapes x and y attributes. This
is the default.
xyXy
If the to object is a shape, the destination coordinate system has
its (x, y) coordinate at the point given by the shapes x and y
attributes.
ProcSee Reference Manual
497
Standard pTALK Functions
xyConv (3pTALK)
Table 7: xyConv flags values
Option
Value
xyOld
Description
If the to object is a shape, the destination coordinate system is
handled as if xyOrigo was specified for instances and trend, and
as if xyXy was specified for all other shapes.
An example value of the flags argument: "from=xyXy, to=xyXy". Note that the flags option
xyOld is for backwards compatibility only, and may be removed in the future. Shapes that
don’t have x and y attributes act as if they are 0. This includes the shapes: Line, Polygon,
Group, and the sub-shapes of Trend.
Coordinate systems in ProcSee
The coordinate systems of the different objects are described here:
Table 8: ProcSee coordinate systems
Object type
Description of coordinate system
Shape
The origo of the coordinate systems of shapes (simple shapes as circle, rectangle, etc. but also
composite shapes as group, trend, and instance) are at the position given by the shapes x and
y attributes. The sub-shapes of trend, and the shapes Line, Polygon, and Group act as if they
have x and y attributes set to 0.
If the shape is rotated or scaled, using the rotationAngle, xScaleFactor, and yScaleFactor
attributes, the point that is not moving relative to the parent is the point given by the xReference and yReference attribute. xReference and yReference is given in the parent coordinate
system. All other coordinate values in the shape is given in the shapes coordinate system. The
(x, y) coordinate is also given in the shapes coordinate system, but before the translation of
the shapes coordinate system so that origo is at the (x, y) coordinate.
Composite shapes can contain other shapes, meaning that there can be several different shape
coordinate systems between the shape you look at and the picture it is in.
Picture
The origo of the picture coordinate system is given by the attributes worldX and worldY, by
specifying the position of the upper left corner of the picture relative to origo. The worldWidth and worldHeight attributes gives the size of the picture. The attributes xReference,
yReference, xScaleFactor, yScaleFactor, rotationAngle, resizeMode, and the oneToOne
attribute, and the current pan and zoom settings determines the scaling and rotation of the
picture coordinate system.
Window
The origo of the window coordinate system is at the upper left corner of the window, inside
the window frame. The scaling of the windows’ coordinate systems are given by the display.
Display
The origo of the display is at the displays upper left corner. In a multi-monitor setup, this
does not have to correspond to the origo of the device pixels. This does not need to be the
upper left corner of a monitor either when the virtualX, virtualY, virtualWidth, virtualHeight attributes of a display object are used. The display object coordinate system can be
scaled, if the resizeMode attribute is set. This scaling is determined by either the virtualWidth and virtualHeight attributes, or the width and height attributes if virtualWidth or virtualHeight is not set (=0), compared to the actual display.
0 (Device pixels)
This is the coordinate system of the display device. For multi-monitor setups on e.g. MS
Windows, this may extend in both positive and negative directions from origo.
498
ProcSee Reference Manual
Standard pTALK Functions
xyConv (3pTALK)
SEE ALSO
Shape::shapeCursorX and Shape::shapeCursorY (page 432).
Shape (page 430), Picture (page 395), Window (page 488), Display (page 313).
ProcSee Reference Manual
499
Standard pTALK Functions
500
xyConv (3pTALK)
ProcSee Reference Manual
Standard pTALK Functions
List of Functions
List of Functions
::abs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
::acos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
::addLinePoint . . . . . . . . . . . . . . . . . . . . . 306
::addPolygonPoint . . . . . . . . . . . . . . . . . . 306
::afterPictureUpdate . . . . . . . . . . . . . . . . . 333
::altIsDow . . . . . . . . . . . . . . . . . . . . . . . . . 333
::arrayIndex. . . . . . . . . . . . . . . . . . . . . . . . 289
::arrayLength . . . . . . . . . . . . . . . . . . . . . . 289
::arrayMaxIndex . . . . . . . . . . . . . . . . . . . . 390
::arrayMinIndex . . . . . . . . . . . . . . . . . . . . 390
::asin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
::atan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
::atan2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
::atof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
::atoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
::beforePictureUpdate. . . . . . . . . . . . . . . . 333
::buttonDoubleClicked . . . . . . . . . . . . . . . 333
::buttonIsDown . . . . . . . . . . . . . . . . . . . . . 333
::buttonPressed . . . . . . . . . . . . . . . . . . . . . 333
::buttonReleased . . . . . . . . . . . . . . . . . . . . 333
::buttonRepeated. . . . . . . . . . . . . . . . . . . . 333
::buttonRepeatInterval . . . . . . . . . . . . . . . 489
::buttonTripleClicked . . . . . . . . . . . . . . . . 333
::ceil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
::cftime . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
::comAdvise . . . . . . . . . . . . . . . . . . . . . . . 295
::comDateFromTime . . . . . . . . . . . . . . . . 295
::comDateToTime. . . . . . . . . . . . . . . . . . . 295
::comUnadvise . . . . . . . . . . . . . . . . . . . . . 295
::constructor . . . . . . . . . . . . . . . . . . . . . . . 303
::containsName . . . . . . . . . . . . . . . . . . . . . 302
::controlIsDown . . . . . . . . . . . . . . . . . . . . 333
::cos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
::createIterator. . . . . . . . . . . . . . . . . . . . . . 373
::cursorMoved. . . . . . . . . . . . . . . . . . . . . . 333
::cursorX . . . . . . . . . . . . . . . . . . . . . . . . . . 333
::cursorY . . . . . . . . . . . . . . . . . . . . . . . . . . 333
::deleteIterator. . . . . . . . . . . . . . . . . . . . . . 373
::destructor . . . . . . . . . . . . . . . . . . . . . . . . 303
::dialogueToBack . . . . . . . . . . . . . . . . . . . 312
::dialogueToFront . . . . . . . . . . . . . . . . . . . 312
::displayPicture . . . . . . . . . . . . . . . . . . . . . 382
::dndBegin . . . . . . . . . . . . . . . . . . . . . . . . 333
::dndDrop . . . . . . . . . . . . . . . . . . . . . . . . . 333
::dndEnter . . . . . . . . . . . . . . . . . . . . . . . . . 333
::dndLeave . . . . . . . . . . . . . . . . . . . . . . . .
::dndMotion . . . . . . . . . . . . . . . . . . . . . . .
::dndSimpleDrag . . . . . . . . . . . . . . . . . . .
::dndSimpleDrop . . . . . . . . . . . . . . . . . . .
::dndSource . . . . . . . . . . . . . . . . . . . . . . .
::dndTarget. . . . . . . . . . . . . . . . . . . . . . . .
::document . . . . . . . . . . . . . . . . . . . . . . . .
::dumpSymbolTable . . . . . . . . . . . . . . . .
::editWindow . . . . . . . . . . . . . . . . . . . . . .
::eval
.................................
::eventPicture . . . . . . . . . . . . . . . . . . . . . .
::execute . . . . . . . . . . . . . . . . . . . . . . . . . .
::executeAsync. . . . . . . . . . . . . . . . . . . . .
::exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
::exportDxf. . . . . . . . . . . . . . . . . . . . . . . .
::exportDxf. . . . . . . . . . . . . . . . . . . . . . . .
::exportPostScript . . . . . . . . . . . . . . . . . .
::exportPostScriptEx . . . . . . . . . . . . . . . .
::fabs . . . . . . . . . . . . . . . . . . . . . . . . . . . .
::fileNameHost. . . . . . . . . . . . . . . . . . . . .
::fileNameNormal . . . . . . . . . . . . . . . . . .
::floor . . . . . . . . . . . . . . . . . . . . . . . . . . . .
::focusLost . . . . . . . . . . . . . . . . . . . . . . . .
::fullNameOf . . . . . . . . . . . . . . . . . . . . . .
::getApplicationName . . . . . . . . . . . . . . .
::getComment . . . . . . . . . . . . . . . . . . . . .
::getDependencies . . . . . . . . . . . . . . . . . .
::getDialogueAction. . . . . . . . . . . . . . . . .
::getDialogueTrigger . . . . . . . . . . . . . . . .
::getenv . . . . . . . . . . . . . . . . . . . . . . . . . .
::getErrorString . . . . . . . . . . . . . . . . . . . .
::getFileName . . . . . . . . . . . . . . . . . . . . .
::getList . . . . . . . . . . . . . . . . . . . . . . . . . .
::getPath . . . . . . . . . . . . . . . . . . . . . . . . . .
::getpid . . . . . . . . . . . . . . . . . . . . . . . . . . .
::gotKeyFocus . . . . . . . . . . . . . . . . . . . . .
::gradient . . . . . . . . . . . . . . . . . . . . . . . . .
::hasValueChanged . . . . . . . . . . . . . . . . .
::ignoreWatchdog . . . . . . . . . . . . . . . . . .
::keyPressed . . . . . . . . . . . . . . . . . . . . . . .
::keyReleased . . . . . . . . . . . . . . . . . . . . . .
::lastSelectionPicture . . . . . . . . . . . . . . . .
::limitsChanged . . . . . . . . . . . . . . . . . . . .
::load . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ProcSee Reference Manual
333
333
325
325
319
322
425
311
330
342
333
342
342
384
344
345
348
348
384
351
351
384
333
353
425
301
355
312
312
332
357
425
358
425
360
333
361
487
423
333
333
333
333
382
501
Standard pTALK Functions
List of Functions
::loadDatabase. . . . . . . . . . . . . . . . . . . . . .411
::localtime . . . . . . . . . . . . . . . . . . . . . . . . .443
::log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .384
::log10 . . . . . . . . . . . . . . . . . . . . . . . . . . . .384
::lostKeyFocus . . . . . . . . . . . . . . . . . . . . .333
::max . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390
::maxRunTimeMessages. . . . . . . . . . . . . .423
::message. . . . . . . . . . . . . . . . . . . . . . . . . .392
::metaIsDown . . . . . . . . . . . . . . . . . . . . . .333
::min . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390
::mktime . . . . . . . . . . . . . . . . . . . . . . . . . .443
::nameOf . . . . . . . . . . . . . . . . . . . . . . . . . .353
::nameOfFullName . . . . . . . . . . . . . . . . . .353
::newArray . . . . . . . . . . . . . . . . . . . . . . . .289
::newAttribute . . . . . . . . . . . . . . . . . . . . . .306
::newCharArray . . . . . . . . . . . . . . . . . . . .289
::newCircle . . . . . . . . . . . . . . . . . . . . . . . .306
::newCircleArc . . . . . . . . . . . . . . . . . . . . .306
::newClass. . . . . . . . . . . . . . . . . . . . . . . . .306
::newColour . . . . . . . . . . . . . . . . . . . . . . .307
::newComEventObject . . . . . . . . . . . . . . .295
::newComInterfaceObject. . . . . . . . . . . . .295
::newComObject . . . . . . . . . . . . . . . . . . . .295
::newComShape . . . . . . . . . . . . . . . . . . . .295
::newDialogue. . . . . . . . . . . . . . . . . . . . . .306
::newDialogueArea . . . . . . . . . . . . . . . . . .306
::newDoubleArray . . . . . . . . . . . . . . . . . .289
::newEllipse . . . . . . . . . . . . . . . . . . . . . . .306
::newEllipseArc . . . . . . . . . . . . . . . . . . . .306
::newEnum . . . . . . . . . . . . . . . . . . . . . . . .307
::newEnumElement. . . . . . . . . . . . . . . . . .307
::newFloatArray . . . . . . . . . . . . . . . . . . . .289
::newFunction . . . . . . . . . . . . . . . . . . . . . .306
::newGroup . . . . . . . . . . . . . . . . . . . . . . . .306
::newHashTable . . . . . . . . . . . . . . . . . . . .365
::newImage . . . . . . . . . . . . . . . . . . . . . . . .306
::newInstance . . . . . . . . . . . . . . . . . . . . . .306
::newIntArray . . . . . . . . . . . . . . . . . . . . . .289
::newInterpolator. . . . . . . . . . . . . . . . . . . .369
::newLayer . . . . . . . . . . . . . . . . . . . . . . . .374
::newLibrary . . . . . . . . . . . . . . . . . . . . . . .306
::newLine . . . . . . . . . . . . . . . . . . . . . . . . .306
::newList . . . . . . . . . . . . . . . . . . . . . . . . . .380
::newMatrix. . . . . . . . . . . . . . . . . . . . . . . .385
::newPicture . . . . . . . . . . . . . . . . . . . . . . .307
::newPoint . . . . . . . . . . . . . . . . . . . . . . . . .404
::newPolygon . . . . . . . . . . . . . . . . . . . . . .306
::newProcess . . . . . . . . . . . . . . . . . . . . . . .307
502
::newRect . . . . . . . . . . . . . . . . . . . . . . . . . 415
::newRectangle. . . . . . . . . . . . . . . . . . . . . 306
::newRoundRect. . . . . . . . . . . . . . . . . . . . 306
::newScale . . . . . . . . . . . . . . . . . . . . . . . . 306
::newShortIntArray . . . . . . . . . . . . . . . . . 289
::newSize . . . . . . . . . . . . . . . . . . . . . . . . . 435
::newText . . . . . . . . . . . . . . . . . . . . . . . . . 306
::newTrend . . . . . . . . . . . . . . . . . . . . . . . . 306
::nextFullName. . . . . . . . . . . . . . . . . . . . . 373
::ownerOfFullName . . . . . . . . . . . . . . . . . 353
::pictureDisplayed . . . . . . . . . . . . . . . . . . 333
::pictureUndisplayed . . . . . . . . . . . . . . . . 333
::pow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
::printf. . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
::processIsConnected . . . . . . . . . . . . . . . . 411
::putenv. . . . . . . . . . . . . . . . . . . . . . . . . . . 332
::quoteId . . . . . . . . . . . . . . . . . . . . . . . . . . 353
::random . . . . . . . . . . . . . . . . . . . . . . . . . . 413
::readdir . . . . . . . . . . . . . . . . . . . . . . . . . . 414
::remove . . . . . . . . . . . . . . . . . . . . . . . . . . 416
::rename . . . . . . . . . . . . . . . . . . . . . . . . . . 417
::round . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
::roundToInt . . . . . . . . . . . . . . . . . . . . . . . 384
::rtmName . . . . . . . . . . . . . . . . . . . . . . . . 422
::rtmVersion . . . . . . . . . . . . . . . . . . . . . . . 422
::save . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
::searchComments . . . . . . . . . . . . . . . . . . 301
::setComment . . . . . . . . . . . . . . . . . . . . . . 301
::setDialogueAction . . . . . . . . . . . . . . . . . 312
::setDialogueTrigger . . . . . . . . . . . . . . . . 312
::setFileName . . . . . . . . . . . . . . . . . . . . . . 425
::setGreyMatrix . . . . . . . . . . . . . . . . . . . . 294
::setPath . . . . . . . . . . . . . . . . . . . . . . . . . . 425
::setRGBMatrix . . . . . . . . . . . . . . . . . . . . 294
::shapeCursorX. . . . . . . . . . . . . . . . . . . . . 333
::shapeCursorY. . . . . . . . . . . . . . . . . . . . . 333
::shapeEntered . . . . . . . . . . . . . . . . . . . . . 333
::shapeLeft . . . . . . . . . . . . . . . . . . . . . . . . 333
::shiftIsDown . . . . . . . . . . . . . . . . . . . . . . 333
::shutdown . . . . . . . . . . . . . . . . . . . . . . . . 434
::sin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
::sprintf . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
::sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
::strcat. . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strcftime . . . . . . . . . . . . . . . . . . . . . . . . . 443
::strchr . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strcmp. . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strcpy . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
ProcSee Reference Manual
Standard pTALK Functions
List of Functions
::strdup . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strEval
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
::strfield. . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strformat . . . . . . . . . . . . . . . . . . . . . . . . . 407
::strformat . . . . . . . . . . . . . . . . . . . . . . . . . 437
::stricmp . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strlower. . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strnatcmp . . . . . . . . . . . . . . . . . . . . . . . . 437
::strnaticmp . . . . . . . . . . . . . . . . . . . . . . . . 437
::strncmp . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strncpy . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strnicmp . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strquote . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strrchr . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strsplit . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strstr . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strtrim . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
::strunquote . . . . . . . . . . . . . . . . . . . . . . . . 437
::strupper. . . . . . . . . . . . . . . . . . . . . . . . . . 437
::system. . . . . . . . . . . . . . . . . . . . . . . . . . . 439
::tan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
::time. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
::tolower . . . . . . . . . . . . . . . . . . . . . . . . . . 451
::toString . . . . . . . . . . . . . . . . . . . . . . . . . . 452
::toupper . . . . . . . . . . . . . . . . . . . . . . . . . . 451
::tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
::trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
::trendUpdated . . . . . . . . . . . . . . . . . . . . . 333
::trTime . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
::typeNameOf . . . . . . . . . . . . . . . . . . . . . . 353
::ungrabPointer . . . . . . . . . . . . . . . . . . . . . 334
::unquoteId . . . . . . . . . . . . . . . . . . . . . . . . 353
::update . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
::viewableStateChanged . . . . . . . . . . . . . . 333
::windowClose . . . . . . . . . . . . . . . . . . . . . 333
::windowEntered. . . . . . . . . . . . . . . . . . . . 333
::windowLeft . . . . . . . . . . . . . . . . . . . . . . 333
::windowMapped . . . . . . . . . . . . . . . . . . . 333
::windowMoved . . . . . . . . . . . . . . . . . . . . 333
::windowResized . . . . . . . . . . . . . . . . . . . 333
::windowUnmapped . . . . . . . . . . . . . . . . . 333
::xyConv . . . . . . . . . . . . . . . . . . . . . . . . . . 497
::xyConvX . . . . . . . . . . . . . . . . . . . . . . . . 497
::xyConvY . . . . . . . . . . . . . . . . . . . . . . . . 497
Application::comRGB . . . . . . . . . . . . . . . 292
Application::connectToProcess . . . . . . . . 411
Application::defaultCursor . . . . . . . . . . .
Application::disconnectFromProcess . . .
Application::getColour . . . . . . . . . . . . . .
Application::getColourFromRGB . . . . . .
Application::getConstructorBehaviour . .
Application::getCursor . . . . . . . . . . . . . .
Application::getFont . . . . . . . . . . . . . . . .
Application::getLinestyle . . . . . . . . . . . .
Application::getPattern . . . . . . . . . . . . . .
Application::loadPrinterFiles. . . . . . . . . .
Application::newComLibrary . . . . . . . . .
Application::newDisplay . . . . . . . . . . . . .
Application::newWindow . . . . . . . . . . . .
Application::processNotify . . . . . . . . . . .
Application::setConstructorBehaviour . .
Application::setCursor . . . . . . . . . . . . . . .
Application::setCursorColours . . . . . . . .
Application::setTextEditorAttributes . . .
Application::updateResources . . . . . . . . .
Application::updateWindows . . . . . . . . .
Application::useResourceStyle . . . . . . . .
Colour::add . . . . . . . . . . . . . . . . . . . . . . .
Colour::blue . . . . . . . . . . . . . . . . . . . . . . .
Colour::comRGB . . . . . . . . . . . . . . . . . . .
Colour::edit . . . . . . . . . . . . . . . . . . . . . . .
Colour::getTransparency . . . . . . . . . . . . .
Colour::green . . . . . . . . . . . . . . . . . . . . . .
Colour::numBlinkColours . . . . . . . . . . . .
Colour::red. . . . . . . . . . . . . . . . . . . . . . . .
Colour::remove . . . . . . . . . . . . . . . . . . . .
Colour::setTransparency . . . . . . . . . . . . .
Colour::time . . . . . . . . . . . . . . . . . . . . . . .
ComInterface::queryInterface . . . . . . . . .
ComInterfaceObject::queryInterface . . . .
ComObject::persist . . . . . . . . . . . . . . . . .
ComObject::queryInterface . . . . . . . . . . .
ComObject::theComClass( . . . . . . . . . . .
ComShape::backgroundColour . . . . . . . .
ComShape::foregroundColour. . . . . . . . .
ComShape::height . . . . . . . . . . . . . . . . . .
ComShape::hideProperties . . . . . . . . . . .
ComShape::persist . . . . . . . . . . . . . . . . . .
ComShape::queryInterface . . . . . . . . . . .
ComShape::resizeable . . . . . . . . . . . . . . .
ComShape::showProperties . . . . . . . . . . .
ComShape::showProperties . . . . . . . . . . .
ComShape::theComClass . . . . . . . . . . . .
ComShape::theFont . . . . . . . . . . . . . . . . .
ProcSee Reference Manual
310
411
292
292
303
310
352
379
394
405
295
313
307
411
303
310
310
440
485
486
419
292
292
292
292
292
292
292
292
292
292
292
295
295
299
299
299
297
297
297
297
297
297
297
297
297
297
297
503
Standard pTALK Functions
List of Functions
ComShape::width . . . . . . . . . . . . . . . . . . .297
ComShape::x. . . . . . . . . . . . . . . . . . . . . . .297
ComShape::y. . . . . . . . . . . . . . . . . . . . . . .297
Display . . . . . . . . . . . . . . . . . . . . . . . . . . .313
Display::connection . . . . . . . . . . . . . . . . .313
Display::getDisplayInfo . . . . . . . . . . . . . .313
Display::height . . . . . . . . . . . . . . . . . . . . .313
Display::resizeMode . . . . . . . . . . . . . . . . .313
Display::virtualHeight . . . . . . . . . . . . . . .313
Display::virtualWidth . . . . . . . . . . . . . . . .313
Display::virtualX . . . . . . . . . . . . . . . . . . .313
Display::virtualY . . . . . . . . . . . . . . . . . . .313
Display::width. . . . . . . . . . . . . . . . . . . . . .313
DisplayInfo::connection . . . . . . . . . . . . . .316
DisplayInfo::displayArea . . . . . . . . . . . . .316
DisplayInfo::getCapability . . . . . . . . . . . .316
DisplayInfo::isPrimary . . . . . . . . . . . . . . .316
DisplayInfo::workArea . . . . . . . . . . . . . . .316
DisplayInfoSet::get . . . . . . . . . . . . . . . . . .318
DisplayInfoSet::numDisplays. . . . . . . . . .318
DisplayInfoSet:display . . . . . . . . . . . . . . .318
DnDSource::drag . . . . . . . . . . . . . . . . . . .319
DnDSource::setBitmap . . . . . . . . . . . . . . .319
DnDSource::setCursor . . . . . . . . . . . . . . .319
DnDSource::setData . . . . . . . . . . . . . . . . .319
DnDTarget::getData . . . . . . . . . . . . . . . . .322
DnDTarget::getDropEffect . . . . . . . . . . . .322
DnDTarget::isAltDown . . . . . . . . . . . . . .322
DnDTarget::isControlDown . . . . . . . . . . .322
DnDTarget::isCopy. . . . . . . . . . . . . . . . . .322
DnDTarget::isLeftMouseButtonDown . . .322
DnDTarget::isLink . . . . . . . . . . . . . . . . . .322
DnDTarget::isMiddleMouseButtonDown 322
DnDTarget::isMove . . . . . . . . . . . . . . . . .322
DnDTarget::isRightMouseButtonDown . .322
DnDTarget::isShiftDown . . . . . . . . . . . . .322
DnDTarget::setDropEffect . . . . . . . . . . . .322
Font::ascent. . . . . . . . . . . . . . . . . . . . . . . .352
Font::capHeight . . . . . . . . . . . . . . . . . . . .352
Font::descent. . . . . . . . . . . . . . . . . . . . . . .352
Font::height. . . . . . . . . . . . . . . . . . . . . . . .352
Font::lbearing . . . . . . . . . . . . . . . . . . . . . .352
Font::rbearing . . . . . . . . . . . . . . . . . . . . . .352
Font::textWidth. . . . . . . . . . . . . . . . . . . . .352
Font::width . . . . . . . . . . . . . . . . . . . . . . . .352
Font::xHeight . . . . . . . . . . . . . . . . . . . . . .352
HashTable::clear . . . . . . . . . . . . . . . . . . . .365
HashTable::contains . . . . . . . . . . . . . . . . .365
504
HashTable::get . . . . . . . . . . . . . . . . . . . . . 365
HashTable::getKeys . . . . . . . . . . . . . . . . . 365
HashTable::length . . . . . . . . . . . . . . . . . . 365
HashTable::put . . . . . . . . . . . . . . . . . . . . . 365
HashTable::putAll . . . . . . . . . . . . . . . . . . 365
HashTable::remove . . . . . . . . . . . . . . . . . 365
HashTable::toString . . . . . . . . . . . . . . . . . 365
Image::filename . . . . . . . . . . . . . . . . . . . . 367
Image::reload . . . . . . . . . . . . . . . . . . . . . . 367
Image::x . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Image::y . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Instance::changeClass . . . . . . . . . . . . . . . 368
Instance::classFullName . . . . . . . . . . . . . 368
Interpolator::add. . . . . . . . . . . . . . . . . . . . 369
Interpolator::getInterpolator. . . . . . . . . . . 369
Interpolator::getInValue. . . . . . . . . . . . . . 369
Interpolator::getOutValue . . . . . . . . . . . . 369
Interpolator::insert . . . . . . . . . . . . . . . . . . 369
Interpolator::maxValueOut . . . . . . . . . . . 369
Interpolator::minValueOut. . . . . . . . . . . . 369
Interpolator::modifyInterpolator . . . . . . . 369
Interpolator::modifyInValue . . . . . . . . . . 369
Interpolator::modifyOutValue . . . . . . . . . 369
Interpolator::numPoints . . . . . . . . . . . . . . 369
Interpolator::remove. . . . . . . . . . . . . . . . . 369
Interpolator::set . . . . . . . . . . . . . . . . . . . . 369
Interpolator::value . . . . . . . . . . . . . . . . . . 369
Layer::addAlias . . . . . . . . . . . . . . . . . . . . 374
Layer::delAlias. . . . . . . . . . . . . . . . . . . . . 374
Layer::getAliases . . . . . . . . . . . . . . . . . . . 374
Layer::getOriginalName . . . . . . . . . . . . . 374
Layer::getVisibility . . . . . . . . . . . . . . . . . 374
Layer::isDefault . . . . . . . . . . . . . . . . . . . . 374
Layer::moveBehind . . . . . . . . . . . . . . . . . 374
Layer::setAsDefault . . . . . . . . . . . . . . . . . 374
Layer::setOriginalName. . . . . . . . . . . . . . 374
Layer::setVisibility. . . . . . . . . . . . . . . . . . 374
Layer::toBack. . . . . . . . . . . . . . . . . . . . . . 374
Layer::toFront . . . . . . . . . . . . . . . . . . . . . 374
Library::newComLibrary . . . . . . . . . . . . . 295
Line::addPoint . . . . . . . . . . . . . . . . . . . . . 376
Line::get . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Line::getCapStyle. . . . . . . . . . . . . . . . . . . 376
Line::getDynamicX . . . . . . . . . . . . . . . . . 376
Line::getDynamicY . . . . . . . . . . . . . . . . . 376
Line::getInterpolatorX . . . . . . . . . . . . . . . 376
Line::getInterpolatorY . . . . . . . . . . . . . . . 376
Line::getJoinStyle . . . . . . . . . . . . . . . . . . 376
ProcSee Reference Manual
Standard pTALK Functions
List of Functions
Line::getX. . . . . . . . . . . . . . . . . . . . . . . . . 376
Line::getY. . . . . . . . . . . . . . . . . . . . . . . . . 376
Line::numberOfPoints . . . . . . . . . . . . . . . 376
Line::removePoint . . . . . . . . . . . . . . . . . . 376
Line::set . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Line::setCapStyle . . . . . . . . . . . . . . . . . . . 376
Line::setDynamicX. . . . . . . . . . . . . . . . . . 376
Line::setDynamicY. . . . . . . . . . . . . . . . . . 376
Line::setInterpolatorX . . . . . . . . . . . . . . . 376
Line::setInterpolatorY . . . . . . . . . . . . . . . 376
Line::setJoinStyle . . . . . . . . . . . . . . . . . . . 376
Line::setX . . . . . . . . . . . . . . . . . . . . . . . . . 376
Line::setY . . . . . . . . . . . . . . . . . . . . . . . . . 376
List::add . . . . . . . . . . . . . . . . . . . . . . . . . . 380
List::clear . . . . . . . . . . . . . . . . . . . . . . . . . 380
List::concat . . . . . . . . . . . . . . . . . . . . . . . . 380
List::copy . . . . . . . . . . . . . . . . . . . . . . . . . 380
List::get. . . . . . . . . . . . . . . . . . . . . . . . . . . 380
List::insert. . . . . . . . . . . . . . . . . . . . . . . . . 380
List::length . . . . . . . . . . . . . . . . . . . . . . . . 380
List::remove . . . . . . . . . . . . . . . . . . . . . . . 380
List::sort . . . . . . . . . . . . . . . . . . . . . . . . . . 380
List::toString. . . . . . . . . . . . . . . . . . . . . . . 380
Matrix::add . . . . . . . . . . . . . . . . . . . . . . . . 385
Matrix::adjoint . . . . . . . . . . . . . . . . . . . . . 385
Matrix::clear . . . . . . . . . . . . . . . . . . . . . . . 385
Matrix::cofactors . . . . . . . . . . . . . . . . . . . 385
Matrix::columns . . . . . . . . . . . . . . . . . . . . 385
Matrix::determinant . . . . . . . . . . . . . . . . . 385
Matrix::get . . . . . . . . . . . . . . . . . . . . . . . . 385
Matrix::identity. . . . . . . . . . . . . . . . . . . . . 385
Matrix::inverse . . . . . . . . . . . . . . . . . . . . . 385
Matrix::isDiagonal . . . . . . . . . . . . . . . . . . 385
Matrix::isEqual . . . . . . . . . . . . . . . . . . . . . 385
Matrix::isIdentity . . . . . . . . . . . . . . . . . . . 385
Matrix::isLowerTriangular . . . . . . . . . . . . 385
Matrix::isNull . . . . . . . . . . . . . . . . . . . . . . 385
Matrix::isOrthogonal . . . . . . . . . . . . . . . . 385
Matrix::isSquare . . . . . . . . . . . . . . . . . . . . 385
Matrix::isSymmetric. . . . . . . . . . . . . . . . . 385
Matrix::isTriangular . . . . . . . . . . . . . . . . . 385
Matrix::isUpperTriangular . . . . . . . . . . . . 385
Matrix::multiply . . . . . . . . . . . . . . . . . . . . 385
Matrix::rows . . . . . . . . . . . . . . . . . . . . . . . 385
Matrix::set. . . . . . . . . . . . . . . . . . . . . . . . . 385
Matrix::subtract . . . . . . . . . . . . . . . . . . . . 385
Matrix::trace . . . . . . . . . . . . . . . . . . . . . . . 385
Matrix::transpose . . . . . . . . . . . . . . . . . . . 385
mouseWheel . . . . . . . . . . . . . . . . . . . . . .
msecsToday . . . . . . . . . . . . . . . . . . . . . . .
newVariable . . . . . . . . . . . . . . . . . . . . . . .
Object::fullName . . . . . . . . . . . . . . . . . . .
Object::isMetaClass . . . . . . . . . . . . . . . . .
Object::metaClass . . . . . . . . . . . . . . . . . .
Object::name . . . . . . . . . . . . . . . . . . . . . .
Object::owner . . . . . . . . . . . . . . . . . . . . .
onUpdate . . . . . . . . . . . . . . . . . . . . . . . . .
onVariableUpdate . . . . . . . . . . . . . . . . . .
Picture::adjustColours . . . . . . . . . . . . . . .
Picture::align . . . . . . . . . . . . . . . . . . . . . .
Picture::align . . . . . . . . . . . . . . . . . . . . . .
Picture::clear . . . . . . . . . . . . . . . . . . . . . .
Picture::clear . . . . . . . . . . . . . . . . . . . . . .
Picture::clearKeyFocus . . . . . . . . . . . . . .
Picture::copy . . . . . . . . . . . . . . . . . . . . . .
Picture::copy . . . . . . . . . . . . . . . . . . . . . .
Picture::cut . . . . . . . . . . . . . . . . . . . . . . . .
Picture::cut . . . . . . . . . . . . . . . . . . . . . . . .
Picture::distribute. . . . . . . . . . . . . . . . . . .
Picture::distribute. . . . . . . . . . . . . . . . . . .
Picture::dndActivate . . . . . . . . . . . . . . . .
Picture::dndDeactivate. . . . . . . . . . . . . . .
Picture::exportEMF . . . . . . . . . . . . . . . . .
Picture::freeze . . . . . . . . . . . . . . . . . . . . .
Picture::fullName. . . . . . . . . . . . . . . . . . .
Picture::getDynPrimitiveAttr. . . . . . . . . .
Picture::getDynPrimitiveAttr. . . . . . . . . .
Picture::getKeyFocusShape . . . . . . . . . . .
Picture::getPictureFlags . . . . . . . . . . . . . .
Picture::getPrimitiveAttr . . . . . . . . . . . . .
Picture::getPrimitiveAttr . . . . . . . . . . . . .
Picture::getShapesWithinCircle. . . . . . . .
Picture::group . . . . . . . . . . . . . . . . . . . . .
Picture::group . . . . . . . . . . . . . . . . . . . . .
Picture::isDisplayed . . . . . . . . . . . . . . . . .
Picture::isIconic . . . . . . . . . . . . . . . . . . . .
Picture::isInEditMode . . . . . . . . . . . . . . .
Picture::isMapped . . . . . . . . . . . . . . . . . .
picture::isViewable . . . . . . . . . . . . . . . . .
Picture::lower. . . . . . . . . . . . . . . . . . . . . .
Picture::map . . . . . . . . . . . . . . . . . . . . . . .
Picture::moveCursor . . . . . . . . . . . . . . . .
Picture::moveSelected . . . . . . . . . . . . . . .
Picture::name . . . . . . . . . . . . . . . . . . . . . .
Picture::numberOfSelected . . . . . . . . . . .
Picture::numberOfSelected . . . . . . . . . . .
ProcSee Reference Manual
333
443
306
393
393
393
393
393
482
482
395
327
395
327
395
395
327
395
327
395
327
395
325
325
395
395
395
327
395
395
395
327
395
395
327
395
396
396
396
396
396
396
396
396
396
396
327
396
505
Standard pTALK Functions
List of Functions
Picture::pan . . . . . . . . . . . . . . . . . . . . . . . .396
Picture::paste. . . . . . . . . . . . . . . . . . . . . . .327
Picture::paste. . . . . . . . . . . . . . . . . . . . . . .396
Picture::postKeyEvent . . . . . . . . . . . . . . .334
Picture::postMouseButtonEvent . . . . . . . .334
Picture::raise . . . . . . . . . . . . . . . . . . . . . . .396
Picture::selectAllIn . . . . . . . . . . . . . . . . . .396
Picture::selectShape . . . . . . . . . . . . . . . . .396
Picture::setCursor . . . . . . . . . . . . . . . . . . .310
Picture::setCursor . . . . . . . . . . . . . . . . . . .396
Picture::setDynPrimitiveAttr . . . . . . . . . .327
Picture::setDynPrimitiveAttr . . . . . . . . . .396
Picture::setFocus. . . . . . . . . . . . . . . . . . . .396
Picture::setPictureFlags . . . . . . . . . . . . . .396
Picture::setPrimitiveAttr . . . . . . . . . . . . . .327
Picture::setPrimitiveAttr . . . . . . . . . . . . . .396
Picture::shapeAt . . . . . . . . . . . . . . . . . . . .396
Picture::shapeFullNameAt . . . . . . . . . . . .396
Picture::sound . . . . . . . . . . . . . . . . . . . . . .396
Picture::theWindow . . . . . . . . . . . . . . . . .396
PIcture::title . . . . . . . . . . . . . . . . . . . . . . .396
Picture::toBack . . . . . . . . . . . . . . . . . . . . .327
Picture::toBack . . . . . . . . . . . . . . . . . . . . .396
Picture::toFront . . . . . . . . . . . . . . . . . . . . .327
Picture::toFront . . . . . . . . . . . . . . . . . . . . .396
Picture::ungroup . . . . . . . . . . . . . . . . . . . .327
Picture::ungroup . . . . . . . . . . . . . . . . . . . .396
Picture::unmap . . . . . . . . . . . . . . . . . . . . .396
Picture::unmapChildren . . . . . . . . . . . . . .396
Picture::updatePicture. . . . . . . . . . . . . . . .396
Picture::useResourceStyle . . . . . . . . . . . .419
Picture::winxy2xy. . . . . . . . . . . . . . . . . . .396
Picture::xSnapped . . . . . . . . . . . . . . . . . . .396
Picture::xy2dxy. . . . . . . . . . . . . . . . . . . . .396
Picture::xy2sx . . . . . . . . . . . . . . . . . . . . . .396
Picture::xy2sy . . . . . . . . . . . . . . . . . . . . . .396
Picture::xy2winxy. . . . . . . . . . . . . . . . . . .396
Picture::xy2wx . . . . . . . . . . . . . . . . . . . . .396
Picture::xy2wy . . . . . . . . . . . . . . . . . . . . .396
Picture::ySnapped . . . . . . . . . . . . . . . . . . .396
Picture::zoom . . . . . . . . . . . . . . . . . . . . . .396
Picture::zoomFactor . . . . . . . . . . . . . . . . .396
Point::set . . . . . . . . . . . . . . . . . . . . . . . . . .404
Point::x . . . . . . . . . . . . . . . . . . . . . . . . . . .404
Point::y . . . . . . . . . . . . . . . . . . . . . . . . . . .404
Rect::height. . . . . . . . . . . . . . . . . . . . . . . .415
Rect::set . . . . . . . . . . . . . . . . . . . . . . . . . .415
Rect::width . . . . . . . . . . . . . . . . . . . . . . . .415
506
Rect::x . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Rect::y . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
setTimeZone. . . . . . . . . . . . . . . . . . . . . . . 443
Shape::bHeight. . . . . . . . . . . . . . . . . . . . . 430
Shape::bWidth . . . . . . . . . . . . . . . . . . . . . 430
Shape::bX. . . . . . . . . . . . . . . . . . . . . . . . . 430
Shape::bY. . . . . . . . . . . . . . . . . . . . . . . . . 430
Shape::containsPoint . . . . . . . . . . . . . . . . 430
Shape::dndActivate . . . . . . . . . . . . . . . . . 325
Shape::dndDeactivate. . . . . . . . . . . . . . . . 325
Shape::fullName. . . . . . . . . . . . . . . . . . . . 430
Shape::getLayer . . . . . . . . . . . . . . . . . . . . 374
Shape::getShapeFlags . . . . . . . . . . . . . . . 430
Shape::getViewableState . . . . . . . . . . . . . 430
Shape::grabPointer . . . . . . . . . . . . . . . . . . 430
Shape::name . . . . . . . . . . . . . . . . . . . . . . . 430
Shape::select. . . . . . . . . . . . . . . . . . . . . . . 430
Shape::setKeyFocus . . . . . . . . . . . . . . . . . 430
Shape::setLayer . . . . . . . . . . . . . . . . . . . . 374
Shape::setShapeFlags. . . . . . . . . . . . . . . . 430
Shape::shapeCursorX() . . . . . . . . . . . . . . 430
Shape::shapeCursorY. . . . . . . . . . . . . . . . 430
Shape::shapeToBack . . . . . . . . . . . . . . . . 430
Shape::shapeToFront . . . . . . . . . . . . . . . . 430
Shape::shxy2xy . . . . . . . . . . . . . . . . . . . . 430
Shape::thePicture . . . . . . . . . . . . . . . . . . . 430
Shape::unselect. . . . . . . . . . . . . . . . . . . . . 430
Shape::updateShape . . . . . . . . . . . . . . . . . 430
Shape::xy2shxy . . . . . . . . . . . . . . . . . . . . 430
Shape::xy2sx . . . . . . . . . . . . . . . . . . . . . . 430
Shape::xy2sy . . . . . . . . . . . . . . . . . . . . . . 430
Shape::xy2wx. . . . . . . . . . . . . . . . . . . . . . 430
Shape::xy2wy. . . . . . . . . . . . . . . . . . . . . . 430
Shape:attribute:visibility . . . . . . . . . . . . . 430
Size::height. . . . . . . . . . . . . . . . . . . . . . . . 435
Size::set . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Size::width . . . . . . . . . . . . . . . . . . . . . . . . 435
Text::alignment . . . . . . . . . . . . . . . . . . . . 440
Text::buffer . . . . . . . . . . . . . . . . . . . . . . . 440
Text::buffer . . . . . . . . . . . . . . . . . . . . . . . 447
Text::clearSelection . . . . . . . . . . . . . . . . . 440
Text::clearSelection . . . . . . . . . . . . . . . . . 447
Text::deleteBackward . . . . . . . . . . . . . . . 440
Text::deleteForward . . . . . . . . . . . . . . . . . 440
Text::edit . . . . . . . . . . . . . . . . . . . . . . . . . 440
Text::edit . . . . . . . . . . . . . . . . . . . . . . . . . 447
Text::format . . . . . . . . . . . . . . . . . . . . . . . 440
Text::isInEditMode . . . . . . . . . . . . . . . . . 440
ProcSee Reference Manual
Standard pTALK Functions
List of Functions
Text::isInEditMode. . . . . . . . . . . . . . . . . . 447
Text::moveLeft . . . . . . . . . . . . . . . . . . . . . 440
Text::moveRight. . . . . . . . . . . . . . . . . . . . 440
Text::moveToEnd. . . . . . . . . . . . . . . . . . . 440
Text::moveToHome . . . . . . . . . . . . . . . . . 440
Text::position . . . . . . . . . . . . . . . . . . . . . . 440
Text::put . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Text::selectAll . . . . . . . . . . . . . . . . . . . . . 440
Text::selectWord . . . . . . . . . . . . . . . . . . . 440
Text::textWidth. . . . . . . . . . . . . . . . . . . . . 440
Text::theText . . . . . . . . . . . . . . . . . . . . . . 440
TimerInterval::count. . . . . . . . . . . . . . . . . 449
TimerInterval::isRunning . . . . . . . . . . . . . 449
TimerInterval::setInterval. . . . . . . . . . . . . 449
TimerInterval::start. . . . . . . . . . . . . . . . . . 449
TimerInterval::start. . . . . . . . . . . . . . . . . . 449
TimerInterval::start. . . . . . . . . . . . . . . . . . 449
TimerInterval::start. . . . . . . . . . . . . . . . . . 449
TimerInterval::stop . . . . . . . . . . . . . . . . . . 449
TimeTag::getStartTime . . . . . . . . . . . . . . 461
TimeTag::setStartTime. . . . . . . . . . . . . . . 461
Trend::newEventPlot . . . . . . . . . . . . . . . . 455
Trend::newTimeLabel . . . . . . . . . . . . . . . 455
Trend::newTrendGrid. . . . . . . . . . . . . . . . 455
Trend::newTrendPres . . . . . . . . . . . . . . . . 455
Trend::newTrendRuler . . . . . . . . . . . . . . . 455
Trend::numEventPlot . . . . . . . . . . . . . . . . 455
Trend::numTimeLabel . . . . . . . . . . . . . . . 455
Trend::numTrendGrid . . . . . . . . . . . . . . . 455
Trend::numTrendPres. . . . . . . . . . . . . . . . 455
Trend::numTrendRuler. . . . . . . . . . . . . . . 455
Trend::panAbs . . . . . . . . . . . . . . . . . . . . . 455
Trend::panFreeze . . . . . . . . . . . . . . . . . . . 455
Trend::panRel . . . . . . . . . . . . . . . . . . . . . . 455
Trend::reset. . . . . . . . . . . . . . . . . . . . . . . . 455
Trend::scrollValue . . . . . . . . . . . . . . . . . . 455
Trend::setScrollModifier . . . . . . . . . . . . . 455
Trend::theTime . . . . . . . . . . . . . . . . . . . . . 455
Trend::xW2Time . . . . . . . . . . . . . . . . . . . 455
Trend::xyW2Time . . . . . . . . . . . . . . . . . . 455
TrendGrid::getLine. . . . . . . . . . . . . . . . . . 459
TrendGrid::getNumLines . . . . . . . . . . . . . 459
TrendGrid::toBack . . . . . . . . . . . . . . . . . . 459
TrendGrid::toFront . . . . . . . . . . . . . . . . . . 459
TrendLog::addVariable . . . . . . . . . . . . . . 462
TrendLog::analyse . . . . . . . . . . . . . . . . . . 462
TrendLog::appendLogBuffer . . . . . . . . . . 471
TrendLog::cancel LogBuffer . . . . . . . . . . 471
TrendLog::document . . . . . . . . . . . . . . . . 462
TrendLog::freeze . . . . . . . . . . . . . . . . . . . 462
TrendLog::getLogBuffer . . . . . . . . . . . . . 471
TrendLog::getVariableInfo . . . . . . . . . . . 462
TrendLog::logMode. . . . . . . . . . . . . . . . . 463
TrendLog::maxInterpolTime . . . . . . . . . . 463
TrendLog::newLogBuffer . . . . . . . . . . . . 471
TrendLog::removeVariable . . . . . . . . . . . 463
TrendLog::save . . . . . . . . . . . . . . . . . . . . 463
TrendLog::setLogBuffers . . . . . . . . . . . . 471
TrendLog::setTime . . . . . . . . . . . . . . . . . 463
TrendLog::setTrigger. . . . . . . . . . . . . . . . 471
TrendLog::timeTick. . . . . . . . . . . . . . . . . 463
TrendLogInternal::connectedRTMs . . . . 471
TrendLogInternal::eventTypeHandling . . 471
TrendLogInternal::execute . . . . . . . . . . . 471
TrendLogInternal::isConnected . . . . . . . . 471
TrendLogInternal::snapshotGetComment 471
TrendLogInternal::snapshotGetTime . . . 471
TrendLogInternal::snapshotLoad . . . . . . 471
TrendLogInternal::snapshotSave . . . . . . . 471
TrendPres::getInterpolator . . . . . . . . . . . . 474
TrendPres::getRulerTime . . . . . . . . . . . . 474
TrendPres::getRulerValue . . . . . . . . . . . . 474
TrendPres::getValue . . . . . . . . . . . . . . . . 474
TrendPres::getValuePos . . . . . . . . . . . . . 474
TrendPres::legalRulerValue . . . . . . . . . . 474
TrendPres::setInterpolator . . . . . . . . . . . . 474
TrendPres::setLimitModifier . . . . . . . . . . 474
TrendPres::toBack . . . . . . . . . . . . . . . . . . 474
TrendPres::toFront . . . . . . . . . . . . . . . . . . 474
TrendRuler::moveRuler . . . . . . . . . . . . . . 480
TrendRuler::setRulerPosition . . . . . . . . . 480
Window::adjustVirtualDisplay . . . . . . . . 489
Window::alwaysOnTop . . . . . . . . . . . . . . 488
Window::display . . . . . . . . . . . . . . . . . . . 488
Window::fullName . . . . . . . . . . . . . . . . . 488
Window::getFrameSize . . . . . . . . . . . . . . 489
Window::getScreenSize. . . . . . . . . . . . . . 489
Window::grabPointer. . . . . . . . . . . . . . . . 488
Window::iconify . . . . . . . . . . . . . . . . . . . 488
Window::isIconic. . . . . . . . . . . . . . . . . . . 488
Window::isInEditMode . . . . . . . . . . . . . . 488
Window::isMapped . . . . . . . . . . . . . . . . . 488
Window::isViewable . . . . . . . . . . . . . . . . 488
Window::lower . . . . . . . . . . . . . . . . . . . . 488
Window::map . . . . . . . . . . . . . . . . . . . . . 488
Window::maximize . . . . . . . . . . . . . . . . . 488
ProcSee Reference Manual
507
Standard pTALK Functions
List of Functions
Window::minimize . . . . . . . . . . . . . . . . . .488
Window::modSysKeyBehaviour . . . . . . .489
Window::move . . . . . . . . . . . . . . . . . . . . .488
Window::moveCursor. . . . . . . . . . . . . . . .489
Window::moveFrame . . . . . . . . . . . . . . . .488
Window::name . . . . . . . . . . . . . . . . . . . . .488
Window::pan. . . . . . . . . . . . . . . . . . . . . . .488
Window::paste . . . . . . . . . . . . . . . . . . . . .327
Window::paste . . . . . . . . . . . . . . . . . . . . .488
Window::postKeyEvent . . . . . . . . . . . . . .334
Window::postMouseButtonEvent. . . . . . .334
Window::raise. . . . . . . . . . . . . . . . . . . . . .488
Window::resize . . . . . . . . . . . . . . . . . . . . .488
Window::restore . . . . . . . . . . . . . . . . . . . .488
Window::selectAllIn. . . . . . . . . . . . . . . . .489
Window::selectShape . . . . . . . . . . . . . . . .488
Window::setCursor . . . . . . . . . . . . . . . . . .310
Window::setCursor . . . . . . . . . . . . . . . . . .489
Window::setDecorations. . . . . . . . . . . . . .489
Window::setFocus . . . . . . . . . . . . . . . . . .489
Window::setFunctions . . . . . . . . . . . . . . .489
Window::shapeFullName . . . . . . . . . . . . .488
Window::sound. . . . . . . . . . . . . . . . . . . . .489
Window::thePicture . . . . . . . . . . . . . . . . .488
Window::title . . . . . . . . . . . . . . . . . . . . . .488
Window::translateCoordinates . . . . . . . . .489
Window::translateCoordinates . . . . . . . . .489
Window::unmap . . . . . . . . . . . . . . . . . . . .488
Window::unmapChildren . . . . . . . . . . . . .488
Window::update . . . . . . . . . . . . . . . . . . . .488
Window::updatePicture . . . . . . . . . . . . . .488
Window::useResourceStyle . . . . . . . . . . .419
Window::windowAt . . . . . . . . . . . . . . . . .489
Window::xSnapped. . . . . . . . . . . . . . . . . .488
Window::ySnapped. . . . . . . . . . . . . . . . . .488
Window::zoom . . . . . . . . . . . . . . . . . . . . .488
Window::zoomFactor . . . . . . . . . . . . . . . .488
508
ProcSee Reference Manual
APPENDIX A
Example Patterns
APPENDIX A
Example Patterns
$PROCSEE_DIR/examples/libraries/Patterns
ProcSee Reference Manual
509
APPENDIX A
Example Colours
510
Example Colours
$PROCSEE_DIR/examples/libraries/Colours
ProcSee Reference Manual
APPENDIX A
Example Fonts
Example Fonts
$PROCSEE_DIR/examples/libraries/Fonts
ProcSee Reference Manual
511
APPENDIX A
512
Example Fonts
ProcSee Reference Manual
APPENDIX B
Example Classes
APPENDIX B
Example Classes
$PROCSEE_DIR/examples/libraries/Buttons
ProcSee Reference Manual
513
APPENDIX B
Example Classes
Example Classes
$PROCSEE_DIR/examples/libraries/InputFields
$PROCSEE_DIR/examples/libraries/ScrollBars
514
ProcSee Reference Manual
APPENDIX B
Example Classes
Example Classes
$PROCSEE_DIR/examples/libraries/PerformanceMonitoring
ProcSee Reference Manual
515
APPENDIX B
Example Classes
Example Classes
$PROCSEE_DIR/examples/libraries/PictureCache
516
ProcSee Reference Manual
Index
Symbols
.pctx 145, 147, 425
.pdat 112, 117
.pevl 147
.pfon 349
.plib 145, 147, 425
.ppic 145, 147, 425
.pprn 348, 349, 405
.ptrv 147
.Tdoc 147
.Xdefaults 152
$ARCH 7
$BUSTIMEOUT 7
$CONTROLHOST 7
$PATH 7
$PROCSEE_DIR 7, 192, 254, 348
A
abs 384
acos 481
action 43
add
Colour 292
Matrix 385, 387
additive expression 24
addLinePoint 306, 307
addPoint 377
addPolygonPoint 306, 307
addVariable
TrendLog 462, 464
adjoint
Matrix 385, 387
adjustColours 395
picture 402
adjustVirtualDisplay
window 489, 495
afterPictureUpdate
event 333, 336
align 395
edit 327
alignment
text 89, 440
trend attribute 461
TrendLabels 96
ALL
window decorations 490
altIsDown 333, 337
alwaysOnTop
window 488, 492
analyse
TrendLog 465
and expression 25
angleSnap
class 64
picture 68, 395, 396
ANSI C 17
api 161–169, 177, 178, 192, 200, 202–204,
217, 219, 225, 234, 238
connection 168
function 169
Main Loop 168
miscellaneous 168
records 168
Updating variable values 168
variable 168
api.h 161
apiError 169–192, 255
OK 177, ??–178, 207–??, 212, 213
apilib 161
appendLogBuffer
TrendLog 471
Application
ProcSeeReference Manual
I
Index
function
comRGB 293
connectToProcess 411
defaultCursor 310
disconnectFromProcess 411
getColour 293
getColourFromRGB 293
getCursor 310
getFont 352
getLinestyle 379
getPattern 394
loadPrinterFiles 405
newDisplay 313
processNotify 411
setCursor 310
setCursorColours 310
setTextEditorAttribute 442
setTextEditorAttributes 440
application 45
body 44–59, 67, 76, 84, 85, 90
definition 44
item 44
p3sim 134
p3sim keyword 135
applicationFullName 426
ARCH 7, 125, 161
hpArch 7, 161
linuxX86Arch 7, 161, 162
macX86Arch 7, 161, 162
sunArch 7, 161, 162
winArch 7, 161, 162
area
dialogue 78
arg
PfRegisterFunction 237
argument 43
array
subscript 21
arrayIndex 290
arrayLength 290
arrayMaxIndex 390
arrayMinIndex 390
ascent
font 352
asin 481
assignment
action 43
argument 43
II
attribute 61
element 43
expression 26
operator 26
point 43
statement 43
TrendPlot 92
atan 481
atan2 481
atof 291
atoi 291
attribute
assignment 61
circle 76
code 329
definition 32, 59
picture 395
TrendLabel 96
trendPlot 96
visibility 75
AutoRepeatDelay 152, 334
AutoRepeatInterval 152, 334
autoScale
TrendPlot 96
TrendPres 474, 475
autoStep
TrendGrid atribute 459
B
backgroundColour 395
class 65
comShape 297
picture 68, 397
shape 75
window 488, 489
backgroundFillColour
polygon 85
rectangle 87
roundRect 88
shape 75
beforePictureUpdate
event 333, 336
bHeight 432
blue
Colour 292
bmp
image 81
body
ProcSeeReference Manual
Index
application 44–59, 67, 76, 84, 85, 90
colour 52
cursor 57
dialogue 62, 79
display 49
EventPlot 93
font 56
group 70
instance 72
library 46, 53, 56, 67, 85
pattern 54
picture 68
process 47
rgb 52
shape 74
trend 92
TrendGrid 93
TrendLabels 92
TrendLog 100, 101
TrendPlot 92
TrendRuler 93
trendvar 103
trendvarconfig 103
window 48
BORDER
window decorations 490
bottomMargin
exportPostScript 406
break
statement 32
buffer
text 441
BUSCONNECT 161
BUSPATH 126
BUSRETRY 161
BUSTIMEOUT 7, 161
buttonDoubleClicked
event 333, 334
buttonIsDown
event 333, 337
buttonPressed
event 333, 334
buttonReleased
event 333, 334
buttonRepeated
event 333, 334
buttonRepeatInterval
event 489, 495
buttonTripleClicked
event 333, 334
bWidth 432
bX 432
bY 432
C
C++ 17
cancelLogBuffer
TrendLog 471
capHeight
font 352
cast expression 23
category
message 392
ceil 384
cftime 443, 445, 461
changeClass
instance 368
changeMask
PfSetDefinition 249
char 427
character
constant 42
circle
attribute 76
radius 76
x 76
y 76
circleArc 77, 78
openingAngle 77, 78
startAngle 77
circleSlice 78
openingAngle 77, 78
startAngle 77
class
angleSnap 64
backgroundColour 65
definition 64
example 513
foregroundColour 65
Line 376
oneToOne 65
pattern 65, 68
Polygon 376
radiusSnap 64
rotationAngle 65
worldHeight 65
ProcSeeReference Manual
III
Index
worldWidth 65
worldX 64
worldY 65
xReference 65
xScaleFactor 65
xSnap 64
yReference 65
yScaleFactor 65
ySnap 64
classBrowser 131
classElementFlag 67
classFullName 307
instance 368
ClassLIst 131
classList 131
clear 395
edit 327
Matrix 385, 386
paste 327
clearKeyFocus 395
clearKeyFocusShape
picture 401
clearSelection
text 441
CLOSE
window functions 490
code
attribute 329
pTALK 42
cofactors
Matrix 385, 387
Colour 418
function
add 292
blue 292
comRGB 293
edit 292
getTransparency 293
green 292
numBlinkColours 292
red 292
remove 292
setTransparency 293
time 292
colour 292
body 52
definition 53
example 510
IV
columns
Matrix 385, 386
COM definitions 300
COM functions 295
comAdvise 295
comDateFromTime 295
comDateToTime 295
comUnadvise 295
newComEventObject 296
newComInterfaceObject 296
newComLibrary 296
newComObject 296
newComShape 296
queryInterface 296
comAdvise 295
ComClass 300
comDateFromTime 295
comDateToTime 295
ComInterface 300
ComLibrary 300
comma operator 27
comment 40
pTALK 18
comments 301
communication system
SWBus 7
ComObject 299
comObject
persist 299
queryInterface 299
theComClass 299
comPersistSeparateFile 146, 150, 382
compile 167
compiled
library 47
compiler
pcc 39
compound statement 29
comRGB 293
Colour 293
ComShape 297
comShape
backgroundColour 297
foregroundColour 297
hideProperties 297
persist 298
queryInterface 298
resizeable 297
ProcSeeReference Manual
Index
showProperties 297
theComClass 298
theFont 297
comUnadvise 295
condition
PfAddInput 171
PfRemoveInput 242
conditional expression 26
configuration
item 44
connectedRTMs
TrendLog 471, 472
connectToProcess 411
const 139
constant 19
character 19, 42
floating 20, 42
integer 18, 41, 113
string literal 20
constructor 303
containsName 302
containsPoint 432
continue
statement 32
control 125, 127, 128, 129
CONTROLHOST 7, 125, 127, 128, 161
controlIsDown 333, 337
CONTROLPATH 125
controlutil 125, 127
copy 395
edit 327
cos 481
cosine 139
count
TimerInterval 450
create 329
addLinePoint 306, 307
addPolygonPoint 306, 307
newAttribute 306, 308
newCircle 306
newCircleArc 306, 307
newClass 306, 307
newColour 308
newDialogue 306, 308
newDialogueArea 306
newEllipse 306
newEllipseArc 306, 307
newEnum 307, 308
newEnumElement 307, 308
newFunction 306, 308
newGroup 306, 307
newImage 306, 307
newInstance 306, 307
newLibrary 306, 307
newLine 306, 307
newPicture 307, 308
newPolygon 306, 307
newProcess 307, 308
newRectangle 306
newRoundRect 306, 307
newScale 306, 307
newText 306
newTrend 306, 307
newVariable 306, 308
newWindow 307, 308
createIterator 359, 373
crosshairFollowSnap 395
picture 69, 397
crosshairLength 395
picture 69, 397
crosshairStyle 69
crosshairVisibility 395
picture 69, 397
Cursor 418
cursor 310
body 57
definition 56
cursorMoved 333, 334
cursorX 333, 337
cursorY 333, 337
cut 395
buffers 442
edit 327
D
database 47, 48, 112
file 112
p3sim 135
pragma directives 113
structure definition 112
variable definition 112
variable initialization 113
debug 311
dumpSymbolTable 311
trace 311
declaration 32
ProcSeeReference Manual
V
Index
library 44, 47, 47
statement 32
declarator 34
decl-specifier 32
decorations
window 488, 489, 490, 494
decrement 22
unary expression 22
defaultCursor 310
definition
application 44
attribute 32, 59
class 64
colour 53
cursor 56
dialogue 74
display 49
font 56
function 61
group 70
instance 72
library 46, 47
linestyle 59
pattern 54
PfSetDefinition 249
picture 68
process 47
resource style 59
shape 74
struct 112, 112
trend 92
TrendGrid 93
TrendLabels 92
TrendLog 99, 101
TrendPlot 92
TrendRuler 93
trendvar 103
trendvarconfig 103
variable 112
window 48
definition file
printer 405
defSize
PfGetDefinition 204
deleteBackward
text 440, 441
deleteForward
text 440, 441, 442
VI
deleteIterator 359, 373
depthPosition
TrendGrid attribute 459
descent
font 352
destructor 303
determinant
Matrix 385, 387
dialogue 312
area 78
body 62, 79
definition 74
disconnectFromProcess 411
diskBufferSize
TrendLog 101
diskFlushIntvl
TrendLog 101
diskForceWrite
TrendLog 101
diskLogLimIntvl
TrendLog 100
Display 313
attribute
connection 313
getDisplayInfo 313
height 313
resizeMode 313
virtualHeight 313
virtualWidth 313
virtualX 313
vitualY 313
width 313
display
body 49
definition 49
window 488, 493
DisplayInfo 316, 318
function
connection 316
displayArea 316
getCapability 316
isPrmary 316
workArea 316
DisplayInfoSet 318
function
display 318
get 318
numDisplays 318
ProcSeeReference Manual
Index
displayName
PfExportWindow 192
displayPicture 491
load/display 382
distribute 395
edit 327, 328
dndActivate 337
Picture 325, 325
Shape 325, 325
dndBegin 319, 325
event 333, 336
dndDeactivate 337
Picture 325, 325
Shape 325, 325
dndDrop 321, 322, 325
event 333, 336
dndEnter 322, 325
event 333, 336
dndLeave 322, 325
event 333, 336
dndMotion 322, 325
event 333, 336
dndSimpleDrag 319, 323, 325, 325, 326
dndSimpleDrop 321, 322, 325, 325
DnDSource 319
function
drag 319, 320
setBitmap 319, 320
setCursor 319, 320
setData 319, 319, 326
setDropEffect 323
dndSource 319
DnDTarget 322
function
getData 322, 322
getDropEffect 322, 323
isAltDown 322, 323
isControlDown 322, 323
isCopy 322, 323
isLeftButtonDown 323
isLeftMouseButtonDown 322
isLeftRightButtonDown 323
isLink 322, 323
isMiddleMouseButtonDown 322, 323
isMove 322, 323
isRightMouseButtonDown 322
isShiftDown 322, 323
setDropEffect 321, 322, 323
dndTarget 322, 322
do statement 31
document
save/document 425
TrendLog 462, 465
drag
DnDSource 319, 320
DragThreshold 152
drand48 413
dumpSymbolTable
debug 311
dynamic
operator 23
string 34
E
edit 309, 403
align 327
clear 327
Colour 292
copy 327
cut 327
distribute 327, 328
getDynPrimitiveAttr 327, 329
getPrimitiveAttr 327, 328
group 327
numberOfSelected 327, 329
paste 327
setDynPrimitiveAttr 327, 328
setPrimitiveAttr 327, 328
text 441
toBack 327
toFront 327
ungroup 327
window 327
editStates 330
editWindow 330
element 43
ellipse 79
xRadius 79
yRadius 79
ellipseArc 81
ellipseSlice 81
environ 446
environment variable
ARCH 7, 125, 161
BUSCONNECT 161
BUSPATH 126
ProcSeeReference Manual
VII
Index
BUSRETRY 161
BUSTIMEOUT 7, 161
CONTROLHOST 7, 125, 127, 128, 161
CONTROLPATH 125
PATH 7
PROCSEE_DIR 5, 7, 161
equality expression 25
eval 342
event
afterPictureUpdate 333, 336
altIsDown 333, 337
beforePictureUpdate 333, 336
buttonDoubleClicked 333, 334
buttonIsDown 333, 337
buttonPressed 333, 334
buttonReleased 333, 334
buttonRepeated 333, 334
buttonRepeatInterval 489, 495
buttonTripleClicked 334
buttonTripleCliked 333
controlIsDown 333, 337
cursorMoved 333, 334
cursorX 333, 337
cursorY 333, 337
dndBegin 333, 336
dndDrop 333, 336
dndEnter 333, 336
dndLeave 333, 336
dndMotion 333, 336
eventPicture 333, 337
EventPlot 97, 339
focusLost 333, 336
gotKeyFocus 333, 336
keyPressed 333, 334
keyReleased 333, 334
lastSelectionPicture 333, 337
limitsChanged 333, 336
lostKeyFocus 333, 336
metaIsDown 333, 337
mouseWheel 333, 335
pictureDisplayed 333, 336
pictureUndisplayed 333, 336
postKeyEvent 334, 337
postMouseButtonEvent 334, 338
shapeCursorX 333, 337
shapeCursorY 333, 337
shapeEntered 333, 335
shapeLeft 333, 335
VIII
shiftIsDown 333, 337
status routines 333
trendUpdated 333, 336
trigger routines 333
ungrabPointer 334, 337, 494
viewableStateChanged 333, 335
windowClose 333, 335
windowEntered 333, 335
windowLeft 333, 335
windowMapped 333, 335
windowMoved 333, 335
windowResized 333, 335
windowUnmapped 333, 335
eventPicture
event 333, 337
EventPlot 339, 458, 479
attribute
event 97, 339
offset 339
shape 339
theTrendPres 339
body 93
eventPlot 93
eventPlotFile
TrendLog 101
eventTypeHandling
TrendLog 471, 472
exclusive or expression 25
Execute 129
execute 342
TrendLog 471, 473
Execute options 129
-? (help) 129
-a <application> 129
-c <command> 129
-d (debug mode) 129
-h <host> 129
-p <process> 129
-r <rtm> 129
-s <scope> 129
-v (verbose mode) 129
executeAsync 342
exp 384
exportDxf 344
exportMode 344
sourceName 344
targetName 344
xMax 344
ProcSeeReference Manual
Index
yMax 344
exportEMF 395
picture 402
exportImage 345
exportMode
exportDxf 344
exportPostScript 348
bottomMargin 406
printerName 348
sourceName 348
targetName 348
topMargin 406
exportPostScriptEx 348
expression 20
additive 24
and 25
assignment 26
cast 23
conditional 26
equality 25
exclusive or 25
if 31
inclusive or 25
logical and 25
logical or 25
lookup 27
multiplicative 23
postfix 21
primary 20
relational 24
shift 24
statement 29
switch 30
unary 22
extLogApp
TrendLog 102
extLogProc
TrendLog 102
extLogRTM
TrendLog 102
F
fabs 384
fd
PfAddInput 171
PfRemoveInput 242
fdc
PfGetFDSet 206
fds
PfGetFDSet 206
field
struct 112
fieldName
PfAddField 170
PfGetFieldId 207
fieldSize
PfAddField 170
fieldType
PfAddField 170
fifoSize 226
file
database 112
fileName 382, 426
filename
image 82
fileNameHost
fileNames 351
fileNameNormal
fileNames 351
fileNames
fileNameHost 351
fileNameNormal 351
fillPattern
polygon 85
rectangle 87
roundRect 88
shape 76
fix
PfCreateArray 177
flags
RoundRect 420
Scale 427
float 427
floating 20
floating constant 42
floor 384
focusFollowPointer 150
focusLost
event 333, 336
Font 418
function
ascent 352
capHeight 352
descent 352
height 352
lbearing 352
ProcSeeReference Manual
IX
Index
rbearing 352
textWidth 352
width 352
xHeight 352
font
body 56
definition 56
text 352
for statement 31
foregroundColour 395
class 65
comShape 297
line 83
picture 68, 397
shape 75
foregroundFillColour
polygon 85
rectangle 87
roundRect 88
shape 75
format
Scale 427
text 88, 89, 91, 440
time 443
trend attribute 461
TrendLabels 97
freeze 395
picture 402
TrendLog 462, 466
fullName 351, 353, 395
fullNameOf 353
nameOfFullName 353
object 393
ownerOfFullName 353
PfSetDefinition 249
picture 399
shape 431
typeNameOf 353
window 488
fullNameOf 359
fullName 353
func
PfGetChanges 198
PfGetWindowChanges 214
funcName
PfRegisterFunction 237
funcPtr
PfRegisterFunction 237
X
function
ALL 490
api 169
definition 61
window 488, 490, 494
function call 21
functionPtr
PfAddInput 171
PfRemoveInput 242
functions
window 494
G
gauss 141
ged 7, 130, 130, 397
ged options
-? (help) 130
-application 130
-controlHost 130
-debug 130
-extDebug 130
-gedName 130
-rtmName 130
get
line/polygon 377
Matrix 385, 386
getCapStyle
line/polygon 378
getColour 293
getColourFromRGB 293
getComment 301
getConstructorBehaviour 304
getCursor 310
getData
DnDTarget 322, 322
getDependencies 355
getDropEffect
DnDTarget 322, 323
getDynamicX
line/polygon 377, 377
getDynamicY
line/polygon 377, 377
getDynPrimitiveAttr 395
edit 327, 329
getenv 332
getErrorString 357
getFileName 426
getFont 352
ProcSeeReference Manual
Index
getFrameSize
window 489, 495
getInterpolator
TrendPres 474, 478
getInterpolatorX
line/polygon 378
getInterpolatorY
line/polygon 378
getJoinStyle
line/polygon 378
getKeyFocusShape 395
picture 401
getLayer 375
getLine 460
getLinestyle 379
getList 358
getLogBuffer
TrendLog 471, 472
getNumLines 460
getPath
save/document 426
getPattern 394
getPictureFlags 395
picture 402
getpid 360
getPosValue
Scale 427, 429
getPrimitiveAttr 395
edit 327, 328
getRulerTime
TrendPres 474, 477
getRulerValue
TrendPres 474, 477
getScreenSize
window 489, 495
getShapeFlags 433
getShapesWithinCircle 395
picture 400
getStartTime
TimeTag 461, 461
getTransparency
Colour 293
getValue
TrendPres 474, 477
getValuePos
Scale 427, 429
TrendPres 474, 478
getVariableInfo
TrendLog 462
getViewableState 433
getX
line/polygon 377, 377
getY
line/polygon 377, 377
gif
image 81
gotKeyFocus
event 336
gotKeyFocust
event 333
grabPointer 432
window 488, 494
Gradient 361
gradient 361
graphical
image 81
green
Colour 292
gridMajor 395, 397
gridMinor 395, 397
GROUP
window type 492
group 395
body 70
definition 70
edit 327
item 70
rotatingAngle 71
visibility 71
xReference 71
xScaleFactor 71
yReference 71
yScaleFactor 71
H
HashTable 365
function
clear 365
contains 365
get 365
getKeys 365
length 365
put 365
putAll 365
remove 365
toString 365
ProcSeeReference Manual
XI
Index
hasValueChanged 487
height
font 352
RoundRect 420
window 488, 489
help 134, 138, 138, 146, 150, 154
hi
TrendVariable 104
hideProperties
comShape 297
hist
TrendVariable 104, 105
hostname 127
HP 9000/700 161
hpArch 161
link option 162
I
iconify
window 488, 492
id
PfRemoveProcessHandler 243
IdCodes.h 249
identifier 18, 41
library 46
identity
Matrix 385, 387
idMask
PfSetDefinition 249
if
expression 31
statement 31
ignoreWatchdog 423
image 81
bmp 81
filename 82
gif 81
jpg 82
pcx 82
png 82
rotationAngle 82
tga 82
tiff 82
visibility 82
wmf 82
x 82
xReference 82
xScaleFactor 82
XII
xwd 82
y 82
yReference 82
yScaleFactor 82
inclusive or expression 25
increment 22
unary expression 22
initialization
variable 113
initializer 34
instance 72
install.unix
script 6
Instance
function
changeClass 368
classFullName 368
instance 67, 368, 433
body 72
definition 72
initializer 72
item 72
rotatingAngle 72
visibility 72
x 72
xReference 72
xScaleFactor 72
y 72
yReference 72
yScaleFactor 72
integer 18
constant 41, 113
Intel 80x86 162
Interpolator 369
function
add 369
getInterpolator 369
getInValue 369
getOutValue 369
insert 369
maxValueOut 369
minValueOut 369
modifyInterpolator 369
modifyInValue 369
modifyOutValue 369
numPoints 369
remove 369
set 369
ProcSeeReference Manual
Index
value 369
interval
trend attribute 461
TrendLabels 96
inverse
Matrix 385, 387
isAltDown
DnDTarget 322, 323
isConnected
TrendLog 471, 473
isControlDown
DnDTarget 322, 323
isCopy
DnDTarget 322, 323
isDiagonal
Matrix 385, 388
isDisplayed 396
picture 401
isEqual
Matrix 385, 388
isIconic 396
picture 401
window 488, 493
isIdentity
Matrix 385, 387
isInEditMode 396
picture ??–401
text 441
window 488, 493
isLeftButtonDown
DnDTarget 322, 323
isLink
DnDTarget 322, 323
isLowerTriangular
Matrix 385, 388
isMapped 396
picture 401
window 488, 493
isMetaClass
object 393
isMiddleMouseButtonDown
DnDTarget 322, 323
isMove
DnDTarget 322, 323
isNull
Matrix 385, 386
isOrthogonal
Matrix 385, 388
isRightMouseButtonDown
DnDTarget 322, 323
isRunning
TimerAt 447
TimerInterval 450
isShiftDown
DnDTarget 322, 323
isSquare
Matrix 385, 386
isSymmetric
Matrix 385, 388
isTriangular
Matrix 385, 388
isUpperTriangular
Matrix 385, 388
isViewable 396
picture 401
window 488, 493
item
application 44
configuration 44
group 70
instance 72
library 46, 46
picture 68
shape 74
trend 92
TrendLog 100, 102
iteration statement 31
iterator 373
createIterator 373
deleteIterator 373
nextFullName 373
iteratorId 373
J
jpg
image 82
jump
statement 32
K
keyPressed
event 333, 334
keyReleased
event 333, 334
keysym 334
keyword
ProcSeeReference Manual
XIII
Index
pTALK language 17
shape 74
L
labeled statement 29
lastSelectionPicture
event 333, 337
Layer
function
addAlias 374
delAlias 374
getAliases 374
getOriginalName 374
getVisibility 374
isDefault 374
moveBehind 374
setAsDefault 374
setOriginalName 374
setVisibility 374
toBack 374
toFront 374
layer 374
lbearing
font 352
lCycle
TrendVariable 104
legalRulerValue
TrendPres 474, 477
length
Scale 427
lengthMajorTicks
Scale 427
lengthMinorTicks
Scale 427
lib
api 161
library 46
body 46, 53, 56, 67, 85
compiled 47
declaration 44, 47, 47
definition 46, 47
identifier 46
item 46, 46
resource 46
limitsChanged
event 333, 336
Line 376
attribute 376
XIV
function
addPoint 376
get 376
getCapStyle 376
getDynamicX 376
getDynamicY 376
getInterpolatorX 376
getInterpolatorY 376
getJoinStyle 376
getX 376
getY 376
numberOfPoints 376
removePoint 376
set 376
setCapStyle 376
setDynamicX 376
setDynamicY 376
setInterpolatorX 376
setInterpolatorY 376
setJoinStyle 376
setX 376
setY 376
line 83
foregroundColour 83
lineWidth 83
line/polygon 433
get 377
getCapStyle 378
getDynamicX 377, 377
getDynamicY 377, 377
getInterpolatorX 378
getInterpolatorY 378
getJoinStyle 378
getX 377, 377
getY 377, 377
numberOfPoints 377
set 377
setCapStyle 378
setDynamicX 377
setdynamicX 377
setDynamicY 377, 377
setInterpolators 378
setInterpolatorY 378
setJoinStyle 378
setX 377
setY 377
linePattern
rectangle 87, 91
ProcSeeReference Manual
Index
roundRect 88
shape 76
Linestyle 418
linestyle 379
definition 59
lineWidth
line 83
polygon 85
rectangle 87, 91
roundRect 88
shape 76
link 167
-lp3 167
link option
hpArch 162
linuxX86Arch 162
macX86Arch 162
sunArch 162
winArch 162
linuxX86Arch 162
link option 162
List 380
function
add 380
clear 380
concat 380
copy 380
get 380
insert 380
length 380
remove 380
sort 380
toString 380
literal 41
character constant 19, 42
floating constant 20, 42
integer constant 18, 41
string literal 20, 42
lo
TrendVariable 104
load 382
load/display 382, 403, 426, 496
displayPicture 382
load 382
loadDatabase 412
loadOption
printer 405
loadPrinterFiles 405
localtime 445
log 384
log10 384
logDirectory
TrendLog 101
logFrequency
TrendPlot 96
TrendPres 475, 476
logical and expression 25
logical or expression 25
logMode
TrendLog 463, 468
lookup expression 27
lostKeyFocus
event 336
lostKeyFocust
event 333
lower 396
picture 399
window 488
lowerBand
TrendPlot 96
TrendPres 474, 475
lowerLimit
TrendPlot 96
TrendPres 474, 475
M
macX86Arch 162
link option 162
majorTickStepValue
Scale 427
map 396
picture 399
window 488, 492
MarkerSize 152
mask
PfExportWindow 192
PfGetChildren 200
math
abs 384
ceil 384
exp 384
fabs 384
floor 384
log 384
log10 384
pow 384
ProcSeeReference Manual
XV
Index
round 384
roundToInt 384
Matrix 294, 385, 402
add 387
adjoint 387
clear 386
cofactors 387
columns 386
determinant 387
function
add 385
adjoint 385
clear 385
cofactors 385
columns 385
determinant 385
get 385
identity 385
inverse 385
isDiagonal 385
isEqual 385
isIdentity 385
isLowerTriangular 385
isNull 385
isOrthogonal 385
isSquare 385
isSymmetric 385
isTriangular 385
isUpperTriangular 385
multiply 385
rows 385
set 385
subtract 385
trace 385
transpose 385
get 386
identity 387
inverse 387
isDiagonal 388
isEqual 388
isIdentity 387
isLowerTriangular 388
isNull 386
isOrthogonal 388
isSquare 386
isSymmetric 388
isTriangular 388
isUpperTriangular 388
XVI
multiply 387
rows 386
set 386
subtract 387
trace 387
transpose 387
max 390
MAXIMIZE
window decorations 490
window functions 490
maximize
window 488, 492
maxInterpolTime
TrendLog 463, 468
maxRunTimeMessages 423
maxValue
Scale 427
mClass 393
member
object 21
member functions
picture 395
MENU
window decorations 490
window type 492
message 392
category 392
Message format 279
Message Output Formatter 273
metaClass
object 393
metaIsDown 333, 337
MfInitialize 274
MfTMessageOutput 281
min 390
MINIMIZE
window decorations 490
window functions 490
minimize
window 488, 492
minorTickSteps
Scale 427
minValue
Scale 427
mirror
shape 431
mktime 443, 445
day 445
ProcSeeReference Manual
Index
hours 445
minutes 445
month 445
seconds 445
year 445
mode
window 488, 491
modSysKeyBehaviour
window 489, 495
mouseWheel 333, 335
MOVE
window functions 490
move
window 488, 492
moveCursor 396
picture 402
window 489, 494
moveFrame
window 488, 493
moveLeft
text 441, 442
moveRight
text 441, 442
moveRuler
TrendRuler 480
moveSelected 396
picture 400
moveToEnd
text 441, 442
moveToHome
text 441, 442
msecsToday 443
MultiClickTimeout 152
multiplicative expression 23
multiply
Matrix 385, 387
N
name 396
object 393
PfExportWindow 192
picture 399
shape 431
struct 112
window 488, 492
nameOf 353
nameOfFullName
fullName 353
newArray 289
newAttribute 306, 308
newCharArray 289
newCircle 306
newCircleArc 306, 307
newClass 306, 307
newColour 308
newComEventObject 296
newComInterfaceObject 296
newComLibrary 296
newComObject 296
newComShape 296
newDialogue 306, 308
newDialogueArea 306
newDoubleArray 289
newEllipse 306
newEllipseArc 306, 307
newEnum 307, 308
newEnumElement 307, 308
newEventPlot 455, 456
newFloatArray 289
newFunction 306, 308
newGroup 306, 307
newHashTable 365
newImage 306, 307
newInstance 306, 307
newIntArray 289
newLayer 374
newLibrary 307
create 306
newLine 306, 307
newList 380
newLogBuffer
TrendLog 471
newMatrix 386
newName
rename 417
newPicture 307, 308
newPoint 404
newPolygon 306, 307
newProcess 307, 308
newRect 415
newRectangle 306, 329
newRoundRect 306, 307
newScale 306, 307
newShortIntArray 289
newSize 435
newText 306
ProcSeeReference Manual
XVII
Index
newTimeLabel 455, 456
newTrend 306, 307
newTrendGrid 455, 456
newTrendPres 455, 456
newTrendRuler 455, 456
newVariable 306, 308
newWindow 307, 308
nextFullName 359
iterator 373
noArgs
PfRegisterFunction 237
noise 140
NONE
window decorations 490
window functions 490
noOfLines
TrendGrid attribute 459
NORMAL
window type 492
NullId 177, ??–178, 207–??, 213
numberOfPoints 377
line/polygon 377
numberOfSelected 396
edit 327, 329
numBlinkColours
Colour 292
numEventPlot 455, 456
numTimeLabel 455, 456
numTrendGrid 455, 456
numTrendPres 455, 456
numTrendRuler 455, 456
O
Object
function
fullName 393
isMetaClass 393
metaClass 393
name 393
owner 393
object 393
member 21
objectFullName
remove 416
rename 417
save/document 425
offset
EventPlot 339
XVIII
Scale 427
trend attribute 461
TrendLabels 96
OK 177, ??–178, 207–??, 212, 213
olwm
window decoration 496
oneToOne
class 65
picture 69, 395, 397
onUpdate 483
onVariableUpdate 483
openingAngle
circleArc 77, 78
circleSlice 77, 78
operator
assignment 26
comma 27
dynamic 23
unary - 22
unary ! 22
unary @ 23
unary * 22
unary & 22
unary ~ 23
options
Execute 129
ged 130
pcc 145
rtm 149
Timer 154
TrPrint 156
optName 330
orientation
Trend Attribute 96, 455, 457
owner
object 393
ownerOfFullName
fullName 353
P
P3Misc.h 249
p3sim 134, 135, 136, 138
application 134
database 135
process 135
randomCycle 135, 137
rtmName 135
startTime 135
ProcSeeReference Manual
Index
timeTickIntvl 135
timeVariable 135
value 137
p3sim function
const 139
cosine 139
gauss 141
noise 140
predefined 141
probability 141
random 140
sequence 142
sine 140
p3sim options
-? (help) 134
-e <errorLog> 134
-f <simFile> 134
-h <host> 134
-v (verbose mode on) 134
p3simTalk 134, 136, 138
help 138
precision 138
quit 138
randomCycle 138
runPfExecute 139
updatedVariables 138
verbose 138
p3simTalk options
-? (help) 138
-h <host> 138
-p <processName> 138
pan 396
picture 400
window 488, 493
panAbs 455, 456
panFreeze 455, 457
function
Trend 455
panRel 455, 456
parent
window 488, 491
parentFullName 373
parentName 308
paste
clear 327
edit 327
picture 396, 400
window 488, 493
PasteDelta 152
PATH 7
path 166, 167
Pattern 418
pattern 394, 395
body 54
class 65, 68
definition 54
example 509
picture 397
pcc 16, 39, 145, 147, 425
pcc options 145
-? (help) 146
-a (anachronism) 145, 146
-d (debug) 145
-f (filename) 146
-h (directory) 146
-h (help) 146
-h (name) 146
-h (otuput) 146
-m maxMessages 145
-n (no defaults) 145
-o options 145
-s (suppress) 145
-v (verbose) 145
-W numLines 146
pCirArcClass 330
pCircleClass 330
pComShapeClass 330
pcx
image 82
pDiaAreaClass 330
pEllArcClass 330
pEllipseClass 330
persist 146, 150, 382
comObject 299
comShape 298
PfAddField 168, 170, 174, 180, 187, 234
fieldName 170
fieldRecName 170
fieldSize 170
fieldType 170
recName 170
PfAddInput 168, 171, 184, 223, 241, 242
condition 171
fd 171
functionPtr 171
PfAddRtmToCurrent 168, 172
ProcSeeReference Manual
XIX
Index
PfAddVarAction 168, 173, 184, 223, 244
PfBeginRecord 168, 170, 174, 180, 187, 234
recordName 174
PfCAllConditions 206
PfCAllUnselected 214
PfCChar 161
PfCDouble 161
PfCExceptCondition 206
PfCFloat 161
PfCInt 161
PfClearEvents 168, 175
PfCLogBufferAppend 185
PfCLogBufferCancel 185
PfCLogBufferNew 185
PfClose 168, 176, 218, 221
PfCObjectCreated 198
PfCObjectRemoved 198
PfCOneSelected 214
PfCOneUnselected 198, 214
PfCPointer 161
PfCReadCondition 206
PfCreateArray 168, 177, 178, 181, 195, 231,
234
fix 177
NullId 177
recordName 177
size 177
type 177
value 177
varName 177
PfCreateVar 168, 177, 178, 181, 195, 231, 234
NullId 178
type 178
value 178
varName 178
PfCRecord 161
PfCrtmCrash 217, 219
PfCrtmStart 217, 219
PfCrtmStop 217, 219
PfCShapeFinished 214
PfCShapeMoved 214
PfCShortInt 161
PfCUnsignedChar 161
PfCUnsignedInt 161
PfCUnsignedShortInt 161
PfCWriteCondition 206
PfData 168, 179
id 179
XX
PfDeleteRecord 168, 180
recName 180
PfDeleteVar 168, 181
PfDeleteVarId 168, 181
PfDiagnosticsSubscribe 168, 182, 392
PfDiagnosticsSubscribeEx 168, 182
PfDisableInitialUpdate 168, 183
PfDispatch 168, 184, 223
PfEditLogBuffer 168, 185, 196
PfEnableInitialUpdate 168, 183
PfEndLoop 168, 186, 223
PfEndRecord 168, 170, 174, 180, 187, 234
PfEvent 168, 188
PfEvents 168, 188
PfExecute 139, 168, 191
scope 191
sourceCode 191
PfExecuteAsync 168, 191
PfExportWindow 168, 192, 240
displayName 192
mask 192
name 192
win 192
PfFlush 168, 194, 231, 245, 250, 255, 256
PfFlushCreateVar 168, 177, 178, 179, 195,
231, 245
PfFlushEditLogBuffer 168, 185, 196
PfFlushUseFields 168, 197, 231, 245, 256
PfGetChanges 168, 198
func 198
scope 198
PfGetChildren 168, 199, 200, 254, 373
mask 200
PfGetCurrentObject 168, 202, 254
PfGetDefinedVars 168, 203, 225
PfGetDefinition 168, 204, 249, 254
defSize 204
PfGetDiagnosticsMessage 168, 205
PfGetFDSet 168, 206, 223, 227
fdc 206
fds 206
PfGetFieldId 207
fieldName 207
NullId 207
recordId 207
PfGetFuncArg 168, 208
PfGetNumAllRtms 168, 209
PfGetNumCurrentRtms 168, 210
ProcSeeReference Manual
Index
PfGetSystemError 168, 211, 230
PfGetTypeId 168, 212
varId 212
PfGetVarId 168, 213
NullId 213
varName 213
PfGetWindowChanges 168, 193, 214, 331
func 214
winName 214
PfId 168, 172, 179, 207, 213, 215, 224, 231,
259
PfIndex 168, 216
PfInit 168, 217
PfInitialize 168, 172, 175, 176, 219, 220, 222,
226, 248, 253, 259
rtmName 219
usrFuncDisConnect 218, 221
PfIsConnected 168, 222
PfMainLoop 168, 171, 173, 184, 186, 218,
221, 223, 227, 241–244, 252
PfName 168, 224
PfNextVarId 168, 225
PfNonBlocking 168, 226
PfPeriodic 168, 184, 223, 227
PfPrintAllRecords 168, 228
PfPrintAllVars 168, 229
PfPrintSystemError 168, 211, 230
PfPut 168, 194, 197, 207, 231, 246, 255, 256
valuePtr 231
PfPutValue 234
PfQuoteString 168, 233
PfReadScript 168, 234
PfReceiveRtmStringUpdates 168, 235, 236,
236
PfReceiveRtmUpdates 168, 235
PfRegisterFunction 168, 208, 237
arg 237
funcName 237
funcPtr 237
noArgs 237
PfRegisterFunctionEx 168, 208, 237
PfReleaseWindow 168, 193, 240
PfRemoveAllInputs 168, 241, 242
PfRemoveInput 168, 171, 241, 242
condition 242
fd 242
functionPtr 242
PfRemoveProcessHandler 168, 243, 252
id 243
PfRemoveVarAction 168, 173, 244
varId 244
PfSend 168, 194, 197, 231, 245, 255, 256
PfSendApiStringUpdates 168, 247
PfSendToOne 168, 194, 197, 245, 253, 259
PfSetAllRtmsCurrent 168, 248
PfSetDefinition 168, 249
changeMask 249
definition 249
fullName 249
idMask 249
PfSetFlushBehaviour 168, 250
PfSetMaxQuotedStrings 168, 233
PfSetProcessClass 168, 251
PfSetProcessHandler 168, 223, 227, 243, 252
PfSetRtmCurrent 168, 253
Pfsor 168, 199, 201, 254
PfsorDefinitionLength 254
PfsorExtra 254
PfsorFullName 254
PfsorIdMask 254
PfsorLength 254
PfsorSignature 254
PfUnquoteString 168, 233
PfUpdateValuesId 168, 194, 197, 225, 255
PfUseField 168, 197, 231, 231–??, 245, 256
PfWinInit 168, 257
PfWinInitialize 168, 257
PfWithdrawRtmFromCurrent 168, 259
PfXtInit 168, 260
PfXtInitialize 168, 260
Picture 329, 383, 484, 496
attribute
angleSnap 395
backgroundColour 395
crosshairFollowSnap 395
crosshairLength 395
crosshairVisibility 395
foregroundColour 395
gridMajor 395
gridMinor 395
oneToOne 395
pattern 395
radiusSnap 395
resizeMode 395
rotationAngle 395
updateMode 395
ProcSeeReference Manual
XXI
Index
worldHeight 395
worldWidth 395
worldX 395
worldY 395
xReference 395
xScaleFactor 395
xSnap 395
yReference 395
yScaleFactor 395
ySnap 395
function
adjustColours 294, 395
align 327, 395
clear 327, 395
clearKeyFocus 395
copy 327, 395
cut 327, 395
distribute 327, 395
dndActivate 325, 325
dndDeactivate 325, 325
exportEMF 395
freeze 395
fullName 395
getDynPrimitiveAttr 327, 395
getKeyFocusShape 395
getPictureFlags 395
getPrimitiveAttr 327, 395
getShapesWithinCircle 395
group 327, 395
isDisplayed 396
isIconic 396
isInEditMode 396
isMapped 396
isViewable 396
lower 396
map 396
moveCursor 396
moveSelected 396
name 396
numberOfSelected 327, 396
pan 396
paste 327
raise 396
selectAllIn 396
selectShape 396
setCursor 396, 401
setDynPrimitiveAttr 327, 396
setFocus 396
XXII
setPictureFlags 337, 396
setPrimitiveAttr 327, 396
shapeAt 396
shapeFullNameAt 396
sound 396
theWindow 396
title 396
toBack 327, 396
toFront 327, 396
ungroup 327, 396
unmap 396
unmapChildren 396
updatePicture 396
winxy2xy 396
xSnapped 396
xy2dxy 396
xy2sx 396
xy2sy 396
xy2winxy 396
xy2wx 396
xy2wy 396
ySnapped 396
zoom 396
zoomFactor 396
picture 69, 395, 402, 433
adjustColours 402
angleSnap 68, 396
attributes 395
backgroundColour 68, 397
body 68
clearKeyFocusShape 401
crosshairFollowSnap 69, 397
crosshairLength 69, 397
crosshairStyle 69
crosshairVisibility 69, 397
definition 68
exportEMF 402
foregroundColour 68, 397
freeze 402
fullName 399
getKeyFocusShape 401
getPictureFlags 402
getShapesWithinCircle 400
gridMajor 397
gridMinor 397
isDisplayed 401
isIconic 401
isInEditMode ??–401
ProcSeeReference Manual
Index
isMapped 401
isViewable 401
item 68
lower 399
map 399
member functions 395
moveCursor 402
moveSelected 400
name 399
oneToOne 69, 397
pan 400
paste 396, 400
pattern 397
radiusSnap 68, 396
raise 399
resizeMode 69
rotationAngle 69, 397
selectAllIn 401
selectShape 401
setFocus 401
setPictureFlags 402
shapeAt 401
shapeFullNameAt 401
sound 401
theWindow 401
title 400
unmap 399
unmapChildren 399
updateMode 69
updatePicture 402
winxy2xy 402
worldHeight 69, 397, 489
worldWidth 69, 397, 489
worldX 69, 397
worldY 69, 397
xReference 69, 397
xScaleFactor 69, 397
xSnap 68
xSnapped 400
xy2dxy 402
xy2sx 402
xy2sy 402
xy2winxy 402
xy2wx 402
xy2wy 402
yReference 69, 397
yScaleFactor 69, 397
ySnap 68
ySnapped 400
zoom 400
zoomFactor 400
pictureDisplayed
event 333, 336
pictureFlags 70
pictureName 382
pictureUndisplayed
event 333, 336
pImageClass 330
pInstanceClass 330
pLineClass 330
png
image 82
Point 404
attribute
x 404
y 404
function
set 404
point 43
Polygon 376
polygon 85
backgroundFillColour 85
fillPattern 85
foregroundFillColour 85
lineWidth 85
SolidPattern 85
position
text 440, 441
postfix expression 21
postKeyEvent 337
event 334
postMouseButtonEvent 338
event 334
postscript
export 348
pow 384
pPolygonClass 330
PpPop 113
PpPush 113
PpReceiveRtmStringUpdates 114
PpReceiveRtmUpdates 114
PpSendApiStringUpdates 114
precision
p3simTalk 138
pRectangleClass 330
predefined 141
ProcSeeReference Manual
XXIII
Index
presentation
TrendPlot 96
TrendPres 474
presentationFunc
TrendPres 474, 476
primary expression 20
print
printf 407
sprintf 407
printer
definition file 405
loadOption 405
loadPrinterFiles 405
tuning file 348
printerName
exportPostScript 348
printf 90, 191, 392, 407, 439
strformat 407
probability 141
process
body 47
connectToProcess 411
definition 47
disconnectFromProcess 411
loadDatabase 412
p3sim 135
p3sim keyword 135
processFullName 412
processIsConnected 412
processName 411
processNotify 411
status 411
processFullName
process 412
processIsConnected 412
processName
process 411
processNotify 411
ProcSee
Configuration Language 15, 16
editor (ged) 130
Tutorial 9
User’s Guide 9
PROCSEE_DIR 5, 7, 161
pRoundRectClass 330
pScaleClass 330
pTALK 15, 17
code 42
XXIV
comment 18
keyword 17
pTextClass 330
pTrendClass 330
put
text 440, 441
putenv 332
Q
queryInterface 296
comObject 299
comShape 298
QUIT
window functions 490
quit 138
function 154, 266, 268
p3simTalk 138
Timer 155
quoteId 353
R
radius
circle 76
radiusSnap
class 64
picture 68, 395, 396
raise 396
picture 399
window 488, 492
random 140, 413
randomCycle
p3sim 135, 137
p3simTalk 138
rbearing
font 352
readdir 414
recName
PfAddField 170
PfDeleteRecord 180
recordId 187, 207
PfGetFieldId 207
recordName
PfBeginRecord 174
PfCreateArray 177
Rect 415
attribute
height 415
width 415
ProcSeeReference Manual
Index
x 415
y 415
function
set 415
rectangle 87, 88
backgroundFillColour 87
fillPattern 87
foregroundFillColour 87
linePattern 87, 91
lineWidth 87, 91
SolidPattern 87
red
Colour 292
relational expression 24
relBtn 432
remove 309, 383, 416
Colour 292
objectFullName 416
removePoint 377
removeVariable
TrendLog 463, 467, 468
rename 417
newName 417
objectFullName 417
reset
trend 455, 457
RESIZE
window functions 490
resize
window 488, 493
resizeable
comShape 297
RESIZEH
window decorations 490
resizeMode 395
picture 69
resource
library 46
resource style
definition 59
functions 419
ResourceStyle 418
restore
window 488, 492
return
statement 32
rgb
body 52
rotationAngle 395
class 65
group 71
image 82
instance 72
picture 69, 397
shape 75, 431
round 384
RoundRect 420
flags 420
height 420
width 420
x 420
xRadiusCorner 420
y 420
yRadiusCorner 420
attribute
flags 420, 420
height 420, 420
width 420, 420
x 420, 420
xRadiusCorner 420, 420
y 420, 420
yRadiusCorner 420, 420
roundRect
backgroundFillColour 88
fillPattern 88
foregroundFillColour 88
linePattern 88
lineWidth 88
SolidPattern 88
roundToInt 384
rows
Matrix 385, 386
RTM 111
rtm 7, 149, 153, 158, 161, 311, 397
symboltable 249
rtm options 149
-? (help) 150
-c (Constructor and destructor behaviour)
149
-F (No text font scaling) 149
-g (GMT) 149
-h <controlHostName> 149
-L (logfile) 150
-M (Map behaviour) 149
-n <rtmName> 149
ProcSeeReference Manual
XXV
Index
-r <appFile> 149
-t (terminal) 149
-T (Windows terminal options) 151
-v (verbose) 149
rtmName 422
p3sim 135, 135
PfInitialize 219
rtmVersion 422
rulerIsSelected
TrendGrid 97
TrendRuler 97
attribute 480
runPfExecute
p3simTalk 139
S
save 425
TrendLog 463, 468
save/document 403, 425, 496
document 425
getPath 426
objectFullName 425
save 425
setPath 425
Scale 427
getPosValue 427
getValuePos 427
attribute
alignment 428
flags 427, 428
format 427, 428
length 427, 427
lengthMajorTicks 427, 427
lengthMinorTicks 427
lengtMinorTicks 427
majorTickStepValue 427, 427
maxValue 427, 427
minorTickSteps 427, 428
minValue 427, 427
offset 427, 428
theFont 427, 428
function
getPosValue 427, 429
getValuePos 427, 429
scope
PfExecute 191
PfGetChanges 198
XXVI
script
install.unix 6
scroll
Trend Attribute 96, 455
scrollValue
trend 455, 457
searchComments 301
select 432
selectAll
text 441, 442
selectAllIn 396
picture 401
window 489, 494
selection statement 30
selectShape 396
picture 401
window 488, 494
selectWord
text 441, 442
sequence 142
set
line/polygon 377
Matrix 385, 386
setBitmap
DnDSource 319, 320
setCapStyle
line/polygon 378
setComment 301
setConstructorBehaviour 303
setCursor 310
DnDSource 319, 320
picture 396, 401
window 494
setCursorColours 310
setData
DnDSource 319, 319
setDecorations
window 489, 494
setDropEffect
DnDTarget 322, 323
setDynamicX
line/polygon 377, 377
setDynamicY
line/polygon 377, 377
setDynPrimitiveAttr 396
edit 327, 328
setFileName 425
setFocus 396
ProcSeeReference Manual
Index
picture 401
window 489, 494
setFunctions
window 489, 494
setGreyMatrix 294, 294, 402
setInterpolator
TrendPres 474, 478
setInterpolators
line/polygon 378
setInterpolatorY
line/polygon 378
setInterval
TimerInterval 450
setJoinStyle
line/polygon 378
setKeyFocus 433
setLayer 375
setLimitModifier
TrendPres 474, 478
setlocale 446
setLogBuffers
TrendLog 471, 472
setPath
save/document 425
setPictureFlags 396
picture 402
setPrimitiveAttr 308, 396
edit 327, 328
setRGBMatrix 294, 294, 402
setRulerPosition
TrendRuler 480
setScrollModifier
Trend 455, 457
setShapeFlags 432
setStartTime
TimeTag 461, 461
setTextEditorAttributes 440
text 442
setTime
TrendLog 468, 469
setTimeZone 445
setTransparency
Colour 293
setTrigger
TrendLog 471, 472
setX
line/polygon 377
setY
line/polygon 377
Shape 367, 368, 378, 430, 442
attribute
rotationAngle 430
xReference 430
xScaleFactor 430
yReference 430
yScaleFactor 430
function
bHeight 430
bWidth 430
bX 430
bY 430
containsPoint 430
dndActivate 325, 325
dndDeactivate 325, 325
fullName 430
getLayer 374
getShapeFlags 430
getViewableState 430
grabPointer 430
name 430
select 430
setKeyFocus 430
setLayer 374
setShapeFlags 337, 430
shapeCursorX 430
shapeCursorY 430
shapeToBack 430
shapeToFront 430
shxy2xy 430
thePicture 430
unselect 430
updateShape 430
xy2shxy 430
xy2sx 430
xy2sy 430
xy2wx 430
xy2wy 430
shape
backgroundColour 75
backgroundFillColour 75
bHeight 432
body 74
bWidth 432
bX 432
bY 432
containsPoint 432
ProcSeeReference Manual
XXVII
Index
definition 74
EventPlot 339
fillPattern 76
foregroundColour 75
foregroundFillColour 75
fullName 431
getShapeFlags 433
getViewableState 433
grabPointer 432
item 74
keyword 74
linePattern 76
lineWidth 76
mirror 431
name 431
negative scale factor 431
rotationAngle 75, 431
select 432
setKeyFocus 433
setShapeFlags 432
shapeCursorX 432
shapeCursorY 432
shapeToBack 432
shapeToFront 432
shxy2xy 431
thePicture 431
ungrabPointer 432
unselect 432
updateShape 431
visibility 75, 76, 431
xReference 75, 431
xScaleFactor 75, 431
xy2shxy 431
xy2sx 431
xy2sy 431
xy2wx 431
xy2wy 431
yReference 75, 431
yScaleFactor 75, 431
shapeAt 396
picture 401
ShapeClassId 330
pCirArcClass 330
pCircleClass 330
pComShapeClass 330
pDiaAreaClass 330
pEllArcClass 330
pEllipseClass 330
XXVIII
pImageClass 330
pInstanceClass 330
pLineClass 330
pPolygonClass 330
pRectangleClass 330
pRoundRectClass 330
pScaleClass 330
pTextClass 330
pTrendClass 330
shapeCursorX 333, 337, 432, 499
shapeCursorY 333, 337, 432, 499
shapeEntered
event 333, 335
shapeFlags 76
shapeFullNameAt 396
picture 401
window 488, 493
shapeLeft 333, 335
shapeToBack 432
shapeToFront 432
shift expression 24
shiftIsDown
event 333, 337
showProperties
comShape 297
shutdown 434
shxy2xy 431
sin 481
sine 140
Size 435
attribute
height 435
width 435
function
set 435
size
PfCreateArray 177
snap
angle 396
x 396
y 396
snapshotGetComment
TrendLog 471, 473
snapshotGetTime
TrendLog 471, 473
snapshotLoad
TrendLog 471, 473
snapshotSave
ProcSeeReference Manual
Index
TrendLog 471, 473
SolidPattern
polygon 85
rectangle 87
roundRect 88
sound 396
picture 401
window 489, 494
sourceCode
PfExecute 191
sourceName
exportDxf 344
exportPostScript 348
specifier
type 33
sprintf 407
sqrt 436
start
TimerAt 447
TimerInterval 449
startAngle
circleArc 77
circleSlice 77
startTime
p3sim 135
statement 29
assignment 43
break 32
compound 29
continue 32
declaration 32
do 31
expression 29
for 31
if 31
iteration 31
jump 32
labeled 29
return 32
selection 30
switch 30
while 31
status
process 411
status routines 333
stdout 127
stop
TimerAt 447
TimerInterval 450
strcat 437
strcftime 443
strchr 438
strcmp 437
strcpy 437
strdup 438
strEval 342, 343
strfield 438
strformat 407, 438
strftime 445, 446
stricmp 438
string
dynamic 34
literal 20, 42
strcat 437
strchr 438
strcmp 437
strcpy 437
strdup 438
strfield 438
strformat 438
stricmp 438
strlen 437
strlower 438
strnatcmp 438
strnaticmp 438
strncmp 437
strncpy 437
strnicmp 438
strquote 438
strrchr 438
strsplit 438
strstr 437
strtrim 438
strunquote 438
strupper 438
strlen 437
strlower 438
strnatcmp 438
strnaticmp 438
strncmp 437
strncpy 437
strnicmp 438
strquote 438
strrchr 438
strsplit 438
strstr 437
ProcSeeReference Manual
XXIX
Index
strtrim 438
struct
database structure 112
definition 112, 112
field 112
name 112
timeval 227
strunquote 438
strupper 438
subscript
array 21
subtract
Matrix 385, 387
Sun SPARC 162
sunArch 162, 168
link option 162
SWBus 7
switch
expression 30
statement 30
symboltable
rtm 249
system 439
T
tan 481
targetName
ExportDxf 344
exportPostScript 348
Tdoc 16, 112
Text
attribute
alignment 440
format 440
theText 440
function
buffer 441
clearSelection 441
deleteBackward 440, 441
deleteForward 440, 441, 442
edit 441
isInEditMode 441
moveLeft 441, 442
moveRight 441, 442
moveToEnd 441, 442
moveToHome 441, 442
position 440, 441
put 440, 441
XXX
selectAll 441, 442
selectWord 441, 442
textWidth 440, 441
text 89, 433, 440
alignment 89
font 352
format 88, 89, 91
theFont 89, 91
theText 89, 91
textWidth
font 352
text 440, 441
tga
image 82
theComClass
comObject 299
comShape 298
theCursor
window 488, 491
theFont
comShape 297
Scale 427
text 89, 91
trend attribute 461
thePicture
shape 431
window 488, 494
theText
test 89, 91
text 440
theTime
Trend 455, 457
theTitle
window 488, 491
theTrendPres
EventPlot 339
TrendGrid atribute 459
theWindow 396
picture 401
tiff
image 82
time 443, 461
cftime 443, 445
Colour 292
format 443
mktime 445
strcftime 443
strftime 446
ProcSeeReference Manual
Index
trend 456
timeInterval
TrendGrid 97
TrendGrid attribute 459
TimeLabel 458
timeMaster 135
TrendLog 100
timeOffset
TrendGrid 97
TrendGrid attribute 459
Timer 154, 155, 447, 449
quit 155
Timer options 154
-? (help) 154
-a <application> 154
-d <debug> 154
-h <host> 154
-p <process> 154
-r <rtm> 154
-t (tty) 154
-v <verbose> 154
TimerAt 447
function
isRunning 447
start 447
stop 447
TimerInterval 448, 449, 450
function
count 450
isRunning 450
setInterval 450
start 449
stop 450
timespan
Trend 459
Trend Attribute 96, 456
TimeTag
attribute
alignment 461
format 461
interval 461
offset 461
theFont 461
function
getStartTime 461, 461
setStartTime 461, 461
timeTick
TrendLog 469
timeTickIntvl
p3sim 135, 136
TrendLog 100
timeval
struct 227
timeVariable
p3sim 135
TrendLog 100
TITLE
window decorations 490
title 396
picture 400
window 488, 491, 492
toBack 396, 460
edit 327
TrendPres 474, 477
toFront 396, 460
edit 327
TrendPres 474, 477
tolower 451
TOOL
window type 492
topMargin
exportPostScript 406
toString 452
toupper 451
tr 453, 454, 474, 479
TrendPres 478
trace
debug 311
Matrix 385, 387
translateCoordinates
window 489, 495
transpose
Matrix 385, 387
Trend 93, 341, 455, 460, 461, 469, 470, 473,
479, 480
attribute
orientation 96, 455, 457
scroll 96, 455
timespan 96, 456
trLog 96, 456
updateMode 96
body 92
definition 92
function
newEventPlot 455, 456
newTimeLabel 455, 456
ProcSeeReference Manual
XXXI
Index
newTrendGrid 455, 456
newTrendPres 455, 456
newTrendRuler 455, 456
numEventPlot 455, 456
numTimeLabel 455, 456
numTrendGrid 455, 456
numTrendPres 455, 456
numTrendRuler 455, 456
panAbs 455, 456
panFreeze 457
panRel 455, 456
reset 455, 457
scrollValue 455, 457
setScrollModifier 455, 457
theTime 455, 457
time 456
xW2Time 455, 457
xyW2 455
xyW2Time 457
item 92
panAbs 456
timespan 459
tr 453, 454
trTime 453
xyW2Time 480
TrendDiagram 98
TrendGrid 95, 99, 458, 459
attribute
autoStep 459
depthPosition 459
noOfLines 459
rulerIsSelected 97
theTrendPres 459
timeInterval 97, 459
timeOffset 97, 459
body 93
definition 93
function
getLine 460
getNumLines 460
toBack 460
toFront 460
trendGrid 93
TrendLabel 93, 95, 98
attribute 96
alignment 96
format 97
interval 96
XXXII
offset 96
body 92
definition 92
TrendLog 156, 341, 458, 479
attraibute
extLogApp 102
attribute
diskBufferSize 101
diskFlushIntvl 101
diskForceWrite 101
diskLogIntvl 100
eventPlotFile 101
extLogProc 102
extLogRTM 102
logDirectory 101
timeMaster 100
timeTicIntvl 100
timeVariable 100
trendVariableFile 100
body 100, 101
definition 99, 101
function
addVariable 462, 464
analyse 465
appendLogBuffer 471
cancelLogBuffer 471
connectedRTMs 471, 472
document 462, 465
eventTypeHandling 471, 472
execute 471, 473
freeze 462, 466
getLogBuffer 471, 472
getVariableInfo 462
isConnected 471, 473
logMode 463, 468
maxInterpolTime 463, 468
newLogBuffer 471
removeVariable 463, 467, 468
save 463, 468
setLogBuffers 471, 472
setTime 468, 469
setTrigger 471, 472
snapshotGetComment 471, 473
snapshotGetTime 471, 473
snapshotLoad 471, 473
snapshotSave 471, 473
timeTick 469
item 100, 102
ProcSeeReference Manual
Index
mode 469
time 469
TrendLogExternal 470
TrendPlot 93, 98
assignment 92
attribute 96
autoScale 96
logFrequency 96
lowerBand 96
lowerLimit 96
presentation 96
upperBand 96
upperLimit 96
variable 96
body 92
definition 92
TrendPres 454, 458, 469, 470, 473, 474, 480
attribute
autoScale 474, 475
logFrequency 475, 476
lowerBand 474, 475
lowerLimit 474, 475
presentation 474
presentationFunc 474, 476
upperBand 474, 475
upperLimit 474, 475
variable 474, 475, 476
function
getInterpolator 474
getRulerTime 474, 477
getRulerValue 474, 477
getValue 474, 477
getValuePos 474, 478
legalRulerValue 474, 477
setInterpolator 474
setLimitModifier 474, 478
toBack 474, 477
toFront 474, 477
tr 478
getInterpolator 478
setInterpolator 478
TrendRuler 93, 95, 99, 458, 460, 469, 470,
473, 480
attribute
rulerIsSelected 97, 480
body 93
definition 93
function
moveRuler 480
setRulerPosition 480
trendUpdated
event 333, 336
trendvar
body 103
definition 103
trendvarconfig
body 103
definition 103
TrendVariable
attribute
hi 104
hist 104, 105
lCycle 104
lo 104
type 104
TrendVariableFile
TrendLog 100
trig 436
acos 481
asin 481
atan 481
atan2 481
cos 481
sin 481
tan 481
trigger routines 333
trLog
Trend Attribute 96, 456
TrPrint 156, 158
TrPrint options 156
-? (help) 158
-a <appname> 156
-f <fromtime> 157
-h <rtmname> 157
-L <language> 157
-l <loggername> 157
-m <margins> 157
-n <columns> 157
-o <outputfile> 157
-p <printername> 157
-P <processname> 156
-s <papersize> 157
-t <timespan> 157
-v <varname> 157
trTime 453
tuning file
ProcSeeReference Manual
XXXIII
Index
printer 348
Tutorial 9
twm
window decoration 496
type
PfCreateArray 177
PfCreateVar 178
specifier 33
TrendVariable 104
window 488, 491
typeNameOf
fullName 353
U
unary - operator 22
unary ! operator 22
unary @ operator 23
unary * operator 22
unary & operator 22
unary ~ operator 23
unary expression 22
decrement 22
increment 22
ungrabPointer 337, 432
event 334, 494
ungroup 396
edit 327
unmap 396
picture 399
window 488, 492
unmapChildren 396
picture 399
window 488, 492
unquoteId 353
unselect 432
update 194, 485, 486, 489
window 488, 493
updatedVariables
p3simTalk 138
updateMode 395
picture 69
Trend Attribute 96
updatePicture 396
picture 402
window 488, 493
updateResources 485
updateShape 431
updateWindows 485, 486, 489, 496
XXXIV
upperBand
TrendPlot 96
TrendPres 474, 475
upperLimit
TrendPlot 96
TrendPres 474, 475
User’s Guide 9
useResourceStyle 419
usrConnectFunc 226
usrFuncDisConnect
PfInitialize 218, 221
utility program
controlutil 125, 127
uwm
window decoration 496
V
value 142
float constant 43
integer constant 43
p3sim 137
PfCreateArray 177
PfcreateVar 178
pTALK code 43
variable
definition 112, 112
initialization 113
TrendPlot 96
TrendPres 474, 475, 476
VariableNotExist 196
varId
PfGetTypeId 212
PfRemoveVarAction 244
varName
PfCreateArray 177
PfCreateVar 178
PfGetVarId 213
verbose
p3simTalk 138
viewableStateChanged 333
event 335
visibility
attribute 75
group 71
image 82
instance 72
shape 75, 76, 431
Visual Studio
ProcSeeReference Manual
Index
link settings 164
new project 164, 165
preprocessor definition 164
W
while statement 31
width
font 352
RoundRect 420
window 488, 489
win
PfExportWindow 192
winArch 162
link option 162
Window 329, 383, 403, 484, 486, 488
attribute
backgroundColour 488, 489
decorations 488, 489, 490, 494
ALL 490
BORDER 490
MAXIMIZE 490
MENU 490
MINIMIZE 490
NONE 490
RESIZEH 490
TITLE 490
function 490
functions 488, 494
ALL 490
CLOSE 490
MAXIMIZE 490
MINIMIZE 490
MOVE 490
NONE 490
QUIT 490
RESIZE 490
height 488, 489
mode 488, 491
parent 488, 491
theCursor 488, 491
theTitle 488, 491
type 488, 491
GROUP 492
MENU 492
NORMAL 492
TOOL 492
width 488, 489
x 488, 489
y 488, 489
function
adjustVirtualDisplay 489, 495
alwaysOnTop 488, 492
display 488, 493
fullName 488
getFrameSize 489, 495
getScreenSize 489, 495
grabPointer 488, 494
iconify 488, 492
isIconic 488, 493
isInEditMode 488, 493
isMapped 488, 493
isViewable 488, 493
lower 488
map 488, 492
maximize 488, 492
minimize 488, 492
modSysKeyBehaviour 489, 495
move 488, 492
moveCursor 489, 494
moveFrame 488, 493
name 488, 492
pan 488, 493
paste 327, 488, 493
raise 488, 492
resize 488, 493
restore 488, 492
selectAllIn 489, 494
selectShape 488, 494
setCursor 494
setDecorations 489, 494
setFocus 489, 494
setFunctions 489, 494
setWindowFlags 337
shapeFullNameAt 488, 493
sound 489, 494
thePicture 488, 494
title 488, 491, 492
translateCoordinates 489, 495
unmap 488, 492
unmapChildren 488, 492
update 488, 493
updatePicture 488
windowAt 489, 494
xSnapped 488, 493
ySnapped 488, 493
zoom 488, 493
ProcSeeReference Manual
XXXV
Index
zoomFactor 488, 493
window
body 48
definition 48
edit 327
Sim.MainWin 492
updatePicture 493
window decoration
olwm 496
twm 496
uwm 496
windowAt
window 489, 494
windowClose
event 333, 335
windowEntered 335
event 333
windowLeft 335
event 333
windowMapped
event 333, 335
windowMoved
event 333, 335
windowName 308, 382
windowResized
event 333, 335
windowUnmapped
event 333, 335
winName
PfGetWindowChanges 214
winxy2xy 396
picture 402
wmf
image 82
WOpAll 192
WOpAllUnselected 192
WOpAnyStruct 192
WOpBackgroundColor 192
WOpChangeSelected 192
WOpClose 192
WOpColor 192
WOpColorStruct 193
WOpForegroundColor 192
WOpIconify 192
WOpLower 192
WOpMap 192
WOpMove 192
WOpMoveStruct 192
XXXVI
WOpNone 192
WOpOneSelected 192
WOpOneUnselected 192
WOpPattern 192
WOpRaise 192
WOpResize 192
WOpResizeStruct 193
WOpScrollBar 192
WOpScrollBarStruct 193
WOpSelection 192
WOpUnmap 192
WOpZoomPan 192
WOpZoomPanStruct 193
workstation
HP9000/700 161
Intel 80x86 162
SunSPARC 162
worldHeight 395
class 65
picture 69, 397, 489
worldWidth 395
class 65
picture 69, 397, 489
worldX 395
class 64
picture 69, 397
worldY 395
class 65
picture 69, 397
X
x 376
attribute 489
circle 76
image 82
instance 72
Line 376
RoundRect 420
window 488
X resources 7, 131, 152
XBell 403, 496
xHeight
font 352
xMax
exportDxf 344
xRadius
ellipse 79
xRadiusCorner
ProcSeeReference Manual
Index
RoundRect 420
xReference 395
class 65
group 71
image 82
instance 72
picture 69, 397
shape 75, 431
xScaleFactor 395
class 65
group 71
image 82
instance 72
picture 69, 397
shape 75, 431
xSnap 395, 396
class 64
picture 68
xSnapped 396
picture 400
window 488, 493
xW2Time 455, 457
xwd
image 82
xy2dxy 396
picture 402
xy2shxy 431
xy2sx 396, 402, 431
xy2sy 396, 431
picture 402
xy2winxy 396, 402
xy2wx 396, 431
picture 402
xy2wy 396, 431
picture 402
xyConv 497
xyConvX 497
xyConvY 497
xyW2Time 455, 457
Trend 480
RoundRect 420
window 488
yMax
exportDxf 344
yRadius
ellipse 79
yRadiusCorner
RoundRect 420
yReference 395
class 65
group 71
image 82
instance 72
picture 69, 397
shape 75, 431
yScaleFactor 395
class 65
group 71
image 82
instance 72
picture 69, 397
shape 75, 431
ySnap 395, 396
class 64
picture 68
ySnapped 396
picture 400
window 488, 493
Z
zoom 396
picture 400
window 488, 493
zoomFactor 396
picture 400
window 488, 493
Y
y 376
attribute 489
circle 76
image 82
instance 72
Line 376
ProcSeeReference Manual
XXXVII
Index
XXXVIII
ProcSeeReference Manual