THE BIG LIBRARY: The BIG Library

  • Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files

The BIG Library

V2.2

BIG = "BIG Is GEM" - A high level GEM library.
Initial design and developement by Claude ATTARD, Maintenance by Jean LOUIS-GUERIN
Copyright (c) 1993-2010 Claude ATTARD

This library is free software; you can redistribute it and/or modify it under the terms
of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this
library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA  02111-1307 USA
Author:
Claude Attard
English translation and maintenance by Jean Louis-Guerin

Preface by Jean Louis-Guerin

First of all a big thank to Claude ATTARD for the "BIG" work he has done on the BIG libray and for donating the library to the public domain.

A large part of the documentation is the translation in English of the original BIG library documentation written by Claud ATTARD. I have tried to stay as close as possible to the "spirit" of the original French text. However the documentation has been completely reorganized and several new chapters, pictures, links, etc. have been added. This documentation has been generated using Doxygen and HTML Help Workshop and is released in html and compiled html (.chm) format

I am not a native English speaking person and therefore the text might not be in perfect (or even good) English. Please feel free to contact me if you find mistakes.

Note:
The section on BIG2_DOC of the original document have been removed.

BIG Table of Contents

  • Presentation of the BIG Library
    This chapter provides a high level presentation of the functionality of the BIG library and tools required to use it. It also presents the motivations and the history of the library as well as acknowlegment to contributors.
  • GUI of BIG Applications
    This chapter presents the GUI of Application develloped with BIG. It can be used as a skeleton to write the GUI section of a user's manual for applications using BIG.
  • The BIGdemo: BIG Guided Visit
    This chapter gives a detailed description of the demo program provided with BIG release. The program demonstrate most of the functionalities that can be achieved easely with the BIG libray.
  • The BIGdemo Source
    This chapter details the source of the BIGDemo program
  • BIG Reference Manual
    This chapter gives detailed programming information on usage of the BIG library. It is the most important part of the documentation for programmers using BIG.
    Note that programming information can also be accessed from the Constant page The BIG Constants, the Type definition page The BIG Defined Types, the Global variables page The BIG Global Variables, the Functions page The BIG Functions Library, as well as from the big2.h description page.
  • BIG Revision History
    Revision history of BIG
Revision
2.2
Date
February 2010
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: The BIGdemo: BIG Guided Visit

  • Data Structures
  • Files

The BIGdemo: BIG Guided Visit

Author:
Claude Attard
Translation by Jean Louis-Guerin

Table of Content

  • BIGdemo presentation
  • A first simple form
  • A more complex form
  • An Alert Box
  • A first small form in window
  • Special handling of Windows
  • A large form in window
  • A hierarchical menu
  • An Image Window
  • A Graphic Window
  • A window with a menu
  • Context menu
  • Timer Management
  • Iconification of windows
  • Bubble Help
  • End of the visit

BIGdemo presentation

This program does not perform anything in particular. It is just there to show the possibilities of the BIG functions and how they are used. Do not hesitate to study the source attentively as all the major functions of BIG are presented there (see The BIGdemo Source). The demonstration runs in all the resolutions, but it is not adapted to low resolution. The icons will be deformed and certain things will be strange. For example the menu and certain forms which are too large (and which could result in crash). I simply wanted to show that BIG makes it possible to develop for all resolutions, but I did not want to complicate the source of the demonstration.

Now launch BIGdemo: A desk with a frame containing two texts, an icon, and a menu bar with three headings is displayed.

If an image file called "BIG2DEMO.IMG" is located in the same path as the program, this image is loaded and displayed (even if you are running in a color) as the desk background image. The icon and the frame containing the texts can be moved. The icon can be selected by a simple click, and deselected by clicking anywhere outside the icon.

Note:
In this guided visit, the keyboard keys will be describe between the "[" and "]" characters like [this]. The texts of the buttons, options, forms, etc, will be presented between single quotes, like 'that'.

[return to BIG toc] [return to Demo toc]

A first simple form

Click the 'BigDemo Info...' option of the 'BIGdemo' heading menu.

An information form pops up displaying the version number and some information about BIG.

You can move this form on the screen by clicking the mover button in the upper right corner (it has the shape of a folded down corner) an by keeping the button of the mouse depressed. The displacement mode for this form is using a phantom box, i.e. the form disappears for the time of displacement and is replaced by a rectangle with the same dimensions.

Click the button 'Contact' or press the [Help] key. Another form is displayed on top off the first. It gives my address (JLG: note that this address is out of date!) if you wish to contact me or receive the complete sources of BIG. Leave this second form by clicking anywhere inside the form or by pressing the [Return] key.

In the information box, click the button 'Thanks'. A third form appears, presenting few words of thanks to buddies, who helped me to carry out BIG with their advices, their work, their suggestions or their encouragements. As previously, leave this form while clicking anywhere inside or by pressing the [Return] key.

Now leave the information form by clicking the 'Return' button or by pressing the [Return] key. To get to this form, you could also have also used the menu shortcut by pressing the [Control + B] keys. If you replace the string "^B" of the menu option by, for example, "^F", using a resource editor, you can now press the [Control + F] keys to call this same option. Thanks to BIG, it is not necessary to recompile the program so that new keyboard shortcuts can be used!

[return to BIG toc] [return to Demo toc]

A more complex form

Lets us move to the second menu, noted 'Forms'. Click the option 'Movable Form' (or press [Alternate + Control + L] keys). The displayed form is definitely more complex than the first one. Move it around the screen by using the form "mover" button in the upper right corner. This time the form moves "in real-time", i.e. the complete form with all its contents moves following the movements of the mouse instead of the phantom box used in the previous example. The title of this form uses graphical bold and underlined attributes. The form has a "3D" aspect (if you are running on a machine with at least 16 colors).

Under the title two groups of radio buttons appear into two frames called "Frame 1" and "Frame 2". They are displayed as small round buttons with a text either on the right, or on the left. One of the characters in each text is underlined (and in red if you are using color display). If you press the [Alternate] key at the same time as one of these characters, the button acts as if it had been clicked.

Lets now look at the shaded "Drop-down" button.

When you click on it, a drop-down list with two columns of options opens, it is placed under the button. If you had moved the form so that there is not enough space for it on the screen the display of the list would be shifted. The drop-down list can be used exactly like a pull-down menu. It can contain several columns of options. If you are running in colors mode (with at least 16 colors), the bottom of the options changes to yellow when the mouse comes above them.

Select one entry. Its text is copied into the button. Click again this button: this time, the list is positioned so that the position of the selected option and the corresponding button are placed under the cursor (if there is not enough room, the list display is shifted), and this option is already check marked.

Let’s now click the icon.

A new list is displayed, but this one is composed of icons. If you choose one of them, its drawing content is placed into the button.

There are two other ways of changing the selection of a drop-down list:

  • Perform a "Shift + click" on the button, or
  • click on the small "following option" icon (with two circular arrows).

The option following to current one is selected (to be exact, the first active). When the end of the option list is reached, it starts again from the beginning. If the text (or the image) of the button does not correspond to any of the list options, the first entry is selected.

The two checkbox buttons are displayed as a small square with the text of the button on the right or on the left. If the button is selected, a big "X" is displayed in the square. Here also a character is underlined (and eventually red), to announce the presence of a keyboard shortcut.

Clicking the 'Alert' button displays a "BIG type" alert form, i.e. an alert form that can also be moved on the screen. However, in this case, it moves as a phantom box. Indeed, displacement in real-time requires to save the entire screen in a buffer. BIG has only one buffer of this type (to limit memory usage) and it is already occupied for the main form. Therefore, the alert form is moved as a phantom box. We will get back in detail on this subject. The interest of this 'Alert' button is that it is linked to a function that displays the alert form by using a "function pointer". When this button is clicked the function is called automatically without the need to carry out a whole series of tests! It is a concept close to object oriented programming which is one of the benefits of BIG. We will talk about this later on!

The first of the two editable fields has a small arrow of each side. Type some text in this field, and continue to type after reaching the end of the field. The text is shifted to the left allowing you to continue to enter text! You can enter up to 50 characters in this field. In fact, BIG authorizes creation of extended editable having up to 255 characters. If you continue to type after reaching the maximum size, the last character is replaced by the one you just typed. If you type some text in the middle of the field, it is captured in insertion mode, unless the maximum size of the text is reached. In this case, the capture is done in replacement mode.

When clicking anywhere in the field, the cursor is positioned at this place. If one clicks at the extreme right of the field (after the already entered text), it is positioned at the end, and if one clicks at the extreme left, it is positioned at the beginning. The left and right arrow keys can be used to move the cursor. When the cursor has reached the end (or the beginning), the text is shifted. When used with the [Control] key, the arrows keys bring the cursor to the beginning of the preceding or following word (no shifting is done in this case). When used with the [Shift] key, the cursor is brought all the way to the left or all the way to the right of the editable field. If the cursor is already on the first or last position of the field, the text is shifted until the first or last character of the entire text. Lastly, when clicking on the small arrows (on both side), and holding the mouse button down, the text is shifted, even if the cursor was previously into another editable field.

The second editable field is more traditional, but it is using small size characters, that the GEM is unable to manage correctly. This editable offers the same enhancement with regard to the displacement of the cursor, except of course the shifting of the text, since it is not an "extended" editable field.

The combinations [Shift + Up_Arrow] or [Clr] bring the cursor on the first field of the form. The combinations [Shift + Down_Arrow] and [Shift + Clr] brings it on the last field (following the classification order of the objects in the resource).

The [Down_Arrow] key and [Tab] bring the cursor on the following field of the form. The [Up_Arrow] key and [Shift + Tab] brings it on the preceding field (following the classification order of the objects in the resource).

Place the cursor on the second editable field, type some characters, and press [Control + C] keys. Bring then the cursor on the other editable and press the [Control + V] keys. The text of second field is copied into a buffer by the first operation, and is pasted by the second. Type a rather long text in this large editable field (one with thirty characters for example), copy it with [Control + C] and paste it in the other with [Control + V]. The text being too long, the end is truncated. There is another keyboard shortcut which relates to the editables, it is [Control + X]. The text is also copied to be able to be pasted elsewhere, but it is also removed from the field of origin. This is a "cut" operation. In a program developed with BIG, all the editable fields of the program are eligible for copy, cut, and paste operations even if they are not in the same form.

The 'Confirm' button is, as usual, activated by the [Return] or [Enter] keys. The 'Cancel' button is activated by the [Undo] key, and the 'Help' button by the [Help] key. The keyboard equivalents for these three buttons are handled directly by some routines of BIG. It is enough to change the attributes of these buttons in the resource to modify these equivalences. The first two buttons also have a keyboard shortcut indicated by an underlined character (eventually in red), for those which prefer this method.

The 'Help' button calls another centered box which is displayed on top of the first. As for the information form, the management of this call is part of BIG, and is fully "automated", without intervention of the main program.

Change some parameters of the form, then confirm. Bring back the same form. Notice that your modifications were recorded. Change them again, but this time hit 'Cancel' and bring again the same form. BIG has restored the previous values. BIG takes care of saving and the restoring the "state" of a form automatically (or almost).

Last experiment with this form: while keeping depressed the [Control] key, move the mouse pointer above the objects in the form. On some object a bubble-help is displayed with a short explanatory text. These bubbles are entirely managed by BIG. It is enough, like will see later, to mark an object in a particular way and to place the help text in a free string of the resource. That mechanism provides a nice way to display a simplified on line help.

[return to BIG toc] [return to Demo toc]

An Alert Box

Click the option 'BIG Alert' of the 'Form' menu.

The displayed Alert Box can be moved in "real-time" (since this time the save screen buffer is unoccupied), like the form presented earlier (A more complex form). A Big alert box works like a standard GEM alert box but can be moved, and offers a choice of more icons.

[return to BIG toc] [return to Demo toc]

A first small form in window

Lets put aside the 'Quit' option of the 'Forms' menu (we are only starting the visit!) and lets move to the 'Windows' menu.

The first option, 'Small Form' displays a form in a window. This has a big advantage: the management of the program is not blocked. For example the menus are still active. Try for example to call back the information form. Everything works normally ... with one detail: to call this form, you had to do it using the menu option, because the menu keyboard shortcuts do not work anymore. Indeed, this small form in a window contains editable fields. In this case, the input from the keyboard is directed to this form. There is an exception, as in all the rules, the keyboard shortcuts of the selectable buttons with an underlined character work normally, as well as the operations to copy, cut, and paste. If this form had radio-buttons with keyboard shortcuts they would also work. Simply, the search for the keyboard shortcuts is not done in the main menu when we are in presence of a form in a window that has one or several editable field(s).

In addition, this window has a slightly different aspect from what we are used to. In particular, a strange button is located at the top right corner of the window, resembling to closing parenthesis mark. When several windows are open at the same time, this button makes it possible to move to the next one, even if this one is entirely hidden under the others (and therefore inaccessible). Later we will go into more details about the new buttons of a window. For now let’s concentrate on the content of this form.

Two of the four editable fields of this form are "extended entry fields" which authorize the capture of 30 characters, but only 10 of them are visible. Two use small font, and the other two use large font. The editable fields of this form use validation filters. The first two ("Field 1" and "Field 2") authorize the capture of any kind of characters. "Field 3" allows only capture of numbers and "Field 4" only spaces, numbers and letters.

This form can be used to change the pattern and the color of the desk. It has two drop-down buttons which uses this time objects of type box (and not of type text or the images like previously). Choose a patern and/or a color and press the [Return] key or click the button 'Apply'. The desktop is modified but the window remains open. Choose another pattern and/or color and click this time the button 'Confirm'. The desktop is again modified but this time the window is closed.

The existence of a form in a window implies the presence of two new buttons: 'Appy' and 'Reset'. They correspond to the usual 'Confirm' and 'Cancel', but they do not close the window. This is extremely practical to modify parameters without having to call back the form if you do not find immediately the right value for the parameters. The visualization of the effect is immediate, but the form remains available for another modification. If the window is closed by clicking in the closing button in the top left corner, this corresponds to the 'Cancel' button.

As previously, BIG manages automatically these buttons, while recording and by restoring if necessary "the state" of the form.

The button 'HELP', which calls a help form, works the same way as the one we have already seen. Bubble-help are also available and can be displayed by pressing the [Control] key while walking the mouse over objects in the form.

[return to BIG toc] [return to Demo toc]

Special handling of Windows

Let’s now click on the 'Large form' option of the 'Windows' menu.

A new form is displayed in a window but it is too large to fit on the screen. Here we suppose that you do not use a big screen, nor of big virtual screen, like BigScreen or ScreenBlaster for example. The window is therefore equipped with sliders so you can move its content. It can also be moved using the keyboard keys: the four arrow keys are equivalent to a click in the corresponding arrow of the window, and the [Shift + Arrow] are equivalent to a click in the corresponding grayed part of the sliders. The [Esc] key corresponds to the full opening button and the combination [Shift + Esc] to the window closing button. This capability of handling the windows with the keyboard is done by some routines in BIG, but is not necessarily available to all windows. It should be specified during the creation of a window that this kind of management is requested. There is a last keyboard equivalent for the windows: the [Control + Tab] keys bring to the front the following window (if there is one), which was in the back (you can test, if you did not yet closed the small form). This possibility is always active, even if the management of the window by the keyboard was not requested, and even if the form in window contains editables fields.

The management of the window (displacements, scrolling, resizing, etc.) is automatically managed by BIG.

Lets look at the characteristics of this window. It has a resizing button in each of its corner, and not only in the bottom right corner as usual. Try to test them. The closing button is as usual in the top left corner, but slightly shifted to the right because of one resizing button.

There are four buttons on the top right corner:

  • The first one is used to iconify the window, i.e. "to temporarily deactivate it" by giving it a small size, but without closing it. We will speak about this later.
  • The following, that we already met, is used to "cycle" the active window. Click it, to activate the small form window (if you did not close it otherwise or reopen it). A [control-click] on the displacement bar produces the same effect.
  • The third is used to bring the window to its maximum size which is in general the size of the screen (the size of the form in this case). The same result can be obtained by double-clicking on the displacement bar.
  • The last button is another "Sizer", for resizing the window.

Notice that when the window is resized or moved, the shape of the mouse pointer changes. It is certainly not very useful, but it is pretty!

At the bottom of the window, on each side, you see two other Sizers. The vertical and horizontal sliders are decorated with a small double arrow (only decorative). When you move them, the mouse also changes of shape.

The handling of windows in BIG is similar to that of windows in GEM. But they have (in addition to the new buttons) extended functionalities. Open simultaneously the small and the large form in windows and place the small form in front. Click then on the displacement bar of the large form. You can move it as if it was in front! You can also resize it, move its sliders, click its arrows or sliders, iconify it, etc. All the buttons are active, as if the window was in the front. The two only restrictions relate to the double-click and the control-click on the displacement bar (respectively "full/restore" sizing and cycling of window). They are active only on the front window.

To move or change dimension of a window (in the front or not), it is possible as usual to hold the mouse button depressed and to release it with the new position. But it is also possible to do a normal click on the displacement bar or Sizer. The phantom box appears then, and a new click "drops" the window to its new coordinates. Each one, according to its preferences, will use one or the other method.

There is however a small difference in behavior according to whether you are in a multi-tasking environment or not. In multitasking, to move or to change the size of a window in front, it is mandatory to use the method with two clicks: one to start the operation, another to finish it. For the window not in the front you have the choice. We will get back to the reasons for that in the chapter about working in a multi-tasking environment (BIG in a multitasking environment).

To bring indeed this window to the front, you will have to click in its working area or to make a [Shift + Clic] on one of the edging elements.

When you move or change size of a BIG window, a "phantom image" moves at the same time, following the mouse, showing constantly the modified coordinates. The most external rectangle shows the total window frame. The interior rectangle, which is additionally crossed, shows the coordinates of the work area. Thus, the new position of the window can be selected with precision.

Lastly, BIG windows can be moved outside of the screen, not only to the bottom and to the right as usual with GEM, but also to the left.

After this rapid presentation about windows let’s look in more detail to the large form in a window...

[return to BIG toc] [return to Demo toc]

A large form in window

This large form does not contain editable fields. Indeed, since this window has sliders and button for changing size, the editable field could be located "outside" the visible part of the window. In this case, its cursor should not be drawn, the input of the text temporarily impossible, etc. The management of the form would be considerably more complex, and the size of the programs would therefore increase consequently.

I thus chose a compromise: It is possible to place editable fields in windowed form, but BIG considers that they are always in the visible part. In other words: If you place editable in a form in window, this window should not have sliders and should not be resizable. In counterpart, the search for the keyboard equivalents will also be done in the menu. For example try to press the [Control + B] keys, the information form is displayed.

This form contains three groups of radio-buttons with their keyboard shortcuts, as well as two checkbox buttons, also with their keyboard shortcuts. It also includes three drop-down list buttons: two with text, and one with icons and a scroll list with text. Some of these controls allow to change the texts and the icon of the desktop. As in the "Movable Form" a double-click on a radio-button or a selectable button also activate the "default" button of the form.

Let us examine in detail the behavior of the two large list button. The first one, noted 'Drop-down 1', brings a drop-down list made up of only one column of options, but they are too numerous to display them all. In that case BIG creates automatically a scrollable list. It is a list provided with scroll arrows at the top and the bottom. As soon as the cursor of the mouse is placed over one of these arrows, the options start to scroll in this direction, until the end, without it being necessary to click. The list is automatically placed under the calling button if there is enough room to display at least four options and the two arrows. If not, it is displayed from the top of the desk. The option which corresponds to the text of the button (if there is one) is "checked", and it is displayed in the first position in the list (unless it is one in the last entries of the list, in this case it can be shifted).

The second drop-down button is noted 'Scroll-list'. Click on it. The list which appears (the same one as previously, in fact!) only displays eight options, but it is decorated of a complete slider bar located on his right side. Click on one of the up or down arrow to move the contents of the option menu in this direction. If you click on a grayed part of the slider, eight options are shifted at a time. Lastly, by clicking the slider and keeping the mouse button depressed, you can make scroll the contents of the list in real-time. As previously, the option corresponding to the text of the button is checked and it is placed in first position if possible. The list is placed under the calling button if there is enough place, if not above. If the list associated with this button have less than nine options, it is a "normal" drop-down list which is displayed.

For the needs of the demonstration, the buttons 'Drop-down 1' and 'Drop-down 2' allow to change the texts appearing in the box of the desk, and the graphical drop-down list makes it possible to change the icon.

The button 'HELP' calls an on line help form. We still find our four buttons 'Apply', 'Confirm', 'Reset' and 'Cancel', and the bubble-help, is activated by pressing the [Control] key.

There is still another possibility to handle the forms in windows. Open the small and the large forms in windows, and click on an object of the form of the window which is "behind". The reaction is the same one as if the window had been in front! On demand, BIG can handle the form in a window whether it is located in the front or behind. To put this window in front of the others, it is necessary either to click on the root-object (the background of the form), or to make a [Shift-Click] anywhere inside. So the possibility of making a [Shift-Click] on drop-down lists to activate the following option only works for window in behind, if not it is activated.

[return to BIG toc] [return to Demo toc]

A hierarchical menu

We calls "hierarchical menus" the "sub-menus" which can be displayed on the right or on the left of a normal menu when the mouse passes over some options of this menu. BIG provides an automated way of doing this, taking in charge the management of these hierarchical menus, as well as the possible keyboard shortcuts. If the form being used for hierarchical menu is higher than the desk, it is automatically transformed into scroll-menu (this is not the case in the demonstration).

Bring the mouse pointer on the 'Normal window' option of the 'Windows' menu. It has a small arrow to remind the user that this option has a hierarchical menu, and it indicates from which side (towards the right side or the left side) the sub-menu will be displayed. After a short time of approximately half of a second, the hierarchical menu opens. If you leave the option by the opposite side of the sub-menu, or if you move the cursor above or below the sub-menu, it disappears.

The hierarchical menu has three options 'Text...', 'Image...' and 'Histogram...'. Bring the mouse over the sub-menu. It is used like a normal menu. It disappears if you click an option, or if you click outside, or if the cursor of the mouse passes to another option of the main menu, or if it passes above or below the sub-menu. This is necessary in order to prevent that another menu is displayed on top of our hierarchical menu. So it is forbidden to place a hierarchical menu as the first option of a pull-down menu. The routine that looks for keyboard shortcuts in the menu also looks in the sub-menus in order to activate the corresponding option if there is one.

[return to BIG toc] [return to Demo toc]

A Text Window

Click the option 'Text...' of the sub-menu or press [Control + T]. A file selector object appears so that you can choose a text to be displayed in the window.

Note:
Watchout, the demonstration is only able to manage an ASCII text with "CR/LF" at the end of each line, and the lines have a maximum length of 80 characters. Do not try to display somethings else or you could have bad surprise as no checking is performed!

The window which opens is designed to display the text. It comprises all standard attributes of a BIG window (sliders, multiple Sizers, etc.), but no information bar. It also contains a "Toolbar", which is a small size form placed at the top. Bubble-help are linked to certain objects of this toolbar.

Look at the "slider arrows" of this window. They are all grouped in bottom right corner! This is optional in BIG, but this can greatly improve the ergonomic. Indeed, the user does not have continuously move the mouse throughout the screen to click on the various arrows. This possibility does not exist for the windows forms (but they are seldom displayed with sliders and arrows in practice).

This window, like the one of the large form, can be handled through usage of the keyboard. Moreover, each time the cursor of the mouse enters the working area of the window, it takes the shape of the text-cursor (two brackets back-to-back), and regains the shape of an arrow as soon as it leaves the window. This behavior, like the management by the keyboard, is automated by BIG and must be declared during the creation of the window. It is not a vital function, but it is a nice feature.

All the basic functions of this window are managed by BIG! The only thing which is left to the developer is the display routine itself as it strongly depends on the way the textual file is stored in memory, and of its content. The display routine of BIG2DEMO.C is extremely simplified (and even simplistic!), but it is sufficient in this situation. BIG take care of all other events: management of the redraws, displacement by page or line, new display when a slider is moved, full opening and restoring of size, resizing, displacement, etc. All the GEM messages are treated without involvement of the main program (i.e. the part that the programmer must write)! Only for that, BIG is a great help.

The toolbar allow to modify the way the text is displayed. The three radio-buttons 'Left', 'Center' and 'Right' allow justification of the text in the window. The 'Reverse' button change the display of text between black text on white background and white text on black background. The keyboard shortcuts of these buttons are active as in an ordinary form.

The large drop-down list button makes it possible to choose the SpeedoGDOS character font, if you have installed it on your system, or the system font. Lastly, the other drop-down allow to choose the size of the characters (this can look ugly when used with the system font). The Speedo font being proportional for the majority, this can give imperfect results in the horizontal direction, especially with large fonts, as well as incorrect horizontal scroll of the window. I did not want to complicate the demonstration by designing something perfect, but just to show what few lines of program could offer. Thanks to the many capabilities of BIG.

Note that the objects of the toolbar can be handled even when the window is behind, as we had done with the two forms in windows.

[return to BIG toc] [return to Demo toc]

An Image Window

The second option 'Image...' of the hierarchical menu displays a window containing an image. The file selector propose to choose a non compressed Degas image (with the extension “pi?”). Do not try to load another type of image, nor one image with a different number of colors plans, because the demonstration does not check anything.

On the other hand, BIG manages the pallet. The pallet of the loaded image becomes the active pallet. As soon as you click on another window (even if it belongs to another program or accessory), or that you close this one, the default pallet becomes active again.

This window is also easily handled with the keyboard. The mouse takes the shape of a hand in the working area. To manage the display of an image with BIG, you dont need to write the display routine (as for the text)! Indeed, the management of rasters (block-images) is standardized in the VDI by the means of MFDB (Memory Form Block Definition) structures. The image, whatever its size, its format, its resolution, etc, is stored in a buffer in memory which is reserved at load time. It is enough to indicate to BIG the address of this buffer so that it can take care of everything else!

[return to BIG toc] [return to Demo toc]

A Graphic Window

The option 'Histogram' displays a window with eight histograms of different sizes, randomly calculated each time the function is called. It also has a line of information, all the new types of windows buttons, but it has no sliders.

If a window is already opened behind and the user asks to open it again, it is brought to the front by BIG.

[return to BIG toc] [return to Demo toc]

A window with a menu

The option 'Window with menu'(or [Shift + Control + M]) opens a window which contains a menu! This possibility of placing menus in windows allows to develop very ergonomic software. For example, in a drawing program, each window can contain an image, and a menu allowing choice of the color parameters, the work tools, etc. corresponding to this image. A toolbar could also be used, but the number of tools would likely increase its size and therefore reduce the work area.

Another interesting use of the menus in window is for desktop accessories. An accessory cannot place a menu bar in the top the screen (I know there are exceptions...), and this is bad. But it can open a window and it is possible to place a menu in this window!

Naturally, BIG takes care of everything. The menu is "attached" to the window and follows it in its displacements. If the window becomes too small so that one cannot reach the menus on the right, the two small arrow buttons on the left make it possible to shift the menu. Try to click on them.

The menus are not displayed automatically, at least not continously. Click on one of the titles 'BIGdemo', 'Options' or 'Alerts'. This time, the corresponding menu is displayed, and now the whole menu bar works as usual. You can move to the other menu, select one option, etc. the main desk menu is "blocked" during this time. Choose an option or click outside to close the menus. All becomes normal again. The menu 'Alerts' even offers a hierarchical menu!

BIG also deals with the keyboard shortcuts. If a window is in the front (window activated), it checks in the menu if an option corresponds to the keyboard shortcut. It is recommended that there is no identical keyboard shortcuts in the main menu and in the window menu, but if this is the case, the window one has the priority. As soon as one correspondence is found, search stops. Search is also carried out in the hierarchical menus if there are some.

The menu is created in the resource editor like a normal menu. You can remove the options reserved for the desktop accessories, or use them. Indeed, nothing prevents you from placing in the first menu as many options as you wish, and to use them normally. This is obviously prohibited in the case of the main menu, since 6 entries are reserved for the desktop accessories. But in the case of a menu intended for a window, you can make whatever you want (it is not the case in this demonstration). BIG automatically takes care of "windowing" this menu.

The option 'HELP' is the same as the one in the main menu and displays the same form. The option 'Alert' displays a BIG Alert that can be moved. Moreover, the option is alternatively "checked" and "unchecked" each time it is called.

The option 'Load image' makes it possible to load a non compressed Degas image (same remarks as previously) and to display it in the window (there too, the pallet is managed). Try to load an image with a pallet in the window "image", and another with a different pallet in the window "menu", and open another window, "text" for example. Move from one window to the other and observe the current pallet.

Here again, BIG deals with everything: handling of the window from the keyboard, shape of the mouse in the working area (a fine cross), sliders, refresh, pallet, resizing in all directions, etc. If we were displaying text instead of an image in this window, we would simply have to write the display routine.

Lastly, the 'Icons' option is provided with a hierarchical menu. Contrary to their counterparts in the main menu, they can be placed, as the first menu option. If the hierarchical menu is higher than the desktop, BIG automatically transforms it into a scroll-menu. This sub-menu is used to display an alert box (always the same one), with the selection of 9 shapes for icons (as proposed by BIG), plus a 'without icon' option. One can also display them by the keyboard shortcuts. Some of these options work with function pointer, others not. We will get back to this latter.

[return to BIG toc] [return to Demo toc]

Context menu

We are not done yet! Click with the right button of the mouse. A popup menu appears, centered on the position of the click (or shifted if one is at the edge of the screen)! This context menu is optional. BIG manages the right button of the mouse, and transmit the message to your program when he is clicked, and if you wish it can automatically manage a context menu like this one.

In the example, this context menu includes the various options of the main menu. Only one restriction: it is not possible to place hierarchical menus related to options of a context menu. On the other hand, BIG transforms it into scroll-menu if it is too high.

[return to BIG toc] [return to Demo toc]

Timer Management

Another action is carried out by BIG, which is not apparent in the demonstration. Each time “nothing” happen, no event keyboard, neither click, nor handling of window, etc... BIG “returns the control” to the main program. That occurs, in normal condition, several times per second. It is then possible to benefit from this to do something as a pseudo background task, for example to decrease a counter to trigger an automatic save, to watch the serial port, to send text to the printer, etc. But under MultiTOS, it is necessary to be very careful with this kind of function.

[return to BIG toc] [return to Demo toc]

Iconification of windows

Sometimes the screen may get cluttered with windows, and this may harms the ease of use. Closing some of them is not always the good solution, because reopening them may takes long times. For example if the program must reload the contents from a file. The most elegant and convenient solution is "the iconification of the windows". The AES only provide this capability since version 4.10. A new window button has been created for that matter: the “SMALLER”. When this button is clicked, the window is reduced to a size of 72 X 72 pixels, and all its other attributes are temporarily cancelled, except the title and the displacement bar. Moreover, the title is written in small characters.

BIG Windows can also have a Smaller button (it is the first of the 4, on the top right corner of the windows). It represents a small triangular arrow going towards a small square window. And this capability of BIG is active on all operating system versions.

To desiconify the window, it is necessary to perform a double-click on it. Another message is then sent, and the application can require that GEM restore the window with its old position and its old attributes.

Last possibility: a [Control + click] on the Smaller involves a "ALL_ICONIFY" message. All the windows are then iconified in only one icon. The opposite operation is done by double-clicking on this iconified window.

In the case of a iconification of all the windows, BIG carries out a iconification of the window which was "Control clicked", and close the other windows of this application which are open at this time. If the user opens other windows and redo an "all iconification", another "all icons" is created. At the time of a double-click on an iconified window, the windows are restored as before.

Try these operations on the windows of the demonstration. You will note that the iconified windows can be drawn with different contents, which are active only when the window is iconified. The demonstration displays different small icons, whether the window is a form or a window of another type. As we have already talked about, it is possible to iconify a window located behind.

[return to BIG toc] [return to Demo toc]

Bubble Help

Open or bring to the front the large form window. While maintaining the [Control] key depressed, walk the mouse over the various objects of the form. Bubbles similar to those of a cartoon are displayed, showing a text of several lines in connection with the object under the mouse!

They are called "bubble-help" because of their shape and of their function. Other bubbles are proposed in the small form in a window, in the ToolBar of the Text window and in the free form. Their display and their management are automated thanks to BIG.

[return to BIG toc] [return to Demo toc]

End of the visit

Click the 'Quit' option of the 'Form' menu. BIG is given the responsibility to close all the windows and to release the various memory buffers which it had reserved, the resource, etc.

We can now have a first glance to the BIG2DEMO.C source: it is surprisingly small in regards to the number of functions which the program offers. Admittedly, this program is just a demonstration; it does not carry out anything concrete, but it has a very complete interface (probably a real program will never use all these elements at the same time), with many new features.

We have done a quick review of what BIG can do for a programmer: to deal with quantity of things which are done once for all. In a program “under BIG”, most of the interface programming is done by some routines of BIG. The developer only has to take care of items specific to its application. As for the structure of this interface, it is mainly located in the resource itself, as we will see very shortly.

What is not seen in the demonstration is the fact that, the size of the source (and therefore the time of programming!) decrease in great proportions, due to the fact that certain functions are directly and automatically called (thanks to the function pointers).

Do two more experiments:

  • First rename the file BIG2DEMO.PRG in BIG2DEMO.ACC, copy it (with the RSC) to the boot partition, and performs a reset of the system. The demonstration can now run as a desktop accessory! Only the desktop has disappeared. The main menu is now placed in a window, but everything else works like before: the various windows, the keyboard shortcuts, the iconification, the forms, etc.
  • Last experiment, place BIG2DEMO.PRG in the AUTO folder, and do a reset again. During the boot, a message is displayed to let you know that the program cannot be launched this way. Indeed, it is not possible to execute a program under GEM from the AUTO folder and BIG applications are by definition GEM applications. Instead of crashing (this is usually what happens) BIG warns you.

[return to BIG toc] [return to Demo toc]

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: GUI of BIG Applications

GUI of BIG Applications

Author:
Jean Louis-Guerin

Table of Content

  • Preface
  • Graphical User Interface
  • Desk
  • Menus
    • Menu Bar
    • Hierarchical Menu
    • Context Menu
  • Icons
  • Windows
  • Manipulating Windows
    • Activating a window
    • Moving a Window
    • Closing a window
    • Resizing a window
    • Scrolling windows content
    • Iconifying a Window
  • Forms (Dialog Boxes) and Alert boxes
  • Control Elements (Widgets)
    • Mouse Pointer
    • Draging Elements
    • Moving a Form
    • Window Toolbar
    • Editable Field
    • Selectable Buttons
      • Checkbox buttons
      • Radio buttons
    • Drop-down list
    • Scroll list
    • Bubble help

Preface

Big is used to design Application GUI. In this chapter we will describe in details the different GUI elements available for an Application developped with BIG. We will therefore see the enhancements of "BIG apllications" compared to standard "GEM applications". The text provided here can also be used as a "skeleton" to describe the GUI of your final application.

As many different terminlogies are used to describes the elements of a GUI it is also useful to define the terminology used throughout this document.

[return to BIG toc] [return to GUI toc]

Graphical User Interface

A graphical user interface or GUI is a type of user interface that allows people to interact with programs in more ways than typing. The actions are performed through direct manipulation of the graphical elements.

Designing the visual composition and behavior of GUI is an important part of software application programming. Its goal is to enhance the efficiency and ease of use for the underlying logical design of a program, a design discipline known as usability.

A GUI is composed of Structural and Control elements described below in the context of GEM and BIG library

[return to BIG toc] [return to GUI toc]

Desk

When starting an application develloped with BIG the application desk appears on your screen. The desk is the starting point for everything the user do with the application. The application desk cover the totality of the screen.

It typically contains the following elements:

  • The first element is the desk background. The background can either be a solid color, or a shaded background with pattern, or an image. It is possible to change the the desk background, for example at the request of the user, during execution of the program.
  • The desk can also contains one or several optional icons. These icons can be placed by the application or can be the result of user operations. For example an iconified window. These icons are commonly used to open windows at user request.
  • Most applications will also have an optional menu bar located at the top of the screen. The menu bar displays one or several heading(s) and each of them has its own optional drop-down list, from which user can select options. The menu bar is usually used to start commands but can be used for other purpose (e.g. to display program information)
  • One of the most common element found on application desk is the window. Windows are used to display information or interact with the user. Several windows (number vary based on the version of TOS) can be opened at the same time by the application or at request of the user.
  • The desk can display Forms (also called Dialox boxes). Forms are used to interact with the user. They are commonly used to allow the user to specify information to the program.
  • The desk can also display Alert boxes. Alert boxes are displayed by the program to provide important information to the user. Alert boxes often provide selectable options to get feedback choices from the user. For example 'Continue' / 'Cancel'
  • Finaly the desk will always display a mouse pointer (cursor). The mouse pointer is a small icon. Its shape is selectable and can change in the course of the program depending on the activity or location on the screen. For example the pointer can be changed to a busy bee icon to indicate that the program is working, or it can be changed to an I-bar to indicate an insertion point for text entry. The mouse pointer allow the user to interact with the elments of the GUI. For example to select an option, to drag an icon, etc.

[return to BIG toc] [return to GUI toc]

Menus

Menus allow the user to execute commands by selecting from a list of choices. Menu Headings and Options are directly selected with the mouse pointer. Keyboard shortcut may also be used to directly select menu options. Menus are convenient because they show what commands are available within the software. This limits the amount of documentation the user need to reads to understand the software. BIG support several types of menu detailed below.

Note:
BIG allows the usage of menu bar ("flat" and hierarchical) in Windows

[return to BIG toc] [return to GUI toc]

Menu Bar

The menu bar is usually used to start commands but can be used for other purpose (e.g. to display specific information).

A menu bar is displayed horizontally across the top of the application desk and/or along the tops of some windows. The menu bar displays one or several heading(s) and each of them has its own optional drop-down list of options, from which user can select. The list of options are only revealed when the user position the mouse pointer over the menu heading. The heading highlights and the option list unroll under the selected heading. The entry under the mouse pointer are displayed in reverse video. The user is able to select an options within the list. Options in dark text are active and available for use. Options in light text are inactive. Inactive options are not available for use at the time you display the menu. When the user clicks elsewhere the content of the menu will disappear.

The first menu heading (on the far left) of an application menu bar is often labeled Desk. This menu is divided into two sections. The top section contains entries specific to the application. For example option to display information about the application you are working with. The lower section lists active desk accessories. To be active, a desk accessory file must have the extension .ACC and must be on the root directory of drive C (or on a floppy startup disk in drive A) when the computer is switch on.

Most of the commands entries listed under the menu headings can be selected by using keyboard shortcuts. Each command's shortcut is listed to the right of the command name. To initiate the command, just press the key combination indicated. It saves a lot of time if you memorize the shortcuts for the commands you use frequently. It is possible to change the assigned shortcuts of a command, or assign a shortcuts to a command that does not have one with a ressource editor.

[return to BIG toc] [return to GUI toc]

Hierarchical Menu

BIG introduces the notion of hierarchical menu (also available in recent version of GEM). A Hierarchical menu (sometime refered as a Cascading menu or Sub-menu) allows to display a secondary menu. This secondary menu appears off the left or right side while you are holding the cursor over an option on the primary menu. This menu displays "secondary options" related to the selected "primary option". Menus organized hierarchically, allow navigation through different levels of menu structure. If the list being used for hierarchical menu is higher than the desk, BIG automatically transforms it into a scroll-list

A hierarchical menu entry has a small arrow to remind the user that this option has a hierarchical menu, and it indicates from which side (towards the right side or the left side) the sub-menu will be displayed. When you bring the mouse pointer over the hierarchical menu entry the hierarchical menu is displayed after a short time (approximately half of a second). If you leave the option by the opposite side of the sub-menu, or if you move the cursor above or below the sub-menu, it disappears. The menu options of the sub-menu disappears when you click an entry, or if you click outside, or if the cursor of the mouse is moved to another option of the main menu, or if it moves above or below the sub-menu.

[return to BIG toc] [return to GUI toc]

Context Menu

BIG introduces the notion of context popup menu. This popup menu is invisible until the user performs a right mouse click. It then appears under the mouse pointer.

[return to BIG toc] [return to GUI toc]

Icons

An icon is a small image (bitmapped graphics) that represents objects such as a command, an iconified window etc. Icons provides an easy interface to the user. They can be used to execute specific program commands. Icons are made more user-friendly by being very distinct from every other icon. Their different representations are often a clear indication of what a command will perform.

Icons may be found on the application desk, in toolbars and in drop-down lists.

See also:
Iconifying a Window

[return to BIG toc] [return to GUI toc]

Windows

Most of a program activity takes place in windows. A window is an area of the application desk that displays information, with its contents being displayed independently from the rest of the screen. Multiple windows (number vary based on version of the TOS) can be open at one time.

It is easy for a user to manipulate a window:

  • It can be opened and closed by the user (e.g. clicking on an icon, or a menu option) or by the application. A window displayed on the screen is by definition open.
  • It can be moved to any area by dragging it. For example by clicking in the title bar along the tops and keeping the pointing device's button pressed, then moving the pointing device.
  • A window can be placed in front or behind other windows,
  • Its size can be adjusted,
  • Scrollbars can be used to navigate the content within it.

A GEM window is usually "decorated" with several predefined controls illustrated in the following diagram:

A BIG windows can have any of the GEM predefined controls but can also use new controls as illustrated in the diagram below:

Big allows to place the Up/Down and Left/Right slider arrows buttons in the bottom right area of the window frame as shown below:

Title/Mover Bar
The Title bar is the box displayed on top of the windows. It is used to display specific program information and the text appears in the center of the window's move bar.
Information Bar
The Information bar is used to display specific information pertinent to the application. It is an optional part of the window and is displayed immediately below the Title bar.

BIG add the capability to add flat or hierarchical menu bar (see Menus) as well as toolbar (see Window Toolbar) in windows.

Note:
The menu entries of a menu bar placed in a window are not displayed automatically, at least not continously. You have to "activate" them by clicking on one of the menu headings. This time, the corresponding menu is displayed, and now the whole menu bar works as usual. You can move to the other menu headers, select one option, etc. the desk menu "is blocked" during this time. Choose an option or click outside to deactivate the window menu. BIG also deals with the menu keyboard shortcuts. If a window is in the front (window activated), it checks in the menu if an option corresponds to the keyboard shortcut typed. Search is also carried out in the hierarchical menu entries if it there is some.

[return to BIG toc] [return to GUI toc]

Manipulating Windows

Activating a window

Open windows may overlap. If they do, the active window is always completely displayed. You can identify which window is active by looking at the title/mover bar. Only the active window's move bar is shaded. Activating a partly hidden, inactive window will move it to the front and over the other windows. This can be done by:

  • Positioning the pointer anywhere on the window and clicking the left mouse button.
  • Using the Cycler button. This is especially useful when you have multiple, overlapping and sometimes hidden windows displayed on the desk. When you click on the cycler button this brings the bottom window to the top of the stack and displays it as the active window. The current active window is sent to the bottom of the stack.
  • Using [Control + Tab] keys bring to the front the following window (if there is one), which was in the back
  • A [control-click] on the displacement bar

[return to BIG toc] [return to GUI toc]

Moving a Window

You can use the title/mover bar to move a window to any screen position below the desk menu bar. Position the pointer over the shaded mover bar. Use dragging to move the window to a new position on the screen, then release the mouse button. The window displays in its new position. Note that when you dragged the window the mouse pointer shape changes, and an outline of the window followed the movement of the pointer until you released the mouse button.

It is also possible to do a normal click on the displacement bar. The phantom box appears then and follow the cursor. A new click "drops" the window to its new position.

Note:
BIG windows can be moved outside of the screen, not only to the bottom and to the right as usual with GEM, but also to the left.

[return to BIG toc] [return to GUI toc]

Closing a window

In the upper left corner of the window there is is a small box containing an "X" icon, this is the closer button. Move the pointer over the closer button and click once. The window closes. Note than a window can also be closed automatically by the program or by selecting an entry in a menu.

The [Shift + Esc] key combination is equivalent to the window closing button.

[return to BIG toc] [return to GUI toc]

Resizing a window

Resizing windows is especially useful when you want to display more than one window on the desk at one time. This can be done using a Sizer button. GEM windows have one sizer button in the lower right corner of the window. BIG windows can have up to 4 sizer buttons in each corner of the windows. To resize a window position the pointer over the sizer button and use dragging to move the sizer button. The shape of the mouse pointer is changed and an outline of the window follows the mouse pointer movement. Release the mouse button when the window outline is of the size you want. You can also do a normal click on the Sizer button. The phantom box appears then and follow the mouse poiter. A new click "drops" the window with its new size.

You can also use the fuller button located on top right corner to expand or shrink a window. Clicking on the fuller button will expands a window to fill the entire screen (unless it was already "fulled"). Clicking on the fuller button again returns the window to the most recent size and position. The same actions can be done by double-clicking on the displacement bar.

The [Esc] key corresponds to the fuller button and the combination [Shift + Esc] to the window closing button.

[return to BIG toc] [return to GUI toc]

Scrolling windows content

Sometimes the content of a window will contain more information that can be displayed in a window at one time. When this occurs, some of the information remain undisplayed, or hidden. You can view the hidden items by using the scroll bars or arrow boxes (up, down, left, right). The scroll bars along the bottom and right edges of the window let you scroll the window horizontally (right and left) or vertically (up and down).

If the display contains more items than will fit in the window, a portion of the scroll bar will be proportionally shaded. The scroll slider shows the current position of the displayed window relative to its total content. If there is grayed area above or below (or left and right) the scroll sizer, more of the content is available by scrolling the window in the direction of the grayed area.

There are three ways to scroll a window: line by line, one window display at a time, or continuous scrolling:

  • To scroll by one line at a time, position the cursor over the scroll arrow that indicates the direction of the hidden contents and click.
  • To scroll by one window display at a time, position the cursor over the shaded area of the scroll bar and click.
  • Continuous scrolling can be performed in several ways:
    • To scroll continuously one line at a time, position the cursor over the scroll arrow that indicates the direction of the hidden contents and hold down the left mouse button.
    • To scroll entries continuously one window at a time, position the cursor over the shaded area of the scroll bar. Hold down the left mouse button.
    • You can also skip over some of a window contents by dragging the scroll slider box to a new position in the scroll bar. The window will now display the contents of that portion of the window.

Another way to accomplish this is by using the up and down (or left and right) arrow keys at the right of the main keyboard. Each time you press an arrow key the content is scrolled one line at a time. Using the [Shift + an Arrow key] is equivalent to a click in the corresponding shaded area of the sliders. In other word each time you press an arrow key in combination with the [Shift] key the content is scrolled one window at a time.

[return to BIG toc] [return to GUI toc]

Iconifying a Window

Sometimes the screen may get cluttered with windows, and this may harms the ease of use. Closing some of them is not always the good solution, because reopening them may takes long times. For example if the program must reload the contents from a file. The most elegant and convenient solution is "the iconification of the windows". A new window button has been created for that matter: the "smaller" button. When this button is clicked, the window is reduced to a size of 72 X 72 pixels icon, and all its other attributes are temporarily cancelled, except the title and the displacement bar. Moreover, the title is written in small characters.

BIG Windows can have a Smaller button (it is the first of the 4, on the top right corner of the windows). It represents a small triangular arrow going towards a small square window. And this capability of BIG is active on all TOS versions.

To desiconify the window, it is necessary to perform a double-click on the corresponding icon. The application restore the window with its previous position and attributes.

A [Control + click] on the smaller button of a window will iconify all the open windows into a single icon. The reverse operation is done by double-clicking on this iconified window.

If the user opens other windows and redo an "all iconification", another icons is created. At the time of a double-click on an iconified window, the windows are restored as before.

Note:
The iconified windows can be drawn using different images. For example different icons can be used based on the type of window (window is a form or not).

[return to BIG toc] [return to GUI toc]

Forms (Dialog Boxes) and Alert boxes

When an application needs to communicate with the user, a Form (also known as dialog box) appears on the desk. To respond to a Form, the user type in answers and/or perform actions on the control elements. Then he/she selects one of the dialog buttons. If a dialog button has an enlarged border, it is the default button and can be selected by pressing [Return].

The computer uses alert boxes to bring something to the user attention. Alert boxes can contain an icon (e.g. stop signs, question marks, or exclamation points, etc.) and may either caution users about an intended action or tell them that something went wrong. When users see an alert box, they have to follow its instructions, then select the appropriate dialog button.

Some forms ask the user to supply information or make a choice. User can use the keyboard or mouse to make a choice or supply the information needed. An I-bar text insertion cursor indicates where the next typed character will appear on a text field. Some dialog boxes contain more than one field requesting text information. To select a field, position the pointer over that field. Click once. The cursor jumps to that field.

BIG supports three types of forms:

  • GEM-Forms (simply refered as a Forms in this documentation): this type of form is the traditional GEM form i.e. a modal window of user input. This means that the Form is displayed to give or request information from the user and that no other interaction can occur between the user and applications until the Form is exited. A normal form consists of a frame encompassing a number of control elements that accept user input.
  • Alert box: Alerts are special dialog boxes which provide information and/or a limited choice of options to the user. Alerts are often used to present an error condition to the user or to inform them of a choice. For example an alert box pops up, and the user will have to click 'OK' to proceed.
  • Window-Forms (referred as window-forms or forms in window in the documentation): this type of form is a modeless window of user input. This means that other interaction can occur between the user and the application before the form is exited (closed). Window-Forms are "standard" forms placed within windows and therefore they combine the windows features (i.e. can be moved, resized, iconified,...) and the display/entry capabilities of Forms.

The features of each of the available control elements available for BIG forms are rewiewed below.
For the features of windows refer to the above section Windows and for control elements of a window refer to Manipulating Windows.

A form in a windows is often used to enter parameters to the program. It often implies the presence of two new buttons: 'Appy' and 'Reset'. They correspond to the usual 'Confirm' and 'Cancel' buttons, but they do not close the window. The form remains displayed. That is extremely practical to modify parameters without having to call back the form each if you do not find immediately the right value for the parameters. The visualization of the effect is immediate, but the "parameter form" remains available for other modifications. If the window is closed by clicking in the closing button in the top left corner, that corresponds to the 'Cancel' button.

BIG takes care automatically of management of these buttons, while recording and by restoring if necessary "the state" of the form.

[return to BIG toc] [return to GUI toc]

Control Elements (Widgets)

This section describes the control elements (Widgets) available in BIG, that a user interacts with.

Mouse Pointer

Interfaces driven by a computer mouse uses a small icon to show the current position of the mouse pointer. The default mouse pointer is an arrow pointing up and to the left, and is called the "mouse pointer". You use the mouse pointer to select icons or menu options, and to move objects on the desk. You control the pointer by moving the mouse. BIG allows to automatically change the shape of the mouse pointer when entering a specific window.

[return to BIG toc] [return to GUI toc]

Draging Elements

Holding down the mouse button on an object and moving the pointer is called dragging. Dragging allow to move graphical objects (icons, windows...) from one place to another. After you select an object, you can drag the selected object to a new location. Using the mouse to drag is easy. Just move the mouse while holding down the mouse button. Any selected object will be dragged. When you drag object from one location to another, a ghost outline (or optionally a full image) of the selected object follows the cursor from the original location to the destination. The pointer shape also changes until you release the mouse button. When you release the mouse button the object will be dropped at the current position of the mouse. The mouse pointer must be positioned exactly over the selected object for successful dragging.

[return to BIG toc] [return to GUI toc]

Moving a Form

As we have seen in Forms (Dialog Boxes) and Alert boxes, BIG support the standard GEM forms. We will see later the new widgets that can be used in forms but for now lets look at one extra feature. Normal GEM forms are displayed at a fixed location. Big add the capability to move the form over the application desk. This can be usefull if you need to look, for example, at some information hidden by the form. For that matter it is possible to add a mover button (that has the shape of a folded down corner) in the top rigth coner of the form. To move the form just click the mover button and drag the form to the new position. During drag a ghost (or optionally a real image) of the form is displayed so you can place the form at the exact desired position.

[return to BIG toc] [return to GUI toc]

Window Toolbar

A toolbar is a form (usually small) placed on the top of the window and that can have onscreen buttons, icons, menus or other input or output elements.

This form is independant of the window work area and is therefore not affected by things like scrolling of information in the work area. The usage of the control elements is the same as in a normal form. If the size of the window becomes too small, only the first elements of the toolbar will be displayed. It is therefore recommanded to place the more importants controls on the left of the toolbar.

Note that the objects of the toolbar can be handled even when the window is behind.

[return to BIG toc] [return to GUI toc]

Editable Field

Editable fields (also known as text box, text field or text entry field) allow the user to input textual information to be used by the program.

There can be many editables in a Form. BIG support the standard GEM editables but also introduces "extended editables" with many new features. Editables often contain a string displayed in front of the entry field to indicate the purpose of the editable. The entry field is usually filled with "_" characters to delineate the size of the entry field. The extended editable fields have a small arrow at each end of the entry field. Text can be displayed using normal or small font. It is possible to use "filtering" on an entry field so that user can only enter certain type of characters. For example only numbers, or only letters, etc.

The following opeartion can be performed on editable fields:

  • Enter text using a keyboard: The text appears when pressing keys from the keyboard at the position indicated by the cursor (depicted as a vertical bar).
  • Enter text larger than the displayed field: BIG allow to enter more text than what can be displayed in extended editable fields. When reaching the end of the editable field you can continue to type chararter. The displayed text will be shifted to the left and the new character displayed at the end of the field. When you reach the maximum lenght of the extended editable the last character will be overwritten.
  • Navigate the text:
    • Using the mouse: Change the cursor position by clicking the desired point with the mouse pointer. Click slightly after the end of the editable field to set the cursor at the last position. Click slightly before begining of the editable field to set the cursor on the first position.
    • Using the keyboard:
      • Pressing left and right arrow keys change the cursor position by one character. For extended editable, when the cursor reach the edge of the field the text is shifted.
      • Holding the [Shift] key while pressing arrow keys makes the cursor move to the beginnig/end of the field. For extended editable, if the cursor is already at the beginning/end of the field the text is shifted to the first/last character of the entire text.
      • Holding the [Ctrl] key while pressing arrow keys makes the cursor move to the previous/next word (no shifting done in this case).
      • For extended editable, clicking and holding down the left mouse button on the small arrows on the left/right of the editable field causes the text to be shifted.
  • Edit existing text (changing the text already entered)
    • If you type characters in the middle of an editable field the characters on the right will be shifted (insert mode) until the maximum size of the editable is reached in which case the text will be replaced (replace mode).
    • Delete/Backspace keys remove one character right/left of current cursor position.
    • [Esc] erase the entire text.
  • Copy / Cut / Paste Text:
    • [Ctrl + C] allow to copy the entire text of an editable in a buffer.
    • [Ctrl + X] allow to copy the entire text of an editable in a buffer and delete the text from the field.
    • [Ctrl + V] allow to paste the content of the buffer in the field.
    It is possible to copy/cut/paste between any editable field of any form.
  • Moving cursor between editables:
    • [Shift + up_arrow] or [Clr] bring the cursor to the first field of the form.
    • [Shift + down_arrow] or [Shift + Clr] bring the cursor to the last field of the form.
    • [down_arrow] or [Tab] bring the cursor to the next field of the form.
    • [up_arrow] or [Shift Tab] bring the cursor to the previous field of the form.

Some fields contain punctuation marks (e.g. periods ".", slashes "/", etc.) to divide text. To advance past a punctuation mark, type that mark. For example, if you have a field with a period dividing the field, such as the period that separates a file's name from the extension. Type a period to advance to the second part of the field.

Keyboard shortcuts summary:

  • [Left Arrow] - Moves the cursor one character to the left within a field.
  • [Right Arrow] - Moves the cursor one character to the right within the field.
  • [Down Arrow] - Moves the cursor to the next field.
  • [Up Arrow] - Moves the cursor to the previous field.
  • [Shift + Left Arrow] - Moves the cursor to the left of the field.
  • [Shift + Right Arrow] - Moves the cursor to the right of the field.
  • [Shift + Down Arrow] - Moves the cursor to the last field.
  • [Shift + Up Arrow] - Moves the cursor to the first field.
  • [Ctrl + Left Arrow] - Moves the cursor one word to the left within a field.
  • [Ctrl + Right Arrow] - Moves the cursor one word to the right within the field.
  • [Clr] - Moves the cursor to the first entry field.
  • [Shift + Clr] - Moves the cursor to the last entry field.
  • [Tab] - Moves the cursor to the next field.
  • [Shift + Tab] - Moves the cursor to the previous field.
  • [Backspace] - Deletes the character or space to the left of the Cursor.
  • [Delete] - Deletes the character or space to the right of the cursor,
  • [Esc] - Clears the current field.
  • [Ctrl + C] copies text from an entry field into a buffer
  • [Ctrl + X] copies and deletes text from an entry field into a buffer
  • [Ctrl + V] pastes the content of the buffer into an entry field
  • [Return] - Selects the default dialog button, if one is present. A bold border around the button indicates the default button.

[return to BIG toc] [return to GUI toc]

Selectable Buttons

A typical button is a rectangle wider than it is tall, with a descriptive caption in its center. The most common method of pressing a button is clicking it with the mouse pointer, but other input such as keystrokes can be used to execute the command of a button. When pressed, in addition to performing a predetermined task, buttons often undergo a graphical change.

Depending on the circumstance, buttons may be designated to be pushed only once and execute a command, while others may be used to receive instant feed back. Other buttons are designed to toggle behavior on and off like a checkbox. These buttons will show a graphical clue to indicate the state of the option.

With BIG a double-click on a button activate the "default" button of a form (if there is one).

[return to BIG toc] [return to GUI toc]

Checkbox buttons

BIG introduces a new type of button called a checkbox button. A checkbox allow the user to make multiple selections from a number of options. They are shown on the screen as a square box that can contain white space (for false) or a "X" (for true). A caption describing the meaning of the check box is shown adjacent to the check box. Inverting the state of a check box is done by clicking the mouse on the box, or by using a keyboard shortcut.

[return to BIG toc] [return to GUI toc]

Radio buttons

A radio button allows the user to choose only one of a predefined set of options. When one of the buttons is "pressed", other buttons would "pop out", leaving the pressed button the only button in the "pushed in" position.

Radio buttons are arranged in groups of two or more and displayed on screen as, for example, a list of circular holes that can contain white space (for unselected) or a dot (for selected). Adjacent to each radio button is normally shown a caption describing the choice that this radio button represents. When the user selects a radio button, any previously selected radio button in the same group becomes deselected. Selecting a radio button is done by clicking with the mouse pointer on the button, or by using a keyboard shortcut.

[return to BIG toc] [return to GUI toc]

Drop-down list

BIG handles drop-down lists with several type of objects: text, boxes, or icons.

A drop-down list allows the user to choose one value from a list. When a drop-down list is inactive, it displays a single value inside the button. When activated, it displays (drops down) a list of values, from which the user may select one. When the user selects a new value, the control reverts to its inactive state, displaying the newly selected value.

When you click on a text drop-down list, a list with columns of options is displayed under the button. The display of the list is automatically shifted if there is not enough space for it. The drop-down list is used exactly like a pull-down menu. It can contain several columns of options. If you are running in colors mode (with at least 16 colors), the background of the options changes to yellow when the mouse pointers passes above them.

When you select one entry on the drop-down list its text is copied into the button. If you click again this button: this time, the list is positioned so that the position of the selected option and the corresponding button are placed under the cursor (if there is not enough room, the displayed list is shifted), and this option is already check marked.

There are two other ways of changing the selection of a drop-down button:

  • Perform a [Shift + Click] on the button, or
  • click on the small "following option" icon (the one with two circular arrows).

The option following to current one is selected (to be exact, the first active option). When the end of the option list is reached, it starts again from the beginning. If the text (or the image) of the button does not correspond to any of the list of options, the first entry is selected.

BIG allow to use graphical icons in a drop-down list. When you click on a graphical drop-down list, a list composed of icons is displayed. If you choose one of them, its drawing content is placed into the button.

With BIG you can also uses "box" drop-down list. When you click on a box drop-down list, a list composed of boxes (containing text, colors, or patterns) is displayed. If you choose one of the entry, its graphical content is placed into the button.

When a drop-down list contains more options that can be displayed on the screen BIG creates automatically a scrollable list. It is a list provided with scroll arrows at the top and the bottom. As soon as the cursor of the mouse is placed over one of these arrows, the options start to scroll in this direction, until the end of the list, without being necessary to click.

The list is automatically placed under the calling button if there is enough room to display at least four options and the two arrows. If not, it is displayed from the top of the desk. The option which corresponds to the text of the button (if there is one) is "checked", and it is displayed in the first position in the scrollable list (unless it is one in the last entries of the list, in this case it can be shifted).

[return to BIG toc] [return to GUI toc]

Scroll list

BIG also provides "Scroll-List". In this case the list displays 8 options and is decorated with a complete slider bar located on his right side. You can click on one of the up or down arrow to move the contents of the option menu in this direction. If you click on a grayed part above or below the slider, 8 options at a time are shifted. Lastly, by clicking the slider box and keeping the mouse button depressed, you can make scroll the contents of the list in real-time. As previously, the option corresponding to the text of the button is checked and it is placed in first position if possible. The scroll-list is placed under the calling button if there is enough place, if not above. If the list associated with this button have less than nine options, it is a "normal" drop-down list which is displayed.

[return to BIG toc] [return to GUI toc]

Bubble help

When bubble help is on, moving the mouse over an item displays help information for that item.
The name "bubble help" refer to the way the help text is displayed, in "bubbles", like those containing the words in a comic strip.

The underlying system is based on resources holding text that appears in the bubble. The bubble graphics is supplied by BIG itself. As the bubbles are implemented entirely as resources, they can be easily customized with a ressource editor. BIG automatically display the proper bubble based on the mouse location. It also positioned the bubble using an algorithm designed to keep it from covering the objects being examined.

[return to BIG toc] [return to GUI toc]

Author:
Jean Louis-Guerin
Revision
1.0
Date
February 2010
Log
Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Presentation of the BIG Library

Presentation of the BIG Library

Author:
Claude Attard
Translation Jean Louis-Guerin

Table of Content

  • Why the name BIG
  • BIG distribution
  • What can I do with BIG functions?
  • Work with Forms and Menus
  • Work with Windows
  • Necessary Tools
  • Learning BIG
  • The Big History
  • Acknowledgment to Friends

Why the name BIG

You know the GNU programs? GNU means "Gnu is Not Unix", with recursive reference. In the same way, MINT, the multitasking system at the origin of the MultiTOS used in Falcon means "Mint Is Not TOS".

Well, BIG means "Big Is Gem"

The BIG routines are guaranteed 100% pure GEM (no diversion of the AES is carried out), which ensures compatibility with the complete range Atari machines and their various graphical resolutions (including the TT and Falcon with Multitasking). They are the fruit of several years of programming (and use) of the GEM, and thanks to the accumulated experience, I think that they meet perfectly the needs for a developer eager to create esthetic easy to use (ergonomic) software (that is important).

[return to BIG toc] [return to Presentation toc]

BIG distribution

The BIG library is placed in the Public domain. You can thus freely distribute it, provided that the complete package is proposed.
i.e. with at least the following files:

The library itself:

  • BIG2.H The header file to be included with the developments
  • BIG2.LIB BIG2 Pure C Library without debug info
  • BIG2DEBG.LIB BIG2 Pure C Library with debug info

The demonstration:

  • BIG2DEMO.C the source of the demonstration
  • BIG2DEMO.H the resource header file for the demonstration
  • BIG2DEMO.HRD the objects names file for the resource
  • BIG2DEMO.PRG the Atari demonstration program executable
  • BIG2DEMO.PRJ the Pure C project file for the demonstration
  • BIG2DEMO.RH the heading of the resource
  • BIG2DEMO.RSC the resource
  • BIG2DEMO.RSH the resource with the format source C
  • BIG2DEMO.PI3 a Degas image that can be loaded in the demo
  • BIG2DEMO.IMG an image used as backgroung of the demo desk

The Documentation:

  • BIG2_HTML.ZIP The BIG Documentation in html format. To read the documentation you need to decompress the html files and to access the main page use index.html
  • BIG2.CHM The BIG Documentation in compressed html format.

With these files, you can possibly add:
The images loading library:

  • BIG_IMGS.LIB the Library for images loading
  • BIG_IMGS.H the header file for images loading
  • BIG_IMGS.TXT Documentation of the images loading Library

[return to BIG toc] [return to Presentation toc]

What can I do with BIG functions?

They make it possible to manage the most current uses of the AES in few functions calls for a program or a desktop accessory. The application can works with an external or an integrated resource. They also allow to easily realize forms rich in innovations that only appeared with versions 4.00 and 4.10 of the AES. Or to create forms not provided by the GEM (like new windows, which was entirely redesigned), and this is possible even on systems with old TOS. Some bugs and missing features of the AES are corrected by using BIG. We can split these functions into two groups:

  • those which work on the forms and the menus, and
  • those which work on the windows.

But the border between these two groups is fuzzy since it is possible to place forms or menus in windows!

[return to BIG toc] [return to Presentation toc]

Work with Forms and Menus

BIG makes it possible to define objects with a new look (but which tends to get widely used) like:

  • forms that can be moved on the screen,
  • forms placed in windows,
  • pop-up buttons or pop-list,
  • online help buttons,
  • hierarchical menus,
  • pop-up menus freely placed on the desktop,
  • Bubble help
  • etc.

The keyboard shortcuts in the menus and the forms are managed automatically by BIG. The management of the cursor in the editable fields can use equivalents keyboard. It is possible to create editable fields capable to contain more text than what can be displayed in the field. It is also possible to create editable fields with small characters, that the GEM does not manage correctly. The alert boxes can be moved like the forms.

Moreover, it is possible to directly bind objects or menu options to functions, so that a click on these objects will call the corresponding function. We almost enter the field of object programming! BIG can work with a traditional external RSC file as well as an integrated resource. We will see how when we will describe the functions calls.

[return to BIG toc] [return to Presentation toc]

Work with Windows

The windows of BIG have an aspect slightly different from those of the GEM. More precisely, they were redrawn in order to add new buttons, such as for example resizing buttons in each corner. However, it is possible to give to these windows the traditional GEM look and feel. In addition, their general look resembles strongly to GEM windows, so that the user "is not lost".

In BIG, several functions are devoted to windows in order to to simplify their programming. The possibility of placing forms in windows is entirely handled by BIG. It is also possible to place pull-down menus in windows (with or without hierarchical menus), or small toolbars, which are small forms located at the top of a window.

The windows containing images are totally managed by BIG. For text windows (or other type of data), the programmer will only have to write the display routine (which strongly depends on the nature of the data and the way they are stored in memory). BIG takes care of all other events. A palette can be associated with each window, and will be activated automatically each time this window is brought to the front. Lastly, it is possible to define for each window the shape that the mouse pointer will take when it enters the window working area, and to indicate if a window can be handled with keyboard shortcuts. This quasi automation of windows work is undoubtedly one of the most attractive points of BIG, as this part of the AES is probably the most ungrateful to programmer. Moreover, the windows have extended capabilities, like the capability of being manipulated when in background or being moved to the left of the screen.

[return to BIG toc] [return to Presentation toc]

Necessary Tools

BIG was created with PURE C version 1.1 (3/20/93). The sources were modified to be able to use the Lattice 5.60 compiler without any modification.

With regard to the resources editors, it is essential to use one which allow editing of the objects extended ob_types, ob_flags and ob_state. In this domain, there is K-Resource and INTERFACE2, which is without any doubt currently the best. There is also ORCS, distributed in shareware. Unfortunately, it suffers from certain characteristics (or bugs?) in its way of saving RSC files, in particular with regard to the editable fields. The routines of BIG can catch-up with these problems, but it is however preferable to use an editor who produces standards RSCs.

[return to BIG toc] [return to Presentation toc]

Learning BIG

To present the capabilities of BIG, we will start by making a turn of the owner thanks to the BIGdemo example program, then we will go into the details in the following order: new objects types, the concept of windows management, and finally the functions of BIG with their syntax, their parameters and the usage recommendations. In this documentation, we will describe only the "programmer's function", i.e. those which the developer can (or must) call. The others, the BIG "internal functions" will not be presented here.

I will suppose that you have a minimum knowledge of C language and GEM programming. My goal is not to replace the books relative to these questions. So if some points remain obscure, I advise you to consult a documentation corresponding to the problem.

[return to BIG toc] [return to Presentation toc]

The Big History

How BIG was born? At the beginning, they were only some functions in my developments. Little by little, they grew, in volume and quality. With each new program, I recopied them and I added options, pointers, new automations... When friends asked to me whether they could use them, I realized that I was the only one to be able to do it, because there was always a quantity of small specific details to each application, which were to be modified each time. But I was the only one to find my way in this jungle!

Then I took my "courage with two hands" and I rewrote all. So that the new code was supposed to follow some logic, could be used in all the situations, in all the applications, with a minimum of constraints, a minimum of global variables, and a 100% compatibility with all Atari machines, even those which were to come. Then came the first beta release of BIG which I tested on a Falcon and it was 95% functional!

By developing these routines, I was "caught by the game" and I started to add quantities of things which I had never thought of including in my programs: hierarchical menus with windows, a variable shape for the mouse, automatic management of the color pallet, movable forms, 3D, scroll-menus, pop-lists, etc. I made a point in creating something complete, taking all that already existed in other libraries, in new GEM, and all that I found pleasant in applications. However I have banished all that could have render the communication between the software and the user complicated.

It was necessary to stop at some point, and the first "public" version of BIG was distributed in July 1993. Since, tens of users did not stop pushing me to add new functionalities, they helped me to debug and to simplify, etc.

Then other ideas came to me, such as for example the new shape for windows of version 2 which has been in "gestation" for a long time before I developed them.

[return to BIG toc] [return to Presentation toc]

Acknowledgment to Friends

I make a point of thanking the friends who helped me (or who pushed me) in the development of BIG by their advices, their work and/or their many ideas. In out of order:

  • Pierre-Louis Lamballais of company PARX Software, author of the brilliant Tube GEM, which learned to me many things in connection with the right way of working under GEM. The management of the windows of BIG is strongly based on its excellent ideas.
  • Alexandre Lemaresquier of Brainstorm company, which told me about several oddities of the GEM and made me benefit from its experiments. It is also on its suggestions that the extended editable exist.
  • Joel Houplon which literally badgered me with even the smallest bug and for the addition with certain functions.
  • Marc Abramson which helped me in the debug and made a lot of publicity to BIG. He has pushed strongly so that the versions 1.80 and following of BIG have made a great step with regard to compatibility with all the machines. It is also him which added the B_PICTs and the bubbles help and many others things.
  • Mathias Agopian which is the author of the bubbles help routines.
  • Patrick Merminod which found not only one great number of bugs and inaccuracies, but which in gave more me the solution each time to avoid me seeking.
  • David Rene which helped me to find the solutions of certain problems and which lend me its Falcon during the long weeks when I awaited mine.
  • Thierry Rodolofo which helped me to integrate the management of SpeedoGDOS into the demonstration.
  • Lionel Burned and Patrick Penos which carried out the adaptation of BIG so that the sources are compatible at the same time with Lattice C and with Pure C.

All those which encouraged me to continue:

  • Bruno Christen, Didier Becu, Felix Marciano, Jean-Marc Gigan, Frederic Aloe, Frederic Collet, Jean-Luc Caradeau, Eric Cassegrain, Philippe Wettstein...

And all those which suggested me improvements or options which are now in BIG:

  • Denis Casanova, Gilles Barges, Jean-Francois Obert, Alain Vigne, ...

I undoubtedly forget some.

[return to BIG toc] [return to Presentation toc]

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG Reference Manual

BIG Reference Manual

Author:
Claude Attard
English translation by Jean Louis-Guerin

Table of Content

  • New types of objects in BIG
  • Attributes of the new objects types
  • BIG Buttons usage
  • BIG Pop-up menus
  • BIG Selectable buttons
  • BIG Extended editable
  • BIG Movable form
  • BIG Text with graphical attributes
  • 3D Aspect in BIG
  • Images in BIG Forms
  • BIG Hierarchical menus
  • BIG Toolbar in Forms
  • BIG Keyboard shortcuts
  • BIG Help-bubbles
  • Working with the windows
  • BIG Events
  • BIG Internal resource
  • BIG in a multitasking environment
  • Parameters and pointers on functions
  • Working with an integrated resource
  • Programing Accessory with Big
  • Iconification of the Windows
  • Copy, Cut, and Paste
  • BIG Window Structure Detailed Description
  • The BIG Constants
  • The BIG Defined Types
  • The BIG Global Variables
  • The BIG Functions Library
See also:
The BIGdemo Source

New types of objects in BIG

Let us start by looking at the new types of objects implemented in BIG. To define them, we use the concept of "extended types". What is it? The standard objects types defined by the GEM go from number 20 to number 33. This type (ob_type) being coded on a word (2 bytes), it leaves a lot of room for extension. To determine the type of an object, the AES only tests the low-order byte. We can thus use the other byte to store up to 255 values that we call "extended types" (in fact the new GEM4 reserves the values from 128 to 255 and therefore we can only use the values 1 to 127, which is more than enough). These objects can be drawn by the GEM and will take the aspect indicated by the normal type (the low-order byte of ob_type). But in BIG, some of these objects with extended type are transformed into G_USERDEF. This means that they will be drawn by a specific routine of the program and not by a GEM routine. Of course, these drawing routines are integrated into BIG.

BIG also uses extended ob_state and ob_flags. Indeed, the ob_state and the ob_flags of the objects are not entirely used by the AES. Only bits 0 to 5 of ob_state and bits 0 to 11 of ob_flags are used. The AES does not even test the other bits in normal situation. We will use them for some of our parameters.

Following are the new types of objects and names used in BIG. In the same way that all the names of GEM objects start with G_, the objects names in BIG start B_:

  • B_CHECKB: Checkbox Button. It is a selectable button which takes the aspect of a small square with the text of the button on the left or on the right. When it is selected, the square is crossed with diagonals. A character of the text can be underlined (by preceding it with a '[' character during creation in the resources editor), in order to be able to activate the button by the combination of <Alternate + character> keys. This button is reserved to simple selectable button.
  • B_ROUNDB: Round Button. It is a selectable button which takes the aspect of a small circle with the text of the button on the left or on the right. When it is selected, the circle contains a small dot, if not selected the interior of the circle is empty. A character of the text can be underlined (by preceding it with a '[' character during creation in the resources editor), in order to activate the button by the combination of <Alternate + character> keys. This button is reserved for radio-buttons usage.
  • B_EDIT: Extended editabled Field. It allows to enter more characters than the width of the edit field. These objects must imperatively contains on each side of the edit field small arrows: "left arrow" on the left and "right arrow" on the right (ASCII 4 and 3). A space must respectively follow and precede these two arrows.
  • B_FRAME: A rectangle used to visually group together other objects, for example a group of radio-buttons. The associated text is displayed overlayed on the top left part of the frame. It is possible to give graphic attributes to this text.
  • B_MOVE: Button used to move a form on the screen. It has the shape of a triangle, as if the form had a folded up corner. It is traditionally placed in the upper righ angle of the form.
  • B_DEFAULT: This is the traditional default button, with its normal aspect.
  • B_UNDO: It is a button with a normal aspect, but which can be activated by pressing the <Undo> key (it is often use with a 'Cancel' button). Moreover, one of its characters can be underlined, by preceding it with a '[' character during its creation in the resources editor.
  • B_UNDER: It is a G_BUTTON or a B_DEFAULT button with one underlined character so that a keyboard equivalent is affected to it. The character to underline is preceded by a '[' character.
  • B_HELP: This button gives access to an on line help, without leaving the management of the form in progress. Can also be activated by a depressing the <Help> key. It has the same aspect as a G_BOXTEXT with SHADOW and OUTLINE, and with the text in small characters.
  • B_POPUP: Normal "Shadowed" Button. But it gives access to the management of an associated pop-up menu, without leaving the management of the form in progress. If it is bigger than the desktop, the pop-up will be automatically transformed into scroll-menu. The button can have an optional icon "following option". For that matter, it must have the corresponding extended type.
  • B_LIST: Is like a B_POPUP, but it is a pop-list which is displayed. A pop-list is a pop-up of eight options with a slider on its side. If the pop-up comprises less than nine options, it is displayed as a normal pop-up. The button is decorated with a "following option" icon. The extended type is mandatory.
  • B_PICT: Makes it possible to display an image (described by a MFDB) in a form. The basic object is preferably a G_BOX.
  • B_GRASTR: Chain of text with graphic attributes.
  • B_SMSTR: Text string written as small characters, but not the very small unreadable size used by icons, but the size above, the 8x8 font. Moreover, the text can be left or on right justified in the object and can have graphic attributes.
  • B_HIERM: option of a menu calling a hierarchical menu, i.e. a pop-up menu on the side of the main menu option. Can be placed in a menu inside a window. If the hierarchical form of menu is too high, BIG transforms it automatically into a scroll-menu.
  • B_NICELINE: For disabled Menu option made of separation characters "-". BIG draws a line. There is no extended type, BIG treats this object automatically. The existence of this object is not created only for esthetics reasons. It is essential because of the possible presence of the "Let Them Fly" utility, which carries out the same visual effect, but also causes BIG to crash under certain conditions!
  • B_FNCP: Any type of object or menu option which will be linked to a function. It is enough to click this object or this option (or to call it by its keyboard shortcut) so that the function is automatically executed.

Last point before going into the details: the aspect of these objects can be modified at will by the programmer (color of texts, frames, icons, etc.). We will get back to this in the section about form functions.

[return to BIG toc] [return to Prog. toc]

Attributes of the new objects types

Here is a summary table of the new objects, with their extended type, their attributes, etc. such as they must be created in the resource editor.

Object name | Normal type | Extended type | Normal ob_flags | Extended ob_flags | Normal ob_state | Prohibited attributes
B_CHECKB | G_BUTTON | B_SELEC (18) | SELECTABLE | -- | -- | RBUTTON, SHADOWED
B_ROUNDB | G_BUTTON | B_SELEC (18) | SELECTABLE, RBUTTON | -- | -- | SHADOWED
B_EDIT | G_FTEXT, G_FBOXTEXT | B_EDIT (25) | EDITABLE | Number of characters | -- | SELECTABLE, EXIT
B_FRAME | G_BUTTON | B_FRAME (20) | -- | graphical attributes | -- | SELECTABLE, EXIT
B_MOVE | G_IBOX | B_MOVE (17) | TOUCHEXIT | -- | OUTLINED, CROSSED | SELECTABLE, EXIT
B_DEFAULT | G_BUTTON | B_UNDER (30) (option) | SELECTABLE, DEFAULT, EXIT | -- | -- | --
B_UNDO | G_BUTTON | B_UNDO (31) | SELECTABLE, EXIT | -- | -- | DEFAULT
B_UNDER | G_BUTTON | B_UNDER (30) | SELECTABLE, EXIT | -- | -- | --
B_HELP | G_BOXTEXT (small font) | B_HELP (21) | SELECTABLE | associated form number | -- | DEFAULT, EXIT
B_POPUP | G_BUTTON, G_IMAGE, B_BOX | B_POPUP (22) (option) | SELECTABLE, SHADOWED | associated form number | -- | DEFAULT
B_LIST | G_BUTTON | B_LIST (23) | SELECTABLE, SHADOWED | associated form number | -- | DEFAULT
B_PICT | G_BOX | B_PICT (24) | -- | Mono/Color Image mode | -- | --
B_GRASTR | G_BUTTON | B_GRASTR (19) | -- | graphical attributes | -- | SELECTABLE, EXIT
B_SMSTR | G_STRING | B_SMSTR (26) | -- | graphical attributes | -- | --
B_HIERM | G_STRING (Menu) | B_HIERM (41) | -- | associated form number | -- | --
B_NICELINE | G_STRING (Menu) | -- | -- | -- | DISABLED | --
B_FNCP | All | B_FNCP (51) | -- | Nothing @ create time | -- | --

Note that conventions presented above are close to the standards existing in other extended libraries GEM, such as FLY_DIAL and INTERFACE (which does not propose a system of pointers on function nor graphical attributes, nor hierarchical menus, etc.). However, there can be differences between the "look and feel" of a type of object drawn by INTERFACE and the same one drawn by BIG. In particular, B_CHECKB and B_ROUNDB. I voluntarily gave a different aspect to these two buttons, so that they do not resemble too much their counterparts of the Mac world. My personal opinion is that the developers must make an effort to preserve at Atari its "personality" and not to try to make it resemble other machines :)

[return to BIG toc] [return to Prog. toc]

BIG Buttons usage

Lets now see now the details. The normal type corresponds to the type of the object during its creation in the ressource editor. They are the routines of BIG which will take care of the transformation of the object into G_USERDEF (if necessary) according to the other indications of this table. The name indicated as extended type is that given by the constants of BIG2.H with its corresponding value. The "ob_flags normal" attributes represent the bits which must obligatorily be positioned in the ob_flags of the object. The same remark apply to "ob_state normal". The column "prohibited attributes" represent the parameters which should never be activated. In fact, it is advised to activate only those which are indicated in the other columns, except possibly for the ob_states "SELECTED" and "DISABLED".

The "extended ob_state" are used by B_FRAMEs, B_GRASTRs, B_SMSTRs, B_POPUPs, B_LISTs, B_HELPs, B_HIERMs, B_EDITs and the B_FNCPs. For some of them (B_POPUPs, B_LISTs, B_HELPs, B_HIERMs), it is not necessary to define the extended ob_state at the time of creation of the resource, a function of BIG (form_attach()) will take care of it later.

The "extended ob_flags" are also used by BIG and do not appear in this table. We will speak about them progressively in this documentation.

As he was already said, the 10 hight order bits of ob_state can be used. BIG uses in fact only the high order byte, i.e. the 8 high order bits. With regard to B_POPUPs, B_LISTs, B_HELPs and B_HIERMs, we use it in BIG to place it there number (in the resource file) of the form associated with this button (Warning, numerotation starts from zero). For example, if the form number 12 must be called during the selection of a button B_HELP, we have to set bits 10 and 11 in the ob_state of this button. Only taking in account the higher order byte, that corresponds to value 12. The routines of BIG will call this form automatically and will take care of its management.

The principle is the same one for the pop-up buttons and the options of the hierarchical menu. We create in the ressource editor a button (or an option of menu) having the attributes above, and the high order byte of the ob_state contains the number of the pop-up form associated with this button. The same form can be associated with several buttons.

With regard to B_FNCPs, it is even simpler, since we do not have to do anything during the creation of the resource file (except specifying the extended type, of course)! The principle is to place in the high order byte of the extended ob_state the index corresponding of the table of functions (there can thus be "only" 256 pointers on functions by application). But this is done automatically by BIG. Indeed, the initialization routines count the number of objects having B_FNCP as extended type, then reserve a storage area of adequate size which will be handled like a table of pointers on functions. It is the responsability of the programmer to make sure that each pointer, in this function pointer table, points to the right function of the program (We will see how by studying the source of the demonstration, chapter "the source of BIGdemo"). There are two rules to respect:

  • First is that the pointers must be affected with the elements of the table in the same order that the objects appear in the resource. Let us see an example. The resource has three trees: 'Menu', 'Preferences', and 'Choice' (in this order). In 'Menu', two objects (numbered 15 and 23) are of B_FNCPs type. In 'Preferences', two others (numbers 5 and 8), and finally 3 objects in the form 'Choice' (numbers 8, 11 and 13). The elements of the table are reserved in ascending order: 15, then 23 of 'Menu'; 5, then 8 of 'Preferences'; 8, 11, then 13 of 'Choice'. When object 11 of 'Choice' is clicked, it is the function whose pointer is in the entry 5 of the table which will be executed (Since it is the object 6 in the order of classification, with numbering starting at 0).
  • The second rule is that the function must be of the type void function(void), i.e. it cannot have any parameter and must return nothing. There is an easy way to ignore this constraint, see the chapter "Parameters and pointers on functions"). This possibility of making GEM objects "point" to functions is one of the big interests of BIG. The sources of the programs decrease dramatically thanks to this capability, since it is not necessary to carry out series of tests that where impossible to avoid before: Which type of event did happen? If it is a click on a menu, which option? If it is a button of form, which button of which form? etc...

The B_FRAMEs, B_GRASTRs, B_SMLSTRs objects use the extended ob_state to set the graphic attributes of the string in the same way that the function vst_effect() of the VDI. The higher byte of the ob_state contains the attribute:

  • bit 0: Thickened
  • bit 1: Lightened
  • bit 2: Italic
  • bit 3: Underlined
  • bit 4: Outlined

If bit 3 is put for an object B_GRASTR, B_SMLSTR the feature of underlining is not limited to the width of the text, but to the width of the object (ob_width).

Lastly, the extended ob_state is used with B_EDITs to indicate the maximum number of that it is possible to capture in the editable field.

The B_SELECs (B_CHECKBs and B_ROUNDBs) are drawn by defect with the button (respectiveley square or round) on the left and the text on the right of the button. If bit 13 of the extended ob_flags is set (define under name "BS_RIGHT", like B_SELEC right), then it is the opposite: button on the right and text on the left.

These two types of buttons are used for their capability of activating the default button of a form by a double-click. For that, it is necessary that bit 11 of the extended ob_flags of the button (bit named DCDEFAULT) is set. This functionality is usable for the normal forms as as well as for those in window, but obviously not for the Tool-Bars, since there is no default button!

[return to BIG toc] [return to Prog. toc]

BIG Pop-up menus

The Help and pop-up forms must follow certain requirements. The help are simple forms without dialog with the user. They contain in theory only explanatory text and frame of presentation (B_FRAME, B_SMLSTR, and B_GRASTR can be used). They must contains at least one exit object: SELECTABLE, DEFAULT, EXIT. The other types of buttons (B_ROUNDB, B_POPUP, etc.) are managed automatically in a help form, but the routine of help itself will have to be rewritten if one wishes for example that the display of the help depends of a Pop-Up. Unless one uses pointers on function. The pop-up forms have the aspect of a pull-down menu. The root object is a G_BOX SHADOWED whose outline is one pixel wide towards the outside. There are three types of pop-ups: the text pop-up, the image pop-up and box pop-up.

The options of a text pop-up are of type G_STRING TOUCHEXIT (this and what follows is also valid for the forms intended to become pop-lists). The first two characters are spaces (as in a normal menu) to leave the space to the check-mark. If certain options must be inactive, the corresponding G_STRING must be DISABLED. It is strongly advised that the numbers of these G_STRING are sorted from top to bottom. The "calling" objectof a text pop-up is a G_BUTTON SHADOWED SELECTABLE. If it also has the extended type B_POPUP (22), a small "following option" icon will be drawn on the right button (also if it is a B_LIST). This is impossible with a image or box pop-up.

The options of a image pop-up are G_IMAGE. All of them must have the same dimensions (ob_width and ob_height), also the same ones as those of the G_IMAGE object which called the pop-up menu. This "calling" object must be SHADOWED and SELECTABLE. As the attribute SHADOWED does not have any influence on the visual aspect of a G_IMAGE, he is advised (as in the demonstration), to place it in a G_BOX SHADOWED, since it is traditionally the "shading" which announces the presence of pop-up. An image pop-up cannot have extended type (it is its attributes which define it) nor to be a pop-list, therefore, no "following option"button.

The options of a pop-up box are of G_BOX. Their dimensions do not have particular importance. The "calling" object is a G_BOX SHADOWED and SELECTABLE. A pop-up box cannot have any extended type (it is its attributes which define it) nor to be a pop-list, therefore, no "following option"button.

The use of pop-up is exactly the same one as for a traditional menu (with the difference that if it is higher than the desktop, BIG transforms it into a scroll-menu). The pop-up tent to place itself so that the text of the B_POPUP button and that the text of the same G_STRING text (or the G_IMAGE or G_BOX of the same pattern) are overlayed. If that is not possible because the pop-up would leave the screen, it is shifted.

If the text of the G_STRING (or the pattern for any G_IMAGE or G_BOX) do not match, the top left corner of pop-up is fixed on the bottom low corner of the B_POPUP. The corresponding G_STRING "is checked". To close the pop-up without making choice, it is enough to click outside. If a selection is made, the text of the clicked G_STRING is copied in the B_POPUP button which called the pop-up (without the spaces at the beginning and at the end), or the pattern for the G_IMAGE is copied in G_IMAGE B_POPUP, or the characteristics of the G_BOX in the calling G_BOX.

It is thus imperative that at the beginning, the text of the button is at least as long as that of the longest G_STRING, in the case of a text pop-up, or that all G_IMAGEs are of the same dimensions in the case of a pop up image. It is possible to make a pop-up with several columns of G_STRINGs or G_IMAGEs. But they must entirely cover the root object, as in a pull-down menu.

If the pop-up was changed into a scroll-menu, it will be placed by BIG under the calling button, provided that there is enough room for at least four options and the two scrolling arrows. If it is not the case, the pop-up will start from the top of the desktop.

In addition, the pop-lists are placed by defect under the button of call. If there is not enough place, they are placed above.

While the mouse moves on top of the options of pop-up, several cases can arise. First of all, if it is a pop-up box, the pointed option is simply "framed"by a line. In this case, it is preferable than a selection which would reverse the color or the frame and generate the good visualization of the option. If it is an image pop-up, the pointed option is selected, therefore inversed. In the case of a text pop-up (or pop-list), the option is selected (inversed) if the system has less than 16 colors or if the root-box of the form pop-up has its "Background" bit set to zero (see the chapter on the 3D display). If not (if there are at least 16 colors and if the BackGround bit of the root-box is set to 1), the pointed option is displayed on yellow background, which gives a 3D impression.

After the call to a pop-up or pop-list, the global variable "cliq_in" is set to TRUE if an option at actually been chosen and FALSE if not.

I remind you that the function form_attach() makes it possible to bind the pop-up buttons to their respective forms at the beginning of the execution of the program, which is more practical than to do it during the creation of the resource. Especially that if one must add a form thereafter, the numbers of some are likely to be shifted.

[return to BIG toc] [return to Prog. toc]

BIG Selectable buttons

The B_CHECKB and B_ROUNDB buttons share the same extended type (B_SELEC). They are actually of the same category: SELECTABLE. Their only difference is that B_RADIOs are radio-buttons with a different aspect to better distinguishing them. These buttons can have an underlined character. During the management of the form, the keyboard shortcut <Alternate + character> will be equivalent to a click on this button. During the creation of the resource, the character to be underlined must be preceded by a '[' character. The routine to display the button will take care of the remainder. Warning, if several buttons of the same form use the same underlined character, it is the first (in the order of classification of the objects) which will be selected as the keyboard shortcut. It is possible that these buttons cause the program to leave the management of the form (EXIT), or that they are inactive (DISABLED). In the later case, the mouse click and the keyboard shortcut are without effect.

During the creation of one of these objects in the ressource editor, the width of the G_BUTTON does not always correspond to the width which will be "physically" occupied by the object drawn in the form, since the square or the circle is added beside the text. Here an advice: start by creating the button with a minimum size, i.e. the width of the text. Activate the grid option of the ressource editor (the horizontal grid normally has a step of 8 pixels, correcponding to the width of a system font character). Then increase the width of this button by three "units" if there is no underlined character, and by two otherwise. Thus, the width of the button in the ressource editor is matched with the width it will have once displayed by functions in BIG.

If bit 13 of ob_flags (BS_RIGHT) is set to zero, the button will be on the left side and the text on the right. If it is to 1, will be the opposite.

If bit 11 of the ob_flags (DCDEFAULT) is set, a double-click on the button will also activate the default button of the form (if it there one).

B_POPUPs do not have always have a extended type. The optional type 22 makes it possible to have automatically a small "following option" icon with two circular shaped arrow on the right of the button (prohibited for image or box pop-ups). On the other hand, it is mandatory to give it the attribute SHADOWED, it is this flag wich makes it a pop-up. Buttons B_LIST always have the "following option"icon, and are thus reserved for the pop-ups text.

The extended type of B_HELP buttons do not have any influence on their aspect. Their display is left to the care of the normals routines GEM. This extended type is used to distinguish them in the form when the Help key is pressed. If several objects have this extended type, it is the first one which will be used. It can be useful to have several of them in the same form. The first help form could be called by the key Help, the others only by a mouse click. This has the advantage of leaving the management of the help form to the routines of BIG, by means of using the extended ob_state explained above (this is what is done in the demonstration for the information form.

The B_UNDO have an extended type which is used at the same time to locate them at the time the <Undo> key is pressed and to give them the possibility of having a keyboard equivalent with the underlined character.

The B_DEFAULT do not have an extended type, the DEFAULT attribute is sufficient to locate them at the time of pressing on the <Return> key. However, they can also have the extended type B_UNDER to have a keyboard shortcut by usage of an underlined character.

As we quickly saw during the guided visit of BIGdemo, the forms in window have 4 basic buttons: 'Apply','Confirm', 'Reset' and 'Cancel' (you can obviously call them otherwise). According to the preferences of the programmer, it will be the pair 'Apply' and 'Reset', or the pair 'Confirms' and 'Cancels' which will be activated by the <Return> and <Undo> keys. The Bit 13 of the ob_flags (WFCLOSE) must be positioned to involve the automatic closing of the window.

For example, in the forms in window of BIGdemo, 'Apply' and 'Reset' are activables from the keyboard. 'Confirm' and 'Cancel' require a click mouse, but close the window automatically. Experiment and remove the attributes B_DEFAULT and B_UNDO of the two first to assign them to both others, and the window could be closed by the keyboard. One can plan in a program to leave the choice to the user which pair of buttons can be activated by the keyboard, by modifying the corresponding attributes in the resource in memory, while choosing a default configuration with the creation of the resource.

[return to BIG toc] [return to Prog. toc]

BIG Extended editable

Objects B_EDIT are "extended" editable fields, which authorize the data entry of more characters than the apparent width of the field. For example, editable itself can be 15 characters wide (width of the string te_pvalid), but the text can have a length more important, up to 255 characters.

The number of authorized character is indicated in the high order byte of the ob_state (it is not possible to modify this number during the course of execution of the program, because the necessary memory is reserved during initialization). it is imperative to place two arrows on both sides of the field, in the following way (the arrows are represented here by the characters "<" and ">" instead of the characters Ascii 4 and 3):

  • Text: < _____________ >

The field is preceded by an arrow and a space on the left, it is followed of a space and an right arrow on the right. These arrows are used to scroll the text with the mouse. The routine of the cursor placement at the poin of the click (when one clicks in the field) takes in account for its calculations the presence of these arrows if it is a B_EDIT object. If you omit the arrows and their spaces, the cursor will be positioned two characters on the left of the clicked position.

In addition, during the data entry of the characters, BIG considers that the string te_pvalid (the data entry filter) is active for the apparent part of the text. It is thus necessary to reserve the usage of the B_EDIT for editable made up of the same type of characters. For example the string te_pvalid will be "XXXXXXXXXX" or "9999999999". If it consists of several different filters, there will be bad surprise during the data entry.

[return to BIG toc] [return to Prog. toc]

BIG Movable form

The buttons B_MOVE make it possible to move a form on the screen. Its displacement can be done "in real-time", i.e. it is an image of the form and content that one moves until the new position, or simply a "phantom box" with the same dimensions. However, if there is not enough memory available to work in real-time (the screen must be saved entirety in a buffer), the display of the phantom box is automatically used, even if displacement in real-time is requested at the time of the call of the function. It is possible to force the use of the phantom box instead of real-time box even if there is enough memory.

When this button is clicked, and that one keeps the mouse button depressed, the form is moved. When the mouse is released, the form is "droped"to its the new position. Displacements of the form (or of the "phantom box") are done within the limits of the desktop, less three pixels on each edge, in order to compensate for the attribute OUTLINED as the majority of the root-object in forms uses this attribute.

[return to BIG toc] [return to Prog. toc]

BIG Text with graphical attributes

The B_FRAME are of type G_BUTTON. Only their extended type distinguishes them. The higher side of the frame will be displayed a half character height lower than the position of the button during its creation in the resource editor. The text will overlap this line, positioned at one character from the left edge. The extended ob_state is used to determine the graphic attributes of this text.

The B_GRASTR can be of type G_STRING or G_BUTTON. Type G_BUTTON is advised, because it makes it possible to better visualize (in the resource editor) the width of the object (which is used if the text must be underlined). If bit 13 of ob_flags (BS_RIGHT, already described with the selectable buttons) is set to zero, the text will be fixed on the left side of the object. If the bit is set to one, the text will be fixed on the right side.

The B_SMSTR are close to the B_GRASTR in their aspect. It is a text which will be displayed by means of the font 8x8, which is half height of the "normal" size (in high-resolution), but as wide. This preserves a good readability, compare to the font 6x6, really too small. If bit 13 of ob_flags (BS_RIGHT, already described with the selectable buttons) is set to zero, the text will be fixed on the left side of the object. If the bit is set to one, the text will be fixed on the right side. If the bit BackGround is set to one, the text will be written in transparent mode, if not in opaque mode.

[return to BIG toc] [return to Prog. toc]

3D Aspect in BIG

BIG makes it possible to give to the forms a "3D" aspect. The "BIG Method" is compatible with the specifications of the AES, which uses bits 9 and 10 of the ob_flags of the objects. BIG does not use and tests only bit 10, named "BKGR" (background), which is used to match the aspect of the object (in particular its pattern and its color) with those of the object located under him.

To carry out a 3D form with BIG, two cases are to be distinguished:

  • if one is using a display with 16 colors or more, and
  • if one is into 2 or 4 colors.

In the first case, the most beautiful effect is obtained when the root-object has one pattern set to 100% and the color number 8, which is defined like clear gray by defect. In the second case, the best is to give up on 3D. There is however a possibility of simulating it, but the effect is hardly esthetics: it is necessary to give a pattern to the root-object (the pattern with 50% is recommended) even if it means to change it for 100% gray if there is enough of colors. Then, in the two situations, that depends on the type of object BIG (look at the forms of the demonstration to better understand the following explanations):

  • The text of the objects of the type B_SELECT (B_ROUNDB and B_CHECKB) is always written in transparent mode, therefore they will always be in agreement with the pattarn and the color placed below. In addition, the drawings of the small round or the small square give by means of a shade the illusion which they "UP" when they are not selected, and that they are "inserted" when they are selected. There is thus nothing special to make to place these objects in a form 3D.
  • B_GRASTR must have the BackGround bit positioned. In this case, the text is transparent, and the black underlining is doubled of one shifted white line, to give an impression of 3D. On a background pattern, it is not advised to give to these texts the attribute Italic, it is not very readable. If the bit is not set, the text is displayed in opaque mode.
  • In the same way, B_FRAME are normally white rectangles, but become a transparent frame if there is a BackGround. The display of this frame is also doubled with a shifted white line. The text becomes transparent (same notices as for usage of Italic).
  • B_UNDER and B_UNDO become transparent in 3D. B_DEFAULT Buttons not being of G_USERDEF, they are drawn normally, i.e. white opaque. The easy way is to give them type B_UNDER even if one does not wish to affect keyboard shortcut to them, and to position their BackGround bit.
  • B_POPUP (having the extended type 22) and B_LISTs become transparencies thanks to the BackGround bit and are decorated with white lines on the left and top sides if they are not selected, on the right and bottom sides if they are.
  • The pop-ups menus themselves (as well as the free pop-up menus, menus B_LIST) have a specificity if there are at least 16 colors. If the Background bit is set for the root-object, the pointed option is displayed in black text on yellow background. To carry out this rather esthetic effect, the active palette is slightly modified, then restored at the end of the call. That is sometimes undesirable, especially if an image is displayed on the the screen at this time. One can then deactivate the bit BackGround. The option pointed by the mouse is then simply selected in an ordinary way, i.e. reversed.
  • Lastly, the editable objects (even if they are not B_EDIT) having a BackGround bit are transformed into G_FBOXTEXT (if this was not the case), possibly without frame, transparent. But their drawing remain done by GEM. It is not enough to give them the transparent attribute, because if they are G_FTEXT without BOX, the GEM manages the edition of the text in an incorrect way.

The method of the pattern 100% and the color number 8 does not work in less than 16 colors, because this color is then black. One can test at the beginning of the program the number of colors. If there is not 16 of them, it is necessary to pattern all objects concerned, or to put them in white ( no more 3D). If not, one can put them in gray.

Last point. A button DISABLED has a displayed text in grayed, i.e. 50% pattern. On an underlying pattern of same percentage and of the same color, the pixels of the text and those of the bottom can either coincide exactly, or to be exactly alternate. In the first case, the text will disappear from the sight, and in the second it will appear normally written. It is to better know about these optical illusions!

[return to BIG toc] [return to Prog. toc]

Images in BIG Forms

The objects of the extended types B_PICT make it possible to place an any image in a form.

Here are characteristics of this object:
At creation, it is theoretically possible to use any type of GEM object, but type G_BOX seems to me more indicated because it allows of good visualization of the coordinates of the future image in the ressource editor. Here the structure which contains the relative informations with this object:

typedef struct t_image_dial {
     MFDB mfdb_image;
     GRECT cur_pos;
} t_image_dial;
  • "mfdb_image"is a structure of the type VDI MFDB which entirely describes the image to be used (address, size, etc).
  • "cur_pos" is a structure AES GRECT making it possible to carry out a kind of clipping of the image, i.e. to use only one part to place in in the form.
  • "cur_pos" describes the coordinates of this part compared to the full picture.

At the creation of the resource, create your B_PICTs and give them the dimensions that the image will occupy (if the image is larger, a clipping is carried out automatically). Then, in the body of the program and after the call to the function initial(), carry out the loading of the image (or the images if there is several) proceeding like this :

  • Reserve the memory with:
        t_image_dial *img;
    img = (t_image_dial *) adr [object] .ob_spec.userblk->ub_parm;
    img.mfdb_image.fd_addr = (long) malloc (size);
    Where "adr" is the address of the form where the object is, "object" is the number of this object and "size" is number of bytes to reserve
  • Fill the other elements of structures MFDB and GRECT with the adequate values.
  • Do not forget to load your image (after decompression if necessary) to the address img.mfdb_image.fd_addr.

Thats all. It is not even necessary to release the storage areas reserved, the function end() takes care of this at the end of the execution of the program.

On the other hand, you must deal with the palette of your image if it has one. If the form is in a window, reserve memory for this pallet and place this address in the element win[index].w_pal of the corresponding BigWind (see the chapters on windows in BIG). BIG will be given the responsability to activate it when the window passes in the front and to deactivate it in the other cases. If the form is not in a window, you have to take care of the pallet.

Last possibility: if the image is a monochromic pattern (only one plan of color), it is possible to assign a color to its pixels. The index of this color is placed in the first four bits of the high order byte of the ob_state. The "white" points of the image will be displayed... in white! The four next bits represent the mode of copy of the image, according to the rule of VDI function vrt_cpyfm(), i.e.: 1: Replacement, 2: Tranparent, 3: Xor, 4: Inverse transparency) BIG does not check anything on this subject, take care of placing correctly a color and a view in the extended ob_state.

If the image has several plans of colors, it is displayed with the function vro_cpyfm() and the extended ob_state is ignored.

[return to BIG toc] [return to Prog. toc]

BIG Hierarchical menus

The B_HIERM are imperatively reserved for G_STRING of the menu options. The extended ob_state contains the number of the pop-up form which is related to this option. The management of the hierarchical menu deserves that one stops there a little for explanations.

A delay of approximately a half second is respected, then, if the mouse pointer is still on this menu option, the sub-menu is displayed (possibly transformed into scroll-menu if it is too high). The following problem arises then: If the mouse is brought on another title of menu, the corresponding menu is automatically unrolled by GEM! Obviously, this menu is likely to be placed "over" the hierarchical menu. It is useless to try to remove the management of the top menu by doing a wind_update(BEG_UPDATE) or menu_bar(0), because then the menu containing our B_HIERM would also disappears!

The only possible solution seems to be as follows: the hierarchical menu is closed again as soon as the mouse pointer goes above the sub-manu, i.e. it has a "y" position higher than the top of the sub-menu. It is thus forbidden to place a hierarchical menu at the first option of a menu, because this "above" would correspond to the input in the menu bar, and we would find the same problem: a new menu could be unrolled on top of the hierarchical menu.

In addition, although the menu option is a Userdef, the GEM takes the annoying initiative to consider it deselected as soon as the mouse pointer leaves it to move on the hierarchical menu. The function in charge with drawing this option into normal or in inverted carry out a whole series of tests and decide according to the context (sub-menu displayed or not) and on the position of the mouse pointer (on this option, on another option, leaving sub-menu from the right, leaving sub-menu from the left, leaving sub-menu from above...) how it must be drawn, and forces possibly the SELECTED bit.

All these considerations apply only to the hierarchical menus of the main menu. In the case of the menus in window, the situation is more simple. Indeed, it is not the GEM that manages this menu bar, it is a function in BIG. If the mouse cursor moves on another title of menu whereas a hierarchical menu is unrolled, this function takes care of closing it before displaying the new menu. So it is possible to place an associated hierarchical menu as the first option for a menu within a window.

The B_HIERM menu option must must be filled with spaces over all its width. Indeed, BIG places in the one but last character a small arrow (ASCII 3 or 4) directed towards the side the hierarchical menu will be unrolled. In the case of the main menu, the initialization function takes care of the operation once for all at the beginning of the execution of the program.

If your application has several menu bars, you will have to call yourself the create_hierm() function (to be seen in the chapter about forms management functions) at each change of menu (if the new menu does not have a B_HIERM, it is not necessary). In the case of windowed forms, BIG takes care of the operation each time a menu must be unrolled, since the window could be moved since last calculation. Moreover, if the sub-menu is likely to leave the screen by the bottom, it is shifted by a certain amount towart the top, or it is changed into scroll-menu if it is really too high. This is done only for the menus in window. For the main menu there is no shifting done, only a transformation into a scroll-menu if the hierarchical menu leaves the desktop by bottom.

[return to BIG toc] [return to Prog. toc]

BIG Toolbar in Forms

This type of form is created like any other. However, it should not comprise any object TOUCHEXIT or EXIT, nor any editable field. BIG do not carry out any test to control this. The other types of objects are authorized and managed like everywhere else (keyboard shortcuts, pop-ups and pop-lists, radio-buttons, etc). We will further see how to use the toolbars. But let us not forget that these forms must be as small as possible in height in order not to reduce too much the window work area. Their root-object will be widened by BIG to the double of the desktop width. it is not possible to shift them as it is the case of the menus in window bu default, but nothing prevents you from placing arrowed buttons and from managing yourself the shifting. Avoid placing the most usually used options towards the right side, because they are inaccessible when the window is narrowed.

[return to BIG toc] [return to Prog. toc]

BIG Keyboard shortcuts

In the menu options, the value entered for the keyboard shortcuts must follow certain requirements. The keyboard shortcuts using a combinations of several special keys, as <Shift + Control> for example, are possible but one should not overuse them for ergonomic reasons. Moreover, the general guideline is to place in the menus shortcuts using only the <Control> key, the <Alternate> key being reserved for the keyboard shortcuts in the forms. In addition, the shortcuts without special key (directly the character) are not authorized, in order not to create conflict with options of the kind "Text 1".

BIG does not take in account the filling spaces which can follow the values entered in the ressource editor for the keyboard shortcut. The last "real" character of the menu option is thus the character who must be pressed, the characters who precede it must be "^" for the <Control> key, the character Ascii 7 (a rhombus in a rectangle) for the <Alternate> key, the character ASCII 1 (the up arrow) for the <Shift> key.

The search routine of the keyboard shortcuts does not make the difference between lower case or upper case letters (neither in the menus, nor in the forms). It does not differentiate either the <Shift right> key from the <Shift left> key.

Since the search is carried out in the resource loaded in memory and according to the Ascii code of the typed character, the management of the keyboard shortcuts is independent of the type of keyboard (Azerty, Qwerty, etc), and only dependant on the equivalent placed in the corresponding option. To modify a keyboard shortcut of a program using BIG, it is enough to modify it in the ressorce file. The new keyboard shortcut will be active immediately without having to recompile the program. We can thus consider an option (or an external little program) allowing the user to entirely reconfigure the shortcuts according to his/her personal preferences. He/she would thus have the possibility of assigning to the options which he/she generally uses a specific keyboard shortcut according to his/her taste.

It is possible to assign nonalphanumeric keys to a keyboard shortcut. In this case, the special key is optional (for example, an option can be called by using the <Undo> key alone. Here the list of the key words to be placed in the menu option, for each one of these keys, which you will recognize:

Help, Undo, Backspc or Bksp, Del or Delete, Insert, Clr, Fn.

"Fn" is used for the function keys, "n" is obviously to replace by the number of the key. No difference is made between the upper case and lower case letters. Several key combinations are prohibited, because reserved by the system are: <Alternate + Help> (Hardcopy), <Alternate + Insert> (left-click), <Alternate + Clr> (right-click) and all the combinations <Alternate + numerical> from the right numeric keyboard (reserved for entering ASCII codes on the most recent versions of the TOS).

According to the context, the search for correspondence between an option or a button and the keyboard shortcut is carried out according to certain rules of priority. The simplest case is the one where an ordinary form is displayed. The pull-down menu is then inactive. Search is only done in the form.

If the window in the front is an ordinary window, search is only done in the menu (and its hierarchical sub-menus). If it is a window with form or toolbar, and that this form does not comprise editable fields, search is done in priority in the menu, then it continues, if nothing were foun,) in the form or the toolbar of the window. If the form of the window comprises one or more editable fields, search is done only in the form. If the window comprises a menu, it is this menu (and its hierarchical sub-menus) which has priority. Search continues then in the main menu. It is impossible to have a window containing at the same time a menu, a toolbar and a form or any combination two by two of these elements. BIG does not allow it, and that would not have great interest.

Last word on the UserDef objects, in connection with B_NICELINE objects. They are by no means essential, but they were added to BIG because the normal objects cause a crash with the Let Them Fly utility. BIG thus transform automatically the menu separation lines made of of dashes ("-") or equal signs ("=") in B_NICELINE (the DISABLED attribute must obviously be set).

[return to BIG toc] [return to Prog. toc]

BIG Help-bubbles

The creation of the Help-bubbles is very simple, and their management during execution of the program is done entirely by BIG. The texts of the bubbles are placed in the resource in free strings. To indicate that an object has a bubble, it is necessary to position the bit 14 of its ob_flags (definite under name "AIDE_OBJET"). The number of the free string as usual is placed in the high order byte of the ob_state. Since the ob_state of objects B_POPUP and B_LIST is already used, this number is placed in the extended ob_state of the root-object of the pop-up form linked to the button.

The bubbles can be affected only with objects in forms. Therefore, no bubbles on the desktop, nor in the menus (in windows or not). The objects not being able to receive bubbles are: B_EDIT, B_FRAME, B_GRASTR and B_FNCP, because the high order byte of their ob_state is already used (the pop-up and pop-lists are exceptions).

The global variable aide_en_ligne determines the behavior of bubbles:

  • If its value is zero (default value), all the bubbles are unactivated.
  • If its value is -1, the bubbles are automatically active, and are displayed as soon as the mouse passes over an object which has one of them.

If its value is positive, it is regarded as by a bit mask corresponding to the special key combination (Control, Shift, Alternate) that must be depressed so that the bubbles are displayed. It is for example the case in the demonstration, where this variable is worth 4, which corresponds to the Control key.

The maximum length of a text of bubble is of 960 characters, which largely exceed the capacities of the current ressource editors!

The function bulle_attach() makes it possible to bind the buttons, authorized to have a Help-bubble, to their respective bubbles free strings. This is done at the beginning of the execution of the program, which is more practical than to do it during the creation of the resource. Especially if one must add a free string thereafter, the numbers associated with some strings are likely to be shifted. This function also positions AIDE_OBJET bit of the ob_flag.

[return to BIG toc] [return to Prog. toc]

Working with the windows

BIG deals with most of work on the windows. It opens them, closes them, and entirely handles them (redraws, scrolling, displacement, resizing, iconification, etc.). It can manages an "unlimited" number of windows per application. Lets be clear: the GEM makes it possible to display simultaneously only a limited number of windows to the screen (7 on the old TOS, more starting from version 4). BIG cannot overcome this limit, but it carries out an internal management of the windows which always exist in memory even if they were closed from the screen. A software can thus work virtually with tens of windows, the only limit being the quantity of memory available.

The principle of windows in BIG is very simple: an ordinary window GEM is created and opened, but it does not have any attribute. In this window is placed a "window-form" which is "BIG window". Thus, some new buttons were added, but the window is nevertheless handle by GEM, without any programming change at the operating system level. That also makes it possible to work comfortably by using the standards messages of the AES, the list of rectangles for the redraw, etc, without risking conflicts with the other present applications. As a logical consequence, the GEM function wind_calc() becomes unusable since the window frame area and the working area the same for GEM! Is is therefore mandatory to use the BIG function equivalent bwind_calc().

In the same way, the possibility of handling the background windows is done very simply. When a message WM_TOPPED arrives, BIG acts in function of the object of the "window-form" which was clicked: either it makes indeed the window to go to the front, or it activates another function, displacement for example.

For the possibility of making the windows leave the screen by the left, it is necessary to be careful, especially at the time of messages of redraw. Indeed, the GEM follow the principle that a window cannot leave the screen by this side, and in certain situations, the zone to be redrawn can contain negative "x" coordinates! But BIG is watching and and does what is necessary to correct the values when the case arises.

The working area of BIG windows is not stupidly transparent like the one of the traditional windows GEM. Therefore, it is not anymore necessary to begin by a a "washing" redraw of this zone. It is even possible to give it a pattern and a color! It is also possible to change the colors of the buttons, the frame and the color of the scroll bars, the sliders, etc. We will speak about it in detail in the chapter on window management functions.

The new buttons involve obviously the presence of new window attributes:

  • SMALLER iconification button
  • CYCLER "following Window" button
  • ALLSIZER Three new Sizers at the same time. It is not possible to activate only some of them (i.e. the three or none). However, the normal SIZER is independent.

The NAME Attribute of GEM can be used, but BIG is unaware of it. Whatever are the attributes chosen, the window will always have a title bar, even if the title itself does not exist (empty string), but in my opinion windows without title are to be avoided. On the other hand, attribute MOVER is used to activate the possibility of moving the window. If this attribute is absent, the window will have a title bar, but this one could not be used to move the window.

[return to BIG toc] [return to Prog. toc]

BIG Events

So that the functions of BIG communicate with GEM and with functions of the main program, several new types of events are used. The type of event is placed in element 0 of the buffer of event, which is a table of integer. It can thus take values from 0 to 65535. GEM uses only one about thirty these values, so that the others are available. Certain systems (as the Tube GEM) reserve several types of extended events. The new events of BIG are different from all the others events of which I have knowledge.

In all the cases, these events respect the model GEM, i.e. the type in element 0 of the buffer, the identifier of the recipient in element 1, and '0' in element 2, since none of these events need more information. The following elements contain information dependant on the type of message.

  • BEV_HIERM A hierarchical option of menu of the top menu was selected. The program receives an event MU_MESAG.
    • Word 0: BEV_HIERM (150).
    • Word 3: Number of the title of the top menu.
    • Word 4: Number of the option in the main menu
    • Word 5: Number in the resource of the sub-menu tree.
    • Word 6: Number of the object clicked in this tree.
  • BEV_FREEPU The free pop-up option that has been was selected. The program receives an event MU_BUTTON.
    • Word 0: BEV_FREEPU (151).
    • Word 3: Number of the pop-up tree.
    • Word 4: Number of the object clicked in this tree.
  • BEV_WFORM An object EXIT of the form in window was clicked. The program receives an event MU_BUTTON.
    • Word 0: BEV_WFORM (152).
    • Word 3: Index BIG of the window form.
    • Word 4: Number of the clicked object.
  • BEV_WMENU An option of menu in window was selected. The program receives an event MU_BUTTON.
    • Word 0: BEV_WMENU (153).
    • Word 3: Number of the menu title.
    • Word 4: Number of the clicked option.
    • Word 5: Index BIG of the window containing the menu.
  • BEV_WHIER A hierarchical option of menu of menu in window was selected. The program receives an event MU_BUTTON.
    • Word 0: BEV_WHIER (154).
    • Word 3: Number of the menu title.
    • Word 4: Number of the option which called the sub-menu.
    • Word 5: Number in the resource of the sub-menu tree.
    • Word 6: Number of the object clicked in this tree.
    • Word 7: Index BIG of the window containing the menu.
  • BEV_TOOL An object of toolbar of a window was clicked. The program receives an event MU_BUTTON.
    • Word 0: BEV_TOOL (155).
    • Word 3: Index BIG of the window containing the toolbar.
    • Word 4: Number of the clicked object.

In addition, at the time of events occurring on a window, BIG returns to the program the corresponding message GEM. For example, if a window BIG is moved, the GEM does not generate a message WM_MOVED, since they are the routines of BIG which carry out displacement. But BIG simulates a similar message and returns it. Thus, the program is informed of all that occurs.

In this domain there is "new" messages intended to simulate those of GEM... but the GEM do not have them. Here:

  • WM_CYCLED (38) Cycling of window.
    • Word 3: GEM Handle of the window which has started the cycling.
    • Word 4: GEM Handle of the new window in front.
    Message WM_BOTTOM (33) of the recent versions of the AES is under BIG equivalent with WM_CYCLED.
  • WM_ICONIFY (34),
  • WM_UNICONIFY (35), and
  • WM_ALLICONIFY (36)
    are all the three implemented only in the last versions of the AES. However, one can use them under BIG in any Atari configuration.
    • Word 3: Handle GEM of the window concerned.

All the messages of the type GEM (WM_xxx) are thus turned over by BIG to the application, but conversely, they all can be sent by the application, by means of the function send_mesag().

The only restriction concerns sending messages WM_HSLID and WM_VSLID:
If the application sends one of these messages, the position of the corresponding slider will not be modified. This modification must be made before by the program. On the other hand, the values of BigWind::w_lin and BigWind::w_col are brought up to date.

[return to BIG toc] [return to Prog. toc]

BIG Internal resource

BIG has an integrated resource for its own use. It is not incompatible that the program itself has its resource (external or not) and that BIG adds some integrated trees. This included resource beeing part of program itself, it will located somewhere in memory. It is enough to know where to transmit the addresses necessary to the functions which need it. The usage by BIG of this included resource is entirely automated. You do not have to worry about it.

Let us recall that BIG can work the same way with an external or an internal RCS. Please to the chapter 'Working with an internal resource' for more information.

This included resource has 8 free forms, 2 alarms and 1 free string. The first form is the movable alert box which is mofified and used by the call of the function big_alert(). The following form contains the alert icons (BIG offers 9 shape for icons instead of the 3 usual ones). The third contains the two scroll arrows of the menus in window. The fourth contains the G_ICON used for drawing yhe B_ROUNB, B_CHECKB and the 'following option' button of the pop-ups and pop-lists. The following contains the G_BOX the two arrows used for the construction of the scroll-menus. The following contains the form being used to create the pop-lists. The last but one is the form-window itself and the last contains all the small icons used for the buttons of window.

As for alerts, the first is the one used to announce that the external resource was not found to be loaded, and the second informs the user that it is impossible to open a new window.

To finish the free string contains the text which is displayed if one try to launch a program under BIG (thus under GEM) starting from the AUTO folder.

[return to BIG toc] [return to Prog. toc]

BIG Window Structure Detailed Description

Under GEM, one starts by creating the window with the function wind_create(), then opens it with wind_open() to display something in its working area. GEM keeps up to date data tables which inform it at any time about a given window. BIG makes the same thing, but its data tables contain much more information, and the number of tables (thus of windows) is not limited.

To be precise, it uses a table of structures. It is this structure, called BigWind, which contains all the necessary informations for the window management done by BIG. The routines of initialization of the program reserve, at the beginning of the execution, a storage area of the size necessary for the number of windows which will be used by program. We have only one global variable (called "win"), which is declare as BigWind *win, i.e. "pointer on a BigWind structure". From there, we can reach the structure of any window as a table. For example, the structure containing the informations relative with the third window is with the address win[2] (since numerotation starts to 0).

Note:
(You can click on any of the structure elements to get more detail)

The content of the BigWin structure is the following:

typedef struct bigwind {
    int     w_hg;           /* Positive GEM Handle, -1=init, 0=closed */
    int     w_type;         /* BIG type of windows */
    int     w_attr;         /* GEM Window attribute */
    GRECT   w_curr;         /* window current coordinates */
    Oldw    w_old;          /* coordinate before iconification */
    int     w_wmini;        /* minimum width */
    int     w_hmini;        /* minimum Height */
    int     w_wmaxi;        /* maximum width */
    int     w_hmaxi;        /* maximum Height */
    int     w_wunit;        /* horizontal shift unit */
    int     w_hunit;        /* vertical shift unit */
    int     w_hprot;        /* number of protected points on left */
    int     w_vprot;        /* number of protected points on top */
    Cont    w_cont;         /* vary according to window content */
    Palette *w_pal;         /* Pointer to the associated pallet */
    OBJECT  *w_bar;         /* window with menu/toolbar => tree address */
    OBJECT  w_fen[NGAD];    /* windowed form */
    int     w_flags;        /* full win, active Kb, redraw, justification, last win */
    int     w_mouse;        /* mouse pointer shape in the window */
    int     w_icon;         /* iconification : associated  window index */
    FNCP    w_redicn;       /* Funct. pointer redraw if win iconified */
    FNCP    w_cycle;        /* Funct. pointer display next window */
    FNCP    w_redraw;       /* Funct. pointer win redraw */
    FNCP    w_top;          /* Funct. pointer bring win to top */
    FNCP    w_close;        /* Funct. pointer close win */
    FNCP    w_move;         /* Funct. pointer move win */
    FNCP    w_size;         /* Funct. pointer resize win */
    FNCP    w_full;         /* Funct. pointer full size win */
    FNCP    w_hslid;        /* Funct. pointer slider horizontal */
    FNCP    w_vslid;        /* Funct. pointer slider vertical */
    FNCP    w_uppage;       /* Funct. pointer one page up */
    FNCP    w_dnpage;       /* Funct. pointer one page down */
    FNCP    w_lfpage;       /* Funct. pointer one page left */
    FNCP    w_rtpage;       /* Funct. pointer one page right */
    FNCP    w_upline;       /* Funct. pointer one line up */
    FNCP    w_dnline;       /* Funct. pointer one line down */
    FNCP    w_lfline;       /* Funct. pointer one line left */
    FNCP    w_rtline;       /* Funct. pointer one line right */
    char    *w_title;       /* window title pointer */
    char    *w_infos;       /* window info pointer */
    long    w_wtot;         /* max window content width (in pixels) */
    long    w_htot;         /* max window content Height (in pixels) */
    long    w_lin;          /* window first line */
    long    w_col;          /* window first column */
} BigWind;

The element "w_curr" is a substructure GRECT, definite like this by file AES.H:

typedef struct
{
  int g_x;      /* X coordinate */
  int g_y;      /* Y coordinate */
  int g_w;      /* Withdh *
  int g_h;      /* Heigth *
} GRECT;

The element "w_old" a Oldw substructure, used "to put aside" the coordinates and attributes of the window when it is iconified or brought to the display size, in order to be able to restore them then:

typedef struct oldw {   /* iconified window data *
  GRECT w_coord;    /* coordinates *
  int w_att;            /* Attributs *
} Oldw;

The element "w_cont" is a union:

typedef union cont {    /* Define the contents of a window */
  Form w_form;          /* Data if form */
  MFDB w_img;           /* Data if image */
  char *w_adr;          /* Data If text or othern */
} Cont;

This union is itself made up of a substructure:

typedef struct form {   /* Define for a windowed form */
  OBJECT *w_tree;       /* Adresse tree */
  int w_edit;           /* Current editable */
  int w_pos;            /* Position of the cursor */
  char *w_bak;          /* save form state */
} Form;

The last element of the union, "w_adr", is a simple pointer on data. If the window contains text, it will be able to indicate it directly, if not it will be able to point on a zone describing these data.

The Palette type is defined as follows:

  typedef int Pallet [3];

Finally, here the definition of the type "FNCP", which means "FuNCtion Pointer":

  typedef void (*FNCP) (void);

detailed description of the BigWin structure. All the names of elements start with w_. For each element, I indicate the mnemonic significance of his name, which is used to remember it more easily, as well as the value given at initialization.

  • int w_hg: The GEM Handle. To access a window, BIG uses naturally the GEM calls. It is thus essential to preserve somewhere the GEM handle of this window. At initialization, this element contains -1. This indicates that the window has never been opened. As soon as it is created and opened, it contains the GEM Handle for this window. But when it is closed, its value is not set back to -1 but to 0, which indicates that it was created, then destroyed by the GEM, but that it always exists for BIG. The values contained in the other elements of the structure are therefore not anymore the default values, but they containts the last parameters of the window, which will be used if the creation of this window is requested again to GEM.
  • int w_type: Type of BIG Window. This is the type of windows definition is from a BIG perspective. Big defines the following types:
    • WTYP_NORM The window is "normal" contains probably text. The programmer must write the display routine of display, BIG handle the remainder.
    • WTYP_PICT The window contains an image. Big handle everything.
    • WTYP_FORM The window contains a form. Big handle everything.
    • WTYP_TOOL The window contains a toolbar.
    • WTYP_MENU The window contains a menu.
    A window cannot have at the same time a toolbar and a menu. BIG does not check, but gives the priority to the menu. w_type is set to WTYP_NORM by default.
  • int w_attr: The Windows Attributes. They are the GEM attributes of the window (slider, mover, etc) that one indicates to the function wind_create(). Several sets of attributes are predefined by BIG to simplify work:
    • WATR_ALLG All the GEM attributes are activated.
    • WATR_ALLB All the BIG attributes are activated, i.e. really all.
    • WATR_CURRG Most common (current) GEM attributes.
    • WATR_CURRB Most common (current) BIG attributes
    • WATR_FORMG Most common GEM Form attributes.
    • WATR_FORMB Most common BIG Form attributes.
    ALL means all the attributes, CURR the most common attributes (all except the lines of information), and FORM for the windowed form (NAME, CLOSER and MOVER). The 'G' means that the attributes are limited to those of GEM, the 'B' means that they also include the extended attributes of BIG. WATR_CURRB is the default value at initialization.
  • GRECT w_curr: current coordinates and dimensions of the window. This information is upgraded with each change of size or position of the window. At initialization the value is: {0,0,100,100}
  • Oldw w_old: Recording of the coordinates and the attributes of a window before iconification, in order to restore them at the time of desiconification. int w_wmini, w_hmini: minimum Width and Height of the window working area. If one tries to dimension it with lower values, BIG takes these minimums. Calculation takes account of the possible presence of a menu or of a toolbar in the window.
  • int w_wmaxi, w_hmaxi: maximum Width and Height of the window working area. If one tries to dimension it with higher values, BIG take these maximums. Calculation takes account of the possible presence of a menu or of a toolbar in the window. But do not place objects in this toolbar on the right of the maximum width of the window! If the window is of type image (WTYP_PICT), dimensions of the image become then the maximum dimensions of the window.
  • int w_wunit, w_hunit: Horizontal and vertical shift units of the window, in pixels. At the time of a click on one of the scroll arrows, the contents are shifted in the required direction by this value. For text, it would be respectively the width and the height of a cell of character. With initialization: {1,1}.
  • int w_hprot, w_vprot: Horizontal and Vertical Protection. Gives the number of pixels which will be "protected" on the left (horizontal) and in top (vertical) of the working area. The events of displacement of a line to the top, bottom, the left or the right-hand side will not affect this part of the display, which remains thus protected. That allows, for example if columns of informationare are displayed , to preserve in top of the window the titles of these columns even if one moves vertically. These elements are fixed at 0 with initialization. It is the programmer who must, if necessary, to place there other values.
  • Cont w_cont: Content of window. Fixed at "0L" at init time, this element is in fact a union. It depends on what is displayed in the window. The elements of this union are:
    • Form w_form `Form. If the window contains a form, w_cont is a structure Form, defined by BIG. Here is description:
      • OBJECT *w_tree: Address of the form.
      • int w_edit If the form contains one (or several) editable field(s), number of object of the field where the cursor is. -1 if not.
      • int w_pos If the form contains one (or several) editable fields position of the cursor in the current field. -1 if not. char *w_bak: BIG is able to manage the buttons 'Confirm', 'Cancel', 'Apply' and 'Reset' of forms, by restoring the state of the form in the event of cancellation or reset. This pointer indicates the buffer of backup state for the form.
    • MFDB w_img 'Image'. If the window contains an image, w_cont is MFDB. The MFDB (Memory Form Block Definition) is a standardized VDI structure, which contains all the necessary informations with the management of an image (its address, its dimensions, etc). Thanks to this standardization, BIG can deal completely with the display of the image in the window, without intervention of the program itself.
    • char *w_adr: If the window contains neither an image, nor a form (it then contains probably text or a calculated graphics), this element is a pointer on char which indicates the beginning of the storage area where the data (the text) are stored. The display routine of this window will be able to then find them directly, whatever is the current window.
  • Pallet *w_pal: Pallet. This element is a pointer on a buffer zone of N time 3 int, 'n' being the number of displayable colors. Each of the 3 words definite values of red, green and blue of the color. Thus, it is possible to associate a palette with each window. That is almost essential for the window of images, but can prove to be useful for other windows. If this element is ZERO, BIG activates the default pallets. Point is ZERO at initialization.
  • OBJECT *w_bar `'Bar'. If the window contains a menu bar or a toolbar, this is the addresses of the tree of this menu.
  • OBJECT w_fen [23] 'Window'. It is in this zone of 23 OBJECT strctures that the 'windowed form' of BIG windows is copied. Indeed, it consists of 23 objects, and each window has its own, with characteristics which its specific to this window (for example, certain objects could be hidden if the window does not have the corresponding attribute. Normally, the programmer does not need to modify nor even read the information placed in this element of BigWind. The functions of BIG take care of everything, some are precisely intended to modify the data in this element (the color of an object, for example).
  • int w_flags This element is a mask of bits. Here its description:
    • Bit 0 WFFULL (Window flag FULL): is set if the window currently has its maximum size (full opening).
    • Bit 1 WFARROW (Window Flag ARROW): is set if the window must be handled starting from the keyboard. The arrow keys correspond to the arrows of the windows, and the <Shift + arrow> correspond to the scroller. <Esc> opens the window with its maximum size or that of the screen, or brings back it to its preceding size. Moreover, if the window is of type WTYP_NORM, <Clr> brings the display on the first line and <Shift + Clr> on the last (less the height of the window).
    • Bit 2 WFCALAG (Window Flag Position): When set indicates that the width and the height of the working area of the window must always be multiples of the units of shift. In the same way for the positioning of the contents of the window at the time of a Slider event.
    • Bit 3 WFDECAL (Window Flag Shift): Necessary by the presence of new Sizers. If it is not set, the part of the contents displayed from the upper-left angle of the working area of the window will not be modified, even in the event of redimensioning by Upper Left Sizer. If the bit is set, the displayed part will be possibly be updated. By example, if you reduce the height of the window of 50 pixels by means of the Upper Right Sizer, the contents of the window will remain with the same 'virtual'position, and thus the display will begin 50 lower pixels. If the bit is not set, the display will always start at the same place.
    • Bit 4 WFGROUP (Window Flag Grouping arrows) If this bit is set, the four arrows of the window will be grouped in the lower right angle. This flag must NEVER be put for a window form.
    • Bit 5: reserved
    • Bit 6: reserved
    • Bit 7: WLAST (Window LAST) It is used by BIG to know if the window is the last of those which were declared (NEVER modify this bit).
    At initialization only WFARROW is set.
    The low-order byte of this word is entirely used or reserved for possible future extensions of BIG. On the other hand, the most significant byte is not used, nor not even tested. You are thus free to use it with your own way if the windows of your program need other flags.
  • int w_mouse: If this element is equal to zero (value with initialization), the mouse will always have the traditional shape of arrow. If not, the value is interpreted as the AES number of the shape which the mouse must take in the working area of the window (when the window is in the foreground).
  • int w_icon: If the window is normal, this element contains '- 1'. If it is iconified, it contains index of the associated BIG window. That mean that if the window was iconified alone, it is its own index, but if it belongs to a group of iconified windows in only one icon, it is the index of the principal window, that which was actually iconified, the others being temporarily destroyed. At the time of desiconification, BIG will seek all the currently closed windows whose this element is the index of the one asked for the desiconification, and it will reopen them.
  • FNCP w_redicn 'REDraw ICoN' Pointer on a routine for redrawing the contents of the window which is used only if the window is iconified. If it contains 0L, it is the normal routine (see next element) which is used. Initialized with 0L.
  • FNCP w_cycle Pointer on the routine to bring in the foreground the following window. At initialization, it points on the function next_wind().
  • FNCP w_redraw Pointer on the redraw routine of the window. Initialized with 0L. This pointer is necessary only if the window contains another thing that an image or a form, because in these case BIG takes care of the redraw. If there are 'protected' zones in the top or on the left of the display (or both), it is necessary to take this in account in the routine. It must display the contents of the protected zone(s) independently of the display itself.
  • FNCP w_close Pointer on the routine for closing a window. At initialization, it points on the function closed() which closes the window and requires of GEM to forget its existence (but BIG has more memory). However, it will be necessary in certain cases that the programmer writes this function in order to release if necessary the occupied storage area for example by the text of the window.
  • FNCP w_move Pointeur on a routine which informs GEM that the window was moved, and which records its new coordinates. At initialization point to the function moved().
  • FNCP w_size Pointeur on a routine which informs GEM that the window was resized, and which records its new coordinates. Point at initialization on the function sized()or size_form() in the case of a window form. See in the chapter of the guided visit what was said as in connection with the histograms window.
  • FNCP w_full Pointer on the function which gives to the window its maximum size, or brings back it to the preceding ones if it is already to the maximum. This maximum size is possibly limited in the case of a window image or form to the dimensions of this image or this form. The new coordinates are transmitted to GEM. At initialization, points on the function fulled() or full_form() in the case of a window form.
  • FNCP w_hslid, w_vslid 'Horizontal SLIDer' and 'Vertical SLIDer' .Pointers on the functions to be carried out in the event of displacement of a slide box (horizontal or vertical) along the corresponding slider. The function carries out the tests necessary, transmits information to GEM and records it. At initialization, point respectively on hslid() and vslid().
  • FNCP w_uppage, w_dnpage, w_lfpage, w_rtpage 'Up page', 'Down page', 'Left page' and 'Right page'. Pointers on the functions to be carried out in case of event of slider, i.e. a request for shifting per page to the top, bottom, left or right side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization, point respectively on uppage(), dnpage(), lfpage(),and rtpage(). These functions move the contents of the window height or width (according to the case) of the window, or less if one is 'with the end' of the display.
  • FNCP w_upline, w_dnline, w_lfline, w_rtline 'UP LINE', 'DOWN LINE', 'LEFT LINE' and 'RIGHT LINE'. Pointers on the functions to be carried out in case of the arrows events, i.e. a request for shifting per line to the top, bottom, left or right-hand side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization, point respectively on upline(), dnline(), lfline() and rtline(). These functions move the contents of the window height or width (according to the case) of the step size noted in the elements 'w_wunit' and 'w_hunit'.
  • char *w_title Pointer on the window title. 0 at initialization.
  • char *w_infos Pointer on the window line of infos. 0 at initialization.
  • long w_wtot, w_htot 'Total Width' and 'Total Height'. These elements contain respectively the width and the total height of the window, in pixels. For an image, that corresponds to dimensions of this image. For text, the width would represent the maximum number characters of a line multiplied by the width of a cell of character. The height would be the number of lines multiplied by the height of a cell of character. 0 at initialization.
  • long w_lin, w_col 'Line' and 'Column'. Represent (in pixels) the first column and row to be displayed in the upper left corner of the working area of the window, compared to the total contents (w_wtot and w_htot). 0 at initialization.

[return to BIG toc] [return to Prog. toc]

BIG in a multitasking environment

BIG behaves icorrectly under a multi-task environment, but in certain cases a slow down can be noted (it is a general case in this type of environment). In particular, under MultiTOS, where the management of the timer is far from being perfect, BIG can be capricious in its management of the right-clicks, which use precisely the MU_TIMER event. For a reason which I really do not understand, the double-clicks are also badly handled.

With the use of different multi-task systems, Geneva for example, everything works much better, which seems to confirm that many things were done incorrectly in MultiTOS.

But there is an important difference between these environments and the traditional mono-task environments (which in fact is also multi-task, the desktop accessories are a clear proof). It concerns the sending of WM_TOPPED messages. In a normal situation (mono-task), the message is sent to the application as soon as a background window is clicked, and before the mouse button is released. It is to some extent a message TOUCHEXIT, if I dare to say.

In multitask, the message is sent only once the button of mouse was released!

For this reason in this environment, it is not possible (under BIG) to move a background window while mouving the mouse with the mouse button down. Indeed, when a message WM_TOPPED reaches BIG, it seeks if the window concerned is of type BIG, and if it is the case, on which object of the form-window the click took place. If it is on one active element (bars displacement, sizer, slider, etc), the window is not put in foreground, but a management is made according to the object.

Under multitask, when this message arrives with BIG, the mouse button is obligatorily already released. The same principle is applied (ignore the message to the profit of a window function), but it is too late for to realize click-move-release. Thus remains only the second solution: the click-move-click. All that does not obviously relate to the window in the foreground.

[return to BIG toc] [return to Prog. toc]

Parameters and pointers on functions

The functions called by objects B_FNCP are of type: void function(void) It cannot thus receive parameters nor to return value. There are situations where that is a problem, because it will imperatively be necessary to transmit information to the function, and it will have to answer something.
What can be done?
It is enough to set up a storage area, or a global structure, or a table of parameters, according to the context and the preferences of the developer, where will be placed information to exchange with the function. It is exactly what the AES and the VDI do with the tables contrl[], intin[], ptsout[], global[], etc. The demonstration, voluntarily simple, does not present an example of this method, but it is a little what is carried out by the function close_txt(). It calls the function closed() which is charged to close a window. But, being declared void closed(void), one cannot transmit the handle to the window in question. close_txt() place thus the handle GEM of the window to be closed in word 3 of the table buf[], which is a global variable, then it calls closed(). This one will seek in buf[3] the information which it needs: the GEM handle of the window to be closed.

[return to BIG toc] [return to Prog. toc]

Working with an integrated resource

It is completely possible to develop with BIG an application using an integrated resource instead of an external RSC file. To carry out that, it is necessary to use a resource editor able to generate a file RSH containing in the form of C source code the description of the resource. It is then enough to place at the beginning of the program the line "#include PROGNAME.RSH".

Normally, one reaches the addresses of the various trees and objects by the intermediary of table $rs_trindex[] (and rs_frstr[] for the free strings). Under BIG, one uses the table "$ir_trindex []". And this even if the resource is not integrated!

Indeed, at the beginning of the execution, the function initial() places all addresses of the tree structures in this table, wetheir the resource is integrated or not. Thus, that facilitates work in one or the other of these situations, and the use of the GEM function rsrc_gaddr() becomes useless.

Here a description of syntax to be used. The address of a tree (object 0) is obtained for example by:

    adr = ir_trindex[TREE];

And addresses it of a particular object by:

    adr_object = ir_trindex[TREE][OBJECT];

With: OBJECT *adr, *adr_object;

The addresses of the strings and free alerts are obtained by the use of the function get_string().

It is necessary that BIG knows how it can reach addresses of the elements of the resource. The function initial() puts at TRUE the global variable intgr if the resource is integrated, and to FALSE if it is external.

If we work with an integrated resource, we transmit to BIG by the parameters of the function initial() the start addresses of tables rs_trindex[] and rs_frstr[]. These addresses are then simply copied in the tables of BIG in order to be used when it is necessary to obtain an address. If we work with an external resource (in this case, the parameter nb_tree is equal to 0), we can transmit 0 to be clean, but initial() simply ignore these parameters. Nevertheless it will place the addresses in the table ir_trindex[].

Study the source of the demonstration to see how this is treated. It is enough to change the 0 into 1 in the line

#define INTGR 0

to recompile the demonstration with an integrated resource. This definition and some instructions intended for the compiler make the difference between these two situations and the program is always compiled appropriatly. If the resource is integrated, we include the file "BIG2DEMO.RSH", and we transmit to initial() the addresses of the tables with "(OBJECT *)rs_trindex" and "(char *)rs_frstr" as well as the number of trees of the resource: 22 (forms and menus). If the resource is external, we include simply file BIG2DEMO.H (the definitions) and the other parameters are put at 0. In the body of the program we use simply table ir_trindex[] without us worrying about any another thing (except in the function winicn(), to obtain the address of a free image).

Last point: if the resource is integrated, the coordinates and the dimensions of the objects must be adapted to the current resolution, by the GEM function rsrc_obfix() (what is performed automatically by GEM with the loading of an external resource by the function rsrc_gaddr()). The function initial() takes care of this automatically for the integrated resources. An advice: in the resource editor, always fix the objects on a character offset.

[return to BIG toc] [return to Prog. toc]

Programing Accessory with Big

I remind you that the program BIG2DEMO.PRG can be renamed in BIG2DEMO.ACC and be launched like an accessory. The programming of desktop accessories under BIG is even simpler than under GEM, since certain operations are automatically carried out. Briefly let us point out the principle:

A desktop accessory is an application like any other. Normally, an accessory cannot have a menu bar, but as that the demonstration shows, it is easy to circumvent this limit by placing it in a particular window (of other processes, like protocol Tubes GEM, make it possible to place it like normal menu, but with the condition that the current principal application recognizes also this protocol). The main feature of an accessory is that it never stops running. It is formally forbidden to leave a desktop accessory with appl_exit() or any other function! It is installed automatically during the boot, and is stopped by a reset or by turning off the workstation.

To declare an accessory with GEM, it is obligatorily necessary to use the GEM function menu_register(), which is form:

    int menu_register (int me_rapid, tank *me_rpstring);

The first parameter is the identification number of the application, which is returned by the call of the function appl_init(). The second is the character string which must be the name of the accessory in the first desktop menu. It is on this menu option that the user will click to call the accessory. The function returns an identification number of the accessory.

On the old versions of GEM, it was not possible to have more than six accessories simultaneously. There are no more limits on recent TOS. In addition, it is also possible under MultiTOS to use this function to change the displayed name in the menu even in the case of an application launched as a program. But that does not concern us.

What it is necessary to know, it is that this function has sometimes a capricious behavior. It happens that the accessory is correctly recorded by GEM, but its name does not appear in the menu! If one launches a new application which re-initialized the menu bar by installing its own, everything now works. In fact, that depends on the order in which are done the various initializations (declaration of the application, loading of the resource, etc). It is by modifying this order that one can correct this problem. Unfortunately, the order is different according to whether one works with an external or integrated resource! The function initial() of BIG fixes this problem for us. Thank you.

We have installed our accessory. What does it make? It waits until one calls it (it is possible to have it carry out small tasks during this time, but lets leave that on side). When one calls an accessory by clicking it in the menu, it receives an event (of type MU_MESAG if one was in a evnt_multi loop ). The buffer of message contains them then the following elements:

  • Word 0: AC_OPEN (40)
  • Word 4: Identifier of the accessory (returned by menu_register).

When our accessory receives this message, it knows that it has been called (it can check with word 4 that it is well addressed to it, but if not it would not have received anything). What follows obviously depends on the accessory itself. It opens a form, a window, etc. It does what it wants, being from now on the foreground application. Note that if it opens a form, it must block the menu. Nothing other than the acessory is active. But it can also, and this is what is done in BIG2DEMO.ACC, to open one or more window(s) and to run in an evnt_multi type loop. In this case, it may be that menu options of another application are clicked, or that another window is activated, etc. Happily, the GEM sends the message corresponding to what happen to the good recipient. Therefore you do not need to concerned with that.

But it should be known that the GEM sends keyboard events to the application which has a window in foreground. That means that if your accessory is opened, but that its window is behind, it will not receive messages of keyboard shortcuts, for example. Another important point: in the same situation (the window of the accessory is behind), a click is made for example on the bar of displacement of another window. The application to which this window belongs will thus receive an event of the type MU_MESAG. But the accessory will receive a MU_BUTTON! It will have obviously to be ignored in this context.

It can happen finally that the accessory is closed by an external intervention, without particular action of the user. Let us imagine that we are on the desktop. We open a window belonging to our accessory, then without closing it we move to a window of the hard drive and we launch a program! Another situation: we are in one program, and we open a window of the accessory. Without closing it, we click the option to leave main program. What happen in these cases ?(the following explanations do not apply to operation in multitask). The accessory will receive another event, also type MU_MESAG, as follows:

  • Word 0: AC_CLOSE (41)
  • Word 3: Identifier of the accessory (turned over by menu_register).

This message is sent for information, in order to inform the accessory which it is from now on considered closed, and which it must return in its waiting loop of message AC_OPEN, without that it could not be open any more, since it will not treat any more this message. But another thing is made by the GEM: all the windows belonging to this accessory are automatically closed and destroyed by GEM, contrary to what is described in certain books! If the accessory now tries to close one of its windows, whereas it does not exist any more, it occurs in the majority of the cases a blocking of the system without other recourse that the reset. Study how the function clos_acc() is done in the demonstration. The main window of the accessory is only closed and destroyed (by $wind_close() and wind_delete()) if the word 0 of the buffer is different from AC_CLOSE (the function closed() of BIG works the same way).

In short, the programming of accessories of desktop is relatively simple. There are certain precautions to take with the caprices of GEM, but BIG is of an invaluable help. It is also necessary to be careful with event management, and not to forget any particular case. The difficulty is the tuning of the application, since it is obviously much more delicate to debug an accessory (it is no more possible to trace the execution). Let us not forget that only one accessory thar crashes will also crash the system and all the other applications! Best is to leave it with the state of a PRG for the programming itself of to turn it into an accessory at the latest possible time. To create an application running at the same time as an accessory and a program, take example of the demonstration. A flag (global variable _app in the case of Pure C, _XMODE==GEM_DA in the case of Lattice C) announces if the application were launched out as an accessory or a program, and another (local variable in the function main() of the demonstration) recalls if the accessory is active or waiting.

Under BIG, you will have just to transmit to initial() the number of the free string intended to become the title of the accessory, to write the loop waiting for AC_OPEN message and to treat the message AC_CLOSE.

[return to BIG toc] [return to Prog. toc]

Iconification of the Windows

The iconisation of the windows is realized by BIG in a slightly different way that the versions of the AES which supports this operation directly.

BIG modifies simply the attributes, the position and the size of the window. The position is computed according to the position of the window before iconification: the iconified window is placed at the bottom of the desktop, in the center of the old position... unless the iconified window leave the desktop, in which case it is placed at the edge of this one.

When BIG iconify only one window, it places in the element w_icon of the BigWind structure the index of this window (which is to -1 as long as the window is normal). It is thus necessary to test this element by

    if(win[index].w_icon > BLANK)

to know the state of a window.

In the case of multiple iconification, the window which was used for the request for iconification is really iconified as explained above, the others being simply closed. The element w_icon of all these windows contains BIG Index of the "main" window. Thus, at the time of the deiconification, BIG can determine if other windows must be reopened by traversing them and by seeking those whose w_icon contains the index of the window which one asks for the desiconification.

Lastly, a point must be raised. The old systems can open simultaneously only one limited number of windows. Let us imagine the following situation on a system authorizing only 7 windows: Let us open 5 windows, and iconify them all in one. Let us open then 4 other windows, and let us ask the deiconification of the first. There are 2 windows in excess, which will simply not be restored, without informational message.

When it is a window with a pallet which is iconified, the pallet by default is restored. The pallet of the window is restored at the time of the deiconification, if the window is brought in the foreground.

[return to BIG toc] [return to Prog. toc]

Copy, Cut, and Paste

All the editable fields (extended or not, with large or small characters) of an application under BIG are connected by a system of copy, cut, and paste When an editable is active (it is in the blocking form which is displayed, or in the window of foreground), it is possible to copy or cut its contents respectively by the keyboard combinations "Control + C" and "Control + X". In the case of a copy, the text is copied in a buffer, and nothing is changed in the field itself. in the case of a cut, the text is also copied in the buffer, but the field is emptied of its contents.

To put back a text copied or cuted in another field, it is enough to place the cursor in this field and type the keyboard combination "Control + V". The text of the buffer is placed in the editable field. If the field already contained some text, it is replaced by the new one. If the text to be pasted is longer than the size of the field (the complete size in the case of a B_EDIT), the end is truncated. No particular action is necessary to activate this functionality, it is automatically active for a program which use BIG.

[return to BIG toc] [return to Prog. toc]

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG Revision History

BIG Revision History

Author:
Jean Louis-Guerin
Release 2.2 March 2010

This is the first release of the updated BIG. This first release is call V2.2 is based on release V2.13 (dated 11/02/99) from Claude Attard. At this point the code has not be changed from the original code other than:

  • translating comments in english
  • using slightly different formating and "beautification" of the code
  • adding doxygen information (defines, functions...)
  • renaming some function calls, global variables, constants, etc.

If you were using BIG 2.0x 2.1x you should be able to recompile your code without modification with this new release by using the "translate.h" file. This file must be included just after the big2.h file and provides, as the name indicates, the translation of old "French names" to the new "English names". For new development it is recommanded to use the new names. note that Release 2.2 is an intermediate release only for test purpose.

Todo:
original 2.0
Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: The BIGdemo Source

The BIGdemo Source

Author:
Claude Attard
Translation by Jean Louis-Guerin

Table of Content

  • Introduction
  • The Ressource
  • The Source code description
    • The Main function
    • Display image on the desk
    • Forms Management
    • Forms in Windows
    • The Text window
    • The Image window
    • The Graphic window

Introduction

Even if it is not very complex, the concept of programming under BIG must undoubtedly appear a little confusing to the one which approaches it for the first time. If you have read the other BIG documents, and more specifically the reference chapter, you should know in theory all that there is to know to start working.

However, it is probable that in practice it is not so clear! Therefore it is recommanded that you study attentively the source of the demonstration as it contains probably the answer to the majority of your questions.

As it would be tiresome to examine all the lines of the source one by one, we will only detail the parts relative to BIG.

[return to BIG toc] [return to Source toc]

The Ressource

As we already did noticed, most of information and structure of the program are in the resource. Therefore let's start by looking at the content of the ressource.

The Menu
The first tree in the ressource is for the menu. The options:
  • 'BIGdemo' / 'BigDemo Info...',
  • 'Forms' / 'Free Form',
  • 'Windows' / 'Small form', and
  • 'Windows' / 'Large form'
are of type pointer on function. Therefore a function thus be associated to them. We only have indicate this by using the extended type B_FNCP(51).

The option 'Windows' / 'Normal Windows' must call a hierarchical menu. We place a small right arrow of the option (BIG replaces the last but one character by an arrow towards the right-hand side or the left), and we specify the extended type B_HIERM(41), as well as the number of the form associated in the high order byte of the extended ob_state (the classification of forms starts to zero).
The Desk form
The form for the desk comes next. The basic box will be resized by BIG according to the size of the desktop in the current resolution. There is a hidden object (HIDETREE). It is a G_BOX of the type BIG B_PICT. This object will be used to display the image of the desk, if the corresponding file exists. In addition to its extended type, the object has an extended ob_state, which indicates that the image must be displayed by means of the VDI function vrt_cpyfm(), and that the points of the image that are "set" will be blue (color indicated by the high byte of the ob_state).

The two texts of the box are B_SMSTR. They will be of which displayed as small characters. The one on the top has also a BackGround bit (it will be written in transparency) and a BS_RIGHT bit (the text will be fixed at the right-hand side). The other objects do not have any particular attribute. BIG treats the desk a little differently of the other forms, and informs the program of all that occurs there. It is the program which must act in consequence. But the objects of the desk should not have any flag EXIT, TOUCHEXIT, etc.
The Main form
The main form used for the demonstration is more complex. The G_BOX which is the root-object of this form has a white zone without pattern. Like we will see it in the study of the source, this pattern will be replaced in 16 colors (or more) mode by a pattern 100% of color 8 (clear gray), so to obtain a relief effect.

The graphic string has the type B_GRASTR(19) and the graphical attributes in the ob_state, just as two frames B_FRAME(20). The radio-buttons are of type B_SELEC(18) with the mandatory attributes SELECTABLE and RBUTTON. The checked buttons are identical, without being RBUTTON. We indicate for each one of these buttons the keyboard shortcut character by preceding it by a "[". BIG will take care of the remainder, but we must make sure that a same character is not used twice in the same form. Some of the radio-buttons and the selectable buttons must be drawn with the text on the left and the button on the right. We ask it by positioning the bit 13 of the ob_flags (named BS_RIGHT). We also position bit 11 (DcDefault) so that the default button is activated in the event of a double-click.

The alert button is a pointer on a function. Let us place the B_FNCP type.
We assign to the pop-up text the extended type B_POPUP so that it is drawn in agreement with the background (for the needs of the 3D), and that it is equiped with a "following option" icon. The pop-up image does not have an extended type, but (as the pop-up text) it must be SELECTABLE and SHADOWED. The rule under GEM is to give attribute SHADOWED to the pop-up buttons, in order to distinguish them more easily. It is an obligation under BIG. But as this attribute has no visual consequence on an object of the type G_IMAGE, we place this object in a G_BOX SHADOWED to respect the tradition. I advise you to always do this in the case of pop-up image.

The first of the two editable fields is of type B_EDIT. We thus place in the ob_state the length (as characters) of the text which it will be able to accommodate (50, you can change it). Let us not forget the small arrows on both sides, nor spaces which accompany them (see the chapter on extended editable). The second editable field is using small size characters.

The button of displacement of the form is placed in the upper right corner. It is a G_IBOX OUTLINED, CROSSED and TOUCHEXIT of the extended type B_MOVE(17).

The button 'Confirm' will be the default button. We also give him the type B_UNDER so that it has a keyboard equivalent by underlined character and that it is drawn in 3D. 'Cancel' must be activated by the key [Undo], thus let us give him extended type B_UNDO(31), and affect to it also an underlined character. We also place a 'Help' button which will be activated by the key [Help], in the form of a G_BOXTEXT OUTLINED, SHADOWED with small text, of type B_HELP(21), and the number of the help form associated in the extended ob_state of the button.

So that the form has a 3D aspect, we activate the BackGround bit (bit 10 of ob_flags) of the title string, of the two B_FRAMEs, of the popup text, of the editables and of the two exit buttons.
The two popup forms
We then find the two text pop-up forms used by the demonstration. The options are of G_STRINGs of which some are DISABLED. We make them precede by two spaces to reserve the place of the check-mark.

The whole surface of the root box must be covered. This box is SHADOWED, always to respect the standards. It is forbidden to place a B_FNCP in pop-up. The first of these pop-ups is obviously too high (with its 60 options) to be displayed on the screen. It will be displayed either of pop-list (on request), or in scroll-menu (automatically).
The information box
The information box has two B_HELP buttons. The first in the order of classification ('Contact') will be activated by the [Help] key, but not the second, whom it will imperatively be necessary to click it with the mouse. But it will be managed internally by BIG like a help, without intervention of the program itself. The image is adapted to high-resolution mode and will be deformed when in color mode, but this is not too bad for the demonstration. I did not want to complicate the things.
The Help form
The following form is a help. We find a B_GRASTR, several B_FRAMEs (these two types of objects having the Background bit set for the 3D), and an exit button whose presence is mandatory with the attributes EXIT, SELECTABLE and DEFAULT.
The small form in a window
We arrive at the small form in window. The buttons 'Confirm' and 'Cancel' must close the window. For that matter we must position the bit 12 of the ob_flags (named WFCLOSE). The buttons 'Apply' and 'Reset' will be respectively activated by the [Return] and [Undo] keys, but without closing the window. You can make the experiment of remove the closing bit closing of the first two and place them in the others two. This form has moreover two pop-ups boxes which make it possible to choose the pattern and the color to be assigned to the desk, as well as four editable fields, including two extended and two with small size characters. This form being intended to be drawn in 3D, we position the BackGround bit of the objects when that is necessary (the editables, the buttons and the title). We also position the bit 15 of the ob_flags (NOTOP) in the root-object so that this form can be handled even when its window is not in foreground.
The large form
The large form does not present anything new, some of its B_CHECKB and B_ROUNDB have the text on the left button, others contrary. They have all the bit DcDefault. Bit NOTOP of the root is positioned, for the same reasons as for the small form in window.
The Menu of Window
The following tree is the menu of window. In the resource editor, we create it like an ordinary menu. BIG will take care of "windowing" it. We just have to remove all the entries reserved for accessories. The 'Infos' option is a B_FNCP. The Icons option of the Alert menu is a B_HIERM.
The Hierarchical menu
Now we look at the hierarchical menu of the top menu. It is created like an ordinary pop-up, but one can place any type of object there. In the case of the demonstration, the first 2 options are of type B_FNCP, but not the third.
The Image popup
We arrive at the pop-up image. It consists of G_IMAGEs. Same remarks that for the text popups apply here.
The Context popup
The following tree is the context popup, in any point similar to a text popup called by a button in a form, but it can have of B_FNCPs (this is the case in the demonstration).
The Help forms
The help form 'CONTACT' has a characteristic: apparently it does not have an exit button. However, we saw that it is obligatory! In fact, a G_IBOX SELECTABLE EXIT DEFAULT without frame recover all the surface of the form. Thus, it is not seen but it is there and one can click anywhere to exit the form.

Another Help form comes then.
The hierarchical menu in a window
The following form is a hierarchical menu in a window. Only the first two options are normal, the others being of type B_FNCPs.
The Thanks form
Then we find the thanks form, which is built on the same model as that of the contact.
The toolbar of the text window
We discover now the text window toolbar. Such form is built like any other, with keyboard shortcuts, the popup, etc. The objects EXIT or TOUCHEXIT, as well as the editable fields are banished. Here we also envisage the 3D aspect when working in color mode (set the BackGround bit where it is necessary), and NOTOP bit on the root-object so that the toolbar can be handled when the window is in background.

We now have the two popups forms called by the toolbar. The first one is for the character sizes, the second for the fonts. This one consists of 41 G_STRINGs, of which only the first one is currently active. It is the System font, used by default. The other strings are DISABLED for now, and contain provisional filling texts. The demonstration will have to replace them by the names of the charged fonts, and activate them.
The popup boxe forms
We find the two forms of the popup boxes for the small form in a window. They are only made up of G_BOXs TOUCHEXIT. The first represents the choice of the frame, the following the choice of the color.
The free strings
After the forms come the free strings. The first one is in fact an alert. It can be made up of 5 lines of 31 characters each (the first being generally a space for esthetics reasons there remain 30 about it), and of 3 buttons of 20 characters each. 9 drawings are at your disposal for the icons (See the description of the function big_alert() in the form management group of the functions).

The following alert is the one which is displayed by the hierarchical menu in the window with each time a different icon, and the third is the one called by the 'Alert' button of the main form.

The following strings are in the order: the window titles for Small form and Large form, the texts of object selector "load text" and "load image", the titles of the corresponding two windows, the title of window with menu, the title of the histograms window and its line of information.

Then we find then the string which will be used when the demonstration is launched out as an accessory: the one which will appear in the menu, then the one which will be used as the title of the main window opened in the event of operation as a desktop accessory.

It is recommended, especially under BIG, to place all texts used by the application in the resource. First reason: it is pure GEM. Second reason: in the case of an external resource, that makes easier the modification (for translation or for change of keyboard shortcuts for example) since it is not necessary to recompile the source. Moreover, (especially if it resource is integrated), that aloow a uniform way to treat these strings.

The following free strings are the texts of the various bubble-help used by the demonstration.
Free images
Finally, the last two objects of the resource are two free images: those which will be used for the drawing of the iconified windows. An image for the windows of the type form, an image for the others.

We now have looked at all the resource of the demonstration. As you have seen, many things appear in it, not only the aspect of the forms and objects, but also a good part of the structure of the program, thanks to the pointers on functions and to the popups and associated help.

[return to BIG toc] [return to Source toc]

The Source code description

I have tried to carry out a complete demonstration, presenting the programming of all the important aspects of BIG. Thus, certain function references are done by B_FNCP and others not, in order to show how to deal with BIG events and other points. For a normal program, certain parts would have been treated in a way even simpler. This demonstration, as its name indicates it, is a demonstration not only of what type of interface can be done with BIG, but also how to program all the details with BIG. The source could have been even shorter!

I once again recommend that you take the time to study it thoroughly, practically all the techniques of development under BIG are described.

The first line "#include <big.h>" is particularly important, it is it which opens the gate to BIG. You will note that the demonstration uses only five global variables. Three are necessary for the management of the SpeedoGDOS fonts, which has nothing to do with the interface itself (I acknowledge to have included this management with the demonstration to make me small pleasure). The two other variables are used by the desk image.

The programming of interface under BIG normally does not require any global variables other than those which are defined by BIG.H.

Then, we tell the compiler that we work with an external resource, by means of the definition INTGR. Follow then instructions intended for the preprocessor so that the program is correctly compiled. You can make the experiment recompile the demonstration by replacing 0 by 1 in the line "#define INTGR 0", it will function from now on with a integrated resource without another modification.

We define the maximum number of windows with which we will work (7) and, for convenience, we define a name for each of them.

[return to BIG toc] [return to Source toc]

The Main function

The first call of the program is to the function initial(). Under BIG, one always needs to start with this call. With this simple line, we load the external resource, we create and set up the USERDEFs objects, the table of the windows structures, the table of the function pointers, we impose the desk of the application and its menu, and we initialize the main global variables, as well as certain elements of the windows structures to default values. If the resource is integrated, the coordinates and dimensions of the objects are adapted to the current resolution, if the application is run as an accessory it is declared with GEM and its title placed in the menu.

The function set_bimg() is then called so that the image of desktop is loaded and displayed. We will get back to that latter.

The function ptr_fonctions() creates the links between the objects having a function pointer and the corresponding functions. The demonstration uses 22 B_FNCPs objects. For example, the line fnc[0] = (void *) aff_infos; connect the 'Infos' option of the main menu (which is first B_FNCP object in the resource) with the function aff_infos(). The following lines perform the same action for each of the B_FNCP. You will notice that it is absolutely necessary to treat the objects in the order where they are in the resource (read again the paragraph BIG Buttons usage). It is necessary of course that the different functions were correctly prototyped. They should be called in this order, because the initial() function places the table index in the high byte of the ob_state of each B_FNCP. I remind that this imply that there cannot be more than 256 function pointers by application. This limit is rather broad and should not create particular problems.

You will also note that the same function can be affected to different objects. The function aff_infos() is also connected to the element 5 of the table.

The function set_form() sets up the links between the objects of type popup, hierarchical pop-list, menus and Help with their associated forms. It does in the same thing for the help-bubbles: the objects which have some are connected to the corresponding free string. We could have carried out the same thing directly in the resource, while placing the correct values in the high order byte of the ob_state for each one of these objects. But that would have been more tedious to make, and especially, insertion later of other trees or strings in the resource would have shifted all the positions, and thus the values! Therefore it would have been necessary to modify all the values again in the ressource. By using the names given to the objects in the resource, we work with much more comfort and reliability.

We then meet the loading of vectorial SpeedoGDOS fonts. After a test of the presence of Speedo, we ask it to load all fonts available. A loop then enables us to recover the name of each one of them and to place it in the popup form who is intended to display them (without forgetting to activate the options who were DISABLED). We also initialize with default values the variables of the fonts management.

Normally, it would also be necessary to do a shortening of the popup form. Indeed, it has 40 entries reserved for the vectorial fonts, which will undoubtedly be too many in the majority of the cases. We should thus hide (HIDETREE) the options in excess, position the LASTOB bit of the "new last object", the element ob_next of this object as well as the element ob_tail of the root. As in all this demonstration, I have preferred to remain simple.

If we work in a 16 colors (or more) mode, we carry out the function relief(), which modifies the pattern and the color of the root-objects of the trees concerned (will get back to that in detail).

We place in the variable "aide_en_ligne" the value corresponding to the [Control] key, so that it activates the display of the help-bubbles.

We can now approach the main loop of the program, everything is already ready! It is a large do {..} while loop. If we are running as an accessory, and that this one is not active, we use a secondary loop (in the function acc_loop()), which waits until the accessory is called. The most important line of the main loop is:

    evnt = dialog (DLG_DESK, adr_desk, TRUE, TRUE, PU_LIBRE, &img, FALSE);

This call to the function dialog() carries out a lot of things. Let us examine the transmitted parameters:

  • DLG_DESK It is a bit mask defined by BIG2.H. It indicates the events to be supervised: the keyboard (for the management of the keyboard shortcuts and the windows that can be handled with the keyboard), the mouse clicks (for the icon and the texts of the desk as well as for the forms, toolbar and menus in window), the area where the mouse is located (for changing its shape in the windows), the messages (for the menu and the windows), and the timer (to be able to take back "the hand" for the hierarchical menus, the processing of the palette, the management of the right-click and the help-bubbles.
  • adr_desk is the address of the form to be treated, the desk in this case.
  • TRUE This flag announces to the function that we work on a desk. The function reacts in a little different way for a desk compared to a fixed form. It returns to the main program all the click events which occur on the "bottom", so that the programmer can create an desk corresponding to the needs for his application.
  • TRUE a click on the right button of the mouse must call a context popup.
  • PU_LIBRE It is the tree number (in the resource) of the context popup form.
  • &img Unutilised in the case of the desk, it would be a pointer on the MFDB describing the background of the form.
  • Also unutilised FALSE here (must be FALSE), it is the flag of displacement of the form.

The function treats then the events received in return, by calling each time the corresponding function. It starts with MU_MESAG events (function event_mesag()). The first treated type is MN_SELECTED, event of menu. Only three options are processed here: 'Big Alert', 'Quit' and 'Menu window'). The others being of B_FNCPs type, BIG does what is necessary so that the corresponding function is executed automatically. I advise that you never handle the 'Quit' option with a function pointer, but to return to the main loop to leave. It is more readable and more logical.

Then the events of hierarchical menu of the top menu are treated, which are of a type specific to BIG. Since in the demonstration, there is only one option of this hierarchical menu which is not a B_FNCP, there are not many tests to make. If not, it would obviously be necessary to look which option it is.

We supervise then, for the case where we would running as an accessory, the message AC_CLOSE, which occurs when the accessory is closed by an external intervention, generally because we launched or left another application while the accessory is open (this never happen under MultiTOS). In the same situation (work as an accessory), we must also note that the accessory is closed if the user closes its main window, which is made by the appropriate test.

Let us go back to main(). We then treat the MU_BUTTON events. But as several types of BIG events are containing MU_BUTTON, it is necessary to detail. We start with the events for the context popup (BEV_FREEPU). Only the options 'Big alert' and 'Menu Window' are to be examined, as the others are of type of B_FNCPs.

We examine then the MU_BUTTON/BEV_WFORM, i.e. the forms in window. If a click took place in one of these forms, the message arrives here. We separately treat the small and the large form in window, by looking only at the EXIT buttons, the others (popup, selectable, radio-buttons, etc.) being managed by the call of the dialog() function.

We do not have many things to do. If the button is 'Confirm' or 'Apply', we release the backup memory for the state of the form, and we record the new state. In the case of 'Confirm', dialog() has already done what is necessary so that the window is closed (since this button has its bit 13 positioned in the ob_flags). We must also call the demonstration function objets_desk() (for the large form) or trame_desk() (for the small one). If the button is 'Cancel' or 'Reset', we restore the former state, the memory is automatically released. Same apply to the closing of the window and the 'Cancel' button. For the 'Reset' button, we request a redraw of the window contents to bring up to date the restoration of the state.

We treat then the MU_BUTTON/BEV_WMENU events, and the events of menu in window:

  • First case: it is about the window with a "normal" menu. The menu option 'Infos' is a B_FNCP, we do nothing for it. For the others, we treat the operation. For alert, you will notice that the check-mark is placed in this menu with the GEM function menu_icheck() as if it were about a normal menu.
  • Second case: it is about the window with menu which is the main window of the demonstration during an operation as an accessory. In this case, the top menu is in this window. We proceed in the same way, by taking care only of the options which are not of B_FNCPs.

We examine then the MU_BUTTON/BEV_WHIER events, the events of hierarchical menu for the menu in window. Here again, it can be for the window with ordinary menu or the one of the accessory. In the first cases, only the first two options are to be treated, the others being of type B_FNCPs. We just call the function icone() after having placed in word 6 of the buffer what it expects to find there: the number of the clicked option. In the other case, only the option of histograms is to be treated.

Then, we deal with the events of type BEV_TOOL, the clicks on objects of a toolbar. In the demonstration, we must only act in the case of a choice for a font or for size of characters, and call a function which modifies the corresponding global variables. Then, and even if this is for other objects, we redraw the contents of the window. Normally, we should carry out the redraw only if one parameter has actually changed. It is not the case in the demonstration.

It remains to treat the mouse clicks directly on the desk. I will not describe in detail this part which does not present any difficulty (by precaution, we check that there is no window at the place of the click). The manner of treating the desk strongly depends on the application. In the demonstration I was satisfied to create something of very general.

The only requirement, it is that the objects of the desk do not have an ob_flags EXIT or TOUCHEXIT or another thing (except possibly LASTOB). If not, the dialog() function would try to treat them its own way. In fact, it works in the following way: if the click takes place in the working area of a window, it is treated by dialog(). if it takes place on one of the elements of the window (resizing button for example), it is ignored (the GEM will generate a MU_MESAG which will be treated separately). If it takes place on one of the objects of the form whose dialog() received the address as a parameter, it tries to manage it according to the flags of this object. Lastly, it returns the event to the program.

For an desk, which requires a particular management each time, we want that dialog() announces us simply the click without going anything, so that we decide what must be carried out. In the demonstration, if the icon was EXIT and SELECTABLE, dialog() would select it and deselect it with each click on the icon, but could neither move it nor deselect it in case of a click "in the vacuum". Proceeding like this, we must make the things "manually", but we can do what we want.

The end of the do {...} while loop tests the variable "quit", which is set to TRUE if the output of the program is required. If Speedo fonts were loaded, they are released. Then the function end() is called.

This function releases the various storage areas which were reserved (for the window structures, the userdefs, the function pointers, the extended editable, the screen buffer, the default pallet, and even the image buffer of the desk), it closes all the windows (at least those which belong to our application), it releases the resource if it is external, removes the menu and restores the GEM desktop.

[return to BIG toc] [return to Source toc]

Display image on the desk

The function set_bimg() Load the image of desktop and display it. The operation is carried out very simply by a call to the function img_attach() that belongs to the image processing library: BIG_IMGS. This function is given the responsability to determine the type of image, to check the existence of the file and to load it. The various elements of the bimg variable (of type t_image_dial) are filled with the values which are appropriate. The image is automatically centered.

Once all that is done, the object-image is made visible and one message of redraw is sent to the desk so that this new object is displayed.

Look at the the description of the BIG_IMGS functions for more details.

[return to BIG toc] [return to Source toc]

Forms Management

We arrive at the function which manages the free form of the demonstration. We must declare a MFDB which will describe the background of the form. It will be used only if we ask for a displacement of the form as a phantom box (or if there is not enough memory to carry it out in real-time). We block the AES with wind_update(), we ask for the address of the form (preprocessor instructions and definition of INTGR at the beginning of the source tells to the compiler if we work with an integrated resource or not), and we back up his state in the area indicated by the pointer "adr_bakrsc" by means of the function bak_rsc(). The pattern and fill color of editable field are modified if we are running in 16 colors or more.

We can finally ask for the display by formm_draw(). We specify with this function the address of the form, the editable field where the cursor must be placed at the beginning, that we wish a displacement in real-time, and what is the address of the backup MFDB for the background if it were necessary to carry out a displacement as a phantom box for lack of memory. The various initializations, reservation of memory, backups of images, and calculations are carried out by the function.

We can then enter the processing loop, again based on dialog(). In this case, the events to be supervised are fewer than for the desk. Only the keyboard (for the editable), clicks (for the various objects) and like always, the timer, to keep the hand. dialog() deals with everything (pop-ups, help, displacement, pointers on function, editable (extended or not), management of the cursor, etc. We have just to take care of the exit. If 'Confirm' were chosen, there is nothing to make. If it is 'Cancel', we restore the former state of form.

We then just have to remove the form from the screen. formm_undraw() takes care of this, and releases the storage areas reserved by formm_draw(). On the other hand, have the responsibility to release the state memory of the form.

The function aff_infos() is almost identical. It has just an additional test at the beginning: if the infos were required starting from the window menu, it is necessary to reverse the title of corresponding menu. As there is neither a 'Cancel' button, nor a dialog with the user, it is useless to manage the state of the form. Displacement being requested as a phantom box, the MFDB pointer takes all its importance here.

The function test_alerte() is the one which is called by 'Alert' button of the free form. It carries out a simple call to big_alert().

[return to BIG toc] [return to Source toc]

Forms in Windows

The call of forms in window is even simpler than the one of blocking forms (which block the menu, windows, etc). Let us begin with the function pform_wind(), which displays the small form. As usual, we ask for the address of the tree (resource integrated or not), we adapt the color and the pattern as necessary for the 3D, and we reverse the title of menu. We affect then the current pattern and the color of the desk to the popups boxes of the form so that they are the reflection of the situation. We have just to open the window by formw_draw() and to reverse the menu title.

To formw_draw() we pass the address of the form, BIG Index of the window to be opened (which was declared by initial()), the number (in the resource) of the free string which must be the window title, the number of the string for the line of infos (as it does not have one in this case, we transmit BLANK, i.e. "-1"), the number of editable where must be the cursor at the opening of the window, the flag to indicate that the form must be positioned on multiples of 16, since it contains patterns, the attributes which the window must have (We use a BIG constant here: only NAME, CLOSER, MOVER and SMALLER are active), and finally a pointer on the function which will be used to redraw the content of the window when it is iconified (when it is not, the form is drawn automatically when necessary).

The opening of the window of the large form is done by the function gform_wind(). It is even simpler, since we do not have to test the pattern.

I will not describe the functions trame_desk() and objets_desk() which are called by main() if a button 'Confirm' or 'Apply' is clicked, respectively in the window of small and the large form. These windows being open, it is the main loop of the program (the one of of main()) which manages all that occurs there, thanks to the dialog() function.

[return to BIG toc] [return to Source toc]

The Text window

The function charge_texte() opens the text window. I will not go into the details. This function is not a "model of the genre", but it is sufficient for the demonstration. What is important, it is that it loads the text in a storage area, which must thus be released at one time or another. In a real program, I will have chosen to release it only at the time to leave or by an option 'Quit'. In the demonstration, this area must be released with each closing of the window. The BigWind structure of this window must thus have as "w_close" parameter the address of a function which will take care of that in addition to closing the window.

It is also necessary to place in "w_redraw" the address of the function which will display the text itself. The most important is thus the call to open_window(). The lines which precede this call load the text (note the use of the function selector()) and count the number of lines. We also ask to the VDI the dimensions of the characters cell for the current font (the system font of size 13 is used by default).

We call open_window() specifying the index of the window to be opened, its BIG type (WTYP_NORM), its GEM attributes (WATR_CURR: everything except the line of infos), the starting coordinates, its minimum dimensions, the shift units (size of a cell), a flag to indicate that the window can be handled with the keyboard, no positioning on the multiples of 16, and the shape of the mouse pointer in the working area. Then comes the pointers on display functions (iconified and normal) and of closing of the window, pointers on the strings of title and infos (the second is empty), the total width and height of the window (in pixels). we have to "cast" the parameters to make sure they are interpreted of type long. Lastly, are transmitted a flag FALSE announcing that the window does not have a menu, another TRUE to indicate the presence of a toolbar and the number of tree of this toolbar.

Thats alot of parameters, but it is all that there is to do. From now, we do not have to worry any more about this window. It will be moved, redrawn, iconified, its contents will scroll without any intervention of our program (even in the case of the most recent versions of GEM, which authorizes the handling of the background windows). The display function (aff_texte() in the demonstration) will be called automatically when that is necessary (I let to you examine this function, which is not either a model, and which is imperfect in particular with regard to the processing of the proportional fonts), just as winicn() if the window is iconified. If there is no more window available in the tables of GEM, the alert of the BIG integrated resource will be displayed to announce it to the user.

As for the function close_txt(), it calls closed() (which closes the window and modifies the element w_hg) and releases the text memory. As closed() seeks in buf[3] the GEM handle of the window, we place it there "artificially" before the call.

We already mentioned the function set_font(). It is called when a font or a size of character has been chosen in the toolbar. It just have to modify the corresponding global variables, which will be then used by the display function of the text. Note that the size is read directly in the popup button of the toolbar. Thus, if you want that the demonstration is able to display other sizes, it is enough to add them in the corresponding popup form, without the need to recompile the demonstration!

[return to BIG toc] [return to Source toc]

The Image window

The function charge_image() resembles that of the text. It is a little more complex due to the fact that it can be called to open the window normal image, or starting from the window with menu, the image then having to be placed in this one. There are thus several tests for that. The image is charged in an storage area, and the element w_cont.w_img of the structure of corresponding window must be filled with the imagecharacteristics. In the same way for the élément.w_pal with the palette of this image.

The call to open_window() is almost the same one as for the text. The BIG Type of the window implies that BIG will take care of all the displays necessary. We thus transmit one ZERO like redraw function. The variables "ftool", "fmenu" and "menu" contain respectively FALSE, FALSE and BLANK in the case of the image window, and contain FALSE, TRUE and the number of the menu in the case of the window with menu.

The redraw of the image is made starting from the contained informations in w_cont.w_img.w_blk. If there is not, it is that the image was not charged yet. BIG then traces a white rectangle in the window to empty it. The function of closing of window is not the same one according to the window, since the memory of the menu must be released if it is the window with menu which is closed. The function `$close_img() `works like its counterpart of the text, but must moreover release the memory of the palette. As for `close_wmenu() `, it makes in the same way with in more the release of the memory of menu.

[return to BIG toc] [return to Source toc]

The Graphic window

The window of histograms is creates and open by the function cree_histo(). An storage area for the data is reserved, then random values drawn for the histograms and are placed in this zone. The opening of the window is made as we already saw.

The function aff_histo() should not require particular explanation. close_histo() makes does like for image and text, it releases the memory reserved for the data.

The function close_wmenu() close the window with menu by releasing the storage areas reserved for the image and the palette. Another function, icones() recovers in buf [6] the option clicked (or called by keyboard equivalent) in the hierarchical menu of the menu in window, and chosen the icon of alert according to this option.

The function winicn() is charged of the redraw of windows when they are iconified. It has only to empty the window and to center an image or another there, according to whether it is a form window or another type. The images come from the resource and can thus easily be modified.

The function clos_acc() is called in the event of message AC_CLOSE, for closing the main window of the accessory or if one clicks the option to leave accessory (form in window). It returns the original coordinates of all the windows when they were iconified, and close the windows from the point of view of BIG, but NOT from the point of view of GEM. See the chapter Programming of accessories to know why.

Another function, acc_loop() is used if one run the program as an accessory. It simply awaits on behalf of GEM message AC_OPEN announcing that the accessory was called. It opens the main window of the accessory while placing the menu of the application there, and returns to the main loop.

The function red_acc() is a false function, it is empty! During the operation of the demonstration as a desktop accessory, the function open_window() awaits the address of a function charged to redraw this window. It is thus necessary to provide it one, but there is nothing to redraw, since even the background pattern of the window is drawn by BIG. Therefore, we indicate a function to it which does not do anything strictly.

Last function, relief() is called at the beginning of the program when running with 16 colors or more, so that the pattern and colors of certain objects and root_boxes are modified for the effect of 3D.

Still a small remark. When an option of menu is clicked with the mouse, the GEM is responsable to reverse the title of corresponding menu. But when a function is activated by keyboard shortcut, it is not the case. We must do it ourselves. Under BIG, that is not necessary. The title of menu is always reversed whether the option was selected with mouse or with the keyboard, whether the menu is the top menu or a menu in windows, whether it is a menu option itself or a hierarchical menu. The programmer must only deselect the title by the GEM function menu_tnormal() at the end of the processing.

This program BIG2DEMO.PRG was created with minimum and very simple parameters. For compilation,with Pure C, the only activated options are : "Default int is unsigned" (-K) and "Uses absolute calls" (-P). No option is not activated in the linker. Library BIG2.LIB was compiled with the same options. Thus, BIG practically does not impose constraints of compilation.

It is useful and convenient to work with two libraries. One (BIG2DEBG.LIB) is compiled and linked with debug information (options -Y in the compiler, -L and -G in the linker) and can be used during the development in order to have access to the gobal variables under debugging. The second (BIG2.LIB) is compiled without this information, for the final compilation of work carried out.

[return to BIG toc] [return to Source toc]

See also:
  • BIG in a multitasking environment
  • Parameters and pointers on functions
  • Working with an integrated resource
  • Programing Accessory with Big
  • Iconification of the Windows

[return to BIG toc] [return to Source toc]

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Todo List

Todo List

Page BIG Revision History

original 2.0

File BIG2.H

LONG Description

File BIG2DIAL.H

BRIEF

LONG

Global WM_BKGR

Global WM_BOXARROWS

Global WM_BOXMENU

Global WM_BOXTITLES

Global WM_LFARROW

Global WM_RTARROW
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Module Index

Modules

Here is a list of all modules:
  • The BIG Constants
  • The BIG Defined Types
  • The BIG Global Variables
  • The BIG Functions Library
    • BIG Control Functions
    • BIG Forms Management Functions
    • BIG Extended Editable Management Functions
    • BIG Utility Functions
    • BIG Cookie Functions
    • BIG Windows Function
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: The BIG Constants

The BIG Constants

The BIG Constants. More...

Defines

#define | FALSE 0
#define | TRUE 1
#define | NOT !
#define | BLANK -1
#define | ZERO 0
#define | MAX_ALRT 250
#define | max(a, b) ((a)>(b)?(a):(b))
#define | min(a, b) ((a)<(b)?(a):(b))
#define | NGAD 23
#define | BIT15 0x8000
#define | B_MOVE 17
#define | B_SELEC 18
#define | B_GRASTR 19
#define | B_FRAME 20
#define | B_HELP 21
#define | B_POPUP 22
#define | B_LIST 23
#define | B_PICT 24
#define | B_EDIT 25
#define | B_SMSTR 26
#define | B_UNDER 30
#define | B_UNDO 31
#define | B_HIERM 41
#define | B_FNCP 51
#define | DLG_DESK (MU_KEYBD | MU_BUTTON | MU_M1 | MU_MESAG | MU_TIMER)
#define | DLG_FORM (MU_KEYBD | MU_BUTTON | MU_TIMER)
#define | BEV_HIERM 150
#define | BEV_FREEPU 151
#define | BEV_WFORM 152
#define | BEV_WMENU 153
#define | BEV_WHIER 154
#define | BEV_TOOL 155
#define | WATR_ALLG (NAME|CLOSER|FULLER|MOVER|INFO|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE)
#define | WATR_ALLB (CLOSER|FULLER|MOVER|INFO|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE|CYCLER|SMALLER|ALLSIZER)
#define | WATR_CURRG (NAME|CLOSER|FULLER|MOVER|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE)
#define | WATR_CURRB (CLOSER|FULLER|MOVER|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE|CYCLER|SMALLER|ALLSIZER)
#define | WATR_FORMG (NAME|CLOSER|MOVER)
#define | WATR_FORMB (CLOSER|MOVER|CYCLER|SMALLER)
#define | WTYP_NORM 1
#define | WTYP_FORM 2
#define | WTYP_PICT 3
#define | WTYP_TOOL 0x4000
#define | WTYP_MENU 0x8000
#define | WFFULL 0x0001
#define | WFARROW 0x0002
#define | WFCALAG 0x0004
#define | WFDECAL 0x0008
#define | WFGROUP 0x0010
#define | WFLAST 0x0080
#define | SMALLER 0x4000
#define | CYCLER 0x2000
#define | ALLSIZER 0x8000
#define | BKGR 0x0400
#define | DCDEFAULT 0x0800
#define | WFCLOSE 0x1000
#define | BS_RIGHT 0x2000
#define | AIDE_OBJET 0x4000
#define | NOTOP 0x8000
#define | WM_BKGR 0
#define | WM_BOXMENU 1
#define | WM_BOXARROWS 2
#define | WM_LFARROW 3
#define | WM_RTARROW 4
#define | WM_BOXTITLES 5
#define | HELP 0x6200
#define | UNDO 0x6100
#define | ENTER 0x1C0D
#define | RETURN 0x720D
#define | BACKSPC 0x0E08
#define | DELETE 0x537F
#define | SH_DELETE 0x537F
#define | INSERT 0x5200
#define | SH_INSERT 0x5230
#define | TAB 0x0F09
#define | ARDN 0x5000
#define | ARUP 0x4800
#define | ARLF 0x4B00
#define | ARRT 0x4D00
#define | CT_ARDN 0x5000
#define | CT_ARUP 0x4800
#define | CT_ARLF 0x7300
#define | CT_ARRT 0x7400
#define | SH_ARDN 0x5032
#define | SH_ARUP 0x4838
#define | SH_ARLF 0x4B34
#define | SH_ARRT 0x4D36
#define | ESC 0x011B
#define | CLR 0x4700
#define | CT_CLR 0x7700
#define | SH_CLR 0x4737
#define | ESPACE 0x3920
#define | F1 0x3B00
#define | SH_F1 0x5400
#define | F2 0x3C00
#define | SH_F2 0x5500
#define | F3 0x3D00
#define | SH_F3 0x5600
#define | F4 0x3E00
#define | SH_F4 0x5700
#define | F5 0x3F00
#define | SH_F5 0x5800
#define | F6 0x4000
#define | SH_F6 0x5900
#define | F7 0x4100
#define | SH_F7 0x5A00
#define | F8 0x4200
#define | SH_F8 0x5B00
#define | F9 0x4300
#define | SH_F9 0x5C00
#define | F10 0x4400
#define | SH_F10 0x5D00
#define | ADR ir_trindex
#define | get_popup match
#define | POINTIL 0x8888
#define | MTPOINT 1
#define | MTPLUS 2
#define | MTETOILE 3
#define | MTCARRE 4
#define | MTCROIX 5
#define | MTLOSANGE 6
#define | EFNONE 0x00
#define | EFGRAS 0x01
#define | EFGRIS 0x02
#define | EFITAL 0x04
#define | EFSOULI 0x08
#define | EFCONT 0x10
#define | HLEFT 0
#define | HCENT 1
#define | HRIGHT 2
#define | VDOWN 0
#define | VLINE 3
#define | VTOP 5
#define | HNORM 13
#define | HPETIT 6
#define | HMINUS 4
#define | RONORM 0
#define | RO90 900
#define | RO180 1800
#define | RO270 2700

Detailed Description

The BIG Constants.

To facilitate the programming, BIG proposes (and uses) many constant definitions.

Define Documentation

#define ADR ir_trindex

Shortcut see ir_trindex

Definition at line 231 of file BIG2.H.

#define AIDE_OBJET 0x4000

bubble-help on object Bit (14 ob_flags)

Definition at line 170 of file BIG2.H.

#define ALLSIZER 0x8000

Smaller attribute in BIG window

Definition at line 163 of file BIG2.H.

#define ARDN 0x5000

ARROW_DOWN key

Definition at line 192 of file BIG2.H.

#define ARLF 0x4B00

ARROW_LEFT key

Definition at line 194 of file BIG2.H.

#define ARRT 0x4D00

ARROW_RIGHT key

Definition at line 195 of file BIG2.H.

#define ARUP 0x4800

ARROW_UP key

Definition at line 193 of file BIG2.H.

#define B_EDIT 25

extended editable Text field

Definition at line 119 of file BIG2.H.

#define B_FNCP 51

Callback function associated to button or menu option

Definition at line 124 of file BIG2.H.

#define B_FRAME 20

Frame with text used to group objects like radio button

Definition at line 114 of file BIG2.H.

#define B_GRASTR 19

Character String with Graphical Attribute

Definition at line 113 of file BIG2.H.

#define B_HELP 21

Help button called without quiting current form

Definition at line 115 of file BIG2.H.

#define B_HIERM 41

Menu option that calls a hierarchical menu

Definition at line 123 of file BIG2.H.

#define B_LIST 23

Button to access popup list with slider

Definition at line 117 of file BIG2.H.

#define B_MOVE 17

Button used to move a form on the screen

Definition at line 111 of file BIG2.H.

#define B_PICT 24

To place an MFDB picture in a form

Definition at line 118 of file BIG2.H.

#define B_POPUP 22

Button to access associated popup

Definition at line 116 of file BIG2.H.

#define B_SELEC 18

Used to define B_CHECKB and B_ROUNDB buttons

Definition at line 112 of file BIG2.H.

#define B_SMSTR 26

Small Character String with Graphical Attribute

Definition at line 120 of file BIG2.H.

#define B_UNDER 30

Button that can have an underlined character

Definition at line 121 of file BIG2.H.

#define B_UNDO 31

Normal button also activated by pressing the Undo key

Definition at line 122 of file BIG2.H.

#define BACKSPC 0x0E08

BACKSPACE key

Definition at line 186 of file BIG2.H.

#define BEV_FREEPU 151

MU_BUTTON Event option of a "free" popup selected

Definition at line 132 of file BIG2.H.

#define BEV_HIERM 150

MU_MESAG Event option of a hier. menu selected

Definition at line 131 of file BIG2.H.

#define BEV_TOOL 155

MU_BUTTON Event toolbar object in a window selected

Definition at line 136 of file BIG2.H.

#define BEV_WFORM 152

MU_BUTTON Event exit object of a form selected

Definition at line 133 of file BIG2.H.

#define BEV_WHIER 154

MU_BUTTON Event option hier. menu in a window selected

Definition at line 135 of file BIG2.H.

#define BEV_WMENU 153

MU_BUTTON Event menu option in a window selected

Definition at line 134 of file BIG2.H.

#define BIT15 0x8000

Test bit 15 set

Definition at line 108 of file BIG2.H.

#define BKGR 0x0400

used for 3D (bit 10 of ob_flags)

Definition at line 166 of file BIG2.H.

BLANK -1

Defined to -1. Used a lot in BIG!

Very much used by BIG, This value is often transmitted to a function to indicate that it must be unaware of or not to treat them things relative to this parameter. For example, if there is no editablefield in a form, the parameter transmitted for the variable "editable" is "BLANK"

Definition at line 65 of file BIG2.H.

#define BS_RIGHT 0x2000

right justification in B_SELEC (bit 13 ob_flags)

Definition at line 169 of file BIG2.H.

#define CLR 0x4700

CLR key

Definition at line 205 of file BIG2.H.

#define CT_ARDN 0x5000

CTRL + ARROW_DOWN key

Definition at line 196 of file BIG2.H.

#define CT_ARLF 0x7300

CTRL + ARROW_LEFT key

Definition at line 198 of file BIG2.H.

#define CT_ARRT 0x7400

CTRL + ARROW_RIGHT key

Definition at line 199 of file BIG2.H.

#define CT_ARUP 0x4800

CTRL + ARROW_UP key

Definition at line 197 of file BIG2.H.

#define CT_CLR 0x7700

CTRL + CLR key

Definition at line 206 of file BIG2.H.

#define CYCLER 0x2000

Smaller attribute in BIG window

Definition at line 162 of file BIG2.H.

#define DCDEFAULT 0x0800

activate def button on dbl click (bit 11 ob_flags)

Definition at line 167 of file BIG2.H.

#define DELETE 0x537F

DELETE key

Definition at line 187 of file BIG2.H.

#define DLG_DESK (MU_KEYBD | MU_BUTTON | MU_M1 | MU_MESAG | MU_TIMER)

Usual dialog() event bit mask to handle desktop (with menu & windows) events

#define DLG_FORM (MU_KEYBD | MU_BUTTON | MU_TIMER)

Usual dialog() event bit mask to handle form events

#define EFCONT 0x10

contour

Definition at line 251 of file BIG2.H.

#define EFGRAS 0x01

bold

Definition at line 247 of file BIG2.H.

#define EFGRIS 0x02

greyed

Definition at line 248 of file BIG2.H.

#define EFITAL 0x04

italic

Definition at line 249 of file BIG2.H.

#define EFNONE 0x00

None

Definition at line 246 of file BIG2.H.

#define EFSOULI 0x08

underline

Definition at line 250 of file BIG2.H.

#define ENTER 0x1C0D

ENTER key

Definition at line 184 of file BIG2.H.

#define ESC 0x011B

ESC key

Definition at line 204 of file BIG2.H.

#define ESPACE 0x3920

SPACE key

Definition at line 208 of file BIG2.H.

#define F1 0x3B00

F1 key

Definition at line 209 of file BIG2.H.

#define F10 0x4400

F10 key

Definition at line 227 of file BIG2.H.

#define F2 0x3C00

F2 key

Definition at line 211 of file BIG2.H.

#define F3 0x3D00

F3 key

Definition at line 213 of file BIG2.H.

#define F4 0x3E00

F4 key

Definition at line 215 of file BIG2.H.

#define F5 0x3F00

F5 key

Definition at line 217 of file BIG2.H.

#define F6 0x4000

F6 key

Definition at line 219 of file BIG2.H.

#define F7 0x4100

F7 key

Definition at line 221 of file BIG2.H.

#define F8 0x4200

F8 key

Definition at line 223 of file BIG2.H.

#define F9 0x4300

F9 key

Definition at line 225 of file BIG2.H.

#define FALSE 0

FALSE = 0

Definition at line 62 of file BIG2.H.

#define get_popup match

Sortcut see get_popup()

Definition at line 232 of file BIG2.H.

#define HCENT 1

center

Definition at line 255 of file BIG2.H.

#define HELP 0x6200

HELP key

Definition at line 182 of file BIG2.H.

#define HLEFT 0

left

Definition at line 254 of file BIG2.H.

#define HMINUS 4

tiny

Definition at line 264 of file BIG2.H.

#define HNORM 13

norm

Definition at line 262 of file BIG2.H.

#define HPETIT 6

small

Definition at line 263 of file BIG2.H.

#define HRIGHT 2

right

Definition at line 256 of file BIG2.H.

#define INSERT 0x5200

INSERT key

Definition at line 189 of file BIG2.H.

#define max | ( | a,
 |  | b | ) | ((a)>(b)?(a):(b))

compute max value of two numbers

Definition at line 70 of file BIG2.H.

#define MAX_ALRT 250

Maximum size for an alert string

Definition at line 67 of file BIG2.H.

#define min | ( | a,
 |  | b | ) | ((a)<(b)?(a):(b))

compute min value of two numbers

Definition at line 71 of file BIG2.H.

#define MTCARRE 4

square

Definition at line 241 of file BIG2.H.

#define MTCROIX 5

cross

Definition at line 242 of file BIG2.H.

#define MTETOILE 3

star

Definition at line 240 of file BIG2.H.

#define MTLOSANGE 6

diamond

Definition at line 243 of file BIG2.H.

#define MTPLUS 2

plus

Definition at line 239 of file BIG2.H.

#define MTPOINT 1

point

Definition at line 238 of file BIG2.H.

#define NGAD 23

Number of BIG object windows

Definition at line 107 of file BIG2.H.

#define NOT !

NOT='!'

Definition at line 64 of file BIG2.H.

#define NOTOP 0x8000

ops to window-form not in front (bit 15 ob_flags)

Definition at line 171 of file BIG2.H.

#define POINTIL 0x8888

define dotted line for vsl_type() & vsl_udsty()

Definition at line 235 of file BIG2.H.

#define RETURN 0x720D

RETURN key

Definition at line 185 of file BIG2.H.

#define RO180 1800

180 deg.

Definition at line 269 of file BIG2.H.

#define RO270 2700

270 deg.

Definition at line 270 of file BIG2.H.

#define RO90 900

90 deg.

Definition at line 268 of file BIG2.H.

#define RONORM 0

0 deg.

Definition at line 267 of file BIG2.H.

#define SH_ARDN 0x5032

SHIFT + ARROW_DOWN key

Definition at line 200 of file BIG2.H.

#define SH_ARLF 0x4B34

SHIFT + ARROW_LEFT key

Definition at line 202 of file BIG2.H.

#define SH_ARRT 0x4D36

SHIFT + ARROW_RIGHT key

Definition at line 203 of file BIG2.H.

#define SH_ARUP 0x4838

SHIFT + ARROW_UP key

Definition at line 201 of file BIG2.H.

#define SH_CLR 0x4737

SHIFT + CLR key

Definition at line 207 of file BIG2.H.

#define SH_DELETE 0x537F

SHIFT + DELETE key

Definition at line 188 of file BIG2.H.

#define SH_F1 0x5400

SHIFT + F1 key

Definition at line 210 of file BIG2.H.

#define SH_F10 0x5D00

SHIFT + F10 key

Definition at line 228 of file BIG2.H.

#define SH_F2 0x5500

SHIFT + F2 key

Definition at line 212 of file BIG2.H.

#define SH_F3 0x5600

SHIFT + F3 key

Definition at line 214 of file BIG2.H.

#define SH_F4 0x5700

SHIFT + F4 key

Definition at line 216 of file BIG2.H.

#define SH_F5 0x5800

SHIFT + F5 key

Definition at line 218 of file BIG2.H.

#define SH_F6 0x5900

SHIFT + F6 key

Definition at line 220 of file BIG2.H.

#define SH_F7 0x5A00

SHIFT + F7 key

Definition at line 222 of file BIG2.H.

#define SH_F8 0x5B00

SHIFT + F8 key

Definition at line 224 of file BIG2.H.

#define SH_F9 0x5C00

SHIFT + F9 key

Definition at line 226 of file BIG2.H.

#define SH_INSERT 0x5230

SHIFT + INSERT key

Definition at line 190 of file BIG2.H.

#define SMALLER 0x4000

Smaller attribute in BIG window

Definition at line 161 of file BIG2.H.

#define TAB 0x0F09

TAB key

Definition at line 191 of file BIG2.H.

#define TRUE 1

TRUE = 1

Definition at line 63 of file BIG2.H.

#define UNDO 0x6100

UNDO key

Definition at line 183 of file BIG2.H.

#define VDOWN 0

down

Definition at line 257 of file BIG2.H.

#define VLINE 3

base

Definition at line 258 of file BIG2.H.

#define VTOP 5

top

Definition at line 259 of file BIG2.H.

#define WATR_ALLB (CLOSER|FULLER|MOVER|INFO|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE|CYCLER|SMALLER|ALLSIZER)

All the attribute of BIG are defined i.e. really all

#define WATR_ALLG (NAME|CLOSER|FULLER|MOVER|INFO|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE)

All the attribute of GEM are defined

#define WATR_CURRB (CLOSER|FULLER|MOVER|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE|CYCLER|SMALLER|ALLSIZER)

All the attribute of BIG most ussually used i.e. all but the info line

#define WATR_CURRG (NAME|CLOSER|FULLER|MOVER|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE)

All the attribute of GEM most ussualy used i.e. all but the info line

#define WATR_FORMB (CLOSER|MOVER|CYCLER|SMALLER)

Same as WATR_FORMG but for BIG, also with the CYCLER

#define WATR_FORMG (NAME|CLOSER|MOVER)

Reservered to normal windowed form of type GEM (The form is not bigger than the screen. Only the name of the window, the closing button, the displacement bar, and iconification are active

#define WFARROW 0x0002

when set allow window operation from keyboard

Definition at line 155 of file BIG2.H.

#define WFCALAG 0x0004

slider & win size multiple of shift unit

Definition at line 156 of file BIG2.H.

#define WFCLOSE 0x1000

button close form in window (bit 12 ob_flags)

Definition at line 168 of file BIG2.H.

#define WFDECAL 0x0008

if set w_lin & w_col are updated on win resize

Definition at line 157 of file BIG2.H.

#define WFFULL 0x0001

set when window is "fulled"

Definition at line 154 of file BIG2.H.

#define WFGROUP 0x0010

if set all slider arrows in bottom right corner

Definition at line 158 of file BIG2.H.

#define WFLAST 0x0080

Last window indicator (like LASTOBJ)

Definition at line 159 of file BIG2.H.

#define WM_BKGR 0

???

Todo:

Definition at line 174 of file BIG2.H.

#define WM_BOXARROWS 2

???

Todo:

Definition at line 176 of file BIG2.H.

#define WM_BOXMENU 1

???

Todo:

Definition at line 175 of file BIG2.H.

#define WM_BOXTITLES 5

???

Todo:

Definition at line 179 of file BIG2.H.

#define WM_LFARROW 3

???

Todo:

Definition at line 177 of file BIG2.H.

#define WM_RTARROW 4

???

Todo:

Definition at line 178 of file BIG2.H.

#define WTYP_FORM 2

form window. BIG takes care of all.

Definition at line 148 of file BIG2.H.

#define WTYP_MENU 0x8000

Window with Menu

Definition at line 151 of file BIG2.H.

#define WTYP_NORM 1

"normal" window contain probably text.

Definition at line 147 of file BIG2.H.

#define WTYP_PICT 3

Picture window. BIG takes care of all.

Definition at line 149 of file BIG2.H.

#define WTYP_TOOL 0x4000

Window with Toolbar

Definition at line 150 of file BIG2.H.

#define ZERO 0

instead of 0

Definition at line 66 of file BIG2.H.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: The BIG Defined Types

The BIG Defined Types

The BIG Typedefs. More...

Data Structures

struct | Form
union | Cont
struct | Oldw
struct | BigWind
struct | t_image_dial
struct | COOKIE
struct | t_ident_hard_soft
struct | t_display
struct | t_desktop

Typedefs

typedef int | Palette [3]
typedef void(* | FNCP )(void)

Enumerations

enum t_machine {
ST, STE, TT, FALCON_030,
AUTRE_MACHINE
}
enum t_proc_graphique {
PG_ST, PG_STE, PG_TT, PG_FALCON_030,
AUTRE_PG
}
enum | t_cpu { PROC_68000, PROC_68030, AUTRE_PROCESSEUR }
enum t_resolution {
ST_BASSE = 0, ST_MOYENNE = 1, ST_HAUTE = 2, VGA_16COL = 4,
VGA_256COL = 5, R_256C_320_480 = 7, TRUE_COLOR_320_480 = 8, INCONNU = -1
}
enum type_gdos {
AUCUN_GDOS = 0, GDOS_STANDARD = 1, FONT_GDOS = 2, FSM_GDOS = 3,
SPEEDO_GDOS = 4
}

Detailed Description

The BIG Typedefs.

BIG defines several specific type used throughout the program.

Typedef Documentation

typedef void(* FNCP)(void)

function pointer type

Definition at line 277 of file BIG2.H.

typedef int Palette[3]

used by bpal[16]

Definition at line 276 of file BIG2.H.

Enumeration Type Documentation

enum t_cpu

CPU used

Enumerator:
PROC_68000

68000 Processor

PROC_68030

68030 Processor

AUTRE_PROCESSEUR

Unknown Processor

Definition at line 383 of file BIG2.H.

enum t_machine

Atari model used

Enumerator:
ST

Atari ST Model

STE

Atari STE Model

TT

Atari TT Model

FALCON_030

Atari Falcon 30 Model

AUTRE_MACHINE

Unknown model

Definition at line 365 of file BIG2.H.

enum t_proc_graphique

Graphical processor used

Enumerator:
PG_ST

ST graphical processor

PG_STE

STE graphical processor

PG_TT

TT graphical processor

PG_FALCON_030

Falcon graphical processor

AUTRE_PG

Unknown graphical processor

Definition at line 374 of file BIG2.H.

enum t_resolution

Resolution used

Enumerator:
ST_BASSE

low resolution

ST_MOYENNE

medium resolution

ST_HAUTE

high resolution

VGA_16COL

TT VGA

VGA_256COL

FALCON VGA

R_256C_320_480

TT 320*480 16 col

TRUE_COLOR_320_480

Falcon 320*480 VGA

INCONNU

Unknown resolution

Definition at line 390 of file BIG2.H.

enum type_gdos

type of GDOS used

Enumerator:
AUCUN_GDOS

No GDOS running

GDOS_STANDARD

Standard GDOS running

FONT_GDOS

Font GDOS running

FSM_GDOS

FSM GDOS running

SPEEDO_GDOS

Speedo GDOS running

Definition at line 402 of file BIG2.H.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: The BIG Global Variables

The BIG Global Variables

The BIG global variables. More...

Variables

int | ap_id
int | buf [8]
int | mx
int | my
int | mk
int | edit
int | pos
int | object
int | kbd
int | key
int | clik
int | wind
int | intgr
char | pathapp []
Palette | bpal [16]
OBJECT * | adr_menu
OBJECT * | adr_desk
OBJECT ** | ir_trindex
int | cliq_in
GRECT | zclip
FNCP * fnc
BigWind * win
t_ident_hard_soft desc_hard_soft
t_display work_display
t_desktop bureau
int | aide_en_ligne

Detailed Description

The BIG global variables.

BIG works with some global variables, which are thus accessible with the program itself. Their number was limited to the maximum, but however certain constraints are to be respected. I preferred to proceed thus, rather than to burden the work of certain functions by passing a lot of pointers, not always easy to follow and include.

Variable Documentation

OBJECT* adr_desk

Reserved address for desktop

Definition at line 47 of file BIG2INIT.C.

OBJECT* adr_menu

Reserved address for menu form

Definition at line 47 of file BIG2INIT.C.

int aide_en_ligne

Bubble-help -1=active; 0=never; other=kbshift mask

Definition at line 15 of file BIG2HELP.C.

int ap_id

AES applicatio identifier

Definition at line 24 of file BIG2INIT.C.

Palette bpal[16]

Internal 16 color palette

Definition at line 56 of file BIG2INIT.C.

int buf[8]

Events buffer

Definition at line 26 of file BIG2INIT.C.

t_desktop bureau

Desktop information

Definition at line 40 of file BIG2INIT.C.

int clik

number of mouse clicks

Definition at line 29 of file BIG2INIT.C.

cliq_in

Validate option selection

This variable is used jointly with the pop_ups, the pop-lists and the hierarchical menus. If an option were indeed chosen, this variable is TRUE, if not FALSE (clicked outside).

Definition at line 41 of file BIG2INIT.C.

t_ident_hard_soft desc_hard_soft

Hard/Soft information

Definition at line 38 of file BIG2INIT.C.

int edit

Current Editable

Definition at line 28 of file BIG2INIT.C.

FNCP* fnc

Pointer to function pointer array

Definition at line 66 of file BIG2INIT.C.

int intgr

True if ressource is internal

Definition at line 31 of file BIG2INIT.C.

OBJECT ** ir_trindex

Address of all forms in program

Pointer on pointer of structures OBJECT. It be thus used like a table of structures. This pseudo-table contains all addresses of all the forms of the resource, whether this one is integrated or external. The address of form 'FORM' is obtained for example ir_trindex[FORM]. The use of the function GEM rsrc_gaddr() is thus useless.

Definition at line 62 of file BIG2INIT.C.

int kbd

State control key

Definition at line 29 of file BIG2INIT.C.

int key

Current KB event

Definition at line 29 of file BIG2INIT.C.

int mk

Mouse state

Definition at line 27 of file BIG2INIT.C.

int mx

Mouse X Position

Definition at line 27 of file BIG2INIT.C.

int my

Mouse Y Position

Definition at line 27 of file BIG2INIT.C.

int object

Object clicked for MU_BUTTON

Definition at line 28 of file BIG2INIT.C.

char pathapp

Application path at startup

Definition at line 125 of file d_big.c.

int pos

Position cursor in editable

Definition at line 28 of file BIG2INIT.C.

BigWind* win

Pointer to the windows array

Definition at line 68 of file BIG2INIT.C.

int wind

GEM handle of clicked window in working area

Definition at line 30 of file BIG2INIT.C.

t_display work_display

Display information

Definition at line 39 of file BIG2INIT.C.

zclip

clipping zone for redraw

At the time of a redraw message, the rectangle of the list are drawn one by one. If the window is of "normal" type, the function pointed by the element w_redraw is called each time. Before this call, the coordinates of the clipped zone (thus to redraw) are placed in this variables. If that proves to be necessary to optimize the speed of display, the developer can redraw only what is indeed in the zone (particularly with a vectorial graphics software.

Definition at line 10 of file BIG2EVTW.C.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: The BIG Functions Library

The BIG Functions Library

The BIG Functions. More...

Modules

BIG Control Functions

Used to innitialize and terminate the BIG Library.

BIG Forms Management Functions

BIG Forms Management Functions.

BIG Extended Editable Management Functions

BIG Extended Editable Management Functions.

BIG Utility Functions

BIG Utility Functions.

BIG Cookie Functions

BIG Cookie Functions.

BIG Windows Function

BIG Windows Function.

Detailed Description

The BIG Functions.

BIG provides a large number of functions.
Only the BIG "external" functions which the programmer must (or can) call will be presented here. BIG internal functions are not documented.
About thirty of them are to be used very often in all the developments.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG Control Functions

BIG Control Functions
[The BIG Functions Library]

Used to innitialize and terminate the BIG Library. More...

Functions

int | initial (char *rsc, int menu, int desk, int nb_tree, OBJECT *rs_tree, char *rs_str, int n_wind, int acc)
Initialize BIG.
void | end (void)
Terminate BIG.

Detailed Description

Used to innitialize and terminate the BIG Library.

These functions must be used at the beginning and at the end of all programs.

Function Documentation

void end ( void )

Terminate BIG.

Returns:
nothing

This function closes all the windows of the program, it releases the various storage areas which were reserved by initialization with initial() and in the course of program, it releases the resource, it closes the workstation, it restores the palette and other parameters of display and it leaves the program.

Note:
This function is not called by BIG. It is your program which will have to take care of this call when the user asks to leave the application. If an storage area is assigned to the contents of a window, it must be released. If the closing function assigned to the element win[index].w_close of this window does not take care of it, you will have to do it BEFORE calling end().

Definition at line 666 of file BIG2INIT.C.

int initial | ( | char * | rsc,
 |  | int | menu,
 |  | int | desk,
 |  | int | nb_tree,
 |  | OBJECT * | rs_tree,
 |  | char * | rs_str,
 |  | int | n_wind,
 |  | int | acc
 | ) |  |

Initialize BIG.

Parameters:
rsc | is a pointer on a string which is the filename of the resource to load, or an empty string for an integrated resource.
menu | is the tree number (in the resource) which will be taken as top menu of the application. In the case of a desktop accessory this parameter is ignored. If one wishes to create a program without menu, it is necessary to transmit "-1" in this parameter
desk | is the tree number (in the resource) which will be taken as desktop of the application. In the case of a desktop accessory this parameter is ignored. If one wishes to create a program without desktop, it is necessary to transmit "-1" in this parameter
nb_tree | must be equal to 0 if the resource use an external file. If the program works with an integrated resource, nb_tree indicates the number of trees (menu and forms) of its resource.
rs_tree | is a special pointer. In the case of an integrated resource, it make it possible to indicate to BIG where in memory begin the tables "rs_trindex[]" created by file RSH. If not, it point on ZERO. See in the chapter "Working with an integrated resource the way of using it.
rs_str | is a special pointer. In the case of an integrated resource, it make it possible to indicate to BIG where in memory begin the tables "rs_frstr[]" created by file RSH. If not, it point on ZERO. See in the chapter "Working with an integrated resource the way of using it.
n_wind | total number of BIG windows used by the program.
acc | Number in the resource of the free string to use for the call of the function menu_register() if the application is a desktop (name of the accessory in the desktop menu). If it is a program, this parameter is ignored, one can transmit "-1".
Returns:
TRUE if everything went well, FALSE otherwise (for example, if the resource file was not found).

This function declares the application, opens the work station, initializes the majority of the global variables, load the resource (if it is external, if not adapts the integrated resource to the current resolution), sets up the resource included of BIG, sets up the storage areas for window management, of the userdef objects,of extended editable, of the pointers on function, of the pallet, reserve the memory for window management by BIG, initializes certain elements of the BigWind structures, etc...

Note:
The variables "adr_menu" and "adr_desk" have fixed names to facilitate their management. Indeed, there are many functions which make call to these addresses, and to transmit them each time would be tiresome and not very practical. If your program works with several menu bars (or even several desktops, why not), the address of the current menu must be in adr_menu. The function centers in advance all the forms and empty all the editable fields. You can reach the windows structures (and their elements) as elements of a table, by win[index].w_adr for example (numerotation starts obviously to zero).
It is strongly recommended not to make economy with the quantity of windows necessary, and to declare a window by data element to be treated. For example, it is disadvised having only one window to display a text or an image, under the pretext that both will never be displayed at the same time. It is, in this case, better to have two distinct windows, the parameters contained in their elements being different. In the same way, declare a window for each form in window. The management of the program will be simplified by doing so, even if it means to close a window before opening another one if both are not displayed at the same time.
A BigWind structure represents only 158 bytes in memory, whereas a complicated management of few windows sharing different contents is likely to take much more, without speaking about processing time.
This function must IMPERATIVELY be called by the main() function of the program at the beginning of the execution.

Definition at line 143 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG Forms Management Functions

BIG Forms Management Functions
[The BIG Functions Library]

BIG Forms Management Functions. More...

Functions

void | formm_draw (OBJECT *adr, int ed, int flmove, MFDB *img)
Display a movable form.
void | formm_undraw (OBJECT *adr, MFDB *img)
Erase a movable form.
void | formf_draw (OBJECT *adr, int ed)
Display a traditional form.
void | formf_undraw (OBJECT *adr)
Erase a traditional form.
void | create_hierm (OBJECT *adr)
Place an arrow in a menu.
int | dialog (int flags, OBJECT *address, int f, int fl_rb, int form_pu, MFDB *img, int fl_move)
Manage all the events in BIG.
int | match (OBJECT *adr, int button)
Search for a text match in pop-up pop-list.
void | set_popup (OBJECT *adr, int button, int option)
Link Text to pop-up.
OBJECT * | create_popup (int nbre, char *liste)
Create text pop-up menu.
int | free_popup (int posx, int posy, int form, OBJECT *adr)
Call a free pop-up.
void | get_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
Saves the image of an area in a MFDB.
void | put_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
Restore the image of an area from a MFDB.
int | big_alert (int button, int number, char *str, int fl_alrt)
Call and manage a BIG Alert.
char * | get_string (int number)
Return a pointer to a free string.
void | form_attach (int tree, int obj, char formular)
Link pop-up object and a sub-menu.
void | bulle_attach (int tree, int obj, char bulle)
Create a link between an object an a free string of a bubble-help.
void | set_interface (int under, int cunder, int ctxt_under, int cicn_coche, int ctxt_coche, int cicn_radio, int ctxt_radio, int cicn_popup, int ctxt_popup, int cmove, int cgrastr, int clin_frame, int ctxt_frame, int cniceline)
Modify aspect parameters of BIG object.
int cdecl | parent (OBJECT *adr, int object)
Return the number of the parent object.
void | bak_rsc (OBJECT *tree, char **bak)
Save the state of a Form.
void | res_rsc (OBJECT *tree, char **bak)
Restore the state of a Form.
void | dlg_mouse (void)
Change mouse pointer in working area.
void | set_radio (OBJECT *adr, int rb)
Select a radio button in a group.
int | get_radio (OBJECT *adr, int rb)
Find the selected radio-button in a group.
void | set_attributes (OBJECT *adr, int ob, int attr)
Set graphical attributes of B_GRASTR or B_SMSTR.

Detailed Description

BIG Forms Management Functions.

Function Documentation

void bak_rsc | ( | OBJECT * | tree,
 |  | char ** | bak
 | ) |  |

Save the state of a Form.

Parameters:
tree | Address of the form.
bak | Pointer on a pointer of string which is used as a backup buffer by the function. This buffer is an storage area reserved with the size necessary by the function. It will be released by res_rsc() if called, or will be the responsability of programmer if not.
Returns:
Nothing

This function backs up in a buffer the state of a form, i.e. the buttons selected or not, the text of editable, and the pop-up, etc, in order to restore them by the function res_rsc() if the button 'Cancel' is clicked.

Note:
The call of this function must be made by the programmer before drawing the form (by formm_draw() for example). In a form in window, it is necessary to call this function in the event of click on the button 'Apply' in order to record the new state. Then do not forget to precede this call with Mfree(adr_bakrsc) (where adr_bakrsc is the address of the buffer), if not, an equivalent size would be reserved for each time, without being released. See also the function res_rsc().

Definition at line 673 of file BIG2FOR2.C.

int big_alert | ( | int | button,
 |  | int | number,
 |  | char * | str,
 |  | int | fl_alrt
 | ) |  |

Call and manage a BIG Alert.

Parameters:
button | Number of the default button: 0, 1, 2, or 3.
number | Number (in the resource) of the free string containing the text of the alert box, with the same format as for the GEM function form_alert(). If that is more appropriate for the situation, the string can be indicated directly in the following parameter. In this case number must be equal to -1 (BLANK).
str | If one wishes to directly transmit the string, it must set the preceding parameter is -1 and str is then a pointer on the alert string. Otherwise the string is empty.
fl_alrt | If this flag is TRUE, alert will be managed by BIG, like a movable form. If it is FALSE, it will be a normal GEM alarm, called by form_alert().
Returns:
: Number (1, 2 or 3) of the button which was clicked, as in GEM function

This function calls and manages a BIG alert box, i.e. a movable form. The call and the string of alert are similar to their GEM counterparts. Alert can contain up to 5 lines of 31 characters maximum, and three buttons of 20 characters maximum.

Note:
BIG proposes 9 alert icons. If the string contains 0 as the icon number the alert will be displayed without icon. Numbers 1 to 9 correspond to the following icons:
  • 1: Exclamation point
  • 2: Question mark
  • 3: Stop Panel
  • 4: prohibited Direction Panel
  • 5: Open hand
  • 6: Letter "I", like Information
  • 7: Bomb (for the error messages)
  • 8: Printer
  • 9: Diskette
If one works with 16 colors or more, the alert box is displayed in 3D, the bottom being gray (color number 8). If not, it is displayed with a white background, without 3D.

Definition at line 1102 of file BIG2FOR2.C.

void bulle_attach | ( | int | tree,
 |  | int | obj,
 |  | char | bulle
 | ) |  |

Create a link between an object an a free string of a bubble-help.

Parameters:
tree | Number of the tree containing the object.
obj | Number of the object concerned.
bulle | Number of the free string to assign to the object as a text of the bubble.
Returns:
Nothing

This function create the link between an object and the free string which must be affected to him as a bubble-help.

Note:
It is possible to create the link "manually" at the time of the creation of the resource. However, that is rather tedious and especially, if new strings are inserted later on, the work must be remade. It is thus more convenient to make series of calls to this function at the beginning of the program in order to create these links by using the names of the trees, objects and strings. The function also set the bit AIDE_OBJET of theconcerned object in order to announce that a bubble-help is affected to it. The function is without effect for the objects which cannot receive bubble-help (see the chapter on the bubble-help)

Definition at line 1456 of file BIG2FOR2.C.

void create_hierm ( OBJECT * adr )

Place an arrow in a menu.

Parameters:
adr Address of the menu tree.
Returns:
Nothing

This function seeks the B_HIERM objects of a menu and places in the last but one character of the string an arrow towards the right or left according to where the hierarchical menu will unroll

Note:
With regard to the top menu of an application, the function initial() is given the responsability to call this function. It is also called automatically with each time a click takes place on a title of of menu in windows, because the window could have been moved, and the sub-menus could then have to be unrolled on the other side. But if you wish to change the menu bar (and if the new one contains some B_HIERM), you must call this function during the first display of this bar. At the time of the later redraw, or reactivation of the first bar, it is not necessary. The menu options of the type B_HIERM must be filled with spaces on all their width. The last but one character is replaced by an arrow (ASCII 3 or 4) placed by this function.

Definition at line 1039 of file BIG2FOR2.C.

OBJECT* create_popup | ( | int | nbre,
 |  | char * | liste
 | ) |  |

Create text pop-up menu.

Parameters:
nbre | It is the number of character strings intended to become the options of the pop-up.
liste | Pointer to the beginning of the string table. They must imperatively be consecutive in memory while being separated by a null byte.
Returns:
The address of the reserved area which is from now on the pop-up menu or zero in the event of problem.

This function makes it possible to create a text pop-up menu in memory from a list of character string.

Note:
This function is extremly practical to create a pop-up menu when you do not know in advance (at the creation of the resource) the number of options or the text. For example, pop-up allowing for choice of a SpeedoGDOS font. The pop-up created can be used only as a free pop-up free, with the function free_popup(). Indeed, "ordinary" pop_up would have ro be related to a form button, which would contain into its ob_state the number of the sub-menu. But the pop-up created does not have a number! In addition, one should not forget to release the memory which the function has reserved, like this:
    adr = create_popup(20, liste);
    free_pop_up(x, y, BLANK, adr);
    free(adr);
The memory reservation is made with the C function malloc() and not the one from GEMDOS, which has lots of bugs. The release of memory must thus be also made by C function. If some options must be "desactivated" or "checked", the programmer will have to take care of it. For example: adr[3].ob_flags |= HIDETREE; desactivate the third option (the object numbered 0 is the root).

Definition at line 1348 of file BIG2FOR2.C.

int dialog | ( | int | flags,
 |  | OBJECT * | address,
 |  | int | f,
 |  | int | fl_rb,
 |  | int | form_pu,
 |  | MFDB * | img,
 |  | int | fl_move
 | ) |  |

Manage all the events in BIG.

Parameters:
flags | It is the bits mask, the same one as for the GEM function evnt_multi(), who indicates which events must be supervised. BIG proposes several defines for the usual situations: WATR_ALLG, WATR_ALLB, WATR_CURRG, WATR_CURRB, WATR_FORMG, WATR_FORMB
address | Address of the form or the desktop to be work on.
f | Flag. If this flag is TRUE, the function supervises the menu, the desktop, the windows, etc If it is FALSE, it is limited to the form indicated by address, considering that the other events are blocked by wind_update().
fl_rb | Flag Right button. If TRUE, a right click of a button of the mouse calls a free pop-up menu (see following parameter).
form_pu | Pop-Up Form. Tree number for the form used as a free pop-up in the event of click on the right button. -1 if there is not. To reserve for work on the desktop.
img | In the case of a movable form, it is a pointer to the MFDB which contains the background of this form. This parameter is not used if one work on the desktop, but nevertheless a MFDB must be transmitted.
fl_move | Indicates if the form is removable (TRUE) or not (FALSE). Also FALSE if the function manages the desktop.
Returns:
The function turns over a bit mask corresponding to the type of event which occurred. This mask is the same one as for the GEM function evnt_multi(). Here is a reminder the bit mask of bits used by evnt_multi() and dialog():
  • Bit 0: MU_KEYBD (keyboard event)
  • Bit 1: MU_BUTTON (mouse click event)
  • Bit 2: MU_M1 (mouse area 1 event)
  • Bit 3: MU_M2 (mouse area 2 event)
  • Bit 4: MU_MESAG (menu or window message event)
  • Bit 5: MU_TIMER (timer event)

This function is the heart of BIG. It is the main loop which scans the events and manages them mainly. It will be always called at least once in a program under BIG.

Note:
The function dialog() also performs, thanks to the timer, the monitoring of several things: windows in foreground to activate the corresponding palette even on intervention of another application, bubble-help, hierarchical menu and right-click of the mouse. This permanent monitoring involves a certain slow down, particularly obvious on the old 8 MHz machines. It is possible to "shutdown" these functions by typing in the source of your program the line:
#define LIGHT
#include <BIG2.H>
The definition must be placed BEFORE the include. Obviously, the mentionned effects also disappear. No more bubbles-help, no more menus hierarchical, etc. (but the hierarchical menus for menus in window are always active). But in a program which does not use them, it is to better shut them down (it is for example the case of the program BIG_DOC). However, the processing of the color palette continue to be active since it is at the time when a window is brought to the foreground that BIG activates the pallet which corresponds to this window. Simply, this management will no more take into account the windows belonging to other applications.

Definition at line 74 of file BIG2DIAL.C.

void dlg_mouse ( void )

Change mouse pointer in working area.

Returns:
Nothing

This function tests the position of the mouse compared to the working area of the window in the foreground and changes possibly its shape.

Note:
It is useful to call this function in the following situation: a window is opened, and the mouse must take a shape determined in its working area. The window size is changed by the program, without the user directly changing its dimensions. For example, the window displays a series of tables. By a keyboard shortcut, the user requires to pass in the following table, the window size is automatically adjusted by the program to the dimensions of the new table. At the end of the process, if the mouse is in the working area, it is necessary to activate the shape envisaged. If not, it is necessary to activate the default arrow shape. This operation is carried out by the call to this function.

Definition at line 1454 of file BIG2DIAL.C.

void form_attach | ( | int | tree,
 |  | int | obj,
 |  | char | formular
 | ) |  |

Link pop-up object and a sub-menu.

Parameters:
tree | Number of the tree containing the object.
obj | Number of the object concerned.
formular | Number of the sub-menu (or help form) to assign to the object.
Returns:
Nothing

This function creates the link between an object of the pop-up type, B_POPUP, B_LIST, B_HELP or B_HIERM and the sub-menu (or help form) who must be affected to it.

Note:
It is possible to create the link manually at the time of the creation of the resource. However, that is rather tedious and especially, if new tree structures are inserted later on, the work must be remade. It is thus more convenient to use a series of calls to this function at the beginning of the program in order to create these links by using the names of the trees and objects.

Definition at line 1418 of file BIG2FOR2.C.

void formf_draw | ( | OBJECT * | adr,
 |  | int | ed
 | ) |  |

Display a traditional form.

Parameters:
adr | Address of the tree to be displayed.
ed | Object Number of the editable field, if there is one, where to place the cursor at the beginning of management or -1 if no editable. The cursor is placed at the end of the field.

Display a traditional form

Note:
This function exists only for reasons of compatibility and to be complete, but the function formm_draw() should preferably be used. The form displayed with this function must be removed from the screen with formf_undraw() function.

Definition at line 153 of file BIG2FOR1.C.

void formf_undraw ( OBJECT * adr )

Erase a traditional form.

Parameters:
adr Address of the tree.
Returns:
Nothing

This function erases the screen for a fixed form which was displayed by the function formf_draw().

Note:
The function must be used in complement of formf_draw() function.

Definition at line 185 of file BIG2FOR1.C.

void formm_draw | ( | OBJECT * | adr,
 |  | int | ed,
 |  | int | flmove,
 |  | MFDB * | img
 | ) |  |

Display a movable form.

Parameters:
adr | Address of the form to be displayed.
ed | Object Number of the editable field in which the cursor must be placed at the beginning of the management of the form. The cursor is placed at the end of the field. -1 if there is no editable.
flmove | Move flag: If this flag is FALSE, the displacement of the form is done as a "phantom box". If it is TRUE, the function reserve a memory area and saves the screen there in order to carry out displacement in real-time. If it is not possible to reserve this memory, displacement is done with a phantom box.
img | Pointer to a MFDB used to save the background under the form.
Returns:
Nothing

This function displays a movable form

Note:
To remove the form from the screen at the end of management, it is imperatively necessary to use the function formm_undraw().

Definition at line 33 of file BIG2FOR1.C.

void formm_undraw | ( | OBJECT * | adr,
 |  | MFDB * | img
 | ) |  |

Erase a movable form.

Parameters:
adr | Address of the tree.
img | Pointer to the MFDB in which the background of the form was saved.
Returns:
Nothing

This function erases a movable form which was displayed by the function formm_draw() form from the screen.

Note:
The movable form should have been displayed imperatively by the function formm_draw().

Definition at line 107 of file BIG2FOR1.C.

int free_popup | ( | int | posx,
 |  | int | posy,
 |  | int | tree,
 |  | OBJECT * | adr
 | ) |  |

Call a free pop-up.

Parameters:
posx | X Coordinate of the center of the pop-up. It will be possibly shifted if it were to leave the screen.
posy | Y Coordinate of the center of the pop-up. It will be possibly shifted if it were to leave the screen.
tree | Number of the tree serving as pop-up, or "-1" if one prefers to transmit the address directly.
adr | If the preceding parameter is set to "-1", addresses of the pop-up form. If not, this parameter is ignored.
Returns:
TRUE if an option was selected, FALSE if the pop-up was left by clicking outside.

This function calls a "free" pop-up form, in the sense that its position is not related to the position of a button in a form.

Note:
If an object has been chosen, TRUE is returned and an event is set up by the function in the buffer of events. It is of type BEV_FREEPU. If the clicked object is of type function pointer, the function is automatically carried out before the return of the function. Although this function is called internally by the function dialog() (see the parameter "fl_rb" of dialog()), you may need to call it directly in certain situations.

Definition at line 1508 of file BIG2FOR1.C.

void get_bkgr | ( | int | of_x,
 |  | int | of_y,
 |  | int | of_w,
 |  | int | of_h,
 |  | MFDB * | img
 | ) |  |

Saves the image of an area in a MFDB.

Parameters:
of_x | X offset Coordinate of the Image area to save
of_y | Y offset Coordinate of the Image area to save
of_w | Width offset of the Image area to save
of_h | Height offset of the Image area to save
img | Pointer to the MFDB which will describe the saved area.
Returns:
nothing

This function saves the image of an area in a MFDB, in order to restore it later. It makes it possible to put "aside" the bottom of a form or pop-up, for example. This bottom will be restored by the function put_bkgr().

Note:
This function is called internally by BIG, but you can use it to save area of screen of necessary. See also function put_bkgr().

Definition at line 49 of file BIG2FOR2.C.

int get_radio | ( | OBJECT * | adr,
 |  | int | rb
 | ) |  |

Find the selected radio-button in a group.

Parameters:
adr | Address of the form.
rb | Object Number of any of the radio-buttons in the group
Returns:
The object number of selected radio-button

This function seeks which radio-button is selected in a group.

Definition at line 1610 of file BIG2FOR2.C.

char* get_string ( int number )

Return a pointer to a free string.

Parameters:
number Number of the free string in the resource (given in the file header created by the resource).
Returns:
Pointer on the string in memory.

This function returns a pointer on a free string (or on a free alert) of an internal or external resource.

Definition at line 1310 of file BIG2FOR2.C.

int match | ( | OBJECT * | adr,
 |  | int | button
 | ) |  |

Search for a text match in pop-up pop-list.

Parameters:
adr | Address of the form in which the button is.
button | Button Number in this form.
Returns:
Object Number in the pop-up form if an occurrence is found, 0 if not. ` This function seeks if there is a correspondence between the text (or the pattern of image or box) for a pop-up button or pop-list and one of the objects of its associated pop-up form.
Note:
The root-object of the pop-up form having the number 0, it is not possible to have an occurrence with this object number. The function thus return 0 if no correspondence is found.

Definition at line 1250 of file BIG2FOR1.C.

int cdecl parent | ( | OBJECT * | adr,
 |  | int | object
 | ) |  |

Return the number of the parent object.

Parameters:
adr | Address of the form.
object | number of the object which one seeks the parent.
Returns:
Parent object Number

This function return the parent object number of an object.

Definition at line 640 of file BIG2FOR2.C.

void put_bkgr | ( | int | of_x,
 |  | int | of_y,
 |  | int | of_w,
 |  | int | of_h,
 |  | MFDB * | img
 | ) |  |

Restore the image of an area from a MFDB.

Parameters:
of_x | X offset Coordinate of the Image area to restore
of_y | Y offset Coordinate of the Image area to restore
of_w | Width offset of the Image area to restore
of_h | Height offset of the Image area to restore
img | Pointer to the MFDB which will be used to restore the saved area.
Returns:
nothing

This function restores the image of an area which was saved in a MFDB, by the function get_bkgr().

Note:
This function is called internally by BIG, but you can use it to restore zones of screen if necessary. See also function get_bkgr().

Definition at line 92 of file BIG2FOR2.C.

void res_rsc | ( | OBJECT * | tree,
 |  | char ** | bak
 | ) |  |

Restore the state of a Form.

Parameters:
tree | Address of the form.
bak | Pointer on a pointer of string which is used as a restore buffer by the function. This buffer is an storage area that has been reserved with the size necessary by the function bak_rsc(). The memory is released by res_rsc().
Returns:
Nothing

This function restores the state of a form saved by the function bak_rsc().

Note:
Wrarning: If the management of the form is left by 'Cancel', the programmer must call this function to restore the form state. The storage area is then released. If management is left by 'Confirm', it is the programmer who must undertake the release of the storage area by: Mfree(adr_bakrsc) If not, the storage area would remain allocated. See also the function bak_rsc().

Definition at line 783 of file BIG2FOR2.C.

void set_attributes | ( | OBJECT * | adr,
 |  | int | ob,
 |  | int | attr
 | ) |  |

Set graphical attributes of B_GRASTR or B_SMSTR.

Parameters:
adr | Address of the form containing the object.
ob | Object Number.
attr | Bit Mask of the wanted attributes, the same bit mask as in the vst_effects() function.
Returns:
Nothing

This function is used to change the graphic attributes of objects of type B_GRASTR and B_SMSTR.

Note:
The object is not redrawn. The function must thus be called before the display of the form or a redrawn must be executed.

Definition at line 1643 of file BIG2FOR2.C.

void set_interface | ( | int | under,
 |  | int | cunder,
 |  | int | ctxt_under,
 |  | int | cicn_coche,
 |  | int | ctxt_coche,
 |  | int | cicn_radio,
 |  | int | ctxt_radio,
 |  | int | cicn_popup,
 |  | int | ctxt_popup,
 |  | int | cmove,
 |  | int | cgrastr,
 |  | int | clin_frame,
 |  | int | ctxt_frame,
 |  | int | cniceline
 | ) |  |

Modify aspect parameters of BIG object.

Parameters:
under | Flag. If it is TRUE, the character will be underlined in objects B_SELECT, B_UNDO and B_UNDER. If it is FALSE, the character will not be underlined.
cunder | Color Index of the underlined character.
ctxt_under | Color index of the remainder of the text for the objects already mentioned above.
cicn_coche | Color Index of the icon for B_CHECKB buttons.
ctxt_coche | Color index of the text for B_CHECKB buttons.
cicn_radio | Color Index of the icon for B_RADIOB buttons.
ctxt_radio | Color index of the text for B_RADIOB buttons.
cicn_popup | Color Index of the icon for B_POPUP & B_LIST buttons.
ctxt_popup | Color Index of the text for B_POPUP & B_LIST buttons.
cmove | Color index of the lines for B_MOVE objects.
cgrastr | Color index of the text for B_GRASTR objects.
clin_frame | Color index of the frame for B_FRAME objects.
ctxt_frame | Color index of the text for B_FRAME objects.
cniceline | Color index of the lines for B_NICELINE objects.

This function makes it possible to modify certain parameters concerning the aspect of BIG objects.

Note:
If "-1" is transmitted to an element, the corresponding adjustment is unchanged. By default, the character is underlined (under == TRUE), it is in red (cunder == RED), and all the other parameters are set to "black" (BLACK). The numbers of the patterns correspond to those used by VDI function vsf_style(). The design for the pattern is thus not limited to the 7 models of the AES, but can take one of the 24 patterns provided by the VDI. The adjustments affect all the corresponding objects of all the forms of the application.
The function tests if there is at the time of the call some window-forms or windows with toolbar opened. If it finds some, these windows are entirely redrawn to bring up to date the new adjustments. Therefore, this function should never be called when the GEM is "freezed" by a blocking form.

Definition at line 1520 of file BIG2FOR2.C.

void set_popup | ( | OBJECT * | adr,
 |  | int | button,
 |  | int | option
 | ) |  |

Link Text to pop-up.

Parameters:
adr | Address of the form that contain the button
button | Button Number in this form.
option | Object Number of the option in the pop-up menu.
Returns:
Nothing

This function connects the text (or the pattern of image or box) for a pop-up menu option to the pop-up or pop-list button associated.

Definition at line 1321 of file BIG2FOR1.C.

void set_radio | ( | OBJECT * | adr,
 |  | int | rb
 | ) |  |

Select a radio button in a group.

Parameters:
adr | Address of the form.
rb | Object Number of the radio-button to be selected.
Returns:
Nothing

This function selects a radio-button in a group of radio-buttons and deselect all the others.

Note:
The function only select the specified radio-button it does not redraw anything. It must thus be called before the display of the form or the program must take care of redrawing the parent-object of the group, wich cause to also redraw all the radio-button.

Definition at line 1584 of file BIG2FOR2.C.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG Extended Editable Management Functions

BIG Extended Editable Management Functions
[The BIG Functions Library]

BIG Extended Editable Management Functions. More...

Functions

void | objc_xedit (OBJECT *adr, int car, int ed, int *po, int action, int f, int index)
BIG equivalent to GEM objc_edit() function.
void | set_text (OBJECT *adr, int object, char *string)
Place text in an object.
char * | get_text (OBJECT *adr, int object)
Get text in an object.

Detailed Description

BIG Extended Editable Management Functions.

Function Documentation

char* get_text | ( | OBJECT * | adr,
 |  | int | object
 | ) |  |

Get text in an object.

Parameters:
adr | Address of the form.
object | Object number.
Returns:
Pointer on the string in the object.

This function returns a pointer on the text of an object of the type G_STRING, G_BUTTON, G_TEXT, G_BOXTEXT, G_FTEXT, G_FBOXTEXT or G_USERDEF (in this case, BIG objects having a text).

Note:
In the case of a B_EDIT object, it is a pointer on the beginning of the string of data entry which is return. See also the function set_text().

Definition at line 75 of file BIG2EDIT.C.

void objc_xedit | ( | OBJECT * | adr,
 |  | int | car,
 |  | int | ed,
 |  | int * | po,
 |  | int | action,
 |  | int | f,
 |  | int | index
 | ) |  |

BIG equivalent to GEM objc_edit() function.

Parameters:
adr | Address of the form where the editable is located.
car | Character to be registered in the field (such as transmited by evnt_multi()). 0 (ZERO) for removing or initialize the cursor.
ed | Object number of the editable field.
po | pointer on the position of the cursor in the field (will be possibly modified).
action Action to be realized, as for objc_edit():

  • ED_INIT the cursor is placed at the end of the field.
  • ED_END the cursor is removed.
  • ED_CHAR the character is processed.
f | Flag. TRUE if working on a form in window, FALSE if not.
index | BIG Index of the form in window, if it there one. -1 (BLANK) otherwise.
Returns:
Nothing

This function replaces the call to the GEM objc_edit() function. This is necessary because of the existence in BIG of the small characters editable fields as, that GEM does not handle correctly. But it can also be used also with the ordinary editable. It is therefore recommanded to systematically use it in the place of the GEM function. It is used in a similar way.

Note:
As with the GEM function, the cursor is drawn in Xor mode. The use of value ED_END action parameter is thus made same manner, the cursor is alternatively put or removed at each call. With ED_INIT, it is always put, but always at the end of the field. BIG treats the ' te_pvalid' string filter correctly, and even adds 3 new filter characters:
  • 'x' All the characters are authorized, but they are automatically converted in capital letter. This filter existed already in GEM, but was not nowhere documented. BIG officializes it and ensures its operation on all the systems.
  • 'H' All hex figures (0-9) + (a-f) + (A-F).
  • 'S' Number (0-9) or '+' or '-' signs. Practical for the editable where a positive or negative value can be entered. The first character of the "te_pvalid" filter must be a 'S' in this case.
The editable fields can comprise one or more fixed character(s) in the middle of the string "te_ptmplt". For example, For example if the string is specified as "Price: ____.__" the point is a fixed character (refered as "mark" in the following explanation). If the data entry cursor is before the mark and that the user types a point ("."), the cursor jumps to the position located just after the mark, and the interval is filled by spaces. But that is made only if the mark is an isolated character. Thus, let us consider the field "Hour: __h__m__s". If the cursor is in the first part of the data entry and that the user types a 'h', the jump of the cursor is carried out. But if the field is "Hour: __Hr__Mn__Se", the jump will not be made. Note that the GEM function objc_edit() works in the same way. Note also that there is a bug in the GEM function objc_draw(): If the first character of the string "te_ptext" is an "@", the field remains empty when display. However, the cursor is correctly placed, and the "te_ptext" string is normal in the memory.

Definition at line 421 of file BIG2EDIT.C.

void set_text | ( | OBJECT * | adr,
 |  | int | object,
 |  | char * | string
 | ) |  |

Place text in an object.

Parameters:
adr | Address of the form.
object | Object number.
string | Pointer on the string to be placed in the object.
Returns:
Nothing

This function places a text in an object of the type G_STRING, G_BUTTON, G_TEXT, G_BOXTEXT, G_FTEXT, G_FBOXTEXT or G_USERDEF (in this case, BIG objects that contain a text).

See also:
get_text()

Definition at line 41 of file BIG2EDIT.C.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG Utility Functions

BIG Utility Functions
[The BIG Functions Library]

BIG Utility Functions. More...

Functions

char * | path (char *pat)
Get the default path of the application.
long | exist (char *name, int att)
Return size of a file if it exist.
void | set_palette (int index)
New value for the pallet.
long | timer (void)
New value for the pallet.
char * | trim (char *str)
Trim tab/spaces at begin/end of a string.
void | send_mesag (int type, int wi, int x, int y, int w, int h)
Send message to itself.
int | selector (char *pat, char *ext, char *file, char *title)
Call GEM File selector.
void | extension (char *filename, char *ext)
Forces a specific extension on file or path name.
int | rc_intersect (GRECT *p1, GRECT *p2)
Find common zone between two areas of screen.
void | clipp (int clip_flag, GRECT *area)
Turn on/off clipping of a screen area.
void | fill_tab (int *pxy, int n,...)
First Cookie of the cookie jar.
void | empty (int evnmt)
Empty keyboard or message buffer.

Detailed Description

BIG Utility Functions.

Function Documentation

void clipp | ( | int | clip_flag,
 |  | GRECT * | area
 | ) |  |

Turn on/off clipping of a screen area.

Parameters:
clip_flag | True if the clipping must be activated, FALSE if it must be desactivated.
area | Pointer on a structure GRECT describing the zone of screen concerned.

This function activates or decontaminates the clipping of a zone of the screen.

Note:
This function is used for the processing of the messages of redraw, to be sure that the drawing in progress will not overflow of the zone on which one works.

Definition at line 236 of file BIG2DIVR.C.

void empty ( int evnmt )

Empty keyboard or message buffer.

Parameters:
evnmt This parameter is MU_KEYBD (1) to empty the keyboard buffer, or MU_MESAG (16) to empty the message buffer. All the other values are ignored.

This function waits until either the keyboard buffer, or the message buffer (in global variable buf) is empty and relinquishes control only at this time.

Definition at line 488 of file BIG2DIVR.C.

long exist | ( | char * | name,
 |  | int | att
 | ) |  |

Return size of a file if it exist.

Parameters:
name | is a pointer on the string of the filename to be search, with possibly the indication of the path. Jockers * and ? can be used.
att | is a bit mask representing the File attributes of the fiel to seek, according to GEMDOS rule.
Returns:
The function returns the size of the file (in bytes) of the first found occurrence, FALSE if it does not find of it (or if the file as a null size).

If a particular file exists, turns over its size, if not turns over FALSE (0).

Note:
If the file is a folder, the function turns over TRUE or FALSE.

Definition at line 51 of file BIG2DIVR.C.

void extension | ( | char * | filename,
 |  | char * | ext
 | ) |  |

Forces a specific extension on file or path name.

Parameters:
filename | Pointer on the filename or the full path.
ext | Extension. Pointer on the extension to be imposed. The extension must be transmitted with the point, for example .DOC. It is possible to transmit an empty string ("") to remove the extension.

This function imposes an extension to a file name or an access path

Note:
This function is extremely practical for example to be certain that a file will be saved with a precise extension. After data entry of the file name in a selector by the user, this function can be systematically invited so as to force file extension.
It can also be useful in the case of a program managing a series of files placed in the same path and all of the same name, of which only the extension changes (typical case of the databases). Before each access to a file, the desired extension is imposed.

Definition at line 351 of file BIG2DIVR.C.

void fill_tab | ( | int * | pxy,
 |  | int | n,
 |  |  | ...
 | ) |  |

First Cookie of the cookie jar.

Parameters:
pxy | Start address of the table.
n | number of elements of the table. The following parameters, of number N, are the values to be placed successively in the elements of the table. They are imperatively of int type.

This function fills a table with integers.

Definition at line 465 of file BIG2DIVR.C.

char* path ( char * pat )

Get the default path of the application.

Parameters:
pat is a pointer on a string which will contain in return the default path. It must be of sufficient size.
Returns:
A pointer on the string.

This function returns the path by default of the application (the path where to seek the resource and the setup file, by example).

Note:
the function places the path in the variable of return "pat", and returns a pointer on this string. This function exists for reasons of compatibilities with the old versions of BIG. From now on, the path of the application is in the variable pathapp.

Definition at line 25 of file BIG2DIVR.C.

int rc_intersect | ( | GRECT * | p1,
 |  | GRECT * | p2
 | ) |  |

Find common zone between two areas of screen.

Parameters:
p1 | Structure GRECT describing the coordinates of the first of both zones.
p2 | Structure GRECT describing the coordinates of the second of both zones. The data of this structure will be modified by the function.
Returns:
Zero if there is no common part, non null value if there is one of them.

Find if there is a common part between two zones of the screen.

Note:
the common part between the two areas is described after the call in the parameter p2 which is used as variable of return. Values which were there are lost. This function is used for the processing of the redraw messages, where it is necessary to determine if the working area of a given window is in the zone to be redrawn. Under Lattice C, the function becomes brc_intersect().

Definition at line 208 of file BIG2DIVR.C.

int selector | ( | char * | pat,
 |  | char * | ext,
 |  | char * | file,
 |  | char * | title
 | ) |  |

Call GEM File selector.

Parameters:
pat | Pointer on a string indicating the access path to be opened in the selector, without the extension to be filtered. After the function, points on the path chosen in the selector (the string can be rather long).
ext | Extension (or file names) to filter in selector. Jockers * and ? are authorized. For example "\*.DOC" or "\BIG*.*".
file | Pointer on a string containing the filename to preselect in the selector, or empty string if there is no default file. After the function, the string (which must be enough long) contains the selected filename.
title | Pointer on the string to be displayed in the selector of object, starting from the TOS 1.4.
Returns:
TRUE if the selector is left with button OK, FALSE if it is left with the cancel button.

This function calls and manages the selector of GEM objects.

Note:
The function tests the model number of the TOS and carries out a call to fsel_input() (TOS former to 1.4) or fsel_exinput() (TOS 1.4 or more). Like the GEM function, selector() returns 0 if Cancels were selected.
  • If the selector is called to choose a file, it is necessary to test:
        if (selector(path, ext, name, title) == TRUE && strlen(name))
    In order to check that the button OK was clicked and that a file name indeed was selected (the user could confirm without choosing file).
  • If the selector is only called to require of the user a path (the filename does not have importance in this case), it is enough to test:
        if(selector(path, "\*.*", name, title) == TRUE)
The main difference between this function and the direct call of the GEM function is that the access path returned by this function after the call is stripped from the extension filter. For example, to reach the file chosen by the user, it is enough to concatenate the two strings by strcat(path, name); to obtain its full path in path.

Definition at line 311 of file BIG2DIVR.C.

void send_mesag | ( | int | type,
 |  | int | wi,
 |  | int | x,
 |  | int | y,
 |  | int | w,
 |  | int | h
 | ) |  |

Send message to itself.

Parameters:
type | Type of event (GEM or BIG). It will be placed in word 0 of the buffer of event.
wi | Will be placed in word 3 of the buffer. Often, it is the GEM handle of a window.
x | will be placed in word 4 of the buffer. Often, it is a X coordinate.
y | Will be placed in word 5 of the buffer. Often, it is a Y coordinate.
w | will be placed in word 6 of the buffer. Often, it is a width of area.
h | will be placed in word 7 of the buffer. Often, it is a height of area.

This function makes it possible the application to be sent to itself a message, so as to simulate an event.

Note:
It is sometimes very useful to be sent to oneself messages, to generate a redraw for example.

Definition at line 263 of file BIG2DIVR.C.

void set_palette ( int index )

New value for the pallet.

Parameters:
index is BIG Index of the window which has the address of the new pallets in its structure. If "-1" is transmitted for the index, the default pallet is restored.

This function fixes new values for the palette.

Note:
You can call this function directly, for example to restore the default pallet at the request of the user.

Definition at line 102 of file BIG2DIVR.C.

long timer ( void )

New value for the pallet.

Returns:
Value of the timer.

This function returns the value of the 200Hz timer at the time when it is called.

Note:
This function is very useful to be used for example as countdown or to measure time intervals.

Definition at line 145 of file BIG2DIVR.C.

char* trim ( char * str )

Trim tab/spaces at begin/end of a string.

Parameters:
str Pointer on the string to be processed.
Returns:
Pointer on the position of the string in memory.

This function eliminates spaces and the tabulations from beginning and end of a string. The transmitted string is modified in memory, and a pointer indicating location is returned by the function.

Definition at line 179 of file BIG2DIVR.C.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG Cookie Functions

BIG Cookie Functions
[The BIG Functions Library]

BIG Cookie Functions. More...

Functions

COOKIE * | first_cookie (void)
First Cookie of the cookie jar.
COOKIE * | next_cookie (COOKIE *ck)
Next Cookie of the cookie jar.
COOKIE * | vq_cookie (long id)
Query for a Cookie by id.
COOKIE * | vq_cookie_c (char *c)
Query for a Cookie by name.

Detailed Description

BIG Cookie Functions.

Function Documentation

COOKIE* first_cookie ( void )

First Cookie of the cookie jar.

Returns:
Pointer on the Cookie

This function returns a pointer on first Cookie of the cookie jar, or a null pointer if there is not.

Definition at line 374 of file BIG2DIVR.C.

COOKIE* next_cookie ( COOKIE * ck )

Next Cookie of the cookie jar.

Returns:
Pointer on the Cookie

This function returns a pointer on next Cookie of the cookie jar, or a null pointer if there is no more.

Note:
This function is used in collaboration with first_cookie().

Definition at line 403 of file BIG2DIVR.C.

COOKIE* vq_cookie ( long id )

Query for a Cookie by id.

Parameters:
id Pointer on the preceding cookie
Returns:
Pointer on Cookie.

This function seeks a Cookie with a given identifier id, and returns a pointer on this Cookie, or a null pointer if it is not found.

Note:
This function uses first_cookie() and next_cookie().

Definition at line 420 of file BIG2DIVR.C.

COOKIE* vq_cookie_c ( char * c )

Query for a Cookie by name.

Parameters:
c Pointer on the character string who definite the cookie.
Returns:
Pointer on Cookie.

This function seeks Cookie with a given identifier name, and returns a pointer on this Cookie, or a null pointer if it is not found.

Note:
This function uses vq_cookie().

Definition at line 444 of file BIG2DIVR.C.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG Windows Function

BIG Windows Function
[The BIG Functions Library]

BIG Windows Function. More...

Functions

int | formw_draw (OBJECT *adr, int index, int title, int infos, int wed, int attr, FNCP ricn)
Open a Form in Window.
int | open_window (int index, int type, int attr, int x, int y, int w, int h, int wmi, int hmi, int wma, int hma, int wu, int hu, int flags, int fmouse, FNCP ricn, FNCP redr, FNCP clos, char *title, char *info, long wt, long ht, int fmenu, int ftool, int bar, int pattern, int colorp)
Create and open a Window.
int | find_index (int wh)
Find the BIG index of a window by its GEM Handle.
int | find_window (int mx, int my)
Find if the working area of a window is at a given location.
void | zone_work (int index, int *xw, int *yw, int *ww, int *hw)
Get work area position.
void | height_sliders (int index, int fredraw)
Compute size and position of a window sliders.
void | posi_vert (int index, int fredraw)
Compute the position of a window vertical slider.
void | posi_hori (int index, int fredraw)
Compute the position of a window horizontal slider.
void | height_vert (int index, int fredraw)
Compute the size of a window vertical slider.
void | height_hori (int index, int fredraw)
Compute the size of a window horizontal slider.
void | draw_object (int object, int index)
Redraw the visible part of an object belonging to a form.
void | print_page (int index)
Redraw the visible part of an object belonging to a form.
void | next_wind (void)
Bring to front the next window.
void | closed (void)
Close and destroy window.
void | iconise (int index)
Iconify a window.
void | uniconise (int index)
Deiconify a Window.
void | alliconise (int index)
Iconyfy all open windows.
void | set_work (int index, int pattern, int colorp)
Set pattern and color of window working area.
void | set_windows (int mtxt_mover, int ctxt_mover, int spat_mover, int cpat_mover, int ctxt_info, int spat_velev, int cpat_velev, int spat_helev, int cpat_helev, int spat_vslid, int cpat_vslid, int spat_hslid, int cpat_hslid, int cpat_gadgt, int cicn_gadgt)
Modify window display parameters.
void | bwind_calc (int request, int kind, int tree, OBJECT *adrb, int xd, int yd, int wd, int hd, int *x, int *y, int *w, int *h)
Equivalent to GEM wind_calc().
void | draw_title (int index)
Redraw the title bar.

Detailed Description

BIG Windows Function.

Function Documentation

void alliconise ( int index )

Iconyfy all open windows.

Parameters:
index BIG Index of the main window, that must be iconified and represent also the others.

This function iconify all the open windows in only one iconified window.

Note:
This function is automatically called by BIG at the time of a Control-click on the SMALLER. However, it can happen that one wishes to iconify all open window at another time. In this case, this function must be called by the program. See the chapter the iconisation of the windows for more details.

Definition at line 1110 of file BIG2EVTW.C.

void bwind_calc | ( | int | request,
 |  | int | attr,
 |  | int | tree,
 |  | OBJECT * | adrb,
 |  | int | xd,
 |  | int | yd,
 |  | int | wd,
 |  | int | hd,
 |  | int * | x,
 |  | int * | y,
 |  | int * | w,
 |  | int * | h
 | ) |  |

Equivalent to GEM wind_calc().

Parameters:
request | If 0 (WC_BORDER), the function receive the coordinates of the working area of a window of type "kind" and returns that of the window frame. If 1 (WC_WORK), it is the opposite.
attr | Attributes of the window (bit mask).
tree | If the window contains a menu bar or a toolbar, tree number of the menu or toolbar. It is also possible to transmit directly the address of the tree structure (see following parameter). In this case, the parameter tree must be equal to -1 (BLANK).
adrb | Address of the menu bar or the toolbar if there is one and if the preceding parameter (tree) is equal to "-1". If tree is significant, adrb must be null. If the window has neither menu, nor toolbar, the parameter tree must imperatively be with "-1" and adrb imperatively with zero.
xd | x coordinate of the area to "convert"
yd | y coordinate of the area to "convert",
wd | width of the area to "convert"
hd | height of the area to "convert"
x | x coordinate of the "converted" area
y | y coordinate of the "converted" area
w | width of the "converted" area
h | height of the "converted" area

This function is the equivalent of the GEM function wind_calc(), adapted to BIG windows. It receives in parameters either the total coordinates of the window, or the coordinates of the working area, and provides the others in return.

Note:
Under BIG, it is formally forbidden to use the GEM function wind_calc(). This one should absolutely be used. By working area, it is necessary to include understand zone of display, i.e. put aside the element of the window (sliders, buttons, etc), but also to put aside the menu or the toolbar if it there one.

Definition at line 1385 of file BIG2WINB.C.

void closed ( void )

Close and destroy window.

This function closes a window and destroys it from the point of view of GEM.

Note:
the element win[index].w_hg of the BigWind structure is put at 0 to indicate that the window has already been opened, but that it is currently closed. If the window contained a form, the storage area reserved for the backup of its state is released. If it had a menu, the storage area reserved for the construction of this menu is released. If it had a toolbar, the pointer w_bar is cancelled. This function seeks in word 3 of the buffer of events (global variable buf) the GEM handle of the window to be closed, which explains that no parameter is neeeded. However, If you have a window containing some text for example, you will have to undoubtedly create a function for closing of window and to affect it as pointer on function with the element w_close of the BigWind structure of this window, so that your function releases the storage area reserved for the text. It is strongly recommended that your function calls itself the function closed(), but you will have before this call to put the GEM handle of the window in word 3 of the buffer of events:
    buf[3] = win[index].w_hg;
    closed();

Definition at line 204 of file BIG2EVTW.C.

void draw_object | ( | int | object,
 |  | int | index
 | ) |  |

Redraw the visible part of an object belonging to a form.

Parameters:
object | Object number to be drawn.
index | BIG Index of the window which contains the form, the toolbar or the menu
Returns:
Nothing

Draws an object belonging to a form, a toolbar or a menu in window, by drawing only the visible part.

Note:
This function is used like the GEM function objc_draw(), but only for the forms, toolbars or menus in window. It makes it possible to draw an object which could be partially out of the window or the screen, or which is covered by another window.

Definition at line 1709 of file BIG2WIND.C.

void draw_title ( int index )

Redraw the title bar.

Parameters:
index BIG Index of the window.
Returns:
Nothing

This function redraws the bar of title of a window, and only the bar of title.

Note:
If one wishes to change the title of a window, it is necessary to make the element w_title of a window point towards the new text (or modify the old one), then to call this function so that the display is updated.

Definition at line 1476 of file BIG2WINB.C.

int find_index ( int wh )

Find the BIG index of a window by its GEM Handle.

Parameters:
wh Window GEM Handle of the window to search. If it is -1, the function seeks first index BIG available.
Returns:
The function returns the BIG index of the window, or -1 if no correspondence is not found.

This function search the BIG index of a window from its GEM handle.

Note:
By transmitting "-1" (BLANK) as a parameter, one obtains in return the first free BIG index, i.e. the first window having never yet been opened, or -1 if it they it have all be. This functionality is useless in practice.

Definition at line 1391 of file BIG2WIND.C.

int find_window | ( | int | mx,
 |  | int | my
 | ) |  |

Find if the working area of a window is at a given location.

Parameters:
mx | X Coordinate of the position given.
my | Y Coordinate of the position given.
Returns:
: GEM Handle of the window whose working area include the given point FALSE if there is not.

This function seeks if the working area of a window is at a given position.

Note:
WARNING the function turns over the GEM handle, not BIGindex, and only if the coordinates correspond to the working area.

Definition at line 1429 of file BIG2WIND.C.

int formw_draw | ( | OBJECT * | adr,
 |  | int | index,
 |  | int | title,
 |  | int | infos,
 |  | int | wed,
 |  | int | attr,
 |  | FNCP | ricn
 | ) |  |

Open a Form in Window.

Parameters:
adr | Address of the form.
index | Index BIG of the window to be opened.
title | Number (in the resource) of the free string containing the window title (- 1 if there is not).
infos | Number (in the resource) of the free string containing the text of the line of information of the window (- 1 if there is not).
wed | Object number of the editable field where the cursor must be placed at the beginning of management (- 1 if there is not).
attr | Attributes of the window.
ricn | Routine of drawing of the contents of the window to be used if it is iconified. If equal to 0, it will be the normal routine which will be always used.
Returns:
: TRUE if the window was correctly creates and open, FALSE in the event of problem.

This function opens a form in window, and places the form there.

Note:
The function search to see if a button of displacement of form (B_MOVE), and hides it (HIDETREE) if it finds one of them. This for the case where the same form would be used by the program in in window or not. The programmer should not forget to make visible again this button if the form must then be displayed normally. In addition, the root box is equipped with an edge of a pixel towards the outside, and a possible attribute OUTLINED is cancelled. As all the forms are centered by default under BIG (by the function initial()), it is with this position that the working area of window will be by default. But it is possible to make it open elsewhere by modifying the position of the form before calling the function, for example with:
    adr->ob_x = new_x;
    adr->ob_y = new_y;
The management of the window by the keyboard is always activated if there is no editable field, and always cancelled if not. Let us recall that under BIG a form in window some with editable fields should not be placed in a window with sliders or box of redimensioning (see chapter Another form in window some in the guided visit).
If the window were already opened, then closed again, its old coordinates are used. The state of the form is backed up by bak_rsc() in the zone indicated by the element win[index].w_cont.w_form.w_bak.
If there are already too many opened windows, the function is given the responsability to display the corresponding alert box of the resource included in BIG. The minimum and maximum size limits of the working area of the window are obviously those of the form.

Definition at line 60 of file BIG2WIND.C.

void height_hori | ( | int | index,
 |  | int | fredraw
 | ) |  |

Compute the size of a window horizontal slider.

Parameters:
index | BIG Index of the window to be treated.
fredraw | If TRUE, the slider is redrawn, if FALSE, they are simply recomputed
Returns:
Nothing

This function calculates and fixes the size of the horizontal slider.

Note:
It is sometimes preferable to directly call this function instead of passing by height_sliders(), for example if the window does not have an vertical slider, or if its position is unchanged but its size yes. See with the function height_sliders() for explanation about the parameter fredraw

Definition at line 1565 of file BIG2WIND.C.

void height_sliders | ( | int | index,
 |  | int | fredraw
 | ) |  |

Compute size and position of a window sliders.

Parameters:
index | BIG Index of the window to be treated.
fredraw | If TRUE, the sliders are redrawn, if FALSE, they are simply recomputed
Returns:
Nothing

This function calculates and fixes the positions and the sizes of the sliders of a window.

Note:
This function carries out a simple call of the four following functions posi_vert(), posi_hori(), height_vert(), height_hori(), which can however be called separately if the needed. If the window must be entirely redrawn (by a message of redraw for example, not only the working area), it is useless to ask to redraw sliders, which would be redrawn twice. If not, it is necessary to put at TRUE the parameter fredraw, if not the new values would be done without consequence for the display.

Definition at line 1675 of file BIG2WIND.C.

void height_vert | ( | int | index,
 |  | int | fredraw
 | ) |  |

Compute the size of a window vertical slider.

Parameters:
index | BIG Index of the window to be treated.
fredraw | If TRUE, the slider is redrawn, if FALSE, they are simply recomputed
Returns:
Nothing

This function calculates and fixes the size of the vertical slider.

Note:
It is sometimes preferable to directly call this function instead of passing by height_sliders(), for example if the window does not have an horizontal slider, or if its position is unchanged but its size yes. See with the function height_sliders() for explanation about the parameter fredraw

Definition at line 1527 of file BIG2WIND.C.

void iconise ( int index )

Iconify a window.

Parameters:
index BIG Index of the window concerned.
Returns:
Nothing

This function iconify a window.

Note:
This function is automatically called by BIG at the time of a click on the SMALLER. However, it can happen that one wishes iconify one window at another time. In this case, this function must be called by the program. See the chapter the iconisation of the windows for more details.

Definition at line 883 of file BIG2EVTW.C.

void next_wind ( void )

Bring to front the next window.

This function bring to foreground the window following the currently open one.

Note:
the order of the windows is that of their indexes. This function seeks in word 3 of the buffer of event (buf[3]) the GEM handle of the window which CYCLER was clicked. The first open window following to this one is brought to the foreground. The starting window is not inevitably that in the foreground.

Definition at line 1861 of file BIG2WIND.C.

int open_window | ( | int | index,
 |  | int | type,
 |  | int | attr,
 |  | int | x,
 |  | int | y,
 |  | int | w,
 |  | int | h,
 |  | int | wmi,
 |  | int | hmi,
 |  | int | wma,
 |  | int | hma,
 |  | int | wu,
 |  | int | hu,
 |  | int | flags,
 |  | int | fmouse,
 |  | FNCP | ricn,
 |  | FNCP | redr,
 |  | FNCP | clos,
 |  | char * | title,
 |  | char * | info,
 |  | long | wt,
 |  | long | ht,
 |  | int | fmenu,
 |  | int | ftool,
 |  | int | bar,
 |  | int | pattern,
 |  | int | colorp
 | ) |  |

Create and open a Window.

Parameters:
index | Index BIG of the window to be opened.
type | type BIG of the window to be opened.
attr | GEM Attributes of the window to be opened.
x | Position in X of the upper-left angle of the window to be opened. It is about the window itself, not the working area.
y | Position in of the upper-left angle of the window to be opened there. It is about the window itself, not only the working area.
w | Width of the window to be opened. It is about the window itself, not only the working area.
h | Height of the window to be opened. It is about the window itself, not only the working area.
wmi | Width minimum which the window during its management will be able to take. It is about the window itself, not only the zone of work.
hmi | Height minimum which the window during its management will be able to take. It is about the window itself, not only the zone of work.
wma | Maximum width which the window during its management will be able to take. It is about the window itself, not only the zone of work. If -1 (BLANK) is transmitted, the maximum width will be the double of the width of the desktop.
hma | Maximum height which the window during its management will be able to take. It is about the window itself, not only the zone of work. If -1 (BLANK) is transmitted, the maximum height will be the double height of the desktop.
wu | Horizontal unit of shift of the window.
hu | Vertical unit of shift of the window.
flags | This parameter is a bit mask. See in the chapter of definitions what is said about WFARROW, WFCALAG, WFDECAL and WFGROUP. The other bits must not be modified, BIG uses them internally.
fmouse | It is the form number which the mouse pointer will take when it is brought in the working area of the window (see GEM function graf_mouse()). 0 to keep the traditional form of an arrow.
ricn | Drawing routine of the contents of the window to be used if it is iconified. If equal to 0, it will be the normal routine (the following parameter) which will be always used.
redr | Pointer on the function to execute in the event of message of redraw on this window.
clos | Pointer on the function to execute in the event of message of closing of the window.
title | Pointer on the string of the window title, or empty string if there is not.
info | Pointer on the string of the line of infos of the window, or empty string if there is not.
wt | Total width of the contents of the window, in pixels.
ht | Total height of the contents of the window, in pixels.
fmenu | TRUE if the window must comprise a bar of menu, FALSE if not.
ftool | TRUE if the window must comprise a toolbar, FALSE if not.
bar | Tree Number which is the menu or the toolbar window, -1 if there is not. A window cannot contain at the same time a menu and a toolbar. If the two parameters fmenu and ftool are TRUE, BIG gives priority with the menu.
pattern | Pattern of the working area at the opening of the window.
colorp | Color Index of the frame of the working area at the opening of the window.
Returns:
TRUE if the window were correctly created and opened, FALSE in the event of problem (too many open windows).

This function creates and opens a window.

Note:
It is the "heaviest" function in BIG, with its 25 parameters!
If the window had never be opened, the elements of its structure are initialized with default values or values which are transmitted in the parameter list. If it were already opened, then closed again, the values of certain elements are "refreshed" with the transmitted parameters, in particular maximum and minimum limits of size. If it is already opened, "refresh" is made, then it is brought to the foreground.
The parameter redr must be 0 if the window is of type WTYP_IMAG, because in this case the routines of BIG take care of the redraw automatically (see the function print_page()). In the case of other contents (text, calculated graph, etc.), the programmer must write the drawing routine and to indicate it by this parameter. The closed parameter indicates the function to be carried out at the time of closing of the window. This function cannot be always only close and to destroy the window, it must sometimes also release the reserved storage areas if there is (see the function closed()).
The pattern number of the working area correspond to those used by VDI function vsf_style(). The pattern is thus not limited with the 7 models of the AES, but can take one of the 24 pattern provided by the VDI. If colorp is null (white color), the value of pattern is ignored. On this subject, see the function set_work(). If there are already too many opened windows, the function is given the responsability to display the corresponding alert box of the resource integrated in BIG.

Definition at line 1030 of file BIG2WIND.C.

void posi_hori | ( | int | index,
 |  | int | fredraw
 | ) |  |

Compute the position of a window horizontal slider.

Parameters:
index | BIG Index of the window to be treated.
fredraw | If TRUE, the slider is redrawn, if FALSE, they are simply recomputed
Returns:
Nothing

This function calculates and fixes the position of the horizontal slider.

Note:
It is sometimes preferable to directly call this function instead of passing by height_sliders(), for example if the window does not have an vertical slider, or if its size is unchanged but its position yes. See with the function height_sliders() for explanation about the parameter fredraw

Definition at line 1636 of file BIG2WIND.C.

void posi_vert | ( | int | index,
 |  | int | fredraw
 | ) |  |

Compute the position of a window vertical slider.

Parameters:
index | BIG Index of the window to be treated.
fredraw | If TRUE, the slider is redrawn, if FALSE, they are simply recomputed
Returns:
Nothing

This function calculates and fixes the position of the vertical slider.

Note:
It is sometimes preferable to directly call this function instead of passing by height_sliders(), for example if the window does not have an horizontal slider, or if its size is unchanged but its position yes. See with the function height_sliders() for explanation about the parameter fredraw

Definition at line 1601 of file BIG2WIND.C.

void print_page ( int index )

Redraw the visible part of an object belonging to a form.

Parameters:
index BIG Index of the window concerned.
Returns:
Nothing

This function redraw the whole contents of a window by taking account of the parts covered by other windows, etc.

Note:
If the window is of form type, it is redrawn by means of the functions GEM. If the contents are an image, the function vro_cpyfm() (if the image has more than one plan of colors) or vrt_cpyfm() (if the image has only one plan of color) is used if an image is actually stored with the address indicated by win[index].w_cont.w_img.w_blk. If not, nothing is done, it is the bottom of the window which appears.
In the other cases, the function calls the display routine indicated by the pointer on function win[index].w_redraw.
This function does not generate an artificial redraw message, it directly requires the list of the rectangles of this window (which is permanently available, it is enough to require it from GEM). It should be called only if a message of redraw is not sent, if not it window would be drawn twice.
This function redraws only the working area of the window, from the point of view of BIG, i.e. the menu or the toolbar is ignored if it there is one. If you wish to redraw ALL the window, it is necessary to use the function send_mesag() while asking it to send a message of redraw (WM_REDRAW) for this window (win[index].w_hg), with the coordinates given by win[index].w_curr.

Definition at line 1823 of file BIG2WIND.C.

void set_windows | ( | int | mtxt_mover,
 |  | int | ctxt_mover,
 |  | int | spat_mover,
 |  | int | cpat_mover,
 |  | int | ctxt_info,
 |  | int | spat_velev,
 |  | int | cpat_velev,
 |  | int | spat_helev,
 |  | int | cpat_helev,
 |  | int | spat_hslid,
 |  | int | cpat_hslid,
 |  | int | spat_vslid,
 |  | int | cpat_vslid,
 |  | int | cpat_gadgt,
 |  | int | cicn_gadgt
 | ) |  |

Modify window display parameters.

Parameters:
mtxt_mover Writing Mode of the title bar when the window is in the foreground:

  • Opaque (MD_REPLACE, 1),
  • Transparency (MD_TRANS, 2),
  • Xor (MD_XOR, 3) or
  • Opposite transparency (MD_ERASE, 4).
ctxt_mover | Color Index of the displacement bar.
spat_mover | Pattern Number of the displacement bar when the window is in the foreground (no pattern when it is in background).
cpat_mover | Color index of the displacement bar when the window is in the foreground (always white when it is in background).
ctxt_info | Color of the text of the infos line.
spat_velev | Pattern number of the vertical slider.
cpat_velev | Color index of the frame of the vertical slider.
spat_helev | Pattern number of the horizontal slider.
cpat_helev | Color index of the frame of the horizontal slider.
spat_hslid | Pattern number of the vertical slider.
cpat_hslid | Color index of the vertical slider.
spat_vslid | Pattern number of the horizontal slider.
cpat_vslid | Color index of the horizontal slider.
cpat_gadgt | Pattern Number of button frame.
cicn_gadgt | Color index of the icon of the buttons.

This function makes it possible to modify certain parameters concerning the aspect of BIG windows.

Note:
If "-1" is transmitted to an element, the corresponding adjustment is unchanged. By default,
  • if the system has less than 16 colors, the adjustments are:
    • for the bar of displacement, the mode of writing is Opaque,
    • the colors of text and frame are black, the pattern is number 2.
    • The frame of the two sliders is the number 1, its black color.
    • Same for the frame of the sliders, but the color is white.
    • The buttons frame is white, the icon is black.
  • If the system has 16 colors or more, the adjustments are modified as:
    • the two sliders and the buttons frame are in 100% pattern and in gray (color number 8), in order to to give an impression of relief.
  • Whatever the number of colors, the pattern of the buttons is ALWAYS 100%.
  • If the color of a frame is white, the parameter of pattern for frame is ignored at the time of the drawing of the corresponding object.
The numbers of pattern correspond to those used by function VDI vsf_style(). The reason for pattern is that we are not limited to the 7 patterns of the AES, but we can use one of the 24 reasons proposed by the VDI. The adjustments affect all the windows of the application.
The function tests if there is at the time of the call some the window-forms, or windows with toolbar, open. If it finds some, these windows are entirely redrawn to bring up to date the new adjustments. Therefore, this function should never be called when the GEM is "freezed" by one blocking form of some sort.

Definition at line 1311 of file BIG2WINB.C.

void set_work | ( | int | index,
 |  | int | pattern,
 |  | int | colorp
 | ) |  |

Set pattern and color of window working area.

Parameters:
index | BIG Index of the window.
pattern | Number of the pattern.
colorp | Index of color.

This function is used to set the pattern and the color of the working area of a window.

Note:
the numbers of pattern corresponds to those used by function VDI vsf_style(). The pattern is thus not limited to the 7 models of the AES, but can take one of the 24 pattern provided by the VDI. If colorp is null (white color), the value of pattern is ignored. The working area of windows BIG is always opaque. That exempts to have each time to clear it as one must do it systematically with the traditional GEM windows, and thus allows to choose directly a pattern and a color in the situations where that is desirable. This function acts only on one already open window. Its working area then is automatically redrawn. To fix the parameters of one window at the time of its opening, see the function open_window().

Definition at line 1235 of file BIG2WINB.C.

void uniconise ( int index )

Deiconify a Window.

Parameters:
index BIG Index of the window concerned.
Returns:
Nothing

This function Deiconify a window and restore its former size, position, and attributes.

Note:
This function is automatically called by BIG when one requests to deiconify a window (double-click on the iconified window). However, it can happen that one wishes to deiconify a window at another time. In this case, this function must be called by the program. See the chapter the iconisation of the windows for more details.

Definition at line 955 of file BIG2EVTW.C.

void zone_work | ( | int | index,
 |  | int * | xw,
 |  | int * | yw,
 |  | int * | ww,
 |  | int * | hw
 | ) |  |

Get work area position.

Parameters:
index | BIG Index of the window.
xw | Returned value of the x coordinate of the window working area
yw | Returned value of the y coordinate of the window working area
ww | Returned value of the width of the window working area
hw | Returned value of the heigth of the window working area

This function indicates the coordinates of the working area of a window, whatever its attributes and its type.

Note:
If the window has a pull-down menu or a toolbar, the returned coordinates represents only the working area itself, without the menu or the toolbar. Under BIG, it is obligatory to use this function systematically, and not the GEM function wind_get(WF_WORKXYWH), which would give the same values as the total coordinates of the window.

Definition at line 1465 of file BIG2WIND.C.

Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Structures

  • Data Fields

Data Structures

Here are the data structures with brief descriptions:
BigWind
Cont
COOKIE
Form
Obj_user
Oldw
t_desktop
t_display
t_ident_hard_soft
t_image_dial
Win_user
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BigWind Struct Reference

  • Data Fields

BigWind Struct Reference
[The BIG Defined Types]

#include <BIG2.H>

Data Fields

int | w_hg
int | w_type
int | w_attr
GRECT | w_curr
Oldw w_old
int | w_wmini
int | w_hmini
int | w_wmaxi
int | w_hmaxi
int | w_wunit
int | w_hunit
int | w_hprot
int | w_vprot
Cont w_cont
Palette * w_pal
OBJECT * | w_bar
OBJECT | w_fen [NGAD]
int | w_flags
int | w_mouse
int | w_icon
FNCP w_redicn
FNCP w_cycle
FNCP w_redraw
FNCP w_top
FNCP w_close
FNCP w_move
FNCP w_size
FNCP w_full
FNCP w_hslid
FNCP w_vslid
FNCP w_uppage
FNCP w_dnpage
FNCP w_lfpage
FNCP w_rtpage
FNCP w_upline
FNCP w_dnline
FNCP w_lfline
FNCP w_rtline
char * | w_title
char * | w_infos
long | w_wtot
long | w_htot
long | w_lin
long | w_col

Detailed Description

Definition of BIG Windows

Definition at line 301 of file BIG2.H.

Field Documentation

int w_attr

GEM Window attribute

They are the GEM attributes of the window (slider, mover, etc) that one indicates to the function wind_create(). Several sets of attributes are predefined by BIG to simplify work:

  • WATR_ALLG All the attributes GEM are activated.
  • WATR_ALLB All attributes BIG are activated, i.e. really all.
  • WATR_CURRG Most common (current) GEM attributes.
  • WATR_CURRB Most common (current) BIG attributes
  • WATR_FORMG Most common GEM Form attributes.
  • WATR_FORMB Most common BIG Form attributes.

ALL means all the attributes, CURR the most common attributes (all except the lines of information), and FORM for the windowed form (NAME, CLOSER and MOVER). The 'G' means that the attributes are limited to those of GEM, the 'B' means that they also include the extended attributes of BIG. WATR_CURRB is the default value at initialization.

Definition at line 304 of file BIG2.H.

OBJECT * w_bar

window with menu/toolbar => tree address

If the window contains a menu bar or a toolbar, this is the addresses of the tree of this menu.

Definition at line 317 of file BIG2.H.

FNCP w_close

Funct. pointer close win

Pointer on the routine for closing a window. At initialization, it points on the function closed() which closes the window and requires of GEM to forget its existence (but BIG has more memory). However, it will be necessary in certain cases that the programmer writes this function in order to release if necessary the occupied storage area for example by the text of the window.

Definition at line 326 of file BIG2.H.

long w_col

window first column

Represents (in pixels) the first line to be displayed in the upper left corner of the working area of the window, compared to the overall contents w_htot

See also:
w_lin

Definition at line 345 of file BIG2.H.

Cont w_cont

vary according to window content

Content of window. Fixed at "0L" at init time, this element is in fact a Cont union. It depends on what is displayed in the window. The elements of this union are:

  • Form w_form Form. If the window contains a form, w_cont is a structure Form, defined by BIG. Here is description:
    • OBJECT* w_tree: Address of the form.
    • int w_edit If the form contains one (or several) editable field(s), number of object of the field where the cursor is. -1 if not.
    • int w_pos If the form contains one (or several) editable fields position of the cursor in the current field. -1 if not. char* w_bak: BIG is able to manage the buttons 'Confirm', 'Cancel', 'Apply' and 'Reset' of forms, by restoring the state of the form in the event of cancellation or reset. This pointer indicates the buffer of backup state for the form.
  • MFDB w_img 'Image'. If the window contains an image, w_cont is MFDB. The MFDB (Memory Form Block Definition) is a standardized VDI structure, which contains all the necessary informations with the management of an image (its address, its dimensions, etc). Thanks to this standardization, BIG can deal completely with the display of the image in the window, without intervention of the program itself.
  • char* w_adr: If the window contains neither an image, nor a form (it then contains probably text or a calculated graphics), this element is a pointer on char which indicates the beginning of the storage area where the data (the text) are stored. The display routine of this window will be able to then find them directly, whatever is the current window.

Definition at line 315 of file BIG2.H.

GRECT w_curr

window current coordinates

Coordinated and current dimensions of the window. This information is updated with each change of size or position of the window. At initialization the value is: {0,0,100,100}

Definition at line 305 of file BIG2.H.

FNCP w_cycle

Funct. pointer display next window

Pointer on the routine to bring in the fron the following window. At initialization, it points on the function next_wind().

Definition at line 323 of file BIG2.H.

FNCP w_dnline

Funct. pointer one line down

Pointers on the functions to be carried out in case of event of slider, i.e. a request for shifting per line toward the bottom side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization it points to dnline(). This functions move the contents of the window by the step size noted in the element and 'w_hunit'.

See also:
w_upline, w_dnline, w_lfline, w_rtline

Definition at line 337 of file BIG2.H.

FNCP w_dnpage

Funct. pointer one page down

Pointers on the functions to be carried out in case of event of slider, i.e. a request for shifting per page toward the bottom side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization it points to dnpage(). This functions move the contents of the window by the height of the window working area.

See also:
w_uppage, w_dnpage, w_lfpage, w_rtpage

Definition at line 333 of file BIG2.H.

OBJECT w_fen[NGAD]

windowed form

It is in this zone of NGAD OBJECT strctures that the 'window-form' of BIG windows is copied. Indeed, it consists of NGAD objects, and each window has its own, with characteristics which its specific to this window (for example, certain objects could be hidden if the window does not have the corresponding attribute. Normally, the programmer does not need to modify nor even read the information placed in this element of BigWind. The functions of BIG take care of everything, some are precisely intended to modify the data in this element (the color of an object, for example).

Definition at line 318 of file BIG2.H.

int w_flags

BIG Windows Flags

This element is a bit mask. Flags description:

  • Bit 0 WFFULL (Window flag FULL): is set if the window currently has its maximum size (full opening).
  • Bit 1 WFARROW (Window Flag ARROW): is set if the window must be handled starting from the keyboard. The arrow keys correspond to the arrows of the windows, and the <Shift + arrow> correspond to the scroller. <Esc> opens the window with its maximum size or that of the screen, or brings back it to its preceding size. Moreover, if the window is of type WTYP_NORM, <Clr> brings the display on the first line and <Shift + Clr> on the last (less the height of the window).
  • Bit 2 WFCALAG (Window Flag Position): When set indicates that the width and the height of the working area of the window must always be multiples of the units of shift. In the same way for the positioning of the contents of the window at the time of a Slider event.
  • Bit 3 WFDECAL (Window Flag Shift): Necessary by the presence of new Sizers. If it is not set, the part of the contents displayed from the upper-left angle of the working area of the window will not be modified, even in the event of redimensioning by Upper Left Sizer. If the bit is set, the displayed part will be possibly be updated. By example, if you reduce the height of the window of 50 pixels by means of the Upper Right Sizer, the contents of the window will remain with the same 'virtual' position, and thus the display will begin 50 lower pixels. If the bit is not set, the display will always start at the same place.
  • Bit 4 WFGROUP (Window Flag Grouping arrows) If this bit is set, the four arrows of the window will be grouped in the lower right angle. This flag must never be put for a window form.
  • Bit 5: reserved
  • Bit 6: reserved
  • Bit 7: WLAST (Window LAST) It is used by BIG to know if the window is the last of those which were declared (NEVER modify this bit).

At initialization only WFARROW is set.
The low-order byte of this word is entirely used or reserved for possible future extensions of BIG. On the other hand, the most significant byte is not used, nor not even tested. You are thus free to use it with your own way if the windows of your program need other flags.

Definition at line 319 of file BIG2.H.

FNCP w_full

Funct. pointer full size win

  • FNCP w_full Pointer on the function which gives to the window its maximum size, or brings back it to the preceding ones if it is already to the maximum. This maximum size is possibly limited in the case of a window image or form to the dimensions of this image or this form. The new coordinates are transmitted to GEM. At initialization, points on the function fulled() or full_form() in the case of a window form.

Definition at line 329 of file BIG2.H.

int w_hg

GEM Handle: positive=GEM, -1=init, 0=closed

To access a window, BIG uses naturally the GEM calls. It is thus essential to preserve somewhere the GEM handle of this window. At initialization, this element contains -1. This indicates that the window has never been opened. As soon as it is created and opened, it contains the GEM Handle for this window. But when it is closed, its value is not set back to -1 but to 0, which indicates that it was created, then destroyed by the GEM, but that it always exists for BIG. The values contained in the other elements of the structure are therefore not anymore the default values, but they containts the last parameters of the window, which will be used if the creation of this window is requested again to GEM.

Definition at line 302 of file BIG2.H.

int w_hmaxi

maximum Height

Maximum Height of the window working area. If one tries to dimension it with higher value, BIG take this maximums. Calculation takes into account of the possible presence of a menu or of a toolbar in the window. If the window is of type image (WTYP_PICT), dimensions of the image become then the maximum dimensions of the window.

See also:
w_hmini w_wmini w_wmaxi w_hmaxi

Definition at line 310 of file BIG2.H.

int w_hmini

minimum Height

Minimun Heigth of the window working area. If one tries to dimension the heigth of a window with lower values, BIG takes this minimum. Calculation takes into account the possible presence of a menu or of a toolbar in the window.

See also:
w_hmini w_wmini w_wmaxi w_hmaxi

Definition at line 308 of file BIG2.H.

int w_hprot

number of protected points on left

Horizontal Protection. Gives the number of pixels which will be "protected" on the top of the working area. The events of displacement of a line toward the top or bottom will not affect this part of the display, which remains thus protected. That allows, for example if columns of informationare are displayed, to preserve in top of the window the titles of these columns even if one moves vertically. This element is fixed at 0 with initialization. It is the programmer who must, if necessary, to place here other value.

See also:
w_vprot

Definition at line 313 of file BIG2.H.

FNCP w_hslid

Funct. pointer slider horizontal

Pointers on the function to be carried out in the event of displacement of a horizontal slider box. The function carries out the tests necessary, transmits information to GEM and records it. At initialization, point respectively on hslid()

See also:
w_vslid

Definition at line 330 of file BIG2.H.

long w_htot

max window content Height (in pixels)

This element contain the height of the window, in pixels. For an image, that corresponds to dimensions of this image. For text, the height would represent the maximum number of a line multiplied by the height of a cell of character. Initialized to 0.

See also:
w_wtot

Definition at line 343 of file BIG2.H.

int w_hunit

vertical shift unit

Vertical shift units of the window, in pixels. At the time of a click on one of the scroll arrows, the contents are shifted in the required direction by this value. For text, it would be respectively the width of a cell of character. At initialization: 1

See also:
w_wunit

Definition at line 312 of file BIG2.H.

int w_icon

iconification : associated window index

If the window is normal, this element contains '- 1'. If it is iconified, it contains index of the associated BIG window. That mean that if the window was iconified alone, it is its own index, but if it belongs to a group of iconified windows in only one icon, it is the index of the main window, the one which was actually iconified, the others being temporarily invisible. At the time of desiconification, BIG will seek all the currently closed windows whose this element is the index of the one asked for the desiconification, and it will reopen them.

Definition at line 321 of file BIG2.H.

char * w_infos

window info pointer

0 at initialization.

Definition at line 341 of file BIG2.H.

FNCP w_lfline

Funct. pointer one line left

Pointers on the functions to be carried out in case of event of slider, i.e. a request for shifting per line toward the left side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization it points to lfline(). This functions move the contents of the window by the step size noted in the element and 'w_wunit'.

See also:
w_upline, w_dnline, w_lfline, w_rtline

Definition at line 338 of file BIG2.H.

FNCP w_lfpage

Funct. pointer one page left

Pointers on the functions to be carried out in case of event of slider, i.e. a request for shifting per page toward the left side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization, points to lfpage(). This functions move the contents of the window by the width of the window working area.

See also:
w_uppage, w_dnpage, w_lfpage, w_rtpage

Definition at line 334 of file BIG2.H.

long w_lin

window first line

Represents (in pixels) the first column to be displayed in the upper left corner of the working area of the window, compared to the overall contents w_wtot

See also:
w_col

Definition at line 344 of file BIG2.H.

int w_mouse

mouse pointer shape in the window

If this element is equal to zero (value at initialization), the mouse will always have the traditional shape of an arrow. If not, the value is interpreted as the AES number of the shape which the mouse must take in the working area of the window (when the window is in front).

Definition at line 320 of file BIG2.H.

FNCP w_move

Funct. pointer move win

  • FNCP w_move Pointeur on a routine which informs GEM that the window was moved, and which records its new coordinates. At initialization point to the function moved().

Definition at line 327 of file BIG2.H.

Oldw w_old

coordinate before iconification

Recording of the coordinates and the attributes of a window before iconification, in order to restore them at the time of desiconification.

Definition at line 306 of file BIG2.H.

Pallet * w_pal

Pointer to the associated pallet

This element is a pointer on a buffer zone of N time 3 int. 'N' being the number of displayable colors. Each of the 3 words defines values of red, green and blue of the color. Thus, it is possible to associate a palette with each window. That is almost essential for the window of images, but can prove to be useful for other windows. If this element is ZERO, BIG activates the default pallets. Set to ZERO at initialization.

Definition at line 316 of file BIG2.H.

FNCP w_redicn

Funct. pointer redraw if win iconified

Pointer on a routine for redrawing the contents of the window which is used only if the window is iconified. If it contains 0L, it is the normal routine which is used. Initialized with 0L.

Definition at line 322 of file BIG2.H.

FNCP w_redraw

Funct. pointer win redraw

Pointer on the redraw routine of the window. Initialized with 0L. This pointer is necessary only if the window contains another thing that an image or a form, because in these case BIG takes care of the redraw. If there are 'protected' zones in the top or on the left of the display (or both), it is necessary to take this in account in the routine. It must display the contents of the protected zone(s) independently of the display itself.

Definition at line 324 of file BIG2.H.

FNCP w_rtline

Funct. pointer one line right

Pointers on the functions to be carried out in case of event of slider, i.e. a request for shifting per line toward the right side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization it points to rtline(). This functions move the contents of the window by the step size noted in the element and 'w_wunit'.

See also:
w_upline, w_dnline, w_lfline, w_rtline

Definition at line 339 of file BIG2.H.

FNCP w_rtpage

Funct. pointer one page right

Pointers on the functions to be carried out in case of event of slider, i.e. a request for shifting per page toward the right side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization it points to rtpage(). This functions move the contents of the window by the width of the window working area.

See also:
w_uppage, w_dnpage, w_lfpage, w_rtpage

Definition at line 335 of file BIG2.H.

FNCP w_size

Funct. pointer resize win

  • FNCP w_size Pointeur on a routine which informs GEM that the window was resized, and which records its new coordinates. Point at initialization on the function sized()or size_form() in the case of a window form. See in the chapter of the guided visit what was said as in connection with the histograms window.

Definition at line 328 of file BIG2.H.

char * w_title

window title pointer

0 at initialization.

Definition at line 340 of file BIG2.H.

FNCP w_top

Funct. pointer bring win to top

Definition at line 325 of file BIG2.H.

int w_type

BIG type of windows

This is the type of windows from a BIG perspective. Big defines the following types:

  • WTYP_NORM The window is "normal" contains probably text.
  • WTYP_PICT The window contains an image.
  • WTYP_FORM The window contains a form.
  • WTYP_TOOL The window contains a toolbar.
  • WTYP_MENU The window contains a menu.

A window cannot have at the same time a toolbar and a menu. BIG does not check, but gives the priority to the menu. WTYP_NORM is the default type at initialization

Definition at line 303 of file BIG2.H.

FNCP w_upline

Funct. pointer one line up

Pointers on the functions to be carried out in case of event of slider, i.e. a request for shifting per line toward the top side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization it points to upline(). This functions move the contents of the window by the step size noted in the element and 'w_hunit'.

See also:
w_upline, w_dnline, w_lfline, w_rtline

Definition at line 336 of file BIG2.H.

FNCP w_uppage

Funct. pointer one page up

Pointers on the functions to be carried out in case of event of slider, i.e. a request for shifting per page toward the top side. The function carries out the tests necessary, transmits information to GEM and records it. At initialization it points to uppage(). This functions move the contents of the window by the height of the window working area.

See also:
w_uppage, w_dnpage, w_lfpage, w_rtpage

Definition at line 332 of file BIG2.H.

int w_vprot

number of protected points on top

Vertical Protection. Gives the number of pixels which will be "protected" on the left of the working area. The events of displacement of a line toward the left or right side will not affect this part of the display, which remains thus protected. That allows, for example if lines of informationare are displayed, to preserve in the left of the window the titles of these lines even if one moves horizontally. This element is fixed at 0 with initialization. It is the programmer who must, if necessary, to place there other value.

See also:
w_hprot

Definition at line 314 of file BIG2.H.

FNCP w_vslid

Funct. pointer slider vertical

Pointers on the function to be carried out in the event of displacement of a vertical slider box. The function carries out the tests necessary, transmits information to GEM and records it. At initialization, point respectively on vslid()

See also:
w_hslid

Definition at line 331 of file BIG2.H.

int w_wmaxi

maximum width

Maximum Width of the window working area. If one tries to dimension it with higher value, BIG take this maximums. Calculation takes into account of the possible presence of a menu or of a toolbar in the window. Do not place objects in the toolbar on the right of the maximum width of the window! If the window is of type image (WTYP_PICT), dimensions of the image become then the maximum dimensions of the window.

See also:
w_hmini w_wmini w_wmaxi w_hmaxi

Definition at line 309 of file BIG2.H.

int w_wmini

minimum width

Minimun Width of the window working area. If one tries to dimension the width of a window with lower values, BIG takes this minimum. Calculation takes into account the possible presence of a menu or of a toolbar in the window.

See also:
w_hmini w_wmini w_wmaxi w_hmaxi

Definition at line 307 of file BIG2.H.

long w_wtot

max window content width (in pixels)

This element contain the width of the window, in pixels. For an image, that corresponds to the width of this image. For text, the width represents the maximum number characters of a line multiplied by the width of a cell of character. Initialized to 0.

See also:
w_htot

Definition at line 342 of file BIG2.H.

int w_wunit

horizontal shift unit

Horizontal shift units of the window, in pixels. At the time of a click on one of the scroll arrows, the contents are shifted in the required direction by this value. For text, it would be respectively the width of a cell of character. At initialization: 1

See also:
w_hunit

Definition at line 311 of file BIG2.H.

The documentation for this struct was generated from the following files:
  • BIG2.H
  • big2hdoc.h
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Cont Union Reference

  • Data Fields

Cont Union Reference
[The BIG Defined Types]

#include <BIG2.H>

Data Fields

Form w_form
MFDB | w_img
char * | w_adr

Detailed Description

structure used to define the content of a window

Definition at line 288 of file BIG2.H.

Field Documentation

char* w_adr

if text or other data

Definition at line 291 of file BIG2.H.

Form w_form

if form

Definition at line 289 of file BIG2.H.

MFDB w_img

if image

Definition at line 290 of file BIG2.H.

The documentation for this union was generated from the following file:
  • BIG2.H
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: COOKIE Struct Reference

  • Data Fields

COOKIE Struct Reference
[The BIG Defined Types]

#include <BIG2.H>

Data Fields

long ident
union {
long l
int i [2]
char c [4]
} datack

Detailed Description

structure for cookies

Definition at line 355 of file BIG2.H.

Field Documentation

char c[4]

if data is type char

Definition at line 360 of file BIG2.H.

union { ... } datack

Cookie data

int i[2]

if data is type int

Definition at line 359 of file BIG2.H.

long ident

Cookie identifier

Definition at line 356 of file BIG2.H.

long l

if data is type long

Definition at line 358 of file BIG2.H.

The documentation for this struct was generated from the following file:
  • BIG2.H
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Form Struct Reference

  • Data Fields

Form Struct Reference
[The BIG Defined Types]

#include <BIG2.H>

Data Fields

OBJECT * | w_tree
int | w_edit
int | w_pos
char * | w_bak

Detailed Description

structure used for forms in windows

Definition at line 280 of file BIG2.H.

Field Documentation

char* w_bak

for saving state of a form

Definition at line 284 of file BIG2.H.

int w_edit

current editable

Definition at line 282 of file BIG2.H.

int w_pos

cursor position

Definition at line 283 of file BIG2.H.

OBJECT* w_tree

Tree address

Definition at line 281 of file BIG2.H.

The documentation for this struct was generated from the following file:
  • BIG2.H
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Obj_user Struct Reference

  • Data Fields

Obj_user Struct Reference

#include <BIG2USR1.H>

Data Fields

int | under
int | cunder
int | ctxt_under
int | cicn_coche
int | ctxt_coche
int | cicn_radio
int | ctxt_radio
int | cicn_popup
int | ctxt_popup
int | cmove
int | cgrastr
int | clin_frame
int | ctxt_frame
int | cniceline

Detailed Description

Definition at line 24 of file BIG2USR1.H.

Field Documentation

int cgrastr

Definition at line 36 of file BIG2USR1.H.

int cicn_coche

Definition at line 29 of file BIG2USR1.H.

int cicn_popup

Definition at line 33 of file BIG2USR1.H.

int cicn_radio

Definition at line 31 of file BIG2USR1.H.

int clin_frame

Definition at line 37 of file BIG2USR1.H.

int cmove

Definition at line 35 of file BIG2USR1.H.

int cniceline

Definition at line 39 of file BIG2USR1.H.

int ctxt_coche

Definition at line 30 of file BIG2USR1.H.

int ctxt_frame

Definition at line 38 of file BIG2USR1.H.

int ctxt_popup

Definition at line 34 of file BIG2USR1.H.

int ctxt_radio

Definition at line 32 of file BIG2USR1.H.

int ctxt_under

Definition at line 28 of file BIG2USR1.H.

int cunder

Definition at line 27 of file BIG2USR1.H.

int under

Definition at line 26 of file BIG2USR1.H.

The documentation for this struct was generated from the following file:
  • BIG2USR1.H
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Oldw Struct Reference

  • Data Fields

Oldw Struct Reference
[The BIG Defined Types]

#include <BIG2.H>

Data Fields

GRECT | w_coord
int | w_att

Detailed Description

define data before iconification

Definition at line 295 of file BIG2.H.

Field Documentation

int w_att

old attribute

Definition at line 297 of file BIG2.H.

GRECT w_coord

old coordinate

Definition at line 296 of file BIG2.H.

The documentation for this struct was generated from the following file:
  • BIG2.H
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: t_desktop Struct Reference

  • Data Fields

t_desktop Struct Reference
[The BIG Defined Types]

#include <BIG2.H>

Data Fields

int | xd
int | yd
int | wd
int | hd

Detailed Description

desktop coordinate

Definition at line 443 of file BIG2.H.

Field Documentation

int hd

height of desktop

Definition at line 448 of file BIG2.H.

int wd

width of desktop

Definition at line 447 of file BIG2.H.

int xd

X top corner of desktop

Definition at line 445 of file BIG2.H.

int yd

Y top corner of desktop

Definition at line 446 of file BIG2.H.

The documentation for this struct was generated from the following file:
  • BIG2.H
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: t_display Struct Reference

  • Data Fields

t_display Struct Reference
[The BIG Defined Types]

#include <BIG2.H>

Data Fields

size_t | taille
size_t | taille_ligne
int | handle
int | w
int | h
int | hc
t_resolution res
int | mode
char | une_palette
long | n_color_pal
long | n_color
int | n_plane
Palette * palette
int | nb_bit_coul [3]
int | masque_coul [3]
void * | phys
void * | log

Detailed Description

Display Information

Definition at line 422 of file BIG2.H.

Field Documentation

int h

Screen Height in pixels

Definition at line 427 of file BIG2.H.

int handle

VDI virtual workstation handle

Definition at line 425 of file BIG2.H.

int hc

"Normal" Caracter Height from baseline to topline

Definition at line 428 of file BIG2.H.

void* log

Logical address of sreen at startup

Definition at line 439 of file BIG2.H.

int masque_coul[3]

Color mask

Definition at line 437 of file BIG2.H.

int mode

Current mode if running on Falcon

Running mode if one works on Falcon. It is a mask of bits describing the video mode. Here details:

  • Bits 0 to 2: Bits by pixels. 0 = 1 bps; 1 = 2 bps; 2 = 4 bps; 3 = 8 bps; 4 = 16 bps.
  • Bit 3: Flag 80 columns (40 if it is not put).
  • Bit 4: Flag VGA (TV mode if it is not put).
  • Bit 5: Flag PAL or NTSC if it is not put.
  • Bit 6: Overscan flag. Multiply X and there by 1.2 (unused in VGA).
  • Bit 7: Flag of compatibility ST
  • Bit 8: Vertical flag. Mode interlaced on color screens, double line in VGA.
  • Bits 9 to 15: Reserved.

Definition at line 430 of file BIG2.H.

long n_color

number of pen available simutaneously

Definition at line 433 of file BIG2.H.

long n_color_pal

pallet or system number of color

Definition at line 432 of file BIG2.H.

int n_plane

screen depth in number of plans

Definition at line 434 of file BIG2.H.

int nb_bit_coul[3]

number of bits per color

Definition at line 436 of file BIG2.H.

Palette * palette

Save pallet Pointer

Pointer on the backup of the default pallet (the one which is active when the program start). The type "Pallette" is defined like this: typedef int Pallet [3], it is thus adapted to the VDI pallet description format. BIG use a storage area indicated by "pallet" with sufficient size defined by: pallets = (Pallet* ) malloc (n_color* sizeof (Pallet));

Definition at line 435 of file BIG2.H.

void* phys

Physical address of sreen at startup

Definition at line 438 of file BIG2.H.

t_resolution res

resolution at application start

Definition at line 429 of file BIG2.H.

size_t taille

Screen size in number of bytes

Definition at line 423 of file BIG2.H.

size_t taille_ligne

line size in number of bytes

Definition at line 424 of file BIG2.H.

char une_palette

FALSE no pallet (NEAR_TRUE_COLOR or TRUE_COLOR)

Definition at line 431 of file BIG2.H.

int w

Screen width in pixels

Definition at line 426 of file BIG2.H.

The documentation for this struct was generated from the following files:
  • BIG2.H
  • big2hdoc.h
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: t_ident_hard_soft Struct Reference

  • Data Fields

t_ident_hard_soft Struct Reference
[The BIG Defined Types]

#include <BIG2.H>

Data Fields

t_machine la_machine
t_proc_graphique proc_graphique
t_cpu le_cpu
int | v_aes
int | v_tos
char | multitache
type_gdos le_gdos

Detailed Description

Hardware / Software information

Definition at line 411 of file BIG2.H.

Field Documentation

t_machine la_machine

Atari model

Definition at line 412 of file BIG2.H.

t_cpu le_cpu

CPU used

Definition at line 414 of file BIG2.H.

type_gdos le_gdos

GDOS used

Definition at line 418 of file BIG2.H.

char multitache

TRUE if mutitasking

Definition at line 417 of file BIG2.H.

t_proc_graphique proc_graphique

Graphical processor used

Definition at line 413 of file BIG2.H.

int v_aes

AES version in hex eg "0x410" is V4.10

Definition at line 415 of file BIG2.H.

int v_tos

TOS version in hex same as above

Definition at line 416 of file BIG2.H.

The documentation for this struct was generated from the following file:
  • BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: t_image_dial Struct Reference

  • Data Fields

t_image_dial Struct Reference
[The BIG Defined Types]

#include <BIG2.H>

Data Fields

MFDB | mfdb_image
GRECT | cur_pos

Detailed Description

used for images in form MA 26/06/1994

Definition at line 349 of file BIG2.H.

Field Documentation

GRECT cur_pos

position of the image

Definition at line 351 of file BIG2.H.

MFDB mfdb_image

MFDB image to display

Definition at line 350 of file BIG2.H.

The documentation for this struct was generated from the following file:
  • BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Win_user Struct Reference

  • Data Fields

Win_user Struct Reference

#include <BIG2USR2.H>

Data Fields

int | mtxt_mover
int | ctxt_mover
int | spat_mover
int | cpat_mover
int | ctxt_info
int | spat_velev
int | cpat_velev
int | spat_helev
int | cpat_helev
int | spat_vslid
int | cpat_vslid
int | spat_hslid
int | cpat_hslid
int | cpat_gadgt
int | cicn_gadgt

Detailed Description

Definition at line 10 of file BIG2USR2.H.

Field Documentation

int cicn_gadgt

Definition at line 26 of file BIG2USR2.H.

int cpat_gadgt

Definition at line 25 of file BIG2USR2.H.

int cpat_helev

Definition at line 20 of file BIG2USR2.H.

int cpat_hslid

Definition at line 24 of file BIG2USR2.H.

int cpat_mover

Definition at line 15 of file BIG2USR2.H.

int cpat_velev

Definition at line 18 of file BIG2USR2.H.

int cpat_vslid

Definition at line 22 of file BIG2USR2.H.

int ctxt_info

Definition at line 16 of file BIG2USR2.H.

int ctxt_mover

Definition at line 13 of file BIG2USR2.H.

int mtxt_mover

Definition at line 12 of file BIG2USR2.H.

int spat_helev

Definition at line 19 of file BIG2USR2.H.

int spat_hslid

Definition at line 23 of file BIG2USR2.H.

int spat_mover

Definition at line 14 of file BIG2USR2.H.

int spat_velev

Definition at line 17 of file BIG2USR2.H.

int spat_vslid

Definition at line 21 of file BIG2USR2.H.

The documentation for this struct was generated from the following file:
  • BIG2USR2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • Data Fields
  • All
  • Variables
  • c
  • d
  • h
  • i
  • l
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • y
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- c -

  • c : COOKIE
  • cgrastr : Obj_user
  • cicn_coche : Obj_user
  • cicn_gadgt : Win_user
  • cicn_popup : Obj_user
  • cicn_radio : Obj_user
  • clin_frame : Obj_user
  • cmove : Obj_user
  • cniceline : Obj_user
  • cpat_gadgt : Win_user
  • cpat_helev : Win_user
  • cpat_hslid : Win_user
  • cpat_mover : Win_user
  • cpat_velev : Win_user
  • cpat_vslid : Win_user
  • ctxt_coche : Obj_user
  • ctxt_frame : Obj_user
  • ctxt_info : Win_user
  • ctxt_mover : Win_user
  • ctxt_popup : Obj_user
  • ctxt_radio : Obj_user
  • ctxt_under : Obj_user
  • cunder : Obj_user
  • cur_pos : t_image_dial

- d -

  • datack : COOKIE

- h -

  • h : t_display
  • handle : t_display
  • hc : t_display
  • hd : t_desktop

- i -

  • i : COOKIE
  • ident : COOKIE

- l -

  • l : COOKIE
  • la_machine : t_ident_hard_soft
  • le_cpu : t_ident_hard_soft
  • le_gdos : t_ident_hard_soft
  • log : t_display

- m -

  • masque_coul : t_display
  • mfdb_image : t_image_dial
  • mode : t_display
  • mtxt_mover : Win_user
  • multitache : t_ident_hard_soft

- n -

  • n_color : t_display
  • n_color_pal : t_display
  • n_plane : t_display
  • nb_bit_coul : t_display

- p -

  • palette : t_display
  • phys : t_display
  • proc_graphique : t_ident_hard_soft

- r -

  • res : t_display

- s -

  • spat_helev : Win_user
  • spat_hslid : Win_user
  • spat_mover : Win_user
  • spat_velev : Win_user
  • spat_vslid : Win_user

- t -

  • taille : t_display
  • taille_ligne : t_display

- u -

  • under : Obj_user
  • une_palette : t_display

- v -

  • v_aes : t_ident_hard_soft
  • v_tos : t_ident_hard_soft

- w -

  • w : t_display
  • w_adr : Cont
  • w_att : Oldw
  • w_attr : BigWind
  • w_bak : Form
  • w_bar : BigWind
  • w_close : BigWind
  • w_col : BigWind
  • w_cont : BigWind
  • w_coord : Oldw
  • w_curr : BigWind
  • w_cycle : BigWind
  • w_dnline : BigWind
  • w_dnpage : BigWind
  • w_edit : Form
  • w_fen : BigWind
  • w_flags : BigWind
  • w_form : Cont
  • w_full : BigWind
  • w_hg : BigWind
  • w_hmaxi : BigWind
  • w_hmini : BigWind
  • w_hprot : BigWind
  • w_hslid : BigWind
  • w_htot : BigWind
  • w_hunit : BigWind
  • w_icon : BigWind
  • w_img : Cont
  • w_infos : BigWind
  • w_lfline : BigWind
  • w_lfpage : BigWind
  • w_lin : BigWind
  • w_mouse : BigWind
  • w_move : BigWind
  • w_old : BigWind
  • w_pal : BigWind
  • w_pos : Form
  • w_redicn : BigWind
  • w_redraw : BigWind
  • w_rtline : BigWind
  • w_rtpage : BigWind
  • w_size : BigWind
  • w_title : BigWind
  • w_top : BigWind
  • w_tree : Form
  • w_type : BigWind
  • w_upline : BigWind
  • w_uppage : BigWind
  • w_vprot : BigWind
  • w_vslid : BigWind
  • w_wmaxi : BigWind
  • w_wmini : BigWind
  • w_wtot : BigWind
  • w_wunit : BigWind
  • wd : t_desktop

- x -

  • xd : t_desktop

- y -

  • yd : t_desktop
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: File Index

  • File List
  • Globals

File List

Here is a list of all files with brief descriptions:
BIG2.H [code] | This is the main Include file for the BIG library
BIG2DEMO.C [code] |
BIG2DEMO.H [code] |
BIG2DIAL.C [code] |
BIG2DIAL.H [code] |
BIG2DIVR.C [code] |
BIG2DIVR.H [code] |
BIG2EDIT.C [code] |
BIG2EDIT.H [code] |
BIG2EVTW.C [code] |
BIG2EVTW.H [code] |
BIG2FOR1.C [code] |
BIG2FOR1.H [code] |
BIG2FOR2.C [code] |
BIG2FOR2.H [code] |
big2hdoc.h [code] |
BIG2HELP.C [code] |
BIG2HELP.H [code] |
BIG2INCL.H [code] |
BIG2INIT.C [code] |
BIG2USR1.C [code] |
BIG2USR1.H [code] |
BIG2USR2.C [code] |
BIG2USR2.H [code] |
BIG2WINB.C [code] |
BIG2WINB.H [code] |
BIG2WIND.C [code] |
BIG2WIND.H [code] |
BIG_IMGS.H [code] |
d_atari.c [code] |
d_big.c [code] |
translate.h [code] |
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2.H File Reference

BIG2.H File Reference

This is the main Include file for the BIG library. More...

#include <STRING.H>
#include <AES.H>
#include <VDI.H>
#include <TOS.H>
#include <STDIO.H>
#include <STDLIB.H>
#include <CTYPE.H>

Go to the source code of this file.

Data Structures

struct | Form
union | Cont
struct | Oldw
struct | BigWind
struct | t_image_dial
struct | COOKIE
struct | t_ident_hard_soft
struct | t_display
struct | t_desktop

Defines

#define | FALSE 0
#define | TRUE 1
#define | NOT !
#define | BLANK -1
#define | ZERO 0
#define | MAX_ALRT 250
#define | max(a, b) ((a)>(b)?(a):(b))
#define | min(a, b) ((a)<(b)?(a):(b))
#define | NGAD 23
#define | BIT15 0x8000
#define | B_MOVE 17
#define | B_SELEC 18
#define | B_GRASTR 19
#define | B_FRAME 20
#define | B_HELP 21
#define | B_POPUP 22
#define | B_LIST 23
#define | B_PICT 24
#define | B_EDIT 25
#define | B_SMSTR 26
#define | B_UNDER 30
#define | B_UNDO 31
#define | B_HIERM 41
#define | B_FNCP 51
#define | DLG_DESK (MU_KEYBD | MU_BUTTON | MU_M1 | MU_MESAG | MU_TIMER)
#define | DLG_FORM (MU_KEYBD | MU_BUTTON | MU_TIMER)
#define | BEV_HIERM 150
#define | BEV_FREEPU 151
#define | BEV_WFORM 152
#define | BEV_WMENU 153
#define | BEV_WHIER 154
#define | BEV_TOOL 155
#define | WATR_ALLG (NAME|CLOSER|FULLER|MOVER|INFO|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE)
#define | WATR_ALLB (CLOSER|FULLER|MOVER|INFO|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE|CYCLER|SMALLER|ALLSIZER)
#define | WATR_CURRG (NAME|CLOSER|FULLER|MOVER|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE)
#define | WATR_CURRB (CLOSER|FULLER|MOVER|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE|CYCLER|SMALLER|ALLSIZER)
#define | WATR_FORMG (NAME|CLOSER|MOVER)
#define | WATR_FORMB (CLOSER|MOVER|CYCLER|SMALLER)
#define | WTYP_NORM 1
#define | WTYP_FORM 2
#define | WTYP_PICT 3
#define | WTYP_TOOL 0x4000
#define | WTYP_MENU 0x8000
#define | WFFULL 0x0001
#define | WFARROW 0x0002
#define | WFCALAG 0x0004
#define | WFDECAL 0x0008
#define | WFGROUP 0x0010
#define | WFLAST 0x0080
#define | SMALLER 0x4000
#define | CYCLER 0x2000
#define | ALLSIZER 0x8000
#define | BKGR 0x0400
#define | DCDEFAULT 0x0800
#define | WFCLOSE 0x1000
#define | BS_RIGHT 0x2000
#define | AIDE_OBJET 0x4000
#define | NOTOP 0x8000
#define | WM_BKGR 0
#define | WM_BOXMENU 1
#define | WM_BOXARROWS 2
#define | WM_LFARROW 3
#define | WM_RTARROW 4
#define | WM_BOXTITLES 5
#define | HELP 0x6200
#define | UNDO 0x6100
#define | ENTER 0x1C0D
#define | RETURN 0x720D
#define | BACKSPC 0x0E08
#define | DELETE 0x537F
#define | SH_DELETE 0x537F
#define | INSERT 0x5200
#define | SH_INSERT 0x5230
#define | TAB 0x0F09
#define | ARDN 0x5000
#define | ARUP 0x4800
#define | ARLF 0x4B00
#define | ARRT 0x4D00
#define | CT_ARDN 0x5000
#define | CT_ARUP 0x4800
#define | CT_ARLF 0x7300
#define | CT_ARRT 0x7400
#define | SH_ARDN 0x5032
#define | SH_ARUP 0x4838
#define | SH_ARLF 0x4B34
#define | SH_ARRT 0x4D36
#define | ESC 0x011B
#define | CLR 0x4700
#define | CT_CLR 0x7700
#define | SH_CLR 0x4737
#define | ESPACE 0x3920
#define | F1 0x3B00
#define | SH_F1 0x5400
#define | F2 0x3C00
#define | SH_F2 0x5500
#define | F3 0x3D00
#define | SH_F3 0x5600
#define | F4 0x3E00
#define | SH_F4 0x5700
#define | F5 0x3F00
#define | SH_F5 0x5800
#define | F6 0x4000
#define | SH_F6 0x5900
#define | F7 0x4100
#define | SH_F7 0x5A00
#define | F8 0x4200
#define | SH_F8 0x5B00
#define | F9 0x4300
#define | SH_F9 0x5C00
#define | F10 0x4400
#define | SH_F10 0x5D00
#define | ADR ir_trindex
#define | get_popup match
#define | POINTIL 0x8888
#define | MTPOINT 1
#define | MTPLUS 2
#define | MTETOILE 3
#define | MTCARRE 4
#define | MTCROIX 5
#define | MTLOSANGE 6
#define | EFNONE 0x00
#define | EFGRAS 0x01
#define | EFGRIS 0x02
#define | EFITAL 0x04
#define | EFSOULI 0x08
#define | EFCONT 0x10
#define | HLEFT 0
#define | HCENT 1
#define | HRIGHT 2
#define | VDOWN 0
#define | VLINE 3
#define | VTOP 5
#define | HNORM 13
#define | HPETIT 6
#define | HMINUS 4
#define | RONORM 0
#define | RO90 900
#define | RO180 1800
#define | RO270 2700

Typedefs

typedef int | Palette [3]
typedef void(* | FNCP )(void)

Enumerations

enum t_machine {
ST, STE, TT, FALCON_030,
AUTRE_MACHINE
}
enum t_proc_graphique {
PG_ST, PG_STE, PG_TT, PG_FALCON_030,
AUTRE_PG
}
enum | t_cpu { PROC_68000, PROC_68030, AUTRE_PROCESSEUR }
enum t_resolution {
ST_BASSE = 0, ST_MOYENNE = 1, ST_HAUTE = 2, VGA_16COL = 4,
VGA_256COL = 5, R_256C_320_480 = 7, TRUE_COLOR_320_480 = 8, INCONNU = -1
}
enum type_gdos {
AUCUN_GDOS = 0, GDOS_STANDARD = 1, FONT_GDOS = 2, FSM_GDOS = 3,
SPEEDO_GDOS = 4
}

Functions

int | initial (char *rsc, int menu, int desk, int nb_tree, OBJECT *rs_tree, char *rs_str, int n_wind, int acc)
Initialize BIG.
void | end (void)
Terminate BIG.
void | formm_draw (OBJECT *adr, int ed, int flmove, MFDB *img)
Display a movable form.
void | formm_undraw (OBJECT *adr, MFDB *img)
Erase a movable form.
void | formf_draw (OBJECT *adr, int ed)
Display a traditional form.
void | formf_undraw (OBJECT *adr)
Erase a traditional form.
void | create_hierm (OBJECT *adr)
Place an arrow in a menu.
int | dialog (int flags, OBJECT *address, int f, int fl_rb, int form_pu, MFDB *img, int fl_move)
Manage all the events in BIG.
int | match (OBJECT *adr, int button)
Search for a text match in pop-up pop-list.
void | set_popup (OBJECT *adr, int button, int option)
Link Text to pop-up.
OBJECT * | create_popup (int nbre, char *liste)
Create text pop-up menu.
int | free_popup (int posx, int posy, int form, OBJECT *adr)
Call a free pop-up.
void | get_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
Saves the image of an area in a MFDB.
void | put_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
Restore the image of an area from a MFDB.
int | big_alert (int button, int number, char *str, int fl_alrt)
Call and manage a BIG Alert.
char * | get_string (int number)
Return a pointer to a free string.
void | form_attach (int tree, int obj, char formular)
Link pop-up object and a sub-menu.
void | bulle_attach (int tree, int obj, char bulle)
Create a link between an object an a free string of a bubble-help.
void | set_interface (int under, int cunder, int ctxt_under, int cicn_coche, int ctxt_coche, int cicn_radio, int ctxt_radio, int cicn_popup, int ctxt_popup, int cmove, int cgrastr, int clin_frame, int ctxt_frame, int cniceline)
Modify aspect parameters of BIG object.
int cdecl | parent (OBJECT *adr, int object)
Return the number of the parent object.
void | bak_rsc (OBJECT *tree, char **bak)
Save the state of a Form.
void | res_rsc (OBJECT *tree, char **bak)
Restore the state of a Form.
void | dlg_mouse (void)
Change mouse pointer in working area.
void | set_radio (OBJECT *adr, int rb)
Select a radio button in a group.
int | get_radio (OBJECT *adr, int rb)
Find the selected radio-button in a group.
void | set_attributes (OBJECT *adr, int ob, int attr)
Set graphical attributes of B_GRASTR or B_SMSTR.
void | objc_xedit (OBJECT *adr, int car, int ed, int *po, int action, int f, int index)
BIG equivalent to GEM objc_edit() function.
void | set_text (OBJECT *adr, int object, char *string)
Place text in an object.
char * | get_text (OBJECT *adr, int object)
Get text in an object.
char * | path (char *pat)
Get the default path of the application.
long | exist (char *name, int att)
Return size of a file if it exist.
void | set_palette (int index)
New value for the pallet.
long | timer (void)
New value for the pallet.
char * | trim (char *str)
Trim tab/spaces at begin/end of a string.
void | send_mesag (int type, int wi, int x, int y, int w, int h)
Send message to itself.
int | selector (char *pat, char *ext, char *file, char *title)
Call GEM File selector.
void | extension (char *filename, char *ext)
Forces a specific extension on file or path name.
int | rc_intersect (GRECT *p1, GRECT *p2)
Find common zone between two areas of screen.
void | clipp (int clip_flag, GRECT *area)
Turn on/off clipping of a screen area.
void | fill_tab (int *pxy, int n,...)
First Cookie of the cookie jar.
void | empty (int evnmt)
Empty keyboard or message buffer.
COOKIE * | first_cookie (void)
First Cookie of the cookie jar.
COOKIE * | next_cookie (COOKIE *ck)
Next Cookie of the cookie jar.
COOKIE * | vq_cookie (long id)
Query for a Cookie by id.
COOKIE * | vq_cookie_c (char *c)
Query for a Cookie by name.
int | formw_draw (OBJECT *adr, int index, int title, int infos, int wed, int attr, FNCP ricn)
Open a Form in Window.
int | open_window (int index, int type, int attr, int x, int y, int w, int h, int wmi, int hmi, int wma, int hma, int wu, int hu, int flags, int fmouse, FNCP ricn, FNCP redr, FNCP clos, char *title, char *info, long wt, long ht, int fmenu, int ftool, int bar, int pattern, int colorp)
Create and open a Window.
int | find_index (int wh)
Find the BIG index of a window by its GEM Handle.
int | find_window (int mx, int my)
Find if the working area of a window is at a given location.
void | zone_work (int index, int *xw, int *yw, int *ww, int *hw)
Get work area position.
void | height_sliders (int index, int fredraw)
Compute size and position of a window sliders.
void | posi_vert (int index, int fredraw)
Compute the position of a window vertical slider.
void | posi_hori (int index, int fredraw)
Compute the position of a window horizontal slider.
void | height_vert (int index, int fredraw)
Compute the size of a window vertical slider.
void | height_hori (int index, int fredraw)
Compute the size of a window horizontal slider.
void | draw_object (int object, int index)
Redraw the visible part of an object belonging to a form.
void | print_page (int index)
Redraw the visible part of an object belonging to a form.
void | next_wind (void)
Bring to front the next window.
void | closed (void)
Close and destroy window.
void | iconise (int index)
Iconify a window.
void | uniconise (int index)
Deiconify a Window.
void | alliconise (int index)
Iconyfy all open windows.
void | set_work (int index, int pattern, int colorp)
Set pattern and color of window working area.
void | set_windows (int mtxt_mover, int ctxt_mover, int spat_mover, int cpat_mover, int ctxt_info, int spat_velev, int cpat_velev, int spat_helev, int cpat_helev, int spat_vslid, int cpat_vslid, int spat_hslid, int cpat_hslid, int cpat_gadgt, int cicn_gadgt)
Modify window display parameters.
void | bwind_calc (int request, int kind, int tree, OBJECT *adrb, int xd, int yd, int wd, int hd, int *x, int *y, int *w, int *h)
Equivalent to GEM wind_calc().
void | draw_title (int index)
Redraw the title bar.

Variables

int | ap_id
int | buf [8]
int | mx
int | my
int | mk
int | edit
int | pos
int | object
int | kbd
int | key
int | clik
int | wind
int | intgr
char | pathapp []
Palette | bpal [16]
OBJECT * | adr_menu
OBJECT * | adr_desk
OBJECT ** | ir_trindex
int | cliq_in
GRECT | zclip
FNCP * fnc
BigWind * win
t_ident_hard_soft desc_hard_soft
t_display work_display
t_desktop bureau
int | aide_en_ligne

Detailed Description

This is the main Include file for the BIG library.

BIG = "BIG Is GEM" - A high level GEM library.
Initial design and developement by Claude ATTARD, Maintenance by Jean LOUIS-GUERIN
Copyright (c) 1993-2010 Claude ATTARD
Copyright (c) 2010 Jean LOUIS-GUERIN

This library is free software; you can redistribute it and/or modify it under the terms
of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this
library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA  02111-1307 USA

Version 2.2 based on original 2.13

Todo:
LONG Description
Author:
Claude Attard (Design) / Jean Louis-Guerin (Maintenance)
Revision
Date
Log

Definition in file BIG2.H.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DEMO.C File Reference

BIG2DEMO.C File Reference

#include <BIG2.H>
#include <big_imgs.h>
#include "BIG2DEMO.H"

Go to the source code of this file.

Defines

#define | INTGR 0
#define | BIMAGE "BIG2DEMO.IMG"
#define | TRINDEX 0
#define | FRSTR 0
#define | NUM_TREE 0
#define | NB_FENETRES 7
#define | WINDACC 0
#define | PETIT_FORM 1
#define | GRAND_FORM 2
#define | TEXTE 3
#define | IMAGE 4
#define | WINDMENU 5
#define | HISTO 6

Functions

void | main (void)
void | set_bimg (void)
void | set_form (void)
void | ptr_fonctions (void)
void | load_fontspeedo (void)
void | event_mesag (int *flacc, int *quit)
void | event_pmenu (int *quit)
void | event_freepu (void)
void | event_wform (void)
void | event_wmenu (int *flacc)
void | event_whier (void)
void | event_tool (void)
void | event_desk (void)
void | aff_infos (void)
void | formulaire (void)
void | test_alerte (void)
void | pform_wind (void)
void | trame_desk (void)
void | gform_wind (void)
void | objets_desk (void)
void | charge_texte (void)
void | aff_texte (void)
void | set_font (void)
void | close_txt (void)
void | charge_image (void)
void | close_img (void)
void | cree_histo (void)
void | aff_histo (void)
void | close_histo (void)
void | close_wmenu (void)
void | icone (void)
void | winicn (void)
void | clos_acc (void)
void | acc_loop (void)
void | red_acc (void)
void | relief (void)

Variables

int | fgdos
int | fid
int | size
t_image_dial bimg
char * | zone = ZERO

Detailed Description

BIG2DEMO.C >>> Big Is Gem <<< Demo program for BIG2 Development Library under GEM

Author:
Claude ATTARD (Initial Development) Jean Louis-Guérin (Maintenance)

Definition in file BIG2DEMO.C.

Define Documentation

#define BIMAGE "BIG2DEMO.IMG"

Name of image to load working with integrated ressource working with external ressource

Definition at line 18 of file BIG2DEMO.C.

#define FRSTR 0

Definition at line 29 of file BIG2DEMO.C.

#define GRAND_FORM 2

Definition at line 36 of file BIG2DEMO.C.

#define HISTO 6

Definition at line 40 of file BIG2DEMO.C.

#define IMAGE 4

Definition at line 38 of file BIG2DEMO.C.

#define INTGR 0

ressource not integrated

Definition at line 17 of file BIG2DEMO.C.

#define NB_FENETRES 7

Definition at line 33 of file BIG2DEMO.C.

#define NUM_TREE 0

Definition at line 30 of file BIG2DEMO.C.

#define PETIT_FORM 1

Definition at line 35 of file BIG2DEMO.C.

#define TEXTE 3

Definition at line 37 of file BIG2DEMO.C.

#define TRINDEX 0

Definition at line 28 of file BIG2DEMO.C.

#define WINDACC 0

Definition at line 34 of file BIG2DEMO.C.

#define WINDMENU 5

Definition at line 39 of file BIG2DEMO.C.

Function Documentation

void acc_loop ( void )

event waiting loop accessory

Definition at line 1190 of file BIG2DEMO.C.

void aff_histo ( void )

Display histogram

Definition at line 1030 of file BIG2DEMO.C.

void aff_infos ( void )

Display info about BIG

Definition at line 619 of file BIG2DEMO.C.

void aff_texte ( void )

Display text

Definition at line 793 of file BIG2DEMO.C.

void charge_image ( void )

load Degas image in window

Definition at line 891 of file BIG2DEMO.C.

void charge_texte ( void )

loads ASCII text in window

Definition at line 735 of file BIG2DEMO.C.

void clos_acc ( void )

Definition at line 1142 of file BIG2DEMO.C.

void close_histo ( void )

Close histogram window

Definition at line 1058 of file BIG2DEMO.C.

void close_img ( void )

close image in window

Definition at line 993 of file BIG2DEMO.C.

void close_txt ( void )

close text window

Definition at line 878 of file BIG2DEMO.C.

void close_wmenu ( void )

Close window with menu

Definition at line 1071 of file BIG2DEMO.C.

void cree_histo ( void )

Create histogram and open windows

Definition at line 1008 of file BIG2DEMO.C.

void event_desk ( void )

desk events

Definition at line 504 of file BIG2DEMO.C.

void event_freepu ( void )

free popup event

Definition at line 280 of file BIG2DEMO.C.

void event_mesag | ( | int * | flacc,
 |  | int * | quit
 | ) |  |

message events

Definition at line 226 of file BIG2DEMO.C.

void event_pmenu ( int * quit )

event in main menu

Definition at line 245 of file BIG2DEMO.C.

void event_tool ( void )

Toolbar events

Definition at line 486 of file BIG2DEMO.C.

void event_wform ( void )

form in window event

Definition at line 340 of file BIG2DEMO.C.

void event_whier ( void )

hierarchical menu in windows events

Definition at line 462 of file BIG2DEMO.C.

void event_wmenu ( int * flacc )

menu in window events

Definition at line 397 of file BIG2DEMO.C.

void formulaire ( void )

Free form

Definition at line 565 of file BIG2DEMO.C.

void gform_wind ( void )

Display large form in window

Definition at line 703 of file BIG2DEMO.C.

void icone ( void )

Alert with icon choice

Definition at line 1086 of file BIG2DEMO.C.

void load_fontspeedo ( void )

load Sppedo fonts

Definition at line 198 of file BIG2DEMO.C.

void main ( void )

Initialization and main loop

Definition at line 82 of file BIG2DEMO.C.

void objets_desk ( void )

Modifies objects on desk

Definition at line 718 of file BIG2DEMO.C.

void pform_wind ( void )

Display small form in window

Definition at line 661 of file BIG2DEMO.C.

void ptr_fonctions ( void )

assign function to pointers

Definition at line 171 of file BIG2DEMO.C.

void red_acc ( void )

dummy redraw function for accessory window

Definition at line 1217 of file BIG2DEMO.C.

void relief ( void )

3D effect when running in color

Definition at line 1222 of file BIG2DEMO.C.

void set_bimg ( void )

place image on the desk

Definition at line 136 of file BIG2DEMO.C.

void set_font ( void )

select font and size

Definition at line 851 of file BIG2DEMO.C.

void set_form ( void )

setup associated form

Definition at line 147 of file BIG2DEMO.C.

void test_alerte ( void )

Display BIG alert

Definition at line 655 of file BIG2DEMO.C.

void trame_desk ( void )

modify pattern on desk

Definition at line 692 of file BIG2DEMO.C.

void winicn ( void )

redraw iconified windows

Definition at line 1100 of file BIG2DEMO.C.

Variable Documentation

t_image_dial bimg

desk image

Definition at line 14 of file BIG2DEMO.C.

int fgdos

Definition at line 13 of file BIG2DEMO.C.

int fid

Definition at line 13 of file BIG2DEMO.C.

int size

work with Speedo

Definition at line 13 of file BIG2DEMO.C.

char* zone = ZERO

desk image load buffer

Definition at line 15 of file BIG2DEMO.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DEMO.H File Reference

BIG2DEMO.H File Reference

Go to the source code of this file.

Defines

#define | MENU 0
#define | T_BUREAU 3
#define | T_FICHIER 4
#define | T_FENETRES 5
#define | M_INFOS 8
#define | M_FORMLIBRE 17
#define | M_ALERTE 18
#define | M_QUITTER 19
#define | M_WFORMPETIT 21
#define | M_WFORMGRAND 22
#define | M_WWIND 23
#define | M_WMENU 24
#define | BUREAU 1
#define | BU_IMG 1
#define | BU_BOXTXT 2
#define | BU_TXT1 3
#define | BU_TXT2 4
#define | BU_ICN 5
#define | FORMULAIRE 2
#define | CADRE1 3
#define | FO_RBA1 4
#define | FO_RBA2 5
#define | CADRE2 6
#define | FO_RBB1 7
#define | FO_RBB2 8
#define | FO_RBB3 9
#define | FO_PUI 11
#define | FO_BC1 12
#define | FO_BC2 13
#define | TXT1 15
#define | TXT2 16
#define | P_CONFIRME 17
#define | P_AIDE 18
#define | P_ANNULE 19
#define | FO_PUT 20
#define | POP_UP1 3
#define | POP_UP2 4
#define | INFOS 5
#define | INF_INFOS 11
#define | INF_SORTIE 12
#define | INF_MERCI 13
#define | AIDE1 6
#define | PETITFORM 7
#define | PF_BC1 2
#define | PF_BC2 3
#define | PF_CHAMP1 4
#define | PF_CHAMP2 5
#define | PF_CHAMP3 6
#define | PF_CHAMP4 7
#define | PF_CONFIRME 8
#define | PF_ANNULE 9
#define | PF_AIDE 10
#define | PF_APPLIQUE 11
#define | PF_RAZ 12
#define | PF_TRAME 13
#define | PF_COLOR 14
#define | GRANDFORM 8
#define | GF_RBA1 3
#define | GF_RBA2 4
#define | GF_RBA3 5
#define | GF_RBA4 6
#define | GF_RBB1 8
#define | GF_RBB2 9
#define | GF_RBB3 10
#define | GF_RBB4 11
#define | GF_RBC1 13
#define | GF_RBC2 14
#define | GF_RBC3 15
#define | GF_RBC4 16
#define | GF_BC1 17
#define | GF_BC2 18
#define | GF_PU1 19
#define | GF_PL 20
#define | GF_ICN 22
#define | GF_PU2 23
#define | GF_CONFIRME 24
#define | GF_ANNULE 25
#define | GF_AIDE 26
#define | GF_APPLIQUE 27
#define | GF_RAZ 28
#define | W_MENU 9
#define | TW_BUREAU 3
#define | TW_OPTIONS 4
#define | TW_ALERTS 5
#define | MW_INFOS 8
#define | MW_IMAGE 10
#define | MW_ALERTE 11
#define | MW_AL 13
#define | MHIERA 10
#define | MH_HISTO 3
#define | POPUP_ICN 11
#define | PU_LIBRE 12
#define | PUL_ALERT 3
#define | PUL_WMENU 10
#define | CONTACT 13
#define | AIDE2 14
#define | HIERWIND 15
#define | MWH_ICN0 1
#define | MWH_ICN1 2
#define | MWH_ICN2 3
#define | MWH_ICN3 4
#define | MWH_ICN4 5
#define | MWH_ICN5 6
#define | MWH_ICN6 7
#define | MWH_ICN7 8
#define | MWH_ICN8 9
#define | MWH_ICN9 10
#define | MERCI 16
#define | TOOL 17
#define | TL_INV 1
#define | TL_LEFT 2
#define | TL_CENTER 3
#define | TL_RIGHT 4
#define | TL_FONT 5
#define | TL_SIZE 6
#define | SIZES 18
#define | FONTS 19
#define | TRAMES 20
#define | COULEURS 21
#define | ALERT 0
#define | AL_ICONES 1
#define | AL_POINTEUR 2
#define | TITRE_PF 3
#define | TITRE_GF 4
#define | CHARGETXT 5
#define | CHARGEIMG 6
#define | TIT_TXT 7
#define | TIT_IMG 8
#define | TIT_MENU 9
#define | TIT_HIST 10
#define | INF_HIST 11
#define | TITREACC 12
#define | TW_ACC 13
#define | BA_RB 14
#define | BA_BC 15
#define | BA_PU 16
#define | BA_PUIM 17
#define | BA_PUBX 18
#define | BA_TG 19
#define | BA_TC 20
#define | BA_TD 21
#define | BA_TI 22
#define | BA_FNT 23
#define | BA_SIZ 24
#define | ICN_WN 0
#define | ICN_WF 1

Define Documentation

#define AIDE1 6

Definition at line 50 of file BIG2DEMO.H.

#define AIDE2 14

Definition at line 112 of file BIG2DEMO.H.

#define AL_ICONES 1

Definition at line 146 of file BIG2DEMO.H.

#define AL_POINTEUR 2

Definition at line 148 of file BIG2DEMO.H.

#define ALERT 0

Definition at line 144 of file BIG2DEMO.H.

#define BA_BC 15

Definition at line 174 of file BIG2DEMO.H.

#define BA_FNT 23

Definition at line 190 of file BIG2DEMO.H.

#define BA_PU 16

Definition at line 176 of file BIG2DEMO.H.

#define BA_PUBX 18

Definition at line 180 of file BIG2DEMO.H.

#define BA_PUIM 17

Definition at line 178 of file BIG2DEMO.H.

#define BA_RB 14

Definition at line 172 of file BIG2DEMO.H.

#define BA_SIZ 24

Definition at line 192 of file BIG2DEMO.H.

#define BA_TC 20

Definition at line 184 of file BIG2DEMO.H.

#define BA_TD 21

Definition at line 186 of file BIG2DEMO.H.

#define BA_TG 19

Definition at line 182 of file BIG2DEMO.H.

#define BA_TI 22

Definition at line 188 of file BIG2DEMO.H.

#define BU_BOXTXT 2

Definition at line 18 of file BIG2DEMO.H.

#define BU_ICN 5

Definition at line 21 of file BIG2DEMO.H.

#define BU_IMG 1

Definition at line 17 of file BIG2DEMO.H.

#define BU_TXT1 3

Definition at line 19 of file BIG2DEMO.H.

#define BU_TXT2 4

Definition at line 20 of file BIG2DEMO.H.

#define BUREAU 1

Definition at line 16 of file BIG2DEMO.H.

#define CADRE1 3

Definition at line 24 of file BIG2DEMO.H.

#define CADRE2 6

Definition at line 27 of file BIG2DEMO.H.

#define CHARGEIMG 6

Definition at line 156 of file BIG2DEMO.H.

#define CHARGETXT 5

Definition at line 154 of file BIG2DEMO.H.

#define CONTACT 13

Definition at line 110 of file BIG2DEMO.H.

#define COULEURS 21

Definition at line 142 of file BIG2DEMO.H.

#define FO_BC1 12

Definition at line 32 of file BIG2DEMO.H.

#define FO_BC2 13

Definition at line 33 of file BIG2DEMO.H.

#define FO_PUI 11

Definition at line 31 of file BIG2DEMO.H.

#define FO_PUT 20

Definition at line 39 of file BIG2DEMO.H.

#define FO_RBA1 4

Definition at line 25 of file BIG2DEMO.H.

#define FO_RBA2 5

Definition at line 26 of file BIG2DEMO.H.

#define FO_RBB1 7

Definition at line 28 of file BIG2DEMO.H.

#define FO_RBB2 8

Definition at line 29 of file BIG2DEMO.H.

#define FO_RBB3 9

Definition at line 30 of file BIG2DEMO.H.

#define FONTS 19

Definition at line 138 of file BIG2DEMO.H.

#define FORMULAIRE 2

Definition at line 23 of file BIG2DEMO.H.

#define GF_AIDE 26

Definition at line 88 of file BIG2DEMO.H.

#define GF_ANNULE 25

Definition at line 87 of file BIG2DEMO.H.

#define GF_APPLIQUE 27

Definition at line 89 of file BIG2DEMO.H.

#define GF_BC1 17

Definition at line 80 of file BIG2DEMO.H.

#define GF_BC2 18

Definition at line 81 of file BIG2DEMO.H.

#define GF_CONFIRME 24

Definition at line 86 of file BIG2DEMO.H.

#define GF_ICN 22

Definition at line 84 of file BIG2DEMO.H.

#define GF_PL 20

Definition at line 83 of file BIG2DEMO.H.

#define GF_PU1 19

Definition at line 82 of file BIG2DEMO.H.

#define GF_PU2 23

Definition at line 85 of file BIG2DEMO.H.

#define GF_RAZ 28

Definition at line 90 of file BIG2DEMO.H.

#define GF_RBA1 3

Definition at line 68 of file BIG2DEMO.H.

#define GF_RBA2 4

Definition at line 69 of file BIG2DEMO.H.

#define GF_RBA3 5

Definition at line 70 of file BIG2DEMO.H.

#define GF_RBA4 6

Definition at line 71 of file BIG2DEMO.H.

#define GF_RBB1 8

Definition at line 72 of file BIG2DEMO.H.

#define GF_RBB2 9

Definition at line 73 of file BIG2DEMO.H.

#define GF_RBB3 10

Definition at line 74 of file BIG2DEMO.H.

#define GF_RBB4 11

Definition at line 75 of file BIG2DEMO.H.

#define GF_RBC1 13

Definition at line 76 of file BIG2DEMO.H.

#define GF_RBC2 14

Definition at line 77 of file BIG2DEMO.H.

#define GF_RBC3 15

Definition at line 78 of file BIG2DEMO.H.

#define GF_RBC4 16

Definition at line 79 of file BIG2DEMO.H.

#define GRANDFORM 8

Definition at line 67 of file BIG2DEMO.H.

#define HIERWIND 15

Definition at line 114 of file BIG2DEMO.H.

#define ICN_WF 1

Definition at line 196 of file BIG2DEMO.H.

#define ICN_WN 0

Definition at line 194 of file BIG2DEMO.H.

#define INF_HIST 11

Definition at line 166 of file BIG2DEMO.H.

#define INF_INFOS 11

Definition at line 46 of file BIG2DEMO.H.

#define INF_MERCI 13

Definition at line 48 of file BIG2DEMO.H.

#define INF_SORTIE 12

Definition at line 47 of file BIG2DEMO.H.

#define INFOS 5

Definition at line 45 of file BIG2DEMO.H.

#define M_ALERTE 18

Definition at line 9 of file BIG2DEMO.H.

#define M_FORMLIBRE 17

Definition at line 8 of file BIG2DEMO.H.

#define M_INFOS 8

Definition at line 7 of file BIG2DEMO.H.

#define M_QUITTER 19

Definition at line 10 of file BIG2DEMO.H.

#define M_WFORMGRAND 22

Definition at line 12 of file BIG2DEMO.H.

#define M_WFORMPETIT 21

Definition at line 11 of file BIG2DEMO.H.

#define M_WMENU 24

Definition at line 14 of file BIG2DEMO.H.

#define M_WWIND 23

Definition at line 13 of file BIG2DEMO.H.

#define MENU 0

Definition at line 3 of file BIG2DEMO.H.

#define MERCI 16

Definition at line 126 of file BIG2DEMO.H.

#define MH_HISTO 3

Definition at line 102 of file BIG2DEMO.H.

#define MHIERA 10

Definition at line 101 of file BIG2DEMO.H.

#define MW_AL 13

Definition at line 99 of file BIG2DEMO.H.

#define MW_ALERTE 11

Definition at line 98 of file BIG2DEMO.H.

#define MW_IMAGE 10

Definition at line 97 of file BIG2DEMO.H.

#define MW_INFOS 8

Definition at line 96 of file BIG2DEMO.H.

#define MWH_ICN0 1

Definition at line 115 of file BIG2DEMO.H.

#define MWH_ICN1 2

Definition at line 116 of file BIG2DEMO.H.

#define MWH_ICN2 3

Definition at line 117 of file BIG2DEMO.H.

#define MWH_ICN3 4

Definition at line 118 of file BIG2DEMO.H.

#define MWH_ICN4 5

Definition at line 119 of file BIG2DEMO.H.

#define MWH_ICN5 6

Definition at line 120 of file BIG2DEMO.H.

#define MWH_ICN6 7

Definition at line 121 of file BIG2DEMO.H.

#define MWH_ICN7 8

Definition at line 122 of file BIG2DEMO.H.

#define MWH_ICN8 9

Definition at line 123 of file BIG2DEMO.H.

#define MWH_ICN9 10

Definition at line 124 of file BIG2DEMO.H.

#define P_AIDE 18

Definition at line 37 of file BIG2DEMO.H.

#define P_ANNULE 19

Definition at line 38 of file BIG2DEMO.H.

#define P_CONFIRME 17

Definition at line 36 of file BIG2DEMO.H.

#define PETITFORM 7

Definition at line 52 of file BIG2DEMO.H.

#define PF_AIDE 10

Definition at line 61 of file BIG2DEMO.H.

#define PF_ANNULE 9

Definition at line 60 of file BIG2DEMO.H.

#define PF_APPLIQUE 11

Definition at line 62 of file BIG2DEMO.H.

#define PF_BC1 2

Definition at line 53 of file BIG2DEMO.H.

#define PF_BC2 3

Definition at line 54 of file BIG2DEMO.H.

#define PF_CHAMP1 4

Definition at line 55 of file BIG2DEMO.H.

#define PF_CHAMP2 5

Definition at line 56 of file BIG2DEMO.H.

#define PF_CHAMP3 6

Definition at line 57 of file BIG2DEMO.H.

#define PF_CHAMP4 7

Definition at line 58 of file BIG2DEMO.H.

#define PF_COLOR 14

Definition at line 65 of file BIG2DEMO.H.

#define PF_CONFIRME 8

Definition at line 59 of file BIG2DEMO.H.

#define PF_RAZ 12

Definition at line 63 of file BIG2DEMO.H.

#define PF_TRAME 13

Definition at line 64 of file BIG2DEMO.H.

#define POP_UP1 3

Definition at line 41 of file BIG2DEMO.H.

#define POP_UP2 4

Definition at line 43 of file BIG2DEMO.H.

#define POPUP_ICN 11

Definition at line 104 of file BIG2DEMO.H.

#define PU_LIBRE 12

Definition at line 106 of file BIG2DEMO.H.

#define PUL_ALERT 3

Definition at line 107 of file BIG2DEMO.H.

#define PUL_WMENU 10

Definition at line 108 of file BIG2DEMO.H.

#define SIZES 18

Definition at line 136 of file BIG2DEMO.H.

#define T_BUREAU 3

Definition at line 4 of file BIG2DEMO.H.

#define T_FENETRES 5

Definition at line 6 of file BIG2DEMO.H.

#define T_FICHIER 4

Definition at line 5 of file BIG2DEMO.H.

#define TIT_HIST 10

Definition at line 164 of file BIG2DEMO.H.

#define TIT_IMG 8

Definition at line 160 of file BIG2DEMO.H.

#define TIT_MENU 9

Definition at line 162 of file BIG2DEMO.H.

#define TIT_TXT 7

Definition at line 158 of file BIG2DEMO.H.

#define TITRE_GF 4

Definition at line 152 of file BIG2DEMO.H.

#define TITRE_PF 3

Definition at line 150 of file BIG2DEMO.H.

#define TITREACC 12

Definition at line 168 of file BIG2DEMO.H.

#define TL_CENTER 3

Definition at line 131 of file BIG2DEMO.H.

#define TL_FONT 5

Definition at line 133 of file BIG2DEMO.H.

#define TL_INV 1

Definition at line 129 of file BIG2DEMO.H.

#define TL_LEFT 2

Definition at line 130 of file BIG2DEMO.H.

#define TL_RIGHT 4

Definition at line 132 of file BIG2DEMO.H.

#define TL_SIZE 6

Definition at line 134 of file BIG2DEMO.H.

#define TOOL 17

Definition at line 128 of file BIG2DEMO.H.

#define TRAMES 20

Definition at line 140 of file BIG2DEMO.H.

#define TW_ACC 13

Definition at line 170 of file BIG2DEMO.H.

#define TW_ALERTS 5

Definition at line 95 of file BIG2DEMO.H.

#define TW_BUREAU 3

Definition at line 93 of file BIG2DEMO.H.

#define TW_OPTIONS 4

Definition at line 94 of file BIG2DEMO.H.

#define TXT1 15

Definition at line 34 of file BIG2DEMO.H.

#define TXT2 16

Definition at line 35 of file BIG2DEMO.H.

#define W_MENU 9

Definition at line 92 of file BIG2DEMO.H.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DIAL.C File Reference

BIG2DIAL.C File Reference

#include <BIG2.H>
#include "BIG2DIAL.H"
#include "BIG2HELP.H"
#include "BIG2FOR1.H"
#include "BIG2FOR2.H"
#include "BIG2DIVR.H"
#include "BIG2EDIT.H"
#include "BIG2WINB.H"
#include "BIG2WIND.H"
#include "BIG2EVTW.H"

Go to the source code of this file.

Functions

int | dialog_light (int flags, OBJECT *address, int f, int fl_rb, int form_pu, MFDB *img, int fl_move)
int | dialog (int flags, OBJECT *address, int f, int fl_rb, int form_pu, MFDB *img, int fl_move)
Manage all the events in BIG.
int | dlg_keybd (OBJECT *adresse, int f, int *dedans, int *fl_cla)
int | dlg_mesag (void)
int | dlg_button (OBJECT *adresse, int f, int dedans, int fl_cla, MFDB *img, int fl_depl, int fl_notop)
void | dlg_mouse (void)
Change mouse pointer in working area.
int | option_find (int xm, int ym)
int | menu_ok (void)
int | dial (OBJECT *address, MFDB *img, int fl_move)

Variables

int | topp = TRUE

Function Documentation

int dial | ( | OBJECT * | address,
 |  | MFDB * | img,
 |  | int | fl_move
 | ) |  |

Definition at line 1510 of file BIG2DIAL.C.

int dialog_light | ( | int | flags,
 |  | OBJECT * | address,
 |  | int | f,
 |  | int | fl_rb,
 |  | int | form_pu,
 |  | MFDB * | img,
 |  | int | fl_move
 | ) |  |

Definition at line 220 of file BIG2DIAL.C.

int dlg_button | ( | OBJECT * | adresse,
 |  | int | f,
 |  | int | dedans,
 |  | int | fl_cla,
 |  | MFDB * | img,
 |  | int | fl_depl,
 |  | int | fl_notop
 | ) |  |

Definition at line 949 of file BIG2DIAL.C.

int dlg_keybd | ( | OBJECT * | adresse,
 |  | int | f,
 |  | int * | dedans,
 |  | int * | fl_cla
 | ) |  |

Definition at line 310 of file BIG2DIAL.C.

int dlg_mesag ( void )

Definition at line 785 of file BIG2DIAL.C.

int menu_ok ( void )

Definition at line 1494 of file BIG2DIAL.C.

int option_find | ( | int | xm,
 |  | int | ym
 | ) |  |

Definition at line 1471 of file BIG2DIAL.C.

Variable Documentation

int topp = TRUE

Definition at line 15 of file BIG2DIAL.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DIAL.H File Reference

BIG2DIAL.H File Reference

Go to the source code of this file.

Functions

int | dlg_keybd (OBJECT *adresse, int f, int *dedans, int *fl_cla)
int | dlg_mesag (void)
int | dlg_button (OBJECT *adresse, int f, int dedans, int fl_cla, MFDB *img, int fl_depl, int fl_notop)
int | option_find (int xm, int ym)
int | menu_ok (void)
int | dial (OBJECT *address, MFDB *img, int fl_move)

Variables

int | id_top
int | old_top
int | pal_img
MOBLK | mouse
int | ap_id
int | event
int | buf []
int | mx
int | my
int | mk
int | edit
int | pos
int | object
int | kbd
int | key
int | clik
int | wind
t_display work_display
t_desktop bureau
OBJECT * | adr_menu
OBJECT * | adr_desk
OBJECT ** | ir_trindex
FNCP * fnc
BigWind * win

Detailed Description

Todo:
BRIEF
Todo:
LONG
Author:
Claude Attard (Designer) / Jean Louis-Guerin (Maintenance)
Revision
Date
Log

Definition in file BIG2DIAL.H.

Function Documentation

int dial | ( | OBJECT * | address,
 |  | MFDB * | img,
 |  | int | fl_move
 | ) |  |

Definition at line 1510 of file BIG2DIAL.C.

int dlg_button | ( | OBJECT * | adresse,
 |  | int | f,
 |  | int | dedans,
 |  | int | fl_cla,
 |  | MFDB * | img,
 |  | int | fl_depl,
 |  | int | fl_notop
 | ) |  |

Definition at line 949 of file BIG2DIAL.C.

int dlg_keybd | ( | OBJECT * | adresse,
 |  | int | f,
 |  | int * | dedans,
 |  | int * | fl_cla
 | ) |  |

Definition at line 310 of file BIG2DIAL.C.

int dlg_mesag ( void )

Definition at line 785 of file BIG2DIAL.C.

int menu_ok ( void )

Definition at line 1494 of file BIG2DIAL.C.

int option_find | ( | int | xm,
 |  | int | ym
 | ) |  |

Definition at line 1471 of file BIG2DIAL.C.

Variable Documentation

int event

Definition at line 25 of file BIG2INIT.C.

int id_top

Definition at line 34 of file BIG2INIT.C.

MOBLK mouse

Definition at line 45 of file BIG2INIT.C.

int old_top

Definition at line 33 of file BIG2INIT.C.

int pal_img

Definition at line 32 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DIVR.C File Reference

BIG2DIVR.C File Reference

#include <BIG2.H>
#include "BIG2DIVR.H"

Go to the source code of this file.

Functions

char * | path (char *pat)
Get the default path of the application.
long | exist (char *name, int att)
Return size of a file if it exist.
void | set_palette (int index)
New value for the pallet.
long | timer (void)
New value for the pallet.
void | stdkey (unsigned char *k)
char * | trim (char *str)
Trim tab/spaces at begin/end of a string.
int | rc_intersect (GRECT *p1, GRECT *p2)
Find common zone between two areas of screen.
void | clipp (int clip_flag, GRECT *area)
Turn on/off clipping of a screen area.
void | send_mesag (int type, int wi, int x, int y, int w, int h)
Send message to itself.
int | selector (char *pat, char *ext, char *file, char *title)
Call GEM File selector.
void | extension (char *filename, char *ext)
Forces a specific extension on file or path name.
COOKIE * | first_cookie (void)
First Cookie of the cookie jar.
COOKIE * | next_cookie (COOKIE *ck)
Next Cookie of the cookie jar.
COOKIE * | vq_cookie (long id)
Query for a Cookie by id.
COOKIE * | vq_cookie_c (char *c)
Query for a Cookie by name.
void | fill_tab (int *pxy, int n,...)
First Cookie of the cookie jar.
void | empty (int evnmt)
Empty keyboard or message buffer.

Function Documentation

void stdkey ( unsigned char * k )

Definition at line 158 of file BIG2DIVR.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DIVR.H File Reference

BIG2DIVR.H File Reference

#include <stdarg.h>

Go to the source code of this file.

Functions

void | stdkey (unsigned char *k)

Variables

int | pal_img
int | ap_id
int | buf []
int | key
t_display work_display
BigWind * win

Function Documentation

void stdkey ( unsigned char * k )

Definition at line 158 of file BIG2DIVR.C.

Variable Documentation

int pal_img

Definition at line 32 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2EDIT.C File Reference

BIG2EDIT.C File Reference

#include <BIG2.H>
#include "BIG2EDIT.H"

Go to the source code of this file.

Functions

int | exist_edit (OBJECT *adr)
void | set_text (OBJECT *adr, int object, char *string)
Place text in an object.
char * | get_text (OBJECT *adr, int object)
Get text in an object.
void | empty_edit (OBJECT *adr)
int | pos_curs (OBJECT *adr, int ed, int mx, int f, int index, int po)
int | prev (OBJECT *adr, int ob)
int | next (OBJECT *adr, int ob)
void | first (OBJECT *adr, int *editable, int *position)
void | last (OBJECT *adr, int *editable, int *position)
int | next_word (OBJECT *adr, int ob, int posi)
int | prev_word (OBJECT *adr, int ob, int posi)
void | objc_xedit (OBJECT *adr, int car, int ed, int *po, int action, int f, int index)
BIG equivalent to GEM objc_edit() function.
int | valide (char *ascii, char *valid, int p)
char * | start_edit (char *pt)
void | draw_curs (OBJECT *adr, int ed, int *po, int action)
void | copy (OBJECT *adr, int ed)
void | cut (OBJECT *adr, int ed)
void | paste (OBJECT *adr, int ed)

Function Documentation

void copy | ( | OBJECT * | adr,
 |  | int | ed
 | ) |  |

Definition at line 910 of file BIG2EDIT.C.

void cut | ( | OBJECT * | adr,
 |  | int | ed
 | ) |  |

Definition at line 922 of file BIG2EDIT.C.

void draw_curs | ( | OBJECT * | adr,
 |  | int | ed,
 |  | int * | po,
 |  | int | action
 | ) |  |

Definition at line 848 of file BIG2EDIT.C.

void empty_edit ( OBJECT * adr )

Definition at line 98 of file BIG2EDIT.C.

int exist_edit ( OBJECT * adr )

Definition at line 9 of file BIG2EDIT.C.

void first | ( | OBJECT * | adr,
 |  | int * | editable,
 |  | int * | position
 | ) |  |

Definition at line 238 of file BIG2EDIT.C.

void last | ( | OBJECT * | adr,
 |  | int * | editable,
 |  | int * | position
 | ) |  |

Definition at line 278 of file BIG2EDIT.C.

int next | ( | OBJECT * | adr,
 |  | int | ob
 | ) |  |

Definition at line 216 of file BIG2EDIT.C.

int next_word | ( | OBJECT * | adr,
 |  | int | ob,
 |  | int | posi
 | ) |  |

Definition at line 320 of file BIG2EDIT.C.

void paste | ( | OBJECT * | adr,
 |  | int | ed
 | ) |  |

Definition at line 936 of file BIG2EDIT.C.

int pos_curs | ( | OBJECT * | adr,
 |  | int | ed,
 |  | int | mx,
 |  | int | f,
 |  | int | index,
 |  | int | po
 | ) |  |

Definition at line 110 of file BIG2EDIT.C.

int prev | ( | OBJECT * | adr,
 |  | int | ob
 | ) |  |

Definition at line 194 of file BIG2EDIT.C.

int prev_word | ( | OBJECT * | adr,
 |  | int | ob,
 |  | int | posi
 | ) |  |

Definition at line 346 of file BIG2EDIT.C.

char* start_edit ( char * pt )

Definition at line 840 of file BIG2EDIT.C.

int valide | ( | char * | ascii,
 |  | char * | valid,
 |  | int | p
 | ) |  |

Definition at line 762 of file BIG2EDIT.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2EDIT.H File Reference

BIG2EDIT.H File Reference

Go to the source code of this file.

Functions

int | exist_edit (OBJECT *adr)
void | empty_edit (OBJECT *adr)
int | pos_curs (OBJECT *adr, int ed, int mx, int f, int index, int po)
int | prev (OBJECT *adr, int ob)
int | next (OBJECT *adr, int ob)
void | first (OBJECT *adr, int *editable, int *position)
void | last (OBJECT *adr, int *editable, int *position)
int | next_word (OBJECT *adr, int ob, int posi)
int | prev_word (OBJECT *adr, int ob, int posi)
int | valide (char *ascii, char *valid, int p)
char * | start_edit (char *pt)
void | draw_curs (OBJECT *adr, int ed, int *po, int action)
void | copy (OBJECT *adr, int ed)
void | cut (OBJECT *adr, int ed)
void | paste (OBJECT *adr, int ed)

Variables

int | edit
int | object
int | kbd
int | key
t_display work_display
char * | buffer

Function Documentation

void copy | ( | OBJECT * | adr,
 |  | int | ed
 | ) |  |

Definition at line 910 of file BIG2EDIT.C.

void cut | ( | OBJECT * | adr,
 |  | int | ed
 | ) |  |

Definition at line 922 of file BIG2EDIT.C.

void draw_curs | ( | OBJECT * | adr,
 |  | int | ed,
 |  | int * | po,
 |  | int | action
 | ) |  |

Definition at line 848 of file BIG2EDIT.C.

void empty_edit ( OBJECT * adr )

Definition at line 98 of file BIG2EDIT.C.

int exist_edit ( OBJECT * adr )

Definition at line 9 of file BIG2EDIT.C.

void first | ( | OBJECT * | adr,
 |  | int * | editable,
 |  | int * | position
 | ) |  |

Definition at line 238 of file BIG2EDIT.C.

void last | ( | OBJECT * | adr,
 |  | int * | editable,
 |  | int * | position
 | ) |  |

Definition at line 278 of file BIG2EDIT.C.

int next | ( | OBJECT * | adr,
 |  | int | ob
 | ) |  |

Definition at line 216 of file BIG2EDIT.C.

int next_word | ( | OBJECT * | adr,
 |  | int | ob,
 |  | int | posi
 | ) |  |

Definition at line 320 of file BIG2EDIT.C.

void paste | ( | OBJECT * | adr,
 |  | int | ed
 | ) |  |

Definition at line 936 of file BIG2EDIT.C.

int pos_curs | ( | OBJECT * | adr,
 |  | int | ed,
 |  | int | mx,
 |  | int | f,
 |  | int | index,
 |  | int | po
 | ) |  |

Definition at line 110 of file BIG2EDIT.C.

int prev | ( | OBJECT * | adr,
 |  | int | ob
 | ) |  |

Definition at line 194 of file BIG2EDIT.C.

int prev_word | ( | OBJECT * | adr,
 |  | int | ob,
 |  | int | posi
 | ) |  |

Definition at line 346 of file BIG2EDIT.C.

char* start_edit ( char * pt )

Definition at line 840 of file BIG2EDIT.C.

int valide | ( | char * | ascii,
 |  | char * | valid,
 |  | int | p
 | ) |  |

Definition at line 762 of file BIG2EDIT.C.

Variable Documentation

char* buffer

Definition at line 57 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2EVTW.C File Reference

BIG2EVTW.C File Reference

#include <BIG2.H>
#include "BIG2EVTW.H"
#include "BIG2EDIT.H"
#include "BIG2WIND.H"
#include "BIG2WINB.H"

Go to the source code of this file.

Functions

void | wm_arrow (void)
void | redraw (void)
void | topped (void)
void | closed (void)
Close and destroy window.
void | fulled (void)
void | uppage (void)
void | dnpage (void)
void | upline (void)
void | dnline (void)
void | lfpage (void)
void | rtpage (void)
void | lfline (void)
void | rtline (void)
void | hslid (void)
void | vslid (void)
void | sized (void)
void | moved (void)
void | iconise (int index)
Iconify a window.
void | uniconise (int index)
Deiconify a Window.
void | alliconise (int index)
Iconyfy all open windows.
void | full_wform (void)
void | size_wform (void)

Variables

GRECT | zclip

Function Documentation

void dnline ( void )

Definition at line 458 of file BIG2EVTW.C.

void dnpage ( void )

Definition at line 361 of file BIG2EVTW.C.

void full_wform ( void )

Definition at line 1141 of file BIG2EVTW.C.

void fulled ( void )

Definition at line 256 of file BIG2EVTW.C.

void hslid ( void )

Definition at line 731 of file BIG2EVTW.C.

void lfline ( void )

Definition at line 586 of file BIG2EVTW.C.

void lfpage ( void )

Definition at line 531 of file BIG2EVTW.C.

void moved ( void )

Definition at line 834 of file BIG2EVTW.C.

void redraw ( void )

Definition at line 53 of file BIG2EVTW.C.

void rtline ( void )

Definition at line 657 of file BIG2EVTW.C.

void rtpage ( void )

Definition at line 556 of file BIG2EVTW.C.

void size_wform ( void )

Definition at line 1212 of file BIG2EVTW.C.

void sized ( void )

Definition at line 799 of file BIG2EVTW.C.

void topped ( void )

Definition at line 164 of file BIG2EVTW.C.

void upline ( void )

Definition at line 388 of file BIG2EVTW.C.

void uppage ( void )

Definition at line 336 of file BIG2EVTW.C.

void vslid ( void )

Definition at line 765 of file BIG2EVTW.C.

void wm_arrow ( void )

Definition at line 13 of file BIG2EVTW.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2EVTW.H File Reference

BIG2EVTW.H File Reference

Go to the source code of this file.

Functions

void | wm_arrow (void)
void | redraw (void)
void | hslid (void)
void | vslid (void)
void | uppage (void)
void | dnpage (void)
void | lfpage (void)
void | rtpage (void)
void | upline (void)
void | dnline (void)
void | lfline (void)
void | rtline (void)
void | topped (void)
void | fulled (void)
void | sized (void)
void | moved (void)
void | full_wform (void)
void | size_wform (void)

Variables

int | buf []
t_ident_hard_soft desc_hard_soft
t_display work_display
t_desktop bureau
BigWind * win

Function Documentation

void dnline ( void )

Definition at line 458 of file BIG2EVTW.C.

void dnpage ( void )

Definition at line 361 of file BIG2EVTW.C.

void full_wform ( void )

Definition at line 1141 of file BIG2EVTW.C.

void fulled ( void )

Definition at line 256 of file BIG2EVTW.C.

void hslid ( void )

Definition at line 731 of file BIG2EVTW.C.

void lfline ( void )

Definition at line 586 of file BIG2EVTW.C.

void lfpage ( void )

Definition at line 531 of file BIG2EVTW.C.

void moved ( void )

Definition at line 834 of file BIG2EVTW.C.

void redraw ( void )

Definition at line 53 of file BIG2EVTW.C.

void rtline ( void )

Definition at line 657 of file BIG2EVTW.C.

void rtpage ( void )

Definition at line 556 of file BIG2EVTW.C.

void size_wform ( void )

Definition at line 1212 of file BIG2EVTW.C.

void sized ( void )

Definition at line 799 of file BIG2EVTW.C.

void topped ( void )

Definition at line 164 of file BIG2EVTW.C.

void upline ( void )

Definition at line 388 of file BIG2EVTW.C.

void uppage ( void )

Definition at line 336 of file BIG2EVTW.C.

void vslid ( void )

Definition at line 765 of file BIG2EVTW.C.

void wm_arrow ( void )

Definition at line 13 of file BIG2EVTW.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2FOR1.C File Reference

BIG2FOR1.C File Reference

#include <BIG2.H>
#include "BIG2DIAL.H"
#include "BIG2FOR1.H"
#include "BIG2FOR2.H"
#include "BIG2EDIT.H"
#include "BIG2WIND.H"

Go to the source code of this file.

Functions

void | formm_draw (OBJECT *adr, int ed, int flmove, MFDB *img)
Display a movable form.
void | formm_undraw (OBJECT *adr, MFDB *img)
Erase a movable form.
void | formf_draw (OBJECT *adr, int ed)
Display a traditional form.
void | formf_undraw (OBJECT *adr)
Erase a traditional form.
int | menu_hierarch (int option)
void | pop_up (OBJECT *adr, int object)
void | pop_liste (OBJECT *adr, int object)
int | match (OBJECT *adr, int button)
Search for a text match in pop-up pop-list.
void | set_popup (OBJECT *adr, int button, int option)
Link Text to pop-up.
void | next_option (OBJECT *adr, int object, int form)
int | create_scroll (OBJECT *pu, int y, int *nb, int first)
int | free_popup (int posx, int posy, int tree, OBJECT *adr)
Call a free pop-up.

Function Documentation

int create_scroll | ( | OBJECT * | pu,
 |  | int | y,
 |  | int * | nb,
 |  | int | first
 | ) |  |

Definition at line 1448 of file BIG2FOR1.C.

int menu_hierarch ( int option )

Definition at line 196 of file BIG2FOR1.C.

void next_option | ( | OBJECT * | adr,
 |  | int | object,
 |  | int | form
 | ) |  |

Definition at line 1354 of file BIG2FOR1.C.

void pop_liste | ( | OBJECT * | adr,
 |  | int | object
 | ) |  |

Definition at line 823 of file BIG2FOR1.C.

void pop_up | ( | OBJECT * | adr,
 |  | int | object
 | ) |  |

Definition at line 462 of file BIG2FOR1.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2FOR1.H File Reference

BIG2FOR1.H File Reference

#include "BIG2INCL.H"

Go to the source code of this file.

Functions

int | menu_hierarch (int option)
void | pop_up (OBJECT *adr, int object)
void | pop_liste (OBJECT *adr, int object)
void | next_option (OBJECT *adr, int object, int form)
int | create_scroll (OBJECT *pu, int y, int *nb, int first)

Variables

int | ap_id
int | buf []
int | edit
int | pos
int | object
t_display work_display
t_desktop bureau
OBJECT * | adr_menu
OBJECT * | scroll
MFDB | screen
OBJECT ** | ir_trindex
FNCP * fnc
OBJECT * | bi_trindex []

Function Documentation

int create_scroll | ( | OBJECT * | pu,
 |  | int | y,
 |  | int * | nb,
 |  | int | first
 | ) |  |

Definition at line 1448 of file BIG2FOR1.C.

int menu_hierarch ( int option )

Definition at line 196 of file BIG2FOR1.C.

void next_option | ( | OBJECT * | adr,
 |  | int | object,
 |  | int | form
 | ) |  |

Definition at line 1354 of file BIG2FOR1.C.

void pop_liste | ( | OBJECT * | adr,
 |  | int | object
 | ) |  |

Definition at line 823 of file BIG2FOR1.C.

void pop_up | ( | OBJECT * | adr,
 |  | int | object
 | ) |  |

Definition at line 462 of file BIG2FOR1.C.

Variable Documentation

OBJECT* bi_trindex[]
MFDB screen

Definition at line 60 of file BIG2INIT.C.

OBJECT* scroll

Definition at line 58 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2FOR2.C File Reference

BIG2FOR2.C File Reference

#include <BIG2.H>
#include "BIG2FOR2.H"
#include "BIG2USR1.H"
#include "BIG2DIAL.H"
#include "BIG2DIVR.H"
#include "BIG2EDIT.H"

Go to the source code of this file.

Defines

#define | THELP "Help"
#define | TUNDO "Undo"
#define | TBACKSP "Backsp"
#define | TBKSP "Bksp"
#define | TDEL "Del"
#define | TDELETE "Delete"
#define | TINSERT "Insert"
#define | TCLR "Clr"
#define | TF1 "F1"
#define | TF2 "F2"
#define | TF3 "F3"
#define | TF4 "F4"
#define | TF5 "F5"
#define | TF6 "F6"
#define | TF7 "F7"
#define | TF8 "F8"
#define | TF9 "F9"
#define | TF10 "F10"

Functions

void | get_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
Saves the image of an area in a MFDB.
void | put_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
Restore the image of an area from a MFDB.
int | scan (OBJECT *adr, int f)
int | scan_wmenu (int index, char touc)
int | scan_wtool (int index, char touc)
int | scan_menu (char touc)
int | scan_form (char touc, OBJECT *adr)
int | find_touche (char *chaine, int *position)
void | find_special (char *chaine, int *spe, int j)
int | m_title (OBJECT *adresse, int option)
int cdecl | parent (OBJECT *adr, int object)
Return the number of the parent object.
void | bak_rsc (OBJECT *tree, char **bak)
Save the state of a Form.
void | res_rsc (OBJECT *tree, char **bak)
Restore the state of a Form.
void | help (OBJECT *adr, int obj)
void | move_form (OBJECT *adr, int x, int y, int w, int h, MFDB *img, int fl_depl)
void | create_hierm (OBJECT *adr)
Place an arrow in a menu.
int | big_alert (int button, int number, char *str, int fl_alrt)
Call and manage a BIG Alert.
char * | get_string (int number)
Return a pointer to a free string.
OBJECT * | create_popup (int nbre, char *liste)
Create text pop-up menu.
void | form_attach (int tree, int obj, char formular)
Link pop-up object and a sub-menu.
void | bulle_attach (int tree, int obj, char bulle)
Create a link between an object an a free string of a bubble-help.
void | set_interface (int under, int cunder, int ctxt_under, int cicn_coche, int ctxt_coche, int cicn_radio, int ctxt_radio, int cicn_popup, int ctxt_popup, int cmove, int cgrastr, int clin_frame, int ctxt_frame, int cniceline)
Modify aspect parameters of BIG object.
void | set_radio (OBJECT *adr, int rb)
Select a radio button in a group.
int | get_radio (OBJECT *adr, int rb)
Find the selected radio-button in a group.
void | set_attributes (OBJECT *adr, int ob, int attr)
Set graphical attributes of B_GRASTR or B_SMSTR.

Variables

Obj_user look

Define Documentation

#define TBACKSP "Backsp"

Definition at line 14 of file BIG2FOR2.C.

#define TBKSP "Bksp"

Definition at line 15 of file BIG2FOR2.C.

#define TCLR "Clr"

Definition at line 19 of file BIG2FOR2.C.

#define TDEL "Del"

Definition at line 16 of file BIG2FOR2.C.

#define TDELETE "Delete"

Definition at line 17 of file BIG2FOR2.C.

#define TF1 "F1"

Definition at line 20 of file BIG2FOR2.C.

#define TF10 "F10"

Definition at line 29 of file BIG2FOR2.C.

#define TF2 "F2"

Definition at line 21 of file BIG2FOR2.C.

#define TF3 "F3"

Definition at line 22 of file BIG2FOR2.C.

#define TF4 "F4"

Definition at line 23 of file BIG2FOR2.C.

#define TF5 "F5"

Definition at line 24 of file BIG2FOR2.C.

#define TF6 "F6"

Definition at line 25 of file BIG2FOR2.C.

#define TF7 "F7"

Definition at line 26 of file BIG2FOR2.C.

#define TF8 "F8"

Definition at line 27 of file BIG2FOR2.C.

#define TF9 "F9"

Definition at line 28 of file BIG2FOR2.C.

#define THELP "Help"

Definition at line 12 of file BIG2FOR2.C.

#define TINSERT "Insert"

Definition at line 18 of file BIG2FOR2.C.

#define TUNDO "Undo"

Definition at line 13 of file BIG2FOR2.C.

Function Documentation

void find_special | ( | char * | chaine,
 |  | int * | spe,
 |  | int | j
 | ) |  |

Definition at line 586 of file BIG2FOR2.C.

int find_touche | ( | char * | chaine,
 |  | int * | position
 | ) |  |

Definition at line 473 of file BIG2FOR2.C.

void help | ( | OBJECT * | adr,
 |  | int | obj
 | ) |  |

Definition at line 843 of file BIG2FOR2.C.

int m_title | ( | OBJECT * | adresse,
 |  | int | option
 | ) |  |

Definition at line 609 of file BIG2FOR2.C.

void move_form | ( | OBJECT * | adr,
 |  | int | x,
 |  | int | y,
 |  | int | w,
 |  | int | h,
 |  | MFDB * | img,
 |  | int | fl_depl
 | ) |  |

Definition at line 912 of file BIG2FOR2.C.

int scan | ( | OBJECT * | adr,
 |  | int | f
 | ) |  |

Definition at line 114 of file BIG2FOR2.C.

int scan_form | ( | char | touc,
 |  | OBJECT * | adr
 | ) |  |

Definition at line 431 of file BIG2FOR2.C.

int scan_menu ( char touc )

Definition at line 336 of file BIG2FOR2.C.

int scan_wmenu | ( | int | index,
 |  | char | touc
 | ) |  |

Definition at line 193 of file BIG2FOR2.C.

int scan_wtool | ( | int | index,
 |  | char | touc
 | ) |  |

Definition at line 292 of file BIG2FOR2.C.

Variable Documentation

Obj_user look

Definition at line 9 of file BIG2USR1.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2FOR2.H File Reference

BIG2FOR2.H File Reference

#include "BIG2INCL.H"

Go to the source code of this file.

Functions

void | help (OBJECT *adr, int obj)
void | move_form (OBJECT *adr, int x, int y, int w, int h, MFDB *img, int fl_depl)
int | scan (OBJECT *adr, int f)
int | scan_wmenu (int index, char touc)
int | scan_wtool (int index, char touc)
int | scan_menu (char touc)
int | scan_form (char touc, OBJECT *adr)
int | find_touche (char *chaine, int *position)
void | find_special (char *chaine, int *spe, int j)
int | m_title (OBJECT *adresse, int option)

Variables

int | event
int | buf []
int | mx
int | my
int | edit
int | pos
int | object
int | kbd
int | key
int | clik
t_display work_display
t_desktop bureau
OBJECT * | adr_menu
MFDB | screen
OBJECT ** | ir_trindex
char ** | ir_frstr
BigWind * win
OBJECT * | bi_trindex []

Function Documentation

void find_special | ( | char * | chaine,
 |  | int * | spe,
 |  | int | j
 | ) |  |

Definition at line 586 of file BIG2FOR2.C.

int find_touche | ( | char * | chaine,
 |  | int * | position
 | ) |  |

Definition at line 473 of file BIG2FOR2.C.

void help | ( | OBJECT * | adr,
 |  | int | obj
 | ) |  |

Definition at line 843 of file BIG2FOR2.C.

int m_title | ( | OBJECT * | adresse,
 |  | int | option
 | ) |  |

Definition at line 609 of file BIG2FOR2.C.

void move_form | ( | OBJECT * | adr,
 |  | int | x,
 |  | int | y,
 |  | int | w,
 |  | int | h,
 |  | MFDB * | img,
 |  | int | fl_depl
 | ) |  |

Definition at line 912 of file BIG2FOR2.C.

int scan | ( | OBJECT * | adr,
 |  | int | f
 | ) |  |

Definition at line 114 of file BIG2FOR2.C.

int scan_form | ( | char | touc,
 |  | OBJECT * | adr
 | ) |  |

Definition at line 431 of file BIG2FOR2.C.

int scan_menu ( char touc )

Definition at line 336 of file BIG2FOR2.C.

int scan_wmenu | ( | int | index,
 |  | char | touc
 | ) |  |

Definition at line 193 of file BIG2FOR2.C.

int scan_wtool | ( | int | index,
 |  | char | touc
 | ) |  |

Definition at line 292 of file BIG2FOR2.C.

Variable Documentation

OBJECT* bi_trindex[]
int event

Definition at line 25 of file BIG2INIT.C.

char** ir_frstr

Definition at line 63 of file BIG2INIT.C.

MFDB screen

Definition at line 60 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: big2hdoc.h File Reference

big2hdoc.h File Reference

Go to the source code of this file.

Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2HELP.C File Reference

BIG2HELP.C File Reference

#include <BIG2.H>
#include "BIG2HELP.H"

Go to the source code of this file.

Defines

#define | CharProLine 34

Functions

int | find_zone (int mx, int my)
void | affiche_bulle (int mode, int x, int y, int w, int h, char *t, int obj, int top, OBJECT *form)
void | inline_help (int index, int mx, int my, int top, OBJECT *adr)

Variables

int | aide_en_ligne = FALSE

Define Documentation

#define CharProLine 34

Definition at line 12 of file BIG2HELP.C.

Function Documentation

void affiche_bulle | ( | int | mode,
 |  | int | x,
 |  | int | y,
 |  | int | w,
 |  | int | h,
 |  | char * | t,
 |  | int | obj,
 |  | int | top,
 |  | OBJECT * | form
 | ) |  |

Definition at line 18 of file BIG2HELP.C.

int find_zone | ( | int | mx,
 |  | int | my
 | ) |  |

Definition at line 273 of file BIG2HELP.C.

void inline_help | ( | int | index,
 |  | int | mx,
 |  | int | my,
 |  | int | top,
 |  | OBJECT * | adr
 | ) |  |

Definition at line 195 of file BIG2HELP.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2HELP.H File Reference

BIG2HELP.H File Reference

Go to the source code of this file.

Functions

void | inline_help (int index, int mx, int my, int top, OBJECT *adr)

Variables

int | mx
int | my
int | mk
t_ident_hard_soft desc_hard_soft
t_display work_display
OBJECT ** | ir_trindex
char ** | ir_frstr
BigWind * win

Function Documentation

void inline_help | ( | int | index,
 |  | int | mx,
 |  | int | my,
 |  | int | top,
 |  | OBJECT * | adr
 | ) |  |

Definition at line 195 of file BIG2HELP.C.

Variable Documentation

char** ir_frstr

Definition at line 63 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2INCL.H File Reference

BIG2INCL.H File Reference

Go to the source code of this file.

Defines

#define | BIGALERTE 0
#define | AL_BKGR 0
#define | AL_MOVE 1
#define | AL_ST1 2
#define | AL_ST2 3
#define | AL_ST3 4
#define | AL_ST4 5
#define | AL_ST5 6
#define | AL_BU1 7
#define | AL_BU2 8
#define | AL_BU3 9
#define | AL_IC 10
#define | BIGICN 1
#define | BIGARRM 2
#define | BA_BKGR 0
#define | BA_LF 1
#define | BA_RT 2
#define | IMG_USER 3
#define | RBHN 1
#define | RBHS 2
#define | RBMN 3
#define | RBMS 4
#define | BCHN 5
#define | BCHS 6
#define | BCMN 7
#define | BCMS 8
#define | PUH 9
#define | PUM 10
#define | BIGARRS 4
#define | SC_BKGR 0
#define | SC_UP 1
#define | SC_DN 2
#define | BIGLIST 5
#define | BL_BKGR 1
#define | BL_S1 2
#define | BL_S2 3
#define | BL_S3 4
#define | BL_S4 5
#define | BL_S5 6
#define | BL_S6 7
#define | BL_S7 8
#define | BL_S8 9
#define | BL_BA 10
#define | BL_UP 11
#define | BL_DN 12
#define | BL_ASC 13
#define | BL_SL 14
#define | BIG_WIND 6
#define | BW_BKGR 0
#define | BW_SIZERUL 1
#define | BW_CLOSER 2
#define | BW_MOVER 3
#define | BW_SMALLER 4
#define | BW_CYCLER 5
#define | BW_FULLER 6
#define | BW_SIZERUR 7
#define | BW_INFO 8
#define | BW_BARRE 9
#define | BW_VBAR 10
#define | BW_UPARROW 11
#define | BW_VELEV 12
#define | BW_VSLIDE 13
#define | BW_DNARROW 14
#define | BW_SIZERDL 15
#define | BW_HBAR 16
#define | BW_LFARROW 17
#define | BW_HELEV 18
#define | BW_HSLIDE 19
#define | BW_RTARROW 20
#define | BW_SIZERDR 21
#define | BW_WORK 22
#define | GADGETS 7
#define | GA_SULH 1
#define | GA_CLOH 2
#define | GA_SMAH 3
#define | GA_CYCH 4
#define | GA_FULH 5
#define | GA_SURH 6
#define | GA_AUPH 7
#define | GA_SLVH 8
#define | GA_ADNH 9
#define | GA_SDLH 10
#define | GA_ALFH 11
#define | GA_SLHH 12
#define | GA_ARTH 13
#define | GA_SDRH 14
#define | GA_SULM 15
#define | GA_CLOM 16
#define | GA_SMAM 17
#define | GA_CYCM 18
#define | GA_FULM 19
#define | GA_SURM 20
#define | GA_AUPM 21
#define | GA_SLVM 22
#define | GA_ADNM 23
#define | GA_SDLM 24
#define | GA_ALFM 25
#define | GA_SLHM 26
#define | GA_ARTM 27
#define | GA_SDRM 28
#define | SELF 8
#define | FS_MOVE 1
#define | FS_TITRE 2
#define | FS_PATH 3
#define | FS_SAISIE 4
#define | FS_BOXL 5
#define | FS_LA 6
#define | FS_LP 21
#define | FS_BOX 22
#define | FS_RETOUR 23
#define | FS_BOXAR 24
#define | FS_ARUP 25
#define | FS_ARDN 26
#define | FS_ASC 27
#define | FS_SLD 28
#define | FS_BOXF 29
#define | FS_BF 30
#define | FS_FILTRE 31
#define | FS_OK 32
#define | FS_ANN 33
#define | AIDE 9
#define | BIGNOT_RSC 0
#define | NOT_WINDOW 1
#define | EXITAUTO 2

Define Documentation

#define AIDE 9

Definition at line 132 of file BIG2INCL.H.

#define AL_BKGR 0

Definition at line 4 of file BIG2INCL.H.

#define AL_BU1 7

Definition at line 11 of file BIG2INCL.H.

#define AL_BU2 8

Definition at line 12 of file BIG2INCL.H.

#define AL_BU3 9

Definition at line 13 of file BIG2INCL.H.

#define AL_IC 10

Definition at line 14 of file BIG2INCL.H.

#define AL_MOVE 1

Definition at line 5 of file BIG2INCL.H.

#define AL_ST1 2

Definition at line 6 of file BIG2INCL.H.

#define AL_ST2 3

Definition at line 7 of file BIG2INCL.H.

#define AL_ST3 4

Definition at line 8 of file BIG2INCL.H.

#define AL_ST4 5

Definition at line 9 of file BIG2INCL.H.

#define AL_ST5 6

Definition at line 10 of file BIG2INCL.H.

#define BA_BKGR 0

Definition at line 19 of file BIG2INCL.H.

#define BA_LF 1

Definition at line 20 of file BIG2INCL.H.

#define BA_RT 2

Definition at line 21 of file BIG2INCL.H.

#define BCHN 5

Definition at line 28 of file BIG2INCL.H.

#define BCHS 6

Definition at line 29 of file BIG2INCL.H.

#define BCMN 7

Definition at line 30 of file BIG2INCL.H.

#define BCMS 8

Definition at line 31 of file BIG2INCL.H.

#define BIG_WIND 6

Definition at line 56 of file BIG2INCL.H.

#define BIGALERTE 0

Definition at line 3 of file BIG2INCL.H.

#define BIGARRM 2

Definition at line 18 of file BIG2INCL.H.

#define BIGARRS 4

Definition at line 35 of file BIG2INCL.H.

#define BIGICN 1

Definition at line 16 of file BIG2INCL.H.

#define BIGLIST 5

Definition at line 40 of file BIG2INCL.H.

#define BIGNOT_RSC 0

Definition at line 134 of file BIG2INCL.H.

#define BL_ASC 13

Definition at line 53 of file BIG2INCL.H.

#define BL_BA 10

Definition at line 50 of file BIG2INCL.H.

#define BL_BKGR 1

Definition at line 41 of file BIG2INCL.H.

#define BL_DN 12

Definition at line 52 of file BIG2INCL.H.

#define BL_S1 2

Definition at line 42 of file BIG2INCL.H.

#define BL_S2 3

Definition at line 43 of file BIG2INCL.H.

#define BL_S3 4

Definition at line 44 of file BIG2INCL.H.

#define BL_S4 5

Definition at line 45 of file BIG2INCL.H.

#define BL_S5 6

Definition at line 46 of file BIG2INCL.H.

#define BL_S6 7

Definition at line 47 of file BIG2INCL.H.

#define BL_S7 8

Definition at line 48 of file BIG2INCL.H.

#define BL_S8 9

Definition at line 49 of file BIG2INCL.H.

#define BL_SL 14

Definition at line 54 of file BIG2INCL.H.

#define BL_UP 11

Definition at line 51 of file BIG2INCL.H.

#define BW_BARRE 9

Definition at line 66 of file BIG2INCL.H.

#define BW_BKGR 0

Definition at line 57 of file BIG2INCL.H.

#define BW_CLOSER 2

Definition at line 59 of file BIG2INCL.H.

#define BW_CYCLER 5

Definition at line 62 of file BIG2INCL.H.

#define BW_DNARROW 14

Definition at line 71 of file BIG2INCL.H.

#define BW_FULLER 6

Definition at line 63 of file BIG2INCL.H.

#define BW_HBAR 16

Definition at line 73 of file BIG2INCL.H.

#define BW_HELEV 18

Definition at line 75 of file BIG2INCL.H.

#define BW_HSLIDE 19

Definition at line 76 of file BIG2INCL.H.

#define BW_INFO 8

Definition at line 65 of file BIG2INCL.H.

#define BW_LFARROW 17

Definition at line 74 of file BIG2INCL.H.

#define BW_MOVER 3

Definition at line 60 of file BIG2INCL.H.

#define BW_RTARROW 20

Definition at line 77 of file BIG2INCL.H.

#define BW_SIZERDL 15

Definition at line 72 of file BIG2INCL.H.

#define BW_SIZERDR 21

Definition at line 78 of file BIG2INCL.H.

#define BW_SIZERUL 1

Definition at line 58 of file BIG2INCL.H.

#define BW_SIZERUR 7

Definition at line 64 of file BIG2INCL.H.

#define BW_SMALLER 4

Definition at line 61 of file BIG2INCL.H.

#define BW_UPARROW 11

Definition at line 68 of file BIG2INCL.H.

#define BW_VBAR 10

Definition at line 67 of file BIG2INCL.H.

#define BW_VELEV 12

Definition at line 69 of file BIG2INCL.H.

#define BW_VSLIDE 13

Definition at line 70 of file BIG2INCL.H.

#define BW_WORK 22

Definition at line 79 of file BIG2INCL.H.

#define EXITAUTO 2

Definition at line 138 of file BIG2INCL.H.

#define FS_ANN 33

Definition at line 130 of file BIG2INCL.H.

#define FS_ARDN 26

Definition at line 123 of file BIG2INCL.H.

#define FS_ARUP 25

Definition at line 122 of file BIG2INCL.H.

#define FS_ASC 27

Definition at line 124 of file BIG2INCL.H.

#define FS_BF 30

Definition at line 127 of file BIG2INCL.H.

#define FS_BOX 22

Definition at line 119 of file BIG2INCL.H.

#define FS_BOXAR 24

Definition at line 121 of file BIG2INCL.H.

#define FS_BOXF 29

Definition at line 126 of file BIG2INCL.H.

#define FS_BOXL 5

Definition at line 116 of file BIG2INCL.H.

#define FS_FILTRE 31

Definition at line 128 of file BIG2INCL.H.

#define FS_LA 6

Definition at line 117 of file BIG2INCL.H.

#define FS_LP 21

Definition at line 118 of file BIG2INCL.H.

#define FS_MOVE 1

Definition at line 112 of file BIG2INCL.H.

#define FS_OK 32

Definition at line 129 of file BIG2INCL.H.

#define FS_PATH 3

Definition at line 114 of file BIG2INCL.H.

#define FS_RETOUR 23

Definition at line 120 of file BIG2INCL.H.

#define FS_SAISIE 4

Definition at line 115 of file BIG2INCL.H.

#define FS_SLD 28

Definition at line 125 of file BIG2INCL.H.

#define FS_TITRE 2

Definition at line 113 of file BIG2INCL.H.

#define GA_ADNH 9

Definition at line 90 of file BIG2INCL.H.

#define GA_ADNM 23

Definition at line 104 of file BIG2INCL.H.

#define GA_ALFH 11

Definition at line 92 of file BIG2INCL.H.

#define GA_ALFM 25

Definition at line 106 of file BIG2INCL.H.

#define GA_ARTH 13

Definition at line 94 of file BIG2INCL.H.

#define GA_ARTM 27

Definition at line 108 of file BIG2INCL.H.

#define GA_AUPH 7

Definition at line 88 of file BIG2INCL.H.

#define GA_AUPM 21

Definition at line 102 of file BIG2INCL.H.

#define GA_CLOH 2

Definition at line 83 of file BIG2INCL.H.

#define GA_CLOM 16

Definition at line 97 of file BIG2INCL.H.

#define GA_CYCH 4

Definition at line 85 of file BIG2INCL.H.

#define GA_CYCM 18

Definition at line 99 of file BIG2INCL.H.

#define GA_FULH 5

Definition at line 86 of file BIG2INCL.H.

#define GA_FULM 19

Definition at line 100 of file BIG2INCL.H.

#define GA_SDLH 10

Definition at line 91 of file BIG2INCL.H.

#define GA_SDLM 24

Definition at line 105 of file BIG2INCL.H.

#define GA_SDRH 14

Definition at line 95 of file BIG2INCL.H.

#define GA_SDRM 28

Definition at line 109 of file BIG2INCL.H.

#define GA_SLHH 12

Definition at line 93 of file BIG2INCL.H.

#define GA_SLHM 26

Definition at line 107 of file BIG2INCL.H.

#define GA_SLVH 8

Definition at line 89 of file BIG2INCL.H.

#define GA_SLVM 22

Definition at line 103 of file BIG2INCL.H.

#define GA_SMAH 3

Definition at line 84 of file BIG2INCL.H.

#define GA_SMAM 17

Definition at line 98 of file BIG2INCL.H.

#define GA_SULH 1

Definition at line 82 of file BIG2INCL.H.

#define GA_SULM 15

Definition at line 96 of file BIG2INCL.H.

#define GA_SURH 6

Definition at line 87 of file BIG2INCL.H.

#define GA_SURM 20

Definition at line 101 of file BIG2INCL.H.

#define GADGETS 7

Definition at line 81 of file BIG2INCL.H.

#define IMG_USER 3

Definition at line 23 of file BIG2INCL.H.

#define NOT_WINDOW 1

Definition at line 136 of file BIG2INCL.H.

#define PUH 9

Definition at line 32 of file BIG2INCL.H.

#define PUM 10

Definition at line 33 of file BIG2INCL.H.

#define RBHN 1

Definition at line 24 of file BIG2INCL.H.

#define RBHS 2

Definition at line 25 of file BIG2INCL.H.

#define RBMN 3

Definition at line 26 of file BIG2INCL.H.

#define RBMS 4

Definition at line 27 of file BIG2INCL.H.

#define SC_BKGR 0

Definition at line 36 of file BIG2INCL.H.

#define SC_DN 2

Definition at line 38 of file BIG2INCL.H.

#define SC_UP 1

Definition at line 37 of file BIG2INCL.H.

#define SELF 8

Definition at line 111 of file BIG2INCL.H.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2INIT.C File Reference

BIG2INIT.C File Reference

#include <BIG2.H>
#include "BIG2USR1.H"
#include "BIG2USR2.H"
#include "BIG2EDIT.H"
#include "BIG2WIND.H"
#include <STRING.H>
#include <AES.H>
#include <VDI.H>
#include <TOS.H>
#include <STDIO.H>
#include <STDLIB.H>
#include <CTYPE.H>
#include "BIG2INCL.HBG"

Go to the source code of this file.

Functions

void | vq_screen (t_display *Xdisplay)
void | get_palette (void)
void | open_work (void)
int | identifier_tos (void)
t_ident_hard_soft | identifier_hard_soft (void)
int | initial (char *rsc, int menu, int desk, int nb_tree, OBJECT *rs_tree, char *rs_str, int n_wind, int acc)
Initialize BIG.
void | end (void)
Terminate BIG.

Variables

int | ap_id
int | event
int | buf [8]
int | mx
int | my
int | mk
int | edit
int | pos
int | object
int | kbd
int | key
int | clik
int | wind
int | intgr
int | pal_img = ZERO
int | old_top = BLANK
int | id_top
char | pathapp [128]
t_ident_hard_soft desc_hard_soft
t_display work_display
t_desktop bureau
int | cliq_in
MOBLK | mouse = {ZERO, ZERO, ZERO, ZERO, ZERO}
OBJECT * | adr_menu
OBJECT * | adr_desk
USERBLK * | adr_usr
char * | xedit
t_image_dial * xpict
int | nb_pict = ZERO
OBJECT ** | objets_maison = NULL
int | nb_objets_maison = ZERO
Palette | bpal [16]
char * | buffer = ZERO
OBJECT * | scroll
MFDB | screen
OBJECT ** | ir_trindex
char ** | ir_frstr
FNCP * fnc
BigWind * win

Function Documentation

void get_palette ( void )

Definition at line 457 of file BIG2INIT.C.

t_ident_hard_soft identifier_hard_soft ( void )

Definition at line 514 of file BIG2INIT.C.

int identifier_tos ( void )

Definition at line 495 of file BIG2INIT.C.

void open_work ( void )

Definition at line 475 of file BIG2INIT.C.

void vq_screen ( t_display * Xdisplay )

Definition at line 320 of file BIG2INIT.C.

Variable Documentation

USERBLK* adr_usr

Definition at line 48 of file BIG2INIT.C.

char* buffer = ZERO

Definition at line 57 of file BIG2INIT.C.

int event

Definition at line 25 of file BIG2INIT.C.

int id_top

Definition at line 34 of file BIG2INIT.C.

char** ir_frstr

Definition at line 63 of file BIG2INIT.C.

MOBLK mouse = {ZERO, ZERO, ZERO, ZERO, ZERO}

Definition at line 45 of file BIG2INIT.C.

int nb_objets_maison = ZERO

Definition at line 54 of file BIG2INIT.C.

int nb_pict = ZERO

Definition at line 51 of file BIG2INIT.C.

OBJECT** objets_maison = NULL

Definition at line 53 of file BIG2INIT.C.

int old_top = BLANK

Definition at line 33 of file BIG2INIT.C.

int pal_img = ZERO

Definition at line 32 of file BIG2INIT.C.

MFDB screen

Definition at line 60 of file BIG2INIT.C.

OBJECT* scroll

Definition at line 58 of file BIG2INIT.C.

char* xedit

Definition at line 49 of file BIG2INIT.C.

t_image_dial* xpict

Definition at line 50 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2USR1.C File Reference

BIG2USR1.C File Reference

#include <BIG2.H>
#include "BIG2USR1.H"
#include "BIG2USR2.H"

Go to the source code of this file.

Functions

void | userdef (char *rsc, int *nb_form, int nb_tree)
int cdecl | bcoche (PARMBLK *para)
int cdecl | brond (PARMBLK *para)
int cdecl | bcadre (PARMBLK *para)
int cdecl | bunder (PARMBLK *para)
int cdecl | bmove (PARMBLK *para)
int cdecl | bgrastr (PARMBLK *para)
int cdecl | bsmstr (PARMBLK *para)
int cdecl | bpopup (PARMBLK *para)
int cdecl | bpict (PARMBLK *para)
int cdecl | bmhier (PARMBLK *para)
int cdecl | bniceline (PARMBLK *para)

Variables

Obj_user look

Function Documentation

int cdecl bcadre ( PARMBLK * para )

Definition at line 608 of file BIG2USR1.C.

int cdecl bcoche ( PARMBLK * para )

Definition at line 388 of file BIG2USR1.C.

int cdecl bgrastr ( PARMBLK * para )

Definition at line 938 of file BIG2USR1.C.

int cdecl bmhier ( PARMBLK * para )

Definition at line 1326 of file BIG2USR1.C.

int cdecl bmove ( PARMBLK * para )

Definition at line 902 of file BIG2USR1.C.

int cdecl bniceline ( PARMBLK * para )

Definition at line 1409 of file BIG2USR1.C.

int cdecl bpict ( PARMBLK * para )

Definition at line 1281 of file BIG2USR1.C.

int cdecl bpopup ( PARMBLK * para )

Definition at line 1090 of file BIG2USR1.C.

int cdecl brond ( PARMBLK * para )

Definition at line 497 of file BIG2USR1.C.

int cdecl bsmstr ( PARMBLK * para )

Definition at line 1020 of file BIG2USR1.C.

int cdecl bunder ( PARMBLK * para )

Definition at line 710 of file BIG2USR1.C.

void userdef | ( | char * | rsc,
 |  | int * | nb_form,
 |  | int | nb_tree
 | ) |  |

Definition at line 25 of file BIG2USR1.C.

Variable Documentation

Obj_user look
Initial value:
 {TRUE,
                                 RED,
                                 BLACK,
                                 BLACK,
                                 BLACK,
                                 BLACK,
                                 BLACK,
                                 BLACK,
                                 BLACK,
                                 BLACK,
                                 BLACK,
                                 BLACK,
                                 BLACK,
                                 BLACK}

Definition at line 9 of file BIG2USR1.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2USR1.H File Reference

BIG2USR1.H File Reference

#include "BIG2INCL.H"

Go to the source code of this file.

Data Structures

struct | Obj_user

Defines

#define | NU 12
#define | NTU NU + 8
#define | NFU 4

Functions

void | userdef (char *rsc, int *nb_form, int nb_tree)
int cdecl | bcoche (PARMBLK *para)
int cdecl | brond (PARMBLK *para)
int cdecl | bunder (PARMBLK *para)
int cdecl | bcadre (PARMBLK *para)
int cdecl | bmove (PARMBLK *para)
int cdecl | bgrastr (PARMBLK *para)
int cdecl | bsmstr (PARMBLK *para)
int cdecl | bpopup (PARMBLK *para)
int cdecl | bpict (PARMBLK *para)
int cdecl | bmhier (PARMBLK *para)
int cdecl | bniceline (PARMBLK *para)

Variables

t_display work_display
t_desktop bureau
OBJECT * | adr_menu
USERBLK * | adr_usr
char * | xedit
t_image_dial * xpict
int | nb_pict
OBJECT ** | ir_trindex
char ** | ir_frstr
FNCP * fnc
OBJECT * | bi_trindex []

Define Documentation

#define NFU 4

Definition at line 8 of file BIG2USR1.H.

#define NTU NU + 8

Definition at line 6 of file BIG2USR1.H.

#define NU 12

Definition at line 4 of file BIG2USR1.H.

Function Documentation

int cdecl bcadre ( PARMBLK * para )

Definition at line 608 of file BIG2USR1.C.

int cdecl bcoche ( PARMBLK * para )

Definition at line 388 of file BIG2USR1.C.

int cdecl bgrastr ( PARMBLK * para )

Definition at line 938 of file BIG2USR1.C.

int cdecl bmhier ( PARMBLK * para )

Definition at line 1326 of file BIG2USR1.C.

int cdecl bmove ( PARMBLK * para )

Definition at line 902 of file BIG2USR1.C.

int cdecl bniceline ( PARMBLK * para )

Definition at line 1409 of file BIG2USR1.C.

int cdecl bpict ( PARMBLK * para )

Definition at line 1281 of file BIG2USR1.C.

int cdecl bpopup ( PARMBLK * para )

Definition at line 1090 of file BIG2USR1.C.

int cdecl brond ( PARMBLK * para )

Definition at line 497 of file BIG2USR1.C.

int cdecl bsmstr ( PARMBLK * para )

Definition at line 1020 of file BIG2USR1.C.

int cdecl bunder ( PARMBLK * para )

Definition at line 710 of file BIG2USR1.C.

void userdef | ( | char * | rsc,
 |  | int * | nb_form,
 |  | int | nb_tree
 | ) |  |

Definition at line 25 of file BIG2USR1.C.

Variable Documentation

USERBLK* adr_usr

Definition at line 48 of file BIG2INIT.C.

OBJECT* bi_trindex[]
char** ir_frstr

Definition at line 63 of file BIG2INIT.C.

int nb_pict

Definition at line 51 of file BIG2INIT.C.

char* xedit

Definition at line 49 of file BIG2INIT.C.

t_image_dial* xpict

Definition at line 50 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2USR2.C File Reference

BIG2USR2.C File Reference

#include <BIG2.H>
#include "BIG2USR2.H"

Go to the source code of this file.

Functions

int cdecl | fond (PARMBLK *para)
int cdecl | gadget (PARMBLK *para)
int cdecl | titinf (PARMBLK *para)
int cdecl | elev (PARMBLK *para)
int cdecl | sld (PARMBLK *para)
int cdecl | work (PARMBLK *para)

Variables

Win_user bwin

Function Documentation

int cdecl elev ( PARMBLK * para )

Definition at line 295 of file BIG2USR2.C.

int cdecl fond ( PARMBLK * para )

Definition at line 25 of file BIG2USR2.C.

int cdecl gadget ( PARMBLK * para )

Definition at line 48 of file BIG2USR2.C.

int cdecl sld ( PARMBLK * para )

Definition at line 333 of file BIG2USR2.C.

int cdecl titinf ( PARMBLK * para )

Definition at line 167 of file BIG2USR2.C.

int cdecl work ( PARMBLK * para )

Definition at line 460 of file BIG2USR2.C.

Variable Documentation

Win_user bwin
Initial value:
 {MD_TRANS,
                                 BLACK,
                                 2,
                                 BLACK,
                                 BLACK,
                                 1,
                                 BLACK,
                                 1,
                                 BLACK,
                                 1,
                                 WHITE,
                                 1,
                                 WHITE,
                                 WHITE,
                                 BLACK}

Definition at line 8 of file BIG2USR2.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2USR2.H File Reference

BIG2USR2.H File Reference

#include "BIG2INCL.H"

Go to the source code of this file.

Data Structures

struct | Win_user

Functions

int cdecl | fond (PARMBLK *para)
int cdecl | gadget (PARMBLK *para)
int cdecl | titinf (PARMBLK *para)
int cdecl | elev (PARMBLK *para)
int cdecl | sld (PARMBLK *para)
int cdecl | work (PARMBLK *para)

Variables

t_display work_display
int | id_top
OBJECT * | bi_trindex []

Function Documentation

int cdecl elev ( PARMBLK * para )

Definition at line 295 of file BIG2USR2.C.

int cdecl fond ( PARMBLK * para )

Definition at line 25 of file BIG2USR2.C.

int cdecl gadget ( PARMBLK * para )

Definition at line 48 of file BIG2USR2.C.

int cdecl sld ( PARMBLK * para )

Definition at line 333 of file BIG2USR2.C.

int cdecl titinf ( PARMBLK * para )

Definition at line 167 of file BIG2USR2.C.

int cdecl work ( PARMBLK * para )

Definition at line 460 of file BIG2USR2.C.

Variable Documentation

OBJECT* bi_trindex[]
int id_top

Definition at line 34 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2WINB.C File Reference

BIG2WINB.C File Reference

#include <BIG2.H>
#include "BIG2WINB.H"
#include "BIG2WIND.H"
#include "BIG2USR2.H"
#include "BIG2EVTW.H"
#include "BIG2INCL.H"

Go to the source code of this file.

Functions

void | rubberbox (int *xfin, int *yfin, int *wfin, int *hfin, int obj, int index)
void | dragbox (int wr, int hr, int xr, int yr, int xz, int yz, int wz, int hz, int *xfin, int *yfin, int index)
void | put_fen (int index)
void | no_top (int obj, int index)
int | asce (int obj, int index)
void | arrows (int obj, int index)
void | slid (int obj, int index)
void | draw_obj (OBJECT *adr, int obj)
void | draw_wind (int index, GRECT *r)
void | resize (int index, int deltaw, int deltah)
void | sizebw (int obj, int index)
void | movebw (int index)
void | set_work (int index, int pattern, int colorp)
Set pattern and color of window working area.
void | set_windows (int mtxt_mover, int ctxt_mover, int spat_mover, int cpat_mover, int ctxt_info, int spat_velev, int cpat_velev, int spat_helev, int cpat_helev, int spat_hslid, int cpat_hslid, int spat_vslid, int cpat_vslid, int cpat_gadgt, int cicn_gadgt)
Modify window display parameters.
void | bwind_calc (int request, int attr, int tree, OBJECT *adrb, int xd, int yd, int wd, int hd, int *x, int *y, int *w, int *h)
Equivalent to GEM wind_calc().
void | draw_title (int index)
Redraw the title bar.

Variables

Win_user bwin
int | topp

Function Documentation

void arrows | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 433 of file BIG2WINB.C.

int asce | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 374 of file BIG2WINB.C.

void dragbox | ( | int | wr,
 |  | int | hr,
 |  | int | xr,
 |  | int | yr,
 |  | int | xz,
 |  | int | yz,
 |  | int | wz,
 |  | int | hz,
 |  | int * | xfin,
 |  | int * | yfin,
 |  | int | index
 | ) |  |

Definition at line 1045 of file BIG2WINB.C.

void draw_obj | ( | OBJECT * | adr,
 |  | int | obj
 | ) |  |

Definition at line 548 of file BIG2WINB.C.

void draw_wind | ( | int | index,
 |  | GRECT * | r
 | ) |  |

Definition at line 576 of file BIG2WINB.C.

void movebw ( int index )

Definition at line 1006 of file BIG2WINB.C.

void no_top | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 210 of file BIG2WINB.C.

void put_fen ( int index )

Definition at line 22 of file BIG2WINB.C.

void resize | ( | int | index,
 |  | int | deltaw,
 |  | int | deltah
 | ) |  |

Definition at line 591 of file BIG2WINB.C.

void rubberbox | ( | int * | xfin,
 |  | int * | yfin,
 |  | int * | wfin,
 |  | int * | hfin,
 |  | int | obj,
 |  | int | index
 | ) |  |

Definition at line 767 of file BIG2WINB.C.

void sizebw | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 624 of file BIG2WINB.C.

void slid | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 481 of file BIG2WINB.C.

Variable Documentation

Win_user bwin

Definition at line 8 of file BIG2USR2.C.

int topp

Definition at line 15 of file BIG2DIAL.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2WINB.H File Reference

BIG2WINB.H File Reference

Go to the source code of this file.

Functions

void | put_fen (int index)
void | no_top (int obj, int index)
int | asce (int obj, int index)
void | arrows (int obj, int index)
void | slid (int obj, int index)
void | sizebw (int obj, int index)
void | movebw (int index)
void | resize (int index, int deltaw, int deltah)
void | draw_obj (OBJECT *adr, int obj)
void | draw_wind (int index, GRECT *r)

Variables

OBJECT * | bi_trindex []

Function Documentation

void arrows | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 433 of file BIG2WINB.C.

int asce | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 374 of file BIG2WINB.C.

void draw_obj | ( | OBJECT * | adr,
 |  | int | obj
 | ) |  |

Definition at line 548 of file BIG2WINB.C.

void draw_wind | ( | int | index,
 |  | GRECT * | r
 | ) |  |

Definition at line 576 of file BIG2WINB.C.

void movebw ( int index )

Definition at line 1006 of file BIG2WINB.C.

void no_top | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 210 of file BIG2WINB.C.

void put_fen ( int index )

Definition at line 22 of file BIG2WINB.C.

void resize | ( | int | index,
 |  | int | deltaw,
 |  | int | deltah
 | ) |  |

Definition at line 591 of file BIG2WINB.C.

void sizebw | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 624 of file BIG2WINB.C.

void slid | ( | int | obj,
 |  | int | index
 | ) |  |

Definition at line 481 of file BIG2WINB.C.

Variable Documentation

OBJECT* bi_trindex[]
Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2WIND.C File Reference

BIG2WIND.C File Reference

#include <BIG2.H>
#include "BIG2WIND.H"
#include "BIG2WINB.H"
#include "BIG2EVTW.H"
#include "BIG2FOR1.H"
#include "BIG2FOR2.H"
#include "BIG2EDIT.H"

Go to the source code of this file.

Functions

int | formw_draw (OBJECT *adr, int index, int title, int infos, int wed, int attr, FNCP ricn)
Open a Form in Window.
void | dcl_windows (int nbre)
void | create_wmenu (int tree, int index)
int | menu_window (int index, int xm, int ym)
int | wind_hierarch (OBJECT *adr, int index, int option)
int | open_window (int index, int type, int attr, int x, int y, int w, int h, int wmi, int hmi, int wma, int hma, int wu, int hu, int flags, int fmouse, FNCP ricn, FNCP redr, FNCP clos, char *title, char *info, long wt, long ht, int fmenu, int ftool, int bar, int pattern, int colorp)
Create and open a Window.
int | find_index (int wh)
Find the BIG index of a window by its GEM Handle.
int | find_window (int mx, int my)
Find if the working area of a window is at a given location.
void | zone_work (int index, int *xw, int *yw, int *ww, int *hw)
Get work area position.
void | wind_mouse (void)
void | height_vert (int index, int fredraw)
Compute the size of a window vertical slider.
void | height_hori (int index, int fredraw)
Compute the size of a window horizontal slider.
void | posi_vert (int index, int fredraw)
Compute the position of a window vertical slider.
void | posi_hori (int index, int fredraw)
Compute the position of a window horizontal slider.
void | height_sliders (int index, int fredraw)
Compute size and position of a window sliders.
void | draw_object (int object, int index)
Redraw the visible part of an object belonging to a form.
void | print_line (int f, int index)
void | print_colum (int f, int index)
void | print_page (int index)
Redraw the visible part of an object belonging to a form.
void | print_wind (int index)
void | next_wind (void)
Bring to front the next window.

Variables

int | id_top

Function Documentation

void create_wmenu | ( | int | tree,
 |  | int | index
 | ) |  |

Definition at line 293 of file BIG2WIND.C.

void dcl_windows ( int nbre )

Definition at line 219 of file BIG2WIND.C.

int menu_window | ( | int | index,
 |  | int | xm,
 |  | int | ym
 | ) |  |

Definition at line 397 of file BIG2WIND.C.

void print_colum | ( | int | f,
 |  | int | index
 | ) |  |

Definition at line 1771 of file BIG2WIND.C.

void print_line | ( | int | f,
 |  | int | index
 | ) |  |

Definition at line 1744 of file BIG2WIND.C.

void print_wind ( int index )

Definition at line 1839 of file BIG2WIND.C.

int wind_hierarch | ( | OBJECT * | adr,
 |  | int | index,
 |  | int | option
 | ) |  |

Definition at line 647 of file BIG2WIND.C.

void wind_mouse ( void )

Definition at line 1494 of file BIG2WIND.C.

Variable Documentation

int id_top

Definition at line 34 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2WIND.H File Reference

BIG2WIND.H File Reference

#include "BIG2INCL.H"

Go to the source code of this file.

Functions

void | dcl_windows (int nbre)
void | create_wmenu (int tree, int index)
int | menu_window (int index, int xm, int ym)
int | wind_hierarch (OBJECT *adr, int index, int option)
void | wind_mouse (void)
void | print_line (int f, int index)
void | print_colum (int f, int index)
void | print_wind (int index)

Variables

MOBLK | mouse
int | ap_id
int | event
int | buf []
int | mk
t_display work_display
t_desktop bureau
OBJECT * | scroll
OBJECT ** | ir_trindex
FNCP * fnc
BigWind * win
char * | bi_frstr []
OBJECT * | bi_trindex []

Function Documentation

void create_wmenu | ( | int | tree,
 |  | int | index
 | ) |  |

Definition at line 293 of file BIG2WIND.C.

void dcl_windows ( int nbre )

Definition at line 219 of file BIG2WIND.C.

int menu_window | ( | int | index,
 |  | int | xm,
 |  | int | ym
 | ) |  |

Definition at line 397 of file BIG2WIND.C.

void print_colum | ( | int | f,
 |  | int | index
 | ) |  |

Definition at line 1771 of file BIG2WIND.C.

void print_line | ( | int | f,
 |  | int | index
 | ) |  |

Definition at line 1744 of file BIG2WIND.C.

void print_wind ( int index )

Definition at line 1839 of file BIG2WIND.C.

int wind_hierarch | ( | OBJECT * | adr,
 |  | int | index,
 |  | int | option
 | ) |  |

Definition at line 647 of file BIG2WIND.C.

void wind_mouse ( void )

Definition at line 1494 of file BIG2WIND.C.

Variable Documentation

char* bi_frstr[]
OBJECT* bi_trindex[]
int event

Definition at line 25 of file BIG2INIT.C.

MOBLK mouse

Definition at line 45 of file BIG2INIT.C.

OBJECT* scroll

Definition at line 58 of file BIG2INIT.C.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG_IMGS.H File Reference

BIG_IMGS.H File Reference

#include <big2.h>

Go to the source code of this file.

Functions

int | load_image (char *fichier, MFDB *imag)
int | load_img (char *fichier, MFDB *imag)
int | load_pac (char *fichier, MFDB *imag)
int | load_pix (char *fichier, MFDB *imag)
int | load_pcx (char *fichier, MFDB *imag)
int | img_attach (t_image_dial *bimg, char *fichier, int tree, int obj, int fcenterw, int fcenterh)

Function Documentation

int img_attach | ( | t_image_dial * | bimg,
 |  | char * | fichier,
 |  | int | tree,
 |  | int | obj,
 |  | int | fcenterw,
 |  | int | fcenterh
 | ) |  |

Definition at line 671 of file d_atari.c.

int load_image | ( | char * | fichier,
 |  | MFDB * | imag
 | ) |  |
int load_img | ( | char * | fichier,
 |  | MFDB * | imag
 | ) |  |
int load_pac | ( | char * | fichier,
 |  | MFDB * | imag
 | ) |  |
int load_pcx | ( | char * | fichier,
 |  | MFDB * | imag
 | ) |  |
int load_pix | ( | char * | fichier,
 |  | MFDB * | imag
 | ) |  |
Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: d_atari.c File Reference

d_atari.c File Reference

#include <aes.h>
#include <tos.h>
#include <vdi.h>
#include "big2.h"

Go to the source code of this file.

Functions

int | vq_aes (void)
void | _crystal (AESPB *aespb)
int | appl_init (void)
int | appl_read (int ap_rid, int ap_rlength, void *ap_rpbuff)
int | appl_write (int ap_wid, int ap_wlength, void *ap_wpbuff)
int | appl_find (const char *ap_fpname)
int | appl_tplay (void *ap_tpmem, int ap_tpnum, int ap_tpscale)
int | appl_trecord (void *ap_trmem, int ap_trcount)
int | appl_exit (void)
int | appl_search (int ap_smode, char *ap_sname, int *ap_stype, int *ap_sid)
int | appl_getinfo (int ap_gtype, int *ap_gout1, int *ap_gout2, int *ap_gout3, int *ap_gout4)
int | evnt_keybd (void)
int | evnt_button (int ev_bclicks, int ev_bmask, int ev_bstate, int *ev_bmx, int *ev_bmy, int *ev_bbutton, int *ev_bkstate)
int | evnt_mouse (int ev_moflags, int ev_mox, int ev_moy, int ev_mowidth, int ev_moheight, int *ev_momx, int *ev_momy, int *ev_mobutton, int *ev_mokstate)
int | evnt_mesag (int *ev_mgpbuff)
int | evnt_timer (int ev_tlocount, int ev_thicount)
int | evnt_multi (int ev_mflags, int ev_mbclicks, int ev_mbmask, int ev_mbstate, int ev_mm1flags, int ev_mm1x, int ev_mm1y, int ev_mm1width, int ev_mm1height, int ev_mm2flags, int ev_mm2x, int ev_mm2y, int ev_mm2width, int ev_mm2height, int *ev_mmgpbuff, int ev_mtlocount, int ev_mthicount, int *ev_mmox, int *ev_mmoy, int *ev_mmbutton, int *ev_mmokstate, int *ev_mkreturn, int *ev_mbreturn)
int | evnt_dclick (int ev_dnew, int ev_dgetset)
int | menu_bar (OBJECT *me_btree, int me_bshow)
int | menu_icheck (OBJECT *me_ctree, int me_citem, int me_ccheck)
int | menu_ienable (OBJECT *me_etree, int me_eitem, int me_eenable)
int | menu_tnormal (OBJECT *me_ntree, int me_ntitle, int me_nnormal)
int | menu_text (OBJECT *me_ttree, int me_titem, const char *me_ttext)
int | menu_register (int me_rapid, const char *me_rpstring)
int | menu_popup (MENU *me_menu, int me_xpos, int me_ypos, MENU *me_mdata)
int | menu_attach (int me_flag, OBJECT *me_tree, int me_item, MENU *me_mdata)
int | menu_istart (int me_flag, OBJECT *me_tree, int me_imenu, int me_item)
int | menu_settings (int me_flag, MN_SET *me_values)
int | objc_add (OBJECT *ob_atree, int ob_aparent, int ob_achild)
int | objc_delete (OBJECT *ob_dltree, int ob_dlobject)
int | objc_draw (OBJECT *ob_drtree, int ob_drstartob, int ob_drdepth, int ob_drxclip, int ob_dryclip, int ob_drwclip, int ob_drhclip)
int | objc_find (OBJECT *ob_ftree, int ob_fstartob, int ob_fdepth, int ob_fmx, int ob_fmy)
int | objc_offset (OBJECT *ob_oftree, int ob_ofobject, int *ob_ofxoff, int *ob_ofyoff)
int | objc_order (OBJECT *ob_ortree, int ob_orobject, int ob_ornewpos)
int | objc_edit (OBJECT *ob_edtree, int ob_edobject, int ob_edchar, int *ob_edidx, int ob_edkind)
int | objc_change (OBJECT *ob_ctree, int ob_cobject, int ob_cresvd, int ob_cxclip, int ob_cyclip, int ob_cwclip, int ob_chclip, int ob_cnewstate, int ob_credraw)
int | form_do (OBJECT *fo_dotree, int fo_dostartob)
int | form_dial (int fo_diflag, int fo_dilittlx, int fo_dilittly, int fo_dilittlw, int fo_dilittlh, int fo_dibigx, int fo_dibigy, int fo_dibigw, int fo_dibigh)
int | form_alert (int fo_adefbttn, const char *fo_astring)
int | form_error (int fo_enum)
int | form_center (OBJECT *fo_ctree, int *fo_cx, int *fo_cy, int *fo_cw, int *fo_ch)
int | form_keybd (OBJECT *fo_ktree, int fo_kobject, int fo_kobnext, int fo_kchar, int *fo_knxtobject, int *fo_knxtchar)
int | form_button (OBJECT *fo_btree, int fo_bobject, int fo_bclicks, int *fo_bnxtobj)
int | graf_rubberbox (int gr_rx, int gr_ry, int gr_minwidth, int gr_minheight, int *gr_rlastwidth, int *gr_rlastheight)
int | graf_rubbox (int gr_rx, int gr_ry, int gr_minwidth, int gr_minheight, int *gr_rlastwidth, int *gr_rlastheight)
int | graf_dragbox (int gr_dwidth, int gr_dheight, int gr_dstartx, int gr_dstarty, int gr_dboundx, int gr_dboundy, int gr_dboundw, int gr_dboundh, int *gr_dfinishx, int *gr_dfinishy)
int | graf_movebox (int gr_mwidth, int gr_mheight, int gr_msourcex, int gr_msourcey, int gr_mdestx, int gr_mdesty)
int | graf_mbox (int gr_mwidth, int gr_mheight, int gr_msourcex, int gr_msourcey, int gr_mdestx, int gr_mdesty)
int | graf_growbox (int gr_gstx, int gr_gsty, int gr_gstwidth, int gr_gstheight, int gr_gfinx, int gr_gfiny, int gr_gfinwidth, int gr_gfinheight)
int | graf_shrinkbox (int gr_sfinx, int gr_sfiny, int gr_sfinwidth, int gr_sfinheight, int gr_sstx, int gr_ssty, int gr_sstwidth, int gr_sstheight)
int | graf_watchbox (OBJECT *gr_wptree, int gr_wobject, int gr_winstate, int gr_woutstate)
int | graf_slidebox (OBJECT *gr_slptree, int gr_slparent, int gr_slobject, int gr_slvh)
int | graf_handle (int *gr_hwchar, int *gr_hhchar, int *gr_hwbox, int *gr_hhbox)
int | graf_mouse (int gr_monumber, MFORM *gr_mofaddr)
int | graf_mkstate (int *gr_mkmx, int *gr_mkmy, int *gr_mkmstate, int *gr_mkkstate)
int | scrp_read (char *sc_rpscrap)
int | scrp_write (char *sc_wpscrap)
int | fsel_input (char *fs_iinpath, char *fs_iinsel, int *fs_iexbutton)
int | fsel_exinput (char *fs_einpath, char *fs_einsel, int *fs_eexbutton, char *fs_elabel)
int | wind_create (int wi_crkind, int wi_crwx, int wi_crwy, int wi_crww, int wi_crwh)
int | wind_open (int wi_ohandle, int wi_owx, int wi_owy, int wi_oww, int wi_owh)
int | wind_close (int wi_clhandle)
int | wind_delete (int wi_dhandle)
int | wind_get (int wi_ghandle, int wi_gfield,...)
int | wind_set (int wi_shandle, int wi_sfield,...)
int | wind_find (int wi_fmx, int wi_fmy)
int | wind_update (int wi_ubegend)
int | wind_calc (int wi_ctype, int wi_ckind, int wi_cinx, int wi_ciny, int wi_cinw, int wi_cinh, int *coutx, int *couty, int *coutw, int *couth)
void | wind_new (void)
int | rsrc_load (const char *re_lpfname)
int | rsrc_free (void)
int | rsrc_gaddr (int re_gtype, int re_gindex, void *gaddr)
int | rsrc_saddr (int re_stype, int re_sindex, void *saddr)
int | rsrc_obfix (OBJECT *re_otree, int re_oobject)
int | rsrc_rcfix (RSHDR *rc_header)
int | shel_read (char *sh_rpcmd, char *sh_rptail)
int | shel_write (int sh_wdoex, int sh_wisgr, int sh_wiscr, char *sh_wpcmd, char *sh_wptail)
int | shel_get (char *sh_gaddr, int sh_glen)
int | shel_put (char *sh_paddr, int sh_plen)
int | shel_find (char *sh_fpbuff)
int | shel_envrn (char **sh_epvalue, char *sh_eparm)
long | gemdos (U32)
long | bios (U32)
long | xbios (U32)
void | Pterm0 (void)
long | Cconin (void)
void | Cconout (int c)
int | Cauxin (void)
void | Cauxout (int c)
int | Cprnout (int c)
long | Crawio (int w)
long | Crawcin (void)
long | Cnecin (void)
int | Cconws (const char *buf)
void | Cconrs (LINE *buf)
int | Cconis (void)
long | Dsetdrv (int drv)
int | Cconos (void)
int | Cprnos (void)
int | Cauxis (void)
int | Cauxos (void)
int | Dgetdrv (void)
void | Fsetdta (DTA *buf)
long | Super (void *stack)
unsigned int | Tgetdate (void)
unsigned int | Tsetdate (unsigned int date)
unsigned int | Tgettime (void)
unsigned int | Tsettime (unsigned int time)
DTA * | Fgetdta (void)
int | Sversion (void)
void | Ptermres (long keepcnt, int retcode)
int | Dfree (DISKINFO *buf, int driveno)
int | Dcreate (const char *path)
int | Ddelete (const char *path)
int | Dsetpath (const char *path)
long | Fcreate (const char *filename, int attr)
long | Fopen (const char *filename, int mode)
int | Fclose (int handle)
long | Fread (int handle, long count, void *buf)
long | Fwrite (int handle, long count, void *buf)
int | Fdelete (const char *filename)
long | Fseek (long offset, int handle, int seekmode)
int | Fattrib (const char *filename, int wflag, int attrib)
long | Fdup (int handle)
int | Fforce (int stch, int nonstdh)
int | Dgetpath (char *path, int driveno)
void * | Malloc (long number)
int | Mfree (void *block)
int | Mshrink (int zero, void *block, long newsiz)
long | Pexec (int mode, char *ptr1, void *ptr2, void *ptr3)
void | Pterm (int retcode)
int | Fsfirst (const char *filename, int attr)
int | Fsnext (void)
int | Frename (int zero, const char *oldname, const char *newname)
int | Fdatime (DOSTIME *timeptr, int handle, int wflag)
void * | Mxalloc (long number, int mode)
long | Maddalt (void *start, long size)
long | Flock (int handle, int mode, long start, long length)
void | Getmpb (MPB *ptr)
int | Bconstat (int dev)
long | Bconin (int dev)
void | Bconout (int dev, int c)
long | Rwabs (int rwflag, void *buf, int cnt, int recnr, int dev)
void(*)() | Setexc (int number, void(*exchdlr)())
long | Tickcal (void)
BPB * | Getbpb (int dev)
long | Bcostat (int dev)
long | Mediach (int dev)
long | Drvmap (void)
long | Kbshift (int mode)
void | Initmouse (int type, MOUSE *par, void(*mousevec)())
void * | Ssbrk (int count)
void * | Physbase (void)
void * | Logbase (void)
int | Getrez (void)
void | Setscreen (void *laddr, void *paddr, int rez)
void | Setpalette (void *pallptr)
int | Setcolor (int colornum, int color)
int | Floprd (void *buf, void *filler, int devno, int sectno, int trackno, int sideno, int count)
int | Flopwr (void *buf, void *filler, int devno, int sectno, int trackno, int sideno, int count)
int | Flopfmt (void *buf, void *filler, int devno, int spt, int trackno, int sideno, int interlv, long magic, int virgin)
void | Midiws (int cnt, void *ptr)
void | Mfpint (int erno, void(*vector)())
IOREC * | Iorec (int dev)
long | Rsconf (int baud, int ctr, int ucr, int rsr, int tsr, int scr)
KEYTAB * | Keytbl (void *unshift, void *shift, void *capslock)
long | Random (void)
void | Protobt (void *buf, long serialno, int disktype, int execflag)
int | Flopver (void *buf, void *filler, int devno, int sectno, int trackno, int sideno, int count)
void | Scrdmp (void)
int | Cursconf (int func, int rate)
void | Settime (unsigned long time)
unsigned long | Gettime (void)
void | Bioskeys (void)
void | Ikbdws (int count, void *ptr)
void | Jdisint (int number)
void | Jenabint (int number)
char | Giaccess (char data, int regno)
void | Offgibit (int bitno)
void | Ongibit (int bitno)
void | Xbtimer (int timer, int control, int data, void(*vector)())
void * | Dosound (void *buf)
int | Setprt (int config)
KBDVBASE * | Kbdvbase (void)
int | Kbrate (int initial, int repeat)
void | Prtblk (PBDEF *par)
void | Vsync (void)
long | Supexec (long(*func)())
void | Puntaes (void)
int | Floprate (int devno, int newrate)
int | Blitmode (int mode)
int | DMAread (long sector, int count, void *buffer, int devno)
int | DMAwrite (long sector, int count, void *buffer, int devno)
int | NVMaccess (int opcode, int start, int count, void *buffer)
long | Bconmap (int devno)
int | Esetshift (int shftMode)
int | Egetshift (void)
int | EsetBank (int bankNum)
int | EsetColor (int colorNum, int color)
void | EsetPalette (int colorNum, int count, int *palettePtr)
void | EgetPalette (int colorNum, int count, int *palettePtr)
int | EsetGray (int swtch)
int | EsetSmear (int swtch)
int | Syield (void)
int | Fpipe (int *usrh)
int | Fcntl (int f, long arg, int cmd)
long | Finstat (int f)
long | Foutstat (int f)
long | Fgetchar (int f, int mode)
long | Fputchar (int f, long c, int mode)
long | Pwait (void)
int | Pnice (int delta)
int | Pgetpid (void)
int | Pgetppid (void)
int | Pgetpgrp (void)
int | Psetpgrp (int pid, int newgrp)
int | Pgetuid (void)
int | Psetuid (int id)
int | Pkill (int pid, int sig)
void * | Psignal (int sig, void *handler)
int | Pvfork (void)
int | Pgetgid (void)
int | Psetgid (int id)
long | Psigblock (long mask)
long | Psigsetmask (long mask)
long | Pusrval (long arg)
int | Pdomain (int newdom)
void | Psigreturn (void)
int | Pfork (void)
long | Pwait3 (int flag, long *rusage)
int | Fselect (unsigned int timeout, long *rfds, long *wfds, long *xfds)
void | Prusage (long *r)
long | Psetlimit (int lim, long value)
long | Talarm (long secs)
void | Pause (void)
long | Sysconf (int n)
long | Psigpending (void)
long | Dpathconf (char *name, int n)
long | Pmsg (int mode, long mbox, MSG *msg)
long | Fmidipipe (int pid, int in, int out)
int | Prenice (int pid, int delta)
long | Dopendir (char *name, int flag)
long | Dreaddir (int buflen, long dir, char *buf)
long | Drewinddir (long dir)
long | Dclosedir (long dir)
long | Fxattr (int flag, char *name, XATTR *buf)
long | Flink (char *oldname, char *newname)
long | Fsymlink (char *oldname, char *newname)
long | Freadlink (int size, char *buf, char *name)
long | Dcntl (int cmd, char *name, long arg)
long | Fchown (char *name, int uid, int gid)
long | Fchmod (char *name, int mode)
long | Pumask (unsigned int mode)
long | Psemaphore (int mode, long id, long timeout)
long | Dlock (int mode, int drive)
void | Psigpause (unsigned long mask)
long | Psigaction (int sig, SIGACTION *act, SIGACTION *oact)
int | Pgeteuid (void)
int | Pgetegid (void)
long | Pwaitpid (int pid, int flag, long *rusage)
long | locksnd (void)
long | unlocksnd (void)
long | soundcmd (int mode, int data)
long | setbuffer (int reg, void *begaddr, void *endaddr)
long | setmode (int mode)
long | settracks (int playtracks, int rectracks)
long | setmontracks (int montrack)
long | setinterrupt (int src_inter, int cause)
long | buffoper (int mode)
long | dsptristate (int dspxmit, int dsprec)
long | gpio (int mode, int data)
long | devconnect (int src, int dst, int srcclk, int prescale, int protocol)
long | sndstatus (int reset)
long | buffptr (long *ptr)
int | Dsp_LoadProg (char *file, int ability, char *buffer)
long | Dsp_LodToBinary (char *file, char *codeptr)
void | Dsp_DoBlock (char *data_in, long size_in, char *data_out, long size_out)
void | Dsp_BlkHandShake (char *data_in, long size_in, char *data_out, long size_out)
void | Dsp_BlkUnpacked (long *data_in, long size_in, long *data_out, long size_out)
void | Dsp_InStream (char *data_in, long block_size, long num_blocks, long *blocks_done)
void | Dsp_OutStream (char *data_out, long block_size, long num_blocks, long *blocks_done)
void | Dsp_IOStream (char *data_in, char *data_out, long block_insize, long block_outsize, long num_blocks, long *blocks_done)
void | Dsp_RemoveInterrupts (int mask)
int | Dsp_GetWordSize (void)
int | Dsp_Lock (void)
void | Dsp_Unlock (void)
void | Dsp_Available (long *xavailable, long *yavailable)
int | Dsp_Reserve (long xreserve, long yreserve)
void | Dsp_ExecProg (char *codeptr, long codesize, int ability)
void | Dsp_ExecBoot (char *codeptr, long codesize, int ability)
void | Dsp_TriggerHC (int vector)
int | Dsp_RequestUniqueAbility (void)
int | Dsp_GetProgAbility (void)
void | Dsp_FlushSubroutines (void)
int | Dsp_LoadSubroutine (char *codeptr, long codesize, int ability)
int | Dsp_InqSubrAbility (int ability)
int | Dsp_RunSubroutine (int handle)
int | Dsp_Hf0 (int flag)
int | Dsp_Hf1 (int flag)
int | Dsp_Hf2 (void)
int | Dsp_Hf3 (void)
void | Dsp_BlkWords (void *data_in, long size_in, void *data_out, long size_out)
void | Dsp_BlkBytes (void *data_in, long size_in, void *data_out, long size_out)
char | Dsp_HStat (void)
void | Dsp_SetVectors (void(*receiver)(), long(*transmitter)())
void | Dsp_MultBlocks (long numsend, long numreceive, DSPBLOCK *sendblocks, DSPBLOCK *receiveblocks)
int | Vsetmode (int modecode)
int | mon_type (void)
long | VgetSize (int mode)
void | VsetSync (int flag)
void | VsetRGB (int index, int count, long *array)
void | VgetRGB (int index, int count, long *array)
void | VsetMask (int ormask, int andmask, int overlay)
void | v_opnwk (int *work_in, int *handle, int *work_out)
void | v_clswk (int handle)
void | v_opnvwk (int *work_in, int *handle, int *work_out)
void | v_clsvwk (int handle)
void | v_clrwk (int handle)
void | v_updwk (int handle)
int | vst_load_fonts (int handle, int select)
void | vst_unload_fonts (int handle, int select)
void | vs_clip (int handle, int clip_flag, int *pxyarray)
void | v_pline (int handle, int count, int *pxyarray)
void | v_pmarker (int handle, int count, int *pxyarray)
void | v_gtext (int handle, int x, int y, char *string)
void | v_fillarea (int handle, int count, int *pxyarray)
void | v_cellarray (int handle, int *pxyarray, int row_length, int el_used, int num_rows, int wrt_mode, int *colarray)
void | v_contourfill (int handle, int x, int y, int index)
void | vr_recfl (int handle, int *pxyarray)
void | v_bar (int handle, int *pxyarray)
void | v_arc (int handle, int x, int y, int radius, int begang, int endang)
void | v_pieslice (int handle, int x, int y, int radius, int begang, int endang)
void | v_circle (int handle, int x, int y, int radius)
void | v_ellarc (int handle, int x, int y, int xradius, int yradius, int begang, int endang)
void | v_ellpie (int handle, int x, int y, int xradius, int yradius, int begang, int endang)
void | v_ellipse (int handle, int x, int y, int xradius, int yradius)
void | v_rbox (int handle, int *pxyarray)
void | v_rfbox (int handle, int *pxyarray)
void | v_justified (int handle, int x, int y, char *string, int length, int word_space, int char_space)
int | vswr_mode (int handle, int mode)
void | vs_color (int handle, int index, int *rgb_in)
int | vsl_type (int handle, int style)
void | vsl_udsty (int handle, int pattern)
int | vsl_width (int handle, int width)
int | vsl_color (int handle, int color_index)
void | vsl_ends (int handle, int beg_style, int end_style)
int | vsm_type (int handle, int symbol)
int | vsm_height (int handle, int height)
int | vsm_color (int handle, int color_index)
void | vst_height (int handle, int height, int *char_width, int *char_height, int *cell_width, int *cell_height)
int | vst_point (int handle, int point, int *char_width, int *char_height, int *cell_width, int *cell_height)
int | vst_rotation (int handle, int angle)
int | vst_font (int handle, int font)
int | vst_color (int handle, int color_index)
int | vst_effects (int handle, int effect)
void | vst_alignment (int handle, int hor_in, int vert_in, int *hor_out, int *vert_out)
int | vsf_interior (int handle, int style)
int | vsf_style (int handle, int style_index)
int | vsf_color (int handle, int color_index)
int | vsf_perimeter (int handle, int per_vis)
void | vsf_udpat (int handle, int *pfill_pat, int planes)
void | vro_cpyfm (int handle, int vr_mode, int *pxyarray, MFDB *psrcMFDB, MFDB *pdesMFDB)
void | vrt_cpyfm (int handle, int vr_mode, int *pxyarray, MFDB *psrcMFDB, MFDB *pdesMFDB, int *color_index)
void | vr_trnfm (int handle, MFDB *psrcMFDB, MFDB *pdesMFDB)
void | v_get_pixel (int handle, int x, int y, int *pel, int *index)
void | vsin_mode (int handle, int dev_type, int mode)
void | vrq_locator (int handle, int x, int y, int *xout, int *yout, int *term)
int | vsm_locator (int handle, int x, int y, int *xout, int *yout, int *term)
void | vrq_valuator (int handle, int valuator_in, int *valuator_out, int *terminator)
void | vsm_valuator (int handle, int val_in, int *val_out, int *term, int *status)
void | vrq_choice (int handle, int ch_in, int *ch_out)
int | vsm_choice (int handle, int *choice)
void | vrq_string (int handle, int max_length, int echo_mode, int *echo_xy, char *string)
int | vsm_string (int handle, int max_length, int echo_mode, int *echo_xy, char *string)
void | vsc_form (int handle, int *pcur_form)
void | vex_timv (int handle, int(*tim_addr)(), int(**otim_addr)(), int *tim_conv)
void | v_show_c (int handle, int reset)
void | v_hide_c (int handle)
void | vq_mouse (int handle, int *pstatus, int *x, int *y)
void | vex_butv (int handle, int(*pusrcode)(), int(**psavcode)())
void | vex_motv (int handle, int(*pusrcode)(), int(**psavcode)())
void | vex_curv (int handle, int(*pusrcode)(), int(**psavcode)())
void | vq_key_s (int handle, int *pstatus)
void | vq_extnd (int handle, int owflag, int *work_out)
int | vq_color (int handle, int color_index, int set_flag, int *rgb)
void | vql_attributes (int handle, int *attrib)
void | vqm_attributes (int handle, int *attrib)
void | vqf_attributes (int handle, int *attrib)
void | vqt_attributes (int handle, int *attrib)
void | vqt_extent (int handle, char *string, int *extent)
int | vqt_width (int handle, int character, int *cell_width, int *left_delta, int *right_delta)
int | vqt_name (int handle, int element_num, char *name)
void | vq_cellarray (int handle, int *pxyarray, int row_length, int num_rows, int *el_used, int *rows_used, int *status, int *colarray)
void | vqin_mode (int handle, int dew_type, int *input_mode)
void | vqt_fontinfo (int handle, int *minADE, int *maxADE, int *distances, int *maxwidth, int *effects)
void | vq_chcells (int handle, int *rows, int *columns)
void | v_exit_cur (int handle)
void | v_enter_cur (int handle)
void | v_curup (int handle)
void | v_curdown (int handle)
void | v_curright (int handle)
void | v_curleft (int handle)
void | v_curhome (int handle)
void | v_eeos (int handle)
void | v_eeol (int handle)
void | vs_curaddress (int handle, int row, int column)
void | v_curaddress (int handle, int row, int column)
void | v_curtext (int handle, char *string)
void | v_rvon (int handle)
void | v_rvoff (int handle)
void | vq_curaddress (int handle, int *row, int *column)
int | vq_tabstatus (int handle)
void | v_hardcopy (int handle)
void | v_dspcur (int handle, int x, int y)
void | v_rmcur (int handle)
void | v_form_adv (int handle)
void | v_output_window (int handle, int *xyarray)
void | v_clear_disp_list (int handle)
void | v_bit_image (int handle, const char *filename, int aspect, int x_scale, int y_scale, int h_align, int v_align, int *xyarray)
void | vq_scan (int handle, int *g_slice, int *g_page, int *a_slice, int *a_page, int *div_fac)
void | v_alpha_text (int handle, char *string)
void | vs_palette (int handle, int palette)
void | v_sound (int handle, int frequency, int duration)
int | vs_mute (int handle, int action)
void | vqp_films (int handle, char *film_names)
void | vqp_state (int handle, int *port, char *film_name, int *lightness, int *interlace, int *planes, int *indexes)
void | vsp_state (int handle, int port, int film_num, int lightness, int interlace, int planes, int *indexes)
void | vsp_save (int handle)
void | vsp_message (int handle)
int | vqp_error (int handle)
void | v_meta_extents (int handle, int min_x, int min_y, int max_x, int max_y)
void | v_write_meta (int handle, int num_intin, int *intin, int num_ptsin, int *ptsin)
void | vm_coords (int handle, int llx, int lly, int urx, int ury)
void | vm_filename (int handle, const char *filename)
void | vm_pagesize (int handle, int pgwidth, int pdheight)
void | v_offset (int handle, int offset)
void | v_fontinit (int handle, int fh_high, int fh_low)
void | v_escape2000 (int handle, int times)
void | vt_resolution (int handle, int xres, int yres, int *xset, int *yset)
void | vt_axis (int handle, int xres, int yres, int *xset, int *yset)
void | vt_origin (int handle, int xorigin, int yorigin)
void | vq_tdimensions (int handle, int *xdimension, int *ydimension)
void | vt_alignment (int handle, int dx, int dy)
void | vsp_film (int handle, int index, int lightness)
void | vsc_expose (int handle, int state)
int | vq_gdos (void)
long | vq_vgdos (void)
int | v_bez_on (int handle)
void | v_bez_off (int handle)
void | v_set_app_buff (int handle, void *address, int nparagraphs)
void | v_bez (int handle, int count, int *xyarr, char *bezarr, int *extent, int *totpts, int *totmoves)
void | v_bez_fill (int handle, int count, int *xyarr, char *bezarr, int *extent, int *totpts, int *totmoves)
int | v_bez_qual (int handle, int prcnt, int *actual)
void | vqt_f_extent (int handle, char *string, int *extent)
void | v_ftext (int handle, int x, int y, char *string)
void | v_ftext_offset (int handle, int x, int y, char *string, int *offset)
void | v_killoutline (int handle, void *component)
void | v_getoutline (int handle, int ch, int *xyarray, char *bezarray, int maxverts, int *numverts)
void | vst_scratch (int handle, int mode)
void | vst_error (int handle, int mode, int *errorvar)
void | vqt_advance (int handle, int ch, int *advx, int *advy, int *remx, int *remy)
void | vqt_advance32 (int handle, int ch, fix31 *advx, fix31 *advy)
int | vst_arbpt (int handle, int point, int *chwd, int *chht, int *cellwd, int *cellht)
fix31 | vst_arbpt32 (int handle, fix31 point, int *chwd, int *chht, int *cellwd, int *cellht)
void | vst_charmap (int handle, int mode)
void | v_getbitmap_info (int handle, int ch, fix31 *advx, fix31 *advy, fix31 *xoff, fix31 *yoff, fix31 *width, fix31 *height)
void | vqt_pairkern (int handle, int ch1, int ch2, fix31 *x, fix31 *y)
void | vqt_trackkern (int handle, fix31 *x, fix31 *y)
void | vqt_fontheader (int handle, char *buffer, char *pathname)
void | vst_kern (int handle, int tmode, int pmode, int *tracks, int *pairs)
fix31 | vst_setsize32 (int handle, fix31 point, int *chwd, int *chht, int *cellwd, int *cellht)
void | vqt_devinfo (int handle, int devnum, int *devexits, char *devstr)
int | v_flushcache (int handle)
void | vqt_cachesize (int handle, int which_cache, long *size)
void | vqt_get_table (int handle, int **map)
int | v_loadcache (int handle, char *filename, int mode)
int | v_savecache (int handle, char *filename)
int | vst_setsize (int handle, int point, int *chwd, int *chht, int *cellwd, int *cellht)
int | vst_skew (int handle, int skew)
int | img_attach (t_image_dial *bimg, char *fichier, int tree, int obj, int fcenterw, int fcenterh)

Variables

GEMPARBLK | _GemParBlk
VDIPARBLK | _VDIParBlk
int | _app

Function Documentation

void _crystal ( AESPB * aespb )

Definition at line 11 of file d_atari.c.

int appl_exit ( void )

Definition at line 19 of file d_atari.c.

int appl_find ( const char * ap_fpname )

Definition at line 16 of file d_atari.c.

int appl_getinfo | ( | int | ap_gtype,
 |  | int * | ap_gout1,
 |  | int * | ap_gout2,
 |  | int * | ap_gout3,
 |  | int * | ap_gout4
 | ) |  |

Definition at line 22 of file d_atari.c.

int appl_init ( void )

Definition at line 13 of file d_atari.c.

int appl_read | ( | int | ap_rid,
 |  | int | ap_rlength,
 |  | void * | ap_rpbuff
 | ) |  |

Definition at line 14 of file d_atari.c.

int appl_search | ( | int | ap_smode,
 |  | char * | ap_sname,
 |  | int * | ap_stype,
 |  | int * | ap_sid
 | ) |  |

Definition at line 20 of file d_atari.c.

int appl_tplay | ( | void * | ap_tpmem,
 |  | int | ap_tpnum,
 |  | int | ap_tpscale
 | ) |  |

Definition at line 17 of file d_atari.c.

int appl_trecord | ( | void * | ap_trmem,
 |  | int | ap_trcount
 | ) |  |

Definition at line 18 of file d_atari.c.

int appl_write | ( | int | ap_wid,
 |  | int | ap_wlength,
 |  | void * | ap_wpbuff
 | ) |  |

Definition at line 15 of file d_atari.c.

long Bconin ( int dev )

Definition at line 235 of file d_atari.c.

long Bconmap ( int devno )

Definition at line 295 of file d_atari.c.

void Bconout | ( | int | dev,
 |  | int | c
 | ) |  |

Definition at line 236 of file d_atari.c.

int Bconstat ( int dev )

Definition at line 234 of file d_atari.c.

long Bcostat ( int dev )

Definition at line 241 of file d_atari.c.

long bios ( U32 )

Definition at line 173 of file d_atari.c.

void Bioskeys ( void )

Definition at line 273 of file d_atari.c.

int Blitmode ( int mode )

Definition at line 290 of file d_atari.c.

long buffoper ( int mode )

Definition at line 371 of file d_atari.c.

long buffptr ( long * ptr )

Definition at line 377 of file d_atari.c.

int Cauxin ( void )

Definition at line 179 of file d_atari.c.

int Cauxis ( void )

Definition at line 191 of file d_atari.c.

int Cauxos ( void )

Definition at line 192 of file d_atari.c.

void Cauxout ( int c )

Definition at line 180 of file d_atari.c.

long Cconin ( void )

Definition at line 177 of file d_atari.c.

int Cconis ( void )

Definition at line 187 of file d_atari.c.

int Cconos ( void )

Definition at line 189 of file d_atari.c.

void Cconout ( int c )

Definition at line 178 of file d_atari.c.

void Cconrs ( LINE * buf )

Definition at line 186 of file d_atari.c.

int Cconws ( const char * buf )

Definition at line 185 of file d_atari.c.

long Cnecin ( void )

Definition at line 184 of file d_atari.c.

int Cprnos ( void )

Definition at line 190 of file d_atari.c.

int Cprnout ( int c )

Definition at line 181 of file d_atari.c.

long Crawcin ( void )

Definition at line 183 of file d_atari.c.

long Crawio ( int w )

Definition at line 182 of file d_atari.c.

int Cursconf | ( | int | func,
 |  | int | rate
 | ) |  |

Definition at line 270 of file d_atari.c.

long Dclosedir ( long dir )

Definition at line 346 of file d_atari.c.

long Dcntl | ( | int | cmd,
 |  | char * | name,
 |  | long | arg
 | ) |  |

Definition at line 351 of file d_atari.c.

int Dcreate ( const char * path )

Definition at line 204 of file d_atari.c.

int Ddelete ( const char * path )

Definition at line 205 of file d_atari.c.

long devconnect | ( | int | src,
 |  | int | dst,
 |  | int | srcclk,
 |  | int | prescale,
 |  | int | protocol
 | ) |  |

Definition at line 374 of file d_atari.c.

int Dfree | ( | DISKINFO * | buf,
 |  | int | driveno
 | ) |  |

Definition at line 203 of file d_atari.c.

int Dgetdrv ( void )

Definition at line 193 of file d_atari.c.

int Dgetpath | ( | char * | path,
 |  | int | driveno
 | ) |  |

Definition at line 217 of file d_atari.c.

long Dlock | ( | int | mode,
 |  | int | drive
 | ) |  |

Definition at line 356 of file d_atari.c.

int DMAread | ( | long | sector,
 |  | int | count,
 |  | void * | buffer,
 |  | int | devno
 | ) |  |

Definition at line 292 of file d_atari.c.

int DMAwrite | ( | long | sector,
 |  | int | count,
 |  | void * | buffer,
 |  | int | devno
 | ) |  |

Definition at line 293 of file d_atari.c.

long Dopendir | ( | char * | name,
 |  | int | flag
 | ) |  |

Definition at line 343 of file d_atari.c.

void* Dosound ( void * buf )

Definition at line 281 of file d_atari.c.

long Dpathconf | ( | char * | name,
 |  | int | n
 | ) |  |

Definition at line 339 of file d_atari.c.

long Dreaddir | ( | int | buflen,
 |  | long | dir,
 |  | char * | buf
 | ) |  |

Definition at line 344 of file d_atari.c.

long Drewinddir ( long dir )

Definition at line 345 of file d_atari.c.

long Drvmap ( void )

Definition at line 243 of file d_atari.c.

long Dsetdrv ( int drv )

Definition at line 188 of file d_atari.c.

int Dsetpath ( const char * path )

Definition at line 206 of file d_atari.c.

void Dsp_Available | ( | long * | xavailable,
 |  | long * | yavailable
 | ) |  |

Definition at line 398 of file d_atari.c.

void Dsp_BlkBytes | ( | void * | data_in,
 |  | long | size_in,
 |  | void * | data_out,
 |  | long | size_out
 | ) |  |

Definition at line 415 of file d_atari.c.

void Dsp_BlkHandShake | ( | char * | data_in,
 |  | long | size_in,
 |  | char * | data_out,
 |  | long | size_out
 | ) |  |

Definition at line 383 of file d_atari.c.

void Dsp_BlkUnpacked | ( | long * | data_in,
 |  | long | size_in,
 |  | long * | data_out,
 |  | long | size_out
 | ) |  |

Definition at line 385 of file d_atari.c.

void Dsp_BlkWords | ( | void * | data_in,
 |  | long | size_in,
 |  | void * | data_out,
 |  | long | size_out
 | ) |  |

Definition at line 413 of file d_atari.c.

void Dsp_DoBlock | ( | char * | data_in,
 |  | long | size_in,
 |  | char * | data_out,
 |  | long | size_out
 | ) |  |

Definition at line 381 of file d_atari.c.

void Dsp_ExecBoot | ( | char * | codeptr,
 |  | long | codesize,
 |  | int | ability
 | ) |  |

Definition at line 401 of file d_atari.c.

void Dsp_ExecProg | ( | char * | codeptr,
 |  | long | codesize,
 |  | int | ability
 | ) |  |

Definition at line 400 of file d_atari.c.

void Dsp_FlushSubroutines ( void )

Definition at line 405 of file d_atari.c.

int Dsp_GetProgAbility ( void )

Definition at line 404 of file d_atari.c.

int Dsp_GetWordSize ( void )

Definition at line 395 of file d_atari.c.

int Dsp_Hf0 ( int flag )

Definition at line 409 of file d_atari.c.

int Dsp_Hf1 ( int flag )

Definition at line 410 of file d_atari.c.

int Dsp_Hf2 ( void )

Definition at line 411 of file d_atari.c.

int Dsp_Hf3 ( void )

Definition at line 412 of file d_atari.c.

char Dsp_HStat ( void )

Definition at line 417 of file d_atari.c.

int Dsp_InqSubrAbility ( int ability )

Definition at line 407 of file d_atari.c.

void Dsp_InStream | ( | char * | data_in,
 |  | long | block_size,
 |  | long | num_blocks,
 |  | long * | blocks_done
 | ) |  |

Definition at line 387 of file d_atari.c.

void Dsp_IOStream | ( | char * | data_in,
 |  | char * | data_out,
 |  | long | block_insize,
 |  | long | block_outsize,
 |  | long | num_blocks,
 |  | long * | blocks_done
 | ) |  |

Definition at line 391 of file d_atari.c.

int Dsp_LoadProg | ( | char * | file,
 |  | int | ability,
 |  | char * | buffer
 | ) |  |

Definition at line 379 of file d_atari.c.

int Dsp_LoadSubroutine | ( | char * | codeptr,
 |  | long | codesize,
 |  | int | ability
 | ) |  |

Definition at line 406 of file d_atari.c.

int Dsp_Lock ( void )

Definition at line 396 of file d_atari.c.

long Dsp_LodToBinary | ( | char * | file,
 |  | char * | codeptr
 | ) |  |

Definition at line 380 of file d_atari.c.

void Dsp_MultBlocks | ( | long | numsend,
 |  | long | numreceive,
 |  | DSPBLOCK * | sendblocks,
 |  | DSPBLOCK * | receiveblocks
 | ) |  |

Definition at line 419 of file d_atari.c.

void Dsp_OutStream | ( | char * | data_out,
 |  | long | block_size,
 |  | long | num_blocks,
 |  | long * | blocks_done
 | ) |  |

Definition at line 389 of file d_atari.c.

void Dsp_RemoveInterrupts ( int mask )

Definition at line 394 of file d_atari.c.

int Dsp_RequestUniqueAbility ( void )

Definition at line 403 of file d_atari.c.

int Dsp_Reserve | ( | long | xreserve,
 |  | long | yreserve
 | ) |  |

Definition at line 399 of file d_atari.c.

int Dsp_RunSubroutine ( int handle )

Definition at line 408 of file d_atari.c.

void Dsp_SetVectors | ( | void(*)() | receiver,
 |  | long(*)() | transmitter
 | ) |  |

Definition at line 418 of file d_atari.c.

void Dsp_TriggerHC ( int vector )

Definition at line 402 of file d_atari.c.

void Dsp_Unlock ( void )

Definition at line 397 of file d_atari.c.

long dsptristate | ( | int | dspxmit,
 |  | int | dsprec
 | ) |  |

Definition at line 372 of file d_atari.c.

void EgetPalette | ( | int | colorNum,
 |  | int | count,
 |  | int * | palettePtr
 | ) |  |

Definition at line 301 of file d_atari.c.

int Egetshift ( void )

Definition at line 297 of file d_atari.c.

int EsetBank ( int bankNum )

Definition at line 298 of file d_atari.c.

int EsetColor | ( | int | colorNum,
 |  | int | color
 | ) |  |

Definition at line 299 of file d_atari.c.

int EsetGray ( int swtch )

Definition at line 302 of file d_atari.c.

void EsetPalette | ( | int | colorNum,
 |  | int | count,
 |  | int * | palettePtr
 | ) |  |

Definition at line 300 of file d_atari.c.

int Esetshift ( int shftMode )

Definition at line 296 of file d_atari.c.

int EsetSmear ( int swtch )

Definition at line 303 of file d_atari.c.

int evnt_button | ( | int | ev_bclicks,
 |  | int | ev_bmask,
 |  | int | ev_bstate,
 |  | int * | ev_bmx,
 |  | int * | ev_bmy,
 |  | int * | ev_bbutton,
 |  | int * | ev_bkstate
 | ) |  |

Definition at line 26 of file d_atari.c.

int evnt_dclick | ( | int | ev_dnew,
 |  | int | ev_dgetset
 | ) |  |

Definition at line 44 of file d_atari.c.

int evnt_keybd ( void )

Definition at line 25 of file d_atari.c.

int evnt_mesag ( int * ev_mgpbuff )

Definition at line 33 of file d_atari.c.

int evnt_mouse | ( | int | ev_moflags,
 |  | int | ev_mox,
 |  | int | ev_moy,
 |  | int | ev_mowidth,
 |  | int | ev_moheight,
 |  | int * | ev_momx,
 |  | int * | ev_momy,
 |  | int * | ev_mobutton,
 |  | int * | ev_mokstate
 | ) |  |

Definition at line 29 of file d_atari.c.

int evnt_multi | ( | int | ev_mflags,
 |  | int | ev_mbclicks,
 |  | int | ev_mbmask,
 |  | int | ev_mbstate,
 |  | int | ev_mm1flags,
 |  | int | ev_mm1x,
 |  | int | ev_mm1y,
 |  | int | ev_mm1width,
 |  | int | ev_mm1height,
 |  | int | ev_mm2flags,
 |  | int | ev_mm2x,
 |  | int | ev_mm2y,
 |  | int | ev_mm2width,
 |  | int | ev_mm2height,
 |  | int * | ev_mmgpbuff,
 |  | int | ev_mtlocount,
 |  | int | ev_mthicount,
 |  | int * | ev_mmox,
 |  | int * | ev_mmoy,
 |  | int * | ev_mmbutton,
 |  | int * | ev_mmokstate,
 |  | int * | ev_mkreturn,
 |  | int * | ev_mbreturn
 | ) |  |

Definition at line 35 of file d_atari.c.

int evnt_timer | ( | int | ev_tlocount,
 |  | int | ev_thicount
 | ) |  |

Definition at line 34 of file d_atari.c.

int Fattrib | ( | const char * | filename,
 |  | int | wflag,
 |  | int | attrib
 | ) |  |

Definition at line 214 of file d_atari.c.

long Fchmod | ( | char * | name,
 |  | int | mode
 | ) |  |

Definition at line 353 of file d_atari.c.

long Fchown | ( | char * | name,
 |  | int | uid,
 |  | int | gid
 | ) |  |

Definition at line 352 of file d_atari.c.

int Fclose ( int handle )

Definition at line 209 of file d_atari.c.

int Fcntl | ( | int | f,
 |  | long | arg,
 |  | int | cmd
 | ) |  |

Definition at line 307 of file d_atari.c.

long Fcreate | ( | const char * | filename,
 |  | int | attr
 | ) |  |

Definition at line 207 of file d_atari.c.

int Fdatime | ( | DOSTIME * | timeptr,
 |  | int | handle,
 |  | int | wflag
 | ) |  |

Definition at line 226 of file d_atari.c.

int Fdelete ( const char * filename )

Definition at line 212 of file d_atari.c.

long Fdup ( int handle )

Definition at line 215 of file d_atari.c.

int Fforce | ( | int | stch,
 |  | int | nonstdh
 | ) |  |

Definition at line 216 of file d_atari.c.

long Fgetchar | ( | int | f,
 |  | int | mode
 | ) |  |

Definition at line 310 of file d_atari.c.

DTA* Fgetdta ( void )

Definition at line 200 of file d_atari.c.

long Finstat ( int f )

Definition at line 308 of file d_atari.c.

long Flink | ( | char * | oldname,
 |  | char * | newname
 | ) |  |

Definition at line 348 of file d_atari.c.

long Flock | ( | int | handle,
 |  | int | mode,
 |  | long | start,
 |  | long | length
 | ) |  |

Definition at line 231 of file d_atari.c.

int Flopfmt | ( | void * | buf,
 |  | void * | filler,
 |  | int | devno,
 |  | int | spt,
 |  | int | trackno,
 |  | int | sideno,
 |  | int | interlv,
 |  | long | magic,
 |  | int | virgin
 | ) |  |

Definition at line 258 of file d_atari.c.

int Floprate | ( | int | devno,
 |  | int | newrate
 | ) |  |

Definition at line 289 of file d_atari.c.

int Floprd | ( | void * | buf,
 |  | void * | filler,
 |  | int | devno,
 |  | int | sectno,
 |  | int | trackno,
 |  | int | sideno,
 |  | int | count
 | ) |  |

Definition at line 254 of file d_atari.c.

int Flopver | ( | void * | buf,
 |  | void * | filler,
 |  | int | devno,
 |  | int | sectno,
 |  | int | trackno,
 |  | int | sideno,
 |  | int | count
 | ) |  |

Definition at line 267 of file d_atari.c.

int Flopwr | ( | void * | buf,
 |  | void * | filler,
 |  | int | devno,
 |  | int | sectno,
 |  | int | trackno,
 |  | int | sideno,
 |  | int | count
 | ) |  |

Definition at line 256 of file d_atari.c.

long Fmidipipe | ( | int | pid,
 |  | int | in,
 |  | int | out
 | ) |  |

Definition at line 341 of file d_atari.c.

long Fopen | ( | const char * | filename,
 |  | int | mode
 | ) |  |

Definition at line 208 of file d_atari.c.

int form_alert | ( | int | fo_adefbttn,
 |  | const char * | fo_astring
 | ) |  |

Definition at line 86 of file d_atari.c.

int form_button | ( | OBJECT * | fo_btree,
 |  | int | fo_bobject,
 |  | int | fo_bclicks,
 |  | int * | fo_bnxtobj
 | ) |  |

Definition at line 92 of file d_atari.c.

int form_center | ( | OBJECT * | fo_ctree,
 |  | int * | fo_cx,
 |  | int * | fo_cy,
 |  | int * | fo_cw,
 |  | int * | fo_ch
 | ) |  |

Definition at line 88 of file d_atari.c.

int form_dial | ( | int | fo_diflag,
 |  | int | fo_dilittlx,
 |  | int | fo_dilittly,
 |  | int | fo_dilittlw,
 |  | int | fo_dilittlh,
 |  | int | fo_dibigx,
 |  | int | fo_dibigy,
 |  | int | fo_dibigw,
 |  | int | fo_dibigh
 | ) |  |

Definition at line 82 of file d_atari.c.

int form_do | ( | OBJECT * | fo_dotree,
 |  | int | fo_dostartob
 | ) |  |

Definition at line 81 of file d_atari.c.

int form_error ( int fo_enum )

Definition at line 87 of file d_atari.c.

int form_keybd | ( | OBJECT * | fo_ktree,
 |  | int | fo_kobject,
 |  | int | fo_kobnext,
 |  | int | fo_kchar,
 |  | int * | fo_knxtobject,
 |  | int * | fo_knxtchar
 | ) |  |

Definition at line 90 of file d_atari.c.

long Foutstat ( int f )

Definition at line 309 of file d_atari.c.

int Fpipe ( int * usrh )

Definition at line 306 of file d_atari.c.

long Fputchar | ( | int | f,
 |  | long | c,
 |  | int | mode
 | ) |  |

Definition at line 311 of file d_atari.c.

long Fread | ( | int | handle,
 |  | long | count,
 |  | void * | buf
 | ) |  |

Definition at line 210 of file d_atari.c.

long Freadlink | ( | int | size,
 |  | char * | buf,
 |  | char * | name
 | ) |  |

Definition at line 350 of file d_atari.c.

int Frename | ( | int | zero,
 |  | const char * | oldname,
 |  | const char * | newname
 | ) |  |

Definition at line 225 of file d_atari.c.

long Fseek | ( | long | offset,
 |  | int | handle,
 |  | int | seekmode
 | ) |  |

Definition at line 213 of file d_atari.c.

int fsel_exinput | ( | char * | fs_einpath,
 |  | char * | fs_einsel,
 |  | int * | fs_eexbutton,
 |  | char * | fs_elabel
 | ) |  |

Definition at line 135 of file d_atari.c.

int fsel_input | ( | char * | fs_iinpath,
 |  | char * | fs_iinsel,
 |  | int * | fs_iexbutton
 | ) |  |

Definition at line 133 of file d_atari.c.

int Fselect | ( | unsigned int | timeout,
 |  | long * | rfds,
 |  | long * | wfds,
 |  | long * | xfds
 | ) |  |

Definition at line 332 of file d_atari.c.

void Fsetdta ( DTA * buf )

Definition at line 194 of file d_atari.c.

int Fsfirst | ( | const char * | filename,
 |  | int | attr
 | ) |  |

Definition at line 223 of file d_atari.c.

int Fsnext ( void )

Definition at line 224 of file d_atari.c.

long Fsymlink | ( | char * | oldname,
 |  | char * | newname
 | ) |  |

Definition at line 349 of file d_atari.c.

long Fwrite | ( | int | handle,
 |  | long | count,
 |  | void * | buf
 | ) |  |

Definition at line 211 of file d_atari.c.

long Fxattr | ( | int | flag,
 |  | char * | name,
 |  | XATTR * | buf
 | ) |  |

Definition at line 347 of file d_atari.c.

long gemdos ( U32 )

Definition at line 172 of file d_atari.c.

BPB* Getbpb ( int dev )

Definition at line 240 of file d_atari.c.

void Getmpb ( MPB * ptr )

Definition at line 233 of file d_atari.c.

int Getrez ( void )

Definition at line 250 of file d_atari.c.

unsigned long Gettime ( void )

Definition at line 272 of file d_atari.c.

char Giaccess | ( | char | data,
 |  | int | regno
 | ) |  |

Definition at line 277 of file d_atari.c.

long gpio | ( | int | mode,
 |  | int | data
 | ) |  |

Definition at line 373 of file d_atari.c.

int graf_dragbox | ( | int | gr_dwidth,
 |  | int | gr_dheight,
 |  | int | gr_dstartx,
 |  | int | gr_dstarty,
 |  | int | gr_dboundx,
 |  | int | gr_dboundy,
 |  | int | gr_dboundw,
 |  | int | gr_dboundh,
 |  | int * | gr_dfinishx,
 |  | int * | gr_dfinishy
 | ) |  |

Definition at line 101 of file d_atari.c.

int graf_growbox | ( | int | gr_gstx,
 |  | int | gr_gsty,
 |  | int | gr_gstwidth,
 |  | int | gr_gstheight,
 |  | int | gr_gfinx,
 |  | int | gr_gfiny,
 |  | int | gr_gfinwidth,
 |  | int | gr_gfinheight
 | ) |  |

Definition at line 112 of file d_atari.c.

int graf_handle | ( | int * | gr_hwchar,
 |  | int * | gr_hhchar,
 |  | int * | gr_hwbox,
 |  | int * | gr_hhbox
 | ) |  |

Definition at line 124 of file d_atari.c.

int graf_mbox | ( | int | gr_mwidth,
 |  | int | gr_mheight,
 |  | int | gr_msourcex,
 |  | int | gr_msourcey,
 |  | int | gr_mdestx,
 |  | int | gr_mdesty
 | ) |  |

Definition at line 109 of file d_atari.c.

int graf_mkstate | ( | int * | gr_mkmx,
 |  | int * | gr_mkmy,
 |  | int * | gr_mkmstate,
 |  | int * | gr_mkkstate
 | ) |  |

Definition at line 127 of file d_atari.c.

int graf_mouse | ( | int | gr_monumber,
 |  | MFORM * | gr_mofaddr
 | ) |  |

Definition at line 126 of file d_atari.c.

int graf_movebox | ( | int | gr_mwidth,
 |  | int | gr_mheight,
 |  | int | gr_msourcex,
 |  | int | gr_msourcey,
 |  | int | gr_mdestx,
 |  | int | gr_mdesty
 | ) |  |

Definition at line 106 of file d_atari.c.

int graf_rubberbox | ( | int | gr_rx,
 |  | int | gr_ry,
 |  | int | gr_minwidth,
 |  | int | gr_minheight,
 |  | int * | gr_rlastwidth,
 |  | int * | gr_rlastheight
 | ) |  |

Definition at line 95 of file d_atari.c.

int graf_rubbox | ( | int | gr_rx,
 |  | int | gr_ry,
 |  | int | gr_minwidth,
 |  | int | gr_minheight,
 |  | int * | gr_rlastwidth,
 |  | int * | gr_rlastheight
 | ) |  |

Definition at line 98 of file d_atari.c.

int graf_shrinkbox | ( | int | gr_sfinx,
 |  | int | gr_sfiny,
 |  | int | gr_sfinwidth,
 |  | int | gr_sfinheight,
 |  | int | gr_sstx,
 |  | int | gr_ssty,
 |  | int | gr_sstwidth,
 |  | int | gr_sstheight
 | ) |  |

Definition at line 116 of file d_atari.c.

int graf_slidebox | ( | OBJECT * | gr_slptree,
 |  | int | gr_slparent,
 |  | int | gr_slobject,
 |  | int | gr_slvh
 | ) |  |

Definition at line 122 of file d_atari.c.

int graf_watchbox | ( | OBJECT * | gr_wptree,
 |  | int | gr_wobject,
 |  | int | gr_winstate,
 |  | int | gr_woutstate
 | ) |  |

Definition at line 120 of file d_atari.c.

void Ikbdws | ( | int | count,
 |  | void * | ptr
 | ) |  |

Definition at line 274 of file d_atari.c.

int img_attach | ( | t_image_dial * | bimg,
 |  | char * | fichier,
 |  | int | tree,
 |  | int | obj,
 |  | int | fcenterw,
 |  | int | fcenterh
 | ) |  |

Definition at line 671 of file d_atari.c.

void Initmouse | ( | int | type,
 |  | MOUSE * | par,
 |  | void(*)() | mousevec
 | ) |  |

Definition at line 246 of file d_atari.c.

IOREC* Iorec ( int dev )

Definition at line 262 of file d_atari.c.

void Jdisint ( int number )

Definition at line 275 of file d_atari.c.

void Jenabint ( int number )

Definition at line 276 of file d_atari.c.

KBDVBASE* Kbdvbase ( void )

Definition at line 283 of file d_atari.c.

int Kbrate | ( | int | initial,
 |  | int | repeat
 | ) |  |

Definition at line 284 of file d_atari.c.

long Kbshift ( int mode )

Definition at line 244 of file d_atari.c.

KEYTAB* Keytbl | ( | void * | unshift,
 |  | void * | shift,
 |  | void * | capslock
 | ) |  |

Definition at line 264 of file d_atari.c.

long locksnd ( void )

Definition at line 363 of file d_atari.c.

void* Logbase ( void )

Definition at line 249 of file d_atari.c.

long Maddalt | ( | void * | start,
 |  | long | size
 | ) |  |

Definition at line 229 of file d_atari.c.

void* Malloc ( long number )

Definition at line 218 of file d_atari.c.

long Mediach ( int dev )

Definition at line 242 of file d_atari.c.

int menu_attach | ( | int | me_flag,
 |  | OBJECT * | me_tree,
 |  | int | me_item,
 |  | MENU * | me_mdata
 | ) |  |

Definition at line 57 of file d_atari.c.

int menu_bar | ( | OBJECT * | me_btree,
 |  | int | me_bshow
 | ) |  |

Definition at line 46 of file d_atari.c.

int menu_icheck | ( | OBJECT * | me_ctree,
 |  | int | me_citem,
 |  | int | me_ccheck
 | ) |  |

Definition at line 47 of file d_atari.c.

int menu_ienable | ( | OBJECT * | me_etree,
 |  | int | me_eitem,
 |  | int | me_eenable
 | ) |  |

Definition at line 48 of file d_atari.c.

int menu_istart | ( | int | me_flag,
 |  | OBJECT * | me_tree,
 |  | int | me_imenu,
 |  | int | me_item
 | ) |  |

Definition at line 59 of file d_atari.c.

int menu_popup | ( | MENU * | me_menu,
 |  | int | me_xpos,
 |  | int | me_ypos,
 |  | MENU * | me_mdata
 | ) |  |

Definition at line 55 of file d_atari.c.

int menu_register | ( | int | me_rapid,
 |  | const char * | me_rpstring
 | ) |  |

Definition at line 54 of file d_atari.c.

int menu_settings | ( | int | me_flag,
 |  | MN_SET * | me_values
 | ) |  |

Definition at line 61 of file d_atari.c.

int menu_text | ( | OBJECT * | me_ttree,
 |  | int | me_titem,
 |  | const char * | me_ttext
 | ) |  |

Definition at line 52 of file d_atari.c.

int menu_tnormal | ( | OBJECT * | me_ntree,
 |  | int | me_ntitle,
 |  | int | me_nnormal
 | ) |  |

Definition at line 50 of file d_atari.c.

void Mfpint | ( | int | erno,
 |  | void(*)() | vector
 | ) |  |

Definition at line 261 of file d_atari.c.

int Mfree ( void * block )

Definition at line 219 of file d_atari.c.

void Midiws | ( | int | cnt,
 |  | void * | ptr
 | ) |  |

Definition at line 260 of file d_atari.c.

int mon_type ( void )

Definition at line 422 of file d_atari.c.

int Mshrink | ( | int | zero,
 |  | void * | block,
 |  | long | newsiz
 | ) |  |

Definition at line 220 of file d_atari.c.

void* Mxalloc | ( | long | number,
 |  | int | mode
 | ) |  |

Definition at line 228 of file d_atari.c.

int NVMaccess | ( | int | opcode,
 |  | int | start,
 |  | int | count,
 |  | void * | buffer
 | ) |  |

Definition at line 294 of file d_atari.c.

int objc_add | ( | OBJECT * | ob_atree,
 |  | int | ob_aparent,
 |  | int | ob_achild
 | ) |  |

Definition at line 63 of file d_atari.c.

int objc_change | ( | OBJECT * | ob_ctree,
 |  | int | ob_cobject,
 |  | int | ob_cresvd,
 |  | int | ob_cxclip,
 |  | int | ob_cyclip,
 |  | int | ob_cwclip,
 |  | int | ob_chclip,
 |  | int | ob_cnewstate,
 |  | int | ob_credraw
 | ) |  |

Definition at line 76 of file d_atari.c.

int objc_delete | ( | OBJECT * | ob_dltree,
 |  | int | ob_dlobject
 | ) |  |

Definition at line 64 of file d_atari.c.

int objc_draw | ( | OBJECT * | ob_drtree,
 |  | int | ob_drstartob,
 |  | int | ob_drdepth,
 |  | int | ob_drxclip,
 |  | int | ob_dryclip,
 |  | int | ob_drwclip,
 |  | int | ob_drhclip
 | ) |  |

Definition at line 65 of file d_atari.c.

int objc_edit | ( | OBJECT * | ob_edtree,
 |  | int | ob_edobject,
 |  | int | ob_edchar,
 |  | int * | ob_edidx,
 |  | int | ob_edkind
 | ) |  |

Definition at line 74 of file d_atari.c.

int objc_find | ( | OBJECT * | ob_ftree,
 |  | int | ob_fstartob,
 |  | int | ob_fdepth,
 |  | int | ob_fmx,
 |  | int | ob_fmy
 | ) |  |

Definition at line 68 of file d_atari.c.

int objc_offset | ( | OBJECT * | ob_oftree,
 |  | int | ob_ofobject,
 |  | int * | ob_ofxoff,
 |  | int * | ob_ofyoff
 | ) |  |

Definition at line 70 of file d_atari.c.

int objc_order | ( | OBJECT * | ob_ortree,
 |  | int | ob_orobject,
 |  | int | ob_ornewpos
 | ) |  |

Definition at line 72 of file d_atari.c.

void Offgibit ( int bitno )

Definition at line 278 of file d_atari.c.

void Ongibit ( int bitno )

Definition at line 279 of file d_atari.c.

void Pause ( void )

Definition at line 336 of file d_atari.c.

int Pdomain ( int newdom )

Definition at line 328 of file d_atari.c.

long Pexec | ( | int | mode,
 |  | char * | ptr1,
 |  | void * | ptr2,
 |  | void * | ptr3
 | ) |  |

Definition at line 221 of file d_atari.c.

int Pfork ( void )

Definition at line 330 of file d_atari.c.

int Pgetegid ( void )

Definition at line 360 of file d_atari.c.

int Pgeteuid ( void )

Definition at line 359 of file d_atari.c.

int Pgetgid ( void )

Definition at line 323 of file d_atari.c.

int Pgetpgrp ( void )

Definition at line 316 of file d_atari.c.

int Pgetpid ( void )

Definition at line 314 of file d_atari.c.

int Pgetppid ( void )

Definition at line 315 of file d_atari.c.

int Pgetuid ( void )

Definition at line 318 of file d_atari.c.

void* Physbase ( void )

Definition at line 248 of file d_atari.c.

int Pkill | ( | int | pid,
 |  | int | sig
 | ) |  |

Definition at line 320 of file d_atari.c.

long Pmsg | ( | int | mode,
 |  | long | mbox,
 |  | MSG * | msg
 | ) |  |

Definition at line 340 of file d_atari.c.

int Pnice ( int delta )

Definition at line 313 of file d_atari.c.

int Prenice | ( | int | pid,
 |  | int | delta
 | ) |  |

Definition at line 342 of file d_atari.c.

void Protobt | ( | void * | buf,
 |  | long | serialno,
 |  | int | disktype,
 |  | int | execflag
 | ) |  |

Definition at line 266 of file d_atari.c.

void Prtblk ( PBDEF * par )

Definition at line 285 of file d_atari.c.

void Prusage ( long * r )

Definition at line 333 of file d_atari.c.

long Psemaphore | ( | int | mode,
 |  | long | id,
 |  | long | timeout
 | ) |  |

Definition at line 355 of file d_atari.c.

int Psetgid ( int id )

Definition at line 324 of file d_atari.c.

long Psetlimit | ( | int | lim,
 |  | long | value
 | ) |  |

Definition at line 334 of file d_atari.c.

int Psetpgrp | ( | int | pid,
 |  | int | newgrp
 | ) |  |

Definition at line 317 of file d_atari.c.

int Psetuid ( int id )

Definition at line 319 of file d_atari.c.

long Psigaction | ( | int | sig,
 |  | SIGACTION * | act,
 |  | SIGACTION * | oact
 | ) |  |

Definition at line 358 of file d_atari.c.

long Psigblock ( long mask )

Definition at line 325 of file d_atari.c.

void* Psignal | ( | int | sig,
 |  | void * | handler
 | ) |  |

Definition at line 321 of file d_atari.c.

void Psigpause ( unsigned long mask )

Definition at line 357 of file d_atari.c.

long Psigpending ( void )

Definition at line 338 of file d_atari.c.

void Psigreturn ( void )

Definition at line 329 of file d_atari.c.

long Psigsetmask ( long mask )

Definition at line 326 of file d_atari.c.

void Pterm ( int retcode )

Definition at line 222 of file d_atari.c.

void Pterm0 ( void )

Definition at line 176 of file d_atari.c.

void Ptermres | ( | long | keepcnt,
 |  | int | retcode
 | ) |  |

Definition at line 202 of file d_atari.c.

long Pumask ( unsigned int mode )

Definition at line 354 of file d_atari.c.

void Puntaes ( void )

Definition at line 288 of file d_atari.c.

long Pusrval ( long arg )

Definition at line 327 of file d_atari.c.

int Pvfork ( void )

Definition at line 322 of file d_atari.c.

long Pwait ( void )

Definition at line 312 of file d_atari.c.

long Pwait3 | ( | int | flag,
 |  | long * | rusage
 | ) |  |

Definition at line 331 of file d_atari.c.

long Pwaitpid | ( | int | pid,
 |  | int | flag,
 |  | long * | rusage
 | ) |  |

Definition at line 361 of file d_atari.c.

long Random ( void )

Definition at line 265 of file d_atari.c.

long Rsconf | ( | int | baud,
 |  | int | ctr,
 |  | int | ucr,
 |  | int | rsr,
 |  | int | tsr,
 |  | int | scr
 | ) |  |

Definition at line 263 of file d_atari.c.

int rsrc_free ( void )

Definition at line 155 of file d_atari.c.

int rsrc_gaddr | ( | int | re_gtype,
 |  | int | re_gindex,
 |  | void * | gaddr
 | ) |  |

Definition at line 156 of file d_atari.c.

int rsrc_load ( const char * re_lpfname )

Definition at line 154 of file d_atari.c.

int rsrc_obfix | ( | OBJECT * | re_otree,
 |  | int | re_oobject
 | ) |  |

Definition at line 158 of file d_atari.c.

int rsrc_rcfix ( RSHDR * rc_header )

Definition at line 159 of file d_atari.c.

int rsrc_saddr | ( | int | re_stype,
 |  | int | re_sindex,
 |  | void * | saddr
 | ) |  |

Definition at line 157 of file d_atari.c.

long Rwabs | ( | int | rwflag,
 |  | void * | buf,
 |  | int | cnt,
 |  | int | recnr,
 |  | int | dev
 | ) |  |

Definition at line 237 of file d_atari.c.

void Scrdmp ( void )

Definition at line 269 of file d_atari.c.

int scrp_read ( char * sc_rpscrap )

Definition at line 130 of file d_atari.c.

int scrp_write ( char * sc_wpscrap )

Definition at line 131 of file d_atari.c.

long setbuffer | ( | int | reg,
 |  | void * | begaddr,
 |  | void * | endaddr
 | ) |  |

Definition at line 366 of file d_atari.c.

int Setcolor | ( | int | colornum,
 |  | int | color
 | ) |  |

Definition at line 253 of file d_atari.c.

void(*)() Setexc | ( | int | number,
 |  | void(*)() | exchdlr
 | ) |  |

Definition at line 238 of file d_atari.c.

long setinterrupt | ( | int | src_inter,
 |  | int | cause
 | ) |  |

Definition at line 370 of file d_atari.c.

long setmode ( int mode )

Definition at line 367 of file d_atari.c.

long setmontracks ( int montrack )

Definition at line 369 of file d_atari.c.

void Setpalette ( void * pallptr )

Definition at line 252 of file d_atari.c.

int Setprt ( int config )

Definition at line 282 of file d_atari.c.

void Setscreen | ( | void * | laddr,
 |  | void * | paddr,
 |  | int | rez
 | ) |  |

Definition at line 251 of file d_atari.c.

void Settime ( unsigned long time )

Definition at line 271 of file d_atari.c.

long settracks | ( | int | playtracks,
 |  | int | rectracks
 | ) |  |

Definition at line 368 of file d_atari.c.

int shel_envrn | ( | char ** | sh_epvalue,
 |  | char * | sh_eparm
 | ) |  |

Definition at line 167 of file d_atari.c.

int shel_find ( char * sh_fpbuff )

Definition at line 166 of file d_atari.c.

int shel_get | ( | char * | sh_gaddr,
 |  | int | sh_glen
 | ) |  |

Definition at line 164 of file d_atari.c.

int shel_put | ( | char * | sh_paddr,
 |  | int | sh_plen
 | ) |  |

Definition at line 165 of file d_atari.c.

int shel_read | ( | char * | sh_rpcmd,
 |  | char * | sh_rptail
 | ) |  |

Definition at line 161 of file d_atari.c.

int shel_write | ( | int | sh_wdoex,
 |  | int | sh_wisgr,
 |  | int | sh_wiscr,
 |  | char * | sh_wpcmd,
 |  | char * | sh_wptail
 | ) |  |

Definition at line 162 of file d_atari.c.

long sndstatus ( int reset )

Definition at line 376 of file d_atari.c.

long soundcmd | ( | int | mode,
 |  | int | data
 | ) |  |

Definition at line 365 of file d_atari.c.

void* Ssbrk ( int count )

Definition at line 247 of file d_atari.c.

long Super ( void * stack )

Definition at line 195 of file d_atari.c.

long Supexec ( long(*)() func )

Definition at line 287 of file d_atari.c.

int Sversion ( void )

Definition at line 201 of file d_atari.c.

int Syield ( void )

Definition at line 305 of file d_atari.c.

long Sysconf ( int n )

Definition at line 337 of file d_atari.c.

long Talarm ( long secs )

Definition at line 335 of file d_atari.c.

unsigned int Tgetdate ( void )

Definition at line 196 of file d_atari.c.

unsigned int Tgettime ( void )

Definition at line 198 of file d_atari.c.

long Tickcal ( void )

Definition at line 239 of file d_atari.c.

unsigned int Tsetdate ( unsigned int date )

Definition at line 197 of file d_atari.c.

unsigned int Tsettime ( unsigned int time )

Definition at line 199 of file d_atari.c.

long unlocksnd ( void )

Definition at line 364 of file d_atari.c.

void v_alpha_text | ( | int | handle,
 |  | char * | string
 | ) |  |

Definition at line 579 of file d_atari.c.

void v_arc | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int | radius,
 |  | int | begang,
 |  | int | endang
 | ) |  |

Definition at line 450 of file d_atari.c.

void v_bar | ( | int | handle,
 |  | int * | pxyarray
 | ) |  |

Definition at line 449 of file d_atari.c.

void v_bez | ( | int | handle,
 |  | int | count,
 |  | int * | xyarr,
 |  | char * | bezarr,
 |  | int * | extent,
 |  | int * | totpts,
 |  | int * | totmoves
 | ) |  |

Definition at line 621 of file d_atari.c.

void v_bez_fill | ( | int | handle,
 |  | int | count,
 |  | int * | xyarr,
 |  | char * | bezarr,
 |  | int * | extent,
 |  | int * | totpts,
 |  | int * | totmoves
 | ) |  |

Definition at line 623 of file d_atari.c.

void v_bez_off ( int handle )

Definition at line 619 of file d_atari.c.

int v_bez_on ( int handle )

Definition at line 618 of file d_atari.c.

int v_bez_qual | ( | int | handle,
 |  | int | prcnt,
 |  | int * | actual
 | ) |  |

Definition at line 626 of file d_atari.c.

void v_bit_image | ( | int | handle,
 |  | const char * | filename,
 |  | int | aspect,
 |  | int | x_scale,
 |  | int | y_scale,
 |  | int | h_align,
 |  | int | v_align,
 |  | int * | xyarray
 | ) |  |

Definition at line 574 of file d_atari.c.

void v_cellarray | ( | int | handle,
 |  | int * | pxyarray,
 |  | int | row_length,
 |  | int | el_used,
 |  | int | num_rows,
 |  | int | wrt_mode,
 |  | int * | colarray
 | ) |  |

Definition at line 444 of file d_atari.c.

void v_circle | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int | radius
 | ) |  |

Definition at line 454 of file d_atari.c.

void v_clear_disp_list ( int handle )

Definition at line 573 of file d_atari.c.

void v_clrwk ( int handle )

Definition at line 435 of file d_atari.c.

void v_clsvwk ( int handle )

Definition at line 434 of file d_atari.c.

void v_clswk ( int handle )

Definition at line 432 of file d_atari.c.

void v_contourfill | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int | index
 | ) |  |

Definition at line 447 of file d_atari.c.

void v_curaddress | ( | int | handle,
 |  | int | row,
 |  | int | column
 | ) |  |

Definition at line 562 of file d_atari.c.

void v_curdown ( int handle )

Definition at line 555 of file d_atari.c.

void v_curhome ( int handle )

Definition at line 558 of file d_atari.c.

void v_curleft ( int handle )

Definition at line 557 of file d_atari.c.

void v_curright ( int handle )

Definition at line 556 of file d_atari.c.

void v_curtext | ( | int | handle,
 |  | char * | string
 | ) |  |

Definition at line 563 of file d_atari.c.

void v_curup ( int handle )

Definition at line 554 of file d_atari.c.

void v_dspcur | ( | int | handle,
 |  | int | x,
 |  | int | y
 | ) |  |

Definition at line 569 of file d_atari.c.

void v_eeol ( int handle )

Definition at line 560 of file d_atari.c.

void v_eeos ( int handle )

Definition at line 559 of file d_atari.c.

void v_ellarc | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int | xradius,
 |  | int | yradius,
 |  | int | begang,
 |  | int | endang
 | ) |  |

Definition at line 455 of file d_atari.c.

void v_ellipse | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int | xradius,
 |  | int | yradius
 | ) |  |

Definition at line 459 of file d_atari.c.

void v_ellpie | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int | xradius,
 |  | int | yradius,
 |  | int | begang,
 |  | int | endang
 | ) |  |

Definition at line 457 of file d_atari.c.

void v_enter_cur ( int handle )

Definition at line 553 of file d_atari.c.

void v_escape2000 | ( | int | handle,
 |  | int | times
 | ) |  |

Definition at line 603 of file d_atari.c.

void v_exit_cur ( int handle )

Definition at line 552 of file d_atari.c.

void v_fillarea | ( | int | handle,
 |  | int | count,
 |  | int * | pxyarray
 | ) |  |

Definition at line 443 of file d_atari.c.

int v_flushcache ( int handle )

Definition at line 656 of file d_atari.c.

void v_fontinit | ( | int | handle,
 |  | int | fh_high,
 |  | int | fh_low
 | ) |  |

Definition at line 602 of file d_atari.c.

void v_form_adv ( int handle )

Definition at line 571 of file d_atari.c.

void v_ftext | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | char * | string
 | ) |  |

Definition at line 629 of file d_atari.c.

void v_ftext_offset | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | char * | string,
 |  | int * | offset
 | ) |  |

Definition at line 630 of file d_atari.c.

void v_get_pixel | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int * | pel,
 |  | int * | index
 | ) |  |

Definition at line 501 of file d_atari.c.

void v_getbitmap_info | ( | int | handle,
 |  | int | ch,
 |  | fix31 * | advx,
 |  | fix31 * | advy,
 |  | fix31 * | xoff,
 |  | fix31 * | yoff,
 |  | fix31 * | width,
 |  | fix31 * | height
 | ) |  |

Definition at line 644 of file d_atari.c.

void v_getoutline | ( | int | handle,
 |  | int | ch,
 |  | int * | xyarray,
 |  | char * | bezarray,
 |  | int | maxverts,
 |  | int * | numverts
 | ) |  |

Definition at line 632 of file d_atari.c.

void v_gtext | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | char * | string
 | ) |  |

Definition at line 442 of file d_atari.c.

void v_hardcopy ( int handle )

Definition at line 568 of file d_atari.c.

void v_hide_c ( int handle )

Definition at line 523 of file d_atari.c.

void v_justified | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | char * | string,
 |  | int | length,
 |  | int | word_space,
 |  | int | char_space
 | ) |  |

Definition at line 463 of file d_atari.c.

void v_killoutline | ( | int | handle,
 |  | void * | component
 | ) |  |

Definition at line 631 of file d_atari.c.

int v_loadcache | ( | int | handle,
 |  | char * | filename,
 |  | int | mode
 | ) |  |

Definition at line 659 of file d_atari.c.

void v_meta_extents | ( | int | handle,
 |  | int | min_x,
 |  | int | min_y,
 |  | int | max_x,
 |  | int | max_y
 | ) |  |

Definition at line 593 of file d_atari.c.

void v_offset | ( | int | handle,
 |  | int | offset
 | ) |  |

Definition at line 601 of file d_atari.c.

void v_opnvwk | ( | int * | work_in,
 |  | int * | handle,
 |  | int * | work_out
 | ) |  |

Definition at line 433 of file d_atari.c.

void v_opnwk | ( | int * | work_in,
 |  | int * | handle,
 |  | int * | work_out
 | ) |  |

Definition at line 431 of file d_atari.c.

void v_output_window | ( | int | handle,
 |  | int * | xyarray
 | ) |  |

Definition at line 572 of file d_atari.c.

void v_pieslice | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int | radius,
 |  | int | begang,
 |  | int | endang
 | ) |  |

Definition at line 452 of file d_atari.c.

void v_pline | ( | int | handle,
 |  | int | count,
 |  | int * | pxyarray
 | ) |  |

Definition at line 440 of file d_atari.c.

void v_pmarker | ( | int | handle,
 |  | int | count,
 |  | int * | pxyarray
 | ) |  |

Definition at line 441 of file d_atari.c.

void v_rbox | ( | int | handle,
 |  | int * | pxyarray
 | ) |  |

Definition at line 461 of file d_atari.c.

void v_rfbox | ( | int | handle,
 |  | int * | pxyarray
 | ) |  |

Definition at line 462 of file d_atari.c.

void v_rmcur ( int handle )

Definition at line 570 of file d_atari.c.

void v_rvoff ( int handle )

Definition at line 565 of file d_atari.c.

void v_rvon ( int handle )

Definition at line 564 of file d_atari.c.

int v_savecache | ( | int | handle,
 |  | char * | filename
 | ) |  |

Definition at line 660 of file d_atari.c.

void v_set_app_buff | ( | int | handle,
 |  | void * | address,
 |  | int | nparagraphs
 | ) |  |

Definition at line 620 of file d_atari.c.

void v_show_c | ( | int | handle,
 |  | int | reset
 | ) |  |

Definition at line 522 of file d_atari.c.

void v_sound | ( | int | handle,
 |  | int | frequency,
 |  | int | duration
 | ) |  |

Definition at line 581 of file d_atari.c.

void v_updwk ( int handle )

Definition at line 436 of file d_atari.c.

void v_write_meta | ( | int | handle,
 |  | int | num_intin,
 |  | int * | intin,
 |  | int | num_ptsin,
 |  | int * | ptsin
 | ) |  |

Definition at line 595 of file d_atari.c.

void vex_butv | ( | int | handle,
 |  | int(*)() | pusrcode,
 |  | int(**)() | psavcode
 | ) |  |

Definition at line 525 of file d_atari.c.

void vex_curv | ( | int | handle,
 |  | int(*)() | pusrcode,
 |  | int(**)() | psavcode
 | ) |  |

Definition at line 527 of file d_atari.c.

void vex_motv | ( | int | handle,
 |  | int(*)() | pusrcode,
 |  | int(**)() | psavcode
 | ) |  |

Definition at line 526 of file d_atari.c.

void vex_timv | ( | int | handle,
 |  | int(*)() | tim_addr,
 |  | int(**)() | otim_addr,
 |  | int * | tim_conv
 | ) |  |

Definition at line 520 of file d_atari.c.

void VgetRGB | ( | int | index,
 |  | int | count,
 |  | long * | array
 | ) |  |

Definition at line 426 of file d_atari.c.

long VgetSize ( int mode )

Definition at line 423 of file d_atari.c.

void vm_coords | ( | int | handle,
 |  | int | llx,
 |  | int | lly,
 |  | int | urx,
 |  | int | ury
 | ) |  |

Definition at line 598 of file d_atari.c.

void vm_filename | ( | int | handle,
 |  | const char * | filename
 | ) |  |

Definition at line 599 of file d_atari.c.

void vm_pagesize | ( | int | handle,
 |  | int | pgwidth,
 |  | int | pdheight
 | ) |  |

Definition at line 600 of file d_atari.c.

int vq_aes ( void )

Definition at line 10 of file d_atari.c.

void vq_cellarray | ( | int | handle,
 |  | int * | pxyarray,
 |  | int | row_length,
 |  | int | num_rows,
 |  | int * | el_used,
 |  | int * | rows_used,
 |  | int * | status,
 |  | int * | colarray
 | ) |  |

Definition at line 542 of file d_atari.c.

void vq_chcells | ( | int | handle,
 |  | int * | rows,
 |  | int * | columns
 | ) |  |

Definition at line 551 of file d_atari.c.

int vq_color | ( | int | handle,
 |  | int | color_index,
 |  | int | set_flag,
 |  | int * | rgb
 | ) |  |

Definition at line 531 of file d_atari.c.

void vq_curaddress | ( | int | handle,
 |  | int * | row,
 |  | int * | column
 | ) |  |

Definition at line 566 of file d_atari.c.

void vq_extnd | ( | int | handle,
 |  | int | owflag,
 |  | int * | work_out
 | ) |  |

Definition at line 530 of file d_atari.c.

int vq_gdos ( void )

Definition at line 615 of file d_atari.c.

void vq_key_s | ( | int | handle,
 |  | int * | pstatus
 | ) |  |

Definition at line 528 of file d_atari.c.

void vq_mouse | ( | int | handle,
 |  | int * | pstatus,
 |  | int * | x,
 |  | int * | y
 | ) |  |

Definition at line 524 of file d_atari.c.

void vq_scan | ( | int | handle,
 |  | int * | g_slice,
 |  | int * | g_page,
 |  | int * | a_slice,
 |  | int * | a_page,
 |  | int * | div_fac
 | ) |  |

Definition at line 577 of file d_atari.c.

int vq_tabstatus ( int handle )

Definition at line 567 of file d_atari.c.

void vq_tdimensions | ( | int | handle,
 |  | int * | xdimension,
 |  | int * | ydimension
 | ) |  |

Definition at line 610 of file d_atari.c.

long vq_vgdos ( void )

Definition at line 616 of file d_atari.c.

void vqf_attributes | ( | int | handle,
 |  | int * | attrib
 | ) |  |

Definition at line 535 of file d_atari.c.

void vqin_mode | ( | int | handle,
 |  | int | dew_type,
 |  | int * | input_mode
 | ) |  |

Definition at line 546 of file d_atari.c.

void vql_attributes | ( | int | handle,
 |  | int * | attrib
 | ) |  |

Definition at line 533 of file d_atari.c.

void vqm_attributes | ( | int | handle,
 |  | int * | attrib
 | ) |  |

Definition at line 534 of file d_atari.c.

int vqp_error ( int handle )

Definition at line 592 of file d_atari.c.

void vqp_films | ( | int | handle,
 |  | char * | film_names
 | ) |  |

Definition at line 583 of file d_atari.c.

void vqp_state | ( | int | handle,
 |  | int * | port,
 |  | char * | film_name,
 |  | int * | lightness,
 |  | int * | interlace,
 |  | int * | planes,
 |  | int * | indexes
 | ) |  |

Definition at line 584 of file d_atari.c.

void vqt_advance | ( | int | handle,
 |  | int | ch,
 |  | int * | advx,
 |  | int * | advy,
 |  | int * | remx,
 |  | int * | remy
 | ) |  |

Definition at line 636 of file d_atari.c.

void vqt_advance32 | ( | int | handle,
 |  | int | ch,
 |  | fix31 * | advx,
 |  | fix31 * | advy
 | ) |  |

Definition at line 638 of file d_atari.c.

void vqt_attributes | ( | int | handle,
 |  | int * | attrib
 | ) |  |

Definition at line 536 of file d_atari.c.

void vqt_cachesize | ( | int | handle,
 |  | int | which_cache,
 |  | long * | size
 | ) |  |

Definition at line 657 of file d_atari.c.

void vqt_devinfo | ( | int | handle,
 |  | int | devnum,
 |  | int * | devexits,
 |  | char * | devstr
 | ) |  |

Definition at line 654 of file d_atari.c.

void vqt_extent | ( | int | handle,
 |  | char * | string,
 |  | int * | extent
 | ) |  |

Definition at line 537 of file d_atari.c.

void vqt_f_extent | ( | int | handle,
 |  | char * | string,
 |  | int * | extent
 | ) |  |

Definition at line 628 of file d_atari.c.

void vqt_fontheader | ( | int | handle,
 |  | char * | buffer,
 |  | char * | pathname
 | ) |  |

Definition at line 649 of file d_atari.c.

void vqt_fontinfo | ( | int | handle,
 |  | int * | minADE,
 |  | int * | maxADE,
 |  | int * | distances,
 |  | int * | maxwidth,
 |  | int * | effects
 | ) |  |

Definition at line 547 of file d_atari.c.

void vqt_get_table | ( | int | handle,
 |  | int ** | map
 | ) |  |

Definition at line 658 of file d_atari.c.

int vqt_name | ( | int | handle,
 |  | int | element_num,
 |  | char * | name
 | ) |  |

Definition at line 541 of file d_atari.c.

void vqt_pairkern | ( | int | handle,
 |  | int | ch1,
 |  | int | ch2,
 |  | fix31 * | x,
 |  | fix31 * | y
 | ) |  |

Definition at line 647 of file d_atari.c.

void vqt_trackkern | ( | int | handle,
 |  | fix31 * | x,
 |  | fix31 * | y
 | ) |  |

Definition at line 648 of file d_atari.c.

int vqt_width | ( | int | handle,
 |  | int | character,
 |  | int * | cell_width,
 |  | int * | left_delta,
 |  | int * | right_delta
 | ) |  |

Definition at line 538 of file d_atari.c.

void vr_recfl | ( | int | handle,
 |  | int * | pxyarray
 | ) |  |

Definition at line 448 of file d_atari.c.

void vr_trnfm | ( | int | handle,
 |  | MFDB * | psrcMFDB,
 |  | MFDB * | pdesMFDB
 | ) |  |

Definition at line 500 of file d_atari.c.

void vro_cpyfm | ( | int | handle,
 |  | int | vr_mode,
 |  | int * | pxyarray,
 |  | MFDB * | psrcMFDB,
 |  | MFDB * | pdesMFDB
 | ) |  |

Definition at line 495 of file d_atari.c.

void vrq_choice | ( | int | handle,
 |  | int | ch_in,
 |  | int * | ch_out
 | ) |  |

Definition at line 513 of file d_atari.c.

void vrq_locator | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int * | xout,
 |  | int * | yout,
 |  | int * | term
 | ) |  |

Definition at line 505 of file d_atari.c.

void vrq_string | ( | int | handle,
 |  | int | max_length,
 |  | int | echo_mode,
 |  | int * | echo_xy,
 |  | char * | string
 | ) |  |

Definition at line 515 of file d_atari.c.

void vrq_valuator | ( | int | handle,
 |  | int | valuator_in,
 |  | int * | valuator_out,
 |  | int * | terminator
 | ) |  |

Definition at line 509 of file d_atari.c.

void vrt_cpyfm | ( | int | handle,
 |  | int | vr_mode,
 |  | int * | pxyarray,
 |  | MFDB * | psrcMFDB,
 |  | MFDB * | pdesMFDB,
 |  | int * | color_index
 | ) |  |

Definition at line 497 of file d_atari.c.

void vs_clip | ( | int | handle,
 |  | int | clip_flag,
 |  | int * | pxyarray
 | ) |  |

Definition at line 439 of file d_atari.c.

void vs_color | ( | int | handle,
 |  | int | index,
 |  | int * | rgb_in
 | ) |  |

Definition at line 468 of file d_atari.c.

void vs_curaddress | ( | int | handle,
 |  | int | row,
 |  | int | column
 | ) |  |

Definition at line 561 of file d_atari.c.

int vs_mute | ( | int | handle,
 |  | int | action
 | ) |  |

Definition at line 582 of file d_atari.c.

void vs_palette | ( | int | handle,
 |  | int | palette
 | ) |  |

Definition at line 580 of file d_atari.c.

void vsc_expose | ( | int | handle,
 |  | int | state
 | ) |  |

Definition at line 613 of file d_atari.c.

void vsc_form | ( | int | handle,
 |  | int * | pcur_form
 | ) |  |

Definition at line 519 of file d_atari.c.

void VsetMask | ( | int | ormask,
 |  | int | andmask,
 |  | int | overlay
 | ) |  |

Definition at line 427 of file d_atari.c.

int Vsetmode ( int modecode )

Definition at line 421 of file d_atari.c.

void VsetRGB | ( | int | index,
 |  | int | count,
 |  | long * | array
 | ) |  |

Definition at line 425 of file d_atari.c.

void VsetSync ( int flag )

Definition at line 424 of file d_atari.c.

int vsf_color | ( | int | handle,
 |  | int | color_index
 | ) |  |

Definition at line 491 of file d_atari.c.

int vsf_interior | ( | int | handle,
 |  | int | style
 | ) |  |

Definition at line 489 of file d_atari.c.

int vsf_perimeter | ( | int | handle,
 |  | int | per_vis
 | ) |  |

Definition at line 492 of file d_atari.c.

int vsf_style | ( | int | handle,
 |  | int | style_index
 | ) |  |

Definition at line 490 of file d_atari.c.

void vsf_udpat | ( | int | handle,
 |  | int * | pfill_pat,
 |  | int | planes
 | ) |  |

Definition at line 493 of file d_atari.c.

void vsin_mode | ( | int | handle,
 |  | int | dev_type,
 |  | int | mode
 | ) |  |

Definition at line 504 of file d_atari.c.

int vsl_color | ( | int | handle,
 |  | int | color_index
 | ) |  |

Definition at line 472 of file d_atari.c.

void vsl_ends | ( | int | handle,
 |  | int | beg_style,
 |  | int | end_style
 | ) |  |

Definition at line 473 of file d_atari.c.

int vsl_type | ( | int | handle,
 |  | int | style
 | ) |  |

Definition at line 469 of file d_atari.c.

void vsl_udsty | ( | int | handle,
 |  | int | pattern
 | ) |  |

Definition at line 470 of file d_atari.c.

int vsl_width | ( | int | handle,
 |  | int | width
 | ) |  |

Definition at line 471 of file d_atari.c.

int vsm_choice | ( | int | handle,
 |  | int * | choice
 | ) |  |

Definition at line 514 of file d_atari.c.

int vsm_color | ( | int | handle,
 |  | int | color_index
 | ) |  |

Definition at line 476 of file d_atari.c.

int vsm_height | ( | int | handle,
 |  | int | height
 | ) |  |

Definition at line 475 of file d_atari.c.

int vsm_locator | ( | int | handle,
 |  | int | x,
 |  | int | y,
 |  | int * | xout,
 |  | int * | yout,
 |  | int * | term
 | ) |  |

Definition at line 507 of file d_atari.c.

int vsm_string | ( | int | handle,
 |  | int | max_length,
 |  | int | echo_mode,
 |  | int * | echo_xy,
 |  | char * | string
 | ) |  |

Definition at line 517 of file d_atari.c.

int vsm_type | ( | int | handle,
 |  | int | symbol
 | ) |  |

Definition at line 474 of file d_atari.c.

void vsm_valuator | ( | int | handle,
 |  | int | val_in,
 |  | int * | val_out,
 |  | int * | term,
 |  | int * | status
 | ) |  |

Definition at line 511 of file d_atari.c.

void vsp_film | ( | int | handle,
 |  | int | index,
 |  | int | lightness
 | ) |  |

Definition at line 612 of file d_atari.c.

void vsp_message ( int handle )

Definition at line 591 of file d_atari.c.

void vsp_save ( int handle )

Definition at line 590 of file d_atari.c.

void vsp_state | ( | int | handle,
 |  | int | port,
 |  | int | film_num,
 |  | int | lightness,
 |  | int | interlace,
 |  | int | planes,
 |  | int * | indexes
 | ) |  |

Definition at line 587 of file d_atari.c.

void vst_alignment | ( | int | handle,
 |  | int | hor_in,
 |  | int | vert_in,
 |  | int * | hor_out,
 |  | int * | vert_out
 | ) |  |

Definition at line 487 of file d_atari.c.

int vst_arbpt | ( | int | handle,
 |  | int | point,
 |  | int * | chwd,
 |  | int * | chht,
 |  | int * | cellwd,
 |  | int * | cellht
 | ) |  |

Definition at line 639 of file d_atari.c.

fix31 vst_arbpt32 | ( | int | handle,
 |  | fix31 | point,
 |  | int * | chwd,
 |  | int * | chht,
 |  | int * | cellwd,
 |  | int * | cellht
 | ) |  |

Definition at line 641 of file d_atari.c.

void vst_charmap | ( | int | handle,
 |  | int | mode
 | ) |  |

Definition at line 643 of file d_atari.c.

int vst_color | ( | int | handle,
 |  | int | color_index
 | ) |  |

Definition at line 485 of file d_atari.c.

int vst_effects | ( | int | handle,
 |  | int | effect
 | ) |  |

Definition at line 486 of file d_atari.c.

void vst_error | ( | int | handle,
 |  | int | mode,
 |  | int * | errorvar
 | ) |  |

Definition at line 635 of file d_atari.c.

int vst_font | ( | int | handle,
 |  | int | font
 | ) |  |

Definition at line 484 of file d_atari.c.

void vst_height | ( | int | handle,
 |  | int | height,
 |  | int * | char_width,
 |  | int * | char_height,
 |  | int * | cell_width,
 |  | int * | cell_height
 | ) |  |

Definition at line 477 of file d_atari.c.

void vst_kern | ( | int | handle,
 |  | int | tmode,
 |  | int | pmode,
 |  | int * | tracks,
 |  | int * | pairs
 | ) |  |

Definition at line 650 of file d_atari.c.

int vst_load_fonts | ( | int | handle,
 |  | int | select
 | ) |  |

Definition at line 437 of file d_atari.c.

int vst_point | ( | int | handle,
 |  | int | point,
 |  | int * | char_width,
 |  | int * | char_height,
 |  | int * | cell_width,
 |  | int * | cell_height
 | ) |  |

Definition at line 480 of file d_atari.c.

int vst_rotation | ( | int | handle,
 |  | int | angle
 | ) |  |

Definition at line 483 of file d_atari.c.

void vst_scratch | ( | int | handle,
 |  | int | mode
 | ) |  |

Definition at line 634 of file d_atari.c.

int vst_setsize | ( | int | handle,
 |  | int | point,
 |  | int * | chwd,
 |  | int * | chht,
 |  | int * | cellwd,
 |  | int * | cellht
 | ) |  |

Definition at line 661 of file d_atari.c.

fix31 vst_setsize32 | ( | int | handle,
 |  | fix31 | point,
 |  | int * | chwd,
 |  | int * | chht,
 |  | int * | cellwd,
 |  | int * | cellht
 | ) |  |

Definition at line 652 of file d_atari.c.

int vst_skew | ( | int | handle,
 |  | int | skew
 | ) |  |

Definition at line 663 of file d_atari.c.

void vst_unload_fonts | ( | int | handle,
 |  | int | select
 | ) |  |

Definition at line 438 of file d_atari.c.

int vswr_mode | ( | int | handle,
 |  | int | mode
 | ) |  |

Definition at line 467 of file d_atari.c.

void Vsync ( void )

Definition at line 286 of file d_atari.c.

void vt_alignment | ( | int | handle,
 |  | int | dx,
 |  | int | dy
 | ) |  |

Definition at line 611 of file d_atari.c.

void vt_axis | ( | int | handle,
 |  | int | xres,
 |  | int | yres,
 |  | int * | xset,
 |  | int * | yset
 | ) |  |

Definition at line 607 of file d_atari.c.

void vt_origin | ( | int | handle,
 |  | int | xorigin,
 |  | int | yorigin
 | ) |  |

Definition at line 609 of file d_atari.c.

void vt_resolution | ( | int | handle,
 |  | int | xres,
 |  | int | yres,
 |  | int * | xset,
 |  | int * | yset
 | ) |  |

Definition at line 605 of file d_atari.c.

int wind_calc | ( | int | wi_ctype,
 |  | int | wi_ckind,
 |  | int | wi_cinx,
 |  | int | wi_ciny,
 |  | int | wi_cinw,
 |  | int | wi_cinh,
 |  | int * | coutx,
 |  | int * | couty,
 |  | int * | coutw,
 |  | int * | couth
 | ) |  |

Definition at line 148 of file d_atari.c.

int wind_close ( int wi_clhandle )

Definition at line 142 of file d_atari.c.

int wind_create | ( | int | wi_crkind,
 |  | int | wi_crwx,
 |  | int | wi_crwy,
 |  | int | wi_crww,
 |  | int | wi_crwh
 | ) |  |

Definition at line 138 of file d_atari.c.

int wind_delete ( int wi_dhandle )

Definition at line 143 of file d_atari.c.

int wind_find | ( | int | wi_fmx,
 |  | int | wi_fmy
 | ) |  |

Definition at line 146 of file d_atari.c.

int wind_get | ( | int | wi_ghandle,
 |  | int | wi_gfield,
 |  |  | ...
 | ) |  |

Definition at line 144 of file d_atari.c.

void wind_new ( void )

Definition at line 152 of file d_atari.c.

int wind_open | ( | int | wi_ohandle,
 |  | int | wi_owx,
 |  | int | wi_owy,
 |  | int | wi_oww,
 |  | int | wi_owh
 | ) |  |

Definition at line 140 of file d_atari.c.

int wind_set | ( | int | wi_shandle,
 |  | int | wi_sfield,
 |  |  | ...
 | ) |  |

Definition at line 145 of file d_atari.c.

int wind_update ( int wi_ubegend )

Definition at line 147 of file d_atari.c.

long xbios ( U32 )

Definition at line 174 of file d_atari.c.

void Xbtimer | ( | int | timer,
 |  | int | control,
 |  | int | data,
 |  | void(*)() | vector
 | ) |  |

Definition at line 280 of file d_atari.c.

Variable Documentation

int _app

Definition at line 668 of file d_atari.c.

GEMPARBLK _GemParBlk

Definition at line 666 of file d_atari.c.

VDIPARBLK _VDIParBlk

Definition at line 667 of file d_atari.c.

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: d_big.c File Reference

d_big.c File Reference

#include <AES.H>
#include <VDI.H>
#include <TOS.H>
#include <big2.h>

Go to the source code of this file.

Functions

int | initial (char *rsc, int menu, int desk, int nb_tree, OBJECT *rs_tree, char *rs_str, int n_wind, int acc)
Initialize BIG.
void | end (void)
Terminate BIG.
void | formm_draw (OBJECT *adr, int ed, int flmove, MFDB *img)
Display a movable form.
void | formm_undraw (OBJECT *adr, MFDB *img)
Erase a movable form.
void | formf_draw (OBJECT *adr, int ed)
Display a traditional form.
void | formf_undraw (OBJECT *adr)
Erase a traditional form.
void | create_hierm (OBJECT *adr)
Place an arrow in a menu.
int | dialog (int flags, OBJECT *address, int f, int fl_rb, int form_pu, MFDB *img, int fl_move)
Manage all the events in BIG.
int | match (OBJECT *adr, int button)
Search for a text match in pop-up pop-list.
void | set_popup (OBJECT *adr, int button, int option)
Link Text to pop-up.
OBJECT * | create_popup (int nbre, char **liste)
int | free_popup (int posx, int posy, int form, OBJECT *adr)
Call a free pop-up.
void | get_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
Saves the image of an area in a MFDB.
void | put_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
Restore the image of an area from a MFDB.
int | big_alert (int button, int number, char *str, int fl_alrt)
Call and manage a BIG Alert.
char * | get_string (int number)
Return a pointer to a free string.
void | form_attach (int tree, int obj, char formular)
Link pop-up object and a sub-menu.
void | bulle_attach (int tree, int obj, char bulle)
Create a link between an object an a free string of a bubble-help.
void | set_interface (int under, int cunder, int ctxt_under, int cicn_coche, int ctxt_coche, int cicn_radio, int ctxt_radio, int cicn_popup, int ctxt_popup, int cmove, int cgrastr, int clin_frame, int ctxt_frame, int cniceline)
Modify aspect parameters of BIG object.
int cdecl | parent (OBJECT *adr, int object)
Return the number of the parent object.
void | bak_rsc (OBJECT *tree, char **bak)
Save the state of a Form.
void | res_rsc (OBJECT *tree, char **bak)
Restore the state of a Form.
void | dlg_mouse (void)
Change mouse pointer in working area.
void | objc_xedit (OBJECT *adr, int car, int ed, int *po, int action, int f, int index)
BIG equivalent to GEM objc_edit() function.
void | set_text (OBJECT *adr, int object, char *string)
Place text in an object.
char * | get_text (OBJECT *adr, int object)
Get text in an object.
char * | path (char *pat)
Get the default path of the application.
long | exist (char *name, int att)
Return size of a file if it exist.
void | set_palette (int index)
New value for the pallet.
long | timer (void)
New value for the pallet.
char * | trim (char *str)
Trim tab/spaces at begin/end of a string.
void | send_mesag (int type, int wi, int x, int y, int w, int h)
Send message to itself.
int | selector (char *pat, char *ext, char *file, char *title)
Call GEM File selector.
void | extension (char *filename, char *ext)
Forces a specific extension on file or path name.
int | rc_intersect (GRECT *p1, GRECT *p2)
Find common zone between two areas of screen.
void | clipp (int clip_flag, GRECT *area)
Turn on/off clipping of a screen area.
COOKIE * | first_cookie (void)
First Cookie of the cookie jar.
COOKIE * | next_cookie (COOKIE *ck)
Next Cookie of the cookie jar.
COOKIE * | vq_cookie (long id)
Query for a Cookie by id.
COOKIE * | vq_cookie_c (char *c)
Query for a Cookie by name.
void | fill_tab (int *pxy, int n,...)
First Cookie of the cookie jar.
void | empty (int evnmt)
Empty keyboard or message buffer.
int | formw_draw (OBJECT *adr, int index, int title, int infos, int wed, int attr, FNCP ricn)
Open a Form in Window.
int | open_window (int index, int type, int attr, int x, int y, int w, int h, int wmi, int hmi, int wma, int hma, int wu, int hu, int flags, int fmouse, FNCP ricn, FNCP redr, FNCP clos, char *title, char *info, long wt, long ht, int fmenu, int ftool, int bar, int pattern, int colorp)
Create and open a Window.
int | find_index (int wh)
Find the BIG index of a window by its GEM Handle.
int | find_window (int mx, int my)
Find if the working area of a window is at a given location.
void | zone_work (int index, int *xw, int *yw, int *ww, int *hw)
Get work area position.
void | height_sliders (int index, int fredraw)
Compute size and position of a window sliders.
void | posi_vert (int index, int fredraw)
Compute the position of a window vertical slider.
void | posi_hori (int index, int fredraw)
Compute the position of a window horizontal slider.
void | height_vert (int index, int fredraw)
Compute the size of a window vertical slider.
void | height_hori (int index, int fredraw)
Compute the size of a window horizontal slider.
void | draw_object (int object, int index)
Redraw the visible part of an object belonging to a form.
void | print_page (int index)
Redraw the visible part of an object belonging to a form.
void | next_wind (void)
Bring to front the next window.
void | closed (void)
Close and destroy window.
void | iconise (int index)
Iconify a window.
void | uniconise (int index)
Deiconify a Window.
void | alliconise (int index)
Iconyfy all open windows.
void | set_work (int index, int pattern, int colorp)
Set pattern and color of window working area.
void | set_windows (int mtxt_mover, int ctxt_mover, int spat_mover, int cpat_mover, int ctxt_info, int spat_velev, int cpat_velev, int spat_helev, int cpat_helev, int spat_vslid, int cpat_vslid, int spat_hslid, int cpat_hslid, int cpat_gadgt, int cicn_gadgt)
Modify window display parameters.
void | bwind_calc (int request, int attr, int tree, OBJECT *adrb, int xd, int yd, int wd, int hd, int *x, int *y, int *w, int *h)
Equivalent to GEM wind_calc().

Variables

OBJECT * | adr_menu
OBJECT * | adr_desk
OBJECT ** | ir_trindex
int | cliq_in
GRECT | zclip
FNCP * fnc
int | ap_id
int | buf [8]
int | mx
int | my
int | mk
int | edit
int | pos
int | object
int | kbd
int | key
int | clik
int | wind
int | intgr
char | pathapp []
BigWind * win
t_ident_hard_soft desc_hard_soft
t_display work_display
t_desktop bureau
int | aide_en_ligne
int | _app

Function Documentation

OBJECT* create_popup | ( | int | nbre,
 |  | char ** | liste
 | ) |  |

Definition at line 26 of file d_big.c.

Variable Documentation

int _app

Definition at line 126 of file d_big.c.

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: translate.h File Reference

translate.h File Reference

Go to the source code of this file.

Defines

#define | B_COCHE B_CHECKB
#define | B_BUTTON B_ROUNDB

Define Documentation

#define B_BUTTON B_ROUNDB

Definition at line 3 of file translate.h.

#define B_COCHE B_CHECKB

Definition at line 2 of file translate.h.

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- _ -

  • _app : d_atari.c , d_big.c
  • _crystal() : d_atari.c
  • _GemParBlk : d_atari.c
  • _VDIParBlk : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2.H Source File

BIG2.H

Go to the documentation of this file.
00001
00036 #ifndef _BIG_H_
00037 #define _BIG_H_
00038
00039 #ifdef WIN32                            /* to compile in Windows env. */
00040 #define cdecl                           /* used in AES.H */
00041 #pragma warning(disable : 4996)         /* disable deprecated function */
00042 #endif
00043
00044
00045 #include <STRING.H>
00046 #include <AES.H>
00047 #include <VDI.H>
00048 #include <TOS.H>
00049 #include <STDIO.H>
00050 #include <STDLIB.H>
00051 #include <CTYPE.H>
00052
00057 #if defined(LIGHT)
00058 #define dialog dialog_light
00059 #endif
00060
00061 /* enum {FALSE, TRUE}; */
00062 #define FALSE   0
00063 #define TRUE    1
00064 #define NOT !
00065 #define BLANK -1
00066 #define ZERO 0
00067 #define MAX_ALRT 250
00069 #ifndef max     /* not present in stdlib for Pure C */
00070 #define max(a, b)((a)>(b)?(a):(b))
00071 #define min(a, b)((a)<(b)?(a):(b))
00072 #endif
00073
00075 #if !defined( G_CICON )
00076 #define G_CICON 33
00077
00078 typedef struct cicon_data {
00079     int num_planes;
00080     int* col_data;
00081     int* col_mask;
00082     int* sel_data;
00083     int* sel_mask;
00084     struct cicon_data* next_res;
00085 } CICON;
00086
00087 typedef struct cicon_blk {
00088     ICONBLK monoblk;
00089     CICON* mainlist;
00090 } CICONBLK;
00091 #endif
00092
00093 /* in case iconify messages not defined */
00094 #if !defined( WM_ICONIFY )
00095 #define WM_ICONIFY 34
00096 #define WM_UNICONIFY 35
00097 #define WM_ALLICONIFY 36
00098 #endif
00099
00100 /* in case send window to bottom not defined */
00101 #define WM_CYCLED 38
00102 #if !defined( WM_BOTTOM )
00103 #define WM_BOTTOM 33
00104 #endif
00105
00107 #define NGAD    23
00108 #define BIT15   0x8000
00110 /* BIG new extended types */
00111 #define B_MOVE      17
00112 #define B_SELEC     18
00113 #define B_GRASTR    19
00114 #define B_FRAME     20
00115 #define B_HELP      21
00116 #define B_POPUP     22
00117 #define B_LIST      23
00118 #define B_PICT      24
00119 #define B_EDIT      25
00120 #define B_SMSTR     26
00121 #define B_UNDER     30
00122 #define B_UNDO      31
00123 #define B_HIERM     41
00124 #define B_FNCP      51
00126 /* Usual event bit mask */
00127 #define DLG_DESK    (MU_KEYBD | MU_BUTTON | MU_M1 | MU_MESAG | MU_TIMER)
00128 #define DLG_FORM    (MU_KEYBD | MU_BUTTON | MU_TIMER)
00129
00130 /* BIG new events */
00131 #define BEV_HIERM   150
00132 #define BEV_FREEPU  151
00133 #define BEV_WFORM   152
00134 #define BEV_WMENU   153
00135 #define BEV_WHIER   154
00136 #define BEV_TOOL    155
00138 /* definitions of a set of shortcuts for windows attributes */
00139 #define WATR_ALLG   (NAME|CLOSER|FULLER|MOVER|INFO|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE)
00140 #define WATR_ALLB   (CLOSER|FULLER|MOVER|INFO|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE|CYCLER|SMALLER|ALLSIZER)
00141 #define WATR_CURRG  (NAME|CLOSER|FULLER|MOVER|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE)
00142 #define WATR_CURRB  (CLOSER|FULLER|MOVER|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE|CYCLER|SMALLER|ALLSIZER)
00143 #define WATR_FORMG  (NAME|CLOSER|MOVER)
00144 #define WATR_FORMB  (CLOSER|MOVER|CYCLER|SMALLER)
00145
00146 /* define the BIG windows types*/
00147 #define WTYP_NORM   1
00148 #define WTYP_FORM   2
00149 #define WTYP_PICT   3
00150 #define WTYP_TOOL   0x4000
00151 #define WTYP_MENU   0x8000
00153 /* Flags used for BIG windows */
00154 #define WFFULL  0x0001
00155 #define WFARROW 0x0002
00156 #define WFCALAG 0x0004
00157 #define WFDECAL 0x0008
00158 #define WFGROUP 0x0010
00159 #define WFLAST  0x0080
00161 #define SMALLER     0x4000
00162 #define CYCLER      0x2000
00163 #define ALLSIZER    0x8000
00166 #define BKGR        0x0400
00167 #define DCDEFAULT   0x0800
00168 #define WFCLOSE     0x1000
00169 #define BS_RIGHT    0x2000
00170 #define AIDE_OBJET  0x4000
00171 #define NOTOP       0x8000
00173 /* For menus in windows */
00174 #define WM_BKGR 0
00175 #define WM_BOXMENU 1
00176 #define WM_BOXARROWS 2
00177 #define WM_LFARROW 3
00178 #define WM_RTARROW 4
00179 #define WM_BOXTITLES 5
00181 /* keyboard define */
00182 #define HELP        0x6200
00183 #define UNDO        0x6100
00184 #define ENTER       0x1C0D
00185 #define RETURN      0x720D
00186 #define BACKSPC     0x0E08
00187 #define DELETE      0x537F
00188 #define SH_DELETE   0x537F
00189 #define INSERT      0x5200
00190 #define SH_INSERT   0x5230
00191 #define TAB         0x0F09
00192 #define ARDN        0x5000
00193 #define ARUP        0x4800
00194 #define ARLF        0x4B00
00195 #define ARRT        0x4D00
00196 #define CT_ARDN     0x5000
00197 #define CT_ARUP     0x4800
00198 #define CT_ARLF     0x7300
00199 #define CT_ARRT     0x7400
00200 #define SH_ARDN     0x5032
00201 #define SH_ARUP     0x4838
00202 #define SH_ARLF     0x4B34
00203 #define SH_ARRT     0x4D36
00204 #define ESC         0x011B
00205 #define CLR         0x4700
00206 #define CT_CLR      0x7700
00207 #define SH_CLR      0x4737
00208 #define ESPACE      0x3920
00209 #define F1          0x3B00
00210 #define SH_F1       0x5400
00211 #define F2          0x3C00
00212 #define SH_F2       0x5500
00213 #define F3          0x3D00
00214 #define SH_F3       0x5600
00215 #define F4          0x3E00
00216 #define SH_F4       0x5700
00217 #define F5          0x3F00
00218 #define SH_F5       0x5800
00219 #define F6          0x4000
00220 #define SH_F6       0x5900
00221 #define F7          0x4100
00222 #define SH_F7       0x5A00
00223 #define F8          0x4200
00224 #define SH_F8       0x5B00
00225 #define F9          0x4300
00226 #define SH_F9       0x5C00
00227 #define F10         0x4400
00228 #define SH_F10      0x5D00
00230 /* shortcuts */
00231 #define ADR         ir_trindex
00232 #define get_popup   match
00234 /* Définitions de complément à VDI.H */
00235 #define POINTIL     0x8888
00237 /* pattern shape (vsm_type) */
00238 #define MTPOINT     1
00239 #define MTPLUS      2
00240 #define MTETOILE    3
00241 #define MTCARRE     4
00242 #define MTCROIX     5
00243 #define MTLOSANGE   6
00245 /* effect attribute (vst_effects) */
00246 #define EFNONE      0x00
00247 #define EFGRAS      0x01
00248 #define EFGRIS      0x02
00249 #define EFITAL      0x04
00250 #define EFSOULI     0x08
00251 #define EFCONT      0x10
00253 /* justification attribute (vst_alignment) */
00254 #define HLEFT       0
00255 #define HCENT       1
00256 #define HRIGHT      2
00257 #define VDOWN       0
00258 #define VLINE       3
00259 #define VTOP        5
00261 /* size attribute (vst_height) */
00262 #define HNORM       13
00263 #define HPETIT      6
00264 #define HMINUS      4
00266 /* rotation attribut (vst_rotation) */
00267 #define RONORM      0
00268 #define RO90        900
00269 #define RO180       1800
00270 #define RO270       2700
00276 typedef int Palette[3];
00277 typedef void (*FNCP)(void);
00280 typedef struct form {
00281     OBJECT  *w_tree;
00282     int     w_edit;
00283     int     w_pos;
00284     char    *w_bak;
00285 } Form;
00286
00288 typedef union cont {
00289     Form    w_form;
00290     MFDB    w_img;
00291     char*   w_adr;
00292 } Cont;
00293
00295 typedef struct oldw {
00296     GRECT   w_coord;
00297     int     w_att;
00298 } Oldw;
00299
00301 typedef struct bigwind {
00302     int     w_hg;
00303     int     w_type;
00304     int     w_attr;
00305     GRECT   w_curr;
00306     Oldw    w_old;
00307     int     w_wmini;
00308     int     w_hmini;
00309     int     w_wmaxi;
00310     int     w_hmaxi;
00311     int     w_wunit;
00312     int     w_hunit;
00313     int     w_hprot;
00314     int     w_vprot;
00315     Cont    w_cont;
00316     Palette *w_pal;
00317     OBJECT  *w_bar;
00318     OBJECT  w_fen[NGAD];
00319     int     w_flags;
00320     int     w_mouse;
00321     int     w_icon;
00322     FNCP    w_redicn;
00323     FNCP    w_cycle;
00324     FNCP    w_redraw;
00325     FNCP    w_top;
00326     FNCP    w_close;
00327     FNCP    w_move;
00328     FNCP    w_size;
00329     FNCP    w_full;
00330     FNCP    w_hslid;
00331     FNCP    w_vslid;
00332     FNCP    w_uppage;
00333     FNCP    w_dnpage;
00334     FNCP    w_lfpage;
00335     FNCP    w_rtpage;
00336     FNCP    w_upline;
00337     FNCP    w_dnline;
00338     FNCP    w_lfline;
00339     FNCP    w_rtline;
00340     char    *w_title;
00341     char    *w_infos;
00342     long    w_wtot;
00343     long    w_htot;
00344     long    w_lin;
00345     long    w_col;
00346 } BigWind;
00347
00349 typedef struct t_image_dial {
00350     MFDB    mfdb_image;
00351     GRECT   cur_pos;
00352 } t_image_dial;
00353
00355 typedef struct {
00356     long ident;
00357     union {
00358         long l;
00359         int i[2];
00360         char c[4];
00361     } datack;
00362 } COOKIE;
00363
00365 typedef enum {
00366     ST,
00367     STE,
00368     TT,
00369     FALCON_030,
00370     AUTRE_MACHINE
00371 }   t_machine;
00372
00374 typedef enum {
00375     PG_ST,
00376     PG_STE,
00377     PG_TT,
00378     PG_FALCON_030,
00379     AUTRE_PG
00380 }   t_proc_graphique;
00381
00383 typedef enum {
00384     PROC_68000,
00385     PROC_68030,
00386     AUTRE_PROCESSEUR
00387 }   t_cpu;
00388
00390 typedef enum {
00391     ST_BASSE = 0,
00392     ST_MOYENNE = 1,
00393     ST_HAUTE = 2,
00394     VGA_16COL = 4,
00395     VGA_256COL = 5,
00396     R_256C_320_480 = 7,
00397     TRUE_COLOR_320_480 = 8,
00398     INCONNU = -1
00399 } t_resolution;
00400
00402 typedef enum {
00403     AUCUN_GDOS  =0,
00404     GDOS_STANDARD   =1,
00405     FONT_GDOS   =2,
00406     FSM_GDOS    =3,
00407     SPEEDO_GDOS =4
00408 }   type_gdos;
00409
00411 typedef struct {
00412     t_machine la_machine;
00413     t_proc_graphique proc_graphique;
00414     t_cpu le_cpu;
00415     int v_aes;
00416     int v_tos;
00417     char multitache;
00418     type_gdos le_gdos;
00419 }   t_ident_hard_soft;
00420
00422 typedef struct t_display {
00423     size_t  taille;
00424     size_t  taille_ligne;
00425     int     handle;
00426     int     w;
00427     int     h;
00428     int     hc;
00429     t_resolution res;
00430     int     mode;
00431     char    une_palette;
00432     long    n_color_pal;
00433     long    n_color;
00434     int     n_plane;
00435     Palette* palette;
00436     int     nb_bit_coul[3];
00437     int     masque_coul[3];
00438     void*   phys;
00439     void*   log;
00440 }   t_display;
00441
00443 typedef struct t_desktop
00444 {
00445     int xd;
00446     int yd;
00447     int wd;
00448     int hd;
00449 } t_desktop;
00450
00455 /* Global Variables */
00456 extern int ap_id;
00457 extern int buf[8];
00458 extern int mx;
00459 extern int my;
00460 extern int mk;
00461 extern int edit;
00462 extern int pos;
00463 extern int object;
00464 extern int kbd;
00465 extern int key;
00466 extern int clik;
00467 extern int wind;
00468 extern int intgr;
00469 extern char pathapp[];
00470 extern Palette  bpal[16];
00471 extern OBJECT* adr_menu;
00472 extern OBJECT* adr_desk;
00473 extern OBJECT** ir_trindex;
00474 extern int cliq_in;
00475 extern GRECT zclip;
00476 extern FNCP* fnc;
00477 extern BigWind* win;
00478 extern t_ident_hard_soft desc_hard_soft;
00479 extern t_display work_display;
00480 extern t_desktop bureau;
00481 extern int aide_en_ligne;
00486 /* Control Function */
00487
00488 int     initial(char* rsc, int menu, int desk, int nb_tree,
00489                 OBJECT* rs_tree, char* rs_str, int n_wind, int acc);
00490 void    end(void);
00491
00495 /****** Forms Management Functions *******/
00496 void    formm_draw(OBJECT* adr, int ed, int flmove, MFDB* img);
00497 void    formm_undraw(OBJECT* adr, MFDB* img);
00498 void    formf_draw(OBJECT* adr, int ed);
00499 void    formf_undraw(OBJECT* adr);
00500 void    create_hierm(OBJECT* adr);
00501 int     dialog(int flags, OBJECT* address, int f,
00502                int fl_rb, int form_pu, MFDB* img, int fl_move);
00503 int     match(OBJECT* adr, int button);
00504 void    set_popup(OBJECT* adr, int button, int option);
00505 OBJECT* create_popup(int nbre, char* liste);
00506 int     free_popup(int posx, int posy, int form, OBJECT* adr);
00507 void    get_bkgr(int of_x, int of_y, int of_w, int of_h, MFDB* img);
00508 void    put_bkgr(int of_x, int of_y, int of_w, int of_h, MFDB* img);
00509 int     big_alert(int button, int number, char* str, int fl_alrt);
00510 char*   get_string(int number);
00511 void    form_attach(int tree, int obj, char formular);
00512 void    bulle_attach(int tree, int obj, char bulle);
00513 void    set_interface(int under, int cunder, int ctxt_under, int cicn_coche,
00514                       int ctxt_coche, int cicn_radio, int ctxt_radio,
00515                       int cicn_popup, int ctxt_popup, int cmove, int cgrastr,
00516                       int clin_frame, int ctxt_frame, int cniceline);
00517 int cdecl parent(OBJECT* adr, int object);
00518 void    bak_rsc(OBJECT* tree, char** bak);
00519 void    res_rsc(OBJECT* tree, char** bak);
00520 void    dlg_mouse(void);
00521 void    set_radio(OBJECT* adr, int rb);
00522 int     get_radio(OBJECT* adr, int rb);
00523 void    set_attributes(OBJECT* adr, int ob, int attr);
00524
00528 /***** BIG Extended Editable Functions *****/
00529 void    objc_xedit(OBJECT* adr, int car, int ed, int* po, int action, int f, int index);
00530 void    set_text(OBJECT* adr, int object, char* string);
00531 char*   get_text(OBJECT* adr, int object);
00532
00536 /****** Utility Functions *******/
00537 char*   path(char* pat);
00538 long    exist(char* name, int att);
00539 void    set_palette(int index);
00540 long    timer(void);
00541 char*   trim(char* str);
00542 void    send_mesag(int type, int wi, int x, int y, int w, int h);
00543 int     selector(char* pat, char* ext, char* file, char* title);
00544 void    extension (char* filename, char* ext);
00545 int     rc_intersect (GRECT* p1, GRECT* p2);
00546 void    clipp (int clip_flag, GRECT* area);
00547 void    fill_tab (int* pxy, int n, ...);
00548 void    empty (int evnmt);
00549
00553 /***** Cookie Functions *****/
00554 COOKIE* first_cookie (void);
00555 COOKIE* next_cookie (COOKIE* ck);
00556 COOKIE* vq_cookie (long id);
00557 COOKIE* vq_cookie_c (char* c);          /* Cherche un cookie par chaîne */
00558
00562 /***** BIG Windows Functions *****/
00563 int     formw_draw(OBJECT* adr, int index, int title, int infos,
00564                    int wed, int attr, FNCP ricn);
00565 int     open_window(int index, int type, int attr, int x, int y, int w, int h,
00566                     int wmi, int hmi, int wma, int hma, int wu, int hu,
00567                     int flags, int fmouse, FNCP ricn, FNCP redr, FNCP clos,
00568                     char* title, char* info, long wt, long ht, int fmenu,
00569                     int ftool, int bar, int pattern, int colorp);
00570 int     find_index(int wh);
00571 int     find_window(int mx, int my);
00572 void    zone_work(int index, int* xw, int* yw, int* ww, int* hw);
00573 void    height_sliders(int index, int fredraw);
00574 void    posi_vert(int index, int fredraw);
00575 void    posi_hori(int index, int fredraw);
00576 void    height_vert(int index, int fredraw);
00577 void    height_hori(int index, int fredraw);
00578 void    draw_object(int object, int index);
00579 void    print_page(int index);
00580 void    next_wind(void);
00581 void    closed(void);
00582 void    iconise(int index);
00583 void    uniconise(int index);
00584 void    alliconise(int index);
00585 void    set_work(int index, int pattern, int colorp);
00586 void    set_windows(int mtxt_mover, int ctxt_mover, int spat_mover, int cpat_mover,
00587                     int ctxt_info, int spat_velev, int cpat_velev, int spat_helev,
00588                     int cpat_helev, int spat_vslid, int cpat_vslid, int spat_hslid,
00589                     int cpat_hslid, int cpat_gadgt, int cicn_gadgt);
00590 void    bwind_calc(int request, int kind, int tree, OBJECT* adrb,
00591                    int xd, int yd, int wd, int hd, int* x, int* y, int* w, int* h);
00592 void draw_title(int index);
00593
00596 #endif
00597
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DEMO.C Source File

BIG2DEMO.C

Go to the documentation of this file.
00001
00010 #include <BIG2.H>
00011 #include <big_imgs.h>
00012
00013 int             fgdos, fid, size;
00014 t_image_dial    bimg;
00015 char*           zone = ZERO;
00017 #define INTGR 0
00018 #define BIMAGE "BIG2DEMO.IMG"
00020 #if INTGR
00021 #include "BIG2DEMO.RSH"
00022 #define TRINDEX(OBJECT *)rs_trindex
00023 #define FRSTR(char *)rs_frstr
00024 #define NUM_TREE 22
00025
00026 #else
00027 #include "BIG2DEMO.H"
00028 #define TRINDEX 0
00029 #define FRSTR 0
00030 #define NUM_TREE 0
00031 #endif
00032
00033 #define NB_FENETRES 7
00034 #define WINDACC 0
00035 #define PETIT_FORM 1
00036 #define GRAND_FORM 2
00037 #define TEXTE 3
00038 #define IMAGE 4
00039 #define WINDMENU 5
00040 #define HISTO 6
00041
00042 /* functions prototype */
00043 void main(void);
00044 void set_bimg(void);
00045 void set_form(void);
00046 void ptr_fonctions(void);
00047 void load_fontspeedo(void);
00048 void event_mesag(int *flacc, int *quit);
00049 void event_pmenu(int *quit);
00050 void event_freepu(void);
00051 void event_wform(void);
00052 void event_wmenu(int *flacc);
00053 void event_whier(void);
00054 void event_tool(void);
00055 void event_desk(void);
00056 void aff_infos(void);
00057 void formulaire(void);
00058 void test_alerte(void);
00059 void pform_wind(void);
00060 void trame_desk(void);
00061 void gform_wind(void);
00062 void objets_desk(void);
00063 void charge_texte(void);
00064 void aff_texte(void);
00065 void set_font(void);
00066 void close_txt(void);
00067 void charge_image(void);
00068 void close_img(void);
00069 void cree_histo(void);
00070 void aff_histo(void);
00071 void close_histo(void);
00072 void close_wmenu(void);
00073 void icone(void);
00074 void winicn(void);
00075 void clos_acc(void);
00076 void acc_loop(void);
00077 void red_acc(void);
00078 void relief(void);
00079
00080
00082 void main(void) {
00083     int evnt, quit = FALSE, flacc = FALSE;
00084     MFDB img;
00085
00086     /* Initialiser */
00087     if(initial("BIG2DEMO.RSC", MENU, BUREAU, NUM_TREE,
00088                 TRINDEX, FRSTR, NB_FENETRES, TITREACC)) {
00089         if(_app) set_bimg();            /* Set image on the desk */
00090         ptr_fonctions();
00091         set_form();
00092         load_fontspeedo();
00093
00094         if(work_display.n_color >= 16)  /* if we are in color mode */
00095             relief();
00096         aide_en_ligne = K_CTRL;         /* Help-bubble with Control key */
00097
00098         do {
00099             if((_app == ZERO) &&(NOT flacc)) {
00100                 acc_loop();
00101                 flacc = TRUE;
00102             }   /* we are running as an accessory */
00103
00104             evnt = dialog(DLG_DESK, adr_desk, TRUE, TRUE, PU_LIBRE, &img, FALSE);
00105
00106             if(evnt & MU_MESAG)
00107                 event_mesag(&flacc, &quit);
00108
00109             if((evnt & MU_BUTTON) &&(buf[0] == BEV_FREEPU))
00110                 event_freepu();
00111
00112             if((evnt & MU_BUTTON) &&(buf[0] == BEV_WFORM))
00113                 event_wform();
00114
00115             if((evnt & MU_BUTTON) &&(buf[0] == BEV_WMENU))
00116                 event_wmenu(&flacc);
00117
00118             if((evnt & MU_BUTTON) &&(buf[0] == BEV_WHIER))
00119                 event_whier();
00120
00121             if((evnt & MU_BUTTON) &&(buf[0] == BEV_TOOL))
00122                 event_tool();
00123
00124             if((evnt & MU_BUTTON) &&(NOT wind_find(mx, my)))
00125                 event_desk();
00126         } while(NOT quit);
00127
00128         if(fgdos)
00129             vst_unload_fonts(work_display.handle, 0);
00130         end();
00131     }   /* init OK */
00132 }   /* end of main */
00133
00134
00136 void set_bimg(void) {
00137
00138     if(img_attach(&bimg, BIMAGE, BUREAU, BU_IMG, TRUE, TRUE)) {
00139         adr_desk[BU_IMG].ob_flags &= ~HIDETREE;     /* object to draw */
00140         form_dial(FMD_FINISH, ZERO, ZERO, ZERO, ZERO,
00141                 bureau.xd, bureau.yd, bureau.wd, bureau.hd);
00142     }   /* desk image found */
00143 }   /* end of set_bimg */
00144
00145
00147 void set_form(void) {
00148     form_attach(MENU, M_WWIND, MHIERA);
00149     form_attach(FORMULAIRE, FO_PUT, POP_UP2);
00150     form_attach(FORMULAIRE, FO_PUI, POPUP_ICN);
00151     form_attach(FORMULAIRE, P_AIDE, AIDE1);
00152     form_attach(INFOS, INF_INFOS, CONTACT);
00153     form_attach(INFOS, INF_MERCI, MERCI);
00154     form_attach(PETITFORM, PF_TRAME, TRAMES);
00155     form_attach(PETITFORM, PF_COLOR, COULEURS);
00156     form_attach(PETITFORM, PF_AIDE, AIDE2);
00157     form_attach(GRANDFORM, GF_PU1, POP_UP1);
00158     form_attach(GRANDFORM, GF_PL, POP_UP1);
00159     form_attach(GRANDFORM, GF_PU2, POP_UP2);
00160     form_attach(GRANDFORM, GF_ICN, POPUP_ICN);
00161     form_attach(GRANDFORM, GF_AIDE, AIDE2);
00162     form_attach(W_MENU, MW_AL, HIERWIND);
00163     form_attach(TOOL, TL_FONT, FONTS);
00164     form_attach(TOOL, TL_SIZE, SIZES);
00165     bulle_attach(FORMULAIRE, FO_PUT, BA_PU);
00166     bulle_attach(GRANDFORM, GF_PU2, BA_PU);
00167 }   /* endof set_form */
00168
00169
00171 void ptr_fonctions(void) {
00172     fnc[0] =(void *) aff_infos;         /* main menu Infos */
00173     fnc[1] =(void *) formulaire;        /* main menu Form */
00174     fnc[2] =(void *) pform_wind;        /* main menu small form */
00175     fnc[3] =(void *) gform_wind;        /* main menu large form */
00176     fnc[4] =(void *) test_alerte;       /* free form alert */
00177     fnc[5] =(void *) aff_infos;         /* menu in window info */
00178     fnc[6] =(void *) charge_texte;      /* hier menu load characters */
00179     fnc[7] =(void *) charge_image;      /* hier menu load image */
00180     fnc[8] =(void *) formulaire;        /* free popup in free form */
00181     fnc[9] =(void *) pform_wind;        /* small form in free popup */
00182     fnc[10] =(void *) gform_wind;       /* large form in free popup */
00183     fnc[11] =(void *) charge_texte;     /* load text in free popup */
00184     fnc[12] =(void *) charge_image;     /* load image in free popup */
00185     fnc[13] =(void *) cree_histo;       /* load histo in free popup */
00186     fnc[14] =(void *) icone;            /* Alert with icon choice */
00187     fnc[15] =(void *) icone;            /* Alert with icon choice */
00188     fnc[16] =(void *) icone;            /* Alert with icon choice */
00189     fnc[17] =(void *) icone;            /* Alert with icon choice */
00190     fnc[18] =(void *) icone;            /* Alert with icon choice */
00191     fnc[19] =(void *) icone;            /* Alert with icon choice */
00192     fnc[20] =(void *) icone;            /* Alert with icon choice */
00193     fnc[21] =(void *) icone;            /* Alert with icon choice */
00194 }   /* end of ptr_fonctions */
00195
00196
00198 void load_fontspeedo(void) {
00199     int nb_fonts, i;
00200     char fontname[128], temp[35];
00201
00202     if(vq_vgdos() == GDOS_FSM) {
00203         graf_mouse(BUSYBEE , 0);
00204         nb_fonts = vst_load_fonts(work_display.handle, 0);
00205         fgdos = TRUE;
00206         i = 2;
00207
00208         do {
00209             vqt_name(work_display.handle, i, temp);
00210             strcpy(fontname, "  ");
00211             strcat(fontname, temp);
00212             if(strlen(fontname) > 33)
00213                 fontname[33] = '\0';
00214             set_text(ir_trindex[FONTS], i, fontname);
00215             ir_trindex[FONTS][i].ob_state &= ~DISABLED;
00216             i++;
00217         } while(((i - 1) <= nb_fonts) &&(i <= 41));
00218         graf_mouse(ARROW, 0);
00219         fid = 1;
00220     } /* if GDOS loaded */
00221     size = 13;
00222 }   /* endof load_fontspeedo */
00223
00224
00226 void event_mesag(int *flacc, int *quit) {
00227     if(buf[0] == MN_SELECTED)
00228         event_pmenu(quit);
00229     else if(buf[0] == BEV_HIERM) {
00230         if(buf [6] == MH_HISTO) {
00231             cree_histo();
00232             menu_tnormal(adr_menu, T_FENETRES, TRUE);
00233         }
00234     }   /* hier menu event */
00235     else if(buf[0] == AC_CLOSE) {
00236         clos_acc();
00237         *flacc = FALSE;
00238     }
00239     else if((buf[0] == WM_CLOSED) &&(buf[3] == win[WINDACC].w_hg))
00240         *flacc = FALSE;
00241 }   /* endof event_mesag */
00242
00243
00245 void event_pmenu(int *quit) {
00246     int i;
00247
00248     switch(buf[4])  {
00249     case M_ALERTE :
00250         big_alert(2, ALERT, "", TRUE);
00251         menu_tnormal(adr_menu, T_FICHIER, 1);
00252         break;
00253
00254     case M_WMENU :
00255         win[WINDMENU].w_pal =(Palette *)malloc(work_display.n_color *sizeof(Palette));
00256         for(i = 0 ; i < work_display.n_color ; i++) {
00257             win[WINDMENU].w_pal[i][0] = work_display.palette[i][0];
00258             win[WINDMENU].w_pal[i][1] = work_display.palette[i][1];
00259             win[WINDMENU].w_pal[i][2] = work_display.palette[i][2];
00260         }
00261         open_window(WINDMENU, WTYP_PICT, WATR_CURRB,
00262             bureau.xd +(bureau.wd / 5), bureau.yd +(bureau.hd / 5), 320, 150,
00263             100, 100, 200, 200, 16, 16,
00264             WFARROW, THIN_CROSS,
00265             winicn, ZERO, close_wmenu, get_string(TIT_MENU), "",
00266             (long) bureau.wd,(long) bureau.hd, TRUE, FALSE, W_MENU,
00267             10, BLACK);
00268         menu_tnormal(adr_menu, T_FENETRES, 1);
00269         break;
00270
00271     case M_QUITTER :
00272         *quit = TRUE;
00273         menu_tnormal(adr_menu, T_FICHIER, 1);
00274         break;
00275     }   /* switch case */
00276 }   /* endof event_pmenu */
00277
00278
00280 void event_freepu(void) {
00281     int i;
00282
00283     switch(buf[4]) {
00284     case PUL_ALERT :
00285         if(_app)
00286             menu_tnormal(adr_menu, T_FICHIER, 0);
00287         else {
00288             win[WINDACC].w_bar[T_FICHIER + 3].ob_state |= SELECTED;
00289             draw_object(T_FICHIER + 3, WINDACC);
00290         }
00291         big_alert(2, ALERT, "", TRUE);
00292
00293         if(_app)
00294             menu_tnormal(adr_menu, T_FICHIER, 1);
00295         else {
00296             win[WINDACC].w_bar[T_FICHIER + 3].ob_state &= ~SELECTED;
00297             draw_object(T_FICHIER + 3, WINDACC);
00298         }
00299         break;
00300
00301     case PUL_WMENU :
00302         if(_app)
00303             menu_tnormal(adr_menu, T_FENETRES, 0);
00304         else {
00305             win[WINDACC].w_bar[T_FENETRES + 3].ob_state |= SELECTED;
00306             draw_object(T_FENETRES + 3, WINDACC);
00307         }
00308         if(win[WINDMENU].w_hg <= ZERO) {
00309             win[WINDMENU].w_pal =(Palette *)malloc(work_display.n_color * sizeof(Palette));
00310             for(i = 0 ; i < work_display.n_color ; i++) {
00311                 win[WINDMENU].w_pal[i][0] = work_display.palette[i][0];
00312                 win[WINDMENU].w_pal[i][1] = work_display.palette[i][1];
00313                 win[WINDMENU].w_pal[i][2] = work_display.palette[i][2];
00314             }
00315             open_window(WINDMENU, WTYP_PICT, WATR_CURRB,
00316                 bureau.xd +(bureau.wd / 5), bureau.yd +(bureau.hd / 5), 320, 150,
00317                 100, 100, 200, 200, 16, 16,
00318                 WFARROW, THIN_CROSS,
00319                 winicn, ZERO, close_wmenu, get_string(TIT_MENU), "",
00320                 (long) bureau.wd,(long) bureau.hd,
00321                 TRUE, FALSE, W_MENU,
00322                 10, BLACK);
00323         }
00324         else {
00325             buf[3] = win[WINDMENU].w_hg;
00326             (*win[WINDMENU].w_top)();
00327         }
00328         if(_app)
00329             menu_tnormal(adr_menu, T_FENETRES, 1);
00330         else {
00331             win[WINDACC].w_bar[T_FENETRES + 3].ob_state &= ~SELECTED;
00332             draw_object(T_FENETRES + 3, WINDACC);
00333         }
00334         break;
00335     }   /* end switch case */
00336 }   /* event_freepu */
00337
00338
00340 void event_wform(void) {
00341     if(buf[3] == PETIT_FORM)    {
00342         switch(buf[4])      {
00343         case PF_CONFIRME :
00344         case PF_APPLIQUE :
00345             win[buf[3]].w_cont.w_form.w_tree[buf[4]].ob_state &= ~SELECTED;
00346             free(&win[PETIT_FORM].w_cont.w_form.w_bak); /* free memory */
00347             bak_rsc(win[PETIT_FORM].w_cont.w_form.w_tree, &win[PETIT_FORM].w_cont.w_form.w_bak);
00348             if(_app)
00349                 trame_desk();
00350             break;
00351
00352         case PF_ANNULE :
00353         case PF_RAZ :
00354             win[buf[3]].w_cont.w_form.w_tree[buf[4]].ob_state &= ~SELECTED;
00355             if(buf[4] == PF_RAZ)
00356                 objc_xedit(win[PETIT_FORM].w_cont.w_form.w_tree,    /* remove cursor */
00357                     ZERO, win[PETIT_FORM].w_cont.w_form.w_edit,
00358                     &win[PETIT_FORM].w_cont.w_form.w_pos,
00359                     ED_END, TRUE, PETIT_FORM);
00360             res_rsc(win[PETIT_FORM].w_cont.w_form.w_tree, &win[PETIT_FORM].w_cont.w_form.w_bak);
00361             if(buf[4] == PF_RAZ)
00362                 objc_xedit(win[PETIT_FORM].w_cont.w_form.w_tree,    /* put back cursor */
00363                     ZERO, win[PETIT_FORM].w_cont.w_form.w_edit,
00364                     &win[PETIT_FORM].w_cont.w_form.w_pos,
00365                     ED_INIT, TRUE, PETIT_FORM);
00366             break;
00367         } /* end switch case */
00368         if(buf[4] == PF_RAZ)
00369             print_page(PETIT_FORM);
00370     }   /* small form */
00371
00372     else if(buf[3] == GRAND_FORM) {
00373         switch(buf[4]) {
00374         case GF_CONFIRME :
00375         case GF_APPLIQUE :
00376             win[buf[3]].w_cont.w_form.w_tree[buf[4]].ob_state &= ~SELECTED;
00377             free(&win[GRAND_FORM].w_cont.w_form.w_bak); /* Libérer mémoire */
00378             bak_rsc(win[GRAND_FORM].w_cont.w_form.w_tree, &win[GRAND_FORM].w_cont.w_form.w_bak);
00379             if(_app)
00380                 objets_desk();
00381             break;
00382
00383         case GF_ANNULE :
00384         case GF_RAZ :
00385             win[buf[3]].w_cont.w_form.w_tree[buf[4]].ob_state &= ~SELECTED;
00386             res_rsc(win[GRAND_FORM].w_cont.w_form.w_tree, &win[GRAND_FORM].w_cont.w_form.w_bak);
00387             break;
00388         }   /* end switch case */
00389
00390         if((buf[4] == GF_RAZ) ||(buf[4] == GF_APPLIQUE))
00391             print_page(GRAND_FORM);
00392     }   /* large form */
00393 }   /* endof event_wform */
00394
00395
00397 void event_wmenu(int *flacc) {
00398     int i;
00399
00400     if(buf[5] == WINDMENU) {
00401         switch(buf[4] - 3) {    /* 3 objets have been added to the menu */
00402
00403         case MW_IMAGE :
00404             charge_image();
00405             break;
00406
00407         case MW_ALERTE :
00408             big_alert(2, ALERT, "", TRUE);
00409             if(win[buf[5]].w_bar[buf[4]].ob_state & CHECKED)
00410                 menu_icheck(win[buf[5]].w_bar, buf[4], FALSE);
00411             else
00412                 menu_icheck(win[buf[5]].w_bar, buf[4], TRUE);
00413             win[buf[5]].w_bar[buf[3]].ob_state &= ~SELECTED;
00414             draw_object(buf[3], buf[5]);
00415             break;
00416         }   /* end switch */
00417     }   /* event for main menu not running as an accessory */
00418     else if(buf[5] == WINDACC) {
00419         switch(buf[4] - 3)  {   /* 3 objets added to main menu */
00420
00421         case M_ALERTE :
00422             big_alert(2, ALERT, "", TRUE);
00423             win[buf[5]].w_bar[buf[3]].ob_state &= ~SELECTED;
00424             draw_object(buf[3], buf[5]);
00425             break;
00426
00427         case M_WMENU :
00428             win[buf[5]].w_bar[buf[3]].ob_state &= ~SELECTED;
00429             draw_object(buf[3], buf[5]);
00430             if(win[WINDMENU].w_hg <= ZERO) {
00431                 win[WINDMENU].w_pal =(Palette *)malloc(work_display.n_color *sizeof(Palette));
00432                 for(i = 0 ; i < work_display.n_color ; i++) {
00433                     win[WINDMENU].w_pal[i][0] = work_display.palette[i][0];
00434                     win[WINDMENU].w_pal[i][1] = work_display.palette[i][1];
00435                     win[WINDMENU].w_pal[i][2] = work_display.palette[i][2];
00436                 }
00437                 open_window(WINDMENU, WTYP_PICT, WATR_CURRB,
00438                     bureau.xd +(bureau.wd / 5), bureau.yd +(bureau.hd / 5), 320, 150,
00439                     100, 100, 200, 200, 16, 16,
00440                     WFARROW, THIN_CROSS,
00441                     winicn, ZERO, close_wmenu, get_string(TIT_MENU), "",
00442                     (long) bureau.wd,(long) bureau.hd,
00443                     TRUE, FALSE, W_MENU, 10, BLACK);
00444             }
00445             else {
00446                 buf[3] = win[WINDMENU].w_hg;
00447                 (*win[WINDMENU].w_top)();
00448             }
00449             break;
00450
00451         case M_QUITTER :
00452             clos_acc();
00453             win[buf[5]].w_bar[buf[3]].ob_state &= ~SELECTED;
00454             *flacc = FALSE;
00455             break;
00456         } /* end of switch */
00457     }   /* event for main menu running as accessory */
00458 }   /* end of event_wmenu */
00459
00460
00462 void event_whier(void) {
00463     if(buf[7] == WINDMENU) {
00464         switch(buf[6]) {
00465         case MWH_ICN0 :
00466             buf[6] = MWH_ICN0;
00467             icone();
00468             break;
00469         case MWH_ICN1 :
00470             buf[6] = MWH_ICN1;
00471             icone();
00472             break;
00473         }
00474     }
00475
00476     else if(buf[7] == WINDACC)  {
00477         if(buf[6] == MH_HISTO) {
00478             cree_histo();
00479             menu_tnormal(win[WINDACC].w_bar, T_FENETRES + 3, TRUE);
00480         }
00481     }
00482 }   /* end of event_whier */
00483
00484
00486 void event_tool(void) {
00487
00488     if(buf[3] == TEXTE) {
00489         if((buf[4] == TL_FONT) ||(buf[4] == TL_SIZE))
00490             set_font();
00491         if(buf[4] == TL_INV) {
00492             if(win[TEXTE].w_bar[TL_INV].ob_state & SELECTED)
00493                 set_work(TEXTE, 8, BLACK);
00494             else
00495                 set_work(TEXTE, ZERO, WHITE);
00496         }
00497         if(buf[4] != TL_INV)
00498             print_page(TEXTE);
00499     }
00500 }   /* end of event_tool */
00501
00502
00504 void event_desk(void) {
00505     int old_x, old_y, new_x, new_y, dummy;
00506
00507     evnt_timer(70, 0);      /* timer delay */
00508     graf_mkstate(&dummy, &dummy, &mk, &dummy);
00509
00510     if((object == BU_ICN) &&(mk == 1)) {                                                    /* icon still cliked -> move */
00511         old_x = adr_desk[object].ob_x;
00512         old_y = adr_desk[object].ob_y;
00513         graf_dragbox(adr_desk[object].ob_width, adr_desk[object].ob_height,
00514             adr_desk[object].ob_x + bureau.xd, adr_desk[object].ob_y + bureau.yd,
00515             bureau.xd, bureau.yd, bureau.wd, bureau.hd, &new_x, &new_y);
00516         adr_desk[object].ob_x = new_x - bureau.xd;
00517         adr_desk[object].ob_y = new_y - bureau.yd;
00518         form_dial(FMD_FINISH, 0, 0, 0, 0, old_x + bureau.xd, old_y + bureau.yd,
00519             adr_desk[object].ob_width, adr_desk[object].ob_height);
00520         form_dial(FMD_FINISH, 0, 0, 0, 0,
00521             adr_desk[object].ob_x + bureau.xd, adr_desk[object].ob_y + bureau.yd,
00522             adr_desk[object].ob_width, adr_desk[object].ob_height);
00523     }
00524
00525     else if(((object == BU_BOXTXT) ||(object == BU_TXT1)
00526             ||(object == BU_TXT2)) &&(mk == 1)) {
00527         /* text stiil cliked -> move */
00528         old_x = adr_desk[BU_BOXTXT].ob_x;
00529         old_y = adr_desk[BU_BOXTXT].ob_y;
00530         graf_dragbox(adr_desk[BU_BOXTXT].ob_width, adr_desk[BU_BOXTXT].ob_height,
00531             adr_desk[BU_BOXTXT].ob_x + bureau.xd, adr_desk[BU_BOXTXT].ob_y + bureau.yd,
00532             bureau.xd, bureau.yd, bureau.wd, bureau.hd, &new_x, &new_y);
00533         adr_desk[BU_BOXTXT].ob_x = new_x - bureau.xd;
00534         adr_desk[BU_BOXTXT].ob_y = new_y - bureau.yd;
00535         form_dial(FMD_FINISH, 0, 0, 0, 0, old_x + bureau.xd - 3, old_y + bureau.yd - 3,
00536             adr_desk[BU_BOXTXT].ob_width + 6, adr_desk[BU_BOXTXT].ob_height + 6);
00537         form_dial(FMD_FINISH, 0, 0, 0, 0,
00538             adr_desk[BU_BOXTXT].ob_x + bureau.xd - 3,
00539             adr_desk[BU_BOXTXT].ob_y + bureau.yd - 3,
00540             adr_desk[BU_BOXTXT].ob_width + 6, adr_desk[BU_BOXTXT].ob_height + 6);
00541     }
00542
00543     else if(((object == ZERO) ||(object == BU_IMG)) &&
00544         (adr_desk[BU_ICN].ob_state & SELECTED) &&(mk == 0)) {
00545         /* desk clicked -> deselect */
00546         adr_desk[BU_ICN].ob_state &= ~SELECTED;
00547         form_dial(FMD_FINISH, 0, 0, 0, 0,
00548             adr_desk[BU_ICN].ob_x + bureau.xd, adr_desk[BU_ICN].ob_y + bureau.yd,
00549             adr_desk[BU_ICN].ob_width, adr_desk[BU_ICN].ob_height);
00550     }
00551
00552     else if((object == BU_ICN) && NOT(adr_desk[BU_ICN].ob_state & SELECTED)
00553             && (mk == 0)) {
00554         /* simple click icon -> select */
00555         adr_desk[BU_ICN].ob_state |= SELECTED;
00556         form_dial(FMD_FINISH, 0, 0, 0, 0,
00557             adr_desk[BU_ICN].ob_x + bureau.xd, adr_desk[BU_ICN].ob_y + bureau.yd,
00558             adr_desk[BU_ICN].ob_width, adr_desk[BU_ICN].ob_height);
00559     }
00560
00561 }   /* end of event_desk() */
00562
00563
00565 void formulaire(void) {
00566     OBJECT *adr;
00567     int quit = FALSE;
00568     char *adr_bakrsc = 0L;          /* ptr form state */
00569     MFDB img;
00570
00571     img.fd_addr = NULL;
00572     if(_app)
00573         menu_tnormal(adr_menu, T_FICHIER, 0);   /* Inverser titre */
00574     else {
00575         win[WINDACC].w_bar[T_FICHIER + 3].ob_state |= SELECTED;
00576         draw_object(T_FICHIER + 3, WINDACC);
00577     }
00578     wind_update(BEG_MCTRL);                             /* Bloquer menu */
00579     adr = ir_trindex[FORMULAIRE];
00580     if(work_display.n_color >= 16) {
00581         adr->ob_spec.obspec.interiorcol = 8;
00582         adr->ob_spec.obspec.fillpattern = 7;
00583         adr[TXT1].ob_spec.tedinfo->te_color = 8;
00584         adr[TXT1].ob_spec.tedinfo->te_color |= 7 << 4;
00585         adr[TXT1].ob_spec.tedinfo->te_color |=(1 << 8);
00586         adr[TXT2].ob_spec.tedinfo->te_color = 8;
00587         adr[TXT2].ob_spec.tedinfo->te_color |= 7 << 4;
00588         adr[TXT2].ob_spec.tedinfo->te_color |=(1 << 8);
00589     }
00590     bak_rsc(adr, &adr_bakrsc);
00591     formm_draw(adr, TXT1, TRUE, &img);
00592     do {
00593         if(dialog(DLG_FORM, adr, FALSE, FALSE, BLANK, &img, TRUE)) {
00594             switch(object) {
00595             case P_CONFIRME :
00596                 quit = TRUE;
00597                 break;
00598             case P_ANNULE :
00599                 quit = TRUE;
00600                 res_rsc(adr, &adr_bakrsc);
00601                 break;
00602             }
00603         }
00604     } while(NOT quit);
00605     formm_undraw(adr, &img);
00606     if(adr_bakrsc)                          /* Si état formulaire sauvegardé */
00607         free(adr_bakrsc);
00608     wind_update(END_MCTRL);                             /* Débloquer menu */
00609     if(_app)
00610         menu_tnormal(adr_menu, T_FICHIER, 1);   /* Inverser titre */
00611     else {
00612         win[WINDACC].w_bar[T_FICHIER + 3].ob_state &= ~SELECTED;
00613         draw_object(T_FICHIER + 3, WINDACC);
00614     }
00615 }   /* end of formulaire() */
00616
00617
00619 void aff_infos(void) {
00620     OBJECT *adr;
00621     int quit = FALSE, index, tit, menuf = FALSE;
00622     MFDB img;
00623
00624     if(buf[0] == BEV_WMENU) {
00625         index = buf[5];
00626         tit = buf[3];
00627         menuf = TRUE;
00628     }
00629     if(_app)
00630         menu_tnormal(adr_menu, T_BUREAU, 0); /* Inverser titre */
00631     wind_update(BEG_MCTRL);                         /* Bloquer menu */
00632     adr = ir_trindex[INFOS];
00633     if(work_display.n_color >= 16) {
00634         adr->ob_spec.obspec.interiorcol = 8;
00635         adr->ob_spec.obspec.fillpattern = 7;
00636     }
00637     formm_draw(adr, BLANK, FALSE, &img);
00638     do {
00639         dialog(DLG_FORM, adr, FALSE, FALSE, BLANK, &img, FALSE);
00640         if(object == INF_SORTIE)
00641             quit = TRUE;
00642     } while(NOT quit);
00643     formm_undraw(adr, &img);
00644     wind_update(END_MCTRL);                         /* Débloquer menu */
00645     if(_app)
00646         menu_tnormal(adr_menu, T_BUREAU, 1); /* Inverser titre */
00647     if(menuf) {
00648         win[index].w_bar[tit].ob_state &= ~SELECTED;
00649         draw_object(tit, index);
00650     }
00651 }   /* endof aff_infos() */
00652
00653
00655 void test_alerte(void) {
00656     big_alert(1, AL_POINTEUR, "", TRUE);
00657 }   /* endof test_alerte() */
00658
00659
00661 void pform_wind(void) {
00662     OBJECT *adr;
00663
00664     adr = ir_trindex[PETITFORM];
00665     if(work_display.n_color >= 16) {
00666         adr->ob_spec.obspec.interiorcol = 8;
00667         adr->ob_spec.obspec.fillpattern = 7;
00668         adr[PF_CHAMP1].ob_spec.tedinfo->te_color = 8;
00669         adr[PF_CHAMP1].ob_spec.tedinfo->te_color |= 7 << 4;
00670         adr[PF_CHAMP1].ob_spec.tedinfo->te_color |=(1 << 8);
00671         adr[PF_CHAMP2].ob_spec.tedinfo->te_color = 8;
00672         adr[PF_CHAMP2].ob_spec.tedinfo->te_color |= 7 << 4;
00673         adr[PF_CHAMP2].ob_spec.tedinfo->te_color |=(1 << 8);
00674         adr[PF_CHAMP3].ob_spec.tedinfo->te_color = 8;
00675         adr[PF_CHAMP3].ob_spec.tedinfo->te_color |= 7 << 4;
00676         adr[PF_CHAMP3].ob_spec.tedinfo->te_color |=(1 << 8);
00677         adr[PF_CHAMP4].ob_spec.tedinfo->te_color = 8;
00678         adr[PF_CHAMP4].ob_spec.tedinfo->te_color |= 7 << 4;
00679         adr[PF_CHAMP4].ob_spec.tedinfo->te_color |=(1 << 8);
00680     }
00681     if(_app) {
00682         adr[PF_TRAME].ob_spec.obspec.fillpattern = adr_desk->ob_spec.obspec.fillpattern;
00683         adr[PF_COLOR].ob_spec.obspec.interiorcol = adr_desk->ob_spec.obspec.interiorcol;
00684     }
00685     formw_draw(adr, PETIT_FORM, TITRE_PF, BLANK, PF_CHAMP1, WATR_FORMB, winicn);
00686     if(_app)
00687         menu_tnormal(adr_menu, T_FENETRES, 1);
00688 }   /* endof pform_wind() */
00689
00690
00692 void trame_desk(void) {
00693     OBJECT *adr;
00694
00695     adr = win[PETIT_FORM].w_cont.w_form.w_tree;
00696     adr_desk->ob_spec.obspec.fillpattern = adr[PF_TRAME].ob_spec.obspec.fillpattern;
00697     adr_desk->ob_spec.obspec.interiorcol = adr[PF_COLOR].ob_spec.obspec.interiorcol;
00698     form_dial(FMD_FINISH, 0, 0, 0, 0, bureau.xd, bureau.yd, bureau.wd, bureau.hd);
00699 }   /* endof trame_desk() */
00700
00701
00703 void gform_wind(void) {
00704     OBJECT *adr;
00705
00706     adr = ir_trindex[GRANDFORM];
00707     if(work_display.n_color >= 16) {
00708         adr->ob_spec.obspec.interiorcol = 8;
00709         adr->ob_spec.obspec.fillpattern = 7;
00710     }
00711     formw_draw(adr, GRAND_FORM, TITRE_GF, BLANK, BLANK, WATR_CURRB, winicn);
00712     if(_app)
00713         menu_tnormal(adr_menu, T_FENETRES, 1);
00714 }   /* endof gform_wind() */
00715
00716
00718 void objets_desk(void) {
00719     OBJECT *adr;
00720
00721     adr = win[GRAND_FORM].w_cont.w_form.w_tree;
00722     set_text(adr_desk, BU_TXT1, get_text(adr, GF_PU1));
00723     set_text(adr_desk, BU_TXT2, get_text(adr, GF_PU2));
00724     form_dial(FMD_FINISH, 0, 0, 0, 0,
00725         adr_desk[BU_TXT1 - 1].ob_x, adr_desk[BU_TXT1 - 1].ob_y + bureau.yd,
00726         adr_desk[BU_TXT1 - 1].ob_width, adr_desk[BU_TXT1 - 1].ob_height);
00727     adr_desk[BU_ICN].ob_spec.iconblk->ib_pdata = adr[GF_ICN].ob_spec.bitblk->bi_pdata;
00728     form_dial(FMD_FINISH, 0, 0, 0, 0,
00729         adr_desk[BU_ICN].ob_x, adr_desk[BU_ICN].ob_y + bureau.yd,
00730         adr_desk[BU_ICN].ob_width, adr_desk[BU_ICN].ob_height);
00731 }   /* endof objets_desk() */
00732
00733
00735 void charge_texte(void) {
00736     char chemin[125], fname[13] = "", fichier[125], *selec, *ptr;
00737     long longueur;
00738     int fh, count = 1, dummy, w_cell, h_cell;
00739
00740     if(win[TEXTE].w_icon > BLANK)
00741         return;
00742
00743     if((fgdos) &&(fid != 1)) {
00744         /* take size of character box */
00745         vst_font(work_display.handle, fid);
00746         vst_arbpt(work_display.handle, size, &dummy, &dummy, &dummy, &h_cell);
00747         vst_setsize(work_display.handle, size, &dummy, &dummy, &w_cell, &dummy);
00748     }
00749
00750     else
00751         vst_height(work_display.handle, size, &dummy, &dummy, &w_cell, &h_cell);
00752     strcpy(chemin, pathapp);                    /* Chemin de l'application */
00753     selec = get_string(CHARGETXT);      /* Récupérer message sélecteur */
00754     if(selector(chemin, "\*.TXT", fname, selec) == TRUE && strlen(fname)) {
00755         /* if file selected */
00756         strcpy(fichier, chemin);
00757         strcat(fichier, fname);                 /* recreate access path */
00758         longueur = exist(fichier, ZERO);
00759         if(longueur) {                          /* if exist */
00760             if(win[TEXTE].w_cont.w_adr)
00761                 free(win[TEXTE].w_cont.w_adr);  /* Libérer le précédent s'il y en a */
00762             win[TEXTE].w_cont.w_adr =(char *)malloc(longueur);  /* Réserver mémoire */
00763             if(win[TEXTE].w_cont.w_adr) {
00764                 fh =(int)Fopen(fichier, FO_READ);   /* open file */
00765                 Fread(fh, longueur, win[TEXTE].w_cont.w_adr);   /* load */
00766                 Fclose(fh);                         /* close file */
00767
00768                 for(ptr = win[TEXTE].w_cont.w_adr ;
00769                         ptr < win[TEXTE].w_cont.w_adr + longueur ; ptr++) {
00770                     if(*ptr == '\r') {
00771                         *ptr = '\0';
00772                         count++;
00773                     }
00774                 }
00775                 open_window(TEXTE, WTYP_NORM, WATR_CURRB,
00776                     bureau.xd + 10, bureau.yd +(bureau.hd / 4), bureau.wd - 20,
00777                     bureau.hd / 2,
00778                     100, 100, BLANK, BLANK, w_cell, h_cell,
00779                     (WFARROW|WFGROUP), TEXT_CRSR,
00780                     winicn, aff_texte, close_txt, get_string(TIT_TXT), "",
00781                     (long)((long) MAX_LEN *(long) w_cell),
00782                     (long)((long) count *(long) h_cell),
00783                     FALSE, TRUE, TOOL, ZERO, WHITE);
00784             }
00785         }
00786     }
00787     if(_app)
00788         menu_tnormal(adr_menu, T_FENETRES, 1);
00789 }   /* endof charge_texte() */
00790
00791
00793 void aff_texte(void) {
00794     char *ptr;
00795     int i, x, y, count = ZERO, lignes, xw, yw, ww, hw, dummy,
00796         id, wcell, hcell, extent[8], largeur;
00797     char fontname [35];
00798
00799     if(win[TEXTE].w_cont.w_adr) {
00800         if((fgdos) &&(fid > 1)) {
00801             vst_font(work_display.handle, fid);
00802             vst_arbpt(work_display.handle, size, &dummy, &dummy, &dummy, &hcell);
00803             vst_setsize(work_display.handle, size, &dummy, &dummy, &wcell, &dummy);
00804         }
00805         else
00806             vst_height(work_display.handle, size, &dummy, &dummy, &wcell, &hcell);
00807         lignes =(int)(win[TEXTE].w_htot /(long)win[TEXTE].w_hunit) - 1; /* nb lines */
00808         vst_alignment(work_display.handle, HLEFT, VTOP, &dummy, &dummy);/* top left */
00809         vst_effects(work_display.handle, EFNONE);       /* remove all effects */
00810         ptr = win[TEXTE].w_cont.w_adr;                  /* start of text */
00811         for(i = 0 ; i <(win[TEXTE].w_lin / win[TEXTE].w_hunit) ; i++) {
00812             ptr +=(strlen(ptr) + 2);        /* jump start of display */
00813             count++;
00814         }
00815         zone_work(TEXTE, &xw, &yw, &ww, &hw);
00816         y = yw;                                 /* set line display */
00817         vswr_mode(work_display.handle, MD_XOR);     /* draw mode Xor */
00818         while((y < yw + hw) &&(count < lignes)) {
00819             if((fgdos) &&(fid > 1))
00820                 vqt_f_extent(work_display.handle, ptr, extent);
00821             else
00822                 vqt_extent(work_display.handle, ptr, extent);
00823             largeur = extent[2] - extent[0];
00824             if(win[TEXTE].w_bar[TL_LEFT].ob_state & SELECTED)
00825                 x = xw -(int)win[TEXTE].w_col;
00826             else if(win[TEXTE].w_bar[TL_CENTER].ob_state & SELECTED)
00827                 x = xw +(((int)win[TEXTE].w_wtot - largeur) / 2) -(int)win[TEXTE].w_col;
00828             else if(win[TEXTE].w_bar[TL_RIGHT].ob_state & SELECTED)
00829                 x = xw +((int)win[TEXTE].w_wtot - largeur) -(int)win[TEXTE].w_col;
00830
00831             if((fgdos) &&(fid > 1)) /* write each line */
00832                 v_ftext(work_display.handle, x, y, ptr);
00833             else
00834                 v_gtext(work_display.handle, x, y, ptr);
00835
00836             count++;
00837             ptr += strlen(ptr) + 2;
00838             y += hcell;
00839         }
00840         if((fgdos) &&(fid > 1)) {
00841             id = vqt_name(work_display.handle, 1, fontname);
00842             vst_font(work_display.handle, id);
00843             vst_arbpt(work_display.handle, 13, &dummy, &dummy, &dummy, &hcell);
00844             vst_setsize(work_display.handle, 13, &dummy, &dummy, &wcell, &dummy);
00845         }
00846     }
00847 } /* endof aff_texte() */
00848
00849
00851 void set_font(void) {
00852     int id, ident, wcell, hcell, dummy;
00853     char chaine[35];
00854
00855     size = atoi(get_text(win[TEXTE].w_bar, TL_SIZE));
00856     ident = match(win[TEXTE].w_bar, TL_FONT);
00857     if(ident) {
00858         fid = vqt_name(work_display.handle, ident, chaine);
00859         vst_font(work_display.handle, fid);
00860         if(ident > 1) {
00861             vst_arbpt(work_display.handle, size, &dummy, &dummy, &dummy, &hcell);
00862             vst_setsize(work_display.handle, size, &dummy, &dummy, &wcell, &dummy);
00863         }
00864         else
00865             vst_height(work_display.handle, size, &dummy, &dummy, &wcell, &hcell);
00866         win[TEXTE].w_htot =(win[TEXTE].w_htot /(long)win[TEXTE].w_hunit) * hcell;
00867         win[TEXTE].w_col =(win[TEXTE].w_col /(long)win[TEXTE].w_wunit) * wcell;
00868         win[TEXTE].w_lin =(win[TEXTE].w_lin /(long)win[TEXTE].w_hunit) * hcell;
00869         win[TEXTE].w_wunit = wcell;
00870         win[TEXTE].w_hunit = hcell;
00871         id = vqt_name(work_display.handle, 1, chaine);
00872         vst_font(work_display.handle, id);
00873     }
00874     height_sliders(TEXTE, FALSE);
00875 }   /* endof set_font() */
00876
00878 void close_txt(void) {
00879     if(win[TEXTE].w_hg > 0) {
00880         buf[3] = win[TEXTE].w_hg;
00881         closed();
00882         if(win[TEXTE].w_cont.w_adr) {
00883             free(win[TEXTE].w_cont.w_adr);
00884             win[TEXTE].w_cont.w_adr = 0L;
00885         }
00886     }
00887 }   /* endof close_txt() */
00888
00889
00891 void charge_image(void) {
00892     char chemin[125], fname[13] = "", fichier[125], *selec;
00893     int longueur = 32000, reso, fh, index, fmenu, menu, souris, i, pal;
00894     static int table[] = {0, 2, 3, 6, 4, 7, 5, 8, 9, 10, 11, 14, 12, 15, 13, 1};
00895
00896     if(buf[0] == BEV_WMENU) {
00897         index = WINDMENU;
00898         fmenu = TRUE;
00899         menu = W_MENU;
00900         souris = THIN_CROSS;
00901     }
00902
00903     else if(buf[0] == BEV_WHIER) {
00904         index = IMAGE;
00905         win[buf[7]].w_bar[buf[3]].ob_state &= ~SELECTED;
00906         draw_object(buf[3], buf[7]);
00907         fmenu = FALSE;
00908         menu = MENU;
00909         souris = POINT_HAND;
00910     }
00911
00912     else {
00913         index = IMAGE;
00914         menu_tnormal(adr_menu, T_FENETRES, 0);
00915         fmenu = FALSE;
00916         menu = BLANK;
00917         souris = POINT_HAND;
00918     }
00919
00920     if((index == IMAGE) &&(win[index].w_icon > BLANK)) {
00921         if(_app)
00922             menu_tnormal(adr_menu, T_FENETRES, 1);
00923         else {
00924             win[WINDACC].w_bar[T_FENETRES + 3].ob_state &= ~SELECTED;
00925             draw_object(T_FENETRES + 3, WINDACC);
00926             win[WINDACC].w_bar[T_FENETRES + 3].ob_state &= ~SELECTED;
00927             draw_object(T_FENETRES + 3, WINDACC);
00928         }
00929         return;
00930     }
00931
00932     strcpy(chemin, pathapp);            /* application path */
00933     selec = get_string(CHARGEIMG);      /* get selector message */
00934     if(selector(chemin, "\*.PI?", fname, selec) == TRUE && strlen(fname)) {
00935         /* file has been choosen */
00936         strcpy(fichier, chemin);
00937         strcat(fichier, fname);                 /* rebuild access path */
00938         if(exist(fichier, 0))   {               /* exist */
00939             if(win[index].w_cont.w_img.fd_addr)
00940                 free(win[index].w_cont.w_img.fd_addr);  /* free previous if exist */
00941             win[index].w_cont.w_img.fd_addr =(char *)malloc(longueur);  /* reserve memory */
00942             if(win[index].w_cont.w_img.fd_addr) {
00943                 fh =(int)Fopen(fichier, FO_READ);   /* open file */
00944                 Fread(fh, 2, &reso);
00945                 win[index].w_cont.w_img.fd_w = 640 -((reso == 0) * 320);
00946                 win[index].w_cont.w_img.fd_h = 200 +((reso == 2) * 200);
00947                 win[index].w_cont.w_img.fd_wdwidth = win[index].w_cont.w_img.fd_w / 16;
00948                 win[index].w_cont.w_img.fd_stand = 1;
00949                 win[index].w_cont.w_img.fd_nplanes = work_display.n_plane;
00950                 if(index == WINDMENU)
00951                     free(win[WINDMENU].w_pal);
00952                 win[index].w_pal =(Palette *)malloc(16 * sizeof(Palette));
00953                 for(i = 0 ; i < 16 ; i++) {
00954                     /* load pallet - change in VDI indexes */
00955                     Fread(fh, 2, &pal);
00956                     win[index].w_pal[table[i]][0] =((pal >> 8) * 143) - 72;
00957                     win[index].w_pal[table[i]][1] =(((pal >> 4) & 0xf) * 143) - 72;
00958                     win[index].w_pal[table[i]][2] =((pal & 0xf) * 143) - 72;
00959                 }
00960
00961                 Fread(fh, longueur, win[index].w_cont.w_img.fd_addr);   /* load image */
00962                 Fclose(fh);
00963
00964                 if(open_window(index, WTYP_PICT, WATR_CURRB,
00965                     bureau.xd +(bureau.wd / 3), bureau.yd +(bureau.hd / 3), 320, 150,
00966                     100, 100,
00967                     win[index].w_cont.w_img.fd_w,
00968                     win[index].w_cont.w_img.fd_h,
00969                     16, 16, WFARROW, souris,
00970                     winicn, ZERO, close_img, get_string(TIT_IMG), "",
00971                     (long) win[index].w_cont.w_img.fd_w,
00972                     (long) win[index].w_cont.w_img.fd_h,
00973                     fmenu, FALSE, menu, ZERO, WHITE)) {
00974                     if(index == WINDMENU)
00975                         win[index].w_close = close_wmenu;
00976                 }
00977             }
00978         }
00979     }
00980     if(index == WINDMENU) {
00981         win[WINDMENU].w_bar[TW_OPTIONS + 3].ob_state &= ~SELECTED;
00982         draw_object(TW_OPTIONS + 3, WINDMENU);
00983         height_sliders(index, FALSE);
00984     }
00985     else {
00986         if(_app)
00987             menu_tnormal(adr_menu, T_FENETRES, 1);
00988     }
00989 }   /* endof charge_image() */
00990
00991
00993 void close_img(void) {
00994     if(win[IMAGE].w_hg > 0) {
00995         buf[3] = win[IMAGE].w_hg;
00996         closed();
00997         if(win[IMAGE].w_cont.w_img.fd_addr) {
00998             free(win[IMAGE].w_cont.w_img.fd_addr);
00999             win[IMAGE].w_cont.w_img.fd_addr = 0L;
01000             free(win[IMAGE].w_pal); /* Libérer la mémoire palette */
01001             win[IMAGE].w_pal =(Palette *)ZERO;
01002         }
01003     }
01004 } /* endof close_img() */
01005
01006
01008 void cree_histo(void) {
01009     int i;
01010
01011     if(win[HISTO].w_icon > BLANK)
01012         return;                     /* not if iconified win */
01013     if(win[HISTO].w_cont.w_adr)
01014         free(win[HISTO].w_cont.w_adr);      /* free previous if exist */
01015     win[HISTO].w_cont.w_adr = malloc(8);
01016     for(i = ZERO ; i < 8 ; i++)
01017         *(win[HISTO].w_cont.w_adr + i) =(rand() & 0xFF);
01018     open_window(HISTO, WTYP_NORM,
01019         (NAME|CLOSER|MOVER|SIZER|FULLER|INFO|SMALLER|CYCLER|ALLSIZER),
01020         bureau.xd +(bureau.wd / 6), bureau.yd +(bureau.hd / 6),
01021         bureau.wd / 2, bureau.hd / 2,
01022         100, 100, BLANK, BLANK, 1, 1, WFARROW, ZERO,
01023         winicn, aff_histo, close_histo,
01024         get_string(TIT_HIST), get_string(INF_HIST),
01025         1L, 1L, FALSE, FALSE, BLANK, 9, BLACK);
01026 }   /* endof cree_histo() */
01027
01028
01030 void aff_histo(void) {
01031     int pxy[4], xw, yw, ww, hw, i, largeur, hauteur, maxi = ZERO, datas[8];
01032
01033     for(i = ZERO ; i < 8 ; i++)
01034         datas[i] = *(win[HISTO].w_cont.w_adr + i);
01035     zone_work(HISTO, &xw, &yw, &ww, &hw);
01036     /* 8 pixels on each side and between histo */
01037     largeur =(ww -(16) -(7 * 8)) / 8;
01038     for(i = 0 ; i < 8 ; i++)
01039         maxi = max(maxi,(int)win[HISTO].w_cont.w_adr[i]);
01040     vswr_mode(work_display.handle, MD_REPLACE);     /* draw in replace mode */
01041     vsf_perimeter(work_display.handle, TRUE);       /* draw perimeter */
01042     vsf_color(work_display.handle, 2);              /* red color */
01043     vsf_interior(work_display.handle, FIS_PATTERN); /* pattern filling */
01044     fill_tab(pxy, 4, xw, yw, xw + ww, yw + hw - 8); /* prepare draw histo */
01045     for(i = 0 ; i < 8 ; i++) {
01046         vsf_style(work_display.handle, i + 1);      /* the pattern */
01047         pxy[0] += 8;
01048         hauteur =(int)((double)win[HISTO].w_cont.w_adr[i] /(double)maxi *((double)hw - 16));
01049         pxy[1] = yw + hw - 8 - hauteur;
01050         pxy[2] = pxy[0] + largeur;
01051         v_bar(work_display.handle, pxy);            /* draw histo */
01052         pxy[0] += largeur;
01053     }
01054 }   /* endof aff_histo() */
01055
01056
01058 void close_histo(void) {
01059     if(win[HISTO].w_hg > 0) {
01060         buf[3] = win[HISTO].w_hg;
01061         closed();
01062         if(win[HISTO].w_cont.w_adr) {
01063             free(win[HISTO].w_cont.w_adr);
01064             win[HISTO].w_cont.w_adr = 0L;
01065         }
01066     }
01067 }   /* endof close_histo() */
01068
01069
01071 void close_wmenu(void) {
01072     if(win[WINDMENU].w_hg > 0)  {
01073         buf[3] = win[WINDMENU].w_hg;
01074         closed();
01075         if(win[WINDMENU].w_cont.w_img.fd_addr) {
01076             free(win[WINDMENU].w_cont.w_img.fd_addr);
01077             win[WINDMENU].w_cont.w_img.fd_addr = 0L;
01078             free(win[WINDMENU].w_pal);  /* Libérer la mémoire palette */
01079             win[WINDMENU].w_pal =(Palette *)ZERO;
01080         }
01081     }
01082 }   /* endof close_wmenu() */
01083
01084
01086 void icone(void) {
01087     char icn;
01088     char *alrt;
01089
01090     icn = buf[6] + 47;
01091     alrt = get_string(AL_ICONES);
01092     alrt[1] = icn;
01093     big_alert(1, BLANK, alrt, TRUE);
01094     win[buf[7]].w_bar[buf[3]].ob_state &= ~SELECTED;
01095     draw_object(buf[3], buf[7]);
01096 }   /* endof icone() */
01097
01098
01100 void winicn(void) {
01101     int index, xw, yw, ww, hw, pxy[8], w, h, color[2];
01102     BITBLK *img;
01103     MFDB nul = {0}, pic;
01104
01105     index = find_index(buf[3]);
01106
01107 #if INTGR
01108     if(win[index].w_type == WTYP_FORM)      /* get image */
01109         img = rs_frimg[ICN_WF];
01110     else
01111         img = rs_frimg[ICN_WN];
01112 #else
01113     if(win[index].w_type == WTYP_FORM)
01114         rsrc_gaddr(R_FRIMG, ICN_WF, &img);  /* adr image (prt on ptr) */
01115     else
01116         rsrc_gaddr(R_FRIMG, ICN_WN, &img);
01117 #endif
01118     img = *((BITBLK **)img);                /* pointer on image */
01119
01120     zone_work(index, &xw, &yw, &ww, &hw);
01121
01122     w =(img->bi_wb * 8) - 1;                /* prepare image display */
01123     h = img->bi_hl - 1;
01124     fill_tab(pxy, 8,
01125         ZERO, ZERO, w, h,
01126         xw +((ww - w) / 2), yw +((hw - h) / 2),
01127         xw +((ww - w) / 2) + w, yw +((hw - h) / 2) + h);
01128     pic.fd_addr =(void *) img->bi_pdata;
01129     pic.fd_w = w;
01130     pic.fd_h = h;
01131     pic.fd_wdwidth = img->bi_wb / 2;
01132     pic.fd_stand = 0;
01133     pic.fd_nplanes = 1;
01134
01135     color[0] = BLUE;
01136     color[1] = WHITE;
01137     vrt_cpyfm(work_display.handle, MD_REPLACE, pxy, &pic, &nul, color);
01138 }   /* endof winicn() */
01139
01140
01141 /* close main window if accessory */
01142 void clos_acc(void) {
01143     int i = ZERO;
01144
01145     do {        /* for each window */
01146
01147         if(((win[i].w_hg > ZERO) ||(win[i].w_icon > BLANK)) &&(i != WINDACC)) {
01148             /* Fclose each window */
01149             if(NOT(win[i].w_icon > BLANK)) {    /* not iconified */
01150                 buf[3] = win[i].w_hg;
01151                 (*win[i].w_close)();
01152             }
01153             else if(win[i].w_icon > BLANK) {    /* iconified */
01154
01155                 win[i].w_attr = win[i].w_old.w_att;             /* restore attrib */
01156                 win[i].w_curr.g_x = win[i].w_old.w_coord.g_x;   /* restore position */
01157                 win[i].w_curr.g_y = win[i].w_old.w_coord.g_y;
01158                 win[i].w_curr.g_w = win[i].w_old.w_coord.g_w;
01159                 win[i].w_curr.g_h = win[i].w_old.w_coord.g_h;
01160                 win[i].w_old.w_coord.g_x = win[i].w_old.w_coord.g_y =
01161                     win[i].w_old.w_coord.g_w = win[i].w_old.w_coord.g_h = ZERO;
01162                 if(win[i].w_icon == i) {        /* iconified alone */
01163                     buf[3] = win[i].w_hg;       /* call its closing function */
01164                     (*win[i].w_close)();
01165                 }
01166                 win[i].w_icon = BLANK;
01167             }
01168         }
01169     } while(NOT(win[i++].w_flags & WFLAST));
01170
01171     if(win[WINDACC].w_icon > BLANK) {
01172         win[WINDACC].w_attr = win[WINDACC].w_old.w_att;
01173         win[WINDACC].w_curr.g_x = win[WINDACC].w_old.w_coord.g_x;
01174         win[WINDACC].w_curr.g_y = win[WINDACC].w_old.w_coord.g_y;
01175         win[WINDACC].w_curr.g_w = win[WINDACC].w_old.w_coord.g_w;
01176         win[WINDACC].w_curr.g_h = win[WINDACC].w_old.w_coord.g_h;
01177         win[WINDACC].w_old.w_coord.g_x = win[WINDACC].w_old.w_coord.g_y =
01178             win[WINDACC].w_old.w_coord.g_w = win[WINDACC].w_old.w_coord.g_h = ZERO;
01179         win[WINDACC].w_icon = BLANK;
01180     }
01181     if(buf[0] != AC_CLOSE) {
01182         wind_close(win[WINDACC].w_hg);
01183         wind_delete(win[WINDACC].w_hg);
01184     }
01185     win[WINDACC].w_hg = ZERO;
01186 }   /* endof clos_acc() */
01187
01188
01190 void acc_loop(void) {
01191     int accrun = FALSE, i;
01192
01193     do {
01194         evnt_mesag(buf);
01195         if(buf[0] == AC_OPEN) {
01196             /* Cacher les emplacements des accessoires de bureau */
01197             for(i =(M_INFOS + 1) ; i <(M_INFOS + 8) ; i++)
01198                 ir_trindex[MENU][i].ob_flags |= HIDETREE;
01199             /* Réduire la hauteur de la boîte du 1° menu */
01200             ir_trindex[MENU][M_INFOS - 1].ob_height = ir_trindex[MENU][M_INFOS].ob_height;
01201
01202             if(open_window(WINDACC, WTYP_NORM,
01203                 (NAME|CLOSER|FULLER|MOVER|SIZER|SMALLER|CYCLER|ALLSIZER),
01204                 bureau.xd + 20, bureau.yd +(bureau.hd / 3), bureau.wd / 2, bureau.hd / 3,
01205                 100, 100, BLANK, BLANK, 10, 10, WFARROW, ZERO,
01206                 winicn, red_acc, clos_acc,
01207                 get_string(TW_ACC), "",
01208                 (long) bureau.wd,(long) bureau.hd,
01209                 TRUE, FALSE, MENU, 14, BLUE))
01210                 accrun = TRUE;
01211         }
01212     } while(NOT accrun);
01213 }   /* endof acc_loop() */
01214
01215
01217 void red_acc(void) {
01218 }   /* endof red_acc() */
01219
01220
01222 void relief(void) {
01223     OBJECT *adr;
01224     int i, j, tab1[] = {AIDE1, CONTACT, AIDE2, MERCI, TOOL,
01225         POP_UP1, POP_UP2, PU_LIBRE, SIZES, FONTS},
01226         tab2[] = {FORMULAIRE, PETITFORM, GRANDFORM, TOOL};
01227     /* root-boxes grey 100% */
01228     for(i = 0 ; i < 10 ; i++) {
01229         adr = ir_trindex[tab1[i]];
01230         adr->ob_spec.obspec.interiorcol = 8;
01231         adr->ob_spec.obspec.fillpattern = 7;
01232     }
01233     /* B_SELEC must be BackGround */
01234     for(i = 0 ; i < 5 ; i++) {
01235         adr = ir_trindex[tab2[i]];
01236         j = ZERO;
01237         do {                /* if UserDef and SELECTABLE */
01238             if((adr[j].ob_type == G_USERDEF) &&
01239                 (adr[j].ob_flags & SELECTABLE))
01240                 adr[j].ob_flags |= BKGR;
01241         } while(NOT(adr[j++].ob_flags & LASTOB));
01242     }
01243 }   /* endof relief() */
01244
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DEMO.H Source File

BIG2DEMO.H

Go to the documentation of this file.
00001 /* Resource file indices for BIG2DEMO. */
00002
00003 #define MENU             0   /* Menu-tree */
00004 #define T_BUREAU         3   /* TITLE in tree MENU */
00005 #define T_FICHIER        4   /* TITLE in tree MENU */
00006 #define T_FENETRES       5   /* TITLE in tree MENU */
00007 #define M_INFOS          8   /* STRING in tree MENU */
00008 #define M_FORMLIBRE      17  /* STRING in tree MENU */
00009 #define M_ALERTE         18  /* STRING in tree MENU */
00010 #define M_QUITTER        19  /* STRING in tree MENU */
00011 #define M_WFORMPETIT     21  /* STRING in tree MENU */
00012 #define M_WFORMGRAND     22  /* STRING in tree MENU */
00013 #define M_WWIND          23  /* STRING in tree MENU */
00014 #define M_WMENU          24  /* STRING in tree MENU */
00015
00016 #define BUREAU           1   /* Form/Dialog-box */
00017 #define BU_IMG           1   /* BOX in tree BUREAU */
00018 #define BU_BOXTXT        2   /* BOX in tree BUREAU */
00019 #define BU_TXT1          3   /* STRING in tree BUREAU */
00020 #define BU_TXT2          4   /* STRING in tree BUREAU */
00021 #define BU_ICN           5   /* ICON in tree BUREAU */
00022
00023 #define FORMULAIRE       2   /* Form/Dialog-box */
00024 #define CADRE1           3   /* BUTTON in tree FORMULAIRE */
00025 #define FO_RBA1          4   /* BUTTON in tree FORMULAIRE */
00026 #define FO_RBA2          5   /* BUTTON in tree FORMULAIRE */
00027 #define CADRE2           6   /* BUTTON in tree FORMULAIRE */
00028 #define FO_RBB1          7   /* BUTTON in tree FORMULAIRE */
00029 #define FO_RBB2          8   /* BUTTON in tree FORMULAIRE */
00030 #define FO_RBB3          9   /* BUTTON in tree FORMULAIRE */
00031 #define FO_PUI           11  /* IMAGE in tree FORMULAIRE */
00032 #define FO_BC1           12  /* BUTTON in tree FORMULAIRE */
00033 #define FO_BC2           13  /* BUTTON in tree FORMULAIRE */
00034 #define TXT1             15  /* FTEXT in tree FORMULAIRE */
00035 #define TXT2             16  /* FTEXT in tree FORMULAIRE */
00036 #define P_CONFIRME       17  /* BUTTON in tree FORMULAIRE */
00037 #define P_AIDE           18  /* BOXTEXT in tree FORMULAIRE */
00038 #define P_ANNULE         19  /* BUTTON in tree FORMULAIRE */
00039 #define FO_PUT           20  /* BUTTON in tree FORMULAIRE */
00040
00041 #define POP_UP1          3   /* Form/Dialog-box */
00042
00043 #define POP_UP2          4   /* Form/Dialog-box */
00044
00045 #define INFOS            5   /* Form/Dialog-box */
00046 #define INF_INFOS        11  /* BOXTEXT in tree INFOS */
00047 #define INF_SORTIE       12  /* BUTTON in tree INFOS */
00048 #define INF_MERCI        13  /* BOXTEXT in tree INFOS */
00049
00050 #define AIDE1            6   /* Form/Dialog-box */
00051
00052 #define PETITFORM        7   /* Form/Dialog-box */
00053 #define PF_BC1           2   /* BUTTON in tree PETITFORM */
00054 #define PF_BC2           3   /* BUTTON in tree PETITFORM */
00055 #define PF_CHAMP1        4   /* FTEXT in tree PETITFORM */
00056 #define PF_CHAMP2        5   /* FTEXT in tree PETITFORM */
00057 #define PF_CHAMP3        6   /* FTEXT in tree PETITFORM */
00058 #define PF_CHAMP4        7   /* FTEXT in tree PETITFORM */
00059 #define PF_CONFIRME      8   /* BUTTON in tree PETITFORM */
00060 #define PF_ANNULE        9   /* BUTTON in tree PETITFORM */
00061 #define PF_AIDE          10  /* BOXTEXT in tree PETITFORM */
00062 #define PF_APPLIQUE      11  /* BUTTON in tree PETITFORM */
00063 #define PF_RAZ           12  /* BUTTON in tree PETITFORM */
00064 #define PF_TRAME         13  /* BOX in tree PETITFORM */
00065 #define PF_COLOR         14  /* BOX in tree PETITFORM */
00066
00067 #define GRANDFORM        8   /* Form/Dialog-box */
00068 #define GF_RBA1          3   /* BUTTON in tree GRANDFORM */
00069 #define GF_RBA2          4   /* BUTTON in tree GRANDFORM */
00070 #define GF_RBA3          5   /* BUTTON in tree GRANDFORM */
00071 #define GF_RBA4          6   /* BUTTON in tree GRANDFORM */
00072 #define GF_RBB1          8   /* BUTTON in tree GRANDFORM */
00073 #define GF_RBB2          9   /* BUTTON in tree GRANDFORM */
00074 #define GF_RBB3          10  /* BUTTON in tree GRANDFORM */
00075 #define GF_RBB4          11  /* BUTTON in tree GRANDFORM */
00076 #define GF_RBC1          13  /* BUTTON in tree GRANDFORM */
00077 #define GF_RBC2          14  /* BUTTON in tree GRANDFORM */
00078 #define GF_RBC3          15  /* BUTTON in tree GRANDFORM */
00079 #define GF_RBC4          16  /* BUTTON in tree GRANDFORM */
00080 #define GF_BC1           17  /* BUTTON in tree GRANDFORM */
00081 #define GF_BC2           18  /* BUTTON in tree GRANDFORM */
00082 #define GF_PU1           19  /* BUTTON in tree GRANDFORM */
00083 #define GF_PL            20  /* BUTTON in tree GRANDFORM */
00084 #define GF_ICN           22  /* IMAGE in tree GRANDFORM */
00085 #define GF_PU2           23  /* BUTTON in tree GRANDFORM */
00086 #define GF_CONFIRME      24  /* BUTTON in tree GRANDFORM */
00087 #define GF_ANNULE        25  /* BUTTON in tree GRANDFORM */
00088 #define GF_AIDE          26  /* BOXTEXT in tree GRANDFORM */
00089 #define GF_APPLIQUE      27  /* BUTTON in tree GRANDFORM */
00090 #define GF_RAZ           28  /* BUTTON in tree GRANDFORM */
00091
00092 #define W_MENU           9   /* Menu-tree */
00093 #define TW_BUREAU        3   /* TITLE in tree W_MENU */
00094 #define TW_OPTIONS       4   /* TITLE in tree W_MENU */
00095 #define TW_ALERTS        5   /* TITLE in tree W_MENU */
00096 #define MW_INFOS         8   /* STRING in tree W_MENU */
00097 #define MW_IMAGE         10  /* STRING in tree W_MENU */
00098 #define MW_ALERTE        11  /* STRING in tree W_MENU */
00099 #define MW_AL            13  /* STRING in tree W_MENU */
00100
00101 #define MHIERA           10  /* Form/Dialog-box */
00102 #define MH_HISTO         3   /* STRING in tree MHIERA */
00103
00104 #define POPUP_ICN        11  /* Form/Dialog-box */
00105
00106 #define PU_LIBRE         12  /* Form/Dialog-box */
00107 #define PUL_ALERT        3   /* STRING in tree PU_LIBRE */
00108 #define PUL_WMENU        10  /* STRING in tree PU_LIBRE */
00109
00110 #define CONTACT          13  /* Form/Dialog-box */
00111
00112 #define AIDE2            14  /* Form/Dialog-box */
00113
00114 #define HIERWIND         15  /* Form/Dialog-box */
00115 #define MWH_ICN0         1   /* STRING in tree HIERWIND */
00116 #define MWH_ICN1         2   /* STRING in tree HIERWIND */
00117 #define MWH_ICN2         3   /* STRING in tree HIERWIND */
00118 #define MWH_ICN3         4   /* STRING in tree HIERWIND */
00119 #define MWH_ICN4         5   /* STRING in tree HIERWIND */
00120 #define MWH_ICN5         6   /* STRING in tree HIERWIND */
00121 #define MWH_ICN6         7   /* STRING in tree HIERWIND */
00122 #define MWH_ICN7         8   /* STRING in tree HIERWIND */
00123 #define MWH_ICN8         9   /* STRING in tree HIERWIND */
00124 #define MWH_ICN9         10  /* STRING in tree HIERWIND */
00125
00126 #define MERCI            16  /* Form/Dialog-box */
00127
00128 #define TOOL             17  /* Form/Dialog-box */
00129 #define TL_INV           1   /* BUTTON in tree TOOL */
00130 #define TL_LEFT          2   /* BUTTON in tree TOOL */
00131 #define TL_CENTER        3   /* BUTTON in tree TOOL */
00132 #define TL_RIGHT         4   /* BUTTON in tree TOOL */
00133 #define TL_FONT          5   /* BUTTON in tree TOOL */
00134 #define TL_SIZE          6   /* BUTTON in tree TOOL */
00135
00136 #define SIZES            18  /* Form/Dialog-box */
00137
00138 #define FONTS            19  /* Form/Dialog-box */
00139
00140 #define TRAMES           20  /* Form/Dialog-box */
00141
00142 #define COULEURS         21  /* Form/Dialog-box */
00143
00144 #define ALERT            0   /* Alert-string */
00145
00146 #define AL_ICONES        1   /* Alert-string */
00147
00148 #define AL_POINTEUR      2   /* Alert-string */
00149
00150 #define TITRE_PF         3   /* Free String */
00151
00152 #define TITRE_GF         4   /* Free String */
00153
00154 #define CHARGETXT        5   /* Free String */
00155
00156 #define CHARGEIMG        6   /* Free String */
00157
00158 #define TIT_TXT          7   /* Free String */
00159
00160 #define TIT_IMG          8   /* Free String */
00161
00162 #define TIT_MENU         9   /* Free String */
00163
00164 #define TIT_HIST         10  /* Free String */
00165
00166 #define INF_HIST         11  /* Free String */
00167
00168 #define TITREACC         12  /* Free String */
00169
00170 #define TW_ACC           13  /* Free String */
00171
00172 #define BA_RB            14  /* Free String */
00173
00174 #define BA_BC            15  /* Free String */
00175
00176 #define BA_PU            16  /* Free String */
00177
00178 #define BA_PUIM          17  /* Free String */
00179
00180 #define BA_PUBX          18  /* Free String */
00181
00182 #define BA_TG            19  /* Free String */
00183
00184 #define BA_TC            20  /* Free String */
00185
00186 #define BA_TD            21  /* Free String */
00187
00188 #define BA_TI            22  /* Free String */
00189
00190 #define BA_FNT           23  /* Free String */
00191
00192 #define BA_SIZ           24  /* Free String */
00193
00194 #define ICN_WN           0   /* Free Icon */
00195
00196 #define ICN_WF           1   /* Free Icon */
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DIAL.C Source File

BIG2DIAL.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS DE GESTION DES DIALOGUES
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2DIAL.H"
00007 #include "BIG2HELP.H"
00008 #include "BIG2FOR1.H"
00009 #include "BIG2FOR2.H"
00010 #include "BIG2DIVR.H"
00011 #include "BIG2EDIT.H"
00012 #include "BIG2WINB.H"
00013 #include "BIG2WIND.H"
00014 #include "BIG2EVTW.H"
00015 int topp = TRUE;
00016 int dialog_light (int flags, OBJECT *address, int f,
00017                                     int fl_rb, int form_pu, MFDB *img, int fl_move);
00018 /****** Fonctions de gestion des dialogues **********************/
00019 /* #[ dialog () Dialogue :                                                                              */
00074 int dialog (int flags, OBJECT *address, int f,
00075                             int fl_rb, int form_pu, MFDB *img, int fl_move)
00076 {
00077 int retour, obj, dummy, dedans, topb, index, wh,
00078         fl_cla, fl_pal, fl_bdr, fl_hie;
00079 static int topg;
00080
00081     event = buf[0] = object = key = kbd = clik = BLANK;                 /* R.A.Z. */
00082     retour = dummy = fl_cla = fl_pal = fl_bdr = fl_hie = FALSE;
00083
00084     while (TRUE)
00085     {
00086         dedans = FALSE;
00087         event = evnt_multi (flags, 258, 3, 0,
00088                                                 mouse.m_out,
00089                                                 mouse.m_x, mouse.m_y, mouse.m_w, mouse.m_h,
00090                                                 ZERO, ZERO, ZERO, ZERO, ZERO,
00091                                                 buf, 10, 0, &mx, &my, &mk, &kbd, &key, &clik);
00092
00093         if (event & MU_KEYBD)               /* Ev‚nement frappe clavier */
00094         {
00095             retour = dlg_keybd (address, f, &dedans, &fl_cla);
00096             if (retour)
00097                 return retour;
00098         }
00099
00100         if (event & MU_MESAG)           /* Ev‚nement message (menu ou fenˆtre) */
00101         {
00102             retour = dlg_mesag ();
00103             if (retour)
00104                 return retour;
00105         }
00106
00107         if (event & MU_M1)                  /* Ev‚nement de zone souris */
00108             dlg_mouse ();
00109
00110         if (event & MU_BUTTON)          /* Ev‚nement clic souris */
00111         {
00112             if (mk == 1)
00113             {
00114                 retour = dlg_button (address, f, dedans, fl_cla, img, fl_move, FALSE);
00115                 if (retour)
00116                     return retour;
00117             }
00118             else if (mk == 2)
00119             {
00120                 if (fl_rb)  /* Clic droit et surveillance demand‚e */
00121                 {
00122                     if ((desc_hard_soft.multitache && topg > 1) ||
00123                             (NOT desc_hard_soft.multitache && topg))            /* Si fenˆtre */
00124                         index = find_index (topg);          /* A qui est-elle ? */
00125                     else                                                            /* Si pas fenˆtre */
00126                         index = ZERO;                                       /* Comme si elle ‚tait … moi */
00127                     if (index > BLANK)                              /* Si fenˆtre … moi */
00128                         fl_bdr = TRUE;                                  /* Ok */
00129                 }
00130             }
00131         }
00132
00133         if (event == MU_TIMER)
00134         {
00135             if (_app && adr_menu)           /* Traitement menus hi‚rarchiques */
00136             {
00137                 obj = option_find (mx, my);
00138                 if ((adr_menu[obj].ob_type >> 8) == B_HIERM)
00139                     fl_hie = TRUE;
00140             }
00141
00142             wind_get (0, WF_TOP, &topg, &dummy, &dummy, &dummy);
00143             topb = find_index (topg);       /* Index fenˆtre 1ø plan */
00144             if (topb != old_top)                /* Si fenˆtre 1ø plan chang‚e */
00145             {
00146                 id_top = topb;
00147                 if ((old_top > BLANK) && (win[old_top].w_hg > ZERO))    /* Si ancienne ouverte */
00148                     draw_obj (win[old_top].w_fen, BW_MOVER);                        /* Dessiner MOVER */
00149                 if ((id_top > BLANK) && (win[id_top].w_hg > ZERO))      /* Si nouvelle existe */
00150                     draw_obj (win[id_top].w_fen, BW_MOVER);                         /* Dessiner MOVER */
00151                 old_top = topb;                                                                             /* Noter nouvelle */
00152             }
00153
00154             /* MA 18/07/94 : gestion des bulles d'aide */
00155             if ((aide_en_ligne == BLANK) || /* Si aide toujours active ou masque de touches enfonc‚ */
00156                     (((kbd & aide_en_ligne) == aide_en_ligne) && (aide_en_ligne > ZERO)))
00157             {
00158                 if (f)
00159                 {
00160                     wh = wind_find (mx, my);    /* On est sur une fenˆtre ? */
00161                     if ((wh) && (wh == topg) && menu_ok ())
00162                     {
00163                         index = find_index (wh);    /* Est-ce qu'elle nous appartient ? */
00164                         if (index > BLANK)              /* Si oui, */
00165                             inline_help (index, mx, my, topg, address);
00166                     }
00167                 }
00168                 else
00169                     inline_help (BLANK, mx, my, ZERO, address);
00170             }
00171
00172             if (topg)           /* Traitement palette de couleurs */
00173             {
00174                 index = find_index (topg);
00175                 if ((index == BLANK) && (pal_img == TRUE))
00176                     fl_pal = 1;
00177                 else
00178                 {
00179                     if ((win[index].w_pal) && (pal_img == FALSE))
00180                         fl_pal = 2;
00181                     else if (NOT (win[index].w_pal) && (pal_img == TRUE))
00182                         fl_pal = 3;
00183                 }
00184             }
00185         }
00186
00187         if (fl_hie)
00188         {
00189             if (menu_hierarch (obj))
00190             {
00191                 event = MU_MESAG;
00192                 return event;
00193             }
00194         }
00195
00196         if (fl_bdr)
00197         {
00198             retour = free_popup (mx, my, form_pu, ZERO);
00199             if (retour)
00200             {
00201                 event = MU_BUTTON;
00202                 return event;
00203             }
00204         }
00205
00206         if (fl_pal == 1)
00207         {
00208             set_palette (BLANK);
00209             wind_mouse ();
00210         }
00211         else if (fl_pal == 2)
00212             set_palette (index);
00213         else if (fl_pal == 3)
00214             set_palette (BLANK);
00215         return event;
00216     }
00217 }
00218 /* #] dialog () Dialogue :                                                                              */
00219 /* #[ dialog_light () Dialogue all‚g‚ :                                                     */
00220 int dialog_light (int flags, OBJECT *address, int f,
00221                                     int fl_rb, int form_pu, MFDB *img, int fl_move)
00222 {
00223 int retour, dummy, dedans, topb, fl_cla, index, fl_bdr;
00224 static int topg;
00225
00226     event = buf[0] = object = key = kbd = clik = BLANK;                 /* R.A.Z. */
00227     retour = dummy = fl_cla = fl_bdr = FALSE;
00228
00229     if (form_pu);       /* Pour ‚viter un warnings */
00230
00231     while (TRUE)
00232     {
00233         dedans = FALSE;
00234         event = evnt_multi (flags, 258, 3, 0,
00235                                                 mouse.m_out,
00236                                                 mouse.m_x, mouse.m_y, mouse.m_w, mouse.m_h,
00237                                                 ZERO, ZERO, ZERO, ZERO, ZERO,
00238                                                 buf, 10, 0, &mx, &my, &mk, &kbd, &key, &clik);
00239
00240         if (event & MU_KEYBD)               /* Ev‚nement frappe clavier */
00241         {
00242             retour = dlg_keybd (address, f, &dedans, &fl_cla);
00243             if (retour)
00244                 return retour;
00245         }
00246
00247         if (event & MU_MESAG)           /* Ev‚nement message (menu ou fenˆtre) */
00248         {
00249             retour = dlg_mesag ();
00250             if (retour)
00251                 return retour;
00252         }
00253
00254         if (event & MU_M1)                  /* Ev‚nement de zone souris */
00255             dlg_mouse ();
00256
00257         if (event & MU_BUTTON)          /* Ev‚nement clic souris */
00258         {
00259             if (mk == 1)
00260             {
00261                 retour = dlg_button (address, f, dedans, fl_cla, img, fl_move, FALSE);
00262                 if (retour)
00263                     return retour;
00264             }
00265             else if (mk == 2)
00266             {
00267                 if (fl_rb)  /* Clic droit et surveillance demand‚e */
00268                 {
00269                     if ((desc_hard_soft.multitache && topg > 1) ||
00270                             (NOT desc_hard_soft.multitache && topg))            /* Si fenˆtre */
00271                         index = find_index (topg);          /* A qui est-elle ? */
00272                     else                                                            /* Si pas fenˆtre */
00273                         index = ZERO;                                       /* Comme si elle ‚tait … moi */
00274                     if (index > BLANK)                              /* Si fenˆtre … moi */
00275                         fl_bdr = TRUE;                                  /* Ok */
00276                 }
00277             }
00278         }
00279
00280         if (event == MU_TIMER)
00281         {
00282             wind_get (0, WF_TOP, &topg, &dummy, &dummy, &dummy);
00283             topb = find_index (topg);       /* Index fenˆtre 1ø plan */
00284             if (topb != old_top)                /* Si fenˆtre 1ø plan chang‚e */
00285             {
00286                 id_top = topb;
00287                 if ((old_top > BLANK) && (win[old_top].w_hg > ZERO))    /* Si ancienne ouverte */
00288                     draw_obj (win[old_top].w_fen, BW_MOVER);                        /* Dessiner MOVER */
00289                 if ((id_top > BLANK) && (win[id_top].w_hg > ZERO))      /* Si nouvelle existe */
00290                     draw_obj (win[id_top].w_fen, BW_MOVER);                         /* Dessiner MOVER */
00291                 old_top = topb;                                                                             /* Noter nouvelle */
00292             }
00293             return event;
00294         }
00295
00296         if (fl_bdr)
00297         {
00298             retour = free_popup (mx, my, form_pu, ZERO);
00299             if (retour)
00300             {
00301                 event = MU_BUTTON;
00302                 return event;
00303             }
00304         }
00305         return event;
00306     }
00307 }
00308 /* #] dialog_light () Dialogue all‚g‚ :                                                     */
00309 /* #[ dlg_keybd () GŠre les ‚v‚nements clavier :                                    */
00310 int dlg_keybd (OBJECT *adresse, int f, int *dedans, int *fl_cla)
00311 {
00312 int i, champ, index, top, dummy, *ed, *po, xo, yo, hw;
00313 OBJECT *adr = (OBJECT *)ZERO;
00314 unsigned char touc;
00315
00316     if (f == TRUE)
00317     {               /* Demander fenˆtre de 1ø plan */
00318         wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00319         index = find_index (top);
00320     }
00321
00322     if (NOT f)
00323     {
00324         adr = adresse;
00325         ed = &edit;
00326         po = &pos;
00327     }
00328     else if (index > BLANK)
00329     {
00330         if ((f) && (dedans) && (win[index].w_type == WTYP_FORM))
00331         {
00332             adr = win[index].w_cont.w_form.w_tree;
00333             ed = &win[index].w_cont.w_form.w_edit;
00334             po = &win[index].w_cont.w_form.w_pos;
00335         }
00336         else if ((f) && (dedans) && ((win[index].w_type & WTYP_TOOL) || (win[index].w_type & WTYP_MENU)))
00337         {
00338             adr = win[index].w_bar;
00339             ed = &edit;
00340             po = &pos;
00341         }
00342         else
00343         {
00344             adr = adresse;
00345             ed = &edit;
00346             po = &pos;
00347         }
00348     }
00349     else
00350     {
00351         adr = adresse;
00352         ed = &edit;
00353         po = &pos;
00354     }
00355
00356     if (NOT adr)
00357         return FALSE;
00358
00359     kbd = (int)Kbshift (BLANK); /* Prendre ‚tat des touches sp‚ciales */
00360     kbd &= ~0x10;   /* Annuler bit CapsLock */
00361     if (*ed > BLANK)
00362     {
00363         stdkey (&touc);     /* Recherche code Ascii */
00364         if (kbd == K_CTRL)
00365         {
00366             if (touc == 'C')
00367             {
00368                 copy (adr, *ed);
00369                 return FALSE;
00370             }
00371             else if (touc == 'X')
00372             {
00373                 cut (adr, *ed);
00374             }
00375             else if (touc == 'V')
00376             {
00377                 paste (adr, *ed);
00378                 if ((f) && (win[index].w_icon == BLANK))
00379                 {
00380                     draw_curs (adr, *ed, po, ED_END);       /* D‚sactiver */
00381                     draw_object (*ed, index);
00382                     *po = min ((int)strlen (adr[*ed].ob_spec.tedinfo->te_ptext),
00383                                          (int)strlen (adr[*ed].ob_spec.tedinfo->te_pvalid));
00384                     draw_curs (adr, *ed, po, ED_END);       /* R‚activer */
00385                 }
00386                 else if (NOT f)
00387                 {
00388                     draw_curs (adr, *ed, po, ED_END);       /* D‚sactiver */
00389                     objc_offset (adr, *ed, &xo, &yo);
00390                     objc_draw (adr, ROOT, MAX_DEPTH, xo, yo,
00391                                          adr[*ed].ob_width, adr[*ed].ob_height);
00392                     *po = min ((int)strlen (adr[*ed].ob_spec.tedinfo->te_ptext),
00393                                          (int)strlen (adr[*ed].ob_spec.tedinfo->te_pvalid));
00394                     draw_curs (adr, *ed, po, ED_END);       /* R‚activer */
00395                 }
00396                 return FALSE;
00397             }
00398         }
00399     }
00400
00401     if (NOT (scan (adr, f)))
00402     {
00403         switch (key)                            /* Selon la touche... */
00404         {
00405         case HELP :
00406             i = ZERO;
00407             do
00408             {
00409                 if (((adr[i].ob_type >> 8) == B_HELP) && (NOT (adr[i].ob_state & DISABLED)))
00410                 {
00411                     objc_offset (adr, i, &mx, &my);
00412                     mx++;
00413                     my++;
00414                     mk = 1;
00415                     clik = 1;
00416                     object = i;
00417                     *dedans = TRUE;
00418                     event = MU_BUTTON;
00419                     *fl_cla = TRUE;
00420                     return FALSE;
00421                 }
00422             } while (NOT (adr[i++].ob_flags & LASTOB));
00423             break;
00424         case UNDO :
00425             i = ZERO;
00426             do
00427             {
00428                 if (((adr[i].ob_type >> 8) == B_UNDO) && (NOT (adr[i].ob_state & DISABLED)))
00429                 {
00430                     objc_offset (adr, i, &mx, &my);
00431                     mx++;
00432                     my++;
00433                     mk = 1;
00434                     clik = 1;
00435                     object = i;
00436                     *dedans = TRUE;
00437                     event = MU_BUTTON;
00438                     *fl_cla = TRUE;
00439                     return FALSE;
00440                 }
00441             } while (NOT (adr[i++].ob_flags & LASTOB));
00442             break;
00443         case ENTER :
00444         case RETURN :
00445             i = ZERO;
00446             do
00447             {
00448                 if ((adr[i].ob_flags & DEFAULT) && (NOT (adr[i].ob_state & DISABLED)))
00449                 {
00450                     objc_offset (adr, i, &mx, &my);
00451                     mx++;
00452                     my++;
00453                     mk = 1;
00454                     clik = 1;
00455                     object = i;
00456                     *dedans = TRUE;
00457                     event = MU_BUTTON;
00458                     *fl_cla = TRUE;
00459                     return FALSE;
00460                 }
00461             } while (NOT (adr[i++].ob_flags & LASTOB));
00462             break;
00463         case TAB :
00464             if (kbd == K_CTRL)
00465             {               /* Control-Tab : Cycler les fenˆtres */
00466                 if (f && index > BLANK)
00467                 {
00468                     buf[3] = win[index].w_hg;
00469                     (*win[index].w_cycle)();
00470                 }
00471             }
00472             else if ((kbd == K_RSHIFT) || (kbd == K_LSHIFT))
00473             {               /* Shift-Tab : Editable pr‚c‚dent */
00474                 if (*ed > BLANK)            /* Si dans un ‚ditable */
00475                 {
00476                     if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00477                         return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00478                     champ = prev (adr, *ed);
00479                     if (champ > BLANK)
00480                     {
00481                         draw_curs (adr, *ed, po, ED_END);       /* D‚sactiver */
00482                         *ed = champ;
00483                         if ((adr[*ed].ob_type >> 8) == B_EDIT)
00484                         {
00485                             *po = min ((int)strlen (adr[*ed].ob_spec.tedinfo->te_ptext),
00486                                                  (int)strlen (adr[*ed].ob_spec.tedinfo->te_pvalid));
00487                             draw_curs (adr, *ed, po, ED_END);       /* R‚activer */
00488                         }
00489                         else
00490                         {
00491                             draw_curs (adr, *ed, po, ED_INIT);      /* R‚activer */
00492                         }
00493                     }
00494                 }
00495             }
00496             else if (kbd == ZERO)
00497             {               /* Tab : Editable suivant */
00498                 if (*ed > BLANK)            /* Si dans un ‚ditable */
00499                 {
00500                     if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00501                         return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00502                     champ = next (adr, *ed);
00503                     if (champ > BLANK)
00504                     {
00505                         draw_curs (adr, *ed, po, ED_END);       /* D‚sactiver */
00506                         *ed = champ;
00507                         if ((adr[*ed].ob_type >> 8) == B_EDIT)
00508                         {
00509                             *po = min ((int)strlen (adr[*ed].ob_spec.tedinfo->te_ptext),
00510                                                  (int)strlen (adr[*ed].ob_spec.tedinfo->te_pvalid));
00511                             draw_curs (adr, *ed, po, ED_END);       /* R‚activer */
00512                         }
00513                         else
00514                         {
00515                             draw_curs (adr, *ed, po, ED_INIT);  /* R‚activer */
00516                         }
00517                     }
00518                     return event;
00519                 }
00520             }
00521             break;
00522         case ARDN :
00523             if (*ed > BLANK)            /* Si dans un ‚ditable */
00524             {
00525                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00526                     return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00527                 champ = next (adr, *ed);
00528                 if (champ > BLANK)
00529                 {
00530                     draw_curs (adr, *ed, po, ED_END);       /* D‚sactiver */
00531                     *ed = champ;
00532                     if ((adr[*ed].ob_type >> 8) == B_EDIT)
00533                     {
00534                         *po = min ((int)strlen (adr[*ed].ob_spec.tedinfo->te_ptext),
00535                                              (int)strlen (adr[*ed].ob_spec.tedinfo->te_pvalid));
00536                         draw_curs (adr, *ed, po, ED_END);       /* R‚activer */
00537                     }
00538                     else
00539                         draw_curs (adr, *ed, po, ED_INIT);  /* R‚activer */
00540                 }
00541                 return event;
00542             }
00543             else if ((index > BLANK) && (win[index].w_flags & WFARROW) && (win[index].w_icon == BLANK))
00544             {
00545                 buf[3] = top;
00546                 (*win[index].w_dnline)();
00547             }
00548             else
00549                 return event;
00550             break;
00551         case ARUP :
00552             if (*ed > BLANK)            /* Si dans un ‚ditable */
00553             {
00554                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00555                     return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00556                 champ = prev (adr, *ed);
00557                 if (champ > BLANK)
00558                 {
00559                     draw_curs (adr, *ed, po, ED_END);       /* D‚sactiver */
00560                     *ed = champ;
00561                     if ((adr[*ed].ob_type >> 8) == B_EDIT)
00562                     {
00563                         *po = min ((int)strlen (adr[*ed].ob_spec.tedinfo->te_ptext),
00564                                              (int)strlen (adr[*ed].ob_spec.tedinfo->te_pvalid));
00565                         draw_curs (adr, *ed, po, ED_END);       /* R‚activer */
00566                     }
00567                     else
00568                         draw_curs (adr, *ed, po, ED_INIT);      /* R‚activer */
00569                 }
00570             }
00571             else if ((index > BLANK) && (win[index].w_flags & WFARROW) && (win[index].w_icon == BLANK))
00572             {
00573                 buf[3] = top;
00574                 (*win[index].w_upline)();
00575             }
00576             else
00577                 return event;
00578             break;
00579         case ARLF :
00580             if (*ed > BLANK)            /* Si dans un ‚ditable */
00581             {
00582                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00583                     return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00584                 objc_xedit (adr, key, *ed, po, ED_CHAR, f, index);
00585             }
00586             else if ((index > BLANK) && (win[index].w_flags & WFARROW) && (win[index].w_icon == BLANK))
00587             {
00588                 buf[3] = top;
00589                 (*win[index].w_lfline)();
00590             }
00591             else
00592                 return event;
00593             break;
00594         case CT_ARLF :
00595             if (*ed > BLANK)            /* Si dans un ‚ditable */
00596             {
00597                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00598                     return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00599                 *po = prev_word (adr, *ed, *po);
00600             }
00601             break;
00602         case ARRT :
00603             if (*ed > BLANK)            /* Si dans un ‚ditable */
00604             {
00605                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00606                     return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00607                 objc_xedit (adr, key, *ed, po, ED_CHAR, f, index);
00608             }
00609             else if ((index > BLANK) && (win[index].w_flags & WFARROW) && (win[index].w_icon == BLANK))
00610             {
00611                 buf[3] = top;
00612                 (*win[index].w_rtline)();
00613             }
00614             else
00615                 return event;
00616             break;
00617         case CT_ARRT :
00618             if (*ed > BLANK)            /* Si dans un ‚ditable */
00619             {
00620                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00621                     return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00622                 *po = next_word (adr, *ed, *po);
00623             }
00624             break;
00625         case SH_ARLF :
00626             if (*ed > BLANK)
00627             {
00628                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00629                     return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00630                 if ((adr[*ed].ob_type >> 8) == B_EDIT)
00631                     objc_xedit (adr, key, *ed, po, ED_CHAR, f, index);
00632                 else
00633                 {
00634                     draw_curs (adr, *ed, po, ED_END);       /* D‚sactiver */
00635                     *po = ZERO;
00636                     draw_curs (adr, *ed, po, ED_END);       /* R‚activer */
00637                 }
00638             }
00639             else if ((index > BLANK) && (win[index].w_flags & WFARROW) && (win[index].w_icon == BLANK))
00640             {
00641                 buf[3] = top;
00642                 (*win[index].w_lfpage)();
00643             }
00644             else
00645                 return event;
00646             break;
00647         case SH_ARRT :
00648             if (*ed > BLANK)
00649             {
00650                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00651                     return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00652                 if ((adr[*ed].ob_type >> 8) == B_EDIT)
00653                     objc_xedit (adr, key, *ed, po, ED_CHAR, f, index);
00654                 else
00655                 {
00656                     draw_curs (adr, *ed, po, ED_END);       /* D‚sactiver */
00657                     draw_curs (adr, *ed, po, ED_INIT);      /* R‚activer */
00658                 }
00659             }
00660             else if ((index > BLANK) && (win[index].w_flags & WFARROW) && (win[index].w_icon == BLANK))
00661             {
00662                 buf[3] = top;
00663                 (*win[index].w_rtpage)();
00664             }
00665             else
00666                 return event;
00667             break;
00668         case SH_ARUP :
00669             if (*ed > BLANK)
00670                 first (adr, ed, po);
00671             else if ((index > BLANK) && (win[index].w_flags & WFARROW) && (win[index].w_icon == BLANK))
00672             {
00673                 buf[3] = top;
00674                 (*win[index].w_uppage)();
00675             }
00676             else
00677                 return event;
00678             break;
00679         case SH_ARDN :
00680             if (*ed > BLANK)
00681                 last (adr, ed, po);
00682             else if ((index > BLANK) && (win[index].w_flags & WFARROW) && (win[index].w_icon == BLANK))
00683             {
00684                 buf[3] = top;
00685                 (*win[index].w_dnpage)();
00686             }
00687             else
00688                 return event;
00689             break;
00690         case ESC :
00691             if ((index > BLANK) && (kbd == K_CTRL))
00692             {
00693                 if (win[index].w_icon == BLANK)
00694                     iconise (index);
00695                 else if (win[index].w_icon > BLANK)
00696                     uniconise (index);
00697             }
00698             else if (*ed > BLANK)           /* Si dans un ‚ditable */
00699             {
00700                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00701                     return FALSE;   /* Pas si fenˆtre ic“nis‚e */
00702                 objc_xedit (adr, key, *ed, po, ED_CHAR, f, index);  /* Ecrire key */
00703             }
00704             else if ((index > BLANK) && (win[index].w_flags & WFARROW))
00705             {
00706                 buf[3] = top;
00707                 if ((kbd == ZERO) && (win[index].w_icon == BLANK))
00708                 {
00709                     (*win[index].w_full)();
00710                     wind_mouse ();
00711                 }
00712                 else if (((kbd == K_RSHIFT) || (kbd == K_LSHIFT)) && (win[index].w_icon == BLANK))
00713                 {
00714                     (*win[index].w_close)();
00715                     wind_mouse ();
00716                     event = MU_MESAG;
00717                     buf[0] = WM_CLOSED;
00718                     buf[3] = win[index].w_hg;
00719                     return event;
00720                 }
00721             }
00722             else
00723                 return event;
00724             break;
00725         case CLR :
00726             if (*ed > BLANK)            /* Si dans un ‚ditable */
00727             {
00728                 first (adr, ed, po);
00729                 return event;
00730             }
00731             else if ((index > BLANK) && (win[index].w_flags & WFARROW) &&
00732                              (win[index].w_icon == BLANK) && ((win[index].w_type & 0xFF) == WTYP_NORM))
00733             {
00734                 if (win[index].w_lin > ZERO)            /* Si pas d‚j… au d‚but */
00735                 {
00736                     win[index].w_lin = ZERO;
00737                     print_page (index);
00738                     posi_vert (index, TRUE);
00739                 }
00740             }
00741             break;
00742         case SH_CLR :
00743             if (*ed > BLANK)            /* Si dans un ‚ditable */
00744             {
00745                 last (adr, ed, po);
00746                 return event;
00747             }
00748             else if ((index > BLANK) && (win[index].w_flags & WFARROW) &&
00749                              (win[index].w_icon == BLANK) && ((win[index].w_type & 0xFF) == WTYP_NORM))
00750             {
00751                 zone_work (index, &dummy, &dummy, &dummy, &hw);
00752                 if ((win[index].w_lin + hw) < win[index].w_htot)    /* Si pas d‚j… … la fin */
00753                 {
00754                     win[index].w_lin = max (ZERO, win[index].w_htot + win[index].w_hunit - hw);
00755                     win[index].w_lin = ((win[index].w_lin + (win[index].w_hunit / 2)) /
00756                                                             win[index].w_hunit) * win[index].w_hunit;
00757                     print_page (index);
00758                     posi_vert (index, TRUE);
00759                 }
00760             }
00761             break;
00762         default:                                            /* Sinon... */
00763             if (NOT touc)                               /* Si aucun caractŠre Ascci r‚el */
00764                 return event;                           /* Retourner l'‚v‚nement */
00765             if (*ed > BLANK)            /* Si dans un ‚ditable */
00766             {
00767                 if ((f) && (dedans) && (win[index].w_type == WTYP_FORM) && win[index].w_icon > BLANK)
00768                     return FALSE;
00769                 objc_xedit (adr, key, *ed, po, ED_CHAR, f, index);
00770                 return event;
00771             }
00772             else if (event & MU_KEYBD)  /* Si pas ‚ditable & event inchang‚ */
00773                 return event;                       /* Renvoyer seulement l'event */
00774         }
00775     }
00776     else
00777     {
00778         *fl_cla = TRUE;
00779         *dedans = TRUE;
00780     }
00781     return FALSE;
00782 }
00783 /* #] dlg_keybd () GŠre les ‚v‚nements clavier :                                    */
00784 /* #[ dlg_mesag () GŠre les ‚v‚nements message :                                    */
00785 int dlg_mesag (void)
00786 {
00787 int xtype, index, tree, obj, retour;
00788 OBJECT *adrh, *adr = ZERO;
00789 MFDB img;
00790
00791     switch (buf[0])
00792     {
00793     case BEV_HIERM :
00794         tree = buf[5];
00795         adrh = ir_trindex[tree];
00796         xtype = adrh[buf[6]].ob_type >> 8;
00797         if (xtype == B_FNCP)    /* Si fonction associ‚e */
00798         {
00799             (*fnc[adrh[buf[6]].ob_state >> 8])();
00800             empty (MU_KEYBD);
00801         }
00802         break;
00803     case MN_SELECTED :
00804         xtype = (adr_menu[buf[4]].ob_type >> 8);
00805         if (xtype == B_FNCP)    /* Si fonction associ‚e */
00806         {
00807             empty (MU_KEYBD);
00808             (*fnc[adr_menu[buf[4]].ob_state >> 8])();
00809         }
00810         else if (xtype == B_HIERM)
00811             menu_tnormal (adr_menu, buf[3], TRUE);
00812         break;
00813     case WM_REDRAW :
00814         if (buf[4] + buf[6] > bureau.xd + bureau.wd)
00815             buf[6] = bureau.xd + bureau.wd - buf[4];
00816         if (buf[5] + buf[7] > bureau.yd + bureau.hd)
00817             buf[7] = bureau.yd + bureau.hd - buf[5];
00818         redraw ();
00819         break;
00820     case WM_CLOSED :
00821         index = find_index (buf[3]);
00822         if (index > BLANK)
00823         {
00824             (*win[index].w_close)();
00825             buf[3] = win[index].w_hg;
00826             wind_mouse ();
00827         }
00828         break;
00829     case WM_TOPPED :
00830         if (topp)
00831         {
00832             index = find_index (buf[3]);
00833             if (index > BLANK)
00834             {
00835                 obj = objc_find (win[index].w_fen, ROOT, MAX_DEPTH, mx, my);    /* Sur quel objet ? */
00836                 if ((NOT (kbd & K_RSHIFT)) && (NOT (kbd & K_LSHIFT)) && /* Si Shift */
00837                         (obj > BLANK) &&                            /* ou objet "neutre" */
00838                         (obj != BW_BARRE) && (obj != BW_BKGR) &&
00839                         (obj != BW_INFO) && (obj != BW_WORK) &&
00840                         (obj != BW_VBAR) && (obj != BW_HBAR))
00841                     no_top (obj, index);
00842                 else
00843                 {
00844                     if (win[index].w_icon > BLANK)
00845                     {
00846                         (*win[index].w_top)();
00847                         wind_mouse ();
00848                     }
00849                     else
00850                     {
00851                         if (win[index].w_type == WTYP_FORM)
00852                             adr = win[index].w_cont.w_form.w_tree;
00853                         else if (win[index].w_type & WTYP_TOOL)
00854                             adr = win[index].w_bar;
00855                         if ((adr > ZERO) && (adr->ob_flags & NOTOP) &&
00856                                 (NOT (kbd & K_RSHIFT)) && (NOT (kbd & K_LSHIFT)))
00857                         {
00858                             obj = objc_find (adr, ROOT, MAX_DEPTH, mx, my); /* Sur quel objet ? */
00859                             if ((obj > ZERO) &&
00860                                     (adr[obj].ob_type != G_FTEXT) && (adr[obj].ob_type != G_FBOXTEXT))
00861                             {
00862                                 retour = dlg_button (adr, FALSE, FALSE, FALSE, &img, FALSE, TRUE);
00863                                 if (retour)
00864                                     return retour;
00865                                 else
00866                                 {
00867                                     (*win[index].w_top)();
00868                                     wind_mouse ();
00869                                 }
00870                             }
00871                             else
00872                             {
00873                                 (*win[index].w_top)();
00874                                 wind_mouse ();
00875                             }
00876                         }
00877                         else
00878                         {
00879                             (*win[index].w_top)();
00880                             wind_mouse ();
00881                         }
00882                     }
00883                 }
00884             }
00885         }
00886         else
00887         {
00888             event = ZERO;
00889             topp = TRUE;
00890         }
00891         break;
00892     case WM_FULLED :
00893         index = find_index (buf[3]);
00894         if (index > BLANK)
00895         {
00896             (*win[index].w_full)();
00897             wind_mouse ();
00898         }
00899         break;
00900     case WM_SIZED :
00901         index = find_index (buf[3]);
00902         if (index > BLANK)
00903         {
00904             (*win[index].w_size)();
00905             wind_mouse ();
00906         }
00907         break;
00908     case WM_MOVED :
00909         index = find_index (buf[3]);
00910         if (index > BLANK)
00911         {
00912             (*win[index].w_move)();
00913             wind_mouse ();
00914         }
00915         break;
00916     case WM_ARROWED :
00917         wm_arrow ();
00918         break;
00919     case WM_HSLID :
00920         index = find_index (buf[3]);
00921         (*win[index].w_hslid)();
00922         break;
00923     case WM_VSLID :
00924         index = find_index (buf[3]);
00925         (*win[index].w_vslid)();
00926         break;
00927     case WM_BOTTOM :
00928     case WM_CYCLED :
00929         index = find_index (buf[3]);
00930         (*win[index].w_cycle)();
00931         break;
00932     case WM_ICONIFY :
00933         index = find_index (buf[3]);
00934         iconise (index);
00935         break;
00936     case WM_UNICONIFY :
00937         index = find_index (buf[3]);
00938         uniconise (index);
00939         break;
00940     case WM_ALLICONIFY :
00941         index = find_index (buf[3]);
00942         alliconise (index);
00943         break;
00944     }
00945     return event;
00946 }
00947 /* #] dlg_mesag () GŠre les ‚v‚nements message :                                    */
00948 /* #[ dlg_button () GŠre les ‚v‚nements clic souris :                           */
00949 int dlg_button (OBJECT *adresse, int f, int dedans, int fl_cla,
00950                                 MFDB *img, int fl_depl, int fl_notop)
00951 {
00952 int i, j, *ed, *po, obflags, obstate, xtype, dummy, x, y, top,
00953         index, wh = ZERO, w, h, xb, d, ok = TRUE, obj, km;
00954 static int zicmu [] = {
00955       0x32, 0x100, 0x2C8, 0x300, 0x400, 0x500, 0x600,
00956     0x7FC, 0x810, 0x910, 0xA00, 0xB10, 0xC27, 0xD00,
00957       0x101, 0x2C8, 0x301, 0x73C, 0x80C, 0x909, 0x80FA,
00958     0x8100, 0xE700, 0x800, 0x900, 0xFF00
00959     };
00960 OBJECT *adr, *adrh;
00961
00962     km = mk;
00963     if ((f) && (NOT fl_cla))
00964         wh = wind_find (mx, my);        /* Y a-t'il une fenˆtre … cet endroit ? */
00965
00966     if (wh)                                             /* Il y a une fenˆtre */
00967     {
00968         index = find_index (wh);        /* Index fenˆtre */
00969         if (index > BLANK)
00970         {
00971                 /* Quel objet de fenˆtre est cliqu‚ ? */
00972             obj = objc_find (win[index].w_fen, ROOT, MAX_DEPTH, mx, my);
00973             if ((obj > BLANK) &&            /* S'il y a un objet */
00974                     (obj != BW_BKGR) &&     /* ce n'est pas la racine */
00975                     (obj != BW_INFO) &&     /* ni la ligne d'infos */
00976                     (obj != BW_BARRE) &&    /* ni la barre de menu / ToolBar */
00977                     (obj != BW_WORK) &&     /* ni la zone de travail */
00978                     (obj != BW_VBAR) &&     /* ni la barre verticale */
00979                     (obj != BW_HBAR))           /* ni la barre horizontale. */
00980             {
00981                 no_top (obj, index);
00982                 return MU_MESAG;                    /* et sortir. */
00983             }
00984         }
00985     }
00986     else
00987         index = BLANK;
00988
00989     if ((f) && (wh) && (NOT find_window (mx, my)))  /* Il y a une fenˆtre, mais pas zone de travail */
00990     {
00991         index = find_index (wh);        /* Index fenˆtre */
00992         if (index == BLANK)                 /* Si pas fenˆtre du programme */
00993             ok = FALSE;                             /* On le note */
00994         if (ok && ((win[index].w_type & WTYP_MENU) || (win[index].w_type & WTYP_TOOL)))
00995         {                                                       /* Si fenˆtre BIG, avec menu ou toolbar */
00996             object = objc_find (win[index].w_bar, ROOT, MAX_DEPTH, mx, my); /* Objet bar cliqu‚ */
00997             if (object == BLANK)            /* Si aucun objet (=> ‚l‚ment de bordure [Sizer]) */
00998                 ok = FALSE;                         /* On le note */
00999         }
01000         if (NOT ok)                                 /* Si cliqu‚ ‚l‚ment de fenˆtre */
01001         {
01002             while (km)
01003                 graf_mkstate (&dummy, &dummy, &km, &dummy); /* Relacher bouton */
01004             object = BLANK;                                                             /* Tout annuler */
01005             return FALSE;
01006         }
01007     }
01008     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
01009     if ((f) && (top) && (wh))
01010     {
01011         index = find_index (wh);    /* Est-ce que la fenˆtre appartient au programme ? */
01012         if (index == BLANK)             /* Si non, */
01013             return FALSE;                       /* sortir de suite. */
01014     }
01015
01016     if (clik == 2)
01017     {
01018         if ((wh) && (wh == top))
01019         {
01020             index = find_index (wh);
01021             if (index > BLANK)
01022             {
01023                 if (win[index].w_icon > BLANK)
01024                 {
01025                     uniconise (index);
01026                     return FALSE;
01027                 }
01028             }
01029         }
01030     }
01031
01032     if (buf[0] == BEV_WMENU)                /* Si ‚v‚nement menu fenˆtre */
01033     {
01034         xtype = win[buf[5]].w_bar[buf[4]].ob_type >> 8;
01035         if (xtype == B_FNCP)    /* Si fonction associ‚e */
01036         {
01037             (*fnc[win[buf[5]].w_bar[buf[4]].ob_state >> 8])();
01038             empty (MU_KEYBD);
01039         }
01040         return event;
01041     }
01042     else if (buf[0] == BEV_WHIER)       /* Si ‚v‚nement hi‚rarchique fenˆtre */
01043     {
01044         adrh = ir_trindex[buf[5]];
01045         xtype = adrh[buf[6]].ob_type >> 8;
01046         if (xtype == B_FNCP)    /* Si fonction associ‚e */
01047         {
01048             (*fnc[adrh[buf[6]].ob_state >> 8])();
01049             empty (MU_KEYBD);
01050         }
01051         return event;
01052     }
01053
01054     if (f == TRUE)
01055     {
01056         wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
01057         if (top)
01058         {
01059             index = find_index (top);
01060             if ((NOT dedans) && (index > BLANK))
01061                 if (NOT (win[index].w_type & WTYP_TOOL))
01062                     dedans = find_window (mx, my);
01063                 else
01064                 {
01065                     if ((mx > win[index].w_bar->ob_x) &&
01066                             (mx < win[index].w_bar->ob_x + win[index].w_bar->ob_width) &&
01067                             (my > win[index].w_bar->ob_y) &&
01068                             (my < win[index].w_bar->ob_y + win[index].w_bar->ob_height))
01069                         dedans = top;
01070                 }
01071         }
01072         else
01073             index = BLANK;
01074     }
01075
01076     if (f && top && (index > BLANK))
01077         if (top != win[index].w_hg)
01078             return FALSE;
01079
01080     if (NOT f)
01081     {
01082         adr = adresse;
01083         ed = &edit;
01084         po = &pos;
01085     }
01086     else if (index > BLANK)
01087     {
01088         if ((f) && (dedans) && (win[index].w_type == WTYP_FORM))
01089         {
01090             if (win[index].w_icon > BLANK)  /* Si la fenˆtre est iconifi‚e */
01091                 return FALSE;       /* on s'en va. */
01092
01093             adr = win[index].w_cont.w_form.w_tree;
01094             ed = &win[index].w_cont.w_form.w_edit;
01095             po = &win[index].w_cont.w_form.w_pos;
01096         }
01097         else if ((f) && (dedans) && (win[index].w_type & WTYP_TOOL))
01098         {
01099             if (win[index].w_icon > BLANK)  /* Si la fenˆtre est iconifi‚e */
01100                 return FALSE;       /* on s'en va. */
01101
01102             adr = win[index].w_bar;
01103             ed = &edit;
01104             po = &pos;
01105         }
01106         else
01107             adr = adresse;
01108     }
01109     else
01110         adr = adresse;
01111
01112     if (fl_notop)
01113     {
01114         adr = adresse;
01115         f = TRUE;
01116         index = find_index (wind_find (mx, my));
01117     }
01118
01119     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);
01120     kbd = (int)Kbshift (BLANK);     /* Prendre ‚tat des touches sp‚ciales */
01121     kbd &= ~0x10;                                   /* Annuler ‚ventuel bit CapsLock */
01122     if (index > BLANK)
01123     {
01124         wind = find_window (mx, my);
01125         if (wind != ZERO)   /* Chercher si on a cliqu‚ dans la fenˆtre active */
01126         {
01127             if (clik == 2)          /* Si double-clic, */
01128                 event |= BIT15;     /* positionner le 15ø bit. */
01129         }
01130         else
01131             wind = BLANK;
01132     }
01133     else
01134         wind = BLANK;
01135
01136     if (index > BLANK)
01137         if ((f) && (win[index].w_type & WTYP_MENU))
01138             if (menu_window (index, mx, my))
01139                 return event;
01140
01141     object = objc_find (adr, ROOT, MAX_DEPTH, mx, my); /* Objet cliqu‚ */
01142
01143     if ((wind_find (mx, my)) && (wind == BLANK) && (adr == adr_desk))
01144     {
01145         while (km)
01146             graf_mkstate (&dummy, &dummy, &km, &dummy); /* Relacher bouton */
01147         return FALSE;
01148     }
01149
01150     if ((object > BLANK) && NOT (adr[object].ob_flags & HIDETREE))
01151     {
01152         obflags = (adr[object].ob_flags);       /* Prend flags de l'objet */
01153         obstate = (adr[object].ob_state);                           /* Prend state de l'objet */
01154         xtype = (adr[object].ob_type >> 8);                     /* Type ‚tendu */
01155
01156         if ((NOT (obflags & TOUCHEXIT)) && (adr != adr_desk) && (NOT fl_cla) && (NOT (xtype == B_EDIT)))
01157         {       /* Si ce n'est pas un TOUCHEXIT et qu'on n'est pas sur le bureau */
01158             while (km)              /* Attendre bouton relach‚ */
01159                 graf_mkstate (&dummy, &dummy, &km, &dummy);
01160             vq_mouse (work_display.handle, &dummy, &mx, &my);   /* Reprendre position souris */
01161             if (objc_find (adr, ROOT, MAX_DEPTH, mx, my) != object)
01162             {                                       /* Si ce n'est plus le mˆme objet */
01163                 object = BLANK;     /* Annuler object */
01164                 return FALSE;           /* Sortir de suite */
01165             }
01166         }
01167
01168         if ((((obflags & LASTOB) != LASTOB) && (obflags != NONE)) &&
01169                 (NOT (obflags & TOUCHEXIT)) && (NOT (xtype == B_EDIT)))
01170         {                           /* Si pas TOUCHEXIT ni B_EDIT, mais ob_flags quand mˆme, */
01171             while (km)  /* attendre bouton relach‚ */
01172                 graf_mkstate (&dummy, &dummy, &km, &dummy); /* Relacher bouton */
01173         }
01174
01175         if (xtype == B_FNCP)    /* Si fonction associ‚e */
01176         {
01177             (*fnc[adr[object].ob_state >> 8])();
01178             empty (MU_KEYBD);
01179             return event;
01180         }
01181
01182         if ((obflags & EDITABLE) && NOT (obstate & DISABLED))   /* Si ‚ditable */
01183         {
01184             if (*ed != object)
01185             {
01186                 draw_curs (adr, *ed, po, ED_END);
01187                 *ed = object;
01188                 draw_curs (adr, *ed, po, ED_END);
01189             }
01190             *po = pos_curs (adr, *ed, mx, f, index, *po);
01191         }
01192
01193         if ((obflags & RBUTTON) && (obflags & SELECTABLE) &&
01194                 NOT (obstate & DISABLED) &&
01195                 NOT (obstate & SELECTED))   /* Si Radio, SELECTABLE et pas SELECTED */
01196         {
01197             j = object;                                         /* Partir de cet objet */
01198             adr[object].ob_state |= SELECTED;   /* Le s‚lectionner */
01199             if (f)
01200                 draw_object (object, index);
01201             else
01202                 objc_draw (adr, object, MAX_DEPTH, adr->ob_x, adr->ob_y,
01203                                      adr->ob_width, adr->ob_height);
01204             i = parent (adr, j);                    /* Chercher le pŠre */
01205             j = adr[i].ob_head;                 /* Partir du 1ø enfant... */
01206             i = adr[i].ob_tail;                 /* jusqu'au dernier. */
01207             do
01208             {
01209                 if ((adr[j].ob_flags & RBUTTON) && (j != object) &&
01210                         (adr[j].ob_state & SELECTED))
01211                 {       /* Les mettre en normal si RBUTTON sauf l'objet cliqu‚. */
01212                     adr[j].ob_state &= ~SELECTED;
01213                     if (f)
01214                         draw_object (j, index);
01215                     else
01216                         objc_draw (adr, j, MAX_DEPTH, adr->ob_x, adr->ob_y,
01217                                              adr->ob_width, adr->ob_height);
01218                 }
01219                 j = adr[j].ob_next;                                             /* Passer au suivant... */
01220             } while ((j <= i) && (j > adr[i].ob_next)); /* jusqu'au dernier. */
01221             if ((f) && (win[index].w_type & WTYP_TOOL))
01222             {
01223                 event = MU_BUTTON;
01224                 buf[0] = BEV_TOOL;
01225                 buf[3] = index;
01226                 buf[4] = object;
01227             }
01228             if ((f) && (win[index].w_type & WTYP_FORM))
01229             {
01230                 event = MU_BUTTON;
01231                 buf[0] = BEV_WFORM;
01232                 buf[3] = index;
01233                 buf[4] = object;
01234             }
01235             if (NOT (obflags & DCDEFAULT))
01236                 return event;
01237         }
01238
01239         if ((obflags & SELECTABLE) && (NOT (obflags & RBUTTON))
01240                 && NOT (obstate & DISABLED))                    /* Si Selectable seul */
01241         {
01242             adr[object].ob_state ^= SELECTED;
01243             if ((f) && (top) && (adr != adr_desk))
01244             {
01245                 draw_object (object, index);
01246                 if ((win[index].w_type & WTYP_TOOL) &&
01247                         (NOT (adr[object].ob_state & SHADOWED)))
01248                 {
01249                     event = MU_BUTTON;
01250                     buf[0] = BEV_TOOL;
01251                     buf[3] = index;
01252                     buf[4] = object;
01253                     return event;
01254                 }
01255                 if ((win[index].w_type & WTYP_FORM) &&
01256                         (NOT (adr[object].ob_state & SHADOWED)))
01257                 {
01258                     event = MU_BUTTON;
01259                     buf[0] = BEV_WFORM;
01260                     buf[3] = index;
01261                     buf[4] = object;
01262                 }
01263             }
01264             else if (adr == adr_desk)
01265                 form_dial (FMD_FINISH, 0, 0, 0, 0,
01266                                      adr_desk[object].ob_x + bureau.xd, adr_desk[object].ob_y + bureau.yd,
01267                                      adr_desk[object].ob_width, adr_desk[object].ob_height);
01268             else
01269                 objc_draw (adr, object, MAX_DEPTH, adr->ob_x, adr->ob_y,
01270                                      adr->ob_width, adr->ob_height);
01271
01272             if ((adr[object].ob_type >> 8) == B_HELP)   /* Si bouton Aide */
01273             {
01274                 help (adr, object);     /* Appel routine Aide */
01275                 adr[object].ob_state ^= SELECTED;
01276                 if (f)
01277                     draw_object (object, index);
01278                 else
01279                     objc_draw (adr, object, MAX_DEPTH, adr->ob_x, adr->ob_y,
01280                                          adr->ob_width, adr->ob_height);
01281             }
01282         }
01283         else if ((obflags & SELECTABLE) && (NOT (obflags & RBUTTON)) &&
01284                          (obstate & DISABLED))                  /* Si Selectable DISABLED */
01285         {
01286             event = ZERO;
01287             return event;
01288         }
01289
01290         if ((obflags & SELECTABLE) && (obflags & DCDEFAULT) &&
01291                 (clik == 2) && NOT (obstate & DISABLED))    /* Si double-clic entraine Default */
01292         {
01293             i = ZERO;   /* En partant de la racine */
01294             do              /* Pour chaque objet */
01295             {
01296                 if (adr[i].ob_flags & DEFAULT)  /* Si objet d‚faut */
01297                 {
01298                     adr[i].ob_state |= SELECTED;    /* S‚lectionner l'objet */
01299                     objc_draw (adr, i, MAX_DEPTH, /* Le redessiner */
01300                                          adr->ob_x, adr->ob_y,
01301                                          adr->ob_width, adr->ob_height);
01302                     object = i;                 /* Enregistrer l'objet */
01303                     event = MU_BUTTON;  /* Modifier type d'‚v‚nement */
01304                     buf[0] = BEV_WFORM;
01305                     buf[3] = index;
01306                     buf[4] = object;
01307                     mx = my = mk = clik = ZERO;
01308                     return (event);         /* Retourner l'‚v‚nement */
01309                 }
01310             } while (NOT (adr[i++].ob_flags & LASTOB)); /* Jusqu'au dernier objet */
01311         }
01312
01313         if ((obstate & SHADOWED) && NOT (obstate & OUTLINED)
01314                 && NOT (obstate & DISABLED))            /* Si bouton Shadow (= pop_up) */
01315         {
01316             if (kbd == ZERO)                                                                    /* Si clic simple */
01317             {
01318                 if ((NOT xtype) || (xtype == B_POPUP) || (xtype == B_LIST))
01319                 {
01320                     objc_offset (adr, object, &xb, &dummy);
01321                     if (xtype)
01322                     {
01323                         if (h > 8)
01324                             d = h;
01325                         else
01326                             d = w * 2;
01327                     }
01328                     else
01329                         d = ZERO;
01330                     if (mx > (xb + adr[object].ob_width - d))   /* Si clic ic“ne suivant */
01331                         next_option (adr, object, BLANK);   /* Option suivante */
01332                     else                                                                            /* Sinon */
01333                     {
01334                         if ((NOT xtype) || (xtype == B_POPUP))
01335                             pop_up (adr, object);                           /* Routine Pop_Up */
01336                         else if (xtype == B_LIST)
01337                             pop_liste (adr, object);    /* Appel routine Pop-Liste */
01338                     }
01339                 }
01340             }
01341             else if ((kbd == K_RSHIFT) || (kbd == K_LSHIFT))    /* Si shift-clic */
01342                 next_option (adr, object, BLANK);               /* option suivante */
01343
01344             if (adr[object].ob_type != G_BOX)
01345                 adr[object].ob_state ^= SELECTED;       /* Inverser SELECTED */
01346             if (f)
01347             {
01348                 draw_object (object, index);
01349                 if (win[index].w_type & WTYP_TOOL)
01350                 {
01351                     event = MU_BUTTON;
01352                     buf[0] = BEV_TOOL;
01353                     buf[3] = index;
01354                     buf[4] = object;
01355                 }
01356                 if (win[index].w_type & WTYP_FORM)
01357                 {
01358                     event = MU_BUTTON;
01359                     buf[0] = BEV_WFORM;
01360                     buf[3] = index;
01361                     buf[4] = object;
01362                 }
01363                 return event;
01364             }
01365             else
01366             {
01367                 objc_offset (adr, object, &x, &y);  /* Position objet cliqu‚ */
01368                 objc_draw (adr, ROOT, MAX_DEPTH, x, y,
01369                                      adr[object].ob_width, adr[object].ob_height + 3);
01370             }
01371         }
01372
01373         if ((obflags & EXIT) && (NOT (obstate & DISABLED))) /* Si bouton EXIT */
01374         {
01375             if (f)
01376             {
01377                 buf[0] = BEV_WFORM;
01378                 if (obflags & WFCLOSE)
01379                 {
01380                     buf[3] = win[index].w_hg;
01381                     (*win[index].w_close)();
01382                 }
01383                 buf[1] = ap_id;
01384                 buf[3] = index;
01385                 buf[4] = object;
01386             }
01387             return event;
01388         }
01389         else if ((obflags & EXIT) && (obstate & DISABLED)) /* Si EXIT DISABLED */
01390         {
01391             event = ZERO;
01392             return event;
01393         }
01394
01395         if ((obflags & TOUCHEXIT) && NOT (obstate & DISABLED))  /* Si TOUCHEXIT */
01396         {
01397             if (xtype == B_MOVE)
01398             {                           /* Si on clique le bouton de d‚placement */
01399                 move_form (adr, adr->ob_x, adr->ob_y, adr->ob_width, adr->ob_height, img, fl_depl);
01400             }
01401             else
01402             {
01403                 if (f && (win[index].w_type & WTYP_TOOL))
01404                 {
01405                     event = MU_BUTTON;
01406                     buf[0] = BEV_TOOL;
01407                     buf[3] = index;
01408                     buf[4] = object;
01409                 }
01410                 else if (f && (win[index].w_type & WTYP_FORM))
01411                 {
01412                     event = MU_BUTTON;
01413                     buf[0] = BEV_WFORM;
01414                     buf[3] = index;
01415                     buf[4] = object;
01416                 }
01417                 if (clik == 2)          /* Si double-clic, */
01418                     event |= BIT15;     /* positionner le 15ø bit. */
01419                 return event;
01420             }
01421         }
01422         else if ((obflags & TOUCHEXIT) && (obstate & DISABLED)) /* Si TOUCHEXIT DISABLED */
01423         {
01424             event = ZERO;
01425             return event;
01426         }
01427     }
01428     else if ((NOT f) && (object == BLANK))
01429     {
01430         while (km)
01431             graf_mkstate (&dummy, &dummy, &km, &dummy); /* Relacher bouton */
01432         Dosound (zicmu);
01433     }
01434     return event;       /* Si c'est un objet quelconque */
01435 }
01436 /* #] dlg_button () GŠre les ‚v‚nements clic souris :                           */
01437 /* #[ dlg_mouse () GŠre les ‚v‚nements de zone souris :                     */
01454 void dlg_mouse (void)
01455 {
01456 int top, index, dummy;
01457
01458     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
01459     index = find_index (top);
01460     if (index > BLANK)
01461     {
01462         if (mouse.m_out == TRUE)                            /* Si on sort de la zone */
01463             graf_mouse (ARROW, 0);                          /* Souris -> Flˆche */
01464         else if (mouse.m_out == FALSE)              /* Si on entre dans la zone */
01465             graf_mouse (win[index].w_mouse, 0); /* Souris -> forme enregistr‚e */
01466         mouse.m_out ^= 0x01;            /* Inverser ‚tat surveillance */
01467     }
01468 }
01469 /* #] dlg_mouse () GŠre les ‚v‚nements de zone souris :                     */
01470 /* #[ option_find () Cherche sur quelle option de menu on est :     */
01471 int option_find (int xm, int ym)
01472 {
01473 int i = 3, x, y, w, h, retour = ZERO;
01474
01475     do
01476     {
01477         if ((adr_menu[i].ob_type >> 8) == B_HIERM)
01478         {
01479             objc_offset (adr_menu, i, &x, &y);
01480             w = adr_menu[i].ob_width;
01481             h = adr_menu[i].ob_height;
01482             if ((xm >= x) && (xm < x + w) &&
01483                     (ym >= y) && (ym < y + h))
01484             {
01485                 if (adr_menu[i].ob_state & SELECTED)
01486                     retour = i;
01487             }
01488         }
01489     } while ((retour == ZERO) && (NOT (adr_menu[i++].ob_flags & LASTOB)));
01490     return retour;
01491 }
01492 /* #] option_find () Cherche sur quelle option de menu on est :     */
01493 /* #[ menu_ok () Signale si aucun menu n'est d‚roul‚ :                      */
01494 int menu_ok (void)
01495 {
01496 int o = 2, retour = TRUE;
01497
01498     if (adr_menu)       /* S'il y a un menu */
01499     {
01500         do
01501         {       /* Examiner chaque titre */
01502             if (adr_menu[o].ob_state & SELECTED)    /* S'il est s‚lectionn‚ (d‚roul‚) */
01503                 retour = FALSE;                                         /* C'est pas bon */
01504         } while (adr_menu[++o].ob_type == G_TITLE); /* Titre suivant */
01505     }
01506     return retour;      /* Retourner le r‚sultat */
01507 }
01508 /* #] menu_ok () Signale si aucun menu n'est d‚roul‚ :                      */
01509 /* #[ dial () Mini_dialog :                                                                             */
01510 int dial (OBJECT *address, MFDB *img, int fl_move)
01511 {
01512 int retour, dedans, fl_cla;
01513
01514     event = buf[0] = object = key = kbd = clik = BLANK;                 /* R.A.Z. */
01515     retour = fl_cla = FALSE;
01516
01517     while (TRUE)
01518     {
01519         dedans = FALSE;
01520         event = evnt_multi ((MU_KEYBD|MU_BUTTON), 2, 1, 1,
01521                                                 ZERO, ZERO, ZERO, ZERO, ZERO,
01522                                                 ZERO, ZERO, ZERO, ZERO, ZERO,
01523                                                 buf, 10, 0, &mx, &my, &mk, &kbd, &key, &clik);
01524         if (event & MU_KEYBD)               /* Ev‚nement frappe clavier */
01525         {
01526             retour = dlg_keybd (address, FALSE, &dedans, &fl_cla);
01527             return MU_KEYBD;
01528         }
01529         if (event & MU_BUTTON)          /* Ev‚nement clic souris */
01530         {
01531             retour = dlg_button (address, FALSE, dedans, fl_cla, img, fl_move, FALSE);
01532             if (retour)
01533                 return MU_BUTTON;
01534         }
01535     }
01536 }
01537 /* #] dial () Mini_dialog :                                                                             */
01538
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DIAL.H Source File

BIG2DIAL.H

Go to the documentation of this file.
00001
00017 /* #[ Variables globales : */
00018 extern int id_top;      /* Index fenˆtre 1ø plan */
00019 extern int old_top;
00020 extern int pal_img;
00021 extern MOBLK mouse;
00022 extern int ap_id;
00023 extern int event;
00024 extern int buf[];
00025 extern int mx;
00026 extern int my;
00027 extern int mk;
00028 extern int edit;
00029 extern int pos;
00030 extern int object;
00031 extern int kbd;
00032 extern int key;
00033 extern int clik;
00034 extern int wind;
00035 extern t_display work_display;
00036 extern t_desktop bureau;
00037 extern OBJECT *adr_menu;
00038 extern OBJECT *adr_desk;
00039 extern OBJECT **ir_trindex;
00040 extern FNCP *fnc;
00041 extern BigWind  *win;
00042 /* #] Variables globales : */
00043 /* #[ Prototypage des fonctions : */
00044 int     dlg_keybd (OBJECT *adresse, int f, int *dedans, int *fl_cla);
00045 int     dlg_mesag (void);
00046 int     dlg_button (OBJECT *adresse, int f, int dedans, int fl_cla,
00047                                     MFDB *img, int fl_depl, int fl_notop);
00048 int option_find (int xm, int ym);
00049 int     menu_ok (void);
00050 int dial (OBJECT *address, MFDB *img, int fl_move);
00051 /* #] Prototypage des fonctions : */
00052
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DIVR.C Source File

BIG2DIVR.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS DIVERSES
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2DIVR.H"
00007 /****** Fonctions diverses ****************************************/
00008 /* #[ path () Cherche et retourne le chemin de l'application :      */
00009 /***** Utility Functions *****/
00025 char *path (char *pat)
00026 {
00027 int drive;
00028
00029     drive = Dgetdrv ();                         /* Lecteur courant */
00030     pat[0] = (char) (65 + drive);
00031     pat[1] = ':';
00032     Dgetpath (&pat[2], drive + 1);  /* Chemin lecteur courant */
00033     strcat (pat, "\\");
00034     return pat;
00035 }
00036 /* #] path () Cherche et retourne le chemin de l'application :      */
00037 /* #[ exist () Fichier existe :                                                                     */
00051 long exist (char *name, int att)
00052 {
00053 int err, o, l;
00054 long length;
00055 char old[128];
00056
00057     if (NOT (att & FA_SUBDIR))                      /* Si on cherche un fichier */
00058     {
00059         err = (int)Fopen (name, ZERO);          /* On tente de l'ouvrir */
00060         if (err >= ZERO)                                        /* Si c'est bon */
00061         {
00062             length = Fseek (ZERO, err, 2);      /* On lit sa taille */
00063             Fclose (err);                                           /* On le ferme */
00064             return length;                                      /* On retourne la longueur */
00065         }
00066         else                                                                /* Si c'est pas bon */
00067             return FALSE;
00068     }
00069     else                                                                    /* Si on cherche un dossier */
00070     {
00071         o = Dgetdrv ();                                         /* Noter lecteur actuel */
00072         Dgetpath (old, ZERO);                               /* Noter chemin actuel */
00073         l = (int)name[0] - 'A';                         /* Lecteur voulu */
00074         err = (int)Dsetdrv (l);                         /* On tente d'imposer ce lecteur */
00075         if (err >= ZERO)                                        /* Si c'est bon */
00076         {
00077             err = Dsetpath (name + 2);              /* On tente d'imposer ce chemin */
00078             if (err >= ZERO)
00079             {
00080                 Dsetdrv (o);                                        /* Restaurer ancien lecteur */
00081                 Dsetpath (old);                                 /* Restaurer ancien chemin */
00082                 return TRUE;
00083             }
00084             else
00085                 Dsetdrv (o);                                        /* Restaurer ancien lecteur */
00086         }
00087         return FALSE;
00088     }
00089 }
00090 /* #] exist () Fichier existe :                                                                     */
00091 /* #[ set_palette () Impose une palette de couleurs :                           */
00102 void set_palette (int index)
00103 {
00104 register int i;
00105 int rgb[3];
00106 Palette *pal;
00107
00108     if (index > BLANK)
00109     {
00110         if ((win[index].w_icon == BLANK) && (win[index].w_pal))
00111         {
00112             pal = (Palette *) win[index].w_pal;
00113             for (i = ZERO ; i < work_display.n_color ; i++)
00114             {
00115                 rgb[0] = pal[i][0];
00116                 rgb[1] = pal[i][1];
00117                 rgb[2] = pal[i][2];
00118                 vs_color (work_display.handle, i, rgb);
00119             }
00120             pal_img = TRUE;
00121         }
00122     }
00123     else
00124     {
00125         for (i = ZERO ; i < work_display.n_color ; i++)
00126         {
00127             rgb[0] = bpal[i][0];
00128             rgb[1] = bpal[i][1];
00129             rgb[2] = bpal[i][2];
00130             vs_color (work_display.handle, i, rgb);
00131         }
00132         pal_img = FALSE;
00133     }
00134 }
00135 /* #] set_palette () Impose une palette de couleurs :                           */
00136 /* #[ timer () Lit le timer 200 Hz :                                                            */
00145 long timer (void)
00146 {
00147 long save_ssp;
00148 long time;
00149
00150     save_ssp = Super (0L);          /* Passer en mode superviseur */
00151     time = *(long *)0x4BA;          /* Prendre le timer en passant par son pointeur */
00152     Super ((void *)save_ssp);       /* Revenir en mode utilisateur */
00153
00154     return time;                                /* Retourner la valeur lue */
00155 }
00156 /* #] timer () Lit le timer 200 Hz :                                                            */
00157 /* #[ stdkey () Test tous claviers :                                                            */
00158 void stdkey (unsigned char *k)
00159 {
00160 KEYTAB *kt;
00161     if ((char)(key >> 8) != ZERO)
00162     {
00163         kt = Keytbl((void *)BLANK, (void *)BLANK, (void *)BLANK);
00164         *k = toupper (kt->shift[(char)(key >> 8)]);
00165     }
00166     else
00167         *k = (char)(key);
00168 }
00169 /* #] stdkey () Test tous claviers :                                                            */
00170 /* #[ trim () Vire espaces d‚but et fin de chaŒne :                             */
00179 char *trim (char *str)
00180 {
00181 register char   *s;
00182 register int i = ZERO;
00183
00184     while ((*(str + i) == ' ') || (*(str + i) == '\t'))
00185         i++;
00186     strcpy (str, (str + i));
00187
00188     s = str + strlen (str) - 1;
00189     for( ; ((*s == ' ') || (*s == '\t')) && (s >= str) ; *s-- = ZERO);
00190     return str;
00191 }
00192 /* #] trim () Vire espaces d‚but et fin de chaŒne :                             */
00193 /* #[ rc_intersect () Intersection :                                                            */
00208 int rc_intersect (GRECT *p1, GRECT *p2)
00209     /* Calcule l'intersection de 2 rectangles */
00210 {
00211 int tx, ty, tw, th;
00212
00213     tw = min(p2->g_x + p2->g_w, p1->g_x + p1->g_w);
00214     th = min(p2->g_y + p2->g_h, p1->g_y + p1->g_h);
00215     tx = max(p2->g_x, p1->g_x);
00216     ty = max(p2->g_y, p1->g_y);
00217     p2->g_x = tx;
00218     p2->g_y = ty;
00219     p2->g_w = tw - tx;
00220     p2->g_h = th - ty;
00221     return ((tw > tx) && (th > ty));
00222 }
00223 /* #] rc_intersect () Intersection :                                                            */
00224 /* #[ clipp () Clipping :                                                                                   */
00236 void clipp (int clip_flag, GRECT *area)
00237 {
00238 int pxy[4];
00239
00240     fill_tab (pxy, 4,
00241                         area->g_x, area->g_y,
00242                         area->g_w + area->g_x - 1, area->g_h + area->g_y - 1);
00243     vs_clip (work_display.handle, clip_flag, pxy);
00244 }
00245 /* #] clipp () Clipping :                                                                                   */
00246 /* #[ send_mesag () Envoi de message … soi-mˆme :                                   */
00263 void send_mesag (int type, int wi, int x, int y, int w, int h)
00264 {
00265     fill_tab (buf, 8,
00266                         type, ap_id,    /* Num‚ro du message et notre indentificateur (l'exp‚diteur du message) */
00267                         ZERO, wi, x, y, w, h);
00268     appl_write (ap_id, 16, buf);    /* Envoi du message */
00269 }
00270 /* #] send_mesag () Envoi de message … soi-mˆme :                                   */
00271 /* #[ selector () S‚lecteur :                                                                       */
00311 int selector (char *pat, char *ext, char *file, char *title)
00312 {
00313 char ch[120], fi[13];
00314 int retour, i;
00315
00316     strcpy (ch, pat);
00317     strcat (ch, ext);                       /* Chemin et s‚lection */
00318     strcpy (fi, file);
00319     if ((Sversion () >> 8) <= 20)
00320         fsel_input (ch, fi, &retour);                   /* Appel du s‚lecteur */
00321     else
00322         fsel_exinput (ch, fi, &retour, title);  /* Appel du s‚lecteur */
00323     if (retour)                                     /* Si pas ANNULER... */
00324     {
00325         for (i = (int)strlen (ch) ; ch[i] != '\\' ; ch[i--] = '\0') ;
00326         strcpy (pat, ch);
00327         strcpy (file, fi);
00328     }
00329     return retour;
00330 }
00331 /* #] selector () S‚lecteur :                                                                       */
00332 /* #[ extension () Ajuste extension :                                                           */
00351 void extension (char *filename, char *ext)
00352 {                           /* L'EXTENSION DOIT ETRE TRANSMISE AVEC LE POINT */
00353 int t;
00354
00355     t = (int)strlen (filename);                             /* Longueur du nom de fichier */
00356     while (filename[t] != '.' && t > ZERO)  /* Chercher le '.' … partir de la droite */
00357         t--;
00358     if (t > ZERO)                                       /* Si trouv‚, */
00359     {
00360         memcpy (filename + t, ext, 4);          /* ajouter l'extention … partir de l… */
00361         filename[t + 4] = '\0';
00362     }
00363     else                                                        /* Sinon, */
00364         strcat (filename, ext);                         /* l'ajouter … la fin */
00365 }
00366 /* #] extension () Ajuste extension :                                                           */
00367 /* #[ first_cookie () :                                                                                     */
00374 COOKIE *first_cookie (void)
00375 {
00376 COOKIE *cook;
00377 long save_ssp;
00378
00379     /* MA_30_10. Si on est en superviseur on ne doit pas repasser en User */
00380     if (Super((void *)1L) == 0L)    /* si on est en mode utilisateur */
00381         save_ssp = Super (ZERO);
00382     else
00383         save_ssp = ZERO;
00384     cook = *(COOKIE **) 0x5a0;      /* Le cookie jar */
00385
00386     /* MA_30_10. Si on etait en en superviseur on ne doit pas repasser en User  */
00387     if (save_ssp)
00388         Super ((void *)save_ssp);
00389     if (!cook)                                      /* Pas de cookie jar */
00390         return (COOKIE *) ZERO;
00391     return cook;
00392 }
00393 /* #] first_cookie () :                                                                                     */
00394 /* #[ next_cookie () :                                                                                      */
00403 COOKIE *next_cookie (COOKIE *ck)
00404 {
00405     if (!ck->ident)                     /* C'‚tait le dernier cookie */
00406         return ZERO;
00407     return ++ck;
00408 }
00409 /* #] next_cookie () :                                                                                      */
00410 /* #[ vq_cookie () :                                                                                            */
00420 COOKIE *vq_cookie (long id)
00421 {
00422 COOKIE *cook;
00423
00424     cook = first_cookie ();
00425     while (cook)
00426     {
00427         if (cook->ident == id)          /* Trouv‚ ! */
00428             return cook;
00429         cook = next_cookie (cook);
00430     }
00431     return (COOKIE *)ZERO;              /* Pas trouv‚ */
00432 }
00433 /* #] vq_cookie () :                                                                                            */
00434 /* #[ vq_cookie_c () :                                                                                      */
00444 COOKIE *vq_cookie_c (char *c)
00445 {
00446 /* MA_30_10: Recherche d'un cookie avec une chaine, comme il se doit */
00447 long l = ZERO;
00448
00449     l = ((long)c[0] << 24);
00450     l |= ((long)c[1] << 16);
00451     l |= ((long)c[2] << 8);
00452     l |= (long)c[3];
00453     return (vq_cookie (l));
00454 }
00455 /* #] vq_cookie_c () :                                                                                      */
00456 /* #[ fill_tab () Remplissage d'un tableau :                                            */
00465 void fill_tab (int *pxy, int n, ...)
00466 {
00467 int i, val;
00468 va_list pa;
00469
00470     va_start (pa, n);
00471     for (i = ZERO ; i < n ; i++)
00472     {
00473         val = va_arg (pa, int);
00474         *(pxy + i) = val;
00475     }
00476     va_end (pa);
00477 }
00478 /* #] fill_tab () Remplissage d'un tableau :                                            */
00479 /* #[ empty () Attente vider buffer clavier ou message :                    */
00488 void empty (int evnmt)
00489 {
00490 int quit = FALSE, ev, dummy;
00491
00492     if ((evnmt == MU_MESAG) || (evnmt == MU_KEYBD))
00493     {
00494         do
00495         {
00496             ev = evnt_multi ((evnmt | MU_TIMER),
00497                                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00498                                              buf, 10, 0, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy);
00499             if (ev == MU_TIMER)
00500                 quit = TRUE;
00501         } while (! quit);
00502     }
00503 }
00504 /* #] empty () Attente vider buffer clavier ou message :                    */
00505
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2DIVR.H Source File

BIG2DIVR.H

Go to the documentation of this file.
00001 /*  BIG2DIVR.H */
00002
00003 #include <stdarg.h>
00004 /* #[ Variables globales : */
00005 extern int pal_img;
00006 extern int ap_id;
00007 extern int buf[];
00008 extern int key;
00009 extern t_display work_display;
00010 extern BigWind  *win;
00011 /* #] Variables globales : */
00012 void    stdkey (unsigned char *k);
00013
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2EDIT.C Source File

BIG2EDIT.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS DE GESTION DES CHAMPS EDITABLES
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2EDIT.H"
00007 /****** Fonctions pour les EDITABLEs ******************************/
00008 /* #[ exist_edit () Cherche s'il y a un ‚ditable :                              */
00009 int exist_edit (OBJECT *adr)
00010 {
00011 register int i = ZERO;
00012 int type;
00013
00014     if (edit == BLANK)
00015         return FALSE;
00016     else
00017     {
00018         do
00019         {
00020             type = (adr[i].ob_type) & 0xFF;
00021             if ((type == G_FTEXT) || (type == G_FBOXTEXT))
00022                 return TRUE;
00023         } while (NOT (adr[i++].ob_flags & LASTOB));
00024         return FALSE;
00025     }
00026 }
00027 /* #] exist_edit () Cherche s'il y a un ‚ditable :                              */
00028 /* #[ set_text () Ecrire une G_STRING ou un G_TEXT :                            */
00041 void set_text (OBJECT *adr, int object, char *string)
00042 {
00043 int type;
00044 char *pt;
00045
00046     type = adr[object].ob_type & 0xff;
00047     if ((type == G_STRING) || (type == G_BUTTON))
00048         strcpy (adr[object].ob_spec.free_string, string);
00049     else if (type == G_USERDEF)
00050         strcpy ((char *)adr[object].ob_spec.userblk->ub_parm, string);
00051     if ((type == G_TEXT) || (type == G_BOXTEXT))
00052         strcpy (adr[object].ob_spec.tedinfo->te_ptext, string);
00053     if ((type == G_FTEXT) || (type == G_FBOXTEXT))
00054     {
00055         pt = (adr[object].ob_spec.tedinfo->te_ptext);
00056         pt = start_edit (pt);
00057         adr[object].ob_spec.tedinfo->te_ptext = pt;
00058         strcpy (adr[object].ob_spec.tedinfo->te_ptext, string);
00059     }
00060 }
00061 /* #] set_text () Ecrire une G_STRING ou un G_TEXT :                            */
00062 /* #[ get_text () Lire une G_STRING ou un G_TEXT:                                   */
00075 char *get_text (OBJECT *adr, int object)
00076 {
00077 int type;
00078 char *retour = "";
00079
00080     type = adr[object].ob_type & 0xff;
00081
00082     if ((type == G_STRING) || (type == G_BUTTON))
00083         retour = (adr[object].ob_spec.free_string);
00084     else if (type == G_USERDEF)
00085         if ((adr[object].ob_type >> 8) != ZERO)
00086             retour = (char *)(adr[object].ob_spec.userblk->ub_parm);
00087         else
00088             retour = "";
00089     else if ((type == G_TEXT) || (type == G_BOXTEXT))
00090         retour = (adr[object].ob_spec.tedinfo->te_ptext);
00091     else if ((type == G_FTEXT) || (type == G_FBOXTEXT))
00092         retour = start_edit (adr[object].ob_spec.tedinfo->te_ptext);
00093
00094     return retour;
00095 }
00096 /* #] get_text () Lire une G_STRING ou un G_TEXT:                                   */
00097 /* #[ empty_edit () Vider les ‚ditables :                                                   */
00098 void empty_edit (OBJECT *adr)
00099 {
00100 register int i = ZERO;
00101
00102     do
00103     {
00104         if (adr[i].ob_flags & EDITABLE)
00105             set_text (adr, i, "");
00106     } while (NOT (adr[i++].ob_flags & LASTOB));     /* Jusqu'au dernier objet */
00107 }
00108 /* #] empty_edit () Vider les ‚ditables :                                                   */
00109 /* #[ pos_curs () Position curseur dans ‚ditable cliqu‚ :                   */
00110 int pos_curs (OBJECT *adr, int ed, int mx, int f, int index, int po)
00111 {
00112 int x, w, delta, ob_x, new_pos, dummy, i, largv = ZERO;
00113 char *texte, *tmplt, car, *val;
00114 TEDINFO *ted;
00115
00116     ted = adr[object].ob_spec.tedinfo;      /* Adresse TEDINFO */
00117     if (ted->te_font == IBM)
00118         vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &dummy);
00119     else
00120         vst_height (work_display.handle, HMINUS, &dummy, &dummy, &w, &dummy);
00121     texte = (ted->te_ptext);                        /* Texte du champ */
00122     tmplt = (ted->te_ptmplt);                       /* Texte template */
00123     for (i = ZERO ; i < strlen (tmplt) ; i++)
00124     {
00125         if (tmplt[i] == '_')
00126             largv++;
00127     }
00128     objc_offset (adr, ed, &x, &dummy);  /* Coordonn‚es ‚ditable */
00129         /* Diff‚rence de largeur entre l'objet et le template */
00130     delta = adr[ed].ob_width - ((int)strlen (tmplt) * w);
00131     ob_x = mx - x;                          /* Position cliquage dans l'objet */
00132     switch (ted->te_just)               /* Correction selon justif */
00133     {
00134     case TE_RIGHT :         /* A droite */
00135         ob_x += delta;
00136         break;
00137     case TE_CNTR :          /* Centr‚ */
00138         ob_x += (delta / 2);
00139         break;
00140     }
00141     ob_x /= w;
00142     car = tmplt[ob_x];
00143     if ((car == '_') || (NOT car))
00144     {
00145         new_pos = ob_x - ((int)strlen (tmplt) - largv);
00146         val = strchr (tmplt, '_');
00147         for (i = ZERO ; i < strlen (val) ; i++)
00148         {
00149             if (val[i] != '_')
00150                 if (i > new_pos)
00151                     new_pos++;
00152         }
00153         if (new_pos > (int)strlen (texte))
00154             new_pos = (int)strlen (texte);
00155         draw_curs (adr, ed, &po, ED_END);
00156         draw_curs (adr, ed, &new_pos, ED_END);
00157     }
00158     else if ((adr[ed].ob_type >> 8) == B_EDIT)
00159     {
00160         if (car == '\4')
00161         {
00162             key = ARLF;
00163             draw_curs (adr, ed, &po, ED_END);
00164             new_pos = po = ZERO;
00165             draw_curs (adr, ed, &po, ED_END);
00166             objc_xedit (adr, key, ed, &new_pos, ED_CHAR, f, index);
00167         }
00168         else if (car == '\3')
00169         {
00170             key = ARRT;
00171             draw_curs (adr, ed, &po, ED_END);
00172             new_pos = po = min (largv, (int)strlen (texte));
00173             draw_curs (adr, ed, &po, ED_END);
00174             objc_xedit (adr, key, ed, &new_pos, ED_CHAR, f, index);
00175         }
00176         else
00177         {
00178             new_pos = ZERO;
00179             draw_curs (adr, ed, &po, ED_END);
00180             draw_curs (adr, ed, &new_pos, ED_END);
00181         }
00182     }
00183     else if ((adr[ed].ob_type >> 8) == ZERO)
00184     {
00185         draw_curs (adr, ed, &po, ED_END);
00186         new_pos = ZERO;
00187         draw_curs (adr, ed, &new_pos, ED_END);
00188     }
00189
00190     return new_pos;
00191 }
00192 /* #] pos_curs () Position curseur dans ‚ditable cliqu‚ :                   */
00193 /* #[ prev () Champ pr‚c‚dent :                                                                     */
00194 int prev (OBJECT *adr, int ob)
00195 {
00196 int pere, vu;
00197
00198     while (ob-- > ZERO)
00199     {
00200         vu = TRUE;
00201         pere = parent (adr, ob);
00202         while ((pere > ZERO) && (vu))
00203         {
00204             if (adr[pere].ob_flags & HIDETREE)
00205                 vu = FALSE;
00206             pere = parent (adr, pere);
00207         }
00208         if (vu)
00209             if ((adr[ob].ob_flags & EDITABLE) && (NOT (adr[ob].ob_flags & HIDETREE)) && (NOT (adr[ob].ob_state & DISABLED)))
00210                 return ob;
00211     }
00212     return BLANK;
00213 }
00214 /* #] prev () Champ pr‚c‚dent :                                                                     */
00215 /* #[ next () Champ suivant :                                                                           */
00216 int next (OBJECT *adr, int ob)
00217 {
00218 int pere, vu;
00219
00220     while (NOT (adr[ob++].ob_flags & LASTOB))
00221     {
00222         vu = TRUE;
00223         pere = parent (adr, ob);
00224         while ((pere > ZERO) && (vu))
00225         {
00226             if (adr[pere].ob_flags & HIDETREE)
00227                 vu = FALSE;
00228             pere = parent (adr, pere);
00229         }
00230         if (vu)
00231             if ((adr[ob].ob_flags & EDITABLE) && (NOT (adr[ob].ob_flags & HIDETREE)) && (NOT (adr[ob].ob_state & DISABLED)))
00232                 return ob;
00233     }
00234     return BLANK;
00235 }
00236 /* #] next () Champ suivant :                                                                           */
00237 /* #[ first () AmŠne le curseur sur le premier ‚ditable :                   */
00238 void first (OBJECT *adr, int *editable, int *position)
00239 {
00240 int ed = ZERO, pere, vu;
00241
00242     while (NOT (adr[ed].ob_flags & LASTOB))
00243     {
00244         vu = FALSE;
00245         if (adr[ed].ob_flags & EDITABLE)
00246         {
00247             vu = TRUE;
00248             pere = parent (adr, ed);
00249             while ((pere > ZERO) && (vu))
00250             {
00251                 if (adr[pere].ob_flags & HIDETREE)
00252                     vu = FALSE;
00253                 pere = parent (adr, pere);
00254             }
00255         }
00256         if (vu)
00257         {
00258             if ((ed < *editable) && NOT (adr[ed].ob_state & DISABLED) && NOT (adr[ed].ob_state & HIDETREE))
00259             {
00260                 draw_curs (adr, *editable, position, ED_END);
00261                 *editable = ed;
00262                 if ((adr[*editable].ob_type >> 8) == B_EDIT)
00263                 {
00264                     *position = min ((int)strlen (adr[ed].ob_spec.tedinfo->te_ptext),
00265                                                      (int)strlen (adr[ed].ob_spec.tedinfo->te_pvalid));
00266                     draw_curs (adr, *editable, position, ED_END);
00267                 }
00268                 else
00269                     draw_curs (adr, *editable, position, ED_INIT);
00270                 return;
00271             }
00272         }
00273         ed++;
00274     }
00275 }
00276 /* #] first () AmŠne le curseur sur le premier ‚ditable :                   */
00277 /* #[ last () AmŠne le curseur sur le dernier ‚ditable :                    */
00278 void last (OBJECT *adr, int *editable, int *position)
00279 {
00280 int ed = *editable, pere, vu;
00281
00282     while (NOT (adr[ed].ob_flags & LASTOB))
00283         ed++;
00284     while (ed > ZERO)
00285     {
00286         vu = FALSE;
00287         if (adr[ed].ob_flags & EDITABLE)
00288         {
00289             vu = TRUE;
00290             pere = parent (adr, ed);
00291             while ((pere > ZERO) && (vu))
00292             {
00293                 if (adr[pere].ob_flags & HIDETREE)
00294                     vu = FALSE;
00295                 pere = parent (adr, pere);
00296             }
00297         }
00298         if (vu)
00299         {
00300             if ((ed > *editable) && NOT (adr[ed].ob_state & DISABLED) && NOT (adr[ed].ob_state & HIDETREE))
00301             {
00302                 draw_curs (adr, *editable, position, ED_END);
00303                 *editable = ed;
00304                 if ((adr[*editable].ob_type >> 8) == B_EDIT)
00305                 {
00306                     *position = min ((int)strlen (adr[ed].ob_spec.tedinfo->te_ptext),
00307                                                      (int)strlen (adr[ed].ob_spec.tedinfo->te_pvalid));
00308                     draw_curs (adr, *editable, position, ED_END);
00309                 }
00310                 else
00311                     draw_curs (adr, *editable, position, ED_INIT);
00312                 return;
00313             }
00314         }
00315         ed--;
00316     }
00317 }
00318 /* #] last () AmŠne le curseur sur le dernier ‚ditable :                    */
00319 /* #[ next_word () Place curseur au mot suivant :                                   */
00320 int next_word (OBJECT *adr, int ob, int posi)
00321 {
00322 char chaine [256], *debut;
00323 int l, po, flag = FALSE;
00324
00325     po = posi;
00326     po--;                                               /* Si on est d‚j… … la fin d'un mot ! */
00327     strcpy (chaine, get_text (adr, ob));    /* Chaine de travail */
00328     debut = strstr (chaine, adr[ob].ob_spec.tedinfo->te_ptext);
00329     strcpy (chaine, debut);
00330     chaine[strlen (adr[ob].ob_spec.tedinfo->te_pvalid)] = '\0';
00331     l = (int)strlen (chaine);                   /* Longueur chaine */
00332     while ((++po < l) && (flag == FALSE))   /* Tant qu'on n'est pas … la fin... */
00333     {
00334         if (*(chaine + po) == ' ')  /* Si espace, */
00335             flag = TRUE;
00336     }
00337     if (po > l)
00338         po = l;
00339     draw_curs (adr, ob, &posi, ED_END);     /* D‚sactiver le curseur */
00340     posi = po;
00341     draw_curs (adr, ob, &posi, ED_END);     /* R‚activer le curseur */
00342     return posi;
00343 }
00344 /* #] next_word () Place curseur au mot suivant :                                   */
00345 /* #[ prev_word () Place curseur au mot pr‚c‚dent :                             */
00346 int prev_word (OBJECT *adr, int ob, int posi)
00347 {
00348 char chaine[256], *debut;
00349 int po, flag = FALSE;
00350
00351     po = posi;
00352     po--;                                               /* Si on est d‚j… au d‚but d'un mot ! */
00353     strcpy (chaine, get_text (adr, ob));    /* Chaine de travail */
00354     debut = strstr (chaine, adr[ob].ob_spec.tedinfo->te_ptext);
00355     strcpy (chaine, debut);
00356     while ((--po > ZERO) && (flag == FALSE))    /* Tant qu'on n'est pas au d‚but... */
00357     {
00358         if (*(chaine + po) == ' ')  /* Si espace, */
00359         {
00360             po += 2;
00361             flag = TRUE;
00362         }
00363     }
00364     if (po < ZERO)
00365         po = ZERO;
00366     draw_curs (adr, ob, &posi, ED_END);     /* D‚sactiver le curseur */
00367     posi = po;
00368     draw_curs (adr, ob, &posi, ED_END);     /* R‚activer le curseur */
00369     return posi;
00370 }
00371 /* #] prev_word () Place curseur au mot pr‚c‚dent :                             */
00372 /* #[ objc_xedit () Gestion complŠte des champs ‚ditables :             */
00421 void objc_xedit (OBJECT *adr, int car, int ed, int *po, int action, int f, int index)
00422 {
00423 int largeur = ZERO, longueur, i;
00424 char *texte, ascii, *ptr, *pt, *tmplt, *p, *valid;
00425 TEDINFO *ted;
00426
00427     ted = adr[ed].ob_spec.tedinfo;      /* Adresse TEDINFO */
00428     tmplt = (ted->te_ptmplt);                   /* Texte template */
00429     valid = (ted->te_pvalid);                   /* Texte filtre */
00430     for (i = ZERO ; i < strlen (tmplt) ; i++)
00431     {
00432         if (tmplt[i] == '_')
00433             largeur++;
00434     }
00435     longueur = adr[ed].ob_state >> 8;
00436     texte = (ted->te_ptext);                        /* Texte du champ */
00437
00438     if ((action == ED_INIT) || (action == ED_END))  /* SI ACTION DE CURSEUR */
00439         draw_curs (adr, ed, po, action);
00440     else if (action == ED_CHAR)                                         /* SI ACTION DE CARACTERE */
00441     {
00442         switch (car)
00443         {
00444         case ARLF :
00445             if ((adr[ed].ob_type >> 8) == B_EDIT)
00446             {
00447                 if (*po == ZERO)
00448                 {
00449                     pt = (ted->te_ptext);
00450                     pt = start_edit (pt);
00451                     if (ted->te_ptext > pt)
00452                     {
00453                         (ted->te_ptext)--;
00454                         draw_curs (adr, ed, po, ED_END);
00455                         if (f)
00456                             draw_object (ed, index);
00457                         else
00458                             objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00459                                                  adr->ob_width, adr->ob_height);
00460                         draw_curs (adr, ed, po, ED_END);
00461                     }
00462                 }
00463                 else
00464                 {
00465                     draw_curs (adr, ed, po, ED_END);
00466                     (*po)--;
00467                     draw_curs (adr, ed, po, ED_END);
00468                 }
00469             }
00470             else
00471             {
00472                 if (*po > ZERO)
00473                 {
00474                     draw_curs (adr, ed, po, ED_END);
00475                     (*po)--;
00476                     draw_curs (adr, ed, po, ED_END);
00477                 }
00478             }
00479             break;
00480         case ARRT :
00481             if ((adr[ed].ob_type >> 8) == B_EDIT)
00482             {
00483                 if (*po == largeur)
00484                 {
00485                     pt = (ted->te_ptext);
00486                     pt = start_edit (pt);
00487                     if (ted->te_ptext - pt + largeur <
00488                             (int)strlen (pt))
00489                     {
00490                         (ted->te_ptext)++;
00491                         draw_curs (adr, ed, po, ED_END);
00492                         if (f)
00493                             draw_object (ed, index);
00494                         else
00495                             objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00496                                                  adr->ob_width, adr->ob_height);
00497                         draw_curs (adr, ed, po, ED_END);
00498                     }
00499                 }
00500                 else if (*po < strlen (texte))
00501                 {
00502                     draw_curs (adr, ed, po, ED_END);
00503                     (*po)++;
00504                     draw_curs (adr, ed, po, ED_END);
00505                 }
00506             }
00507             else
00508             {
00509                 if (*po < strlen (texte))
00510                 {
00511                     draw_curs (adr, ed, po, ED_END);
00512                     (*po)++;
00513                     draw_curs (adr, ed, po, ED_END);
00514                 }
00515             }
00516             break;
00517         case CT_ARLF :  /* D‚j… trait‚ */
00518             break;
00519         case CT_ARRT :  /* D‚j… trait‚ */
00520             break;
00521         case SH_ARLF :
00522             if (*po > ZERO)
00523             {
00524                 draw_curs (adr, ed, po, ED_END);
00525                 *po = ZERO;
00526                 draw_curs (adr, ed, po, ED_END);
00527             }
00528             else
00529             {
00530                 pt = (ted->te_ptext);
00531                 pt = start_edit (pt);
00532                 ted->te_ptext = pt;
00533                 draw_curs (adr, ed, po, ED_END);
00534                 if (f)
00535                     draw_object (ed, index);
00536                 else
00537                     objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00538                                          adr->ob_width, adr->ob_height);
00539                 draw_curs (adr, ed, po, ED_END);
00540             }
00541             break;
00542         case SH_ARRT :
00543             if (*po < largeur)
00544             {
00545                 draw_curs (adr, ed, po, ED_END);
00546                 *po = min (largeur, (int)strlen (ted->te_ptext));
00547                 draw_curs (adr, ed, po, ED_END);
00548             }
00549             else
00550             {
00551                 pt = (ted->te_ptext);
00552                 pt = start_edit (pt);
00553                 ted->te_ptext = pt + (int)strlen (pt) - min ((int)strlen (ted->te_ptext), largeur);
00554                 draw_curs (adr, ed, po, ED_END);
00555                 if (f)
00556                     draw_object (ed, index);
00557                 else
00558                     objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00559                                          adr->ob_width, adr->ob_height);
00560                 draw_curs (adr, ed, po, ED_END);
00561             }
00562             break;
00563         case ESC :
00564             pt = (ted->te_ptext);
00565             pt = start_edit (pt);
00566             *pt = '\0';
00567             ted->te_ptext = pt;
00568             draw_curs (adr, ed, po, ED_END);
00569             *po = ZERO;
00570             if (f)
00571                 draw_object (ed, index);
00572             else
00573                 objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00574                                      adr->ob_width, adr->ob_height);
00575             draw_curs (adr, ed, po, ED_END);
00576             break;
00577         case BACKSPC :
00578             if (*po > ZERO)
00579             {
00580                 draw_curs (adr, ed, po, ED_END);
00581                 memcpy (texte + *po - 1, texte + *po, largeur - *po + 1);
00582                 (*po)--;
00583                 if (f)
00584                     draw_object (ed, index);
00585                 else
00586                     objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00587                                          adr->ob_width, adr->ob_height);
00588                 draw_curs (adr, ed, po, ED_END);
00589             }
00590             break;
00591         case DELETE :
00592             if (*po < strlen (get_text (adr, ed)))
00593             {
00594                 draw_curs (adr, ed, po, ED_END);
00595                 memcpy (texte + *po, texte + *po + 1, strlen (texte) - *po);
00596                 if (f)
00597                     draw_object (ed, index);
00598                 else
00599                     objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00600                                          adr->ob_width, adr->ob_height);
00601                 draw_curs (adr, ed, po, ED_END);
00602             }
00603             break;
00604         default :
00605             ascii = (char)(car & 0xFF);
00606             if (ascii)
00607             {
00608                 if ((adr[ed].ob_type >> 8) == B_EDIT)           /* Si ‚ditable ‚tendu */
00609                 {
00610                     if (NOT (valide (&ascii, valid, *po)))      /* Si pas bon filtrage avec pvalid */
00611                         return;                                                                 /* On se barre de suite */
00612                     pt = (ted->te_ptext);
00613                     pt = start_edit (pt);
00614                     if (*po == largeur)
00615                     {           /* Si on est au bout de l'‚ditable */
00616                         if ((int)strlen (pt) < longueur)    /* Si on n'est pas au bout du champ */
00617                         {
00618                             draw_curs (adr, ed, po, ED_END);
00619                             memcpy (ted->te_ptext + *po + 1, texte + *po, strlen (ted->te_ptext) - *po + 1);
00620                             *(ted->te_ptext + (*po)) = ascii;
00621                             (ted->te_ptext)++;
00622                             if (f)
00623                                 draw_object (ed, index);
00624                             else
00625                                 objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00626                                                      adr->ob_width, adr->ob_height);
00627                             draw_curs (adr, ed, po, ED_END);
00628                         }
00629                         else if ((int)strlen (pt) == longueur)  /* Si on est au bout du champ */
00630                         {
00631                             draw_curs (adr, ed, po, ED_END);
00632                             *(ted->te_ptext + largeur - 1) = ascii;
00633                             if (f)
00634                                 draw_object (ed, index);
00635                             else
00636                                 objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00637                                                      adr->ob_width, adr->ob_height);
00638                             draw_curs (adr, ed, po, ED_END);
00639                         }
00640                     }
00641                     else if ((int)strlen (pt) < longueur)
00642                     {           /* Si on est au bout ni de l'‚ditable, ni du champ */
00643                         draw_curs (adr, ed, po, ED_END);
00644                         memcpy (texte + *po + 1, texte + *po, strlen (texte) - *po + 1);
00645                         *(texte + (*po)) = ascii;
00646                         (*po)++;
00647                         if (f)
00648                             draw_object (ed, index);
00649                         else
00650                             objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00651                                                  adr->ob_width, adr->ob_height);
00652                         draw_curs (adr, ed, po, ED_END);
00653                     }
00654                     else
00655                     {           /* Si on est au milieu et que le champ est plein */
00656                         draw_curs (adr, ed, po, ED_END);
00657                         *(ted->te_ptext + (*po)) = ascii;
00658                         (*po)++;
00659                         if (f)
00660                             draw_object (ed, index);
00661                         else
00662                             objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00663                                                  adr->ob_width, adr->ob_height);
00664                         draw_curs (adr, ed, po, ED_END);
00665                     }
00666                 }
00667                 else            /* Si ‚ditable normal */
00668                 {
00669                     if (*po < largeur)                  /* Si on n'est pas au bout du champ */
00670                     {
00671                         if (ascii != '_')
00672                         {
00673                                 /* Il faut commencer par chercher si le caractŠre tap‚ n'est pas dans le template */
00674                             ptr = pt = strchr (tmplt, (int)'_');        /* D‚but zone de saisie du template */
00675                             i = ZERO;
00676                             while (i < *po)                         /* Sauter les caractŠres d‚j… saisis */
00677                             {
00678                                 if (pt[0] == '_')
00679                                 {
00680                                     i++;
00681                                     pt++;
00682                                 }
00683                                 else
00684                                     pt++;
00685                             }
00686                             if (pt[0] != '_')
00687                                 pt++;
00688                             p = pt;                                                                 /* Noter pointeur actuel */
00689                             pt = strchr (p, (int)ascii);                        /* Chercher le caractŠre */
00690                             if ((pt) && (*(pt + 1) == '_') && (*(pt - 1) == '_'))   /* Si on le trouve */
00691                             {
00692                                 if ((pt - ptr) < largeur)                               /* Si on n'est pas au bout */
00693                                 {
00694                                     draw_curs (adr, ed, po, ED_END);            /* Virer le curseur */
00695
00696                                     for ( ; *p != ascii ; p++)                      /* Pour chaque caractŠre */
00697                                     {
00698                                         *(texte + (*po)) = ' ';
00699                                         (*po)++;                                                        /* Augmenter la position */
00700                                     }
00701                                     *(texte + (*po)) = '\0';                            /* Terminer la chaŒne */
00702                                     if (f)
00703                                         draw_object (ed, index);                        /* Redessiner l'objet */
00704                                     else
00705                                         objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00706                                                              adr->ob_width, adr->ob_height);
00707                                     draw_curs (adr, ed, po, ED_END);            /* Remettre le curseur */
00708                                     return;                                                             /* On repart de suite */
00709                                 }
00710                             }
00711                         }
00712
00713                         if (NOT (valide (&ascii, valid, *po)))      /* Si pas bon filtrage avec pvalid */
00714                             return;                                                                 /* On se barre de suite */
00715                         if (strlen (get_text (adr, ed)) < largeur)  /* Si le champ n'est pas plein */
00716                         {
00717                             draw_curs (adr, ed, po, ED_END);
00718                             memcpy (texte + *po + 1, texte + *po, strlen (texte) - *po + 1);
00719                             *(texte + (*po)) = ascii;
00720                             (*po)++;
00721                             if (f)
00722                                 draw_object (ed, index);
00723                             else
00724                                 objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00725                                                      adr->ob_width, adr->ob_height);
00726                             draw_curs (adr, ed, po, ED_END);
00727                         }
00728                         else                        /* Si le champ est plein */
00729                         {
00730                             draw_curs (adr, ed, po, ED_END);
00731                             texte[*po] = ascii;
00732                             (*po)++;
00733                             if (f)
00734                                 draw_object (ed, index);
00735                             else
00736                                 objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00737                                                      adr->ob_width, adr->ob_height);
00738                             draw_curs (adr, ed, po, ED_END);
00739                         }
00740                     }
00741                     else if (*po == largeur)        /* Si curseur au bout du champ */
00742                     {
00743                         if (NOT (valide (&ascii, valid, *po)))      /* Si pas bon filtrage avec pvalid */
00744                             return;                                                                 /* On se barre de suite */
00745                         draw_curs (adr, ed, po, ED_END);
00746                         texte[*po - 1] = ascii;
00747                         if (f)
00748                             draw_object (ed, index);
00749                         else
00750                             objc_draw (adr, ed, MAX_DEPTH, adr->ob_x, adr->ob_y,
00751                                                  adr->ob_width, adr->ob_height);
00752                         draw_curs (adr, ed, po, ED_END);
00753                     }
00754                 }
00755             }
00756             break;
00757         }
00758     }
00759 }
00760 /* #] objc_xedit () Gestion complŠte des champs ‚ditables :             */
00761 /* #[ valide () Filtrage saisie champ ‚ditable :                                    */
00762 int valide (char *ascii, char *valid, int p)
00763 {
00764 int retour = FALSE, car;
00765 int filtre;
00766
00767     car = (int)*ascii;
00768     if (p == strlen (valid))    /* Si on est au bout du champ, */
00769         p--;                                        /* consid‚rer le dernier caractŠre de filtre. */
00770     if (p < strlen (valid))     /* Si on est dans le filtre, */
00771         filtre = (int)valid[p]; /* Consid‚rer le caractŠre correspondant. */
00772     else        /* Si on est aprŠs le filtre (possible avec ORCS), consid‚rer le */
00773         filtre = (int)valid[strlen (valid) - 1];    /* dernier caractŠre de filtre. */
00774     switch ((int) filtre)
00775     {
00776         case '9' :  /* Tous les chiffres [0-9] */
00777             if (isdigit (car))
00778                 retour = TRUE;
00779             break;
00780         case 'A' :  /* Espaces et majuscules (il faut shifter) [ ]+[A-Z] */
00781             if ((car == ' ') || (isupper (car)))
00782                 retour = TRUE;
00783             break;
00784         case 'a' :  /* Lettres et espaces [ ]+[A-Z]+[a-z] */
00785             if ((car == ' ') || (isalpha (car)) ||
00786                     ((car >= '') && (car <= 'š')))
00787                 retour = TRUE;
00788             break;
00789         case 'N' :  /* Espaces, majuscules et chiffres [ ]+[A-Z]+[0-9] */
00790             if ((car == ' ') || (isupper (car)) || isdigit (car))
00791                 retour = TRUE;
00792             break;
00793         case 'n' :  /* Espaces, lettres et chiffres [ ]+[A-Z]+[a-z]+[0-9] */
00794             if ((car == ' ') || (isalpha (car)) || isdigit (car) ||
00795                     ((car >= '') && (car <= 'š')))
00796                 retour = TRUE;
00797             break;
00798         case 'F' :  /* CaractŠres nom de fichier, plus '?', '*' et ':' */
00799             car = toupper (car);
00800             if ((isupper (car)) || (car == '_') || (car == '?') || (car == '*') || (car == ':') || (isdigit (car)))
00801                 retour = TRUE;
00802             break;
00803         case 'f' :  /* CaractŠres nom de fichier, plus ':' */
00804             car = toupper (car);
00805             if ((isupper (car)) || (car == '_') || (car == ':') || (isdigit (car)))
00806                 retour = TRUE;
00807             break;
00808         case 'P' :  /* CaractŠres de chemin (dont '\', ':'), plus '?' et, '*' */
00809             car = toupper (car);
00810             if ((isupper (car)) || (car == '_') || (car == '?') || (car == '*') || (car == ':') || (car == '\\') || (isdigit (car)))
00811                 retour = TRUE;
00812             break;
00813         case 'p' :  /* CaractŠres de chemin (dont '\', ':') */
00814             car = toupper (car);
00815             if ((isupper (car)) || (car == '_') || (car == ':') || (car == '\\') ||(isdigit (car)))
00816                 retour = TRUE;
00817             break;
00818         case 'X' :  /* Tous les caractŠres */
00819             retour = TRUE;
00820             break;
00821         /* Ajouts de BIG */
00822         case 'x' :  /* Tous les caractŠres, mis en majuscules */
00823             car = toupper (car);
00824             retour = TRUE;
00825             break;
00826         case 'H' :  /* Tous chiffres hexa [0-9]+[a-f]+[A-F] */
00827             if (isxdigit (car))
00828                 retour = TRUE;
00829             break;
00830         case 'S' :  /* Chiffre ou signe '+' ou '-' */
00831             if ((isdigit (car)) || (car == '+') || (car == '-'))
00832                 retour = TRUE;
00833             break;
00834     }
00835     *ascii = (char)car;
00836     return retour;
00837 }
00838 /* #] valide () Filtrage saisie champ ‚ditable :                                    */
00839 /* #[ start_edit () Indique ptr sur d‚but chaŒne ‚dit ‚tendu :      */
00840 char *start_edit (char *pt)
00841 {
00842     while (*(pt - 1) != '\0')
00843         pt--;
00844     return pt;
00845 }
00846 /* #] start_edit () Indique ptr sur d‚but chaŒne ‚dit ‚tendu :      */
00847 /* #[ draw_curs () Trace le curseur d'un champ ‚ditable :                   */
00848 void draw_curs (OBJECT *adr, int ed, int *po, int action)
00849 {
00850 int hcur, pxy[4], dummy, x, y, w, h, delta, i;
00851 char *tmplt, *ptr, *valid;
00852 TEDINFO *ted;
00853
00854     if (ed <= ZERO) /* S'il n'y a pas d'‚ditable */
00855         return;             /* on sort de suite */
00856
00857     ted = adr[ed].ob_spec.tedinfo;      /* Adresse TEDINFO */
00858     tmplt = (ted->te_ptmplt);                   /* Texte template */
00859     valid = (ted->te_pvalid);                   /* Texte valid */
00860     if (ted->te_font == IBM)
00861         vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);
00862     else
00863         vst_height (work_display.handle, HMINUS, &dummy, &dummy, &w, &h);
00864     hcur = h + 4;
00865     vsl_color (work_display.handle, BLACK);
00866     vsl_width (work_display.handle, 1);
00867     vsl_ends (work_display.handle, SQUARE, SQUARE);
00868     vsl_type (work_display.handle, SOLID);
00869     vswr_mode (work_display.handle, MD_XOR);        /* Trac‚ en mode Xor */
00870
00871     objc_offset (adr, ed, &x, &y);  /* Coordonn‚es ‚ditable */
00872     ptr = strchr (tmplt, (int)'_'); /* 1ø occurence de '_' */
00873     x += (int)((ptr - tmplt) * w);              /* Se placer l… */
00874         /* Diff‚rence de largeur entre l'objet et le template */
00875     delta = adr[ed].ob_width - ((int)strlen (tmplt) * w);
00876     switch (ted->te_just)               /* Correction selon justif */
00877     {
00878     case TE_RIGHT :         /* A droite */
00879         x += delta;
00880         break;
00881     case TE_CNTR :          /* Centr‚ */
00882         x += (delta / 2);
00883         break;
00884     }
00885
00886     pxy[1] = y + ((adr[ed].ob_height - h) / 2) - 2;
00887     pxy[3] = pxy[1] + hcur;
00888     if (action == ED_INIT)
00889         *po = (int)strlen (ted->te_ptext);
00890
00891     if (NOT ((adr[ed].ob_type >> 8) == B_EDIT))
00892     {               /* Balayer le template depuis le d‚but des '_' */
00893         for (i = ZERO ; (i <= (*po)) && (i < strlen (valid)) && (ptr[0] != '\0') ; ptr++)
00894         {
00895             if (ptr[0] != '_')      /* Si diff‚rent de '_' */
00896                 x += w;                         /* Ajouter la largeur d'un caractŠre */
00897             else                                    /* Sinon */
00898                 i++;                                /* Compter un caractŠre */
00899         }
00900     }
00901     pxy[0] = x + (w * (*po));
00902     pxy[2] = pxy[0];
00903
00904     v_hide_c (work_display.handle);
00905     v_pline (work_display.handle, 2, pxy);
00906     v_show_c (work_display.handle, TRUE);
00907 }
00908 /* #] draw_curs () Trace le curseur d'un champ ‚ditable :                   */
00909 /* #[ copy () Copier un champ ‚ditable :                                                    */
00910 void copy (OBJECT *adr, int ed)
00911 {
00912 char chaine[256];
00913
00914     if (buffer)             /* S'il y a d‚j… un buffer */
00915         free (buffer);  /* Le lib‚rer */
00916     strcpy (chaine, get_text (adr, ed));
00917     buffer = malloc (strlen (chaine) + 1);
00918     strcpy (buffer, chaine);
00919 }
00920 /* #] copy () Copier un champ ‚ditable :                                                    */
00921 /* #[ cut () Couper un champ ‚ditable :                                                     */
00922 void cut (OBJECT *adr, int ed)
00923 {
00924 char chaine[256];
00925
00926     if (buffer)             /* S'il y a d‚j… un buffer */
00927         free (buffer);  /* Le lib‚rer */
00928     strcpy (chaine, get_text (adr, ed));
00929     buffer = malloc (strlen (chaine) + 1);
00930     strcpy (buffer, chaine);
00931     key = ESC;
00932     kbd = ZERO;
00933 }
00934 /* #] cut () Couper un champ ‚ditable :                                                     */
00935 /* #[ paste () Coller un champ ‚ditable :                                                   */
00936 void paste (OBJECT *adr, int ed)
00937 {
00938 int lchamp, lchaine;
00939 char chaine[256];
00940
00941     if (NOT buffer)             /* S'il n'y a pas de buffer */
00942         return;                         /* Sortir de suite */
00943     set_text (adr, ed, "");     /* Vider le champ */
00944     if ((adr[ed].ob_type == G_FTEXT) || (adr[ed].ob_type == G_FBOXTEXT))    /* Si ‚ditable normal */
00945         lchamp = (int)strlen (adr[ed].ob_spec.tedinfo->te_pvalid);  /* Longueur maxi du champ */
00946     else if ((adr[ed].ob_type >> 8) == B_EDIT)                                                      /* Si ‚ditable ‚tendu */
00947         lchamp = adr[ed].ob_state >> 8;                                                         /* Longueur totale du champ */
00948     lchaine = (int)strlen (buffer);     /* Longueur du buffer */
00949
00950     if (lchaine <= lchamp)                  /* S'il y a la place pour le texte */
00951         set_text (adr, ed, buffer);         /* Copier texte */
00952     else                                                        /* Si champ trop court */
00953     {
00954         strcpy (chaine, buffer);
00955         chaine[lchamp] = '\0';                  /* Tronquer le texte */
00956         set_text (adr, ed, chaine);         /* Le copier */
00957     }
00958 }
00959 /* #] paste () Coller un champ ‚ditable :                                                   */
00960
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2EDIT.H Source File

BIG2EDIT.H

Go to the documentation of this file.
00001 /*  BIG2EDIT.H */
00002
00003 /* #[ Variables globales : */
00004 extern int edit;
00005 extern int object;
00006 extern int kbd;
00007 extern int key;
00008 extern t_display work_display;
00009 extern char *buffer;
00010 /* #] Variables globales : */
00011 /* #[ Prototypage des fonctions : */
00012 int     exist_edit (OBJECT *adr);
00013 void    empty_edit (OBJECT *adr);
00014 int     pos_curs (OBJECT *adr, int ed, int mx, int f, int index, int po);
00015 int     prev (OBJECT *adr, int ob);
00016 int     next (OBJECT *adr, int ob);
00017 void    first (OBJECT *adr, int *editable, int *position);
00018 void    last (OBJECT *adr, int *editable, int *position);
00019 int     next_word (OBJECT *adr, int ob, int posi);
00020 int     prev_word (OBJECT *adr, int ob, int posi);
00021 int     valide (char *ascii, char *valid, int p);
00022 char    *start_edit (char *pt);
00023 void    draw_curs (OBJECT *adr, int ed, int *po, int action);
00024 void    copy (OBJECT *adr, int ed);
00025 void    cut (OBJECT *adr, int ed);
00026 void    paste (OBJECT *adr, int ed);
00027 /* #] Prototypage des fonctions : */
00028
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2EVTW.C Source File

BIG2EVTW.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS DE GESTION DES EVENEMENTS FENETRES
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2EVTW.H"
00007 #include "BIG2EDIT.H"
00008 #include "BIG2WIND.H"
00009 #include "BIG2WINB.H"
00010 GRECT zclip;        /* Zone de clipping … redessiner si redraw */
00011 /****** Fonctions d'ev‚nements fenˆtre ****************************/
00012 /* #[ wm_arrow () GŠre message de flˆche ou ascenseur fenˆtre :     */
00013 void wm_arrow (void)
00014 {
00015 int index, message;
00016
00017     index = find_index (buf[3]);
00018     if (index > BLANK)
00019     {
00020         message = buf[4];
00021
00022         switch (message)
00023         {
00024         case WA_UPPAGE :
00025             (*win[index].w_uppage)();
00026             break;
00027         case WA_DNPAGE :
00028             (*win[index].w_dnpage)();
00029             break;
00030         case WA_UPLINE :
00031             (*win[index].w_upline)();
00032             break;
00033         case WA_DNLINE :
00034             (*win[index].w_dnline)();
00035             break;
00036         case WA_LFPAGE :
00037             (*win[index].w_lfpage)();
00038             break;
00039         case WA_RTPAGE :
00040             (*win[index].w_rtpage)();
00041             break;
00042         case WA_LFLINE :
00043             (*win[index].w_lfline)();
00044             break;
00045         case WA_RTLINE :
00046             (*win[index].w_rtline)();
00047             break;
00048         }
00049     }
00050 }
00051 /* #] wm_arrow () GŠre message de flˆche ou ascenseur fenˆtre :     */
00052 /* #[ redraw () Redraw :                                                                                    */
00053 void redraw (void)
00054 {
00055 GRECT r, rd, z;
00056 MFDB nul = {0};
00057 int index, pxy[8], xw, yw, ww, hw, dummy, color[2] = {BLACK, WHITE};
00058
00059     index = find_index (buf[3]);
00060     if (index == BLANK)
00061         return;
00062
00063     empty (MU_KEYBD);
00064     rd.g_x = buf[4];
00065     rd.g_y = buf[5];
00066     rd.g_w = buf[6];
00067     rd.g_h = buf[7];
00068
00069     v_hide_c (work_display.handle);
00070     graf_mkstate (&dummy, &dummy, &mk, &dummy); /* Bouton souris */
00071     if (! mk)
00072         wind_update (BEG_UPDATE);   /* Bloquer les fonctions de la souris */
00073
00074     zone_work (index, &xw, &yw, &ww, &hw);
00075     zone_work (index, &z.g_x, &z.g_y, &z.g_w, &z.g_h);
00076         /* Demande les coord. et dimensions du 1ø rectangle de la liste */
00077     wind_get (buf[3], WF_FIRSTXYWH, &r.g_x, &r.g_y, &r.g_w, &r.g_h);
00078     while (r.g_w && r.g_h)          /* Tant qu'il y a largeur ou hauteur... */
00079     {
00080         if (rc_intersect (&rd, &r))
00081         {
00082             if (NOT ((win[index].w_type & 0xFF) == WTYP_PICT))
00083                 objc_draw (win[index].w_fen, ROOT, MAX_DEPTH, r.g_x, r.g_y, r.g_w, r.g_h);
00084             else
00085             {
00086                 if (NOT (win[index].w_cont.w_img.fd_addr))
00087                     objc_draw (win[index].w_fen, ROOT, MAX_DEPTH, r.g_x, r.g_y, r.g_w, r.g_h);
00088                 else
00089                     draw_wind (index, &r);
00090             }
00091
00092             if ((win[index].w_icon == index) && (win[index].w_redicn))
00093             {
00094                 clipp (TRUE, &r);
00095                 (*win[index].w_redicn)();
00096                 clipp (FALSE, &r);
00097             }
00098             else
00099             {
00100                 if (win[index].w_type & WTYP_MENU)
00101                     objc_draw (win[index].w_bar, WM_BOXMENU, MAX_DEPTH,
00102                                          r.g_x, r.g_y, r.g_w, r.g_h);
00103                 else if (win[index].w_type & WTYP_TOOL)
00104                     objc_draw (win[index].w_bar, ROOT, MAX_DEPTH,
00105                                          r.g_x, r.g_y, r.g_w, r.g_h);
00106
00107                 rc_intersect (&z, &r);
00108                 if ((r.g_w > ZERO) && (r.g_h > ZERO))
00109                 {
00110                     if ((win[index].w_type & 0xFF) == WTYP_FORM)
00111                     {
00112                         draw_curs (win[index].w_cont.w_form.w_tree,
00113                                              win[index].w_cont.w_form.w_edit,
00114                                              &win[index].w_cont.w_form.w_pos, ED_END);
00115                         objc_draw (win[index].w_cont.w_form.w_tree, ROOT, MAX_DEPTH,
00116                                              r.g_x, r.g_y, r.g_w, r.g_h);
00117                         draw_curs (win[index].w_cont.w_form.w_tree,
00118                                              win[index].w_cont.w_form.w_edit,
00119                                              &win[index].w_cont.w_form.w_pos, ED_END);
00120                     }
00121                     else if ((win[index].w_type & 0xFF) == WTYP_PICT)
00122                     {
00123                         if (win[index].w_cont.w_img.fd_addr)
00124                         {
00125                             fill_tab (pxy, 8,
00126                                                 (int)win[index].w_col + (r.g_x - xw),
00127                                                 (int)win[index].w_lin + (r.g_y - yw),
00128                                                 (int)win[index].w_col + (r.g_x - xw) + r.g_w - 1,
00129                                                 (int)win[index].w_lin + (r.g_y - yw) + r.g_h - 1,
00130                                                 r.g_x, r.g_y,
00131                                                 r.g_x + r.g_w - 1,
00132                                                 r.g_y + r.g_h - 1);
00133                             if (win[index].w_cont.w_img.fd_nplanes == 1)
00134                                 vrt_cpyfm (work_display.handle, 1, pxy, &win[index].w_cont.w_img, &nul, color);
00135                             else
00136                                 vro_cpyfm (work_display.handle, S_ONLY, pxy, &win[index].w_cont.w_img, &nul);
00137                         }
00138                     }
00139                     else
00140                     {
00141                         if ((r.g_w > ZERO) && (r.g_h > ZERO))
00142                         {
00143                             zclip.g_x = r.g_x;
00144                             zclip.g_y = r.g_y;
00145                             zclip.g_w = r.g_w;
00146                             zclip.g_h = r.g_h;
00147                             clipp (TRUE, &r);
00148                             (*win[index].w_redraw)();
00149                             clipp (FALSE, &r);
00150                         }
00151                     }
00152                 }
00153         }
00154         }
00155             /* Rectangle suivant */
00156         wind_get (buf[3], WF_NEXTXYWH, &r.g_x, &r.g_y, &r.g_w, &r.g_h);
00157     }
00158     if (! mk)
00159         wind_update (END_UPDATE);   /* D‚bloquer les fonctions de la souris */
00160     v_show_c (work_display.handle, TRUE);
00161 }
00162 /* #] redraw () Redraw :                                                                                    */
00163 /* #[ topped () Mettre une fenˆtre en premier plan :                            */
00164 void topped (void)
00165 {
00166 int index;
00167
00168     index = find_index (buf[3]);                            /* Chercher l'index BIG */
00169     if (index == BLANK)
00170         return;
00171
00172     wind_set (win[index].w_hg, WF_TOP);
00173     if (((win[index].w_type & 0xFF) == WTYP_PICT)
00174         || ((win[index].w_type & 0xFF) == WTYP_FORM))
00175         set_palette (index);
00176     else
00177         set_palette (BLANK);
00178 }
00179 /* #] topped () Mettre une fenˆtre en premier plan :                            */
00180 /* #[ closed () Fermer une fenˆtre :                                                            */
00204 void closed (void)
00205 {
00206 int index, top, dummy;
00207
00208     index = find_index (buf[3]);                            /* Chercher l'index BIG */
00209     if (index == BLANK)
00210         return;
00211     if (NOT (win[index].w_attr & CLOSER))
00212         return ;
00213     if (buf[0] != AC_CLOSE)                     /* Si AC_CLOSE : d‚j… ferm‚e */
00214     {
00215         if (win[index].w_icon > BLANK)                  /* Si ic“nifi‚e */
00216             uniconise (index);
00217         wind_close (buf[3]);                                        /* Fermer la fenˆtre */
00218         wind_delete (buf[3]);                                       /* D‚truire la fenˆtre */
00219     }
00220     win[index].w_hg = ZERO;                                     /* Enregistrer la fermeture */
00221     win[index].w_flags &= ~WFFULL;                      /* Annuler flag pleine ouverture */
00222     if (win[index].w_type == WTYP_FORM)             /* Si fenˆtre formulaire */
00223     {
00224         if (buf[0] != BEV_WFORM)
00225         {
00226             res_rsc (win[index].w_cont.w_form.w_tree,
00227                              &win[index].w_cont.w_form.w_bak);  /* Restaurer ‚tat form. */
00228             free (win[index].w_cont.w_form.w_bak);          /* Lib‚rer la m‚moire ‚tat */
00229         }
00230     }
00231     if (win[index].w_type & WTYP_MENU)                  /* Si fenˆtre avec menu */
00232         free (win[index].w_bar);                                    /* Lib‚rer la m‚moire menu */
00233     else if (win[index].w_type & WTYP_TOOL)         /* Si fenˆtre toolbar */
00234         win[index].w_bar = (OBJECT *)ZERO;              /* Annuler pointeur */
00235
00236     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00237     if (top)
00238     {
00239         index = find_index (top);
00240         if (index > BLANK)
00241         {
00242             if (((win[index].w_type & 0xFF) == WTYP_PICT)
00243             || ((win[index].w_type & 0xFF) == WTYP_FORM))
00244                 set_palette (index);
00245             else
00246                 set_palette (BLANK);
00247         }
00248         else
00249             set_palette (BLANK);
00250     }
00251     else
00252         set_palette (BLANK);
00253 }
00254 /* #] closed () Fermer une fenˆtre :                                                            */
00255 /* #[ fulled () Fenˆtre plein pot :                                                             */
00256 void    fulled (void)
00257 {
00258 int index, oldx, oldy, oldw, oldh, x, y, w, h, xb, yb, xw, yw, ww, hw;
00259
00260     index = find_index (buf[3]);
00261     if (index == BLANK)
00262         return;
00263     if (NOT (win[index].w_attr & FULLER))
00264         return ;
00265
00266     oldx = win[index].w_fen->ob_x;
00267     oldy = win[index].w_fen->ob_y;
00268     oldw = win[index].w_fen->ob_width;
00269     oldh = win[index].w_fen->ob_height;
00270     if (win[index].w_flags & WFFULL)
00271     {
00272         x = win[index].w_old.w_coord.g_x;
00273         y = win[index].w_old.w_coord.g_y;
00274         w = win[index].w_old.w_coord.g_w;
00275         h = win[index].w_old.w_coord.g_h;
00276         win[index].w_fen->ob_x = x;
00277         win[index].w_fen->ob_y = y;
00278         graf_mouse (ARROW, ZERO);
00279     }
00280     else
00281     {
00282         win[index].w_old.w_coord.g_x = win[index].w_curr.g_x;
00283         win[index].w_old.w_coord.g_y = win[index].w_curr.g_y;
00284         win[index].w_old.w_coord.g_w = win[index].w_curr.g_w;
00285         win[index].w_old.w_coord.g_h = win[index].w_curr.g_h;
00286         x = win[index].w_fen->ob_x = bureau.xd;
00287         y = win[index].w_fen->ob_y = bureau.yd;
00288         w = min (bureau.wd, win[index].w_wmaxi);
00289         h = min (bureau.hd, win[index].w_hmaxi);
00290         if ((win[index].w_type & 0xFF) == WTYP_PICT)
00291         {       /* Si fenˆtre image : pas plus grande que la taille totale */
00292             bwind_calc (WC_WORK, win[index].w_attr, BLANK, win[index].w_bar,
00293                                     x, y, w, h, &xw, &yw, &ww, &hw);
00294             if (ww > win[index].w_wtot)
00295                 ww = (int)win[index].w_wtot;
00296             if (hw > win[index].w_htot)
00297                 hw = (int)win[index].w_htot;
00298             if ((win[index].w_type & WTYP_TOOL) || (win[index].w_type & WTYP_MENU))
00299                 hw++;
00300             bwind_calc (WC_BORDER, win[index].w_attr, BLANK, win[index].w_bar,
00301                                     xw, yw, ww, hw, &x, &y, &w, &h);
00302         }
00303         if (win[index].w_flags & WFCALAG)
00304         {
00305             bwind_calc (WC_WORK, win[index].w_attr, BLANK, win[index].w_bar,
00306                                     x, y, w, h, &xw, &yw, &ww, &hw);
00307             ww = ww / win[index].w_wunit * win[index].w_wunit;
00308             hw = hw / win[index].w_hunit * win[index].w_hunit;
00309             bwind_calc (WC_BORDER, win[index].w_attr, BLANK, win[index].w_bar,
00310                                     xw, yw, ww, hw, &x, &y, &w, &h);
00311         }
00312     }
00313     resize (index, w - oldw, h - oldh);
00314     win[index].w_flags ^= WFFULL;
00315     wind_set (win[index].w_hg, WF_CURRXYWH, x, y, w, h);
00316     wind_get (win[index].w_hg, WF_CURRXYWH,
00317                         &win[index].w_curr.g_x, &win[index].w_curr.g_y,
00318                         &win[index].w_curr.g_w, &win[index].w_curr.g_h);
00319     win[index].w_fen->ob_width = win[index].w_curr.g_w;
00320     win[index].w_fen->ob_height = win[index].w_curr.g_h;
00321     height_sliders (index, FALSE);
00322     if (((oldx == win[index].w_curr.g_x) && (oldy == win[index].w_curr.g_y)) &&
00323             ((oldw > win[index].w_curr.g_w) || (oldh > win[index].w_curr.g_h)))
00324         print_wind (index);
00325
00326     objc_offset (win[index].w_fen, BW_BARRE, &xb, &yb);
00327     if ((win[index].w_type & WTYP_MENU) || (win[index].w_type & WTYP_TOOL))
00328     {
00329         win[index].w_bar->ob_x = xb;
00330         win[index].w_bar->ob_y = yb;
00331     }
00332     wind_mouse ();
00333 }
00334 /* #] fulled () Fenˆtre plein pot :                                                             */
00335 /* #[ uppage () Page vers le haut fenˆtre :                                             */
00336 void uppage (void)
00337 {
00338 int index, xw, yw, ww, hw;
00339
00340     index = find_index (buf[3]);
00341     if (index == BLANK)
00342         return;
00343     if (NOT (win[index].w_attr & VSLIDE))
00344         return;
00345     zone_work (index, &xw, &yw, &ww, &hw);
00346     if (win[index].w_lin > ZERO)    /* Si on n'est pas d‚j… au d‚but */
00347     {
00348         win[index].w_lin = max (win[index].w_lin - hw, ZERO);
00349         if (win[index].w_lin < ZERO)
00350             win[index].w_lin = ZERO;
00351         if ((win[index].w_type & 0xFF) == WTYP_NORM)
00352             win[index].w_lin = ((win[index].w_lin + (win[index].w_hunit / 2)) / win[index].w_hunit) * win[index].w_hunit;
00353         if ((win[index].w_type & 0xFF) == WTYP_FORM)
00354             win[index].w_cont.w_form.w_tree->ob_y = yw - (int)win[index].w_lin;
00355         print_page (index);
00356         posi_vert (index, TRUE);
00357     }
00358 }
00359 /* #] uppage () Page vers le haut fenˆtre :                                             */
00360 /* #[ dnpage () Page vers le bas fenˆtre :                                              */
00361 void dnpage (void)
00362 {
00363 int index, xw, yw, ww, hw;
00364
00365     index = find_index (buf[3]);
00366     if (index == BLANK)
00367         return;
00368     if (NOT (win[index].w_attr & VSLIDE))
00369         return;
00370     zone_work (index, &xw, &yw, &ww, &hw);
00371     if ((win[index].w_lin + hw) < win[index].w_htot)    /* Si pas d‚j… … la fin */
00372     {
00373         win[index].w_lin = min (win[index].w_lin + hw, win[index].w_htot - hw);
00374         if ((win[index].w_type & 0xFF) == WTYP_NORM)
00375         {
00376             win[index].w_lin = ((win[index].w_lin + (win[index].w_hunit / 2)) / win[index].w_hunit) * win[index].w_hunit;
00377             if (win[index].w_lin + hw + win[index].w_hunit >= win[index].w_htot)
00378                 win[index].w_lin += win[index].w_hunit;
00379         }
00380         if ((win[index].w_type & 0xFF) == WTYP_FORM)
00381             win[index].w_cont.w_form.w_tree->ob_y = yw - (int)win[index].w_lin;
00382         print_page (index);
00383         posi_vert (index, TRUE);
00384     }
00385 }
00386 /* #] dnpage () Page vers le bas fenˆtre :                                              */
00387 /* #[ upline () Ligne vers le haut fenˆtre :                                            */
00388 void upline (void)
00389 {
00390 int index, top, pxy[8], xw, yw, ww, hw, dummy, decal;
00391 MFDB ecr = {0};
00392
00393     index = find_index (buf[3]);
00394     if (index == BLANK)
00395         return;
00396     if (NOT (win[index].w_attr & UPARROW))
00397         return;
00398     zone_work (index, &xw, &yw, &ww, &hw);
00399     if (hw <= win[index].w_hunit)
00400     {
00401         uppage ();
00402         return;
00403     }
00404     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00405     if (win[index].w_lin > ZERO)    /* Si on n'est pas d‚j… au d‚but */
00406     {
00407         if ((win[index].w_type & 0xFF) != WTYP_NORM)
00408             decal = (int)min ((long)win[index].w_hunit, win[index].w_lin);
00409         else
00410             decal = win[index].w_hunit;
00411         if (xw < bureau.xd)
00412         {
00413             ww -= (bureau.xd - xw);
00414             xw = bureau.xd;
00415         }
00416         ww = min (ww, bureau.xd + bureau.wd - xw);
00417         hw = min (hw, bureau.yd + bureau.hd - yw);
00418
00419         if ((win[index].w_type & 0xFF) == WTYP_PICT)
00420         {
00421             win[index].w_lin -= decal;
00422             print_page (index);
00423             posi_vert (index, TRUE);
00424             return;
00425         }
00426
00427         if (win[index].w_hg == top)
00428         {
00429             fill_tab (pxy, 8,
00430                                 xw, yw + win[index].w_vprot,
00431                                 xw + ww - 1, yw + hw - decal - 1,
00432                                 xw, yw + win[index].w_vprot + decal,
00433                                 xw + ww - 1, yw + hw - 1);
00434             v_hide_c (work_display.handle);
00435             vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecr, &ecr);
00436             v_show_c (work_display.handle, TRUE);
00437             win[index].w_lin -= decal;
00438             if (win[index].w_lin < ZERO)
00439                 win[index].w_lin = ZERO;
00440             if ((win[index].w_type & 0xFF) == WTYP_FORM)
00441                 win[index].w_cont.w_form.w_tree->ob_y = yw - (int)win[index].w_lin;
00442             print_line (FALSE, index);
00443         }
00444         else
00445         {
00446             win[index].w_lin -= decal;
00447             if (win[index].w_lin < ZERO)
00448                 win[index].w_lin = ZERO;
00449             if ((win[index].w_type & 0xFF) == WTYP_FORM)
00450                 win[index].w_cont.w_form.w_tree->ob_y = yw - (int)win[index].w_lin;
00451             print_page (index);
00452         }
00453         posi_vert (index, TRUE);
00454     }
00455 }
00456 /* #] upline () Ligne vers le haut fenˆtre :                                            */
00457 /* #[ dnline () Ligne vers le bas fenˆtre :                                             */
00458 void dnline (void)
00459 {
00460 int index, top, pxy[8], xw, yw, ww, hw, dummy, decal;
00461 MFDB ecr = {0};
00462
00463     index = find_index (buf[3]);
00464     if (index == BLANK)
00465         return;
00466     if (NOT (win[index].w_attr & DNARROW))
00467         return;
00468     zone_work (index, &xw, &yw, &ww, &hw);
00469     if (hw <= win[index].w_hunit)
00470     {
00471         dnpage ();
00472         return;
00473     }
00474     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00475     if ((win[index].w_lin + hw) < win[index].w_htot)    /* Si pas d‚j… … la fin */
00476     {
00477         if ((win[index].w_type & 0xFF) != WTYP_NORM)
00478             decal = (int)min ((long)win[index].w_hunit,
00479                                                 win[index].w_htot - (win[index].w_lin + (long)hw));
00480         else
00481             decal = win[index].w_hunit;
00482         if (xw < bureau.xd)
00483         {
00484             ww -= (bureau.xd - xw);
00485             xw = bureau.xd;
00486         }
00487         ww = min (ww, bureau.xd + bureau.wd - xw);
00488         hw = min (hw, bureau.yd + bureau.hd - yw);
00489
00490         if ((win[index].w_type & 0xFF) == WTYP_PICT)
00491         {
00492             win[index].w_lin += decal;
00493             print_page (index);
00494             posi_vert (index, TRUE);
00495             return;
00496         }
00497
00498         if (win[index].w_hg == top)
00499         {
00500             fill_tab (pxy, 8,
00501                                 xw, yw + win[index].w_vprot + decal,
00502                                 xw + ww - 1, yw + hw - 1,
00503                                 xw, yw + win[index].w_vprot ,
00504                                 xw + ww - 1, yw + hw - 1 - decal);
00505             v_hide_c (work_display.handle);
00506             vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecr, &ecr);
00507             v_show_c (work_display.handle, TRUE);
00508             win[index].w_lin += decal;
00509             if ((win[index].w_type & 0xFF) != WTYP_NORM)
00510                 if (win[index].w_lin + hw > win[index].w_htot)
00511                     win[index].w_lin = win[index].w_htot - hw;
00512             if ((win[index].w_type & 0xFF) == WTYP_FORM)
00513                 win[index].w_cont.w_form.w_tree->ob_y = yw - (int)win[index].w_lin;
00514             print_line (TRUE, index);
00515         }
00516         else
00517         {
00518             win[index].w_lin += decal;
00519             if ((win[index].w_type & 0xFF) != WTYP_NORM)
00520                 if (win[index].w_lin + hw > win[index].w_htot)
00521                     win[index].w_lin = win[index].w_htot - hw;
00522             if ((win[index].w_type & 0xFF) == WTYP_FORM)
00523                 win[index].w_cont.w_form.w_tree->ob_y = yw - (int)win[index].w_lin;
00524             print_page (index);
00525         }
00526         posi_vert (index, TRUE);
00527     }
00528 }
00529 /* #] dnline () Ligne vers le bas fenˆtre :                                             */
00530 /* #[ lfpage () Page vers la gauche fenˆtre :                                           */
00531 void lfpage (void)
00532 {
00533 int index, xw, yw, ww, hw;
00534
00535     index = find_index (buf[3]);
00536     if (index == BLANK)
00537         return;
00538     if (NOT (win[index].w_attr & HSLIDE))
00539         return;
00540     zone_work (index, &xw, &yw, &ww, &hw);
00541     if (win[index].w_col > ZERO)    /* Si on n'est pas d‚j… au d‚but */
00542     {
00543         win[index].w_col = max (win[index].w_col - ww, ZERO);
00544         if (win[index].w_col < ZERO)
00545             win[index].w_col = ZERO;
00546         if ((win[index].w_type & 0xFF) == WTYP_NORM)
00547             win[index].w_col = ((win[index].w_col + (win[index].w_wunit / 2)) / win[index].w_wunit) * win[index].w_wunit;
00548         if ((win[index].w_type & 0xFF) == WTYP_FORM)
00549             win[index].w_cont.w_form.w_tree->ob_x = xw - (int)win[index].w_col;
00550         print_page (index);
00551         posi_hori (index, TRUE);
00552     }
00553 }
00554 /* #] lfpage () Page vers la gauche fenˆtre :                                           */
00555 /* #[ rtpage () Page vers la droite fenˆtre :                                           */
00556 void rtpage (void)
00557 {
00558 int index, xw, yw, ww, hw;
00559
00560     index = find_index (buf[3]);
00561     if (index == BLANK)
00562         return;
00563     if (NOT (win[index].w_attr & HSLIDE))
00564         return;
00565     zone_work (index, &xw, &yw, &ww, &hw);
00566     if ((win[index].w_col + ww) < win[index].w_wtot)    /* Si pas d‚j… … la fin */
00567     {
00568         win[index].w_col = min (win[index].w_col + ww, win[index].w_wtot - ww);
00569         if ((win[index].w_type & 0xFF) != WTYP_NORM)
00570             if (win[index].w_col + ww > win[index].w_wtot)
00571                 win[index].w_col = win[index].w_wtot - ww;
00572         if ((win[index].w_type & 0xFF) == WTYP_NORM)
00573         {
00574             win[index].w_col = ((win[index].w_col + (win[index].w_wunit / 2)) / win[index].w_wunit) * win[index].w_wunit;
00575             if (win[index].w_col + ww + win[index].w_wunit >= win[index].w_wtot)
00576                 win[index].w_col += win[index].w_wunit;
00577         }
00578         if ((win[index].w_type & 0xFF) == WTYP_FORM)
00579             win[index].w_cont.w_form.w_tree->ob_x = xw - (int)win[index].w_col;
00580         print_page (index);
00581         posi_hori (index, TRUE);
00582     }
00583 }
00584 /* #] rtpage () Page vers la droite fenˆtre :                                           */
00585 /* #[ lfline () Ligne vers la gauche fenˆtre formulaire :                   */
00586 void lfline (void)
00587 {
00588 int index, top, pxy[8], xw, yw, ww, hw, dummy, decal, oldx;
00589 MFDB ecr = {0};
00590
00591     index = find_index (buf[3]);
00592     if (index == BLANK)
00593         return;
00594     if (NOT (win[index].w_attr & LFARROW))
00595         return;
00596     zone_work (index, &xw, &yw, &ww, &hw);
00597     oldx = xw;
00598     if (ww <= win[index].w_wunit)
00599     {
00600         lfpage ();
00601         return;
00602     }
00603     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00604     if (win[index].w_col > ZERO)    /* Si on n'est pas d‚j… au d‚but */
00605     {
00606         if ((win[index].w_type & 0xFF) != WTYP_NORM)
00607             decal = (int)min ((long)win[index].w_wunit, win[index].w_col);
00608         else
00609             decal = win[index].w_wunit;
00610         if (xw < bureau.xd)
00611         {
00612             ww -= (bureau.xd - xw);
00613             xw = bureau.xd;
00614         }
00615         ww = min (ww, bureau.xd + bureau.wd - xw);
00616         hw = min (hw, bureau.yd + bureau.hd - yw);
00617
00618         if ((win[index].w_type & 0xFF) == WTYP_PICT)
00619         {
00620             win[index].w_col -= decal;
00621             print_page (index);
00622             posi_hori (index, TRUE);
00623             return;
00624         }
00625
00626         if (win[index].w_hg == top)
00627         {
00628             fill_tab (pxy, 8,
00629                                 xw + win[index].w_hprot, yw,
00630                                 xw + ww - 1 - decal, yw + hw - 1,
00631                                 xw + win[index].w_hprot + decal, yw,
00632                                 xw + ww - 1, yw + hw - 1);
00633             v_hide_c (work_display.handle);
00634             vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecr, &ecr);
00635             v_show_c (work_display.handle, TRUE);
00636             win[index].w_col -= decal;
00637             if (win[index].w_col < ZERO)
00638                 win[index].w_col = ZERO;
00639             if ((win[index].w_type & 0xFF) == WTYP_FORM)
00640                 win[index].w_cont.w_form.w_tree->ob_x = oldx - (int)win[index].w_col;
00641             print_colum (FALSE, index);
00642         }
00643         else
00644         {
00645             win[index].w_col -= decal;
00646             if (win[index].w_col < ZERO)
00647                 win[index].w_col = ZERO;
00648             if ((win[index].w_type & 0xFF) == WTYP_FORM)
00649                 win[index].w_cont.w_form.w_tree->ob_x = oldx - (int)win[index].w_col;
00650             print_page (index);
00651         }
00652         posi_hori (index, TRUE);
00653     }
00654 }
00655 /* #] lfline () Ligne vers la gauche fenˆtre formulaire :                   */
00656 /* #[ rtline () Ligne vers la droite fenˆtre formulaire :                   */
00657 void rtline (void)
00658 {
00659 int index, top, pxy[8], xw, yw, ww, hw, dummy, decal, oldx;
00660 MFDB ecr = {0};
00661
00662     index = find_index (buf[3]);
00663     if (index == BLANK)
00664         return;
00665     if (NOT (win[index].w_attr & RTARROW))
00666         return;
00667     zone_work (index, &xw, &yw, &ww, &hw);
00668     oldx = xw;
00669     if (ww <= win[index].w_wunit)
00670     {
00671         rtpage ();
00672         return;
00673     }
00674     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00675     if ((win[index].w_col + ww) < win[index].w_wtot)    /* Si pas d‚j… … la fin */
00676     {
00677         if ((win[index].w_type & 0xFF) != WTYP_NORM)
00678             decal = (int)min ((long)win[index].w_wunit,
00679                                                 win[index].w_wtot - (win[index].w_col + (long)ww));
00680         else
00681             decal = win[index].w_wunit;
00682         if (xw < bureau.xd)
00683         {
00684             ww -= (bureau.xd - xw);
00685             xw = bureau.xd;
00686         }
00687         ww = min (ww, bureau.xd + bureau.wd - xw);
00688         hw = min (hw, bureau.yd + bureau.hd - yw);
00689
00690         if ((win[index].w_type & 0xFF) == WTYP_PICT)
00691         {
00692             win[index].w_col += decal;
00693             print_page (index);
00694             posi_hori (index, TRUE);
00695             return;
00696         }
00697
00698         if (win[index].w_hg == top)
00699         {
00700             fill_tab (pxy, 8,
00701                                 xw + win[index].w_hprot + decal, yw,
00702                                 xw + ww - 1, yw + hw - 1,
00703                                 xw + win[index].w_hprot, yw,
00704                                 xw + ww - 1 - decal, yw + hw - 1);
00705             v_hide_c (work_display.handle);
00706             vro_cpyfm (work_display.handle, 3, pxy, &ecr, &ecr);
00707             v_show_c (work_display.handle, TRUE);
00708             win[index].w_col += decal;
00709             if ((win[index].w_type & 0xFF) != WTYP_NORM)
00710                 if (win[index].w_col + ww > win[index].w_wtot)
00711                     win[index].w_col = win[index].w_wtot - ww;
00712             if ((win[index].w_type & 0xFF) == WTYP_FORM)
00713                 win[index].w_cont.w_form.w_tree->ob_x = oldx - (int)win[index].w_col;
00714             print_colum (TRUE, index);
00715         }
00716         else
00717         {
00718             win[index].w_col += decal;
00719             if ((win[index].w_type & 0xFF) != WTYP_NORM)
00720                 if (win[index].w_col + ww > win[index].w_wtot)
00721                     win[index].w_col = win[index].w_wtot - ww;
00722             if ((win[index].w_type & 0xFF) == WTYP_FORM)
00723                 win[index].w_cont.w_form.w_tree->ob_x = oldx - (int)win[index].w_col;
00724             print_page (index);
00725         }
00726         posi_hori (index, TRUE);
00727     }
00728 }
00729 /* #] rtline () Ligne vers la droite fenˆtre formulaire :                   */
00730 /* #[ hslid () Slider horizontal fenˆtre :                                              */
00731 void hslid (void)
00732 {
00733 int index, slide, xw, yw, ww, hw, wa;
00734
00735     index = find_index (buf[3]);
00736     if (index == BLANK)
00737         return;
00738
00739     slide = win[index].w_fen[BW_HSLIDE].ob_x;
00740     wa = win[index].w_fen[BW_HELEV].ob_width -  /* Largeur ascenseur */
00741              win[index].w_fen[BW_HSLIDE].ob_width;
00742     zone_work (index, &xw, &yw, &ww, &hw);
00743     win[index].w_col = ((long)slide * (win[index].w_wtot - (long)ww) / (long)wa);
00744     if ((win[index].w_type & 0xFF) != WTYP_NORM)
00745     {
00746         if (win[index].w_col + ww > win[index].w_wtot)
00747             win[index].w_col = win[index].w_wtot - ww;
00748     }
00749     if ((win[index].w_type & 0xFF) == WTYP_NORM)
00750         win[index].w_col = ((win[index].w_col + (win[index].w_wunit / 2)) / win[index].w_wunit) * win[index].w_wunit;
00751     if (win[index].w_col < ZERO)
00752         win[index].w_col = ZERO;
00753     if (win[index].w_flags & WFCALAG)
00754         win[index].w_col = win[index].w_col /
00755                                              win[index].w_wunit * win[index].w_wunit;
00756     if ((win[index].w_type & 0xFF) == WTYP_FORM)
00757         win[index].w_cont.w_form.w_tree->ob_x = xw - (int)win[index].w_col;
00758     slide = (int)((long)win[index].w_col * (long)wa /
00759                                 (long)(win[index].w_wtot - ww));
00760     slide = max (min (slide, wa), ZERO);
00761     print_page (index);
00762 }
00763 /* #] hslid () Slider horizontal fenˆtre :                                              */
00764 /* #[ vslid () Slider vertical fenˆtre :                                                    */
00765 void vslid (void)
00766 {
00767 int index, slide, xw, yw, ww, hw, ha;
00768
00769     index = find_index (buf[3]);
00770     if (index == BLANK)
00771         return;
00772
00773     slide = win[index].w_fen[BW_VSLIDE].ob_y;
00774     ha = win[index].w_fen[BW_VELEV].ob_height - /* Hauteur ascenseur */
00775              win[index].w_fen[BW_VSLIDE].ob_height;
00776     zone_work (index, &xw, &yw, &ww, &hw);
00777     win[index].w_lin = ((long)slide * (win[index].w_htot - (long)hw) / (long)ha);
00778     if ((win[index].w_type & 0xFF) != WTYP_NORM)
00779     {
00780         if (win[index].w_lin + hw > win[index].w_htot)
00781             win[index].w_lin = win[index].w_htot - hw;
00782     }
00783     if ((win[index].w_type & 0xFF) == WTYP_NORM)
00784         win[index].w_lin = ((win[index].w_lin + (win[index].w_hunit / 2)) / win[index].w_hunit) * win[index].w_hunit;
00785     if (win[index].w_lin < ZERO)
00786         win[index].w_lin = ZERO;
00787     if (win[index].w_flags & WFCALAG)
00788         win[index].w_lin = win[index].w_lin /
00789                                              win[index].w_hunit * win[index].w_hunit;
00790     if ((win[index].w_type & 0xFF) == WTYP_FORM)
00791         win[index].w_cont.w_form.w_tree->ob_y = yw - (int)win[index].w_lin;
00792     slide = (int)((long)win[index].w_lin * (long)ha /
00793                                 (long)(win[index].w_htot - hw));
00794     slide = max (min (slide, ha), ZERO);
00795     print_page (index);
00796 }
00797 /* #] vslid () Slider vertical fenˆtre :                                                    */
00798 /* #[ sized () Redimensionnement fenˆtre :                                              */
00799 void sized (void)
00800 {
00801 int index, x, y, w, h, xb, yb;
00802
00803     index = find_index (buf[3]);
00804     if (index == BLANK)
00805         return;
00806     x = buf[4];
00807     y = buf[5];
00808     w = buf[6];
00809     h = buf[7];
00810     if (w < win[index].w_wmini)
00811         w = win[index].w_wmini;
00812     if (h < win[index].w_hmini)
00813         h = win[index].w_hmini;
00814
00815     win[index].w_fen->ob_x = x;
00816     win[index].w_fen->ob_y = y;
00817     win[index].w_fen->ob_width = w;
00818     win[index].w_fen->ob_height = h;
00819     if ((win[index].w_type & WTYP_MENU) || (win[index].w_type & WTYP_TOOL))
00820     {
00821         objc_offset (win[index].w_fen, BW_BARRE, &xb, &yb);
00822         win[index].w_bar->ob_x = xb;
00823         win[index].w_bar->ob_y = yb;
00824     }
00825
00826     wind_set (buf[3], WF_CURRXYWH, x, y, w, h);
00827     win[index].w_curr.g_w = w;
00828     win[index].w_curr.g_h = h;
00829     win[index].w_flags &= ~WFFULL;
00830     height_sliders (index, FALSE);
00831 }
00832 /* #] sized () Redimensionnement fenˆtre :                                              */
00833 /* #[ moved () D‚placement fenˆtre :                                                            */
00834 void moved (void)
00835 {
00836 int index, xw, yw, xb, yb, xf, yf, wf, hf, dummy;
00837
00838     index = find_index (buf[3]);
00839     if (index == BLANK)
00840         return;
00841
00842     xf = buf[4];
00843     yf = buf[5];
00844     wf = buf[6];
00845     hf = buf[7];
00846
00847     win[index].w_fen->ob_x = xf;
00848     win[index].w_fen->ob_y = yf;
00849     win[index].w_curr.g_x = xf;
00850     win[index].w_curr.g_y = yf;
00851     win[index].w_flags &= ~WFFULL;
00852
00853     if (desc_hard_soft.v_tos < 0x300)
00854         wind_set (buf[3], WF_CURRXYWH, max (xf, ZERO), yf, wf + min (ZERO, xf), hf);
00855     else
00856         wind_set (buf[3], WF_CURRXYWH, xf, yf, wf, hf);
00857     if ((win[index].w_type & WTYP_MENU) || (win[index].w_type & WTYP_TOOL))
00858     {
00859         objc_offset (win[index].w_fen, BW_BARRE, &xb, &yb);
00860         win[index].w_bar->ob_x = xb;
00861         win[index].w_bar->ob_y = yb;
00862     }
00863     if ((win[index].w_type & 0xFF) == WTYP_FORM)
00864     {
00865         zone_work (index, &xw, &yw, &dummy, &dummy);
00866         win[index].w_cont.w_form.w_tree->ob_x = xw - (int)win[index].w_col;
00867         win[index].w_cont.w_form.w_tree->ob_y = yw - (int)win[index].w_lin;
00868     }
00869 }
00870 /* #] moved () D‚placement fenˆtre :                                                            */
00871 /* #[ iconise () Ic“nise une fenˆtre :                                                      */
00883 void iconise (int index)
00884 {
00885 int i, xb, yb, xw, yw, dummy,
00886         tab[] = {BW_SIZERUL, BW_CLOSER, BW_SMALLER, BW_CYCLER,
00887                          BW_FULLER, BW_SIZERUR, BW_INFO, BW_VBAR, BW_UPARROW, BW_VELEV,
00888                          BW_VSLIDE, BW_DNARROW, BW_SIZERDL, BW_HBAR, BW_LFARROW, BW_HELEV,
00889                          BW_HSLIDE, BW_RTARROW, BW_SIZERDR};
00890
00891     if (NOT (win[index].w_attr & SMALLER))
00892         return;
00893
00894     win[index].w_old.w_att = win[index].w_fen[BW_WORK].ob_state;    /* Enregistrer couleurs */
00895     for (i = ZERO ; i < 19 ; i++)
00896         win[index].w_fen[tab[i]].ob_flags |= HIDETREE;
00897
00898     win[index].w_old.w_coord.g_x = win[index].w_curr.g_x;   /* Anciennes coordonn‚es */
00899     win[index].w_old.w_coord.g_y = win[index].w_curr.g_y;
00900     win[index].w_old.w_coord.g_w = win[index].w_curr.g_w;
00901     win[index].w_old.w_coord.g_h = win[index].w_curr.g_h;
00902     win[index].w_icon = index;
00903
00904     win[index].w_fen->ob_x = win[index].w_fen->ob_x + ((win[index].w_fen->ob_width - 72) / 2);
00905     if (win[index].w_fen->ob_x < bureau.xd)
00906         win[index].w_fen->ob_x = bureau.xd;
00907     if (win[index].w_fen->ob_x > bureau.xd + bureau.wd - 72)
00908         win[index].w_fen->ob_x = bureau.xd + bureau.wd - 72;
00909     win[index].w_fen->ob_y = bureau.yd + bureau.hd - 72;
00910     win[index].w_fen->ob_width = 72;
00911     win[index].w_fen->ob_height = 72;
00912     win[index].w_fen[BW_MOVER].ob_x = ZERO;
00913     win[index].w_fen[BW_MOVER].ob_width = 72;
00914     win[index].w_fen[BW_WORK].ob_y = win[index].w_fen[BW_MOVER].ob_height - 1;
00915     win[index].w_fen[BW_WORK].ob_width = 72;
00916     win[index].w_fen[BW_WORK].ob_height = 72 - win[index].w_fen[BW_MOVER].ob_height + 1;
00917     if ((win[index].w_type & WTYP_MENU) || (win[index].w_type & WTYP_TOOL))
00918     {
00919         objc_offset (win[index].w_fen, BW_BARRE, &xb, &yb);
00920         win[index].w_bar->ob_x = xb;
00921         win[index].w_bar->ob_y = yb;
00922     }
00923
00924     wind_set (win[index].w_hg, WF_CURRXYWH,
00925                         win[index].w_fen->ob_x, win[index].w_fen->ob_y,
00926                         win[index].w_fen->ob_width, win[index].w_fen->ob_height);
00927     wind_get (win[index].w_hg, WF_CURRXYWH,
00928                         &win[index].w_curr.g_x, &win[index].w_curr.g_y,
00929                         &win[index].w_curr.g_w, &win[index].w_curr.g_h);
00930     if ((win[index].w_type & 0xFF) == WTYP_FORM)
00931     {
00932         zone_work (index, &xw, &yw, &dummy, &dummy);
00933         win[index].w_cont.w_form.w_tree->ob_x = xw;
00934         win[index].w_cont.w_form.w_tree->ob_y = yw;
00935     }
00936
00937     wind_mouse ();
00938     set_palette (BLANK);
00939     win[index].w_flags &= ~WFFULL;
00940     print_wind (index);
00941 }
00942 /* #] iconise () Ic“nise une fenˆtre :                                                      */
00943 /* #[ uniconise () D‚sic“nise une fenˆtre :                                             */
00955 void uniconise (int index)
00956 {
00957 int xf, yf, wf, hf, dummy, i = ZERO, top, oldy, xb, yb, xw, yw;
00958
00959     xf = win[index].w_old.w_coord.g_x;
00960     yf = win[index].w_old.w_coord.g_y;
00961     wf = win[index].w_old.w_coord.g_w;
00962     hf = win[index].w_old.w_coord.g_h;
00963
00964     win[index].w_curr.g_x = win[index].w_old.w_coord.g_x;   /* Restaurer coordonn‚es */
00965     win[index].w_curr.g_y = win[index].w_old.w_coord.g_y;
00966     win[index].w_curr.g_w = win[index].w_old.w_coord.g_w;
00967     win[index].w_curr.g_h = win[index].w_old.w_coord.g_h;
00968     win[index].w_old.w_coord.g_x = win[index].w_old.w_coord.g_y =
00969             win[index].w_old.w_coord.g_w = win[index].w_old.w_coord.g_h = ZERO;
00970     win[index].w_icon = BLANK;
00971
00972     wind_set (win[index].w_hg, WF_CURRXYWH, xf, yf, wf, hf);
00973     put_fen (index);
00974     win[index].w_fen[BW_WORK].ob_state = win[index].w_old.w_att;    /* Restaurer couleurs */
00975     if (win[index].w_type & WTYP_MENU)
00976     {
00977         win[index].w_fen[BW_BARRE].ob_height = win[index].w_bar[WM_BOXMENU].ob_height;
00978         oldy = win[index].w_fen[BW_WORK].ob_y;
00979         win[index].w_fen[BW_WORK].ob_y = (win[index].w_fen[BW_BARRE].ob_y + win[index].w_fen[BW_BARRE].ob_height + 1);
00980         win[index].w_fen[BW_WORK].ob_height -= (win[index].w_fen[BW_WORK].ob_y - oldy);
00981         win[index].w_fen[BW_VBAR].ob_y = win[index].w_fen[BW_WORK].ob_y;
00982         win[index].w_fen[BW_VBAR].ob_height = win[index].w_fen[BW_WORK].ob_height;
00983         win[index].w_fen[BW_VELEV].ob_height -= (win[index].w_fen[BW_WORK].ob_y - oldy - 1);
00984         win[index].w_fen[BW_DNARROW].ob_y -= (win[index].w_fen[BW_WORK].ob_y - oldy - 1);
00985         objc_offset (win[index].w_fen, BW_BARRE, &xb, &yb);
00986         win[index].w_bar[WM_BKGR].ob_x = xb;
00987         win[index].w_bar[WM_BKGR].ob_y = yb;
00988     }
00989     else if (win[index].w_type & WTYP_TOOL)
00990     {
00991         win[index].w_fen[BW_BARRE].ob_height = win[index].w_bar->ob_height;
00992         oldy = win[index].w_fen[BW_WORK].ob_y;
00993         win[index].w_fen[BW_WORK].ob_y = (win[index].w_fen[BW_BARRE].ob_y + win[index].w_fen[BW_BARRE].ob_height);
00994         win[index].w_fen[BW_WORK].ob_height -= (win[index].w_fen[BW_WORK].ob_y - oldy);
00995         win[index].w_fen[BW_VBAR].ob_y = win[index].w_fen[BW_WORK].ob_y;
00996         win[index].w_fen[BW_VBAR].ob_height = win[index].w_fen[BW_WORK].ob_height;
00997         win[index].w_fen[BW_VELEV].ob_height -= (win[index].w_fen[BW_WORK].ob_y - oldy - 1);
00998         win[index].w_fen[BW_DNARROW].ob_y -= (win[index].w_fen[BW_WORK].ob_y - oldy - 1);
00999         objc_offset (win[index].w_fen, BW_BARRE, &xb, &yb);
01000         win[index].w_bar->ob_x = xb;
01001         win[index].w_bar->ob_y = yb;
01002     }
01003     else if (win[index].w_type & WTYP_FORM)
01004     {
01005         zone_work (index, &xw, &yw, &dummy, &dummy);
01006         win[index].w_cont.w_form.w_tree->ob_x = xw;
01007         win[index].w_cont.w_form.w_tree->ob_y = yw;
01008     }
01009     if (win[index].w_flags & WFGROUP)
01010     {
01011         win[index].w_fen[BW_UPARROW].ob_y =
01012                 (win[index].w_fen[BW_DNARROW].ob_y - win[index].w_fen[BW_UPARROW].ob_height + 1);
01013         win[index].w_fen[BW_LFARROW].ob_x =
01014                 (win[index].w_fen[BW_RTARROW].ob_x - win[index].w_fen[BW_LFARROW].ob_width + 1);
01015     }
01016     height_sliders (index, FALSE);
01017
01018     do                      /* Pour toutes les fenˆtres */
01019     {
01020         if (win[i].w_icon == index) /* Si ic“ne associ‚e */
01021         {
01022             win[i].w_curr.g_x = win[i].w_old.w_coord.g_x;   /* Restaurer coordonn‚es */
01023             win[i].w_curr.g_y = win[i].w_old.w_coord.g_y;
01024             win[i].w_curr.g_w = win[i].w_old.w_coord.g_w;
01025             win[i].w_curr.g_h = win[i].w_old.w_coord.g_h;
01026             win[i].w_old.w_coord.g_x = win[i].w_old.w_coord.g_y =
01027                     win[i].w_old.w_coord.g_w = win[i].w_old.w_coord.g_h = ZERO;
01028             win[i].w_icon = BLANK;
01029
01030             win[i].w_hg = wind_create (ZERO,
01031                                                                  win[i].w_curr.g_x, win[i].w_curr.g_y,
01032                                                                  win[i].w_curr.g_w, win[i].w_curr.g_h);
01033             if (win[i].w_hg)
01034             {
01035                 put_fen (i);
01036                 win[i].w_fen[BW_WORK].ob_state = win[i].w_old.w_att;    /* Restaurer couleurs */
01037                 if (win[i].w_type & WTYP_MENU)
01038                 {
01039                     win[i].w_fen[BW_BARRE].ob_height = win[i].w_bar[WM_BOXMENU].ob_height;
01040                     oldy = win[i].w_fen[BW_WORK].ob_y;
01041                     win[i].w_fen[BW_WORK].ob_y = (win[i].w_fen[BW_BARRE].ob_y + win[i].w_fen[BW_BARRE].ob_height + 1);
01042                     win[i].w_fen[BW_WORK].ob_height -= (win[i].w_fen[BW_WORK].ob_y - oldy);
01043                     win[i].w_fen[BW_VBAR].ob_y = win[i].w_fen[BW_WORK].ob_y;
01044                     win[i].w_fen[BW_VBAR].ob_height = win[i].w_fen[BW_WORK].ob_height;
01045                     win[i].w_fen[BW_VELEV].ob_height -= (win[i].w_fen[BW_WORK].ob_y - oldy - 1);
01046                     win[i].w_fen[BW_DNARROW].ob_y -= (win[i].w_fen[BW_WORK].ob_y - oldy - 1);
01047                     objc_offset (win[i].w_fen, BW_BARRE, &xb, &yb);
01048                     win[i].w_bar[WM_BKGR].ob_x = xb;
01049                     win[i].w_bar[WM_BKGR].ob_y = yb;
01050                 }
01051                 else if (win[i].w_type & WTYP_TOOL)
01052                 {
01053                     win[i].w_fen[BW_BARRE].ob_height = win[i].w_bar->ob_height;
01054                     oldy = win[i].w_fen[BW_WORK].ob_y;
01055                     win[i].w_fen[BW_WORK].ob_y = (win[i].w_fen[BW_BARRE].ob_y + win[i].w_fen[BW_BARRE].ob_height);
01056                     win[i].w_fen[BW_WORK].ob_height -= (win[i].w_fen[BW_WORK].ob_y - oldy);
01057                     win[i].w_fen[BW_VBAR].ob_y = win[i].w_fen[BW_WORK].ob_y;
01058                     win[i].w_fen[BW_VBAR].ob_height = win[i].w_fen[BW_WORK].ob_height;
01059                     win[i].w_fen[BW_VELEV].ob_height -= (win[i].w_fen[BW_WORK].ob_y - oldy - 1);
01060                     win[i].w_fen[BW_DNARROW].ob_y -= (win[i].w_fen[BW_WORK].ob_y - oldy - 1);
01061                     objc_offset (win[i].w_fen, BW_BARRE, &xb, &yb);
01062                     win[i].w_bar->ob_x = xb;
01063                     win[i].w_bar->ob_y = yb;
01064                 }
01065                 else if (win[i].w_type & WTYP_FORM)
01066                 {
01067                     zone_work (i, &xw, &yw, &dummy, &dummy);
01068                     win[i].w_cont.w_form.w_tree->ob_x = xw;
01069                     win[i].w_cont.w_form.w_tree->ob_y = yw;
01070                 }
01071                 if (win[index].w_flags & WFGROUP)
01072                 {
01073                     win[index].w_fen[BW_UPARROW].ob_y =
01074                             (win[index].w_fen[BW_DNARROW].ob_y - win[index].w_fen[BW_UPARROW].ob_height + 1);
01075                     win[index].w_fen[BW_LFARROW].ob_x =
01076                             (win[index].w_fen[BW_RTARROW].ob_x - win[index].w_fen[BW_LFARROW].ob_width + 1);
01077                 }
01078                 height_sliders (i, FALSE);
01079                 wind_open (win[i].w_hg, win[i].w_curr.g_x, win[i].w_curr.g_y,
01080                                      win[i].w_curr.g_w, win[i].w_curr.g_h);
01081             }
01082         }
01083     } while (NOT (win[i++].w_flags & WFLAST));
01084
01085     wind_mouse ();
01086     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
01087     index = find_index (top);
01088     if (index > BLANK)
01089     {
01090         if (((win[index].w_type & 0xFF) == WTYP_PICT)
01091         || ((win[index].w_type & 0xFF) == WTYP_FORM))
01092             set_palette (index);
01093         else
01094             set_palette (BLANK);
01095     }
01096 }
01097 /* #] uniconise () D‚sic“nise une fenˆtre :                                             */
01098 /* #[ alliconise () Ic“nise une fenˆtre :                                                   */
01110 void alliconise (int index)
01111 {
01112 int i = ZERO;
01113
01114     if (NOT (win[index].w_attr & SMALLER))
01115         return;
01116
01117     iconise (index);    /* Ic“niser cette fenˆtre */
01118
01119     do                              /* Pour toutes les fenˆtres */
01120     {
01121         if (win[i].w_attr & SMALLER)
01122         {
01123             if ((win[i].w_hg > ZERO) && (win[i].w_icon == BLANK))   /* Si ouverte et pas ic“ne */
01124             {
01125                 wind_close (win[i].w_hg);
01126                 wind_delete (win[i].w_hg);
01127                 win[i].w_hg = ZERO;
01128                 win[i].w_icon = index;
01129                 win[i].w_old.w_coord.g_x = win[i].w_curr.g_x;   /* Anciennes coordonn‚es */
01130                 win[i].w_old.w_coord.g_y = win[i].w_curr.g_y;
01131                 win[i].w_old.w_coord.g_w = win[i].w_curr.g_w;
01132                 win[i].w_old.w_coord.g_h = win[i].w_curr.g_h;
01133                 win[i].w_old.w_att = win[i].w_fen[BW_WORK].ob_state;    /* Enregistrer couleurs */
01134             }
01135         }
01136     } while (NOT (win[i++].w_flags & WFLAST));
01137 }
01138 /* #] alliconise () Ic“nise une fenˆtre :                                                   */
01139 /****** Fonctions d'ev‚nements fenˆtres formulaire ****************/
01140 /* #[ full_wform () Fenˆtre formulaire plein pot :                              */
01141 void full_wform (void)
01142 {
01143 int index, x, y, w, h, xw, yw, ww, hw, xf, yf, wf, hf, oldx, oldy, oldw, oldh;
01144
01145     index = find_index (buf[3]);
01146     if (index == BLANK)
01147         return;
01148     if (NOT (win[index].w_attr & FULLER))
01149         return ;
01150
01151     oldx = win[index].w_fen->ob_x;
01152     oldy = win[index].w_fen->ob_y;
01153     oldw = win[index].w_fen->ob_width;
01154     oldh = win[index].w_fen->ob_height;
01155     if (win[index].w_flags & WFFULL)
01156     {
01157         x = win[index].w_old.w_coord.g_x;
01158         y = win[index].w_old.w_coord.g_y;
01159         w = win[index].w_old.w_coord.g_w;
01160         h = win[index].w_old.w_coord.g_h;
01161         win[index].w_fen->ob_x = x;
01162         win[index].w_fen->ob_y = y;
01163         win[index].w_fen->ob_width = w;
01164         win[index].w_fen->ob_height = h;
01165         wind_set (win[index].w_hg, WF_CURRXYWH, x, y, w, h);
01166     }
01167     else
01168     {
01169         win[index].w_old.w_coord.g_x = win[index].w_curr.g_x;
01170         win[index].w_old.w_coord.g_y = win[index].w_curr.g_y;
01171         win[index].w_old.w_coord.g_w = win[index].w_curr.g_w;
01172         win[index].w_old.w_coord.g_h = win[index].w_curr.g_h;
01173         win[index].w_col = ZERO;
01174         win[index].w_lin = ZERO;
01175         form_center (win[index].w_cont.w_form.w_tree, &x, &y, &w, &h);
01176
01177             /* D‚duire les coordonn‚es de la fenˆtre */
01178         bwind_calc (WC_BORDER, win[index].w_attr, BLANK, ZERO,
01179                                 x, y, w, h, &xf, &yf, &wf, &hf);
01180
01181         if (xf < bureau.xd) /* Ne pas sortir du bureau */
01182             xf = bureau.xd;
01183         if (yf < bureau.yd)
01184             yf = bureau.yd;
01185         if (wf > bureau.wd)
01186             wf = bureau.wd;
01187         if (hf > bureau.hd)
01188             hf = bureau.hd;
01189
01190         win[index].w_fen->ob_x = xf;
01191         win[index].w_fen->ob_y = yf;
01192         win[index].w_fen->ob_width = w = wf;
01193         win[index].w_fen->ob_height = h = hf;
01194
01195         wind_set (win[index].w_hg, WF_CURRXYWH, xf, yf, wf, hf);
01196     }
01197     resize (index, w - oldw, h - oldh);
01198     win[index].w_flags ^= WFFULL;
01199     wind_get (win[index].w_hg, WF_CURRXYWH,
01200                         &win[index].w_curr.g_x, &win[index].w_curr.g_y,
01201                         &win[index].w_curr.g_w, &win[index].w_curr.g_h);
01202     zone_work (index, &xw, &yw, &ww, &hw);
01203     win[index].w_cont.w_form.w_tree->ob_x = (int)((long)xw - win[index].w_col);
01204     win[index].w_cont.w_form.w_tree->ob_y = (int)((long)yw - win[index].w_lin);
01205     height_sliders (index, FALSE);
01206     if (((oldx == win[index].w_curr.g_x) && (oldy == win[index].w_curr.g_y)) &&
01207             ((oldw > win[index].w_curr.g_w) && (oldh > win[index].w_curr.g_h)))
01208         print_wind (index);
01209 }
01210 /* #] full_wform () Fenˆtre formulaire plein pot :                              */
01211 /* #[ size_wform () Redimensionnement fenˆtre formulaire :              */
01212 void size_wform (void)
01213 {
01214 int index, xw, yw, dummy;
01215
01216     index = find_index (buf[3]);
01217     if (index == BLANK)
01218         return;
01219
01220     win[index].w_fen->ob_x = buf[4];
01221     win[index].w_fen->ob_y = buf[5];
01222     win[index].w_fen->ob_width = buf[6];
01223     win[index].w_fen->ob_height = buf[7];
01224     wind_set (buf[3], WF_CURRXYWH, buf[4], buf[5], buf[6], buf[7]);
01225     wind_get (win[index].w_hg, WF_CURRXYWH,
01226                         &win[index].w_curr.g_x, &win[index].w_curr.g_y,
01227                         &win[index].w_curr.g_w, &win[index].w_curr.g_h);
01228     height_sliders (index, FALSE);
01229     zone_work (index, &xw, &yw, &dummy, &dummy);
01230     win[index].w_cont.w_form.w_tree->ob_x = xw - (int)win[index].w_col;
01231     win[index].w_cont.w_form.w_tree->ob_y = yw - (int)win[index].w_lin;
01232     win[index].w_flags &= ~WFFULL;
01233 }
01234 /* #] size_wform () Redimensionnement fenˆtre formulaire :              */
01235
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2EVTW.H Source File

BIG2EVTW.H

Go to the documentation of this file.
00001 /*  BIG2EVTW.H */
00002
00003 /* #[ Variables globales : */
00004 extern int buf[];
00005 extern t_ident_hard_soft desc_hard_soft;
00006 extern t_display work_display;
00007 extern t_desktop bureau;
00008 extern BigWind  *win;
00009 /* #] Variables globales : */
00010 /* #[ Prototypage des fonctions : */
00011 void wm_arrow (void);
00012 void    redraw (void);
00013 void    hslid (void);
00014 void    vslid (void);
00015 void    uppage (void);
00016 void    dnpage (void);
00017 void    lfpage (void);
00018 void    rtpage (void);
00019 void    upline (void);
00020 void    dnline (void);
00021 void    lfline (void);
00022 void    rtline (void);
00023 void    topped (void);
00024 void    fulled (void);
00025 void    sized (void);
00026 void    moved (void);
00027 void    full_wform (void);
00028 void    size_wform (void);
00029 /* #] Prototypage des fonctions : */
00030
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2FOR1.C Source File

BIG2FOR1.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS DE GESTION DES FORMULAIRES 1
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2DIAL.H"
00007 #include "BIG2FOR1.H"
00008 #include "BIG2FOR2.H"
00009 #include "BIG2EDIT.H"
00010 #include "BIG2WIND.H"
00011 /****** Fonctions de gestion des formulaires **********************/
00012
00013 /* #[ formm_draw () Dessine un formulaire d‚pla‡able :                      */
00033 void formm_draw (OBJECT *adr, int ed, int flmove, MFDB *img)
00034 {
00035 int x, y, w, h, pxy[8];
00036 size_t taille;
00037 MFDB nul = {0};
00038
00039     graf_mouse (ARROW, 0);                          /* Souris -> Flˆche */
00040     if (flmove == TRUE)
00041     {
00042         if (screen.fd_addr)
00043         {
00044             free (screen.fd_addr);      /* Lib‚rer le tampon par s‚curit‚ */
00045             screen.fd_addr = NULL;
00046         }
00047             /* Taille ‚cran */
00048         taille = ((size_t)(bureau.xd + bureau.wd) / 8 * (size_t)work_display.n_plane) * (size_t)(bureau.yd + bureau.hd);
00049         screen.fd_addr = malloc (taille);                                       /* R‚server tampon */
00050         if (screen.fd_addr)
00051         {
00052             screen.fd_w = bureau.xd + bureau.wd;
00053             screen.fd_h = bureau.yd + bureau.hd;
00054             screen.fd_wdwidth = (bureau.xd + bureau.wd) / 16;
00055             screen.fd_stand = 1;
00056             screen.fd_nplanes = work_display.n_plane;
00057
00058             fill_tab (pxy, 8,
00059                                 ZERO, ZERO,
00060                                 bureau.xd + bureau.wd - 1,
00061                                 bureau.yd + bureau.hd - 1,
00062                                 ZERO, ZERO,
00063                                 bureau.xd + bureau.wd - 1,
00064                                 bureau.yd + bureau.hd - 1);
00065
00066             v_hide_c (work_display.handle);
00067             vro_cpyfm (work_display.handle, S_ONLY, pxy, &nul, &screen);    /* Copier l'‚cran */
00068             v_show_c (work_display.handle, TRUE);
00069         }
00070     }
00071
00072     x = adr->ob_x;
00073     y = adr->ob_y;
00074     w = adr->ob_width;
00075     h = adr->ob_height;
00076     get_bkgr (x, y, w, h, img);                 /* Sauver le fond */
00077     objc_draw (adr, ROOT, MAX_DEPTH, x - 3, y - 3, w + 6, h + 6);
00078     if (ed > BLANK)
00079     {
00080         edit = ed;
00081         if ((adr[ed].ob_type >> 8) == B_EDIT)
00082         {
00083             pos = min ((int)strlen (adr[edit].ob_spec.tedinfo->te_ptext),
00084                                  (int)strlen (adr[edit].ob_spec.tedinfo->te_pvalid));
00085             draw_curs (adr, edit, &pos, ED_END);        /* R‚activer */
00086         }
00087         else
00088         {
00089             pos = (int)strlen (get_text (adr, edit));
00090             draw_curs (adr, edit, &pos, ED_INIT);   /* Activer curseur */
00091         }
00092     }
00093 }
00094 /* #] formm_draw () Dessine un formulaire d‚pla‡able :                      */
00095 /* #[ formm_undraw () LibŠre un formulaire d‚pla‡able :                     */
00107 void formm_undraw (OBJECT *adr, MFDB *img)
00108 {
00109 int pxy[8], x, y, w, h;
00110 MFDB ecran = {ZERO};
00111
00112     edit = BLANK;
00113     if (screen.fd_addr)
00114     {       /* Si possible, restaurer le fond par copie raster */
00115         x = adr->ob_x;
00116         y = adr->ob_y;
00117         w = adr->ob_width;
00118         h = adr->ob_height;
00119         fill_tab (pxy, 8,
00120                             x - 3, y - 3,
00121                             x + w + 2, y + h + 2,
00122                             x - 3, y - 3,
00123                             x + w + 2, y + h + 2);
00124         Vsync ();
00125         v_hide_c (work_display.handle);
00126         vro_cpyfm (work_display.handle, S_ONLY, pxy, &screen, &ecran);  /* Restaurer fond */
00127         v_show_c (work_display.handle, TRUE);
00128         free (screen.fd_addr);
00129         screen.fd_addr = NULL;
00130     }
00131     else    /* Sinon, faire un form_dial */
00132         form_dial (FMD_FINISH, 0, 0, 0, 0,
00133                              adr->ob_x - 3, adr->ob_y - 3,
00134                              adr->ob_width + 6, adr->ob_height + 6);
00135     if (img->fd_addr)
00136         free (img->fd_addr);
00137     adr[object].ob_state &= ~SELECTED;
00138     wind_mouse ();
00139 }
00140 /* #] formm_undraw () LibŠre un formulaire d‚pla‡able :                     */
00141 /* #[ formf_draw () Dessine un formulaire fixe :                                    */
00153 void formf_draw (OBJECT *adr, int ed)
00154 {
00155     graf_mouse (ARROW, 0);                          /* Souris -> Flˆche */
00156     objc_draw (adr, ROOT, MAX_DEPTH, adr->ob_x - 3, adr->ob_y - 3,
00157                          adr->ob_width + 6, adr->ob_height + 6);
00158     if (ed > BLANK)
00159     {
00160         edit = ed;
00161         if ((adr[ed].ob_type >> 8) == B_EDIT)
00162         {
00163             pos = min ((int)strlen (adr[edit].ob_spec.tedinfo->te_ptext),
00164                                  (int)strlen (adr[edit].ob_spec.tedinfo->te_pvalid));
00165             draw_curs (adr, edit, &pos, ED_END);        /* R‚activer */
00166         }
00167         else
00168         {
00169             pos = (int)strlen (get_text (adr, edit));
00170             draw_curs (adr, edit, &pos, ED_INIT);   /* Activer curseur */
00171         }
00172     }
00173 }
00174 /* #] formf_draw () Dessine un formulaire fixe :                                    */
00175 /* #[ formf_undraw () LibŠre un formulaire fixe :                                   */
00185 void formf_undraw (OBJECT *adr)
00186 {
00187     edit = BLANK;
00188     form_dial (FMD_FINISH, 0, 0, 0, 0,
00189                          adr->ob_x - 3, adr->ob_y - 3,
00190                          adr->ob_width + 6, adr->ob_height + 6);
00191     adr[object].ob_state &= ~SELECTED;
00192     wind_mouse ();
00193 }
00194 /* #] formf_undraw () LibŠre un formulaire fixe :                                   */
00195 /* #[ menu_hierarch () GŠre un menu hi‚rarchique :                              */
00196 int menu_hierarch (int option)
00197 {
00198 OBJECT *adrh, *old_adrh;
00199 int x, y, w, h, xo, yo, xm, ym, km, b[8], evnt, ob_menu, menu, pxy[8],
00200         tree, dummy, ob = ZERO, old_ob = BLANK, sortie = FALSE, titre,
00201         xz, yz, etat, cote, nbre, fl_scroll = FALSE, xs, ys, cale = 1,
00202         naff, down, haut, i;
00203 size_t taille;
00204 char *text;
00205 MOBLK zone;
00206 MFDB ecran = {0}, image;
00207
00208     evnt = evnt_timer (100, 0);         /* D‚lai 1/2 seconde */
00209     graf_mkstate (&xm, &ym, &dummy, &dummy);
00210     if (option_find (xm, ym) != option)
00211         return FALSE;           /* Si plus sur l'option, on sort */
00212
00213     objc_offset (adr_menu, option, &xo, &yo);   /* Position option */
00214
00215     tree = adr_menu[option].ob_state >> 8;
00216     adrh = ir_trindex[tree];
00217
00218     menu = parent (adr_menu, option);
00219     objc_offset (adr_menu, menu, &xz, &yz);
00220
00221     titre = m_title (adr_menu, option);
00222
00223         /* 0 : Entr‚e ; 1 : Sortie */
00224     zone.m_out = 1;
00225     zone.m_x = xz;
00226     zone.m_y = yz;
00227     zone.m_w = adr_menu[menu].ob_width;
00228     zone.m_h = adr_menu[menu].ob_height;
00229
00230     text = get_text (adr_menu, option);
00231     if (text[strlen (text) - 2] == 3)
00232         x = adrh->ob_x = xo + adr_menu[option].ob_width + 2;
00233     else if (text[strlen (text) - 2] == 4)
00234         x = adrh->ob_x = xo - adrh->ob_width - 5;
00235     y = adrh->ob_y = yo;
00236     w = adrh->ob_width;
00237     h = adrh->ob_height;
00238
00239     if ((y + h) > bureau.hd)                                                    /* Si plus haut que le bureau */
00240     {
00241         naff = create_scroll (adrh, y, &nbre, ZERO);        /* cr‚er un scroll-menu */
00242         down = naff + 2;
00243         old_adrh = adrh;
00244         adrh = scroll;
00245         adrh->ob_x = x;
00246         adrh->ob_y = y;
00247         haut = adrh[1].ob_height;
00248         fl_scroll = TRUE;
00249     }
00250
00251     taille = (((((size_t)(w + 3) / 16) + 1) * 2 * (size_t)work_display.n_plane) *
00252                         (size_t)(h + 3)) + 256;
00253     image.fd_addr = malloc (taille);
00254     image.fd_w = w + 3;
00255     image.fd_h = h + 3;
00256     image.fd_wdwidth = ((w + 3) / 16) + (((w + 3) % 16) != 0);
00257     image.fd_stand = 1;
00258     image.fd_nplanes = work_display.n_plane;
00259     fill_tab (pxy, 8,
00260                         x - 1, y - 1,
00261                         x + w + 3, y + h + 3,
00262                         ZERO, ZERO, w + 4, h + 4);
00263     v_hide_c (work_display.handle);
00264     vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecran, &image);   /* Sauver le fond */
00265     v_show_c (work_display.handle, TRUE);
00266     objc_draw (adrh, ROOT, MAX_DEPTH, x - 1, y - 1, w + 4, h + 4);
00267
00268     do
00269     {
00270         evnt = evnt_multi (MU_BUTTON | MU_M1 | MU_TIMER,
00271                                              1, 1, 1,
00272                                              zone.m_out, zone.m_x, zone.m_y,
00273                                              zone.m_w, zone.m_h,
00274                                              0, 0, 0, 0, 0,
00275                                              b, 10, 0, &xm, &ym, &km, &dummy, &dummy, &dummy);
00276         if (evnt & MU_BUTTON)
00277         {
00278             sortie = TRUE;
00279             etat = adr_menu[option].ob_state & 0xFF00;
00280             objc_change (adr_menu, option, 0, xo, yo, adr_menu[option].ob_width,
00281                                      adr_menu[option].ob_height, etat, FALSE);
00282             menu_tnormal (adr_menu, titre, 1);
00283         }
00284         else if (evnt & MU_M1)
00285         {
00286             graf_mkstate (&xm, &ym, &dummy, &dummy);
00287             if (zone.m_out)                     /* Si sortie de la zone */
00288             {
00289                 zone.m_out = 0;                 /* Surveiller l'entr‚e */
00290                 if (text[strlen (text) - 2] == 3)               /* Si cot‚ droit */
00291                     cote = (xm < zone.m_x + zone.m_w);
00292                 else if (text[strlen (text) - 2] == 4)  /* Si cot‚ gauche */
00293                     cote = (xm > zone.m_x + zone.m_y);
00294                 if (cote)                       /* Si pas sortie cot‚ pop-up */
00295                     sortie = TRUE;      /* Fini */
00296                 else
00297                     adr_menu[option].ob_state |= SELECTED;
00298             }
00299             else                                            /* Si entr‚e dans la zone */
00300             {
00301                 ob_menu = objc_find (adr_menu, ROOT, MAX_DEPTH, xm, ym);
00302                 if (ob_menu != option)  /* Si autre option */
00303                 {
00304                     etat = adr_menu[option].ob_state & ~SELECTED;
00305                     objc_change (adr_menu, option, 0, xo, yo,
00306                                              adr_menu[option].ob_width,
00307                                              adr_menu[option].ob_height, etat, TRUE);
00308                     ob = BLANK;
00309                     sortie = TRUE;              /* Fini */
00310                 }
00311                 else                                        /* Si mˆme option */
00312                 {
00313                     zone.m_out = 1;             /* Surveiller sortie */
00314                 }
00315             }
00316         }
00317         else if (evnt == MU_TIMER)
00318         {
00319             if ((NOT (adr_menu[titre].ob_state & SELECTED)) ||
00320                     (NOT (adr_menu[option].ob_state & SELECTED)))
00321             {
00322                 etat = adr_menu[option].ob_state & 0xFF00;
00323                 objc_change (adr_menu, option, 0, xo, yo, adr_menu[option].ob_width,
00324                                          adr_menu[option].ob_height, etat, FALSE);
00325                 ob = BLANK;
00326                 sortie = TRUE;
00327             }
00328
00329             graf_mkstate (&xm, &ym, &dummy, &dummy);
00330             ob = objc_find (adrh, ROOT, MAX_DEPTH, xm, ym);
00331
00332             if (old_ob != ob)       /* Si objet diff‚rent */
00333             {
00334                 if ((old_ob != -1) && (NOT (adrh[old_ob].ob_state & DISABLED)))
00335                 {
00336                     etat = adrh[old_ob].ob_state & ~SELECTED;
00337                     objc_change (adrh, old_ob, 0, x, y, w, h, etat, TRUE);
00338                 }
00339                 if ((ob > ROOT) && (NOT (adrh[ob].ob_state & DISABLED)))
00340                 {
00341                     etat = adrh[ob].ob_state | SELECTED;
00342                     objc_change (adrh, ob, 0, x, y, w, h, etat, TRUE);
00343                 }
00344                 old_ob = ob;
00345             }
00346             else                                /* Si mˆme objet */
00347             {
00348                 if ((fl_scroll) && (ob == 1))
00349                 {       /* Si scroll : flˆche vers le haut */
00350                     objc_offset (adrh, 0, &xs, &ys);
00351                     if (cale > 1)
00352                     {
00353                         evnt_timer (50, 0);
00354                         cale--;
00355                         for (i = naff + 1 ; i > 2 ; i--)
00356                         {
00357                             adrh[i].ob_spec = adrh[i - 1].ob_spec;
00358                             adrh[i].ob_state = adrh[i - 1].ob_state;
00359                         }
00360                         adrh[2].ob_spec = old_adrh[cale].ob_spec;
00361                         adrh[2].ob_state = old_adrh[cale].ob_state;
00362                         fill_tab (pxy, 8,
00363                                             xs, ys + haut,
00364                                             xs + adrh->ob_width, ys + (naff * haut),
00365                                             xs, ys + (2 * haut),
00366                                             xs + adrh->ob_width, ys + ((naff + 1) * haut));
00367                         v_hide_c (work_display.handle);
00368                         objc_change (adrh, ob, 0, x, y, w, h, NORMAL, TRUE);
00369                         vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecran, &ecran);
00370                         objc_change (adrh, ob, 0, x, y, w, h, SELECTED, TRUE);
00371                         v_show_c (work_display.handle, TRUE);
00372                         objc_draw (adrh, ROOT, 2,
00373                                              x + adrh[2].ob_x, y + adrh[2].ob_y,
00374                                              adrh[2].ob_width, adrh[2].ob_height);
00375                     }
00376                 }
00377                 else if ((fl_scroll) && (ob == down))
00378                 {       /* Si scroll : flˆche vers le bas */
00379                     objc_offset (adrh, 0, &xs, &ys);
00380                     if ((cale + naff) <= nbre)
00381                     {
00382                         evnt_timer (50, 0);
00383                         cale++;
00384                         for (i = 2 ; i < (naff + 1) ; i++)
00385                         {
00386                             adrh[i].ob_spec = adrh[i + 1].ob_spec;
00387                             adrh[i].ob_state = adrh[i + 1].ob_state;
00388                         }
00389                         adrh[naff + 1].ob_spec = old_adrh[cale + naff - 1].ob_spec;
00390                         adrh[naff + 1].ob_state = old_adrh[cale + naff - 1].ob_state;
00391                         fill_tab (pxy, 8,
00392                                             xs, ys + (2 * haut),
00393                                             xs + adrh->ob_width, ys + ((naff + 1) * haut),
00394                                             xs, ys + haut,
00395                                             xs + adrh->ob_width, ys + (naff * haut));
00396                         v_hide_c (work_display.handle);
00397                         objc_change (adrh, ob, 0, x, y, w, h, NORMAL, TRUE);
00398                         vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecran, &ecran);
00399                         objc_change (adrh, ob, 0, x, y, w, h, SELECTED, TRUE);
00400                         v_show_c (work_display.handle, TRUE);
00401                         objc_draw (adrh, ROOT, 2,
00402                                              x + adrh[naff + 1].ob_x, y + adrh[naff + 1].ob_y,
00403                                              adrh[naff + 1].ob_width, adrh[naff + 1].ob_height);
00404                     }
00405                 }
00406             }
00407
00408             if ((ob == -1) && (ym < yo))
00409             {
00410                 sortie = TRUE;
00411                 etat = adr_menu[option].ob_state & 0xFF00;
00412                 objc_change (adr_menu, option, 0, xo, yo, adr_menu[option].ob_width,
00413                                          adr_menu[option].ob_height, etat, TRUE);
00414             }
00415         }
00416     } while (NOT sortie);
00417     pxy[4] = x - 1;
00418     pxy[5] = y - 1;
00419     pxy[6] = pxy[4] + w + 4;
00420     pxy[7] = pxy[5] + h + 4;
00421     pxy[0] = 0;
00422     pxy[1] = 0;
00423     pxy[2] = w + 4;
00424     pxy[3] = h + 4;
00425     v_hide_c (work_display.handle);
00426     vro_cpyfm (work_display.handle, S_ONLY, pxy, &image, &ecran);   /* Restaurer le fond */
00427     v_show_c (work_display.handle, TRUE);
00428     free (image.fd_addr);   /* Lib‚rer tampon image */
00429     if (fl_scroll)
00430     {
00431         free (scroll);
00432         scroll = (OBJECT *) ZERO;
00433         adrh = old_adrh;
00434         if (ob > ZERO)
00435             ob = ob - 2 + cale;
00436     }
00437
00438     if ((ob > 0) && (NOT (adrh[ob].ob_state & DISABLED)))
00439     {
00440         evnt = TRUE;
00441         buf[0] = BEV_HIERM;
00442         buf[1] = ap_id;
00443         buf[3] = titre;
00444         buf[4] = option;
00445         buf[5] = tree;
00446         buf[6] = ob;
00447         etat = adrh[buf[6]].ob_state & 0xFF00;
00448         objc_change (adrh, buf[6], 0, x, y, w, h, etat, FALSE);
00449         menu_tnormal (adr_menu, titre, 0);
00450         if ((adrh[buf[6]].ob_type >> 8) == B_FNCP)  /* Si fonction associ‚e */
00451         {
00452             (*fnc[adrh[buf[6]].ob_state >> 8])();
00453             empty (MU_KEYBD);
00454         }
00455         return evnt;
00456     }
00457     else
00458         return FALSE;
00459 }
00460 /* #] menu_hierarch () GŠre un menu hi‚rarchique :                              */
00461 /* #[ pop_up () Routine de gestion de menu Pop-Up :                             */
00462 void pop_up (OBJECT *adr, int object)
00463 {
00464 OBJECT *adresse, *old_adresse;
00465 int i, tree, x, y, w, h, dummy, old_ob = -1, ob = 0, b[8], xm, ym, km,
00466         evnt, sortie = FALSE, etat, old = 0, fl_scroll = FALSE, naff,
00467         cale, nbre, down, pxy[8], haut, xs, ys, cadre[10], top, index,
00468         jaune[3], old_jaune[3], noir[3], old_noir[3], f3d = FALSE;
00469 MFDB nul = {0}, image;
00470 char chaine[MAX_LEN];
00471
00472     tree = (adr[object].ob_state) >> 8; /* R‚cupŠre nø formulaire associ‚ */
00473     adresse = ir_trindex[tree];
00474     if (adresse->ob_flags & BKGR)
00475         f3d = TRUE;
00476
00477     if (tree)
00478     {
00479         objc_offset (adr, object, &x, &y);      /* Position bouton cliqu‚ */
00480         y += (adr[object].ob_height + 2);           /* Se placer dessous */
00481         adresse->ob_x = x;                                      /* Positionner le */
00482         adresse->ob_y = y;                                      /* formulaire pop_up. */
00483         w = adresse->ob_width;                              /* Prendre ses */
00484         h = adresse->ob_height;                             /* dimensions. */
00485
00486         if (h > bureau.hd)                                      /* Si plus haut que le bureau */
00487         {
00488             if ((y + (6 * bi_trindex[BIGARRS][SC_UP].ob_height)) > (bureau.yd + bureau.hd - 3))
00489                 y = adresse->ob_y = bureau.yd + 3;
00490
00491             i = match (adr, object);
00492             if (i)
00493             {
00494                 adresse[i].ob_state |= CHECKED;
00495                 old = i;
00496             }
00497
00498             naff = create_scroll (adresse, y, &nbre, old);  /* cr‚er scroll-menu */
00499             cale = max (old, 1);
00500             if ((cale + naff) > (nbre + 1))
00501                 cale = nbre - naff + 1;
00502             down = naff + 2;
00503             old_adresse = adresse;
00504             adresse = scroll;
00505             adresse->ob_x = x;
00506             adresse->ob_y = y;
00507             w = adresse->ob_width;
00508             h = adresse->ob_height;
00509             haut = adresse[1].ob_height;
00510             fl_scroll = TRUE;
00511         }
00512         else
00513         {
00514                 /* Aligner le pop_up avec le bouton */
00515             if (((adr[object].ob_type & 0xFF) == G_BUTTON) ||
00516                     ((adr[object].ob_type & 0xFF) == G_USERDEF))    /* Si Pop-Up de STRINGs */
00517             {
00518                 i = match (adr, object);
00519                 if (i)
00520                 {
00521                     x = adresse->ob_x = x - adresse[i].ob_x;
00522                     y = adresse->ob_y = y - adresse[i].ob_y - adr[object].ob_height;
00523                     old = i;
00524                     adresse[old].ob_state |= CHECKED;
00525                 }
00526             }
00527             else if ((adr[object].ob_type & 0xFF) == G_IMAGE)   /* Si Pop-Up d'IMAGEs */
00528             {
00529                 i = match (adr, object);
00530                 if (i)
00531                 {
00532                     x = adresse->ob_x = x - adresse[i].ob_x;
00533                     y = adresse->ob_y = y - adresse[i].ob_y - adr[object].ob_height;
00534                 }
00535             }
00536             else if ((adr[object].ob_type & 0xFF) == G_BOX)     /* Si Pop-Up de BOXs */
00537             {
00538                 i = match (adr, object);
00539                 if (i)
00540                 {
00541                     x = adresse->ob_x = x - adresse[i].ob_x;
00542                     y = adresse->ob_y = y - adresse[i].ob_y - adr[object].ob_height;
00543                     old = i;
00544                     adresse[old].ob_state |= CHECKED;
00545                 }
00546             }
00547         }
00548
00549         if (x + w > bureau.xd + bureau.wd - 5)
00550             x = adresse->ob_x = bureau.wd + bureau.xd - w - 5;
00551         if (x < bureau.xd + 5)
00552             x = adresse->ob_x = bureau.xd + 5;
00553         if (y + h > bureau.yd + bureau.hd - 5)
00554             y = adresse->ob_y = bureau.hd + bureau.yd - h - 5;
00555         if (y < bureau.yd + 5)
00556             y = adresse->ob_y = bureau.yd + 5;
00557
00558         get_bkgr (x, y, w, h, &image);
00559
00560         objc_draw (adresse, ROOT, MAX_DEPTH, x - 3, y - 3, w + 6, h + 6);
00561
00562         wind_update (BEG_MCTRL);    /* Bloquer le menu */
00563         if (f3d)
00564         {
00565             wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00566             if ((adr[object].ob_type & 0xFF) != G_BOX)
00567             {
00568                 if (top)    /* Restaurer provisoirement la palette par d‚faut */
00569                     set_palette (BLANK);
00570                 jaune[0] = 1000;
00571                 jaune[1] = 1000;
00572                 jaune[2] = 0;       /* Pr‚parer le jaune */
00573                 noir[0] = 0;
00574                 noir[1] = 0;
00575                 noir[2] = 0;        /* Pr‚parer le noir */
00576                 vq_color (work_display.handle, 6, 1, old_jaune);    /* Sauver l'ancien "jaune" */
00577                 vq_color (work_display.handle, 15, 1, old_noir);    /* Sauver l'ancien "noir" */
00578                 vs_color (work_display.handle, 6, jaune);                   /* Fixer le jaune */
00579                 vs_color (work_display.handle, 15, noir);                   /* Fixer le noir */
00580             }
00581             vsl_width (work_display.handle, 1);             /* Traits normaux */
00582             vsl_ends (work_display.handle, SQUARE, SQUARE);
00583             vsl_type (work_display.handle, SOLID);
00584             vsl_color (work_display.handle, BLACK);
00585             vst_font (work_display.handle, 1);
00586             vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &dummy, &dummy);
00587             vst_effects (work_display.handle, EFNONE);      /* D‚sactiver tous les effets */
00588             vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);   /* Align‚ en haut … gauche */
00589             vst_color (work_display.handle, 15);    /* Texte en noir */
00590             vsf_perimeter (work_display.handle, FALSE);
00591             vsf_interior (work_display.handle, FIS_SOLID);
00592             if (work_display.n_color >= 16)
00593                 vsf_color (work_display.handle, YELLOW);
00594             else
00595                 vsf_color (work_display.handle, WHITE);
00596         }
00597         do
00598         {
00599             evnt = evnt_multi (MU_BUTTON | MU_TIMER,
00600                                                  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00601                                                  b, 10, 0, &xm, &ym, &km, &dummy, &dummy, &dummy);
00602             if (evnt & MU_BUTTON)
00603             {
00604                 while (km)  /* Attend que le bouton de la souris soit relƒch‚ */
00605                     graf_mkstate (&dummy, &dummy, &km, &dummy);
00606                 sortie = TRUE;
00607             }
00608             else if (evnt == MU_TIMER)
00609             {
00610                 graf_mkstate (&xm, &ym, &dummy, &dummy);
00611                 ob = objc_find (adresse, ROOT, MAX_DEPTH, xm, ym);
00612                 if (old_ob != ob)   /* Si objet diff‚rent */
00613                 {
00614                     if ((old_ob != -1) && (NOT (adresse[old_ob].ob_state & DISABLED)))
00615                     {
00616                         if ((adresse[old_ob].ob_type & 0xFF) == G_BOX)
00617                         {
00618                             vswr_mode (work_display.handle, MD_XOR);    /* Dessin En Xor */
00619                             objc_offset (adresse, old_ob, &xs, &ys);
00620                             cadre[0] = xs - 3;
00621                             cadre[1] = ys - 3;
00622                             cadre[2] = xs + adresse[old_ob].ob_width + 2;
00623                             cadre[3] = ys - 3;
00624                             cadre[4] = xs + adresse[old_ob].ob_width + 2;
00625                             cadre[5] = ys + adresse[old_ob].ob_height + 2;
00626                             cadre[6] = xs - 3;
00627                             cadre[7] = ys + adresse[old_ob].ob_height + 2;
00628                             cadre[8] = xs - 3;
00629                             cadre[9] = ys - 3;
00630                             v_hide_c (work_display.handle);
00631                             v_pline (work_display.handle, 5, cadre);
00632                             v_show_c (work_display.handle, TRUE);
00633                         }
00634                         else
00635                         {
00636                             etat = adresse[old_ob].ob_state & 0xFF04;
00637                             objc_change (adresse, old_ob, 0, x, y, w, h, etat, FALSE);
00638                             objc_offset (adresse, old_ob, &xs, &ys);
00639                             objc_draw (adresse, ROOT, MAX_DEPTH, xs, ys,
00640                                                  adresse[old_ob].ob_width, adresse[old_ob].ob_height);
00641                         }
00642                     }
00643                     if ((ob > ROOT) && (NOT (adresse[ob].ob_state & DISABLED)))
00644                     {
00645                         if ((adresse[ob].ob_type & 0xFF) == G_BOX)
00646                         {
00647                             vswr_mode (work_display.handle, MD_XOR);    /* Dessin En Xor */
00648                             objc_offset (adresse, ob, &xs, &ys);
00649                             cadre[0] = xs - 3;
00650                             cadre[1] = ys - 3;
00651                             cadre[2] = xs + adresse[ob].ob_width + 2;
00652                             cadre[3] = ys - 3;
00653                             cadre[4] = xs + adresse[ob].ob_width + 2;
00654                             cadre[5] = ys + adresse[ob].ob_height + 2;
00655                             cadre[6] = xs - 3;
00656                             cadre[7] = ys + adresse[ob].ob_height + 2;
00657                             cadre[8] = xs - 3;
00658                             cadre[9] = ys - 3;
00659                             v_hide_c (work_display.handle);
00660                             v_pline (work_display.handle, 5, cadre);
00661                             v_show_c (work_display.handle, TRUE);
00662                             etat = adresse[ob].ob_state;
00663                         }
00664                         else if ((adresse[ob].ob_type & 0xFF) == G_STRING)
00665                         {
00666                             if (((adresse->ob_spec.obspec.fillpattern != ZERO) ||
00667                                         (adresse->ob_spec.obspec.interiorcol != ZERO)) &&
00668                                         (f3d))
00669                             {
00670                                 strcpy (chaine, get_text (adresse, ob));
00671                                 objc_offset (adresse, ob, &xs, &ys);
00672                                 v_hide_c (work_display.handle);
00673                                 vswr_mode (work_display.handle, MD_REPLACE);    /* Dessin En Remplacement */
00674                                 cadre[0] = xs;
00675                                 cadre[1] = ys;
00676                                 cadre[2] = xs + adresse[ob].ob_width - 1;
00677                                 cadre[3] = ys + adresse[ob].ob_height - 1;
00678                                 v_bar (work_display.handle, cadre);             /* Rectangle */
00679                                 cadre[0] = xs;
00680                                 cadre[1] = ys + adresse[ob].ob_height - 1;
00681                                 cadre[2] = xs;
00682                                 cadre[3] = ys;
00683                                 cadre[4] = xs + adresse[ob].ob_width - 1;
00684                                 cadre[5] = ys;
00685                                 v_pline (work_display.handle, 3, cadre);    /* Ligne d'ombre noire */
00686                                 vswr_mode (work_display.handle, MD_TRANS);  /* Texte en Transparent */
00687                                 v_gtext (work_display.handle, xs, ys, chaine);  /* Ecrire le texte */
00688                                 if (adresse[ob].ob_state & CHECKED)                             /* Si option check‚e, */
00689                                     v_gtext (work_display.handle, xs + 2, ys, ""); /* mettre une marque. */
00690                                 v_show_c (work_display.handle, TRUE);
00691                                 etat = adresse[ob].ob_state;
00692                             }
00693                             else
00694                                 etat = adresse[ob].ob_state | SELECTED;
00695                         }
00696                         else
00697                             etat = adresse[ob].ob_state | SELECTED;
00698                         objc_change (adresse, ob, 0, x, y, w, h, etat, TRUE);
00699                     }
00700                     old_ob = ob;
00701                 }
00702                 else                            /* Si mˆme objet */
00703                 {
00704                     if ((fl_scroll) && (ob == 1))
00705                     {                                   /* Si scroll : flˆche vers le haut */
00706                         objc_offset (adresse, 0, &xs, &ys);
00707                         if (cale > 1)
00708                         {
00709                             cale--;
00710                             for (i = naff + 1 ; i > 2 ; i--)
00711                             {
00712                                 adresse[i].ob_spec = adresse[i - 1].ob_spec;
00713                                 adresse[i].ob_state = adresse[i - 1].ob_state;
00714                             }
00715                             adresse[2].ob_spec = old_adresse[cale].ob_spec;
00716                             adresse[2].ob_state = old_adresse[cale].ob_state;
00717                             fill_tab (pxy, 8,
00718                                                 xs, ys + haut,
00719                                                 xs + adresse->ob_width, ys + (naff * haut),
00720                                                 xs, ys + (2 * haut),
00721                                                 xs + adresse->ob_width, ys + ((naff + 1) * haut));
00722                             v_hide_c (work_display.handle);
00723                             etat = adresse[ob].ob_state &= ~SELECTED;
00724                             objc_change (adresse, ob, 0, x, y, w, h, etat, TRUE);
00725                             vro_cpyfm (work_display.handle, S_ONLY, pxy, &nul, &nul);
00726                             etat = adresse[ob].ob_state |= SELECTED;
00727                             objc_change (adresse, ob, 0, x, y, w, h, etat, TRUE);
00728                             v_show_c (work_display.handle, TRUE);
00729                             objc_draw (adresse, ROOT, 2,
00730                                                  x + adresse[2].ob_x, y + adresse[2].ob_y,
00731                                                  adresse[2].ob_width, adresse[2].ob_height);
00732                         }
00733                     }
00734                     else if ((fl_scroll) && (ob == down))
00735                     {                                   /* Si scroll : flˆche vers le bas */
00736                         objc_offset (adresse, 0, &xs, &ys);
00737                         if ((cale + naff) <= nbre)
00738                         {
00739                             cale++;
00740                             for (i = 2 ; i < (naff + 1) ; i++)
00741                             {
00742                                 adresse[i].ob_spec = adresse[i + 1].ob_spec;
00743                                 adresse[i].ob_state = adresse[i + 1].ob_state;
00744                             }
00745                             adresse[naff + 1].ob_spec = old_adresse[cale + naff - 1].ob_spec;
00746                             adresse[naff + 1].ob_state = old_adresse[cale + naff - 1].ob_state;
00747                             fill_tab (pxy, 8,
00748                                                 xs, ys + (2 * haut),
00749                                                 xs + adresse->ob_width, ys + ((naff + 1) * haut) - 1,
00750                                                 xs, ys + haut,
00751                                                 xs + adresse->ob_width, ys + (naff * haut) - 1);
00752                             v_hide_c (work_display.handle);
00753                             etat = adresse[ob].ob_state &= ~SELECTED;
00754                             objc_change (adresse, ob, 0, x, y, w, h, etat, TRUE);
00755                             vro_cpyfm (work_display.handle, S_ONLY, pxy, &nul, &nul);
00756                             etat = adresse[ob].ob_state |= SELECTED;
00757                             objc_change (adresse, ob, 0, x, y, w, h, etat, TRUE);
00758                             v_show_c (work_display.handle, TRUE);
00759                             objc_draw (adresse, ROOT, 2,
00760                                                  x + adresse[naff + 1].ob_x, y + adresse[naff + 1].ob_y,
00761                                                  adresse[naff + 1].ob_width, adresse[naff + 1].ob_height);
00762                         }
00763                     }
00764                 }
00765             }
00766         } while (NOT sortie);
00767         if ((adr[object].ob_type & 0xFF) != G_BOX)
00768         {
00769             if (f3d)
00770             {
00771                 vs_color (work_display.handle, 6, old_jaune);   /* Restaurer le jaune */
00772                 vs_color (work_display.handle, 15, old_noir);   /* Restaurer le noir */
00773                 if (top)
00774                 {       /* Restaurer la palette courante */
00775                     index = find_index (top);
00776                     set_palette (index);
00777                 }
00778             }
00779         }
00780         wind_update (END_MCTRL);    /* D‚bloquer le menu */
00781
00782         put_bkgr (x, y, w, h, &image);
00783         free (image.fd_addr);   /* Lib‚rer tampon image */
00784
00785         if ((ob > ZERO) && (NOT (adresse[ob].ob_state & DISABLED)))
00786         {
00787             etat = adresse[ob].ob_state & 0xFF00;
00788             objc_change (adresse, ob, 0, x, y, w, h, etat, FALSE);
00789             if ((adresse[ob].ob_type & 0xFF) == G_STRING)
00790             {
00791                 strcpy (chaine, get_text (adresse, ob));
00792                 set_text (adr, object, trim (chaine));
00793             }
00794             else if ((adresse[ob].ob_type & 0xFF) == G_IMAGE)
00795                 adr[object].ob_spec = adresse[ob].ob_spec;
00796             else if ((adresse[ob].ob_type & 0xFF) == G_BOX)
00797             {
00798                 adr[object].ob_spec.obspec.fillpattern = adresse[ob].ob_spec.obspec.fillpattern;
00799                 adr[object].ob_spec.obspec.interiorcol = adresse[ob].ob_spec.obspec.interiorcol;
00800             }
00801         }
00802         /* MA 16/07/94 */
00803         if (ob < ZERO)      /* Clic dehors */
00804             cliq_in = FALSE;
00805         else                            /* Clic dedans */
00806             cliq_in = TRUE;
00807         if (old)
00808         {
00809             if (fl_scroll)
00810                 old_adresse[old].ob_state &= ~CHECKED;
00811             else
00812                 adresse[old].ob_state &= ~CHECKED;
00813         }
00814         if (fl_scroll)
00815         {
00816             free (scroll);
00817             scroll = (OBJECT *) ZERO;
00818         }
00819     }
00820 }
00821 /* #] pop_up () Routine de gestion de menu Pop-Up :                             */
00822 /* #[ pop_liste () Routine de gestion de menu Pop-Liste :                   */
00823 void pop_liste (OBJECT *adr, int object)
00824 {
00825 OBJECT *adresse, *pop;
00826 int i, tree, x, y, w, h, dummy, old_ob = -1, ob = 0, b[8], xm, ym, km,
00827         evnt, sortie = FALSE, etat, old = ZERO, cale, nbre = ZERO, haut, maxw,
00828         oldw_r, oldw_b, oldx_a, ysl, oym, oys, delta, yas, pxy[8], xbk, ybk, ha,
00829         cadre[6], xs, ys, jaune[3], old_jaune[3], noir[3], old_noir[3], f3d = FALSE, top, index;
00830 MFDB image, nul = {0};
00831 char chaine[MAX_LEN];
00832
00833     tree = (adr[object].ob_state) >> 8; /* R‚cupŠre nø formulaire associ‚ */
00834     adresse = ir_trindex[tree];
00835     if (adresse->ob_flags & BKGR)
00836         f3d = TRUE;
00837
00838     if (tree)
00839     {
00840         do {} while (NOT (adresse[nbre++].ob_flags & LASTOB));  /* Compter les options */
00841         nbre--;
00842         if (nbre < 9)
00843         {
00844             pop_up (adr, object);
00845             return;
00846         }
00847         pop = bi_trindex[BIGLIST];
00848         i = match (adr, object);
00849         if (i)
00850         {
00851             adresse[i].ob_state |= CHECKED;
00852             old = i;
00853         }
00854         cale = max (old, 1);
00855         if ((cale + 8) > nbre)
00856             cale = nbre - 7;
00857         haut = pop[BL_S1].ob_height;
00858
00859         oldw_r = pop->ob_width;
00860         oldw_b = pop[BL_BKGR].ob_width;
00861         oldx_a = pop[BL_BA].ob_x;
00862         maxw = adresse->ob_width;
00863         pop->ob_width += maxw;
00864         pop[BL_BKGR].ob_width = maxw;
00865         pop[BL_BA].ob_x += (maxw + 1);
00866         pop[BL_BKGR].ob_spec.obspec.interiorcol = adresse->ob_spec.obspec.interiorcol;
00867         pop[BL_BKGR].ob_spec.obspec.fillpattern = adresse->ob_spec.obspec.fillpattern;
00868         objc_offset (adr, object, &x, &y);      /* Position bouton cliqu‚ */
00869         w = pop->ob_width;      /* Prendre ses */
00870         h = pop->ob_height;     /* dimensions. */
00871         if (y + h + adr[object].ob_height < bureau.hd + 3)      /* S'il y a la place */
00872             y += (adr[object].ob_height + 2);                       /* Se placer dessous */
00873         else                                                                                    /* Sinon */
00874             y -= (h + 3);                                                               /* Se placer dessus */
00875         pop->ob_x = x;              /* Positionner le */
00876         pop->ob_y = y;              /* formulaire pop_up. */
00877
00878         if (x + w > bureau.xd + bureau.wd - 5)
00879             x = pop->ob_x = bureau.wd + bureau.xd - w - 5;
00880         if (x < bureau.xd + 5)
00881             x = pop->ob_x = bureau.xd + 5;
00882
00883         ha = pop[BL_ASC].ob_height;
00884         pop[BL_SL].ob_height = (ha * (8 * haut) / (haut * nbre));
00885         pop[BL_SL].ob_y = (int)(((double)ha / ((double)nbre) * (double)(cale - 1)));
00886
00887         for (i = BL_S1 ; i <= BL_S8 ; i++)  /* Remplir les chaŒnes */
00888         {
00889             pop[i].ob_spec = adresse[cale + i - BL_S1].ob_spec;
00890             pop[i].ob_state = adresse[cale + i - BL_S1].ob_state;
00891             pop[i].ob_width = maxw;
00892         }
00893
00894         objc_offset (pop, BL_BKGR, &xbk, &ybk);
00895         get_bkgr (x, y, w, h, &image);
00896
00897         objc_draw (pop, ROOT, MAX_DEPTH, x - 3, y - 3, w + 6, h + 6);
00898
00899         wind_update (BEG_MCTRL);    /* Bloquer le menu */
00900         if (f3d)
00901         {
00902             wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00903             if (top)    /* Restaurer provisoirement la palette par d‚faut */
00904                 set_palette (BLANK);
00905             jaune[0] = 1000;
00906             jaune[1] = 1000;
00907             jaune[2] = 0;       /* Pr‚parer le jaune */
00908             noir[0] = 0;
00909             noir[1] = 0;
00910             noir[2] = 0;        /* Pr‚parer le noir */
00911             vq_color (work_display.handle, 6, 1, old_jaune);    /* Sauver l'ancien "jaune" */
00912             vq_color (work_display.handle, 15, 1, old_noir);    /* Sauver l'ancien "noir" */
00913             vs_color (work_display.handle, 6, jaune);                   /* Fixer le jaune */
00914             vs_color (work_display.handle, 15, noir);                   /* Fixer le noir*/
00915             vsl_width (work_display.handle, 1);                             /* Traits normaux */
00916             vsl_ends (work_display.handle, SQUARE, SQUARE);
00917             vsl_type (work_display.handle, SOLID);
00918             vsl_color (work_display.handle, BLACK);
00919             vst_font (work_display.handle, 1);
00920             vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &dummy, &dummy);
00921             vst_effects (work_display.handle, EFNONE);      /* D‚sactiver tous les effets */
00922             vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);   /* Align‚ en haut … gauche */
00923             vst_color (work_display.handle, 15);    /* Texte en noir */
00924             vsf_perimeter (work_display.handle, FALSE);
00925             vsf_interior (work_display.handle, FIS_SOLID);
00926             if (work_display.n_color >= 16)
00927                 vsf_color (work_display.handle, YELLOW);
00928             else
00929                 vsf_color (work_display.handle, WHITE);
00930         }
00931         do
00932         {
00933             evnt = evnt_multi (MU_BUTTON | MU_TIMER,
00934                                                  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00935                                                  b, 10, 0, &xm, &ym, &km, &dummy, &dummy, &dummy);
00936             if (evnt & MU_BUTTON)
00937             {
00938                 if ((ob >= BL_UP) && (ob <= BL_SL))
00939                 {
00940                     switch (ob)
00941                     {
00942                     case BL_ASC :
00943                         objc_offset (pop, BL_SL, &dummy, &ysl);     /* Position slider */
00944                         while (km)
00945                         {
00946                             evnt_timer (100, 0);
00947                             if (ym < ysl)           /* Si page haut */
00948                             {
00949                                 if (cale > 1)
00950                                 {
00951                                     cale -= 8;
00952                                     if (cale < 1)
00953                                         cale = 1;
00954                                     for (i = BL_S1 ; i <= BL_S8 ; i++)  /* Remplir les chaŒnes */
00955                                     {
00956                                         pop[i].ob_spec = adresse[cale + i - BL_S1].ob_spec;
00957                                         pop[i].ob_state = adresse[cale + i - BL_S1].ob_state;
00958                                     }
00959                                     pop[BL_SL].ob_y = (int)(((double)ha / ((double)nbre) * (double)(cale - 1)));
00960                                     objc_draw (pop, BL_ASC, 2,
00961                                                          x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
00962                                                          pop[BL_BA].ob_width, pop[BL_BA].ob_height);
00963                                     objc_draw (pop, BL_BKGR, 2,
00964                                                          x + pop[BL_BKGR].ob_x, y + pop[BL_BKGR].ob_y,
00965                                                          pop[BL_BKGR].ob_width, pop[BL_BKGR].ob_height);
00966                                 }
00967                             }
00968                             else                            /* Si page bas */
00969                             {
00970                                 if (cale < nbre - 7)
00971                                 {
00972                                     cale += 8;
00973                                     if (cale > nbre - 7)
00974                                         cale = nbre - 7;
00975                                     for (i = BL_S1 ; i <= BL_S8 ; i++)  /* Remplir les chaŒnes */
00976                                     {
00977                                         pop[i].ob_spec = adresse[cale + i - BL_S1].ob_spec;
00978                                         pop[i].ob_state = adresse[cale + i - BL_S1].ob_state;
00979                                     }
00980                                     pop[BL_SL].ob_y = (int)(((double)ha / ((double)nbre) * (double)(cale - 1)));
00981                                     objc_draw (pop, BL_ASC, 2,
00982                                                          x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
00983                                                          pop[BL_BA].ob_width, pop[BL_BA].ob_height);
00984                                     objc_draw (pop, BL_BKGR, 2,
00985                                                          x + pop[BL_BKGR].ob_x, y + pop[BL_BKGR].ob_y,
00986                                                          pop[BL_BKGR].ob_width, pop[BL_BKGR].ob_height);
00987                                 }
00988                             }
00989                             graf_mkstate (&dummy, &dummy, &km, &dummy);
00990                         }
00991                         break;
00992                     case BL_SL :
00993                         objc_offset (pop, BL_SL, &dummy, &ysl);     /* Position slider */
00994                         objc_offset (pop, BL_ASC, &dummy, &yas);    /* Position ascenceur */
00995                         oym = ym;
00996                         oys = pop[BL_SL].ob_y;
00997                         pop[BL_SL].ob_state = SELECTED;
00998                         objc_draw (pop, BL_SL, 2,
00999                                              x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
01000                                              pop[BL_BA].ob_width, pop[BL_BA].ob_height);
01001                         while (km)
01002                         {
01003                             graf_mkstate (&dummy, &ym, &dummy, &dummy);
01004                             delta = ym - ysl;
01005                             if (ym != oym)
01006                             {
01007                                 if ((ym - delta >= yas) &&
01008                                         (ym - delta + pop[BL_SL].ob_height <= yas + pop[BL_ASC].ob_height))
01009                                 {
01010                                     if ((ym > oym) && (ym > ysl))
01011                                     {
01012                                         pop[BL_SL].ob_y += (ym - oym);
01013                                         pop[BL_SL].ob_y = min (pop[BL_SL].ob_y, ha - pop[BL_SL].ob_height);
01014                                     }
01015                                     else if ((ym < oym) && (ym < ysl + pop[BL_SL].ob_height))
01016                                     {
01017                                         pop[BL_SL].ob_y -= (oym - ym);
01018                                         pop[BL_SL].ob_y = max (pop[BL_SL].ob_y, 0);
01019                                     }
01020                                     if (oys != pop[BL_SL].ob_y)
01021                                     {
01022                                         cale = (int)((double)nbre /
01023                                                      ((double)ha / (double)pop[BL_SL].ob_y)) + 1;
01024                                         objc_draw (pop, BL_ASC, 2,
01025                                                              x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
01026                                                              pop[BL_BA].ob_width, pop[BL_BA].ob_height);
01027                                         objc_offset (pop, BL_SL, &dummy, &ysl);     /* Position slider */
01028                                         for (i = BL_S1 ; i <= BL_S8 ; i++)  /* Remplir les chaŒnes */
01029                                         {
01030                                             pop[i].ob_spec = adresse[cale + i - BL_S1].ob_spec;
01031                                             pop[i].ob_state = adresse[cale + i - BL_S1].ob_state;
01032                                         }
01033                                         objc_draw (pop, BL_BKGR, 2,
01034                                                              x + pop[BL_BKGR].ob_x, y + pop[BL_BKGR].ob_y,
01035                                                              pop[BL_BKGR].ob_width, pop[BL_BKGR].ob_height);
01036                                         oys = pop[BL_SL].ob_y;
01037                                     }
01038                                 }
01039                             }
01040                             oym = ym;
01041                             graf_mkstate (&dummy, &dummy, &km, &dummy);
01042                         }
01043                         pop[BL_SL].ob_state = NORMAL;
01044                         objc_draw (pop, BL_SL, 2,
01045                                              x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
01046                                              pop[BL_BA].ob_width, pop[BL_BA].ob_height);
01047                         break;
01048                     case BL_UP :
01049                         pop[BL_UP].ob_state = SELECTED;
01050                         objc_draw (pop, BL_UP, 2,
01051                                              x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
01052                                              pop[BL_BA].ob_width, pop[BL_BA].ob_height);
01053                         while (km)
01054                         {
01055                             if (cale > 1)
01056                             {
01057                                 evnt_timer (50, 0);
01058                                 cale--;
01059                                 for (i = BL_S8 ; i > (BL_S1) ; i--)
01060                                 {
01061                                     pop[i].ob_spec = pop[i - 1].ob_spec;
01062                                     pop[i].ob_state = pop[i - 1].ob_state;
01063                                 }
01064                                 pop[BL_S1].ob_spec = adresse[cale].ob_spec;
01065                                 pop[BL_S1].ob_state = adresse[cale].ob_state;
01066                                 fill_tab (pxy, 8,
01067                                                     xbk, ybk,
01068                                                     xbk + maxw, ybk + (7 * haut),
01069                                                     xbk, ybk + haut,
01070                                                     xbk + maxw, ybk + (8 * haut));
01071                                 v_hide_c (work_display.handle);
01072                                 vro_cpyfm (work_display.handle, S_ONLY, pxy, &nul, &nul);
01073                                 v_show_c (work_display.handle, TRUE);
01074                                 objc_draw (pop, ROOT, 2,
01075                                                      x + pop[BL_S1].ob_x, y + pop[BL_S1].ob_y,
01076                                                      pop[BL_S1].ob_width, pop[BL_S1].ob_height);
01077                                 pop[BL_SL].ob_y = (int)(((double)ha / ((double)nbre) * (double)(cale - 1)));
01078                                 objc_draw (pop, BL_ASC, 2,
01079                                                      x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
01080                                                      pop[BL_BA].ob_width, pop[BL_BA].ob_height);
01081                             }
01082                             graf_mkstate (&dummy, &dummy, &km, &dummy);
01083                         }
01084                         pop[BL_UP].ob_state = NORMAL;
01085                         objc_draw (pop, BL_UP, 2,
01086                                              x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
01087                                              pop[BL_BA].ob_width, pop[BL_BA].ob_height);
01088                         break;
01089                     case BL_DN :
01090                         pop[BL_DN].ob_state = SELECTED;
01091                         objc_draw (pop, BL_DN, 2,
01092                                              x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
01093                                              pop[BL_BA].ob_width, pop[BL_BA].ob_height);
01094                         while (km)
01095                         {
01096                             if (cale + 7 < nbre)
01097                             {
01098                                 evnt_timer (50, 0);
01099                                 cale++;
01100                                 for (i = BL_S1 ; i < (BL_S8) ; i++)
01101                                 {
01102                                     pop[i].ob_spec = pop[i + 1].ob_spec;
01103                                     pop[i].ob_state = pop[i + 1].ob_state;
01104                                 }
01105                                 pop[BL_S8].ob_spec = adresse[cale + 7].ob_spec;
01106                                 pop[BL_S8].ob_state = adresse[cale + 7].ob_state;
01107                                 fill_tab (pxy, 8,
01108                                                     xbk, ybk + haut,
01109                                                     xbk + maxw, ybk + (8 * haut) - 1,
01110                                                     xbk, ybk,
01111                                                     xbk + maxw, ybk + (7 * haut) - 2);
01112                                 v_hide_c (work_display.handle);
01113                                 vro_cpyfm (work_display.handle, S_ONLY, pxy, &nul, &nul);
01114                                 v_show_c (work_display.handle, TRUE);
01115                                 objc_draw (pop, ROOT, 2,
01116                                                      x + pop[BL_S8].ob_x, y + pop[BL_S8].ob_y,
01117                                                      pop[BL_S8].ob_width, pop[BL_S8].ob_height);
01118                                 pop[BL_SL].ob_y = (int)(((double)ha / ((double)nbre) * (double)(cale - 1)));
01119                                 objc_draw (pop, BL_ASC, 2,
01120                                                      x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
01121                                                      pop[BL_BA].ob_width, pop[BL_BA].ob_height);
01122                             }
01123                             graf_mkstate (&dummy, &dummy, &km, &dummy);
01124                         }
01125                         pop[BL_DN].ob_state = NORMAL;
01126                         objc_draw (pop, BL_DN, 2,
01127                                              x + pop[BL_BA].ob_x, y + pop[BL_BA].ob_y,
01128                                              pop[BL_BA].ob_width, pop[BL_BA].ob_height);
01129                         break;
01130                     }
01131                 }
01132                 else
01133                 {
01134                     while (km)  /* Attend que le bouton de la souris soit relƒch‚ */
01135                         graf_mkstate (&dummy, &dummy, &km, &dummy);
01136                     sortie = TRUE;
01137                 }
01138             }
01139             else if (evnt == MU_TIMER)
01140             {
01141                 graf_mkstate (&xm, &ym, &dummy, &dummy);
01142                 ob = objc_find (pop, ROOT, MAX_DEPTH, xm, ym);
01143                 if (old_ob != ob)   /* Si objet diff‚rent */
01144                 {
01145                     if ((old_ob != -1) && (NOT (pop[old_ob].ob_state & DISABLED)) &&
01146                             (old_ob >= BL_S1) && (old_ob <= BL_S8))
01147                     {
01148                         if (((pop[BL_BKGR].ob_spec.obspec.fillpattern != ZERO) ||
01149                                     (pop[BL_BKGR].ob_spec.obspec.interiorcol != ZERO)) &&
01150                                     (f3d))
01151                         {
01152                             objc_offset (pop, old_ob, &xs, &ys);
01153                             objc_draw (pop, ROOT, MAX_DEPTH, xs, ys,
01154                                                  pop[old_ob].ob_width, pop[old_ob].ob_height);
01155                         }
01156                         else
01157                         {
01158                             etat = pop[old_ob].ob_state & 0xFF00;
01159                             objc_change (pop, old_ob, 0, x, y, w, h, etat, TRUE);
01160                         }
01161                     }
01162                     if ((ob >= BL_S1) && (ob <= BL_S8) && (NOT (pop[ob].ob_state & DISABLED)))
01163                     {
01164                         if (((pop[BL_BKGR].ob_spec.obspec.fillpattern != ZERO) ||
01165                                     (pop[BL_BKGR].ob_spec.obspec.interiorcol != ZERO)) &&
01166                                     (f3d))
01167                         {
01168                             strcpy (chaine, get_text (pop, ob));
01169                             objc_offset (pop, ob, &xs, &ys);
01170                             v_hide_c (work_display.handle);
01171                             vswr_mode (work_display.handle, MD_REPLACE);    /* Dessin En Remplacement */
01172                             cadre[0] = xs;
01173                             cadre[1] = ys;
01174                             cadre[2] = xs + pop[ob].ob_width - 1;
01175                             cadre[3] = ys + pop[ob].ob_height - 1;
01176                             v_bar (work_display.handle, cadre);             /* Rectangle */
01177                             cadre[0] = xs;
01178                             cadre[1] = ys + pop[ob].ob_height - 1;
01179                             cadre[2] = xs;
01180                             cadre[3] = ys;
01181                             cadre[4] = xs + pop[ob].ob_width - 1;
01182                             cadre[5] = ys;
01183                             v_pline (work_display.handle, 3, cadre);    /* Ligne d'ombre noire */
01184                             vswr_mode (work_display.handle, MD_TRANS);  /* Texte en Transparent */
01185                             v_gtext (work_display.handle, xs, ys, chaine);  /* Ecrire le texte */
01186                             if (pop[ob].ob_state & CHECKED)                             /* Si option check‚e, */
01187                                 v_gtext (work_display.handle, xs + 2, ys, ""); /* mettre une marque. */
01188                             v_show_c (work_display.handle, TRUE);
01189                         }
01190                         else
01191                         {
01192                             etat = pop[ob].ob_state | SELECTED;
01193                             objc_change (pop, ob, 0, x, y, w, h, etat, TRUE);
01194                         }
01195                     }
01196                     old_ob = ob;
01197                 }
01198             }
01199         } while (NOT sortie);
01200         if (f3d)
01201         {
01202             vs_color (work_display.handle, 6, old_jaune);   /* Restaurer le jaune */
01203             vs_color (work_display.handle, 15, old_noir);   /* Restaurer le noir */
01204             if (top)
01205             {       /* Restaurer la palette courante */
01206                 index = find_index (top);
01207                 set_palette (index);
01208             }
01209         }
01210         wind_update (END_MCTRL);    /* D‚bloquer le menu */
01211
01212         put_bkgr (x, y, w, h, &image);
01213         pop->ob_width = oldw_r;
01214         pop[BL_BKGR].ob_width = oldw_b;
01215         pop[BL_BA].ob_x = oldx_a;
01216         free (image.fd_addr);   /* Lib‚rer tampon image */
01217
01218         if ((ob >= BL_S1) && (ob <= BL_S8) && (NOT (pop[ob].ob_state & DISABLED)))
01219         {
01220             etat = pop[ob].ob_state & 0xFF00;
01221             objc_change (pop, ob, 0, x, y, w, h, etat, FALSE);
01222             strcpy (chaine, get_text (pop, ob));
01223             set_text (adr, object, trim (chaine));
01224         }
01225         if (old)
01226             adresse[old].ob_state &= ~CHECKED;
01227
01228         /* MA 16/07/94 */
01229         if (ob < ZERO)      /* Clic dehors */
01230             cliq_in = FALSE;
01231         else                            /* Clic dedans */
01232             cliq_in = TRUE;
01233     }
01234 }
01235 /* #] pop_liste () Routine de gestion de menu Pop-Liste :                   */
01236 /* #[ match () Cherche correspondance bouton et pop-up :                    */
01250 int match (OBJECT *adr, int button)
01251 {
01252 int i = 1, tree, trame, color;
01253 char bouton[MAX_LEN], option[MAX_LEN];
01254 OBJECT *adrpu;
01255 BITBLK *imag;
01256
01257     if (NOT (adr[button].ob_state & SHADOWED))  /* Si pas pop-up */
01258         return ZERO;                                                            /* Retourner 0 */
01259
01260     tree = (adr[button].ob_state) >> 8; /* R‚cup‚rer nø formulaire associ‚ */
01261     if (NOT tree)                                               /* S'il n'y en a pas */
01262         return ZERO;                                            /* retourner 0 */
01263
01264     adrpu = ir_trindex[tree];
01265
01266     if (((adr[button].ob_type & 0xFF) == G_BUTTON) ||
01267             ((adr[button].ob_type & 0xFF) == G_USERDEF))    /* Si Pop-Up de STRINGs */
01268     {
01269         strcpy (bouton, get_text (adr, button));
01270         trim (bouton);
01271         do
01272         {
01273             strcpy (option, get_text (adrpu, i));
01274             trim (option);
01275             if ((adrpu[i].ob_type & 0xFF) == G_STRING)
01276             {
01277                 if (strcmp (bouton, option) == ZERO)        /* Si occurence */
01278                     return i;                                                           /* retourner nø option */
01279             }
01280         } while (NOT (adrpu[i++].ob_flags & LASTOB));
01281     }
01282     else if ((adr[button].ob_type & 0xFF) == G_IMAGE)   /* Si Pop-Up d'IMAGEs */
01283     {
01284         imag = adr[button].ob_spec.bitblk;
01285         do
01286         {
01287             if ((adrpu[i].ob_type & 0xFF) == G_IMAGE)
01288             {
01289                 if (imag == adrpu[i].ob_spec.bitblk)    /* Si occurence */
01290                     return i;                                                       /* retourner nø option */
01291             }
01292         } while (NOT (adrpu[i++].ob_flags & LASTOB));
01293     }
01294     else if ((adr[button].ob_type & 0xFF) == G_BOX)     /* Si Pop-Up de BOXs  */
01295     {
01296         trame = adr[button].ob_spec.obspec.fillpattern;
01297         color = adr[button].ob_spec.obspec.interiorcol;
01298         do
01299         {
01300             if ((adrpu[i].ob_type & 0xFF) == G_BOX)
01301             {
01302                 if ((trame == adrpu[i].ob_spec.obspec.fillpattern) &&
01303                         (color == adrpu[i].ob_spec.obspec.interiorcol)) /* Si occurence */
01304                     return i;                                                           /* retourner nø option */
01305             }
01306         } while (NOT (adrpu[i++].ob_flags & LASTOB));
01307     }
01308     return ZERO;                                                        /* Si pas occurence, retourner 0 */
01309 }
01310 /* #] match () Cherche correspondance bouton et pop-up :                    */
01311 /* #[ set_popup () Fixe une option de bouton pop_up :                           */
01321 void set_popup (OBJECT *adr, int button, int option)
01322 {
01323 int tree;
01324 char texte[MAX_LEN];
01325 OBJECT *adrpu;
01326
01327     if (NOT (adr[button].ob_state & SHADOWED))  /* Si pas pop-up */
01328         return;                                                                     /* Ressortir */
01329
01330     tree = (adr[button].ob_state) >> 8; /* R‚cup‚rer nø formulaire associ‚ */
01331     if (NOT tree)                                               /* S'il n'y en a pas */
01332         return;                                                     /* ressortir */
01333
01334     adrpu = ir_trindex[tree];
01335
01336     if (((adr[button].ob_type & 0xFF) == G_BUTTON) ||
01337             ((adr[button].ob_type & 0xFF) == G_USERDEF))    /* Si Pop-Up de STRINGs */
01338     {
01339         strcpy (texte, get_text (adrpu, option));
01340         set_text (adr, button, trim (texte));
01341     }
01342     else if ((adr[button].ob_type & 0xFF) == G_IMAGE)   /* Si Pop-Up d'IMAGEs */
01343     {
01344         adr[button].ob_spec = adrpu[option].ob_spec;
01345     }
01346     else if ((adr[button].ob_type & 0xFF) == G_BOX)     /* Si Pop-Up de BOXs  */
01347     {
01348         adr[button].ob_spec.obspec.fillpattern = adrpu[option].ob_spec.obspec.fillpattern;
01349         adr[button].ob_spec.obspec.interiorcol = adrpu[option].ob_spec.obspec.interiorcol;
01350     }
01351 }
01352 /* #] set_popup () Fixe une option de bouton pop_up :                           */
01353 /* #[ next_option () Option suivante d'un pop-up :                              */
01354 void next_option (OBJECT *adr, int object, int form)
01355 {
01356 OBJECT *adresse;
01357 int i = 1, tree, ob, trouve = FALSE, trame, color;
01358 BITBLK *imag;
01359 char chaine[MAX_LEN], bouton[MAX_LEN], option[MAX_LEN];
01360
01361     tree = (adr[object].ob_state) >> 8; /* R‚cupŠre nø formulaire associ‚ */
01362     if (NOT tree)                   /* Si pas de formulaire associ‚ */
01363         tree = form;                /* Prendre celui qui est transmis */
01364
01365     adresse = ir_trindex[tree];
01366
01367     if (tree)
01368     {
01369             /* Chercher la correspondance */
01370         if (((adr[object].ob_type & 0xFF) == G_BUTTON) ||
01371                 ((adr[object].ob_type >> 8) == B_POPUP) ||
01372                 ((adr[object].ob_type >> 8) == B_LIST))     /* Si Pop-Up de STRINGs */
01373         {
01374             strcpy (bouton, get_text (adr, object));
01375             trim (bouton);
01376             do
01377             {
01378                 if ((adresse[i].ob_type & 0xFF) == G_STRING)
01379                 {
01380                     strcpy (option, get_text (adresse, i));
01381                     trim (option);
01382                     if (strcmp (bouton, option) == ZERO)
01383                         trouve = i;
01384                 }
01385             } while ((NOT (adresse[i++].ob_flags & LASTOB)) && (NOT trouve));
01386         }
01387         else if ((adr[object].ob_type & 0xFF) == G_IMAGE)   /* Si Pop-Up d'IMAGEs */
01388         {
01389             imag = adr[object].ob_spec.bitblk;
01390             do
01391             {
01392                 if ((adresse[i].ob_type & 0xFF) == G_IMAGE)
01393                 {
01394                     if (imag == adresse[i].ob_spec.bitblk)
01395                         trouve = i;
01396                 }
01397             } while ((NOT (adresse[i++].ob_flags & LASTOB)) && (NOT trouve));
01398         }
01399         else if ((adr[object].ob_type & 0xFF) == G_BOX)     /* Si Pop-Up de BOXs */
01400         {
01401             trame = adr[object].ob_spec.obspec.fillpattern;
01402             color = adr[object].ob_spec.obspec.interiorcol;
01403             do
01404             {
01405                 if ((adresse[i].ob_type & 0xFF) == G_BOX)
01406                 {
01407                     if ((trame == adresse[i].ob_spec.obspec.fillpattern) &&
01408                             (color == adresse[i].ob_spec.obspec.interiorcol))
01409                         trouve = i;
01410                 }
01411             } while ((NOT (adresse[i++].ob_flags & LASTOB)) && (NOT trouve));
01412         }
01413         if (trouve)
01414         {
01415             if (NOT (adresse[trouve].ob_flags & LASTOB))
01416                 ob = trouve + 1;
01417             else
01418                 ob = 1;
01419         }
01420         else
01421             ob = 1;
01422
01423         while ((adresse[ob].ob_state & DISABLED) && (ob != trouve))
01424         {
01425             ob++;
01426             if (adresse[ob].ob_flags & LASTOB)
01427                 ob = 1;
01428         }
01429
01430         if ((adresse[ob].ob_type & 0xFF) == G_STRING)
01431         {
01432             strcpy (chaine, get_text (adresse, ob));
01433             set_text (adr, object, trim (chaine));
01434         }
01435         else if ((adresse[ob].ob_type & 0xFF) == G_IMAGE)
01436         {
01437             adr[object].ob_spec = adresse[ob].ob_spec;
01438         }
01439         else if ((adresse[ob].ob_type & 0xFF) == G_BOX)
01440         {
01441             adr[object].ob_spec.obspec.fillpattern = adresse[ob].ob_spec.obspec.fillpattern;
01442             adr[object].ob_spec.obspec.interiorcol = adresse[ob].ob_spec.obspec.interiorcol;
01443         }
01444     }
01445 }
01446 /* #] next_option () Option suivante d'un pop-up :                              */
01447 /* #[ create_scroll () Construit un scroll_menu :                                   */
01448 int create_scroll (OBJECT *pu, int y, int *nb, int first)
01449 {
01450 int maxw, nbre = ZERO, naff, i = ZERO;
01451
01452     first = max (first, 1);
01453     maxw = pu->ob_width;        /* Largeur du pop-up */
01454     do {} while (NOT (pu[nbre++].ob_flags & LASTOB));   /* Compter les options */
01455     nbre--;
01456     *nb = nbre;
01457     naff = ((bureau.hd - y - 3) / bi_trindex[BIGARRS][SC_UP].ob_height) - 1;
01458     if ((first + naff) > nbre)
01459         first = nbre - naff + 1;
01460     bi_trindex[BIGARRS]->ob_width = maxw;       /* Ajuster les largeurs */
01461     bi_trindex[BIGARRS][SC_UP].ob_width = maxw;
01462     bi_trindex[BIGARRS][SC_DN].ob_width = maxw;
01463     bi_trindex[BIGARRS]->ob_height = (naff + 2) * bi_trindex[BIGARRS][SC_UP].ob_height;
01464     bi_trindex[BIGARRS]->ob_spec.obspec.interiorcol = pu->ob_spec.obspec.interiorcol;
01465     bi_trindex[BIGARRS]->ob_spec.obspec.fillpattern = pu->ob_spec.obspec.fillpattern;
01466     bi_trindex[BIGARRS][SC_UP].ob_spec.obspec.interiorcol = pu->ob_spec.obspec.interiorcol;
01467     bi_trindex[BIGARRS][SC_UP].ob_spec.obspec.fillpattern = pu->ob_spec.obspec.fillpattern;
01468     bi_trindex[BIGARRS][SC_DN].ob_spec.obspec.interiorcol = pu->ob_spec.obspec.interiorcol;
01469     bi_trindex[BIGARRS][SC_DN].ob_spec.obspec.fillpattern = pu->ob_spec.obspec.fillpattern;
01470     scroll = (OBJECT *)malloc ((nbre + 3) * sizeof (OBJECT));
01471     memcpy (scroll, bi_trindex[BIGARRS], (2 * sizeof (OBJECT)));
01472     memcpy (scroll + 2, pu + first, (naff * sizeof (OBJECT)));
01473     memcpy (scroll + 2 + naff, bi_trindex[BIGARRS] + 2, sizeof (OBJECT));
01474     scroll->ob_tail += naff;
01475     for (i = 1 ; i <= (naff + 1) ; i++)
01476         scroll[i].ob_next = i + 1;
01477     scroll[i - 1].ob_flags &= ~LASTOB;
01478     scroll[i].ob_flags |= LASTOB;
01479     for (i = 2 ; i <= (naff + 2) ; i++)
01480         scroll[i].ob_y = scroll[i - 1].ob_y + scroll[i - 1].ob_height;
01481     return naff;
01482 }
01483 /* #] create_scroll () Construit un scroll_menu :                                   */
01484 /* #[ free_popup () Gestion d'un Pop-Up librement positionn‚ :      */
01508 int free_popup (int posx, int posy, int tree, OBJECT *adr)
01509 {
01510 int x, y, w, h, xm, ym, km, dummy, ob, old_ob = -1, evnt, b[8],
01511         sortie = FALSE, etat, nbre, fl_scroll = FALSE, pxy[8], xs, ys,
01512         cale = 1, naff, down, haut, i, cadre[6], top, index,
01513         jaune[3], old_jaune[3], noir[3], old_noir[3], f3d = FALSE;
01514 char chaine[MAX_LEN];
01515 OBJECT *adresse, *old_adresse;
01516 MFDB img, nul = {0};
01517
01518     if (tree > BLANK)
01519         adresse = ir_trindex[tree];                     /* Adresse formulaire pop_up */
01520     else
01521         adresse = adr;
01522     if (adresse->ob_flags & BKGR)
01523         f3d = TRUE;
01524
01525     w = adresse->ob_width;
01526     h = adresse->ob_height;
01527     x = adresse->ob_x = posx - (w / 2);
01528     y = adresse->ob_y = posy - (h / 2);
01529     if (x + w > bureau.xd + bureau.wd - 5)
01530         x = adresse->ob_x = bureau.wd + bureau.xd - w - 5;
01531     if (x < bureau.xd + 5)
01532         x = adresse->ob_x = bureau.xd + 5;
01533     if (y + h > bureau.yd + bureau.hd - 5)
01534         y = adresse->ob_y = bureau.hd + bureau.yd - h - 5;
01535     if (y < bureau.yd + 5)
01536         y = adresse->ob_y = bureau.yd + 5;
01537
01538     if (h > bureau.hd)                                                  /* Si plus haut que le bureau */
01539     {
01540         if (y < bureau.yd)
01541             y = adresse->ob_y = bureau.yd + 15;
01542
01543         naff = create_scroll (adresse, y, &nbre, ZERO);     /* cr‚er un scroll-menu */
01544         down = naff + 2;
01545         old_adresse = adresse;
01546         adresse = scroll;
01547         adresse->ob_x = x;
01548         adresse->ob_y = y;
01549         w = adresse->ob_width;
01550         h = adresse->ob_height;
01551         haut = adresse[1].ob_height;
01552         fl_scroll = TRUE;
01553     }
01554
01555     graf_mouse (ARROW, 0);                          /* Souris -> Flˆche */
01556     wind_update (BEG_MCTRL);                        /* Bloquer menu */
01557     if (f3d)
01558     {
01559         wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
01560         if (top)    /* Restaurer provisoirement la palette par d‚faut */
01561             set_palette (BLANK);
01562         fill_tab (jaune, 3, 1000, 1000, ZERO);  /* ...Mais fixer le jaune et le noir */
01563         fill_tab (noir, 3, ZERO, ZERO, ZERO);
01564         vq_color (work_display.handle, 6, 1, old_jaune);    /* Sauver l'ancien "jaune" */
01565         vq_color (work_display.handle, 15, 1, old_noir);    /* Sauver l'ancien "noir" */
01566         vs_color (work_display.handle, 6, jaune);                   /* Fixer le jaune */
01567         vs_color (work_display.handle, 15, noir);                   /* Fixer le noir */
01568         vsl_width (work_display.handle, 1);             /* Traits normaux */
01569         vsl_ends (work_display.handle, SQUARE, SQUARE);
01570         vsl_type (work_display.handle, SOLID);
01571         vsl_color (work_display.handle, BLACK);
01572         vst_font (work_display.handle, 1);
01573         vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &dummy, &dummy);
01574         vst_effects (work_display.handle, EFNONE);      /* D‚sactiver tous les effets */
01575         vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);   /* Align‚ en haut … gauche */
01576         vst_color (work_display.handle, 15);    /* Texte en noir */
01577         vsf_perimeter (work_display.handle, FALSE);
01578         vsf_interior (work_display.handle, FIS_SOLID);
01579         if (work_display.n_color >= 16)
01580             vsf_color (work_display.handle, YELLOW);
01581         else
01582             vsf_color (work_display.handle, WHITE);
01583     }
01584     get_bkgr (x, y, w, h, &img);
01585     objc_draw (adresse, ROOT, MAX_DEPTH, x - 3, y - 3, w + 6, h + 6);
01586
01587     do
01588     {
01589         evnt = evnt_multi (MU_BUTTON | MU_TIMER,
01590                                              1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01591                                              b, 10, 0, &xm, &ym, &km, &dummy, &dummy, &dummy);
01592         if (evnt & MU_BUTTON)
01593         {
01594             while (km)  /* Attend que le bouton de la souris soit relƒch‚ */
01595                 graf_mkstate (&dummy, &dummy, &km, &dummy);
01596             sortie = TRUE;
01597         }
01598         else if (evnt == MU_TIMER)
01599         {
01600             graf_mkstate (&xm, &ym, &dummy, &dummy);
01601             ob = objc_find (adresse, ROOT, MAX_DEPTH, xm, ym);
01602             if (old_ob != ob)       /* Si objet diff‚rent */
01603             {
01604                 if ((old_ob != -1) && (NOT (adresse[old_ob].ob_state & DISABLED)))
01605                 {
01606                     etat = adresse[old_ob].ob_state & 0xFF04;
01607                     objc_change (adresse, old_ob, 0, x, y, w, h, etat, FALSE);
01608                     objc_offset (adresse, old_ob, &xs, &ys);
01609                     objc_draw (adresse, ROOT, MAX_DEPTH, xs, ys,
01610                                          adresse[old_ob].ob_width, adresse[old_ob].ob_height);
01611                 }
01612                 if ((ob > ROOT) && (NOT (adresse[ob].ob_state & DISABLED)))
01613                 {
01614                     if ((adresse[ob].ob_type & 0xFF) == G_STRING)
01615                     {
01616                         if (((adresse->ob_spec.obspec.fillpattern != ZERO) ||
01617                                     (adresse->ob_spec.obspec.interiorcol != ZERO)) &&
01618                                     (f3d))
01619                         {
01620                             strcpy (chaine, get_text (adresse, ob));
01621                             objc_offset (adresse, ob, &xs, &ys);
01622                             v_hide_c (work_display.handle);
01623                             vswr_mode (work_display.handle, MD_REPLACE);    /* Dessin En Remplacement */
01624                             fill_tab (cadre, 4,
01625                                                 xs, ys,
01626                                                 xs + adresse[ob].ob_width - 1,
01627                                                 ys + adresse[ob].ob_height - 1);
01628                             v_bar (work_display.handle, cadre);             /* Rectangle */
01629                             fill_tab (cadre, 6,
01630                                                 xs, ys + adresse[ob].ob_height - 1,
01631                                                 xs, ys,
01632                                                 xs + adresse[ob].ob_width - 1, ys);
01633                             v_pline (work_display.handle, 3, cadre);    /* Ligne d'ombre noire */
01634                             vswr_mode (work_display.handle, MD_TRANS);  /* Texte en Transparent */
01635                             v_gtext (work_display.handle, xs, ys, chaine);  /* Ecrire le texte */
01636                             if (adresse[ob].ob_state & CHECKED)                             /* Si option check‚e, */
01637                                 v_gtext (work_display.handle, xs + 2, ys, ""); /* mettre une marque. */
01638                             v_show_c (work_display.handle, TRUE);
01639                             etat = adresse[ob].ob_state;
01640                         }
01641                         else
01642                         {
01643                             etat = adresse[ob].ob_state | SELECTED;
01644                             objc_change (adresse, ob, 0, x, y, w, h, etat, TRUE);
01645                         }
01646                     }
01647                     else if ((adresse[ob].ob_type & 0xFF) == G_IMAGE)
01648                     {
01649                         etat = adresse[ob].ob_state | SELECTED;
01650                         objc_change (adresse, ob, 0, x, y, w, h, etat, TRUE);
01651                     }
01652                 }
01653                 old_ob = ob;
01654             }
01655             else                                /* Si mˆme objet */
01656             {
01657                 if ((fl_scroll) && (ob == 1))
01658                 {       /* Si scroll : flˆche vers le haut */
01659                     objc_offset (adresse, 0, &xs, &ys);
01660                     if (cale > 1)
01661                     {
01662                         evnt_timer (50, 0);
01663                         cale--;
01664                         for (i = naff + 1 ; i > 2 ; i--)
01665                         {
01666                             adresse[i].ob_spec = adresse[i - 1].ob_spec;
01667                             adresse[i].ob_state = adresse[i - 1].ob_state;
01668                         }
01669                         adresse[2].ob_spec = old_adresse[cale].ob_spec;
01670                         adresse[2].ob_state = old_adresse[cale].ob_state;
01671                         fill_tab (pxy, 8,
01672                                             xs, ys + haut,
01673                                             xs + adresse->ob_width, ys + (naff * haut),
01674                                             xs, ys + (2 * haut),
01675                                             xs + adresse->ob_width, ys + ((naff + 1) * haut));
01676                         v_hide_c (work_display.handle);
01677                         objc_change (adresse, ob, 0, x, y, w, h, NORMAL, TRUE);
01678                         vro_cpyfm (work_display.handle, S_ONLY, pxy, &nul, &nul);
01679                         objc_change (adresse, ob, 0, x, y, w, h, SELECTED, TRUE);
01680                         v_show_c (work_display.handle, TRUE);
01681                         objc_draw (adresse, ROOT, 2,
01682                                              x + adresse[2].ob_x, y + adresse[2].ob_y,
01683                                              adresse[2].ob_width, adresse[2].ob_height);
01684                     }
01685                 }
01686                 else if ((fl_scroll) && (ob == down))
01687                 {       /* Si scroll : flˆche vers le bas */
01688                     objc_offset (adresse, 0, &xs, &ys);
01689                     if ((cale + naff) <= nbre)
01690                     {
01691                         evnt_timer (50, 0);
01692                         cale++;
01693                         for (i = 2 ; i < (naff + 1) ; i++)
01694                         {
01695                             adresse[i].ob_spec = adresse[i + 1].ob_spec;
01696                             adresse[i].ob_state = adresse[i + 1].ob_state;
01697                         }
01698                         adresse[naff + 1].ob_spec = old_adresse[cale + naff - 1].ob_spec;
01699                         adresse[naff + 1].ob_state = old_adresse[cale + naff - 1].ob_state;
01700                         fill_tab (pxy, 8,
01701                                             xs, ys + (2 * haut),
01702                                             xs + adresse->ob_width, ys + ((naff + 1) * haut),
01703                                             xs, ys + haut,
01704                                             xs + adresse->ob_width, ys + (naff * haut));
01705                         v_hide_c (work_display.handle);
01706                         objc_change (adresse, ob, 0, x, y, w, h, NORMAL, TRUE);
01707                         vro_cpyfm (work_display.handle, S_ONLY, pxy, &nul, &nul);
01708                         objc_change (adresse, ob, 0, x, y, w, h, SELECTED, TRUE);
01709                         v_show_c (work_display.handle, TRUE);
01710                         objc_draw (adresse, ROOT, 2,
01711                                              x + adresse[naff + 1].ob_x, y + adresse[naff + 1].ob_y,
01712                                              adresse[naff + 1].ob_width, adresse[naff + 1].ob_height);
01713                     }
01714                 }
01715             }
01716         }
01717     } while (NOT sortie);
01718
01719     put_bkgr (x, y, w, h, &img);
01720     if (f3d)
01721     {
01722         vs_color (work_display.handle, 6, old_jaune);   /* Restaurer le jaune */
01723         vs_color (work_display.handle, 15, old_noir);   /* Restaurer le noir */
01724         if (top)
01725         {       /* Restaurer la palette courante */
01726             index = find_index (top);
01727             set_palette (index);
01728         }
01729     }
01730     wind_update (END_MCTRL);                                /* D‚bloquer menu */
01731     wind_mouse ();
01732     if (fl_scroll)
01733     {
01734         free (scroll);
01735         scroll = (OBJECT *) ZERO;
01736         adresse = old_adresse;
01737         if (ob > ZERO)
01738             ob = ob - 2 + cale;
01739     }
01740
01741     if ((ob > 0) && (NOT (adresse[ob].ob_state & DISABLED)))
01742     {
01743         buf[0] = BEV_FREEPU;
01744         buf[1] = ap_id;
01745         buf[3] = tree;
01746         buf[4] = ob;
01747         etat = adresse[buf[4]].ob_state & 0xFF00;
01748         objc_change (adresse, buf[4], 0, x, y, w, h, etat, FALSE);
01749         if ((adresse[buf[4]].ob_type >> 8) == B_FNCP)   /* Si fonction associ‚e */
01750         {
01751             (*fnc[adresse[buf[4]].ob_state >> 8])();
01752             empty (MU_KEYBD);
01753         }
01754         return TRUE;
01755     }
01756     else
01757         return FALSE;
01758 }
01759 /* #] free_popup () Gestion d'un Pop-Up librement positionn‚ :      */
01760
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2FOR1.H Source File

BIG2FOR1.H

Go to the documentation of this file.
00001 /*  BIG2FOR1.H */
00002
00003 /* #[ Variables globales : */
00004 extern int ap_id;
00005 extern int buf[];
00006 extern int edit;
00007 extern int pos;
00008 extern int object;
00009 extern t_display work_display;
00010 extern t_desktop bureau;
00011 extern OBJECT *adr_menu;
00012 extern OBJECT *scroll;
00013 extern MFDB screen;
00014 extern OBJECT **ir_trindex;
00015 extern FNCP *fnc;
00016
00017 #include "BIG2INCL.H"
00018 extern OBJECT *bi_trindex[];
00019 /* #] Variables globales : */
00020 /* #[ Prototypage des fonctions : */
00021 int     menu_hierarch (int option);
00022 void    pop_up (OBJECT *adr, int object);
00023 void    pop_liste (OBJECT *adr, int object);
00024 void    next_option (OBJECT *adr, int object, int form);
00025 int     create_scroll (OBJECT *pu, int y, int *nb, int first);
00026 /* #] Prototypage des fonctions : */
00027
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2FOR2.C Source File

BIG2FOR2.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS DE GESTION DES FORMULAIRES 2
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2FOR2.H"
00007 #include "BIG2USR1.H"
00008 #include "BIG2DIAL.H"
00009 #include "BIG2DIVR.H"
00010 #include "BIG2EDIT.H"
00011 /* #[ D‚finitions locales :                                                                             */
00012 #define THELP "Help"
00013 #define TUNDO "Undo"
00014 #define TBACKSP "Backsp"
00015 #define TBKSP "Bksp"
00016 #define TDEL "Del"
00017 #define TDELETE "Delete"
00018 #define TINSERT "Insert"
00019 #define TCLR "Clr"
00020 #define TF1 "F1"
00021 #define TF2 "F2"
00022 #define TF3 "F3"
00023 #define TF4 "F4"
00024 #define TF5 "F5"
00025 #define TF6 "F6"
00026 #define TF7 "F7"
00027 #define TF8 "F8"
00028 #define TF9 "F9"
00029 #define TF10 "F10"
00030 /* #] D‚finitions locales :                                                                             */
00031 extern Obj_user look;
00032 /****** Fonctions de gestion des formulaires **********************/
00033 /* #[ get_bkgr () Sauve le fond d'un formulaire :                                   */
00049 void    get_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
00050 {
00051 int pxy[8];
00052 size_t taille;
00053 MFDB ecr = {0};
00054
00055     of_x -= 3;
00056     of_y -= 3;
00057     of_w += 5;
00058     of_h += 5;
00059
00060             /* Taille tampon de copie fond */
00061     taille = ((((size_t)(of_w / 16) + 1) * 2 * (size_t)work_display.n_plane) * (size_t)of_h) + 256;
00062     img->fd_addr = malloc (taille);                         /* R‚server tampon */
00063     img->fd_w = of_w;
00064     img->fd_h = of_h;
00065     img->fd_wdwidth = (of_w / 16) + ((of_w % 16) != ZERO);
00066     img->fd_stand = 1;
00067     img->fd_nplanes = work_display.n_plane;
00068
00069     fill_tab (pxy, 8,
00070                         of_x, of_y, of_x + of_w, of_y + of_h,
00071                         ZERO, ZERO, of_w, of_h);
00072     v_hide_c (work_display.handle);
00073     vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecr, img);
00074     v_show_c (work_display.handle, TRUE);
00075 }
00076 /* #] get_bkgr () Sauve le fond d'un formulaire :                                   */
00077 /* #[ put_bkgr () Restaure le fond d'un formulaire :                            */
00092 void    put_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img)
00093 {
00094 int pxy[8];
00095 MFDB ecr = {0};
00096
00097     of_x -= 3;
00098     of_y -= 3;
00099     of_w += 5;
00100     of_h += 5;
00101
00102     fill_tab (pxy, 8,
00103                         ZERO, ZERO, of_w, of_h,
00104                         of_x, of_y, of_x + of_w, of_y + of_h);
00105     v_hide_c (work_display.handle);
00106     Vsync ();
00107     vro_cpyfm (work_display.handle, S_ONLY, pxy, img, &ecr);
00108     v_show_c (work_display.handle, TRUE);
00109     free (img->fd_addr);        /* Lib‚rer le tampon */
00110     img->fd_addr = NULL;
00111 }
00112 /* #] put_bkgr () Restaure le fond d'un formulaire :                            */
00113 /* #[ scan () Tester ‚quivalents-clavier :                                              */
00114 int scan (OBJECT *adr, int f)
00115 {
00116 int top, index, fl_wmenu = FALSE, fl_wtool = FALSE, fl_wform = FALSE,
00117         retour, dummy;
00118 unsigned char touc;
00119
00120     if ((key == ARDN) || (key == ARUP) ||
00121             (key == ARLF) || (key == ARRT) ||
00122             (key == CT_ARLF) || (key == CT_ARRT) ||
00123             (key == CT_ARUP) || (key == CT_ARDN)||
00124             (key == SH_ARLF) || (key == SH_ARRT) ||
00125             (key == SH_ARUP) || (key == SH_ARDN) ||
00126             (key == ESPACE))
00127         return FALSE;
00128
00129     stdkey (&touc);     /* Recherche code Ascii */
00130
00131     if (f)                                                  /* Si on travaille sur le bureau */
00132     {
00133         wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00134         index = find_index (top);
00135     }
00136     else
00137         index = BLANK;
00138
00139     if (index > BLANK)                                                                  /* Si fenˆtre */
00140     {
00141         if ((win[index].w_type & 0xFF) == WTYP_FORM)        /* Fenˆtre formulaire ? */
00142             fl_wform = TRUE;
00143         if (win[index].w_type & WTYP_MENU)                          /* Fenˆtre menu ? */
00144             fl_wmenu = TRUE;
00145         else if (win[index].w_type & WTYP_TOOL)                 /* Fenˆtre toolbar ? */
00146             fl_wtool = TRUE;
00147     }
00148
00149     if (NOT f)                                                                  /* Si pas de fenˆtre */
00150         return (scan_form (touc, adr));                     /* Scanner formulaire */
00151     else if (f)                                                         /* Si fenˆtre */
00152     {
00153         if (fl_wmenu)                                                       /* Si fenˆtre menu */
00154         {
00155             retour = scan_wmenu (index, touc);  /* Scanner menu fenˆtre */
00156             if (NOT retour)
00157                 retour = scan_menu (touc);          /* Scanner menu */
00158             return retour;                                                  /* Renvoyer r‚sultat */
00159         }
00160         if (fl_wtool)                                                       /* Si fenˆtre toolbar */
00161         {
00162             retour = scan_wtool (index, touc);          /* Scanner toolbar fenˆtre */
00163             if (NOT retour)
00164                 retour = scan_menu (touc);          /* Scanner menu */
00165             return retour;                                                  /* Renvoyer r‚sultat */
00166         }
00167         else if (fl_wform)                                          /* Si fenˆtre formulaire */
00168         {
00169             if ((win[index].w_cont.w_form.w_edit == BLANK) || (win[index].w_icon > BLANK))
00170             {                                                                                           /* Si pas d'‚ditable */
00171                 retour = scan_menu (touc);              /* Scanner menu */
00172                 if (NOT retour)
00173                     retour = scan_form (touc, adr);             /* Scanner formulaire */
00174                 return retour;                                                  /* Renvoyer r‚sultat */
00175             }
00176             else                                                                                    /* Si ‚ditable */
00177             {       /* Ne pas scanner le menu */
00178                 retour = scan_form (touc, adr);                 /* Scanner formulaire */
00179                 return retour;                                                  /* Renvoyer r‚sultat */
00180             }
00181         }
00182         else                                                                        /* Si autre fenˆtre */
00183         {
00184             retour = scan_menu (touc);              /* Scanner menu */
00185             return retour;                                                  /* Renvoyer r‚sultat */
00186         }
00187     }
00188
00189     return FALSE;
00190 }
00191 /* #] scan () Tester ‚quivalents-clavier :                                              */
00192 /* #[ scan_wmenu () Raccourcis-clavier dans un menu de fenˆtre :    */
00193 int scan_wmenu (int index, char touc)
00194 {
00195 int tree, k, i = ZERO, j, spe, touche;
00196 char chaine[MAX_LEN], car;
00197 OBJECT *adr_wmenu, *adrh;
00198
00199     if (win[index].w_icon > BLANK)
00200         return FALSE;
00201
00202     kbd &= ~0x10;   /* Annuler ‚ventuel bit CapsLock */
00203     if (kbd & K_RSHIFT)     /* Si shift droit */
00204     {
00205         kbd &= ~K_RSHIFT;       /* Le transformer en Shift gauche */
00206         kbd |= K_LSHIFT;        /* puisqu'ils sont ‚gaux pour simplifier la suite */
00207     }
00208     adr_wmenu = win[index].w_bar;
00209
00210     do          /* Passer tous les objets du menu */
00211     {
00212         if (((adr_wmenu[i].ob_type & 0xFF) == G_STRING) ||
00213                 ((adr_wmenu[i].ob_type & 0xFF) == G_USERDEF))
00214         {
00215             if ((adr_wmenu[i].ob_type >> 8) == B_HIERM)
00216             {
00217                 tree = adr_wmenu[i].ob_state >> 8;
00218                 adrh = ir_trindex[tree];
00219
00220                 k = 1;
00221                 do
00222                 {
00223                     if ((adrh[k].ob_type & 0xFF) == G_STRING)
00224                     {
00225                         strcpy (chaine, get_text (adrh, k));
00226                         trim (chaine);
00227                         touche = find_touche (chaine, &j);
00228                         if (touche == ZERO)
00229                         {
00230                             j = (int)strlen (chaine) - 1;
00231                             car = chaine[j];
00232                         }
00233                         find_special (chaine, &spe, j);
00234                         if ((kbd == ZERO) && (car == touc))
00235                             return FALSE;       /* Pas de raccourcis avec une touche normale et pas de sp‚ciale */
00236                         if ((kbd == spe) && ((car == touc) || (touche != ZERO)))
00237                         {
00238                             if (NOT (adrh[k].ob_state & DISABLED))
00239                             {
00240                                 event = MU_BUTTON;
00241                                 buf[0] = BEV_WHIER;
00242                                 buf[3] = m_title (adr_wmenu, i) + 3;
00243                                 buf[4] = i;
00244                                 buf[5] = tree;
00245                                 buf[6] = k;
00246                                 buf[7] = index;
00247                                 mk = 1;
00248                                 win[index].w_bar[buf[3]].ob_state |= SELECTED;
00249                                 draw_object (buf[3], index);
00250                                 return TRUE;
00251                             }
00252                         }
00253                     }
00254                 } while (NOT (adrh[k++].ob_flags & LASTOB));
00255             }
00256             else if ((adr_wmenu[i].ob_type & 0xff) != G_USERDEF)
00257             {
00258                 strcpy (chaine, get_text (adr_wmenu, i));
00259                 trim (chaine);
00260                 touche = find_touche (chaine, &j);
00261                 if (touche == ZERO)
00262                 {
00263                     j = (int)strlen (chaine) - 1;
00264                     car = chaine[j];
00265                 }
00266                 find_special (chaine, &spe, j);
00267                 if ((kbd == ZERO) && (car == touc))
00268                     return FALSE;       /* Pas de raccourcis avec une touche normale et pas de sp‚ciale */
00269                 if ((kbd == spe) && ((car == touc) || (touche != ZERO)))
00270                 {
00271                     if (NOT (adr_wmenu[i].ob_state & DISABLED))
00272                     {
00273                         event = MU_BUTTON;
00274                         buf[0] = BEV_WMENU;
00275                         buf[3] = m_title (adr_wmenu, i) + 3;
00276                         buf[4] = i;
00277                         buf[5] = index;
00278                         mk = 1;
00279                         win[index].w_bar[buf[3]].ob_state |= SELECTED;
00280                         draw_object (buf[3], index);
00281                         return TRUE;
00282                     }
00283                 }
00284             }
00285         }
00286     } while (NOT (adr_wmenu[i++].ob_flags & LASTOB));
00287
00288     return FALSE;
00289 }
00290 /* #] scan_wmenu () Raccourcis-clavier dans un menu de fenˆtre :    */
00291 /* #[ scan_wtool () Raccourcis-clavier dans une toolbar :                   */
00292 int scan_wtool (int index, char touc)
00293 {
00294 int i = ZERO, j;
00295 char chaine[MAX_LEN], c;
00296 OBJECT *adr;
00297
00298     adr = win[index].w_bar;
00299     kbd &= ~0x10;
00300     if (kbd == K_ALT)
00301     {
00302         do
00303         {
00304             if ((adr[i].ob_flags & SELECTABLE)
00305                     && ((adr[i].ob_type & 0xff) == G_USERDEF))
00306             {
00307                 if (NOT (adr[i].ob_state & DISABLED) && NOT (adr[i].ob_state & HIDETREE))
00308                 {
00309                     strcpy (chaine, (char *)adr[i].ob_spec.userblk->ub_parm);
00310                     for (j = ZERO ; j <= (int)strlen (chaine) ; j++)
00311                     {
00312                         if (chaine[j] == '[')
00313                         {
00314                             c = toupper (chaine[j + 1]);
00315                             if (touc == c)
00316                             {
00317                                 objc_offset (adr, i, &mx, &my);
00318                                 mx++;
00319                                 my++;
00320                                 clik = 1;
00321                                 object = i;
00322                                 event = MU_BUTTON;
00323                                 mk = 1;
00324                                 return TRUE;
00325                             }
00326                         }
00327                     }
00328                 }
00329             }
00330         } while (NOT (adr[i++].ob_flags & LASTOB));
00331     }
00332     return FALSE;
00333 }
00334 /* #] scan_wtool () Raccourcis-clavier dans une toolbar :                   */
00335 /* #[ scan_menu () Raccourcis-clavier dans les options de menu :    */
00336 int scan_menu (char touc)
00337 {
00338 int i = ZERO, k, j, tree, spe, touche, tit;
00339 char chaine[MAX_LEN], car;
00340 OBJECT *adrh;
00341
00342     if (NOT _app)               /* Si l'application tourne en accessoire */
00343         return FALSE;           /* Retourner de suite */
00344     if (NOT adr_menu)           /* Si pas de menu */
00345         return FALSE;           /* Retourner de suite */
00346
00347     kbd &= ~0x10;   /* Annuler ‚ventuel bit CapsLock */
00348     if (kbd & K_RSHIFT)     /* Si shift droit */
00349     {
00350         kbd &= ~K_RSHIFT;       /* Le transformer en Shift gauche */
00351         kbd |= K_LSHIFT;        /* puisqu'ils sont ‚gaux pour simplifier la suite */
00352     }
00353
00354     do          /* Passer tous les objets du menu */
00355     {
00356         if (((adr_menu[i].ob_type & 0xFF) == G_STRING) ||
00357                 ((adr_menu[i].ob_type & 0xFF) == G_USERDEF))
00358         {
00359             if ((adr_menu[i].ob_type >> 8) == B_HIERM)
00360             {
00361                 tree = adr_menu[i].ob_state >> 8;
00362                 adrh = ir_trindex[tree];
00363
00364                 k = 1;
00365                 do
00366                 {
00367                     if ((adrh[k].ob_type & 0xFF) == G_STRING)
00368                     {
00369                         strcpy (chaine, get_text (adrh, k));
00370                         trim (chaine);
00371                         touche = find_touche (chaine, &j);
00372                         if (touche == ZERO)
00373                         {
00374                             j = (int)strlen (chaine) - 1;
00375                             car = chaine[j];
00376                         }
00377                         find_special (chaine, &spe, j);
00378                         if ((kbd == ZERO) && (car == touc))
00379                             return FALSE;       /* Pas de raccourcis avec une touche normale et pas de sp‚ciale */
00380                         if ((kbd == spe) && ((car == touc) || (touche != ZERO)))
00381                         {
00382                             if (NOT (adrh[k].ob_state & DISABLED))
00383                             {
00384                                 tit = m_title (adr_menu, i);
00385                                 event = MU_MESAG;
00386                                 buf[0] = BEV_HIERM;
00387                                 buf[3] = tit;
00388                                 buf[4] = i;
00389                                 buf[5] = tree;
00390                                 buf[6] = k;
00391                                 menu_tnormal (adr_menu, tit, FALSE);
00392                                 return TRUE;
00393                             }
00394                         }
00395                     }
00396                 } while (NOT (adrh[k++].ob_flags & LASTOB));
00397             }
00398             else if ((adr_menu[i].ob_type & 0xff) != G_USERDEF)
00399             {
00400                 strcpy (chaine, get_text (adr_menu, i));
00401                 trim (chaine);
00402                 touche = find_touche (chaine, &j);
00403                 if (touche == ZERO)
00404                 {
00405                     j = (int)strlen (chaine) - 1;
00406                     car = chaine[j];
00407                 }
00408                 find_special (chaine, &spe, j);
00409                 if ((kbd == ZERO) && (car == touc))
00410                     return FALSE;       /* Pas de raccourcis avec une touche normale et pas de sp‚ciale */
00411                 if ((kbd == spe) && ((car == touc) || (touche != ZERO)))
00412                 {
00413                     if (NOT (adr_menu[i].ob_state & DISABLED))
00414                     {
00415                         tit = m_title (adr_menu, i);
00416                         event = MU_MESAG;
00417                         buf[0] = MN_SELECTED;
00418                         buf[3] = tit;
00419                         buf[4] = i;
00420                         menu_tnormal (adr_menu, tit, FALSE);
00421                         return TRUE;
00422                     }
00423                 }
00424             }
00425         }
00426     } while (NOT (adr_menu[i++].ob_flags & LASTOB));
00427     return FALSE;
00428 }
00429 /* #] scan_menu () Raccourcis-clavier dans les options de menu :    */
00430 /* #[ scan_form () Raccourcis-clavier dans un formulaire :              */
00431 int scan_form (char touc, OBJECT *adr)
00432 {
00433 int i = ZERO, j;
00434 char chaine[MAX_LEN], c;
00435
00436     kbd &= ~0x10;
00437     if (kbd == K_ALT)
00438     {
00439         do
00440         {
00441             if ((adr[i].ob_flags & SELECTABLE)
00442                     && ((adr[i].ob_type & 0xff) == G_USERDEF))
00443             {
00444                 if (NOT (adr[i].ob_state & DISABLED) && NOT (adr[i].ob_state & HIDETREE))
00445                 {
00446                     strcpy (chaine, (char *)adr[i].ob_spec.userblk->ub_parm);
00447                     for (j = ZERO ; j <= (int)strlen (chaine) ; j++)
00448                     {
00449                         if (chaine[j] == '[')
00450                         {
00451                             c = toupper (chaine[j + 1]);
00452                             if (touc == c)
00453                             {
00454                                 objc_offset (adr, i, &mx, &my);
00455                                 mx++;
00456                                 my++;
00457                                 clik = 1;
00458                                 object = i;
00459                                 event = MU_BUTTON;
00460                                 mk = 1;
00461                                 return TRUE;
00462                             }
00463                         }
00464                     }
00465                 }
00466             }
00467         } while (NOT (adr[i++].ob_flags & LASTOB));
00468     }
00469     return FALSE;
00470 }
00471 /* #] scan_form () Raccourcis-clavier dans un formulaire :              */
00472 /* #[ find_touche () Cherche la touche press‚e :                                    */
00473 int find_touche (char *chaine, int *position)
00474 {
00475 int i;
00476 char lettre, *cle;
00477
00478     i = (int)strlen (chaine) - 2;   /* Le dernier caractŠre est Ascii, ‡a commence … l'avant-dernier */
00479     lettre = chaine[i];                     /* On lit l'avant-dernier */
00480     if ((lettre == '^') || (lettre == '\7') ||  /* Si c'est un sp‚cial ou l'espace, */
00481             (lettre == '\1') || ( lettre == ' '))
00482         return ZERO;                                                            /* on se tire. */
00483     else                                                                                /* Sinon... */
00484     {
00485         do      /* Remonter jusqu'au d‚but du mot */
00486         {
00487             i--;
00488             lettre = chaine[i];
00489         } while ((lettre != '^') && (lettre != '\7') &&
00490                          (lettre != '\1') && ( lettre != ' ') &&
00491                          (i > ZERO));
00492         if (i == ZERO)                                          /* Si on est au d‚but du texte, */
00493             return ZERO;                                            /* on se tire. */
00494         i++;                                                                /* Ajuster la position */
00495         *position = i;                                          /* Enregistrer la position de ce mot */
00496         cle =  (chaine + i);                                /* Et le noter */
00497         if (stricmp (cle, THELP) == ZERO)                               /* Touche Help */
00498         {
00499             if (key == HELP)
00500                 return HELP;
00501         }
00502         else if (stricmp (cle, TUNDO) == ZERO)                  /* Touche Undo */
00503         {
00504             if (key == UNDO)
00505                 return UNDO;
00506         }
00507         else if ((stricmp (cle, TBACKSP) == ZERO) ||        /* Touche Backspace */
00508                          (stricmp (cle, TBKSP) == ZERO))
00509         {
00510             if (key == BACKSPC)
00511                 return BACKSPC;
00512         }
00513         else if ((stricmp (cle, TDEL) == ZERO) ||           /* Touche Delete */
00514                          (stricmp (cle, TDELETE) == ZERO))
00515         {
00516             if ((key == DELETE) || (key == SH_DELETE))
00517                 return DELETE;
00518         }
00519         else if (stricmp (cle, TINSERT) == ZERO)                /* Touche Insert */
00520         {
00521             if ((key == INSERT) || (key == SH_INSERT))
00522                 return INSERT;
00523         }
00524         else if (stricmp (cle, TCLR) == ZERO)                   /* Touche Clr */
00525         {
00526             if ((key == CLR) || (key == SH_CLR) || (key == CT_CLR))
00527                 return CLR;
00528         }
00529         else if (stricmp (cle, TF1) == ZERO)                        /* Touche F1 */
00530         {
00531             if ((key == F1) || (key == SH_F1))
00532                 return F1;
00533         }
00534         else if (stricmp (cle, TF2) == ZERO)                        /* Touche F2 */
00535         {
00536             if ((key == F2) || (key == SH_F2))
00537                 return F2;
00538         }
00539         else if (stricmp (cle, TF3) == ZERO)                        /* Touche F3 */
00540         {
00541             if ((key == F3) || (key == SH_F3))
00542                 return F3;
00543         }
00544         else if (stricmp (cle, TF4) == ZERO)                        /* Touche F4 */
00545         {
00546             if ((key == F4) || (key == SH_F4))
00547                 return F4;
00548         }
00549         else if (stricmp (cle, TF5) == ZERO)                        /* Touche F5 */
00550         {
00551             if ((key == F5) || (key == SH_F5))
00552                 return F5;
00553         }
00554         else if (stricmp (cle, TF6) == ZERO)                        /* Touche F6 */
00555         {
00556             if ((key == F6) || (key == SH_F6))
00557                 return F6;
00558         }
00559         else if (stricmp (cle, TF7) == ZERO)                        /* Touche F7 */
00560         {
00561             if ((key == F7) || (key == SH_F7))
00562                 return F7;
00563         }
00564         else if (stricmp (cle, TF8) == ZERO)                        /* Touche F8 */
00565         {
00566             if ((key == F8) || (key == SH_F8))
00567                 return F8;
00568         }
00569         else if (stricmp (cle, TF9) == ZERO)                        /* Touche F9 */
00570         {
00571             if ((key == F9) || (key == SH_F9))
00572                 return F9;
00573         }
00574         else if (stricmp (cle, TF10) == ZERO)                   /* Touche F10 */
00575         {
00576             if ((key == F10) || (key == SH_F10))
00577                 return F10;
00578         }
00579         else                            /* Si aucune correspondance, */
00580             return ZERO;        /* on retourne ZERO. */
00581     }
00582     return ZERO;
00583 }
00584 /* #] find_touche () Cherche la touche press‚e :                                    */
00585 /* #[ find_special () Cherche les touches sp‚ciales press‚es :      */
00586 void find_special (char *chaine, int *spe, int j)
00587 {
00588 int s;
00589 char ctl;
00590
00591     j--;
00592     ctl = chaine[j];
00593     s = ZERO;
00594     while (ctl != ' ')                  /* tant qu'il y a un symb“le de touche */
00595     {
00596         if (ctl == '^')                     /* On le teste */
00597             s |= K_CTRL;                        /* Et on note la config */
00598         else if (ctl == '\7')
00599             s |= K_ALT;
00600         else if (ctl == '\1')
00601             s |= K_LSHIFT;
00602         j--;
00603         ctl = chaine[j];
00604     }
00605     *spe = s;                                       /* On copie le r‚sultat dans la variable de retour */
00606 }
00607 /* #] find_special () Cherche les touches sp‚ciales press‚es :      */
00608 /* #[ m_title () Cherche le titre de menu d'une option :                    */
00609 int m_title (OBJECT *adresse, int option)
00610 {
00611 register menu = 1, k = 2;
00612 int pere, titre;
00613
00614     pere = parent (adresse, option);
00615     while (adresse[(k++) + 1].ob_type != G_BOX) ;   /* Chercher 1ø G_BOX */
00616
00617     while (k != pere)
00618     {
00619         k = adresse[k].ob_next;         /* Chercher menu correspondant */
00620         menu++;                                         /* Les compter */
00621     }
00622
00623     k = 3;
00624     do
00625     {
00626         titre = k++;                /* L'affecter */
00627     } while ((k - 3) != menu);
00628
00629     return titre;
00630 }
00631 /* #] m_title () Cherche le titre de menu d'une option :                    */
00632 /* #[ parent () Cherche le pŠre d'un objet :                                            */
00640 int cdecl parent (OBJECT *adr, int object)
00641 {
00642 register int i;
00643
00644     i = object;                                         /* Partir de cet objet */
00645     do
00646     {
00647         i = adr[i].ob_next;                     /* Passer au suivant... */
00648     } while (i > object);                       /* Jusqu'… revenir au pŠre. */
00649
00650     return i;                                               /* Retourner le pŠre */
00651 }
00652 /* #] parent () Cherche le pŠre d'un objet :                                            */
00653 /* #[ bak_rsc () Sauver ‚tat d'un arbre :                                                   */
00673 void bak_rsc (OBJECT *tree, char **bak)
00674 {
00675 register int i = ZERO;
00676 int taille = ZERO, val;
00677 char *ptr, *pt;
00678
00679         /* Calculer la taille n‚cessaire pour sauver l'‚tat du formulaire
00680              EDITABLEs      : longueur champ + 1 (pour le '\0' final)
00681              SELECTABLEs    : 1
00682              POP_UP TEXTE   : Longueur du texte + 1 (octet nul)
00683              POP_UP IMAGE   : Taille pointeur sur BitBlk
00684              POP-UP BOX     : 1 octet pour le type de trame , 1 pour la couleur */
00685     do
00686     {
00687         if (tree[i].ob_flags & EDITABLE)
00688         {
00689             if ((tree[i].ob_type >> 8) == B_EDIT)
00690             {
00691                 pt = (tree[i].ob_spec.tedinfo->te_ptext);
00692                 pt = start_edit (pt);
00693                 tree[i].ob_spec.tedinfo->te_ptext = pt;
00694                 taille += (tree[i].ob_state >> 8) + 1;
00695             }
00696             else
00697                 taille += ((int)strlen (tree[i].ob_spec.tedinfo->te_pvalid) + 1);
00698         }
00699         else if ((tree[i].ob_state & SHADOWED) &&
00700                          ((tree[i].ob_type & 0xFF) == G_BUTTON))
00701             taille += ((int)strlen (get_text (tree, i)) + 1);
00702         else if ((tree[i].ob_state & SHADOWED) &&
00703                          ((tree[i].ob_type & 0xFF) == G_IMAGE))
00704             taille += (int)sizeof (OBSPEC);
00705         else if ((tree[i].ob_state & SHADOWED) &&
00706                          ((tree[i].ob_type & 0xFF) == G_BOX) &&
00707                          ((tree[i].ob_state >> 8) != ZERO))
00708             taille += 2;
00709         else if (((tree[i].ob_type >> 8) == B_POPUP) ||
00710                          ((tree[i].ob_type >> 8) == B_LIST))
00711             taille += ((int)strlen (get_text (tree, i)) + 1);
00712         else if (tree[i].ob_flags & SELECTABLE)
00713             taille++;
00714     } while (NOT (tree[i++].ob_flags & LASTOB));
00715     taille++;
00716
00717     *bak = (char *)malloc (taille);
00718     ptr = *bak;
00719
00720     i = ZERO;
00721     do
00722     {
00723         if (tree[i].ob_flags & EDITABLE)
00724         {                       /* Si ‚ditable, */
00725             strcpy (ptr, get_text (tree, i));           /* sauver la chaŒne. */
00726             ptr += (strlen (ptr) + 1);
00727         }
00728         else if ((tree[i].ob_state & SHADOWED) &&
00729                          ((tree[i].ob_type & 0xFF) == G_BUTTON))
00730         {                       /* Si Pop-Up Texte */
00731             strcpy (ptr, get_text (tree, i));           /* sauver la chaŒne. */
00732             ptr += (strlen (ptr) + 1);
00733         }
00734         else if ((tree[i].ob_state & SHADOWED) &&
00735                          ((tree[i].ob_type & 0xFF) == G_IMAGE))
00736         {                       /* Si Pop-Up Image */
00737             memcpy (ptr, &tree[i].ob_spec, sizeof (tree[i].ob_spec));
00738             ptr += sizeof (OBSPEC);                                 /* Sauver le pointeur */
00739         }
00740         else if ((tree[i].ob_state & SHADOWED) &&
00741                          ((tree[i].ob_type & 0xFF) == G_BOX) &&
00742                          ((tree[i].ob_state >> 8) != ZERO))
00743         {                       /* Si Pop-Up Box */
00744             val = tree[i].ob_spec.obspec.fillpattern;
00745             *(ptr++) = val;
00746             val = tree[i].ob_spec.obspec.interiorcol;
00747             *(ptr++) = val;
00748         }
00749         else if (((tree[i].ob_type >> 8) == B_POPUP) ||
00750                          ((tree[i].ob_type >> 8) == B_LIST))
00751         {                       /* Si Pop-Up Texte */
00752             strcpy (ptr, get_text (tree, i));           /* sauver la chaŒne. */
00753             ptr += (strlen (ptr) + 1);
00754         }
00755         else if (tree[i].ob_flags & SELECTABLE)
00756         {                       /* Si s‚lectable, */
00757             if (tree[i].ob_state & SELECTED)                /* sauver l'‚tat. */
00758                 *ptr++ = '1';
00759             else
00760                 *ptr++ = '0';
00761         }
00762     } while (NOT (tree[i++].ob_flags & LASTOB));        /* Jusqu'au dernier objet */
00763     *ptr = '\0';    /* Pour marquer la fin */
00764 }
00765 /* #] bak_rsc () Sauver ‚tat d'un arbre :                                                   */
00766 /* #[ res_rsc () Restaurer un arbre :                                                           */
00783 void res_rsc (OBJECT *tree, char **bak)
00784 {
00785 register int i = ZERO;
00786 int val;
00787 char *ptr, *pt;
00788
00789     ptr = *bak;     /* Pointeur au d‚but de la chaine */
00790     do
00791     {
00792         if (tree[i].ob_flags & EDITABLE)
00793         {                   /* Si ‚ditable, */
00794             if ((tree[i].ob_type >> 8) == B_EDIT)
00795             {
00796                 pt = (tree[i].ob_spec.tedinfo->te_ptext);
00797                 pt = start_edit (pt);
00798                 tree[i].ob_spec.tedinfo->te_ptext = pt;
00799             }
00800             set_text (tree, i, ptr);                            /* restaurer la chaŒne. */
00801             ptr += (strlen (ptr) + 1);
00802         }
00803         else if ((tree[i].ob_state & SHADOWED) &&
00804                          ((tree[i].ob_type & 0xFF) == G_BUTTON))
00805         {                   /* Si Pop-Up Texte */
00806             set_text (tree, i, ptr);                            /* restaurer la chaŒne. */
00807             ptr += (strlen (ptr) + 1);
00808         }
00809         else if ((tree[i].ob_state & SHADOWED) &&
00810                          ((tree[i].ob_type & 0xFF) == G_IMAGE))
00811         {                   /* Si Pop-Up Image */
00812             memcpy (&tree[i].ob_spec, ptr, sizeof (tree[i].ob_spec));
00813             ptr += sizeof (tree[i].ob_spec);                /* Restaurer le pointeur */
00814         }
00815         else if ((tree[i].ob_state & SHADOWED) &&
00816                          ((tree[i].ob_type & 0xFF) == G_BOX) &&
00817                          ((tree[i].ob_state >> 8) != ZERO))
00818         {                   /* Si Pop-Up Box */
00819             val = *(ptr++);
00820             tree[i].ob_spec.obspec.fillpattern = val;
00821             val = *(ptr++);
00822             tree[i].ob_spec.obspec.interiorcol = val;
00823         }
00824         else if (((tree[i].ob_type >> 8) == B_POPUP) ||
00825                          ((tree[i].ob_type >> 8) == B_LIST))
00826         {                   /* Si Pop-Up Texte */
00827             set_text (tree, i, ptr);                            /* restaurer la chaŒne. */
00828             ptr += (strlen (ptr) + 1);
00829         }
00830         else if (tree[i].ob_flags & SELECTABLE)
00831         {                   /* Si s‚lectable, */
00832             if (*ptr == '1')                                                /* restaurer l'‚tat. */
00833                 tree[i].ob_state |= SELECTED;
00834             else if (*ptr == '0')
00835                 tree[i].ob_state &= ~SELECTED;
00836             ptr++;
00837         }
00838     } while (NOT (tree[i++].ob_flags & LASTOB));        /* Jusqu'au dernier objet */
00839     free (bak);     /* Lib‚rer la m‚moire de sauvegarde */
00840 }
00841 /* #] res_rsc () Restaurer un arbre :                                                           */
00842 /* #[ help () Routine de gestion d'une aide en ligne :                      */
00843 void help (OBJECT *adr, int obj)
00844 {
00845 OBJECT *adresse;
00846 int tree, x, y, w, h, xpere, ypere, wpere, hpere,
00847         sortie = FALSE, old_objet, old_edit, etat, evnt;
00848 MFDB image;
00849
00850     tree = (adr[obj].ob_state) >> 8;    /* R‚cupŠre nø formulaire associ‚ */
00851     adresse = ir_trindex[tree];                     /* Adresse formulaire aide */
00852
00853     if (tree)
00854     {
00855         w = adresse->ob_width;  /* Le centrer sur le formulaire appelant */
00856         h = adresse->ob_height;
00857         xpere = adr->ob_x;
00858         ypere = adr->ob_y;
00859         wpere = adr->ob_width;
00860         hpere = adr->ob_height;
00861         x = (w > wpere ? xpere - ((w - wpere) / 2) : xpere + ((wpere - w) / 2));
00862         y = (h > hpere ? ypere - ((h - hpere) / 2) : ypere + ((hpere - h) / 2));
00863         adresse->ob_x = x;
00864         adresse->ob_y = y;
00865
00866         if (x + w > bureau.xd + bureau.wd - 5)      /* Le replacer s'il sort du bureau */
00867             x = adresse->ob_x = bureau.wd + bureau.xd - w - 5;
00868         if (x < bureau.xd + 5)
00869             x = adresse->ob_x = bureau.xd + 5;
00870         if (y + h > bureau.yd + bureau.hd - 5)
00871             y = adresse->ob_y = bureau.hd + bureau.yd - h - 5;
00872         if (y < bureau.yd + 5)
00873             y = adresse->ob_y = bureau.yd + 5;
00874
00875         get_bkgr (x, y, w, h, &image);
00876         objc_draw (adresse, ROOT, MAX_DEPTH, x - 3, y - 3, w + 6, h + 6);
00877
00878         old_objet = object;
00879         object = ZERO;
00880         old_edit = edit;
00881         edit = BLANK;
00882         wind_update (BEG_MCTRL);    /* Bloquer le menu */
00883         do
00884         {
00885             evnt = dial (adresse, &image, FALSE);
00886             if ((evnt & MU_BUTTON) && (mk == 1))
00887             {
00888                 if ((object > ZERO) && (adresse[object].ob_flags & (EXIT | DEFAULT)))
00889                     sortie = TRUE;
00890             }
00891             else if (evnt & MU_KEYBD)
00892             {
00893                 if ((key == RETURN) || (key == ENTER))
00894                     sortie = TRUE;
00895             }
00896         } while (NOT sortie);
00897         wind_update (END_MCTRL);    /* D‚bloquer le menu */
00898         etat = adresse[object].ob_state & 0xFF00;
00899         objc_change (adresse, object, ZERO,
00900                                  adresse->ob_x, adresse->ob_y,
00901                                  adresse->ob_width, adresse->ob_height,
00902                                  etat, FALSE);
00903         object = old_objet;
00904         edit = old_edit;
00905
00906         put_bkgr (x, y, w, h, &image);
00907         free (image.fd_addr);   /* Lib‚rer tampon image */
00908     }
00909 }
00910 /* #] help () Routine de gestion d'une aide en ligne :                      */
00911 /* #[ move_form () D‚placement d'un formulaire sur l'‚cran :            */
00912 void move_form (OBJECT *adr, int x, int y, int w, int h, MFDB *img, int fl_depl)
00913 {
00914 int pxy[8], xm, ym, km, old_xm, old_ym, x_fin, y_fin, delta_x, delta_y, dummy;
00915 size_t taille;
00916 MFDB ecran = {0}, image;
00917
00918         /* Taille tampon image */
00919     taille = (((((size_t)(w + 5) / 16) + 1) * 2 * (size_t)work_display.n_plane) * (size_t)(h + 5)) + 256;
00920     image.fd_addr = malloc (taille);
00921     image.fd_w = w + 5;
00922     image.fd_h = h + 5;
00923     image.fd_wdwidth = ((w + 5) / 16) + (((w + 5) % 16) != ZERO);
00924     image.fd_stand = 1;
00925     image.fd_nplanes = work_display.n_plane;
00926     fill_tab (pxy, 8,
00927                         x - 3, y - 3,
00928                         x + w + 2, y + h + 2,
00929                         ZERO, ZERO, w + 5, h + 5);
00930     v_hide_c (work_display.handle);
00931     vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecran, &image);   /* Sauver le formulaire */
00932     graf_mouse (FLAT_HAND, ZERO);       /* Souris -> main … plat */
00933     v_show_c (work_display.handle, TRUE);
00934
00935     if ((fl_depl) && (screen.fd_addr))
00936     {
00937         graf_mkstate (&xm, &ym, &km, &dummy);
00938         delta_x = xm - x;
00939         delta_y = ym - y;
00940         old_xm = xm;
00941         old_ym = ym;
00942
00943         while (km)              /* Attendre bouton souris relach‚ */
00944         {
00945             if (xm - delta_x - 5 < bureau.xd)   /* Ne pas sortir du bureau */
00946                 xm = bureau.xd + delta_x + 5;
00947             if (ym - delta_y - 5 < bureau.yd)
00948                 ym = bureau.yd + delta_y + 5;
00949             if ((xm - delta_x) + w + 10 > bureau.xd + bureau.wd)
00950                 xm = (bureau.xd + bureau.wd) - (w + 10) + delta_x + 5;
00951             if ((ym - delta_y) + h + 10 > bureau.yd + bureau.hd)
00952                 ym = (bureau.yd + bureau.hd) - (h + 10) + delta_y + 5;
00953
00954             if ((xm != old_xm) || (ym != old_ym))
00955             {
00956                 pxy[0] = (x - 3) + (old_xm > xm ? w + 5 - (old_xm - xm) : ZERO);
00957                 pxy[1] = y - 3;
00958                 pxy[2] = pxy[0] + (old_xm > xm ? old_xm - xm : xm - old_xm);
00959                 pxy[3] = pxy[1] + h + 5;
00960                 pxy[4] = pxy[0];
00961                 pxy[5] = pxy[1];
00962                 pxy[6] = pxy[2];
00963                 pxy[7] = pxy[3];
00964                 Vsync ();
00965                 v_hide_c (work_display.handle);
00966                 vro_cpyfm (work_display.handle, S_ONLY, pxy, &screen, &ecran);  /* Restaurer fond */
00967                 v_show_c (work_display.handle, TRUE);
00968
00969                 pxy[0] = x - 3;
00970                 pxy[1] = (y - 3) + (old_ym > ym ? h + 5 - (old_ym - ym) : ZERO);
00971                 pxy[2] = pxy[0] + w + 5;
00972                 pxy[3] = pxy[1] + (old_ym > ym ? old_ym - ym : ym - old_ym);
00973                 pxy[4] = pxy[0];
00974                 pxy[5] = pxy[1];
00975                 pxy[6] = pxy[2];
00976                 pxy[7] = pxy[3];
00977                 Vsync ();
00978                 v_hide_c (work_display.handle);
00979                 vro_cpyfm (work_display.handle, S_ONLY, pxy, &screen, &ecran);  /* Restaurer fond */
00980                 v_show_c (work_display.handle, TRUE);
00981
00982                 x = adr->ob_x = xm - delta_x;
00983                 y = adr->ob_y = ym - delta_y;
00984                 old_xm = xm;
00985                 old_ym = ym;
00986                 fill_tab (pxy, 8,
00987                                     ZERO, ZERO, w + 5, h + 5,
00988                                     x - 3, y - 3,
00989                                     x + w + 2, y +h + 2);
00990                 v_hide_c (work_display.handle);
00991                 Vsync ();
00992                 vro_cpyfm (work_display.handle, S_ONLY, pxy, &image, &ecran);   /* Restaurer image */
00993                 v_show_c (work_display.handle, TRUE);
00994             }
00995             graf_mkstate (&xm, &ym, &km, &dummy);
00996         }
00997         free (image.fd_addr);
00998     }
00999     else
01000     {
01001         if (exist_edit (adr))
01002             draw_curs (adr, edit, &pos, ED_END);
01003         put_bkgr (x, y, w, h, img);
01004         graf_dragbox (w, h, x, y, bureau.xd + 5, bureau.yd + 5, bureau.wd - 10, bureau.hd - 10,
01005                                     &x_fin, &y_fin);
01006         x = adr->ob_x = x_fin;
01007         y = adr->ob_y = y_fin;
01008         get_bkgr (x, y, w, h, img);
01009         objc_draw (adr, ROOT, MAX_DEPTH, x - 3, y - 3, w + 6, h + 6);
01010         if (exist_edit (adr))
01011             draw_curs (adr, edit, &pos, ED_END);
01012     }
01013
01014     if (image.fd_addr)
01015         free (image.fd_addr);
01016     graf_mouse (ARROW, ZERO);               /* Souris -> flˆche */
01017 }
01018 /* #] move_form () D‚placement d'un formulaire sur l'‚cran :            */
01019 /* #[ create_hierm () Met en place cot‚ menus hi‚rarchiques :           */
01039 void create_hierm (OBJECT *adr)
01040 {
01041 register int i = ZERO;
01042 int tree, xoption, woption, whier, dummy;
01043 OBJECT *adrh;
01044 char *text;
01045
01046     do
01047     {
01048         if ((adr[i].ob_type >> 8) == B_HIERM)           /* Si c'est un B_HIERM */
01049         {
01050             woption = adr[i].ob_width;                          /* Largeur de l'option */
01051             tree = adr[i].ob_state >> 8;                        /* Formulaire associ‚ */
01052             adrh = ir_trindex[tree];
01053             whier = adrh->ob_width;                                 /* Largeur pop-up */
01054             objc_offset (adr, i, &xoption, &dummy); /* Position pop-up */
01055             text = get_text (adr, i);
01056             if (xoption + woption + whier > bureau.xd + bureau.wd - 7)  /* Pas place … droite */
01057                 text[strlen (text) - 2] = 4;                    /* FlŠche … gauche */
01058             else                                                                        /* Sinon */
01059                 text[strlen (text) - 2] = 3;                    /* FlŠche … droite */
01060             set_text (adr, i, text);
01061         }
01062     } while (NOT (adr[i++].ob_flags & LASTOB)); /* Jusqu'au dernier objet */
01063 }
01064 /* #] create_hierm () Met en place cot‚ menus hi‚rarchiques :           */
01065 /* #[ big_alert () Cr‚e et gŠre une alerte comme formulaire :           */
01102 int big_alert (int button, int number, char *str, int fl_alrt)
01103 {
01104 char *alrt, str_lignes[MAX_ALRT], str_boutons[MAX_ALRT],
01105          *ptr, *ligne[5], *bouton[3], icn[] = {'\0', '\0'};
01106 register int i;
01107 int icone, x, y, w, h, maxi = ZERO, quit = FALSE, evnt,
01108         nb_lignes = ZERO, nb_boutons = ZERO, dummy, fl_ecran, etat;
01109 OBJECT *adr = bi_trindex[BIGALERTE];
01110 MFDB img;
01111
01112     if (number > BLANK) /* MA 18/07/94 : les adresses des FREE STRINGS sont dans ir_trindex[] */
01113         alrt = ir_frstr[number];
01114     else
01115         alrt = str;
01116
01117     if (NOT fl_alrt)    /* Si alerte GEM normale */
01118         return (form_alert (button, alrt));
01119     else
01120     {
01121         vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);  /* BoŒtes caractŠres */
01122
01123         for (i = ZERO ; i < 5 ; i++)        /* Vider toutes les lignes */
01124             ligne[i] = '\0';
01125         for (i = ZERO ; i < 3 ; i++)        /* Vider tous les boutons */
01126             bouton[i] = '\0';
01127
01128         strcpy (str_lignes, alrt + 4);
01129         ptr = strchr (str_lignes, ']');     /* Copier texte des lignes */
01130         *ptr = '\0';
01131         strcpy (str_boutons, ptr + 2);      /* Copier texte des boutons */
01132         icn[0] = alrt[1];                                   /* Retenir l'ic“ne */
01133         icone = atoi (icn);
01134
01135         i = ZERO;
01136         ligne[i++] = strtok (str_lignes, "|]");     /* Texte 1ø ligne */
01137         do
01138             ligne[i] = strtok (ZERO, "|]");                 /* Textes lignes suivantes */
01139         while ((i < 4) && (ligne[i++]));
01140
01141         i = ZERO;
01142         bouton[i++] = strtok (str_boutons, "|]");   /* Texte 1ø bouton */
01143         do
01144             bouton[i] = strtok (ZERO, "|]");                /* Textes boutons suivants */
01145         while ((i < 2) && (bouton[i++]));
01146
01147         while ((nb_lignes < 6) && (ligne[nb_lignes++])) ;       /* Compter lignes */
01148         nb_lignes--;
01149         while ((nb_boutons < 4) && (bouton[nb_boutons++])) ;    /* Compter boutons */
01150         nb_boutons--;
01151
01152         for (i = ZERO ; i < nb_lignes ; i++)        /* Ecrire les lignes du formulaire */
01153             set_text (adr, AL_ST1 + i, ligne[i]);
01154         for (i = ZERO ; i < nb_boutons ; i++)   /* Ecrire les boutons du formulaire */
01155             set_text (adr, AL_BU1 + i, bouton[i]);
01156
01157         if (icone)  /* Affecter l'ic“ne en fonction de la r‚solution */
01158         {
01159             adr[AL_IC].ob_spec = bi_trindex[BIGICN][icone].ob_spec;
01160             adr[AL_IC].ob_width = bi_trindex[BIGICN][icone].ob_width;
01161             adr[AL_IC].ob_height = bi_trindex[BIGICN][icone].ob_height;
01162             adr[AL_IC].ob_flags &= ~HIDETREE;
01163         }
01164         else
01165             adr[AL_IC].ob_flags |= HIDETREE;
01166
01167         if (NOT icone)      /* Positionner les chaines en x */
01168         {
01169             for (i = ZERO ; i < nb_lignes ; i++)
01170                 adr[AL_ST1 + i].ob_x = 2 * w;
01171         }
01172         else
01173         {
01174             for (i = ZERO ; i < nb_lignes ; i++)
01175                 adr[AL_ST1 + i].ob_x = (4 * w) + adr[AL_IC].ob_width;
01176         }
01177
01178         for (i = ZERO ; i < nb_boutons ; i++)   /* Bouton le plus large */
01179             maxi = max (maxi, (int)strlen (bouton[i]) * w);
01180         for (i = ZERO ; i < nb_boutons ; i++)   /* Tous boutons de mˆme largeur */
01181             adr[AL_BU1 + i].ob_width = maxi;
01182
01183         maxi = (nb_boutons * (maxi + w)) + w;
01184
01185         for (i = ZERO ; i < nb_lignes ; i++)
01186             maxi = max (maxi, adr[AL_ST1 + i].ob_x
01187                                                 + ((int)strlen (ligne[i]) * w) + (2 * w));
01188
01189             /* Largeur boŒte racine */
01190         adr->ob_width = maxi;
01191             /* Position bouton d‚placement */
01192         adr[AL_MOVE].ob_x = maxi - adr[AL_MOVE].ob_width;
01193
01194             /* Positionner les boutons en x */
01195         adr[AL_BU1].ob_x = (maxi - ((nb_boutons * adr[AL_BU1].ob_width)
01196                                                 + ((nb_boutons - 1) * w))) / 2;
01197         for (i = 1 ; i < nb_boutons ; i++)
01198             adr[AL_BU1 + i].ob_x = adr[AL_BU1 + i - 1].ob_x +
01199                     adr[AL_BU1 + i - 1].ob_width + w;
01200
01201             /* Positionner les boutons en y */
01202         maxi = (max (adr[AL_IC].ob_y + adr[AL_IC].ob_height,
01203                         adr[AL_ST1].ob_y + (nb_lignes * adr[AL_ST1].ob_y))) +
01204                                 adr[AL_ST1].ob_y;
01205         for (i = ZERO ; i < nb_boutons ; i++)
01206             adr[AL_BU1 + i].ob_y = maxi;
01207
01208             /* Hauteur boŒte racine */
01209         adr->ob_height = adr[AL_BU1].ob_y + (2 * adr[AL_BU1].ob_height);
01210
01211         for (i = ZERO ; i < nb_lignes ; i++)    /* Montrer les lignes actives */
01212             adr[AL_ST1 + i].ob_flags &= ~HIDETREE;
01213         for (i = nb_lignes ; i < 5 ; i++)   /* Cacher les lignes inactives */
01214             adr[AL_ST1 + i].ob_flags |= HIDETREE;
01215         for (i = ZERO ; i < nb_boutons ; i++)   /* Montrer boutons actifs */
01216             adr[AL_BU1 + i].ob_flags &= ~(HIDETREE | DEFAULT);
01217         for (i = nb_boutons ; i < 3 ; i++)  /* Cacher boutons inactifs */
01218         {
01219             adr[AL_BU1 + i].ob_flags |= HIDETREE;
01220             adr[AL_BU1 + i].ob_flags &= ~DEFAULT;
01221         }
01222             /* Bouton par d‚faut */
01223         button = AL_BU1 - 1 + button;
01224         adr[button].ob_flags |= DEFAULT;
01225
01226         wind_update (BEG_MCTRL);                            /* Bloquer menu */
01227         form_center (adr, &dummy, &dummy, &dummy, &dummy);
01228         if (screen.fd_addr == NULL)
01229         {
01230             formm_draw (adr, BLANK, TRUE, &img);
01231             fl_ecran = TRUE;
01232         }
01233         else
01234         {
01235             formm_draw (adr, BLANK, FALSE, &img);
01236             fl_ecran = FALSE;
01237         }
01238         do
01239         {
01240             evnt = dial (adr, &img, fl_ecran);
01241             if (evnt == MU_BUTTON)
01242             {
01243                 if (adr[object].ob_flags & EXIT)
01244                     quit = TRUE;
01245             }
01246             else if (evnt == MU_KEYBD)
01247             {
01248                 if ((key == ARRT) && (nb_boutons > 1))
01249                 {
01250                     adr[button].ob_flags &= ~DEFAULT;
01251                     objc_offset (adr, button, &x, &y);
01252                     objc_draw (adr, ROOT, MAX_DEPTH, x - 3, y - 3,
01253                                          adr[button].ob_width + 6, adr[button].ob_height + 6);
01254                     button++;
01255                     if (button > AL_BU1 + nb_boutons - 1)
01256                         button = AL_BU1;
01257                     adr[button].ob_flags |= DEFAULT;
01258                     objc_offset (adr, button, &x, &y);
01259                     objc_draw (adr, button, 2, x - 3, y - 3,
01260                                          adr[button].ob_width + 6, adr[button].ob_height + 6);
01261                 }
01262                 else if ((key == ARLF) && (nb_boutons > 1))
01263                 {
01264                     adr[button].ob_flags &= ~DEFAULT;
01265                     objc_offset (adr, button, &x, &y);
01266                     objc_draw (adr, ROOT, MAX_DEPTH, x - 3, y - 3,
01267                                          adr[button].ob_width + 6, adr[button].ob_height + 6);
01268                     button--;
01269                     if (button < AL_BU1)
01270                         button = AL_BU1 + nb_boutons - 1;
01271                     adr[button].ob_flags |= DEFAULT;
01272                     objc_offset (adr, button, &x, &y);
01273                     objc_draw (adr, button, 2, x - 3, y - 3,
01274                                          adr[button].ob_width + 6, adr[button].ob_height + 6);
01275                 }
01276                 else if ((key == RETURN) || (key == ENTER))
01277                 {
01278                     object = button;
01279                     quit = TRUE;
01280                 }
01281             }
01282         } while (NOT quit);
01283
01284         if (fl_ecran == FALSE)
01285         {
01286             put_bkgr (adr->ob_x, adr->ob_y, adr->ob_width, adr->ob_height, &img);
01287             if (img.fd_addr)
01288                 free (img.fd_addr);
01289             etat = adr[object].ob_state & 0xFF00;
01290             objc_change (adr, object, ZERO,
01291                                      adr->ob_x, adr->ob_y, adr->ob_width, adr->ob_height,
01292                                      etat, FALSE);
01293         }
01294         else
01295             formm_undraw (adr, &img);
01296         wind_update (END_MCTRL);                            /* D‚bloquer menu */
01297         return (object - AL_BU1 + 1);
01298     }
01299 }
01300 /* #] big_alert () Cr‚e et gŠre une alerte comme formulaire :           */
01301 /* #[ get_string () Chercher adresse chaŒne libre :                             */
01310 char    *get_string (int number)
01311 {
01312 char *str;
01313
01314     str = ir_frstr[number];                         /* Pointeur sur le texte */
01315     return str;
01316 }
01317 /* #] get_string () Chercher adresse chaŒne libre :                             */
01318 /* #[ create_popup () Cr‚er un pop-up en m‚moire :                              */
01348 OBJECT *create_popup (int nbre, char *liste)
01349 {
01350 int i, wcell, hcell, maxi = ZERO, dummy;
01351 char *ptr;
01352 OBJECT *adr;
01353
01354     adr = (OBJECT *)malloc ((nbre + 1) * sizeof (OBJECT));  /* R‚server m‚moire du pop-up */
01355     if (adr)                    /* Si bien r‚serv‚e, */
01356     {
01357         vst_height (work_display.handle, HNORM, &dummy, &dummy, &wcell, &hcell);
01358         adr->ob_next = BLANK;               /* Construire objet racine */
01359         adr->ob_head = 1;
01360         adr->ob_tail = nbre;
01361         adr->ob_type = G_BOX;
01362         if (work_display.n_plane >= 4)
01363             adr->ob_flags = BKGR;
01364         else
01365             adr->ob_flags = NONE;
01366         adr->ob_state = SHADOWED;
01367         adr->ob_spec.index = 0x00FF1100L;
01368         if (work_display.n_plane >= 4)
01369         {
01370             adr->ob_spec.obspec.fillpattern = 7;
01371             adr->ob_spec.obspec.interiorcol = 8;
01372         }
01373         adr->ob_x = ZERO;
01374         adr->ob_y = ZERO;
01375         adr->ob_height = nbre * hcell;
01376         ptr = liste;
01377         for (i = 1 ; i <= nbre ; i++)
01378         {                                                       /* Construire chaque option */
01379             adr[i].ob_next = i + 1;
01380             adr[i].ob_head = BLANK;
01381             adr[i].ob_tail = BLANK;
01382             adr[i].ob_type = G_STRING;
01383             adr[i].ob_flags = TOUCHEXIT;
01384             adr[i].ob_state = NORMAL;
01385             adr[i].ob_spec.free_string = ptr;
01386             maxi = max (maxi, (int)strlen (ptr));   /* Chercher l'option la plus longue */
01387             ptr += (strlen (ptr) + 1);              /* Texte option suivante */
01388             adr[i].ob_x = ZERO;
01389             adr[i].ob_y = (i - 1) * hcell;
01390             adr[i].ob_height = hcell;
01391         }
01392         maxi++;                 /* Un caractŠre de plus en largeur */
01393         adr->ob_width = maxi * wcell;           /* Largeur de la racine */
01394         for (i = 1 ; i <= nbre ; i++)       /* Largeur des options */
01395             adr[i].ob_width = maxi * wcell;
01396         adr[nbre].ob_next = ZERO;       /* Corriger derniŠre option */
01397         adr[nbre].ob_flags |= LASTOB;
01398     }
01399     return adr;                                 /* Retourner adresse */
01400 }
01401 /* #] create_popup () Cr‚er un pop-up en m‚moire :                              */
01402 /* #[ form_attach () Lie un form. … un Popup, Help ou Hierm :           */
01418 void form_attach (int tree, int obj, char formular)
01419 {
01420 OBJECT *adr;
01421 int state;
01422
01423     adr = ir_trindex[tree];         /* Adresse du formulaire */
01424     if ((adr[obj].ob_state & SHADOWED) && NOT (adr[obj].ob_state & OUTLINED) || /* Si bouton Shadow (= pop_up) */
01425             ((adr[obj].ob_type >> 8) == B_HIERM) || /* ou si entr‚e menu hi‚rarchique */
01426             ((adr[obj].ob_type >> 8) == B_HELP))        /* ou si bouton d'aide */
01427     {
01428         state = adr[obj].ob_state & 0x00FF;                         /* Lire son ob_state normal seul */
01429         adr[obj].ob_state = (state | (formular << 8));  /* Nø form. associ‚ dans l'octet haut */
01430     }
01431     if ((adr[obj].ob_type >> 8) == B_HIERM)
01432         create_hierm (adr);
01433 }
01434 /* #] form_attach () Lie un form. … un Popup, Help ou Hierm :           */
01435 /* #[ bulle_attach () Lie une bulle d'aide … un objet :                     */
01456 void bulle_attach (int tree, int obj, char bulle)
01457 {
01458 OBJECT *adr, *adrpu;
01459 int state;
01460
01461     adr = ir_trindex[tree];         /* Adresse du formulaire */
01462     if ((NOT ((adr[obj].ob_type >> 8) == B_GRASTR)) &&
01463             (NOT ((adr[obj].ob_type >> 8) == B_FRAME)) &&
01464             (NOT ((adr[obj].ob_type >> 8) == B_HELP)) &&
01465             (NOT ((adr[obj].ob_type >> 8) == B_POPUP)) &&
01466             (NOT ((adr[obj].ob_type >> 8) == B_LIST)) &&
01467             (NOT ((adr[obj].ob_type >> 8) == B_PICT)) &&
01468             (NOT ((adr[obj].ob_type >> 8) == B_EDIT)) &&
01469             (NOT ((adr[obj].ob_type >> 8) == B_HIERM)) &&
01470             (NOT ((adr[obj].ob_type >> 8) == B_FNCP)))
01471     {
01472         state = adr[obj].ob_state & 0x00FF;                 /* Lire son ob_state normal seul */
01473         adr[obj].ob_state = (state | (bulle << 8)); /* Nø bulle associ‚e dans l'octet haut */
01474         adr[obj].ob_flags |= AIDE_OBJET;
01475     }
01476     else if (((adr[obj].ob_type >> 8) == B_POPUP) ||
01477                      ((adr[obj].ob_type >> 8) == B_LIST))
01478     {
01479         adrpu = ir_trindex[adr[obj].ob_state >> 8];
01480         state = adrpu->ob_state & 0x00FF;                       /* Lire son ob_state normal seul */
01481         adrpu->ob_state = (state | (bulle << 8));       /* Nø bulle associ‚e dans l'octet haut */
01482         adr[obj].ob_flags |= AIDE_OBJET;
01483     }
01484 }
01485 /* #] bulle_attach () Lie une bulle d'aide … un objet :                     */
01486 /* #[ set_interface () Fixe paramŠtres des objets UserDefs :            */
01520 void set_interface (int under, int cunder, int ctxt_under,
01521                                         int cicn_coche, int ctxt_coche,
01522                                         int cicn_radio, int ctxt_radio,
01523                                         int cicn_popup, int ctxt_popup,
01524                                         int cmove, int cgrastr,
01525                                         int clin_frame, int ctxt_frame, int cniceline)
01526 {
01527 int i = ZERO;
01528
01529     if (under != BLANK)
01530         look.under = under;
01531     if (cunder != BLANK)
01532         look.cunder = cunder;
01533     if (ctxt_under != BLANK)
01534         look.ctxt_under = ctxt_under;
01535     if (cicn_coche != BLANK)
01536         look.cicn_coche = cicn_coche;
01537     if (ctxt_coche != BLANK)
01538         look.ctxt_coche = ctxt_coche;
01539     if (cicn_radio != BLANK)
01540         look.cicn_radio = cicn_radio;
01541     if (ctxt_radio != BLANK)
01542         look.ctxt_radio = ctxt_radio;
01543     if (cicn_popup != BLANK)
01544         look.cicn_popup = cicn_popup;
01545     if (ctxt_popup != BLANK)
01546         look.ctxt_popup = ctxt_popup;
01547     if (cmove != BLANK)
01548         look.cmove = cmove;
01549     if (cgrastr != BLANK)
01550         look.cgrastr = cgrastr;
01551     if (clin_frame != BLANK)
01552         look.clin_frame = clin_frame;
01553     if (ctxt_frame != BLANK)
01554         look.ctxt_frame = ctxt_frame;
01555     if (cniceline != BLANK)
01556         look.cniceline = cniceline;
01557
01558     do
01559     {
01560         if (win[i].w_hg > ZERO)
01561         {
01562             if (win[i].w_type == WTYP_FORM)
01563                 print_page (i);
01564             else if (win[i].w_type & WTYP_TOOL)
01565                 draw_object (ROOT, i);
01566         }
01567     } while (NOT (win[i++].w_flags & WFLAST));
01568 }
01569 /* #] set_interface () Fixe paramŠtres des objets UserDefs :            */
01570 /* #[ set_radio () S‚lectionne un radio-bouton dans un groupe :     */
01584 void set_radio (OBJECT *adr, int rb)
01585 {
01586 int i, j;
01587
01588     i = parent (adr, rb);               /* Chercher le pŠre */
01589     j = adr[i].ob_head;                 /* Partir du 1ø enfant... */
01590     i = adr[i].ob_tail;                 /* jusqu'au dernier. */
01591     do
01592     {
01593         if ((adr[j].ob_flags & RBUTTON) &&  /* Tous les RBUTTONs en normal */
01594                 (adr[j].ob_state & SELECTED))
01595             adr[j].ob_state &= ~SELECTED;
01596         j = adr[j].ob_next;                                             /* Passer au suivant... */
01597     } while ((j <= i) && (j > adr[i].ob_next)); /* jusqu'au dernier. */
01598
01599     adr[rb].ob_state |= SELECTED;   /* S‚lectionner le bouton demand‚ */
01600 }
01601 /* #] set_radio () S‚lectionne un radio-bouton dans un groupe :     */
01602 /* #[ get_radio () retourne le nø du radio-bouton s‚lectionn‚ :     */
01610 int get_radio (OBJECT *adr, int rb)
01611 {
01612 int i, j, r = ZERO;
01613
01614     i = parent (adr, rb);               /* Chercher le pŠre */
01615     j = adr[i].ob_head;                 /* Partir du 1ø enfant... */
01616     i = adr[i].ob_tail;                 /* jusqu'au dernier. */
01617     do
01618     {
01619         if (adr[j].ob_flags & RBUTTON)          /* Passer tous les RBUTTONs */
01620         {
01621             if (adr[j].ob_state & SELECTED)     /* Si s‚lectionn‚ */
01622                 r = j;                                                  /* Trouv‚ ! */
01623         }
01624         j = adr[j].ob_next;                                                                 /* Passer au suivant... */
01625     } while ((j <= i) && (j > adr[i].ob_next) && NOT r);    /* jusqu'au dernier. */
01626     return r;
01627 }
01628 /* #] get_radio () retourne le nø du radio-bouton s‚lectionn‚ :     */
01629 /* #[ set_attributes () Fixe attr. graphiques BGRASTR & BSMSTR :    */
01643 void set_attributes (OBJECT *adr, int ob, int attr)
01644 {
01645 int xtype, state;
01646
01647     xtype = adr[ob].ob_type >> 8;
01648     if ((xtype != B_GRASTR) && (xtype != B_SMSTR))
01649         return;
01650     state = (adr[ob].ob_state & 0xFF);
01651     adr[ob].ob_state = (state | (attr << 8));
01652 }
01653 /* #] set_attributes () Fixe attr. graphiques BGRASTR & BSMSTR :    */
01654
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2FOR2.H Source File

BIG2FOR2.H

Go to the documentation of this file.
00001 /*  BIG2FOR2.H */
00002
00003 /* #[ Variables globales : */
00004 extern int event;
00005 extern int buf[];
00006 extern int mx;
00007 extern int my;
00008 extern int edit;
00009 extern int pos;
00010 extern int object;
00011 extern int kbd;
00012 extern int key;
00013 extern int clik;
00014 extern t_display work_display;
00015 extern t_desktop bureau;
00016 extern OBJECT *adr_menu;
00017 extern MFDB screen;
00018 extern OBJECT **ir_trindex;
00019 extern char **ir_frstr;
00020 extern BigWind  *win;
00021
00022 #include "BIG2INCL.H"
00023 extern OBJECT *bi_trindex[];
00024 /* #] Variables globales : */
00025 /* #[ Prototypage des fonctions : */
00026 void    help (OBJECT *adr, int obj);
00027 void    move_form (OBJECT *adr, int x, int y, int w, int h, MFDB *img, int fl_depl);
00028 int     scan (OBJECT *adr, int f);
00029 int     scan_wmenu (int index, char touc);
00030 int     scan_wtool (int index, char touc);
00031 int     scan_menu (char touc);
00032 int     scan_form (char touc, OBJECT *adr);
00033 int     find_touche (char *chaine, int *position);
00034 void    find_special (char *chaine, int *spe, int j);
00035 int     m_title (OBJECT *adresse, int option);
00036 /* #] Prototypage des fonctions : */
00037
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2HELP.C Source File

BIG2HELP.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS DE GESTION DE L'AIDE EN LIGNE
00003 */
00004 /* Gestion de l'aide en ligne */
00005 /* par Bulles d'aides */
00006 /* d'aprŠs une id‚e et un source de Mathias Agopian */
00007 /* adapt‚ … BIG par Marc Abramson le 18/07/94 */
00008
00009 /****** En-tˆte BIG ***********************************************/
00010 #include <BIG2.H>
00011 #include "BIG2HELP.H"
00012 #define CharProLine 34
00013
00014 int find_zone (int mx, int my); /* Proto */
00015 int aide_en_ligne = FALSE;          /* Variable globale */
00016
00017 /* #[ affiche_bulle () Affiche une bulle d'aide :                                   */
00018 void affiche_bulle(int mode,int x,int y,
00019                                      int w, int h, char *t,
00020                                      int obj, int top,
00021                                      OBJECT *form)
00022 {
00023 int j, k, wh = ZERO, x1, y1, w1, h1, xf, yf, wf, hf, xc, yc,
00024         ox1, ox2, oy1, oy2, mx, my, mk, wcar, hcar, depx, depy,
00025         cpl, lin, pts[8], extend, i1, i2, i,
00026         CntLine, sortie, pxy[8], mb, dummy;
00027 char t2[256];
00028 size_t len;
00029 char BulleTxt[960];         /* Maximum 960 caractŠres */
00030 char *ptr_line[16];         /* maximum 16 lignes */
00031 char *ptr_char = BulleTxt;
00032 MFDB fond;
00033
00034     if (mode != ZERO)
00035     {
00036         xc = x + w / 2;                             /* Coordonn‚es du centre de l'objet */
00037         yc = y + h / 2;
00038     }
00039     else
00040         graf_mkstate (&xc, &yc, &dummy, &dummy);
00041     vst_alignment (work_display.handle, HLEFT, VDOWN, &dummy, &dummy);
00042     vst_effects (work_display.handle, EFNONE);
00043     vst_font (work_display.handle, 1);
00044     vst_height (work_display.handle, HMINUS, &dummy, &dummy, &wcar, &hcar);
00045     hcar += 2;
00046
00047     depx = 15;
00048     depy = 15;
00049     len = strlen (t);
00050     cpl = (int)min (len, CharProLine);      /* Taille max d'une ligne, 64 ou la taille du texte */
00051     w1 = (cpl+2) * wcar;    /* Taille de la ligne avec un espace devant et un espace derriere */
00052
00053     CntLine = ZERO;                 /* On calcule la hauteur de la bulle et on */
00054     i = ZERO;                               /* stoke le texte format‚ au passage */
00055     i1 = w1 - 4 * wcar;
00056     do
00057     {
00058         j = ZERO;
00059         do
00060         {
00061             do
00062             {
00063                 t2[j++] = t[i++];       /* Copie d'un mot de la source vers le tampon */
00064             } while ((t2[j - 1] != ' ') && (t[i] != '\0'));
00065             t2[j] = '\0';
00066
00067             /* Mesure de la taille du mot */
00068             if (desc_hard_soft.le_gdos == SPEEDO_GDOS)
00069             {
00070                 vqt_f_extent (work_display.handle, t2, &pts[0]);
00071             }
00072             else
00073             {
00074                 vqt_extent (work_display.handle, t2, &pts[0]);
00075             }
00076             extend = pts[2] - pts[0];
00077         } while ((extend < i1) && (t[i] != '\0')); /* Mesure de l'ensemble
00078                                                 des mots tant qu'ils tiennent dans la ligne */
00079         if ((extend >= i1) || (t[i] != '\0'))
00080         {
00081             for (k = 1 ; ((k < j - 1) && (t2[k] != ' ')) ; k++);        /* V‚rifie qu'on a au moins 2 mots par ligne */
00082
00083             if (k < j - 1)                              /* Si c'est le cas, on prend les n-1 premiers mots */
00084             {
00085                 do
00086                 {
00087                     j--;
00088                     i--;
00089                 } while (t2[j - 1] != ' ' );
00090             }
00091             t2[j - 1] = '\0';
00092         }
00093         strcpy (ptr_char, t2);
00094         ptr_line[CntLine] = ptr_char;   /* Stoke adresse de la ligne */
00095         ptr_char += (int)strlen (t2);   /* On d‚cale le pointeur pour stocker le texte suivant */
00096         ptr_char++;                 /* On laisse la place pour le 0 */
00097         CntLine++;
00098     } while (t[i] != '\0');
00099     h1 = (CntLine + 1) * hcar + hcar / 2;
00100
00101     if (xc < work_display.w / 2)                            /* Si on est du cot‚ gauche */
00102     {
00103         x1 = xc + depx;
00104         ox1 = depx + 12;
00105         ox2 = depx + 2;
00106     }
00107     else
00108     {
00109         x1 = xc - w1 - depx;
00110         ox1 =- depx - 12;
00111         ox2 =- depx - 2;
00112     }
00113
00114     if (yc < work_display.h / 2)                            /* Si on est en haut */
00115     {
00116         y1 = yc + depy;
00117         oy1 = depy + 2;
00118         oy2 = depy + 12;
00119     }
00120     else
00121     {
00122         y1 = yc - h1 - depy;
00123         oy1 =- depy - 2;
00124         oy2 =- depy - 12;
00125     }
00126
00127     if ((x1 + w1) >= work_display.w)
00128     {
00129         x1 = work_display.w - w1;
00130     }
00131     if ((y1 + h1) >= work_display.h)
00132     {
00133         y1 = work_display.h - h1;
00134     }
00135
00136     xf = min (xc, x1) ; yf = min (yc, y1) ; wf = w1 + depx + 1 ; hf = h1 + depy + 1;
00137
00138     get_bkgr (xf, yf, wf, hf, &fond);
00139     wind_update (BEG_UPDATE);
00140     vswr_mode (work_display.handle, MD_REPLACE);                /* mode remplissage */
00141     v_hide_c (work_display.handle);
00142     vsf_interior (work_display.handle, FIS_SOLID);
00143     vsf_color (work_display.handle, WHITE);
00144     vsf_perimeter (work_display.handle, FALSE);
00145     vsl_width (work_display.handle, 1);
00146     vsl_color (work_display.handle, BLACK);
00147     vst_color (work_display.handle, BLACK);
00148
00149     fill_tab (pxy, 4, x1, y1, x1 + w1, y1 + h1);
00150     v_rfbox (work_display.handle, pxy);
00151     v_rbox (work_display.handle, pxy);
00152
00153     fill_tab (pxy, 6, xc + ox1, yc + oy1, xc, yc, xc + ox2, yc + oy2);
00154     v_fillarea (work_display.handle, 3, pxy);
00155     v_pline (work_display.handle, 3, pxy);
00156
00157     vswr_mode (work_display.handle, MD_TRANS);              /* mode transparent */
00158
00159     lin = y1 + hcar + hcar / 2;                 /* On affiche le texte */
00160     i1 = w1 - 4 * wcar;
00161     i2 = x1 + 2 * wcar;
00162     for (i = ZERO ; i < CntLine - 1 ; i++)
00163     {
00164         v_justified (work_display.handle, i2, lin, ptr_line[i], i1, 1, 1);
00165         lin += hcar;
00166     }
00167     v_gtext (work_display.handle, i2, lin, ptr_line[i]);
00168     vswr_mode (work_display.handle, MD_REPLACE);
00169     v_show_c (work_display.handle, TRUE);
00170
00171     if (mode == ZERO)
00172     {
00173         do
00174         {
00175             graf_mkstate (&mx, &my, &mb, &mk);
00176             if (top)
00177                 wh = find_zone (mx, my);
00178             /* On sort si l'aide en ligne n'est pas active tout le temps mais sur
00179                  un masque de touche et que ce masque de touche n'est plus actif */
00180             sortie = (aide_en_ligne != -1) && ((mk & aide_en_ligne) != aide_en_ligne);
00181         } while (((mb & 0x1) == ZERO) &&        /* Aucune touche appuy‚e */
00182                 (NOT sortie) &&
00183                 ((wh == top) &&                                 /* On est dans la mˆme fenˆtre */
00184                 (objc_find (form, ROOT, MAX_DEPTH, mx, my) == obj)));   /* et sur l'objet */
00185     }
00186     else
00187     {
00188         evnt_keybd ();
00189     }
00190     wind_update (END_UPDATE);
00191     put_bkgr (xf, yf, wf, hf, &fond);
00192 }
00193 /* #] affiche_bulle () Affiche une bulle d'aide :                                   */
00194 /* #[ inline_help () Gestion des bulles d'aide :                                    */
00195 void inline_help (int index, int mx, int my, int top, OBJECT *adr)
00196 {
00197 int xtype, help_index, obstate;
00198 OBJECT *form;
00199 int ob, xo, yo, wo, ho;
00200 char *texte;
00201
00202     if (index > BLANK)
00203     {
00204         if ((win[index].w_hg != ZERO) && (win[index].w_icon == BLANK) && (find_zone (mx, my)))
00205         {       /* Si la fenˆtre est ouverte et pas ic“nifi‚e et qu'on est dedans */
00206             if (win[index].w_type & WTYP_TOOL)
00207             {
00208                     form = win[index].w_bar;
00209             }
00210             else
00211             {
00212                 if (win[index].w_type & WTYP_FORM)  /* Fenˆtre formulaire */
00213                 {
00214                     form = win[index].w_cont.w_form.w_tree;
00215                 }
00216                 else
00217                 {
00218                     return;
00219                 }
00220             }
00221         }
00222     }
00223     else
00224     {
00225         form = adr;
00226     }
00227
00228     ob = objc_find (form, ROOT, MAX_DEPTH, mx, my);
00229     if (ob > BLANK)
00230     {
00231         /* l'objet trouv‚ a t'il une aide associee */
00232         if (form[ob].ob_flags & AIDE_OBJET)
00233         {
00234             xtype = form[ob].ob_type >> 8;
00235             obstate = form[ob].ob_state;
00236             if (obstate & DISABLED)
00237                 return; /* Si objet inactif, on sort */
00238                 /* R‚cup‚ration du nø de la free string : */
00239             if ((xtype == B_EDIT) || (xtype == B_FRAME) || (xtype == B_HIERM) ||
00240                     (xtype == B_GRASTR) || (xtype == B_FNCP))
00241             {   /* Certains types d'objet ne peuvent avoir d'aide */
00242                 return;
00243             }
00244             else if ((xtype == B_HELP) || (xtype == B_POPUP) ||
00245                              (xtype == B_LIST) ||
00246                              ((obstate & SHADOWED) && NOT (obstate & OUTLINED)))
00247             {   /* D'autres objets pointent deja vers un autre objet: il faut alors
00248                      r‚cup‚rer la free string associ‚e … la racine de l'arbre d‚sign‚ */
00249                 help_index = form[ob].ob_state >> 8;
00250                 help_index = ir_trindex[help_index]->ob_state >> 8;
00251             }
00252             else
00253             {   /* Enfin, d'autres portent directement le num‚ro de la free string associ‚e */
00254                 help_index = form[ob].ob_state >> 8;
00255             }
00256         }
00257         else
00258         {
00259             return;
00260         }
00261         texte = ir_frstr[help_index];
00262         if (texte != ZERO)
00263         {
00264             objc_offset (form, ob, &xo, &yo);
00265             wo = form[ob].ob_width;
00266             ho = form[ob].ob_height;
00267             affiche_bulle (ZERO, xo - 4, yo - 4, wo + 8, ho + 8, texte, ob, top, form);
00268         }
00269     }
00270 }
00271 /* #] inline_help () Gestion des bulles d'aide :                                    */
00272 /* #[ find_zone () Teste si on est dans une fenˆtre :                           */
00273 int find_zone (int mx, int my)
00274 {
00275 int xw, yw, ww, hw, fenetre, index;
00276
00277     fenetre = wind_find (mx, my);   /* On a cliqu‚ sur une fenˆtre ? */
00278     if (fenetre)                                        /* Si oui */
00279     {
00280         index = find_index (fenetre);                           /* Prendre l'index */
00281         if (index > BLANK)
00282         {       /* Zone de travail de GEM */
00283             wind_get (win[index].w_hg, WF_WORKXYWH, &xw, &yw, &ww, &hw);
00284             if ((mx > xw) && (mx < (xw + ww)))              /* Si on a cliqu‚ */
00285                 if ((my > yw) && (my < (yw + hw)))          /* dans la zone */
00286                     return fenetre;                                             /* retourner Handle GEM */
00287         }
00288     }
00289     return FALSE;                                                               /* Sinon FALSE */
00290 }
00291 /* #] find_zone () Teste si on est dans une fenˆtre :                           */
00292
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2HELP.H Source File

BIG2HELP.H

Go to the documentation of this file.
00001 /*  BIG2HELP.H */
00002
00003 /* #[ Variables globales : */
00004 extern int mx;
00005 extern int my;
00006 extern int mk;
00007 extern t_ident_hard_soft desc_hard_soft;
00008 extern t_display work_display;
00009 extern OBJECT **ir_trindex;
00010 extern char **ir_frstr;
00011 extern BigWind  *win;
00012 /* #] Variables globales : */
00013 void inline_help (int index, int mx, int my, int top, OBJECT *adr); /* MA 18/07/94 */
00014
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2INCL.H Source File

BIG2INCL.H

Go to the documentation of this file.
00001 /* Indices du fichier ressource pour BIG2INCL */
00002
00003 #define BIGALERTE        0   /* Formulaire/Dialogue */
00004 #define AL_BKGR          0   /* BOX dans l'arbre BIGALERTE */
00005 #define AL_MOVE          1   /* IBOX dans l'arbre BIGALERTE */
00006 #define AL_ST1           2   /* STRING dans l'arbre BIGALERTE */
00007 #define AL_ST2           3   /* STRING dans l'arbre BIGALERTE */
00008 #define AL_ST3           4   /* STRING dans l'arbre BIGALERTE */
00009 #define AL_ST4           5   /* STRING dans l'arbre BIGALERTE */
00010 #define AL_ST5           6   /* STRING dans l'arbre BIGALERTE */
00011 #define AL_BU1           7   /* BUTTON dans l'arbre BIGALERTE */
00012 #define AL_BU2           8   /* BUTTON dans l'arbre BIGALERTE */
00013 #define AL_BU3           9   /* BUTTON dans l'arbre BIGALERTE */
00014 #define AL_IC            10  /* IMAGE dans l'arbre BIGALERTE */
00015
00016 #define BIGICN           1   /* Formulaire/Dialogue */
00017
00018 #define BIGARRM          2   /* Formulaire/Dialogue */
00019 #define BA_BKGR          0   /* BOX dans l'arbre BIGARRM */
00020 #define BA_LF            1   /* BOXCHAR dans l'arbre BIGARRM */
00021 #define BA_RT            2   /* BOXCHAR dans l'arbre BIGARRM */
00022
00023 #define IMG_USER         3   /* Formulaire/Dialogue */
00024 #define RBHN             1   /* ICON dans l'arbre IMG_USER */
00025 #define RBHS             2   /* ICON dans l'arbre IMG_USER */
00026 #define RBMN             3   /* ICON dans l'arbre IMG_USER */
00027 #define RBMS             4   /* ICON dans l'arbre IMG_USER */
00028 #define BCHN             5   /* ICON dans l'arbre IMG_USER */
00029 #define BCHS             6   /* ICON dans l'arbre IMG_USER */
00030 #define BCMN             7   /* ICON dans l'arbre IMG_USER */
00031 #define BCMS             8   /* ICON dans l'arbre IMG_USER */
00032 #define PUH              9   /* ICON dans l'arbre IMG_USER */
00033 #define PUM              10  /* ICON dans l'arbre IMG_USER */
00034
00035 #define BIGARRS          4   /* Formulaire/Dialogue */
00036 #define SC_BKGR          0   /* BOX dans l'arbre BIGARRS */
00037 #define SC_UP            1   /* BOXCHAR dans l'arbre BIGARRS */
00038 #define SC_DN            2   /* BOXCHAR dans l'arbre BIGARRS */
00039
00040 #define BIGLIST          5   /* Formulaire/Dialogue */
00041 #define BL_BKGR          1   /* BOX dans l'arbre BIGLIST */
00042 #define BL_S1            2   /* STRING dans l'arbre BIGLIST */
00043 #define BL_S2            3   /* STRING dans l'arbre BIGLIST */
00044 #define BL_S3            4   /* STRING dans l'arbre BIGLIST */
00045 #define BL_S4            5   /* STRING dans l'arbre BIGLIST */
00046 #define BL_S5            6   /* STRING dans l'arbre BIGLIST */
00047 #define BL_S6            7   /* STRING dans l'arbre BIGLIST */
00048 #define BL_S7            8   /* STRING dans l'arbre BIGLIST */
00049 #define BL_S8            9   /* STRING dans l'arbre BIGLIST */
00050 #define BL_BA            10  /* IBOX dans l'arbre BIGLIST */
00051 #define BL_UP            11  /* BOXCHAR dans l'arbre BIGLIST */
00052 #define BL_DN            12  /* BOXCHAR dans l'arbre BIGLIST */
00053 #define BL_ASC           13  /* BOX dans l'arbre BIGLIST */
00054 #define BL_SL            14  /* BOX dans l'arbre BIGLIST */
00055
00056 #define BIG_WIND         6   /* Formulaire/Dialogue */
00057 #define BW_BKGR          0   /* BOX dans l'arbre BIG_WIND */
00058 #define BW_SIZERUL       1   /* BOXCHAR dans l'arbre BIG_WIND */
00059 #define BW_CLOSER        2   /* BOXCHAR dans l'arbre BIG_WIND */
00060 #define BW_MOVER         3   /* BOXTEXT dans l'arbre BIG_WIND */
00061 #define BW_SMALLER       4   /* BOXCHAR dans l'arbre BIG_WIND */
00062 #define BW_CYCLER        5   /* BOXCHAR dans l'arbre BIG_WIND */
00063 #define BW_FULLER        6   /* BOXCHAR dans l'arbre BIG_WIND */
00064 #define BW_SIZERUR       7   /* BOXCHAR dans l'arbre BIG_WIND */
00065 #define BW_INFO          8   /* BOXTEXT dans l'arbre BIG_WIND */
00066 #define BW_BARRE         9   /* BOX dans l'arbre BIG_WIND */
00067 #define BW_VBAR          10  /* BOX dans l'arbre BIG_WIND */
00068 #define BW_UPARROW       11  /* BOXCHAR dans l'arbre BIG_WIND */
00069 #define BW_VELEV         12  /* BOX dans l'arbre BIG_WIND */
00070 #define BW_VSLIDE        13  /* BOX dans l'arbre BIG_WIND */
00071 #define BW_DNARROW       14  /* BOXCHAR dans l'arbre BIG_WIND */
00072 #define BW_SIZERDL       15  /* BOXCHAR dans l'arbre BIG_WIND */
00073 #define BW_HBAR          16  /* BOX dans l'arbre BIG_WIND */
00074 #define BW_LFARROW       17  /* BOXCHAR dans l'arbre BIG_WIND */
00075 #define BW_HELEV         18  /* BOX dans l'arbre BIG_WIND */
00076 #define BW_HSLIDE        19  /* BOX dans l'arbre BIG_WIND */
00077 #define BW_RTARROW       20  /* BOXCHAR dans l'arbre BIG_WIND */
00078 #define BW_SIZERDR       21  /* BOXCHAR dans l'arbre BIG_WIND */
00079 #define BW_WORK          22  /* IBOX dans l'arbre BIG_WIND */
00080
00081 #define GADGETS          7   /* Formulaire/Dialogue */
00082 #define GA_SULH          1   /* ICON dans l'arbre GADGETS */
00083 #define GA_CLOH          2   /* ICON dans l'arbre GADGETS */
00084 #define GA_SMAH          3   /* ICON dans l'arbre GADGETS */
00085 #define GA_CYCH          4   /* ICON dans l'arbre GADGETS */
00086 #define GA_FULH          5   /* ICON dans l'arbre GADGETS */
00087 #define GA_SURH          6   /* ICON dans l'arbre GADGETS */
00088 #define GA_AUPH          7   /* ICON dans l'arbre GADGETS */
00089 #define GA_SLVH          8   /* ICON dans l'arbre GADGETS */
00090 #define GA_ADNH          9   /* ICON dans l'arbre GADGETS */
00091 #define GA_SDLH          10  /* ICON dans l'arbre GADGETS */
00092 #define GA_ALFH          11  /* ICON dans l'arbre GADGETS */
00093 #define GA_SLHH          12  /* ICON dans l'arbre GADGETS */
00094 #define GA_ARTH          13  /* ICON dans l'arbre GADGETS */
00095 #define GA_SDRH          14  /* ICON dans l'arbre GADGETS */
00096 #define GA_SULM          15  /* ICON dans l'arbre GADGETS */
00097 #define GA_CLOM          16  /* ICON dans l'arbre GADGETS */
00098 #define GA_SMAM          17  /* ICON dans l'arbre GADGETS */
00099 #define GA_CYCM          18  /* ICON dans l'arbre GADGETS */
00100 #define GA_FULM          19  /* ICON dans l'arbre GADGETS */
00101 #define GA_SURM          20  /* ICON dans l'arbre GADGETS */
00102 #define GA_AUPM          21  /* ICON dans l'arbre GADGETS */
00103 #define GA_SLVM          22  /* ICON dans l'arbre GADGETS */
00104 #define GA_ADNM          23  /* ICON dans l'arbre GADGETS */
00105 #define GA_SDLM          24  /* ICON dans l'arbre GADGETS */
00106 #define GA_ALFM          25  /* ICON dans l'arbre GADGETS */
00107 #define GA_SLHM          26  /* ICON dans l'arbre GADGETS */
00108 #define GA_ARTM          27  /* ICON dans l'arbre GADGETS */
00109 #define GA_SDRM          28  /* ICON dans l'arbre GADGETS */
00110
00111 #define SELF             8   /* Formulaire/Dialogue */
00112 #define FS_MOVE          1   /* IBOX dans l'arbre SELF */
00113 #define FS_TITRE         2   /* STRING dans l'arbre SELF */
00114 #define FS_PATH          3   /* BOXTEXT dans l'arbre SELF */
00115 #define FS_SAISIE        4   /* FTEXT dans l'arbre SELF */
00116 #define FS_BOXL          5   /* IBOX dans l'arbre SELF */
00117 #define FS_LA            6   /* BOXCHAR dans l'arbre SELF */
00118 #define FS_LP            21  /* BOXCHAR dans l'arbre SELF */
00119 #define FS_BOX           22  /* BOX dans l'arbre SELF */
00120 #define FS_RETOUR        23  /* BOXCHAR dans l'arbre SELF */
00121 #define FS_BOXAR         24  /* IBOX dans l'arbre SELF */
00122 #define FS_ARUP          25  /* BOXCHAR dans l'arbre SELF */
00123 #define FS_ARDN          26  /* BOXCHAR dans l'arbre SELF */
00124 #define FS_ASC           27  /* BOX dans l'arbre SELF */
00125 #define FS_SLD           28  /* BOX dans l'arbre SELF */
00126 #define FS_BOXF          29  /* IBOX dans l'arbre SELF */
00127 #define FS_BF            30  /* BOX dans l'arbre SELF */
00128 #define FS_FILTRE        31  /* TEXT dans l'arbre SELF */
00129 #define FS_OK            32  /* BUTTON dans l'arbre SELF */
00130 #define FS_ANN           33  /* BUTTON dans l'arbre SELF */
00131
00132 #define AIDE             9   /* Formulaire/Dialogue */
00133
00134 #define BIGNOT_RSC       0   /* ChaŒne d'alerte */
00135
00136 #define NOT_WINDOW       1   /* ChaŒne d'alerte */
00137
00138 #define EXITAUTO         2   /* ChaŒne libre */
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2INIT.C Source File

BIG2INIT.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS D'INITIALISATION
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 /* #[ D‚finitions :                                                                                             */
00006 /****** Fichiers annexes ******************************************/
00007
00008 #include <BIG2.H>
00009 #include "BIG2USR1.H"
00010 #include "BIG2USR2.H"
00011 #include "BIG2EDIT.H"
00012 #include "BIG2WIND.H"
00013 #include <STRING.H>
00014 #include <AES.H>
00015 #include <VDI.H>
00016 #include <TOS.H>
00017 #include <STDIO.H>
00018 #include <STDLIB.H>
00019 #include <CTYPE.H>
00020 #include "BIG2INCL.HBG"
00021
00022 /****** Variables globales ****************************************/
00023
00024 int ap_id;                          /* Num‚ro de l'application */
00025 int event;                          /* Ev‚nement courant */
00026 int buf[8];                         /* Buffer d'‚vŠnements */
00027 int mx, my, mk;                 /* Position et ‚tat souris */
00028 int edit, pos, object;  /* Editable courant, position curseur, objet cliqu‚ */
00029 int kbd, key, clik;         /* Etat touches sp‚ciales, touches, clics */
00030 int wind;                               /* Fenˆtre cliqu‚e */
00031 int intgr;                          /* Flag de ressource int‚gr‚ ou non */
00032 int pal_img = ZERO;         /* Flag de palette non standard */
00033 int old_top = BLANK;
00034 int id_top;
00035
00036 char pathapp[128];          /* Chemin de l'application */
00037
00038 t_ident_hard_soft desc_hard_soft;
00039 t_display work_display;
00040 t_desktop bureau;
00041 int cliq_in;    /* MA 16/07/94 : pour savoir si le clic de fermeture
00042                                  d'un menu liste, popup ou hi‚rarchique
00043                                  s'est deroule dans ou dehors le menu   */
00044
00045 MOBLK mouse = {ZERO, ZERO, ZERO, ZERO, ZERO};   /* Zone d'‚v‚nement zone souris */
00046
00047 OBJECT *adr_menu, *adr_desk;    /* Adresses formulaires r‚serv‚es */
00048 USERBLK *adr_usr;                           /* Adresse Malloc structures USERBLK */
00049 char *xedit;                                    /* Ptr sur les chaŒnes d'‚ditables ‚tendus */
00050 t_image_dial *xpict;                    /* MA 26/06/94 pointeurs sur les zones d'info des images */
00051 int nb_pict = ZERO;                     /* MA 26/06/94 */
00052
00053 OBJECT **objets_maison = NULL;  /* MA 14/07/94 */
00054 int nb_objets_maison = ZERO;
00055
00056 Palette bpal[16];               /* Palette interne au Prg : 16 couleurs */
00057 char *buffer = ZERO;        /* Ptr buffer Copier/Couper/Coller */
00058 OBJECT *scroll;                 /* Adresse scroll_menu courant */
00059
00060 MFDB screen;                        /* Pour les Copies Rasters */
00061
00062 OBJECT **ir_trindex;        /* Pour les arbres de ressource int‚gr‚ */
00063 char **ir_frstr;                /* Pour les chaŒnes libres ressource int‚gr‚ */
00064
00065     /* Cr‚ation des types "pointeur sur fonction" */
00066 FNCP *fnc;  /* Pointeur sur les pointeurs de fonction li‚s aux objets */
00067
00068 BigWind *win;               /* Pointeur sur la zone des fenˆtres */
00069 /* #] D‚finitions :                                                                                             */
00070 /* #[ Prototypage des fonctions : */
00071 void    vq_screen (t_display *Xdisplay);
00072 void    get_palette (void);
00073 void    open_work (void);
00074 int     identifier_tos (void);
00075 t_ident_hard_soft   identifier_hard_soft (void);
00076 /* #] Prototypage des fonctions : */
00077
00078
00143 int     initial (char *rsc, int menu, int desk, int nb_tree, OBJECT *rs_tree,
00144                  char *rs_str, int n_wind, int acc) {
00145 int nb_form, i, j, k, d, dummy, ecart[5], effets[3], accok;
00146 unsigned long map, bit;
00147 char alrt[MAX_ALRT], gohome[255], prgname[MAX_LEN], pat[128], *tacc;
00148 OBJECT *adr;
00149
00150     path (pathapp);
00151     strcpy (pat, pathapp);
00152     strcat (pat, rsc);
00153     if (_app)
00154     {
00155         if (vq_aes () == BLANK)
00156         {
00157             strcpy (prgname, rsc);
00158             extension (prgname, ".PRG");
00159             sprintf (gohome, bi_frstr[EXITAUTO], prgname);
00160             Cconws (gohome);
00161             Bconin (2);
00162             exit (1);
00163         }
00164     }
00165     adr_usr = (USERBLK *)ZERO;
00166     fnc = (FNCP *)ZERO;
00167     win = (BigWind *)ZERO;
00168     screen.fd_addr = NULL;
00169     scroll = (OBJECT *)ZERO;
00170
00171     if (nb_tree)
00172     {
00173         ir_trindex = (OBJECT **)rs_tree;
00174         ir_frstr = (char **)rs_str;
00175     }
00176     else
00177     {
00178         ir_trindex = (OBJECT **)ZERO;
00179         ir_frstr = (char **)ZERO;
00180     }
00181
00182     ap_id = appl_init (); /* D‚clarer l'application */
00183
00184     if (NOT nb_tree)
00185         intgr = FALSE;
00186     else
00187         intgr = TRUE;
00188
00189     if ((NOT _app) && (nb_tree))    /* Accessoire et ressource int‚gr‚ */
00190     {
00191         adr_desk = adr_menu = 0L;
00192         accok = menu_register (ap_id, get_string (acc));
00193         if (accok < ZERO)       /* Si plus d'accessoires */
00194             while (TRUE) ;      /* Boucle sans fin. */
00195     }
00196
00197     /* Identification de la config HARD et SOFT */
00198     desc_hard_soft = identifier_hard_soft ();
00199
00200     if (NOT nb_tree)
00201     {
00202         if (rsrc_load (pat) == ZERO)            /* Charger RSC */
00203         {
00204             sprintf (alrt, bi_frstr[BIGNOT_RSC], rsc, rsc);
00205             form_alert (1, alrt);
00206             if (_app)                   /* Si programme */
00207             {
00208                 appl_exit ();           /* Larguer l'AES */
00209                 exit (-33);
00210             }
00211             else                            /* Si accessoire */
00212             {
00213                 while (TRUE)                /* Boucle sans fin */
00214                     evnt_mesag (buf);
00215             }
00216             return FALSE;
00217         }
00218     }
00219     else        /* Si ressource int‚gr‚ */
00220     {
00221         for (i = ZERO ; i < nb_tree ; i++)  /* Pour chaque arbre du RSC int‚gr‚, */
00222         {
00223             j = ZERO;                                       /* et chaque objet, */
00224             do
00225             {           /* Tant qu'on n'est pas au bout */
00226                 rsrc_obfix (ir_trindex[i], j);      /* Adapter coordonn‚es */
00227             } while (NOT (ir_trindex[i][j++].ob_flags & LASTOB));
00228         }
00229     }
00230
00231     if ((NOT _app) && (NOT nb_tree))    /* Accessoire et ressource externe */
00232     {
00233         adr_desk = adr_menu = 0L;
00234         rsrc_gaddr (R_FRSTR, acc, &tacc);   /* Adr chaŒne pointeur sur pointeur */
00235         tacc = *((char **)tacc);                            /* Pointeur sur le texte */
00236         accok = menu_register (ap_id, tacc);
00237         if (accok < ZERO)       /* Si plus d'accessoires */
00238             while (TRUE) ;      /* Boucle sans fin. */
00239     }
00240
00241     open_work ();               /* Ouverture station et initialisations par d‚faut */
00242
00243     /* R‚cuperation de l'ensemble des infos sur les caract‚ristiques de l'‚cran */
00244     vq_screen (&work_display);
00245
00246     work_display.palette = (Palette *)malloc (work_display.n_color * sizeof (Palette));
00247     get_palette ();
00248
00249     vqt_fontinfo (work_display.handle, &dummy, &dummy, ecart, &dummy, effets);
00250
00251     /* Ecriture de la taille des fontes dans la variable work_display */
00252     work_display.hc = ecart[4];
00253
00254     for (i = ZERO ; i < 10 ; i++)   /* Pour chaque arbre du RSC inclus, */
00255     {
00256         j = ZERO;                                       /* et chaque objet, */
00257         do
00258         {           /* Tant qu'on n'est pas au bout */
00259             rsrc_obfix (bi_trindex[i], j);      /* Adapter coordonn‚es */
00260         } while (NOT (bi_trindex[i][j++].ob_flags & LASTOB));
00261     }
00262
00263     userdef (pat, &nb_form, nb_tree);       /* Traite USERDEFs et PFNTs */
00264
00265     for (i = ZERO ; i < nb_form ; i++)  /* Centrer tous les formulaires */
00266     {
00267         adr = ir_trindex[i];
00268
00269         if ((adr[3].ob_type & 0xff) != G_TITLE) /* Si ce n'est pas un menu */
00270         {
00271             form_center (adr, &adr->ob_x, &adr->ob_y, &dummy, &dummy);
00272             empty_edit (adr);       /* Vider tous les EDITABLEs */
00273         }
00274     }
00275         /* Pr‚parer S‚lecteur BIG2 */
00276     map = Drvmap ();                                                        /* Lecteurs dispos */
00277     k = 2;                                                                          /* A et B : toujours */
00278     for (bit = 4 ; bit <= 65536L ; bit *= 2)        /* Pour chaque bit */
00279     {
00280         if (map & bit)                                                      /* Si lecteur */
00281             bi_trindex[SELF][k + FS_LA].ob_state &= ~DISABLED;      /* Activer le bouton */
00282         k++;                                                                            /* Bouton suivant */
00283     }
00284     form_center (bi_trindex[SELF], &d, &d, &d, &d);
00285
00286     if (n_wind)                         /* S'il y a des fenˆtres */
00287         dcl_windows (n_wind);   /* D‚clarer les fenˆtres */
00288
00289     wind_get (ZERO, WF_WORKXYWH, &bureau.xd, &bureau.yd, &bureau.wd, &bureau.hd); /* Dimensions bureau */
00290     if (_app)               /* Si pas accessoire */
00291     {
00292         adr_desk = adr_menu = 0L;
00293         if (desk > BLANK)           /* Si un bureau est demand‚ */
00294         {
00295             adr_desk = ir_trindex[desk];
00296             adr_desk->ob_x = bureau.xd;                 /* Fixe */
00297             adr_desk->ob_y = bureau.yd;                 /* position */
00298             adr_desk->ob_width = bureau.wd;         /* et dimensions */
00299             adr_desk->ob_height = bureau.hd;        /* du bureau */
00300             wind_set (ZERO, WF_NEWDESK, adr_desk, ZERO);                        /* Impose bureau */
00301             form_dial (FMD_FINISH, ZERO, ZERO, ZERO, ZERO, bureau.xd, bureau.yd, bureau.wd, bureau.hd); /* L'affiche */
00302         }
00303         if (menu > BLANK)           /* Si un menu est demand‚ */
00304         {
00305             adr_menu = ir_trindex[menu];
00306             create_hierm (adr_menu);
00307             menu_bar (adr_menu, TRUE);                              /* Incruster le menu */
00308         }
00309     }
00310
00311     graf_mouse (ARROW, ZERO);               /* Souris -> flˆche */
00312
00313     edit = BLANK;                   /* Aucun champ ‚ditable */
00314     aide_en_ligne = ZERO;   /* Pas de bulles d'aide */
00315     id_top = BLANK;             /* Pas de fenˆtre de 1ø plan */
00316     return TRUE;
00317 }
00318 /* #] initial () Charge et initialise le ressource :                            */
00319 /* #[ vq_screen () Caract‚ristiques de la station graphique :           */
00320 void vq_screen (t_display *Xdisplay)
00321 {
00322 int work_out[57];
00323 size_t screen_size;
00324 int nb_bit_coul;    /* et par couleur               */
00325 int restant;
00326 int i;
00327
00328     /* r‚cuperation d'information supplementaires   */
00329     vq_extnd (Xdisplay->handle, TRUE, work_out);
00330     /* test de la pr‚sence ou non d'une palette */
00331     Xdisplay->une_palette = work_out[5];
00332     /* r‚cuperation du nombre de plans de l'‚cran   */
00333     Xdisplay->n_plane = work_out[4];
00334
00335     /* r‚cuperation du mode graphique courant           */
00336     /* -------------------------------------------------*/
00337     /* si on est sur un Falcon 030 */
00338     if (desc_hard_soft.la_machine == FALCON_030)
00339     {
00340 /* Si on a un processeur graphique de falcon 030, et que on
00341      n'est pas avec une carte graphique true color 24 bits (ou +)
00342      mais dans l'un des modes d'origine du Falcon */
00343         if ((desc_hard_soft.proc_graphique ==   PG_FALCON_030) && (Xdisplay->n_plane <= 16))
00344         {
00345             Xdisplay->mode = Vsetmode (-1);         /* R‚cuperer le mode graphique d'origine du Falcon */
00346             if (Xdisplay->n_color_pal == ZERO)  /* Si on dans un mode falcon avec palette ‚tendue */
00347             {
00348                 Xdisplay->n_color_pal = 262144L;    /* ca, c'est la taille de la palette du Falcon
00349                                                                                          je n'ai trouve aucun moyen de le lire dans
00350                                                                                          une variable systŠme ou VDI quelconque et je
00351                                                                                          me vois donc contraint de la mettre en dur. */
00352             }
00353             /* Pour avoir la taille de l'ecran , rien de plus simple */
00354             Xdisplay->taille = VgetSize (Xdisplay->mode);
00355         }
00356         else
00357         {   /* Cas du Falcon avec carte graphique true color */
00358             Xdisplay->res = -1;
00359             Xdisplay->taille = (unsigned long)Xdisplay->w * Xdisplay->h * Xdisplay->n_plane / 8;
00360         }
00361         /* Trouver les r‚solutions ‚quivalentes en ST/TT */
00362         Xdisplay->res = INCONNU;
00363         switch (Xdisplay->h)
00364         {
00365         case 480 :
00366             switch (Xdisplay->w)
00367             {
00368             case 640 :
00369                 if (Xdisplay->n_color == 256)
00370                     Xdisplay->res = VGA_256COL;
00371                 else
00372                 {
00373                     if (Xdisplay->n_color == 16)
00374                         Xdisplay->res = VGA_16COL;
00375                 }
00376                 break;
00377             case 320 :
00378                 if (Xdisplay->n_color == 256)
00379                     Xdisplay->res = R_256C_320_480;
00380                 else
00381                 {
00382                     if (Xdisplay->n_color == 262144L)
00383                         Xdisplay->res = TRUE_COLOR_320_480;
00384                 }
00385                 break;
00386             }   /* Fin du switch res horizontale */
00387         case 400 :
00388             if ((Xdisplay->w == 640) && (Xdisplay->n_color == 2))
00389                 Xdisplay->res = ST_HAUTE;
00390             break;
00391         case 200 :
00392             switch (Xdisplay->w)
00393             {
00394             case 640 :
00395                 if (Xdisplay->n_color == 4)
00396                     Xdisplay->res = ST_MOYENNE;
00397                 break;
00398             case 320 :
00399                 if (Xdisplay->n_color == 16)
00400                     Xdisplay->res=ST_BASSE;
00401                 break;
00402             }
00403                 break;
00404         }   /* Fin du switch res verticale */
00405     }       /* Fin du cas Falcon */
00406     else
00407     {
00408         /* Calcul de la taille de l'ecran en octet */
00409         Xdisplay->taille = (unsigned long)Xdisplay->w * Xdisplay->h * Xdisplay->n_plane / 8;
00410
00411         /* Sinon, si on est sur une machine connue a ce jour (ST,STE,TT) */
00412         if (desc_hard_soft.la_machine != AUTRE_MACHINE)
00413         {
00414             if (Xdisplay->une_palette)      /* Si on est dans un mode avec palette */
00415                 Xdisplay->res = Getrez ();  /* on r‚cupere la r‚solution */
00416             else                                        /* Sinon, si pas de palette on est sur carte  graphique */
00417                 Xdisplay->res = -1;     /* et on l'indique par un -1 indiquant */
00418                                                             /* que l'on n'est pas dans un mode graphique connu */
00419         }
00420         else    /* sinon on met un -1 dans le mode pour indiquer le pbm */
00421             Xdisplay->res = -1;
00422     }
00423
00424     screen_size = Xdisplay->taille;
00425     Xdisplay->taille_ligne = screen_size / Xdisplay->h;
00426
00427     if (NOT Xdisplay->une_palette)  /* si il n'y pas de palette */
00428     {                       /* le nombre de couleur depend du nombre de plans de bits */
00429         /* si le nombre de bit plane est superieur a 24, */
00430         /* cela signifie que les bits en trop traitent la transparence */
00431         /* ils n'interviennent donc pas sur le codage de couleur */
00432         if (Xdisplay->n_plane > 24)
00433             Xdisplay->n_plane = 24;
00434
00435         Xdisplay->n_color_pal = 1 << Xdisplay->n_plane; /* le nb de couleur est 2 puissance le nombre de plans */
00436     }
00437     else
00438         Xdisplay->n_color_pal = Xdisplay->n_color;
00439     /* on calcule le nombre de bit pour chaque couleur */
00440     nb_bit_coul = Xdisplay->n_plane / 3;
00441     restant = Xdisplay->n_plane - 3 * nb_bit_coul;  /* nombre de bit restant */
00442     Xdisplay->nb_bit_coul[0] = nb_bit_coul;
00443     Xdisplay->nb_bit_coul[1] = nb_bit_coul + restant;   /* les bits restants vont au vert   */
00444     Xdisplay->nb_bit_coul[2] = nb_bit_coul;
00445
00446     for (i = ZERO ; i < 3 ; i++)
00447     {           /* valeur maximale de la couleur vu le nombre de bits */
00448         Xdisplay->masque_coul[i] = (1 << Xdisplay->nb_bit_coul[i]) - 1;
00449     }
00450
00451     Xdisplay->phys = Physbase ();
00452     Xdisplay->log = Logbase ();
00453     Xdisplay->palette = NULL;       /* Pour l'instant, les pinceaux ne sont pas sauvegard‚s */
00454 }
00455 /* #] vq_screen () Caract‚ristiques de la station graphique :           */
00456 /* #[ get_palette () Sauve la palette courante :                                    */
00457 void get_palette (void)
00458 {
00459 register int i;
00460
00461     for (i = ZERO ; i < work_display.n_color ; i++)
00462     {
00463         /* Utilistion de la structure work_display et optimisation */
00464         vq_color (work_display.handle, i, 1, (int *)&work_display.palette[i]);
00465     }
00466     for (i = ZERO ; i < 16 ; i++)
00467     {           /* Copie les 16 premiŠres couleurs */
00468         bpal[i][0] = work_display.palette[i][0];
00469         bpal[i][1] = work_display.palette[i][1];
00470         bpal[i][2] = work_display.palette[i][2];
00471     }
00472 }
00473 /* #] get_palette () Sauve la palette courante :                                    */
00474 /* #[ open_work () Ouvrir station travail :                                             */
00475 void open_work (void)
00476 {
00477 int i, a, b;
00478
00479     for (i = ZERO ; i < 10 ; _VDIParBlk.intin[i++] = 1);
00480     _VDIParBlk.intin[10] = 2;
00481
00482     _VDIParBlk.intin[0] = Getrez ()+2;  /* Le numero de la r‚solution d'ouverture */
00483                                                                             /* de la station virtuelle d‚pend de la r‚solution */
00484
00485     work_display.handle = graf_handle (&a, &b, &i, &i);
00486
00487     v_opnvwk (_VDIParBlk.intin, &work_display.handle, _VDIParBlk.intout);
00488     work_display.n_color = _VDIParBlk.intout[13];
00489     work_display.n_color_pal = _VDIParBlk.intout[39];
00490     work_display.h = _VDIParBlk.intout[1] + 1;
00491     work_display.w = _VDIParBlk.intout[0] + 1;
00492 }
00493 /* #] open_work () Ouvrir station travail :                                             */
00494 /* #[ identifier_tos () Identifier le TOS :                                             */
00495 int identifier_tos(void)
00496 {
00497 int version_tos;
00498 char **sysbase = (char **)0x4f2;        /* pointeur vers le debut du systeme d'exploitation */
00499 char *systeme;
00500 long old_stack;
00501
00502     if (Super ((void *)1L) == 0L)   /* Si on est en mode utilisateur */
00503         old_stack = Super (0L);         /* on passe en mode superviseur */
00504     systeme = *sysbase;                     /* debut du systeme d'exploitation */
00505
00506     if (old_stack)                          /* Si on ‚tait en utilisateur au d‚but */
00507         Super((void *)old_stack);   /*  on y retourne */
00508
00509     version_tos = *(int *)(systeme+2);
00510     return (version_tos);
00511 }
00512 /* #] identifier_tos () Identifier le TOS :                                             */
00513 /* #[ identifier_hard_soft () Identifier la machine :                           */
00514 t_ident_hard_soft identifier_hard_soft (void)
00515 {
00516 COOKIE *reponse;
00517 t_ident_hard_soft   id_locale;
00518 long le_gdos;
00519 char *c;
00520
00521     /* identification de la machine */
00522     reponse = vq_cookie_c ("_MCH");
00523     if (reponse == NULL)        /* si il n'y a pas de reponse sur */
00524     {                                               /* le cookie MCH, on est sur un ST */
00525                                                     /* sans cookie JAR et ses caracteristiques */
00526                                                     /* sont donc celles du ST */
00527         id_locale.la_machine = ST;
00528         id_locale.proc_graphique = PG_ST;
00529         id_locale.le_cpu = PROC_68000;
00530     }
00531     else
00532     {
00533         switch (reponse->datack.i[0])   /* Seuls les 16 bits forts nous interessent */
00534                                 /* et un switch se fait toujours sur un entier */
00535         {
00536         case    0x0 :
00537             id_locale.la_machine = ST;
00538             break;
00539         case    0x1 :
00540             id_locale.la_machine = STE;
00541             break;
00542         case 0x2 :
00543             id_locale.la_machine = TT;
00544             break;
00545         case 0x3 :
00546             id_locale.la_machine = FALCON_030;
00547             break;
00548         default :
00549             id_locale.la_machine = AUTRE_MACHINE;
00550             break;
00551         }
00552
00553         /* identification du systeme graphique */
00554         reponse = vq_cookie_c ("_VDO");
00555         if (reponse != NULL)                /* si il y a une reponse */
00556         switch (reponse->datack.i[0])   /* seul les 16 bits forts nous interessent */
00557                                     /* et un switch se fait toujours sur un entier */
00558         {
00559         case    0x0:
00560             id_locale.proc_graphique = PG_ST;
00561             break;
00562         case    0x1:
00563             id_locale.proc_graphique = PG_STE;
00564             break;
00565         case 0x2:
00566             id_locale.proc_graphique = PG_TT;
00567             break;
00568         case 0x3:
00569             id_locale.proc_graphique = PG_FALCON_030;
00570             break;
00571         default :
00572             id_locale.proc_graphique = AUTRE_PG;
00573             break;
00574         }
00575
00576         /* identification du CPU */
00577         reponse = vq_cookie_c ("_CPU");
00578         if (reponse != NULL)                /* si il y a une reponse */
00579         switch (reponse->datack.i[1])       /* seul les 16 bits faibles nous interessent */
00580         {
00581         case 0 :
00582             id_locale.le_cpu = PROC_68000;
00583             break;
00584         case 30 :
00585             id_locale.le_cpu = PROC_68030;
00586             break;
00587         default :
00588             id_locale.le_cpu = AUTRE_PROCESSEUR;
00589             break;
00590         }
00591     }           /* fin du if sur la presence d'une cookie jar */
00592
00593     id_locale.v_aes = _GemParBlk.global[0]; /* Nø de version AES */;
00594     if (_GemParBlk.global[1] == BLANK)
00595         id_locale.multitache = TRUE;    /* Nous sommes sous multitƒche */
00596     else
00597         id_locale.multitache = FALSE;
00598     id_locale.v_tos = identifier_tos ();
00599
00600     le_gdos = vq_vgdos ();
00601     if (le_gdos == GDOS_FSM)    /* cas SPEEDO   */
00602     {
00603         reponse = vq_cookie_c ("FSMC");
00604         c = (char *)reponse->datack.l;
00605         if ((c[0] == '_') &&
00606                 (c[1] == 'F') &&
00607                 (c[2] == 'S') &&
00608                 (c[3] == 'M'))
00609         {
00610             id_locale.le_gdos = FSM_GDOS;
00611         }
00612         else
00613         {
00614             if ((c[0] == '_') &&
00615                     (c[1] == 'S') &&
00616                     (c[2] == 'P') &&
00617                     (c[3] == 'D'))
00618             {
00619                 id_locale.le_gdos = SPEEDO_GDOS;
00620             }
00621             else
00622             {
00623                 id_locale.le_gdos = GDOS_STANDARD;
00624             }
00625         }
00626     }
00627     else
00628     {
00629         if (le_gdos == GDOS_FNT)    /* cas fontgdos */
00630         {
00631             id_locale.le_gdos = FONT_GDOS;
00632         }
00633         else
00634         {
00635             if (le_gdos == GDOS_NONE)
00636             {
00637                 id_locale.le_gdos = AUCUN_GDOS;
00638             }
00639             else
00640             {
00641                 id_locale.le_gdos = GDOS_STANDARD;
00642             }
00643         }
00644     }
00645
00646     return (id_locale);
00647 }
00648 /* #] identifier_hard_soft () Identifier la machine :                           */
00649
00650 /* #[ end () Tout lib‚rer et quitter :                                                      */
00666 void end (void)
00667 {
00668 int i = ZERO, j, rgb[3];
00669
00670     if (win)
00671     {
00672         do          /* Pour chaque fenˆtre */
00673         {
00674             if (win[i].w_hg > ZERO)     /* Appeler les fonctions de fermeture de */
00675             {
00676                 buf[3] = win[i].w_hg;   /* chaque fenˆtre pour lib‚rer l'‚ventuelle */
00677                 (*win[i].w_close)();    /* m‚moire r‚serv‚e. */
00678             }
00679         } while (NOT (win[i++].w_flags & WFLAST));
00680     }
00681
00682     if (_app)               /* Si pas accessoire */
00683     {
00684         if (adr_menu)
00685             menu_bar (adr_menu, FALSE);     /* Virer le menu */
00686         if (adr_desk)
00687             wind_set (ZERO, WF_NEWDESK, ZERO, ZERO);    /* Rendre le bureau */
00688     }
00689
00690     if (screen.fd_addr)                 /* Si ‚cran sauvegard‚ */
00691         free (screen.fd_addr);          /* Lib‚rer m‚moire */
00692     if (win)                                        /* Si m‚moire fenˆtres */
00693         free (win);                                 /* Lib‚rer m‚moire */
00694     if (adr_usr)                                /* Si m‚moire UserDef */
00695         free (adr_usr);                         /* Lib‚rer m‚moire */
00696     if (xedit)                                  /* Si m‚moire ‚ditables ‚tendus */
00697         free (xedit);                               /* Lib‚rer m‚moire */
00698     if (fnc)                                        /* Si m‚moire pointeurs de fonction */
00699         free (fnc);                                 /* Lib‚rer m‚moire */
00700     if (buffer)                                 /* Si m‚moire buffer Copier/Couper/Coller */
00701         free (buffer);                          /* Lib‚rer m‚moire */
00702
00703     if (xpict)          /* MA 26/06/94 : S'il y a des images */
00704     {
00705         for (j = ZERO ; j < nb_pict ; j++)
00706         {
00707             if (xpict[j].mfdb_image.fd_addr)
00708             {
00709                 free (xpict[j].mfdb_image.fd_addr);
00710                 xpict[j].mfdb_image.fd_addr = ZERO;
00711             }
00712         }
00713         free (xpict);   /* Lib‚rer les images */
00714     }
00715
00716     if (NOT intgr)      /* MA 18/07/94 : si le ressource n'est pas int‚gr‚ */
00717                                         /* lib‚ration du pointeur des adresses */
00718     {
00719         if (ir_trindex != NULL)
00720             free (ir_trindex);
00721         if (ir_frstr != NULL)
00722             free (ir_frstr);
00723     }
00724     if (NOT intgr)                                      /* Si ressource externe */
00725         rsrc_free ();                                       /* Le lib‚rer */
00726
00727     for (i = ZERO ; i < work_display.n_color ; i++)
00728     {
00729         rgb[0] = work_display.palette[i][0];
00730         rgb[1] = work_display.palette[i][1];
00731         rgb[2] = work_display.palette[i][2];
00732         vs_color (work_display.handle, i, rgb);
00733     }
00734     if (work_display.palette)                   /* Si m‚moire palette de couleurs */
00735         free (work_display.palette);        /* Lib‚rer m‚moire */
00736
00737     /* Retour au mode d'origine si on est sur Falcon    et qu'on a chang‚ de mode */
00738     if (desc_hard_soft.proc_graphique == PG_FALCON_030)
00739     {
00740         if (work_display.mode != Vsetmode (-1))
00741             Vsetmode (work_display.mode);
00742     }
00743     v_clsvwk (work_display.handle);
00744     appl_exit ();
00745     exit (ZERO);
00746 }
00747 /* #] end () Tout lib‚rer et quitter :                                                      */
00748
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2USR1.C Source File

BIG2USR1.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS D'OBJETS USERDEF
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2USR1.H"
00007 #include "BIG2USR2.H"
00008 /* #[ Look par d‚faut des objets BIG :                                                      */
00009 Obj_user look = {TRUE,      /* Soulignement du caractŠre raccourci clavier */
00010                                  RED,           /* Couleur du caractŠre raccourci clavier */
00011                                  BLACK,     /* Couleur texte B_UNDER */
00012                                  BLACK,     /* Couleur ic“ne B_CHECKB */
00013                                  BLACK,     /* Couleur texte B_CHECKB */
00014                                  BLACK,     /* Couleur ic“ne B_ROUNDB */
00015                                  BLACK,     /* Couleur texte B_ROUNDB */
00016                                  BLACK,     /* Couleur ic“ne B_POPUP / B_LIST */
00017                                  BLACK,     /* Couleur texte B_POPUP / B_LIST */
00018                                  BLACK,     /* Couleur B_MOVE */
00019                                  BLACK,     /* Couleur texte B_GRASTR */
00020                                  BLACK,     /* Couleur lignes B_FRAME */
00021                                  BLACK,     /* Couleur texte B_FRAME */
00022                                  BLACK};    /* Couleur B_NICELINE */
00023 /* #] Look par d‚faut des objets BIG :                                                      */
00024 /* #[ userdef () Objet -> UserDef :                                                             */
00025 void userdef (char *rsc, int *nb_form, int nb_tree)
00026 {
00027 OBJECT *adr;
00028 RSHDR rsh;
00029 int i, j, k = ZERO, xtype, nb_user = ZERO, fh, p = ZERO, ptr, nb_pfnc = ZERO,
00030         nb_xedit = ZERO, len_xedit = ZERO, taille, pere, coul, epais, nu_pict = ZERO,
00031         tab[NU] = {BW_SIZERUL, BW_CLOSER, BW_SMALLER, BW_CYCLER, BW_FULLER,
00032                              BW_SIZERUR, BW_UPARROW, BW_DNARROW, BW_SIZERDL, BW_LFARROW,
00033                              BW_RTARROW, BW_SIZERDR};
00034
00035     if (NOT nb_tree)
00036     {
00037         fh = (int)Fopen (rsc, FO_READ);             /* Ouvrir RSC comme un fichier */
00038         Fread (fh, sizeof (rsh), &rsh);     /* Lire le header */
00039         Fclose (fh);                                                        /* Fermer le fichier */
00040         *nb_form = rsh.rsh_ntree;                   /* Prendre le nbre de formulaires */
00041
00042         /* MA 18/07/94: allocation dynamique du ir_trindex dans le cas d'un ressource externe   */
00043         ir_trindex = (OBJECT**)calloc (*nb_form, sizeof (OBJECT**));
00044         ir_frstr = (char **)calloc (rsh.rsh_nstring, sizeof (char **));
00045     }
00046     else
00047         *nb_form = nb_tree;
00048
00049     /* MA 18/07/94: r‚cup‚ration de l'adresse des free string dŠs le d‚but
00050          pour ˆtre compatible avec les ressources int‚gr‚s */
00051     if (NOT nb_tree)
00052     {
00053         for (i = ZERO ; i < rsh.rsh_nstring ; i++)
00054             rsrc_gaddr (R_STRING, i, &ir_frstr[i]); /* Adr free string */
00055     }
00056
00057     for (i = ZERO ; i < *nb_form ; i++)                 /* Pour chaque arbre */
00058     {
00059         if (NOT nb_tree)
00060         {
00061             rsrc_gaddr (R_TREE, i, &adr);                       /* Adr formulaire */
00062             /* MA 18/07/94: on garde les adresses des TREEs */
00063             ir_trindex[i] = adr;
00064         }
00065         else
00066             adr = ir_trindex[i];
00067         j = ZERO;
00068
00069
00070         do      /* Compter les types ‚tendus (UserDef ou Pfnc) */
00071         {
00072             xtype = adr[j].ob_type >> 8;
00073
00074             if ((xtype == B_MOVE) || (xtype == B_SELEC) ||
00075                     (xtype == B_FRAME) || (xtype == B_GRASTR) ||
00076                     (xtype == B_HIERM) || (xtype == B_UNDER) ||
00077                     (xtype == B_UNDO) || (xtype == B_POPUP) ||
00078                     (xtype == B_LIST) || (xtype == B_PICT) || (xtype == B_SMSTR))
00079             {
00080                 /* MA 18/07/94: on garde le type de l'objet userdef dans le poids fort
00081                      de ob_type, pour pouvoir analyser ensuite en fonction du type de l'objet
00082                      on garde le type ‚tendu mais on remplace l'ob_type par USERDEF */
00083                 adr[j].ob_type = (adr[j].ob_type & 0xFF00) + G_USERDEF;
00084                 nb_user++;                  /* incr‚menter compteur UserDefs */
00085             }
00086             if (adr[3].ob_type == G_TITLE)      /* Si on est dans un arbre de menu */
00087             {
00088                 if (adr[j].ob_type == G_STRING && (adr[j].ob_state & DISABLED) &&
00089                         ((strstr(adr[j].ob_spec.free_string, "-----") != ZERO) ||
00090                         (strstr(adr[j].ob_spec.free_string, "=====") != ZERO)))
00091                     nb_user++;      /* Si s‚parateur DISABLED */
00092             }
00093             if (xtype == B_PICT)    /* MA 26/06/94 */
00094                 nb_pict++;                  /* Incr‚menter le compteur d'images */
00095             if (xtype == B_FNCP)
00096                 nb_pfnc++;                  /* incr‚menter compteur Pfncs */
00097             if (xtype == B_EDIT)
00098             {
00099                 nb_xedit++;
00100                 len_xedit += (adr[j].ob_state >> 8);
00101             }
00102         } while (NOT (adr[j++].ob_flags & LASTOB)); /* Jusqu'au dernier objet */
00103     }
00104     nb_user += (NFU + NTU); /* Ne pas oublier le ressource inclu et les fenˆtres */
00105     len_xedit += (nb_xedit + 1);
00106
00107     if (nb_pict)        /* s'il y a des images */
00108     {
00109         xpict = calloc (nb_pict, sizeof (t_image_dial));    /* Allouer la zone pour stocker leurs infos */
00110         for (nu_pict = ZERO ; nu_pict < nb_pict ; nu_pict++)
00111         {
00112             xpict[nu_pict].mfdb_image.fd_addr = NULL;   /* Le MFDB n'est pas allou‚ */
00113             xpict[nu_pict].cur_pos.g_x = xpict[nu_pict].cur_pos.g_y =
00114             xpict[nu_pict].cur_pos.g_w = xpict[nu_pict].cur_pos.g_h = ZERO;
00115         }
00116         nu_pict = ZERO;
00117     }
00118
00119     if (nb_xedit)               /* S'il y a des ‚ditables ‚tendus */
00120     {
00121         xedit = (char *)malloc (len_xedit);
00122         *xedit = '\0';
00123         ptr = 1;
00124
00125         for (i = ZERO ; i < *nb_form ; i++)                 /* Pour chaque arbre */
00126         {
00127             adr = ir_trindex[i];
00128             j = ZERO;
00129
00130             do
00131             {
00132                 if ((adr[j].ob_type >> 8) == B_EDIT)
00133                 {
00134                     adr[j].ob_spec.tedinfo->te_ptext = xedit + ptr;
00135                     taille = (adr[j].ob_state >> 8);
00136                     ptr += (taille + 1);
00137                     *(xedit + ptr - 1) = '\0';
00138                     adr[j].ob_spec.tedinfo->te_txtlen = taille + 1;
00139                     adr[j].ob_spec.tedinfo->te_tmplen +=
00140                             taille - (int)strlen (adr[j].ob_spec.tedinfo->te_pvalid);
00141                 }
00142             } while (NOT (adr[j++].ob_flags & LASTOB)); /* Jusqu'au dernier objet */
00143         }
00144     }
00145     else
00146         xedit = (char *)ZERO;
00147
00148     if (nb_pfnc)                /* S'il y a des pointeurs sur fonction */
00149     {
00150         fnc = (FNCP *)malloc (nb_pfnc * sizeof (FNCP));
00151         ptr = ZERO;
00152
00153         for (i = ZERO ; i < *nb_form ; i++)                 /* Pour chaque arbre */
00154         {
00155             adr = ir_trindex[i];
00156             j = ZERO;
00157
00158             do
00159             {
00160                 if ((adr[j].ob_type >> 8) == B_FNCP)
00161                 {
00162                     ptr = p++;                          /* Index du pointeur */
00163                     ptr <<= 8;                          /* Le transformer en ob_state ‚tendu */
00164                     adr[j].ob_state |= ptr; /* Le mettre dans l'ob_state ‚tendu */
00165                 }
00166             } while (NOT (adr[j++].ob_flags & LASTOB)); /* Jusqu'au dernier objet */
00167         }
00168     }
00169     else
00170         fnc = (FNCP *)ZERO;
00171
00172         /* Reserver tableau de structures USERBLKs */
00173     adr_usr = (USERBLK *)malloc (nb_user * sizeof(USERBLK));
00174
00175     if (nb_user >= 1)       /* S'il y a des UserDefs dans le programme */
00176     {
00177         for (i = ZERO ; i < *nb_form ; i++)                 /* Pour chaque arbre */
00178         {
00179             adr = ir_trindex[i];
00180             j = ZERO;
00181
00182             do
00183             {
00184                 xtype = adr[j].ob_type >> 8;
00185                 switch (xtype)
00186                 {
00187                 case B_SELEC :
00188                     if ((adr[j].ob_flags & SELECTABLE) && (adr[j].ob_flags & RBUTTON))
00189                     {
00190                         adr_usr[k].ub_code = brond;
00191                         adr_usr[k].ub_parm = (long) adr[j].ob_spec.free_string;
00192                         adr[j].ob_spec.userblk = adr_usr + k;
00193                     }
00194                     else if ((adr[j].ob_flags & SELECTABLE) &&
00195                                      (NOT (adr[j].ob_state & SHADOWED)))
00196                     {
00197                         adr_usr[k].ub_code = bcoche;
00198                         adr_usr[k].ub_parm = (long) adr[j].ob_spec.free_string;
00199                         adr[j].ob_spec.userblk = adr_usr + k;
00200                     }
00201                     k++;
00202                     break;
00203                 case B_UNDER :
00204                 case B_UNDO :
00205                     adr_usr[k].ub_code = bunder;
00206                     adr_usr[k].ub_parm = (long) adr[j].ob_spec.free_string;
00207                     adr[j].ob_spec.userblk = adr_usr + k;
00208                     k++;
00209                     break;
00210                 case B_GRASTR :
00211                     adr_usr[k].ub_code = bgrastr;
00212                     adr_usr[k].ub_parm = (long) adr[j].ob_spec.free_string;
00213                     adr[j].ob_spec.userblk = adr_usr + k;
00214                     k++;
00215                     break;
00216                 case B_SMSTR :
00217                     adr_usr[k].ub_code = bsmstr;
00218                     adr_usr[k].ub_parm = (long) adr[j].ob_spec.free_string;
00219                     adr[j].ob_spec.userblk = adr_usr + k;
00220                     k++;
00221                     break;
00222                 case B_FRAME :
00223                     adr_usr[k].ub_code = bcadre;
00224                     adr_usr[k].ub_parm = (long) adr[j].ob_spec.free_string;
00225                     adr[j].ob_spec.userblk = adr_usr + k;
00226                     k++;
00227                     break;
00228                 case B_HIERM :
00229                     adr_usr[k].ub_code = bmhier;
00230                     adr_usr[k].ub_parm = (long) adr[j].ob_spec.free_string;
00231                     adr[j].ob_spec.userblk = adr_usr + k;
00232                     k++;
00233                     break;
00234                 case B_MOVE :
00235                     adr_usr[k].ub_code = bmove;
00236                     adr_usr[k].ub_parm = ZERO;
00237                     adr[j].ob_spec.userblk = adr_usr + k;
00238                     k++;
00239                     break;
00240                 case B_POPUP :
00241                 case B_LIST :
00242                     adr_usr[k].ub_code = bpopup;
00243                     adr_usr[k].ub_parm = (long) adr[j].ob_spec.free_string;
00244                     adr[j].ob_spec.userblk = adr_usr + k;
00245                     if (work_display.n_color < 16)  /* Si moins de 16 couleurs */
00246                         adr[j].ob_flags &= ~BKGR;           /* Virer le BackGround */
00247                     k++;
00248                     break;
00249                 case B_PICT :       /* MA 26/06/94 */
00250                     adr_usr[k].ub_code = bpict;         /* Routine image en formulaire */
00251                     adr_usr[k].ub_parm = (long)&xpict[nu_pict++];   /* Adresse de la zone de d‚finition de l'image */
00252                     adr[j].ob_spec.userblk = adr_usr + k;
00253                     k++;
00254                     break;
00255                 }
00256
00257                 if (adr[3].ob_type == G_TITLE)      /* Si on est dans un arbre de menu */
00258                 {
00259                     if ((adr[j].ob_type == G_STRING) && (adr[j].ob_state & DISABLED) &&
00260                             ((strstr(adr[j].ob_spec.free_string, "-----") != ZERO) ||
00261                             (strstr(adr[j].ob_spec.free_string, "=====") != ZERO)))
00262                     {       /* Si s‚parateur DISABLED */
00263                         adr_usr[k].ub_code = bniceline;
00264                         adr_usr[k].ub_parm = ZERO;
00265                         adr[j].ob_spec.userblk = adr_usr + k;
00266                         adr[j].ob_type = G_USERDEF;
00267                         k++;
00268                     }
00269                 }
00270
00271                 if (((adr[j].ob_type & 0xFF) == G_FTEXT) || ((adr[j].ob_type & 0xFF) == G_FBOXTEXT))
00272                 {
00273                     if (adr[j].ob_flags & BKGR)
00274                     {
00275                         if ((adr[j].ob_type & 0xFF) == G_FTEXT)
00276                         {
00277                             adr[j].ob_type = (xtype << 8) | G_FBOXTEXT;
00278                             epais = ZERO;
00279                         }
00280                         else
00281                             epais = adr[j].ob_spec.tedinfo->te_thickness;
00282                         coul = adr[j].ob_spec.tedinfo->te_color >> 8;
00283                         adr[j].ob_spec.tedinfo->te_thickness = epais;
00284                         pere = parent (adr, j);
00285                         while (adr[pere].ob_type != G_BOX)
00286                             pere = parent (adr, pere);
00287                         adr[j].ob_spec.tedinfo->te_color = adr[pere].ob_spec.obspec.interiorcol;
00288                         adr[j].ob_spec.tedinfo->te_color |= (adr[pere].ob_spec.obspec.fillpattern << 4);
00289                         adr[j].ob_spec.tedinfo->te_color |= (coul << 8);
00290                     }
00291                     if (work_display.n_color < 16)      /* Si moins de 16 couleurs */
00292                     {
00293                         coul = adr[j].ob_spec.tedinfo->te_color >> 8;   /* Fond en blanc */
00294                         adr[j].ob_spec.tedinfo->te_color = WHITE;
00295                         adr[j].ob_spec.tedinfo->te_color |= (coul << 8);
00296                     }
00297                 }
00298             } while (NOT (adr[j++].ob_flags & LASTOB)); /* Jusqu'au dernier objet */
00299         }
00300     }
00301     else
00302         adr_usr = (USERBLK *)ZERO;
00303
00304         /* Traiter UserDefs ressource inclu */
00305     adr_usr[k].ub_code = bmove;                     /* Alerte int‚gr‚e */
00306     adr_usr[k].ub_parm = ZERO;
00307     bi_trindex[BIGALERTE][AL_MOVE].ob_spec.userblk = adr_usr + k;
00308     bi_trindex[BIGALERTE][AL_MOVE].ob_type = G_USERDEF;
00309     bi_trindex[BIGALERTE][AL_MOVE].ob_type |= 0x1100;   /* Garder type ‚tendu */
00310     k++;
00311     adr_usr[k].ub_code = bunder;
00312     adr_usr[k].ub_parm = (long) bi_trindex[BIGALERTE][AL_BU1].ob_spec.free_string;
00313     bi_trindex[BIGALERTE][AL_BU1].ob_spec.userblk = adr_usr + k;
00314     bi_trindex[BIGALERTE][AL_BU1].ob_type = G_USERDEF;
00315     k++;
00316     adr_usr[k].ub_code = bunder;
00317     adr_usr[k].ub_parm = (long) bi_trindex[BIGALERTE][AL_BU2].ob_spec.free_string;
00318     bi_trindex[BIGALERTE][AL_BU2].ob_spec.userblk = adr_usr + k;
00319     bi_trindex[BIGALERTE][AL_BU2].ob_type = G_USERDEF;
00320     k++;
00321     adr_usr[k].ub_code = bunder;
00322     adr_usr[k].ub_parm = (long) bi_trindex[BIGALERTE][AL_BU3].ob_spec.free_string;
00323     bi_trindex[BIGALERTE][AL_BU3].ob_spec.userblk = adr_usr + k;
00324     bi_trindex[BIGALERTE][AL_BU3].ob_type = G_USERDEF;
00325     k++;                                                                    /* Les fenˆtres BIG */
00326     adr_usr[k].ub_code = fond;                              /* Le fond (racine) */
00327     adr_usr[k].ub_parm = ZERO;
00328     bi_trindex[BIG_WIND][ROOT].ob_spec.userblk = adr_usr + k;
00329     bi_trindex[BIG_WIND][ROOT].ob_type = G_USERDEF;
00330     k++;
00331     adr_usr[k].ub_code = titinf;                            /* Barre de titre */
00332     adr_usr[k].ub_parm = ZERO;
00333     bi_trindex[BIG_WIND][BW_MOVER].ob_spec.userblk = adr_usr + k;
00334     bi_trindex[BIG_WIND][BW_MOVER].ob_type = G_USERDEF;
00335     k++;
00336     adr_usr[k].ub_code = titinf;                            /* Barre d'info */
00337     adr_usr[k].ub_parm = ZERO;
00338     bi_trindex[BIG_WIND][BW_INFO].ob_spec.userblk = adr_usr + k;
00339     bi_trindex[BIG_WIND][BW_INFO].ob_type = G_USERDEF;
00340     k++;
00341     adr_usr[k].ub_code = elev;                              /* Ascenseur V */
00342     adr_usr[k].ub_parm = ZERO;
00343     bi_trindex[BIG_WIND][BW_VELEV].ob_spec.userblk = adr_usr + k;
00344     bi_trindex[BIG_WIND][BW_VELEV].ob_type = G_USERDEF;
00345     k++;
00346     adr_usr[k].ub_code = elev;                              /* Ascenseur H */
00347     adr_usr[k].ub_parm = ZERO;
00348     bi_trindex[BIG_WIND][BW_HELEV].ob_spec.userblk = adr_usr + k;
00349     bi_trindex[BIG_WIND][BW_HELEV].ob_type = G_USERDEF;
00350     k++;
00351     adr_usr[k].ub_code = sld;                                   /* Slider vertical */
00352     adr_usr[k].ub_parm = ZERO;
00353     bi_trindex[BIG_WIND][BW_VSLIDE].ob_spec.userblk = adr_usr + k;
00354     bi_trindex[BIG_WIND][BW_VSLIDE].ob_type = G_USERDEF;
00355     k++;
00356     adr_usr[k].ub_code = sld;                                   /* Slider horizontal */
00357     adr_usr[k].ub_parm = ZERO;
00358     bi_trindex[BIG_WIND][BW_HSLIDE].ob_spec.userblk = adr_usr + k;
00359     bi_trindex[BIG_WIND][BW_HSLIDE].ob_type = G_USERDEF;
00360     k++;
00361     adr_usr[k].ub_code = work;                              /* Zone travail */
00362     adr_usr[k].ub_parm = ZERO;
00363     bi_trindex[BIG_WIND][BW_WORK].ob_spec.userblk = adr_usr + k;
00364     bi_trindex[BIG_WIND][BW_WORK].ob_type = G_USERDEF;
00365     k++;
00366     for (i = ZERO ; i < NU ; i++)                   /* Pour chaque gadget de fenˆtre */
00367     {
00368         adr_usr[i + k].ub_code = gadget;
00369         adr_usr[i + k].ub_parm = ZERO;
00370         bi_trindex[BIG_WIND][tab[i]].ob_spec.userblk = adr_usr + i + k;
00371         bi_trindex[BIG_WIND][tab[i]].ob_type = G_USERDEF;
00372     }
00373
00374     if (work_display.n_color >= 16) /* Si on est en couleurs */
00375     {
00376         bi_trindex[BIGALERTE]->ob_spec.obspec.interiorcol = LWHITE;
00377         bi_trindex[BIGALERTE]->ob_spec.obspec.fillpattern = 7;
00378         bi_trindex[BIGLIST][BL_ASC].ob_spec.obspec.interiorcol = LWHITE;
00379         bi_trindex[BIGLIST][BL_ASC].ob_spec.obspec.fillpattern = 7;
00380         set_windows (BLANK, BLANK, BLANK, BLANK, BLANK,
00381                                  8, LWHITE, 8, LWHITE,
00382                                  BLANK, BLANK, BLANK, BLANK,
00383                                  LWHITE, BLANK);
00384     }
00385 }
00386 /* #] userdef () Objet -> UserDef :                                                             */
00387 /* #[ bcoche () Routine bouton Coch‚ :                                                      */
00388 int cdecl bcoche (PARMBLK *para)
00389 {
00390 int tab[4], pxy[8], w, h, len, pox, poy, i, sel,
00391         dummy, obj, color[2], pere, att[10];
00392 char *texte, car[2];
00393 MFDB nul = {0}, pic, msk;
00394
00395     vqt_attributes (work_display.handle, att);  /* Noter attributs texte */
00396     vst_font (work_display.handle, 1);
00397     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);  /* BoŒtes caractŠres */
00398     fill_tab (tab, 4,           /* Zone de clip */
00399                             para->pb_xc, para->pb_yc,
00400                             para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00401     vs_clip (work_display.handle, TRUE, tab);   /* Clip ON */
00402
00403     sel = para->pb_currstate & SELECTED;
00404
00405     if (h > 8)          /* Haute */
00406     {
00407         obj = sel ? BCHS : BCHN;
00408         pic.fd_h = msk.fd_h = 16;
00409     }
00410     else                        /* Basse */
00411     {
00412         obj = sel ? BCMS : BCMN;
00413         pic.fd_h = msk.fd_h = 8;
00414     }
00415
00416     pic.fd_addr = (void *) bi_trindex[IMG_USER][obj].ob_spec.iconblk->ib_pdata;
00417     msk.fd_addr = (void *) bi_trindex[IMG_USER][obj].ob_spec.iconblk->ib_pmask;
00418     pic.fd_w = msk.fd_w = 16;
00419     pic.fd_wdwidth = msk.fd_wdwidth = 1;
00420     pic.fd_nplanes = msk.fd_nplanes = 1;
00421     pic.fd_stand = msk.fd_stand = ZERO;
00422
00423     if (NOT (para->pb_tree[para->pb_obj].ob_flags & BS_RIGHT))
00424         fill_tab (pxy, 8,
00425                             ZERO, ZERO, pic.fd_w - 1, pic.fd_h - 1,
00426                             para->pb_x, para->pb_y,
00427                             para->pb_x + pic.fd_w - 1,
00428                             para->pb_y + pic.fd_h - 1);
00429     else
00430         fill_tab (pxy, 8,
00431                             ZERO, ZERO, pic.fd_w - 1, pic.fd_h - 1,
00432                             para->pb_x + para->pb_w - pic.fd_w - 1, para->pb_y,
00433                             para->pb_x + para->pb_w - pic.fd_w - 1 + pic.fd_w - 1,
00434                             para->pb_y + pic.fd_h - 1);
00435
00436     pere = parent (para->pb_tree, para->pb_obj);
00437     while (para->pb_tree[pere].ob_type != G_BOX)
00438         pere = parent (para->pb_tree, pere);
00439     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
00440         color[0] = para->pb_tree[pere].ob_spec.obspec.interiorcol;
00441     else
00442         color[0] = WHITE;
00443     color[1] = WHITE;
00444   vrt_cpyfm (work_display.handle, MD_TRANS, pxy, &msk, &nul, color);
00445     color[0] = look.cicn_coche;
00446   vrt_cpyfm (work_display.handle, MD_TRANS, pxy, &pic, &nul, color);
00447
00448     texte = (char *)para->pb_parm;  /* R‚cup‚rer pointeur sur le texte */
00449     len = (int)strlen (texte);          /* Longueur du texte */
00450     vst_color (work_display.handle, look.ctxt_coche);
00451     vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);
00452     vswr_mode (work_display.handle, MD_TRANS);      /* Texte en mode transparent */
00453     vst_effects (work_display.handle, EFNONE);      /* D‚sactiver tous les effets */
00454     if (NOT (para->pb_tree[para->pb_obj].ob_flags & BS_RIGHT))
00455     {
00456         pox = para->pb_x + h + w;               /* Position en x */
00457         if (work_display.res == 1)
00458             pox += w;
00459     }
00460     else
00461         pox = para->pb_x;
00462     poy = para->pb_y;                               /* et en y. */
00463     car[1] = '\0';
00464     for (i = ZERO ; i < len ; i++)  /* CaractŠres un par un */
00465     {
00466         if (texte[i] != '[')            /* Si ce n'est pas le [, */
00467         {
00468             car[0] = texte[i];                              /* le mettre ds chaine temporaire, */
00469             v_gtext (work_display.handle, pox, poy, car);   /* et l'‚crire. */
00470             pox += w;                                                   /* R‚ajuster position en x */
00471         }
00472         else                                            /* Si c'est le [, */
00473         {
00474             if (look.under)                                             /* Si soulignement */
00475                 vst_effects (work_display.handle, EFSOULI);     /* Soulign‚ */
00476             vst_color (work_display.handle, look.cunder);   /* couleur caractŠre */
00477             i++;                                                                /* caractŠre suivant, */
00478             car[0] = texte[i];                                  /* dans la chaine temporaire, */
00479             v_gtext (work_display.handle, pox, poy, car);       /* l'‚crire. */
00480             pox += w;                                                       /* R‚ajuster position en x */
00481             vst_effects (work_display.handle, EFNONE);                          /* D‚sactiver tous les effets */
00482             vst_color (work_display.handle, look.ctxt_coche);
00483         }
00484     }
00485     vs_clip (work_display.handle, FALSE, tab);  /* Clip OFF */
00486         /* Restaurer attributs */
00487     vswr_mode (work_display.handle, att[5]);
00488     vst_font (work_display.handle, att[0]);
00489     vst_color (work_display.handle, att[1]);
00490     vst_alignment (work_display.handle, att[3], att[4], &dummy, &dummy);
00491     vst_height (work_display.handle, work_display.hc,
00492                             &att[6], &att[7], &att[8], &att[9]);
00493     return (para->pb_currstate & ~SELECTED);
00494 }
00495 /* #] bcoche () Routine bouton Coch‚ :                                                      */
00496 /* #[ brond () Routine bouton Rond :                                                            */
00497 int cdecl brond (PARMBLK *para)
00498 {
00499 int tab[4], pxy[8], w, h, len, pox, poy, i, sel,
00500         dummy, obj, color[2], pere, att[10];
00501 char *texte, car[2];
00502 MFDB nul = {0}, pic, msk;
00503
00504     vqt_attributes (work_display.handle, att);  /* Noter attributs texte */
00505     vst_font (work_display.handle, 1);
00506     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);  /* BoŒtes caractŠres */
00507
00508     fill_tab (tab, 4,           /* Zone de clip */
00509                         para->pb_xc, para->pb_yc,
00510                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00511     vs_clip (work_display.handle, TRUE, tab);   /* Clip ON */
00512
00513     sel = para->pb_currstate & SELECTED;
00514
00515     if (h > 8)          /* Haute */
00516     {
00517         obj = sel ? RBHS : RBHN;
00518         pic.fd_h = msk.fd_h = 16;
00519     }
00520     else                        /* Basse */
00521     {
00522         obj = sel ? RBMS : RBMN;
00523         pic.fd_h = msk.fd_h = 8;
00524     }
00525
00526     pic.fd_addr = (void *) bi_trindex[IMG_USER][obj].ob_spec.iconblk->ib_pdata;
00527     msk.fd_addr = (void *) bi_trindex[IMG_USER][obj].ob_spec.iconblk->ib_pmask;
00528     pic.fd_w = msk.fd_w = 16;
00529     pic.fd_wdwidth = msk.fd_wdwidth = 1;
00530     pic.fd_nplanes = msk.fd_nplanes = 1;
00531     pic.fd_stand = msk.fd_stand = ZERO;
00532
00533     if (NOT (para->pb_tree[para->pb_obj].ob_flags & BS_RIGHT))
00534         fill_tab (pxy, 8,
00535                             ZERO, ZERO, pic.fd_w - 1, pic.fd_h - 1,
00536                             para->pb_x, para->pb_y,
00537                             para->pb_x + pic.fd_w - 1,
00538                             para->pb_y + pic.fd_h - 1);
00539     else
00540         fill_tab (pxy, 8,
00541                             ZERO, ZERO, pic.fd_w - 1, pic.fd_h - 1,
00542                             para->pb_x + para->pb_w - pic.fd_w - 1, para->pb_y,
00543                             para->pb_x + para->pb_w - pic.fd_w - 1 + pic.fd_w - 1,
00544                             para->pb_y + pic.fd_h - 1);
00545
00546     pere = parent (para->pb_tree, para->pb_obj);
00547     while (para->pb_tree[pere].ob_type != G_BOX)
00548         pere = parent (para->pb_tree, pere);
00549     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
00550         color[0] = para->pb_tree[pere].ob_spec.obspec.interiorcol;
00551     else
00552         color[0] = WHITE;
00553     color[1] = WHITE;
00554   vrt_cpyfm (work_display.handle, MD_TRANS, pxy, &msk, &nul, color);
00555     color[0] = look.cicn_radio;
00556   vrt_cpyfm (work_display.handle, MD_TRANS, pxy, &pic, &nul, color);
00557
00558     texte = (char *)para->pb_parm;  /* R‚cup‚rer pointeur sur le texte */
00559     len = (int)strlen (texte);          /* Longueur du texte */
00560     vst_color (work_display.handle, look.ctxt_radio);
00561     vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);
00562     vswr_mode (work_display.handle, MD_TRANS);  /* Texte en mode Transparent */
00563     vst_effects (work_display.handle, EFNONE);      /* D‚sactiver tous les effets */
00564     if (NOT (para->pb_tree[para->pb_obj].ob_flags & BS_RIGHT))
00565     {
00566         pox = para->pb_x + h + w;               /* Position en x */
00567         if (work_display.res == 1)
00568             pox += w;
00569     }
00570     else
00571         pox = para->pb_x;
00572     poy = para->pb_y;                               /* et en y. */
00573     car[1] = '\0';
00574     for (i = ZERO ; i < len ; i++)  /* CaractŠres un par un */
00575     {
00576         if (texte[i] != '[')            /* Si ce n'est pas le [, */
00577         {
00578             car[0] = texte[i];                              /* dans la chaine temporaire, */
00579             v_gtext (work_display.handle, pox, poy, car);   /* l'‚crire. */
00580             pox += w;                                                   /* R‚ajuster position en x */
00581         }
00582         else                                            /* Si c'est le [, */
00583         {
00584             if (look.under)                                                             /* Si soulignement */
00585                 vst_effects (work_display.handle, EFSOULI);     /* Soulign‚ */
00586             vst_color (work_display.handle, look.cunder);   /* Couleur caractŠre */
00587             i++;                                                                /* caractŠre suivant, */
00588             car[0] = texte[i];                                  /* dans la chaine temporaire, */
00589             v_gtext (work_display.handle, pox, poy, car);       /* l'‚crire. */
00590             pox += w;                                                       /* R‚ajuster position en x */
00591             vst_effects (work_display.handle, EFNONE);                          /* D‚sactiver tous les effets */
00592             vst_color (work_display.handle, look.ctxt_radio);
00593         }
00594     }
00595
00596     vs_clip (work_display.handle, FALSE, tab);  /* Clip OFF */
00597         /* Restaurer attributs */
00598     vswr_mode (work_display.handle, att[5]);
00599     vst_font (work_display.handle, att[0]);
00600     vst_color (work_display.handle, att[1]);
00601     vst_alignment (work_display.handle, att[3], att[4], &dummy, &dummy);
00602     vst_height (work_display.handle, work_display.hc,
00603                             &att[6], &att[7], &att[8], &att[9]);
00604     return (para->pb_currstate & ~SELECTED);
00605 }
00606 /* #] brond () Routine bouton Rond :                                                            */
00607 /* #[ bcadre () Routine bouton Cadre :                                                      */
00608 int cdecl bcadre (PARMBLK *para)
00609 {
00610 int tab[4], rec[10], x, y, w, h, dummy, effets, pere, att[10], atf[5];
00611 char *texte;
00612
00613     vqt_attributes (work_display.handle, att);  /* Noter attributs texte */
00614     vqf_attributes (work_display.handle, atf);  /* Noter attributs remplissage */
00615     vst_font (work_display.handle, 1);
00616     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);  /* BoŒtes caractŠres */
00617
00618     fill_tab (tab, 4,           /* Zone de clip */
00619                         para->pb_xc, para->pb_yc,
00620                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00621     vs_clip (work_display.handle, TRUE, tab);   /* Clip ON */
00622
00623     vswr_mode (work_display.handle, MD_REPLACE);                /* Dessin en mode Remplacement */
00624     vsf_color (work_display.handle, look.clin_frame);       /* Couleur cadre */
00625     if (NOT (para->pb_tree[para->pb_obj].ob_flags & BKGR))  /* Si pas Fond */
00626     {
00627         vsf_interior (work_display.handle, FIS_HOLLOW); /* Fond blanc */
00628         vsf_perimeter (work_display.handle, TRUE);  /* Dessiner le p‚rimŠtre */
00629         fill_tab (rec, 4,
00630                             para->pb_x, para->pb_y + (h / 2),
00631                             para->pb_x + para->pb_w, para->pb_y + para->pb_h);
00632         v_bar (work_display.handle, rec);                   /* Rectangle */
00633     }
00634     else
00635     {
00636         vsl_color (work_display.handle, look.clin_frame);
00637         vsl_width (work_display.handle, 1);
00638         vsl_ends (work_display.handle, SQUARE, SQUARE);
00639         vsl_type (work_display.handle, SOLID);
00640         fill_tab (rec, 10,
00641                             para->pb_x, para->pb_y + (h / 2),
00642                             para->pb_x + para->pb_w, para->pb_y + (h / 2),
00643                             para->pb_x + para->pb_w, para->pb_y + para->pb_h,
00644                             para->pb_x, para->pb_y + para->pb_h,
00645                             para->pb_x, para->pb_y + (h / 2));
00646         v_pline (work_display.handle, 5, rec);      /* Rectangle vide */
00647         vsl_color (work_display.handle, WHITE);
00648         fill_tab (rec, 6,
00649                             para->pb_x + 1, para->pb_y + para->pb_h,
00650                             para->pb_x + 1, para->pb_y + (h / 2) + 1,
00651                             para->pb_x + 1 + para->pb_w, para->pb_y + (h / 2) + 1);
00652         v_pline (work_display.handle, 3, rec);      /* 1ø ligne blanche */
00653         fill_tab (rec, 6,
00654                             para->pb_x + para->pb_w + 1, para->pb_y + (h / 2) + 2,
00655                             para->pb_x + para->pb_w + 1, para->pb_y + para->pb_h + 1,
00656                             para->pb_x + 1, para->pb_y + para->pb_h + 1);
00657         v_pline (work_display.handle, 3, rec);      /* 2ø ligne blanche */
00658     }
00659
00660     texte = (char *)para->pb_parm;  /* R‚cup‚rer pointeur sur le texte */
00661     fill_tab (rec, 4,
00662                         para->pb_x + w, para->pb_y,
00663                         para->pb_x + w + (w * (int)strlen (texte)),
00664                         para->pb_y + h);
00665     vsf_perimeter (work_display.handle, FALSE);
00666     vsf_color (work_display.handle, BLACK);
00667     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
00668     {
00669         pere = parent (para->pb_tree, para->pb_obj);
00670         while (para->pb_tree[pere].ob_type != G_BOX)
00671             pere = parent (para->pb_tree, pere);
00672         if (para->pb_tree[pere].ob_spec.obspec.fillpattern == ZERO)
00673             vsf_interior (work_display.handle, FIS_HOLLOW);
00674         else if (para->pb_tree[pere].ob_spec.obspec.fillpattern == 7)
00675             vsf_interior (work_display.handle, FIS_SOLID);
00676         else
00677             vsf_interior (work_display.handle, FIS_PATTERN);
00678         vsf_color (work_display.handle, para->pb_tree[pere].ob_spec.obspec.interiorcol);
00679         vsf_style (work_display.handle, para->pb_tree[pere].ob_spec.obspec.fillpattern);
00680     }
00681     else
00682         vsf_interior (work_display.handle, FIS_HOLLOW);
00683     v_bar (work_display.handle, rec);
00684
00685     vst_color (work_display.handle, look.ctxt_frame);
00686     vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);   /* Align‚ … gauche en haut */
00687     vswr_mode (work_display.handle, MD_TRANS);              /* Texte en mode Transparent */
00688     effets = para->pb_tree[para->pb_obj].ob_state >> 8;
00689     vst_effects (work_display.handle, effets);  /* Activer les effets */
00690     x = para->pb_x + w;                     /* Position en x */
00691     y = para->pb_y;                             /* et en y. */
00692     v_gtext (work_display.handle, x, y, texte); /* Ecrire le texte */
00693
00694     vs_clip (work_display.handle, FALSE, tab);  /* Clip OFF */
00695         /* Restaurer attributs */
00696     vswr_mode (work_display.handle, att[5]);
00697     vst_font (work_display.handle, att[0]);
00698     vst_color (work_display.handle, att[1]);
00699     vst_alignment (work_display.handle, att[3], att[4], &dummy, &dummy);
00700     vst_height (work_display.handle, work_display.hc,
00701                             &att[6], &att[7], &att[8], &att[9]);
00702     vsf_interior (work_display.handle, atf[0]);
00703     vsf_color (work_display.handle, atf[1]);
00704     vsf_style (work_display.handle, atf[2]);
00705     vsf_perimeter (work_display.handle, atf[4]);
00706     return (para->pb_currstate);
00707 }
00708 /* #] bcadre () Routine bouton Cadre :                                                      */
00709 /* #[ bunder () Routine bouton caractŠre soulign‚ :                             */
00710 int cdecl bunder (PARMBLK *para)
00711 {
00712 int tab[4], rec[6], w, h, i, j, len, dummy, pox, poy,
00713         pere, borne, att[10], atf[5];
00714 char *texte, car[2];
00715
00716     vqt_attributes (work_display.handle, att);  /* Noter attributs texte */
00717     vqf_attributes (work_display.handle, atf);  /* Noter attributs remplissage */
00718     vst_font (work_display.handle, 1);
00719     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);
00720
00721     fill_tab (tab, 4,           /* Zone de clip */
00722                         para->pb_xc, para->pb_yc,
00723                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00724     vs_clip (work_display.handle, TRUE, tab);   /* Clip ON */
00725
00726     vsf_perimeter (work_display.handle, TRUE);      /* Dessiner le p‚rimŠtre */
00727     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
00728     {
00729         pere = parent (para->pb_tree, para->pb_obj);
00730         while (para->pb_tree[pere].ob_type != G_BOX)
00731             pere = parent (para->pb_tree, pere);
00732         if (para->pb_tree[pere].ob_spec.obspec.fillpattern == ZERO)
00733             vsf_interior (work_display.handle, FIS_HOLLOW);
00734         else if (para->pb_tree[pere].ob_spec.obspec.fillpattern == 7)
00735             vsf_interior (work_display.handle, FIS_SOLID);
00736         else
00737             vsf_interior (work_display.handle, FIS_PATTERN);
00738         vsf_color (work_display.handle, para->pb_tree[pere].ob_spec.obspec.interiorcol);
00739         vsf_style (work_display.handle, para->pb_tree[pere].ob_spec.obspec.fillpattern);
00740     }
00741     else
00742     {
00743         vsf_color (work_display.handle, BLACK);                     /* Couleur noire */
00744         if (para->pb_currstate & SELECTED)
00745             vsf_interior (work_display.handle, FIS_SOLID);  /* Fond noir */
00746         else
00747             vsf_interior (work_display.handle, FIS_HOLLOW); /* Fond blanc */
00748     }
00749     vswr_mode (work_display.handle, MD_REPLACE);    /* Dessin en mode Remplacement */
00750     fill_tab (rec, 4,
00751                         para->pb_x - 1, para->pb_y - 1,
00752                         para->pb_x + para->pb_w, para->pb_y + para->pb_h);
00753     v_bar (work_display.handle, rec);               /* Rectangle int‚rieur */
00754     vswr_mode (work_display.handle, MD_TRANS);  /* Dessin en mode Transparent */
00755     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
00756     {
00757         vsf_color (work_display.handle, BLACK);
00758         vsf_interior (work_display.handle, FIS_HOLLOW);
00759         v_bar (work_display.handle, rec);               /* Contour rectangle */
00760     }
00761
00762     if (para->pb_tree[para->pb_obj].ob_flags & EXIT)            /* Si EXIT */
00763     {
00764         vswr_mode (work_display.handle, MD_TRANS);              /* Dessin en mode Transparent */
00765         rec[0]--;
00766         rec[1]--;
00767         rec[2]++;
00768         rec[3]++;
00769         v_bar (work_display.handle, rec);           /* Second rectangle */
00770         if (para->pb_tree[para->pb_obj].ob_flags & DEFAULT) /* Si DEFAULT */
00771         {
00772             rec[0]--;
00773             rec[1]--;
00774             rec[2]++;
00775             rec[3]++;
00776             v_bar (work_display.handle, rec);       /* TroisiŠme rectangle */
00777         }
00778     }
00779     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
00780     {
00781         if (NOT (para->pb_currstate & SELECTED))
00782         {
00783             fill_tab (rec, 6,
00784                                 para->pb_x, para->pb_y + para->pb_h,
00785                                 para->pb_x, para->pb_y,
00786                                 para->pb_x + para->pb_w, para->pb_y);
00787         }
00788         else
00789         {
00790             fill_tab (rec, 6,
00791                                 para->pb_x, para->pb_y + para->pb_h - 1,
00792                                 para->pb_x + para->pb_w - 1, para->pb_y + para->pb_h - 1,
00793                                 para->pb_x + para->pb_w - 1, para->pb_y);
00794         }
00795         vswr_mode (work_display.handle, MD_REPLACE);        /* Dessin en mode Remplacement */
00796         vsl_color (work_display.handle, WHITE);
00797         vsl_ends (work_display.handle, SQUARE, SQUARE);
00798         vsl_type (work_display.handle, SOLID);
00799         vsl_width (work_display.handle, 1);
00800         v_pline (work_display.handle, 3, rec);
00801     }
00802
00803     texte = (char *)para->pb_parm;  /* R‚cup‚rer pointeur sur le texte */
00804     len = (int)strlen (texte);          /* Longueur du texte */
00805
00806     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
00807         vswr_mode (work_display.handle, MD_TRANS);          /* Texte en mode Transparent */
00808     else                                                                                            /* Sinon */
00809         vswr_mode (work_display.handle, MD_XOR);                /* En Xor */
00810     vst_effects (work_display.handle, EFNONE);      /* D‚sactiver tous les effets */
00811     if (para->pb_tree[para->pb_obj].ob_state & DISABLED)    /* Si inactif, */
00812         vst_effects (work_display.handle, EFGRIS);                                                  /* ‚criture claire */
00813
00814     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
00815         borne = ZERO;
00816     else
00817         borne = 1;
00818
00819     for (j = borne ; j < 2 ; j++)
00820     {
00821         if (j == ZERO)
00822             vst_color (work_display.handle, WHITE);
00823         else
00824             vst_color (work_display.handle, look.ctxt_under);
00825         if (strchr (texte, '['))    /* S'il y a un caractŠre soulign‚ */
00826         {
00827             vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);
00828             pox = para->pb_x + ((para->pb_w - ((len - 1) * w)) / 2) + j - 1;    /* Position x */
00829             poy = para->pb_y + ((para->pb_h - h) / 2) + j - 1;                              /* et y. */
00830             if ((para->pb_currstate & SELECTED) &&
00831                     (para->pb_tree[para->pb_obj].ob_flags & BKGR))
00832             {
00833                 pox++;
00834                 poy++;
00835             }
00836             car[1] = '\0';
00837             for (i = ZERO ; i < len ; i++)  /* CaractŠres un par un */
00838             {
00839                 if (texte[i] != '[')            /* Si ce n'est pas le [, */
00840                 {
00841                     car[0] = texte[i];                              /* dans la chaine temporaire, */
00842                     v_gtext (work_display.handle, pox, poy, car);   /* l'‚crire. */
00843                     pox += w;                                                   /* R‚ajuster position en x */
00844                 }
00845                 else                                            /* Si c'est le [, */
00846                 {
00847                     if (look.under)                                                         /* Si soulignement */
00848                         vst_effects (work_display.handle, EFSOULI); /* Soulign‚ */
00849                     if (j)
00850                         vst_color (work_display.handle, look.cunder);       /* Couleur caractŠre */
00851                     if (para->pb_tree[para->pb_obj].ob_state & DISABLED)    /* Si inactif, */
00852                     {
00853                         if (look.under)                                                                     /* Si soulignement, */
00854                             vst_effects (work_display.handle, EFSOULI | EFGRIS);    /* en soulign‚ gris‚. */
00855                         else                                                                                            /* Sinon, */
00856                             vst_effects (work_display.handle, EFGRIS);              /* en gris‚. */
00857                     }
00858                     i++;                                                                /* caractŠre suivant, */
00859                     car[0] = texte[i];                                  /* dans la chaine temporaire, */
00860                     v_gtext (work_display.handle, pox, poy, car);       /* l'‚crire. */
00861                     pox += w;                                                       /* R‚ajuster position en x */
00862                     vst_effects (work_display.handle, EFNONE);                      /* D‚sactiver tous les effets */
00863                     if (j == ZERO)
00864                         vst_color (work_display.handle, WHITE);
00865                     else
00866                         vst_color (work_display.handle, look.ctxt_under);
00867                     if (para->pb_tree[para->pb_obj].ob_state & DISABLED)    /* Si inactif, */
00868                         vst_effects (work_display.handle, EFGRIS);                      /* en gris‚. */
00869                 }
00870             }
00871         }
00872         else        /* S'il n'y a pas de caractŠre soulign‚ */
00873         {
00874             vst_alignment (work_display.handle, HCENT, VTOP, &dummy, &dummy);
00875             pox = para->pb_x + (para->pb_w / 2) + j - 1;                    /* Position x */
00876             poy = para->pb_y + ((para->pb_h - h) / 2) + j - 1;      /* et y. */
00877             if ((para->pb_currstate & SELECTED) &&
00878                     (para->pb_tree[para->pb_obj].ob_flags & BKGR))
00879             {
00880                 pox++;
00881                 poy++;
00882             }
00883             v_gtext (work_display.handle, pox, poy, texte);                     /* Ecrire le texte */
00884         }
00885     }
00886     vs_clip (work_display.handle, FALSE, tab);  /* Clip OFF */
00887         /* Restaurer attributs */
00888     vswr_mode (work_display.handle, att[5]);
00889     vst_font (work_display.handle, att[0]);
00890     vst_color (work_display.handle, att[1]);
00891     vst_alignment (work_display.handle, att[3], att[4], &dummy, &dummy);
00892     vst_height (work_display.handle, work_display.hc,
00893                             &att[6], &att[7], &att[8], &att[9]);
00894     vsf_interior (work_display.handle, atf[0]);
00895     vsf_color (work_display.handle, atf[1]);
00896     vsf_style (work_display.handle, atf[2]);
00897     vsf_perimeter (work_display.handle, atf[4]);
00898     return (para->pb_currstate & ~SELECTED);
00899 }
00900 /* #] bunder () Routine bouton caractŠre soulign‚ :                             */
00901 /* #[ bmove () Routine bouton Move :                                                            */
00902 int cdecl bmove (PARMBLK *para)
00903 {
00904 int tab[4], rec[6], atf[5];
00905
00906     vqf_attributes (work_display.handle, atf);  /* Noter attributs remplissage */
00907     fill_tab (tab, 4,           /* Zone de clip */
00908                         para->pb_xc, para->pb_yc,
00909                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00910     vs_clip (work_display.handle, TRUE, tab);   /* Clip ON */
00911
00912     vswr_mode (work_display.handle, MD_REPLACE);        /* Dessin en mode Remplacement */
00913     vsf_interior (work_display.handle, FIS_HOLLOW); /* Fond blanc */
00914     vsf_color (work_display.handle, look.cmove);        /* Couleur cadre */
00915     vsl_width (work_display.handle, 1);                         /* Largeur de trait : 1 */
00916     vsl_ends (work_display.handle, SQUARE, SQUARE);
00917     vsl_type (work_display.handle, SOLID);
00918     vsl_color (work_display.handle, look.cmove);        /* Couleur lignes */
00919     vsf_perimeter (work_display.handle, TRUE);  /* Dessiner le p‚rimŠtre */
00920     fill_tab (rec, 6,           /* Triangle */
00921                         para->pb_x - 2, para->pb_y - 2,
00922                         para->pb_x + para->pb_w + 2,
00923                         para->pb_y + para->pb_h + 2,
00924                         para->pb_x - 2, para->pb_y + para->pb_h + 2);
00925     v_fillarea (work_display.handle, 3, rec);
00926
00927     vs_clip (work_display.handle, FALSE, tab);  /* Clip OFF */
00928         /* Restaurer attributs */
00929     vswr_mode (work_display.handle, atf[3]);
00930     vsf_interior (work_display.handle, atf[0]);
00931     vsf_color (work_display.handle, atf[1]);
00932     vsf_style (work_display.handle, atf[2]);
00933     vsf_perimeter (work_display.handle, atf[4]);
00934     return ZERO;
00935 }
00936 /* #] bmove () Routine bouton Move :                                                            */
00937 /* #[ bgrastr () Routine String graphique :                                             */
00938 int cdecl bgrastr (PARMBLK *para)
00939 {
00940 int tab[4], rec[4], x, y, w, h, dummy, effets, att[10], atf[5];
00941 char *texte;
00942
00943     vqt_attributes (work_display.handle, att);  /* Noter attributs texte */
00944     vqf_attributes (work_display.handle, atf);  /* Noter attributs remplissage */
00945     vst_font (work_display.handle, 1);
00946     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);
00947     fill_tab (tab, 4,           /* Zone de clip */
00948                         para->pb_xc, para->pb_yc,
00949                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00950     vs_clip (work_display.handle, TRUE, tab);   /* Clip ON */
00951
00952     texte = (char *)para->pb_parm;  /* R‚cup‚rer pointeur sur le texte */
00953     fill_tab (rec, 4,
00954                         para->pb_x, para->pb_y,
00955                         para->pb_x + (w * (int)strlen (texte)), para->pb_y + h);
00956     vswr_mode (work_display.handle, MD_TRANS);      /* Dessin en mode Transparent */
00957     vsf_perimeter (work_display.handle, FALSE); /* Ne pas dessiner le p‚rimŠtre */
00958     vsf_interior (work_display.handle, FIS_HOLLOW);
00959     vsf_color (work_display.handle, WHITE);         /* Couleur blanche */
00960     v_bar (work_display.handle, rec);                       /* Rectangle */
00961
00962     vsf_color (work_display.handle, BLACK);         /* Couleur noire */
00963     vst_color (work_display.handle, look.cgrastr);  /* Couleur texte */
00964     if (para->pb_tree[para->pb_obj].ob_flags & BS_RIGHT)
00965     {
00966         vst_alignment (work_display.handle, HRIGHT, VTOP, &dummy, &dummy);
00967         x = para->pb_x + para->pb_w;    /* Position en x */
00968     }
00969     else
00970     {
00971         vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);
00972         x = para->pb_x;                             /* Position en x */
00973     }
00974     effets = para->pb_tree[para->pb_obj].ob_state >> 8;
00975     effets &= ~EFSOULI;                         /* D‚sactiver soulign‚ */
00976     vst_effects (work_display.handle, effets);  /* Activer les effets */
00977     y = para->pb_y;                             /* et en y. */
00978     v_gtext (work_display.handle, x, y, texte); /* Ecrire le texte */
00979
00980     if ((para->pb_tree[para->pb_obj].ob_state >> 8) & EFSOULI)
00981     {                                                           /* Si soulign‚ */
00982         vsl_color (work_display.handle, look.cgrastr);  /* Couleur trait */
00983         vsl_ends (work_display.handle, SQUARE, SQUARE);
00984         vsl_width (work_display.handle, 1);         /* Largeur de trait : 1 */
00985         vsl_type (work_display.handle, SOLID);
00986         fill_tab (rec, 4,
00987                             para->pb_x, para->pb_y + para->pb_h - 1,
00988                             para->pb_x + para->pb_w - 1,
00989                             para->pb_y + para->pb_h - 1);
00990         vswr_mode (work_display.handle, MD_TRANS);          /* Dessin en mode Transparent */
00991         v_pline (work_display.handle, 2, rec);      /* Tracer le trait */
00992         if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
00993         {
00994             vsl_color (work_display.handle, WHITE);
00995             vswr_mode (work_display.handle, MD_REPLACE);
00996             rec[0]++;                                   /* Doubler le trait d'une ligne blanche */
00997             rec[1]++;
00998             rec[2]++;
00999             rec[3]++;
01000             v_pline (work_display.handle, 2, rec);  /* Tracer la ligne */
01001         }
01002     }
01003
01004     vs_clip (work_display.handle, FALSE, tab);  /* Clip OFF */
01005         /* Restaurer attributs */
01006     vswr_mode (work_display.handle, att[5]);
01007     vst_font (work_display.handle, att[0]);
01008     vst_color (work_display.handle, att[1]);
01009     vst_alignment (work_display.handle, att[3], att[4], &dummy, &dummy);
01010     vst_height (work_display.handle, work_display.hc,
01011                             &att[6], &att[7], &att[8], &att[9]);
01012     vsf_interior (work_display.handle, atf[0]);
01013     vsf_color (work_display.handle, atf[1]);
01014     vsf_style (work_display.handle, atf[2]);
01015     vsf_perimeter (work_display.handle, atf[4]);
01016     return (para->pb_currstate);
01017 }
01018 /* #] bgrastr () Routine String graphique :                                             */
01019 /* #[ bsmstr () Routine String en petit caractŠres :                            */
01020 int cdecl bsmstr (PARMBLK *para)
01021 {
01022 int tab[4], rec[4], pox, poy, effets, dummy, wc, hc;
01023 char *texte;
01024
01025     vst_height (work_display.handle, HPETIT, &dummy, &dummy, &wc, &hc); /* Petite taille */
01026     fill_tab (tab, 4,           /* Zone de clip */
01027                             para->pb_xc, para->pb_yc,
01028                             para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
01029     vs_clip (work_display.handle, TRUE, tab);   /* Clip ON */
01030
01031     texte = (char *)para->pb_parm;  /* R‚cup‚rer pointeur sur le texte */
01032     vst_color (work_display.handle, BLACK);
01033     vst_effects (work_display.handle, EFNONE);          /* D‚sactiver tous les effets */
01034     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)
01035         vswr_mode (work_display.handle, MD_TRANS);      /* Texte en mode transparent */
01036     else
01037         vswr_mode (work_display.handle, MD_REPLACE);    /* Texte en mode opaque */
01038     if (para->pb_tree[para->pb_obj].ob_flags & BS_RIGHT)
01039     {
01040         vst_alignment (work_display.handle, HRIGHT, VTOP, &dummy, &dummy);
01041         pox = para->pb_x + para->pb_w;  /* Position en x */
01042     }
01043     else
01044     {
01045         vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);
01046         pox = para->pb_x;                               /* Position en x */
01047     }
01048     effets = para->pb_tree[para->pb_obj].ob_state >> 8;
01049     effets &= ~EFSOULI;                         /* D‚sactiver soulign‚ */
01050     vst_effects (work_display.handle, effets);  /* Activer les effets */
01051     poy = para->pb_y;                                   /* Position en y. */
01052     v_gtext (work_display.handle, pox, poy, texte); /* Ecrire. */
01053
01054     if ((para->pb_tree[para->pb_obj].ob_state >> 8) & EFSOULI)
01055     {                                                           /* Si soulign‚ */
01056         vsl_color (work_display.handle, look.cgrastr);  /* Couleur trait */
01057         vsl_ends (work_display.handle, SQUARE, SQUARE);
01058         vsl_width (work_display.handle, 1);         /* Largeur de trait : 1 */
01059         vsl_type (work_display.handle, SOLID);
01060         if (para->pb_tree[para->pb_obj].ob_flags & BS_RIGHT)
01061             fill_tab (rec, 4,
01062                                 para->pb_x + para->pb_w - (wc * (int)strlen (texte)),
01063                                 para->pb_y + hc,
01064                                 para->pb_x + para->pb_w - 1,
01065                                 para->pb_y + hc);
01066         else
01067             fill_tab (rec, 4,
01068                                 para->pb_x, para->pb_y + hc,
01069                                 para->pb_x + wc * (int)strlen (texte),
01070                                 para->pb_y + hc);
01071         vswr_mode (work_display.handle, MD_TRANS);          /* Dessin en mode Transparent */
01072         v_pline (work_display.handle, 2, rec);      /* Tracer le trait */
01073         if (para->pb_tree[para->pb_obj].ob_flags & BKGR)    /* Si Fond */
01074         {
01075             vsl_color (work_display.handle, WHITE);
01076             vswr_mode (work_display.handle, MD_REPLACE);
01077             rec[0]++;                                   /* Doubler le trait d'une ligne blanche */
01078             rec[1]++;
01079             rec[2]++;
01080             rec[3]++;
01081             v_pline (work_display.handle, 2, rec);  /* Tracer la ligne */
01082         }
01083     }
01084
01085     vs_clip (work_display.handle, FALSE, tab);  /* Clip OFF */
01086     return (para->pb_currstate & ~SELECTED);
01087 }
01088 /* #] bsmstr () Routine String en petit caractŠres :                            */
01089 /* #[ bpopup () Routine bouton pop-up ou pop-liste :                            */
01090 int cdecl bpopup (PARMBLK *para)
01091 {
01092 int tab[4], rec[8], w, h, dummy, pox, poy, obj, color[2],
01093         pere, i, temp, att[10], atf[5];
01094 char *texte;
01095 MFDB nul = {0}, pic, msk;
01096
01097     vqt_attributes (work_display.handle, att);  /* Noter attributs texte */
01098     vqf_attributes (work_display.handle, atf);  /* Noter attributs remplissage */
01099     vst_font (work_display.handle, 1);
01100     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);
01101     fill_tab (tab, 4,           /* Zone de clip */
01102                         para->pb_xc, para->pb_yc,
01103                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
01104     vs_clip (work_display.handle, TRUE, tab);   /* Clip ON */
01105
01106     vswr_mode (work_display.handle, MD_REPLACE);                /* Dessin en mode Remplacement */
01107     vsf_perimeter (work_display.handle, TRUE);
01108     if (para->pb_tree[para->pb_obj].ob_flags & BKGR)
01109     {
01110         fill_tab (rec, 4,
01111                             para->pb_x - 1, para->pb_y - 1,
01112                             para->pb_x + para->pb_w, para->pb_y + para->pb_h);
01113         pere = parent (para->pb_tree, para->pb_obj);
01114         while (para->pb_tree[pere].ob_type != G_BOX)
01115             pere = parent (para->pb_tree, pere);
01116         if (para->pb_tree[pere].ob_spec.obspec.fillpattern == ZERO)
01117             vsf_interior (work_display.handle, FIS_HOLLOW);
01118         else if (para->pb_tree[pere].ob_spec.obspec.fillpattern == 7)
01119             vsf_interior (work_display.handle, FIS_SOLID);
01120         else
01121             vsf_interior (work_display.handle, FIS_PATTERN);
01122         vsf_color (work_display.handle, para->pb_tree[pere].ob_spec.obspec.interiorcol);
01123         vsf_style (work_display.handle, para->pb_tree[pere].ob_spec.obspec.fillpattern);
01124         v_bar (work_display.handle, rec);               /* Rectangle */
01125
01126         vsl_color (work_display.handle, BLACK);
01127         vsl_width (work_display.handle, 1);
01128         vsl_ends (work_display.handle, SQUARE, SQUARE);
01129         vsl_type (work_display.handle, SOLID);
01130         temp = rec[0] + 2;
01131         fill_tab (rec, 6,
01132                             temp, para->pb_y + para->pb_h + 1,
01133                             temp + para->pb_w - 1, para->pb_y + para->pb_h + 1,
01134                             temp + para->pb_w - 1, para->pb_y + 2);
01135         v_pline (work_display.handle, 3, rec);      /* 1ø ligne d'ombre */
01136         rec[1]++;
01137         rec[2]++;
01138         rec[3] = rec[1];
01139         rec[4]++;
01140         v_pline (work_display.handle, 3, rec);      /* 2ø ligne d'ombre */
01141
01142         vsl_color (work_display.handle, WHITE);
01143         if (para->pb_currstate & SELECTED)
01144         {
01145             fill_tab (rec, 6,
01146                                 para->pb_x + 1, para->pb_y + para->pb_h - 1,
01147                                 para->pb_x + para->pb_w , para->pb_y + para->pb_h - 1,
01148                                 para->pb_x + para->pb_w , para->pb_y);
01149             v_pline (work_display.handle, 3, rec);      /* Ligne blanche */
01150             vsl_color (work_display.handle, BLACK);
01151             rec[2] = rec[0];
01152             rec[3] = para->pb_y;
01153             rec[4] = rec[2] + para->pb_w - 1;
01154             rec[5] = rec[3];
01155         }
01156         else
01157         {
01158             fill_tab (rec, 6,
01159                                 para->pb_x, para->pb_y + para->pb_h,
01160                                 para->pb_x, para->pb_y,
01161                                 para->pb_x + para->pb_w, para->pb_y);
01162         }
01163         v_pline (work_display.handle, 3, rec);      /* Ligne */
01164     }
01165     else
01166     {
01167         vsf_color (work_display.handle, BLACK);             /* Couleur noire */
01168         vsf_perimeter (work_display.handle, TRUE);  /* Dessiner le p‚rimŠtre */
01169             /* Dessin de l'ombre */
01170         vsf_interior (work_display.handle, FIS_SOLID);  /* Fond noir */
01171         fill_tab (rec, 4,
01172                             para->pb_x + 2, para->pb_y + 2,
01173                             para->pb_x + 2 + para->pb_w, para->pb_y + 2 + para->pb_h);
01174         v_bar (work_display.handle, rec);               /* Rectangle */
01175             /* Dessin du bouton */
01176         if (para->pb_currstate & SELECTED)
01177             vsf_interior (work_display.handle, FIS_SOLID);  /* Fond noir */
01178         else
01179             vsf_interior (work_display.handle, FIS_HOLLOW); /* Fond blanc */
01180         fill_tab (rec, 4,
01181                             para->pb_x, para->pb_y,
01182                             para->pb_x + para->pb_w, para->pb_y + para->pb_h);
01183         v_bar (work_display.handle, rec);               /* Rectangle */
01184     }
01185
01186     texte = (char *)para->pb_parm;  /* R‚cup‚rer pointeur sur le texte */
01187     if (NOT (para->pb_tree[para->pb_obj].ob_flags & BKGR))  /* Si pas Fond */
01188     {
01189         if (para->pb_currstate & SELECTED)
01190             vswr_mode (work_display.handle, MD_XOR);                /* Texte en mode Xor */
01191         else
01192             vswr_mode (work_display.handle, MD_TRANS);          /* Texte en mode Transparent */
01193     }
01194     else                                                                                                        /* Si Fond */
01195         vswr_mode (work_display.handle, MD_TRANS);                          /* Texte Transparent */
01196     vst_effects (work_display.handle, EFNONE);      /* D‚sactiver tous les effets */
01197     if (para->pb_tree[para->pb_obj].ob_state & DISABLED)    /* Si inactif, */
01198         vst_effects (work_display.handle, EFGRIS);                                                  /* ‚criture claire */
01199     vst_alignment (work_display.handle, HCENT, VTOP, &dummy, &dummy);
01200     pox = para->pb_x + (para->pb_w / 2);                    /* Position x */
01201     if (h > 8)
01202         pox -= (h / 2);
01203     else
01204         pox -= (w / 2);
01205     poy = para->pb_y + ((para->pb_h - h) / 2);      /* et y. */
01206     if (NOT (para->pb_tree[para->pb_obj].ob_flags & BKGR))  /* Si pas Fond */
01207     {
01208         vst_color (work_display.handle, look.ctxt_popup);
01209         v_gtext (work_display.handle, pox, poy, texte);                     /* Ecrire le texte */
01210     }
01211     else                                                                                                        /* Si Fond */
01212     {
01213         pox--;
01214         poy--;
01215         if (para->pb_currstate & SELECTED)
01216         {
01217             pox++;
01218             poy++;
01219         }
01220         for (i = ZERO ; i < 2 ; i++)
01221         {
01222             if (i == ZERO)
01223                 vst_color (work_display.handle, WHITE);
01224             else
01225                 vst_color (work_display.handle, look.ctxt_popup);
01226             v_gtext (work_display.handle, pox, poy, texte);                     /* Ecrire le texte */
01227             pox++;
01228             poy++;
01229         }
01230     }
01231
01232
01233         /* Dessin de l'ic“ne "suivant" */
01234     if (h > 8)          /* Haute */
01235     {
01236         obj = PUH;
01237         pic.fd_h = msk.fd_h = 15;
01238     }
01239     else                        /* Basse */
01240     {
01241         obj = PUM;
01242         pic.fd_h = msk.fd_h = 7;
01243     }
01244
01245     pic.fd_addr = (void *) bi_trindex[IMG_USER][obj].ob_spec.iconblk->ib_pdata;
01246     msk.fd_addr = (void *) bi_trindex[IMG_USER][obj].ob_spec.iconblk->ib_pmask;
01247     pic.fd_w = msk.fd_w = 16;
01248     pic.fd_wdwidth = msk.fd_wdwidth = 1;
01249     pic.fd_nplanes = msk.fd_nplanes = 1;
01250     pic.fd_stand = msk.fd_stand = ZERO;
01251
01252     fill_tab (rec, 8,
01253                         ZERO, ZERO, pic.fd_w - 1, pic.fd_h - 1,
01254                         para->pb_x + para->pb_w - pic.fd_w, para->pb_y + 1,
01255                         para->pb_x + para->pb_w - pic.fd_w + pic.fd_w - 1,
01256                         para->pb_y + pic.fd_h);
01257
01258     color[0] = WHITE;
01259     color[1] = WHITE;
01260   vrt_cpyfm (work_display.handle, MD_TRANS, rec, &msk, &nul, color);
01261     color[0] = look.cicn_popup;
01262   vrt_cpyfm (work_display.handle, MD_TRANS, rec, &pic, &nul, color);
01263
01264     vs_clip (work_display.handle, FALSE, tab);  /* Clip OFF */
01265         /* Restaurer attributs */
01266     vswr_mode (work_display.handle, att[5]);
01267     vst_font (work_display.handle, att[0]);
01268     vst_color (work_display.handle, att[1]);
01269     vst_alignment (work_display.handle, att[3], att[4], &dummy, &dummy);
01270     vst_height (work_display.handle, work_display.hc,
01271                             &att[6], &att[7], &att[8], &att[9]);
01272     vsf_interior (work_display.handle, atf[0]);
01273     vsf_color (work_display.handle, atf[1]);
01274     vsf_style (work_display.handle, atf[2]);
01275     vsf_perimeter (work_display.handle, atf[4]);
01276     return (para->pb_currstate & ~SELECTED);
01277 }
01278 /* #] bpopup () Routine bouton pop-up ou pop-liste :                            */
01279 /* #[ bpict () Routine image en formulaire :                                            */
01280     /* MA 26/06/94 : type picture */
01281 int cdecl bpict (PARMBLK *para)
01282 {
01283 int tab[4], rec[8], color[2], mode;
01284 t_image_dial *image;
01285 MFDB nul = {0};
01286
01287     fill_tab (tab, 4,           /* Zone de clip */
01288                         para->pb_xc, para->pb_yc,
01289                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
01290     vs_clip (work_display.handle, TRUE, tab);   /* Clip ON */
01291
01292     image = (t_image_dial *)para->pb_parm;  /* R‚cup‚rer pointeur sur l'image */
01293     if (image->mfdb_image.fd_addr != ZERO)  /* si on a un pointeur sur une image    */
01294     {
01295         fill_tab (rec, 8,
01296                             image->cur_pos.g_x, image->cur_pos.g_y,
01297                             image->cur_pos.g_x + para->pb_w - 1,    /* Taille a copier en fonction */
01298                             image->cur_pos.g_y + para->pb_h - 1,    /* de la case correspondante dans le formulaire */
01299                             para->pb_x, para->pb_y,
01300                             para->pb_x + para->pb_w - 1, para->pb_y + para->pb_h - 1);
01301         if (rec[2] > image->mfdb_image.fd_w)
01302         {
01303             rec[2] = para->pb_w;
01304             image->cur_pos.g_x = rec[0] = rec[2] - image->mfdb_image.fd_w;
01305         }
01306         if (rec[3] > image->mfdb_image.fd_h)
01307         {
01308             rec[3] = para->pb_h;
01309             image->cur_pos.g_y = rec[1] = rec[3] - image->mfdb_image.fd_h;
01310         }
01311         if (image->mfdb_image.fd_nplanes == 1)
01312         {
01313             color[0] = ((para->pb_tree[para->pb_obj].ob_state) & 0x0F00) >> 8;
01314             color[1] = WHITE;
01315             mode = ((para->pb_tree[para->pb_obj].ob_state) & 0xF000) >> 12;
01316             vrt_cpyfm (work_display.handle, mode, rec, &image->mfdb_image, &nul, color);
01317         }
01318         else if (image->mfdb_image.fd_nplanes == work_display.n_plane)
01319             vro_cpyfm (work_display.handle, S_ONLY, rec, &image->mfdb_image, &nul);
01320     }
01321     vs_clip (work_display.handle, FALSE, tab);  /* Clip OFF */
01322     return (para->pb_currstate);
01323 }
01324 /* #] bpict () Routine image en formulaire :                                            */
01325 /* #[ bmhier () Routine menu hi‚rarchique :                                             */
01326 int cdecl bmhier (PARMBLK *para)
01327 {
01328 int tab[4], x, y, w, h, mx, my, ox, oy, dummy,
01329         posx1, posx2, posy1, posy2, att[10], atf[5];
01330 char *text;
01331
01332     vqt_attributes (work_display.handle, att);  /* Noter attributs texte */
01333     vqf_attributes (work_display.handle, atf);  /* Noter attributs remplissage */
01334     vst_font (work_display.handle, 1);
01335     text = (char *)para->pb_parm;
01336     ox = para->pb_tree[parent (para->pb_tree, para->pb_obj)].ob_x;
01337     oy = para->pb_tree[para->pb_obj].ob_y +
01338              para->pb_tree[parent (para->pb_tree, para->pb_obj)].ob_y + bureau.yd;
01339     vq_mouse (work_display.handle, &dummy, &mx, &my);
01340
01341     if (para->pb_tree == adr_menu)
01342         posy1 = (my < oy);
01343     else
01344         posy1 = FALSE;
01345     posy2 = (my >= oy + para->pb_h);
01346
01347     if (text[strlen (text) - 2] == 3)
01348     {
01349         posx1 = (mx < ox + para->pb_w);
01350         posx2 = (mx < ox);
01351     }
01352     else if (text[strlen (text) - 2] == 4)
01353     {
01354         posx1 = (mx > ox);
01355         posx2 = (mx > ox + para->pb_w);
01356     }
01357
01358
01359     if ((para->pb_currstate & SELECTED) || (posx1) ||
01360             (posy1) || (posy2) || (posx2))
01361     {
01362         vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &w, &h);
01363
01364         fill_tab (tab, 4,
01365                             para->pb_x, para->pb_y,
01366                             para->pb_x + para->pb_w - 1,
01367                             para->pb_y + para->pb_h - 1);
01368         vswr_mode (work_display.handle, MD_REPLACE);            /* Dessin en mode Remplacement */
01369         vsf_perimeter (work_display.handle, FALSE);
01370         if (para->pb_currstate & SELECTED)  /* Si option s‚lectionn‚e */
01371         {
01372             vsf_color (work_display.handle, BLACK);                     /* Couleur noire */
01373             vsf_interior (work_display.handle, FIS_SOLID);
01374             vsf_style (work_display.handle, 8);
01375         }
01376         else
01377         {
01378             vsf_color (work_display.handle, WHITE);                         /* Couleur blanche */
01379             vsf_interior (work_display.handle, FIS_HOLLOW);
01380         }
01381         v_bar (work_display.handle, tab);
01382
01383         vst_color (work_display.handle, BLACK);
01384         vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);   /* Align‚ … gauche en haut */
01385         vst_effects (work_display.handle, EFNONE);          /* D‚sactiver tous les effets */
01386         vswr_mode (work_display.handle, MD_XOR);        /* Texte en mode Xor */
01387         x = para->pb_x;                             /* Position en x */
01388         y = para->pb_y;                             /* et en y. */
01389         v_gtext (work_display.handle, x, y, (char *)para->pb_parm); /* Ecrire le texte */
01390     }
01391     else
01392         para->pb_tree[para->pb_obj].ob_state |= SELECTED;
01393
01394         /* Restaurer attributs */
01395     vswr_mode (work_display.handle, att[5]);
01396     vst_font (work_display.handle, att[0]);
01397     vst_color (work_display.handle, att[1]);
01398     vst_alignment (work_display.handle, att[3], att[4], &dummy, &dummy);
01399     vst_height (work_display.handle, work_display.hc,
01400                             &att[6], &att[7], &att[8], &att[9]);
01401     vsf_interior (work_display.handle, atf[0]);
01402     vsf_color (work_display.handle, atf[1]);
01403     vsf_style (work_display.handle, atf[2]);
01404     vsf_perimeter (work_display.handle, atf[4]);
01405     return ZERO;
01406 }
01407 /* #] bmhier () Routine menu hi‚rarchique :                                             */
01408 /* #[ bniceline () Routine niceline :                                                       */
01409 int cdecl bniceline (PARMBLK *para)
01410 {
01411 int x = para->pb_x + 1, y = para->pb_y,
01412         w = para->pb_w - 1, h = para->pb_h - 1,
01413         tab[4], ypos = 3, hb, dummy, att[10];
01414
01415     vqt_attributes (work_display.handle, att);  /* Noter attributs texte */
01416     vst_font (work_display.handle, 1);
01417     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &dummy, &hb);     /* BoŒtes caractŠres */
01418     if (hb > 8)
01419         ypos = 7;
01420
01421     vsl_width (work_display.handle, 1);
01422     vsl_ends (work_display.handle, SQUARE, SQUARE);
01423     vsl_type (work_display.handle, SOLID);
01424     vsl_color (work_display.handle, look.cniceline);
01425     vswr_mode (work_display.handle, MD_REPLACE);            /* Dessin en mode Remplacement */
01426     fill_tab (tab, 4,
01427                         x - 2, y - 2,
01428                         x + w - 1,y + h - 1);
01429     vs_clip (work_display.handle, TRUE, tab);                       /* Clip ON */
01430     fill_tab (tab, 4,
01431                         x - 1, y + ypos,
01432                         x + w + 2, y + ypos);
01433     v_pline (work_display.handle, 2, tab);
01434     fill_tab (tab, 4,
01435                         x - 2, y + ypos + 1,
01436                         x + w + 1, y + ypos + 1);
01437     v_pline (work_display.handle, 2, tab);
01438     fill_tab (tab, 4,
01439                         x - 2, y - 2,
01440                         x + w - 1, y + h - 1);
01441     vs_clip (work_display.handle, FALSE, tab);                  /* Clip OFF */
01442         /* Restaurer attributs */
01443     vswr_mode (work_display.handle, att[5]);
01444     vst_font (work_display.handle, att[0]);
01445     vst_color (work_display.handle, att[1]);
01446     vst_alignment (work_display.handle, att[3], att[4], &dummy, &dummy);
01447     vst_height (work_display.handle, work_display.hc,
01448                             &att[6], &att[7], &att[8], &att[9]);
01449     return (para->pb_currstate & ~SELECTED);
01450 }
01451 /* #] bniceline () Routine niceline :                                                       */
01452
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2USR1.H Source File

BIG2USR1.H

Go to the documentation of this file.
00001 /*  BIG2USR1.H */
00002
00003     /* Nombre de gadgets USERDEFs dans les fenˆtres BIG : */
00004 #define NU 12
00005     /* Nombre total de USERDEFs pour les fenˆtres BIG : */
00006 #define NTU NU + 8
00007     /* Nombre d'objets USERDEFs dans les autres formulaires */
00008 #define NFU 4
00009 /* #[ Variables globales : */
00010 extern t_display work_display;
00011 extern t_desktop bureau;
00012 extern OBJECT *adr_menu;
00013 extern USERBLK *adr_usr;
00014 extern char *xedit;
00015 extern t_image_dial *xpict;
00016 extern int nb_pict;
00017 extern OBJECT **ir_trindex;
00018 extern char **ir_frstr;
00019 extern FNCP *fnc;
00020
00021 #include "BIG2INCL.H"
00022 extern OBJECT *bi_trindex[];
00023
00024 typedef struct obj_user
00025 {
00026     int     under;              /* Soulignement oui / non */
00027     int     cunder;             /* Couleur caractŠre soulign‚ */
00028     int     ctxt_under;     /* Couleur texte B_UNDER */
00029     int     cicn_coche;     /* Couleur ic“ne B_CHECKB */
00030     int     ctxt_coche;     /* Couleur texte B_CHECKB */
00031     int     cicn_radio;     /* Couleur ic“ne B_ROUNDB */
00032     int     ctxt_radio;     /* Couleur texte B_ROUNDB */
00033     int     cicn_popup;     /* Couleur ic“ne B_POPUP / B_LIST */
00034     int     ctxt_popup;     /* Couleur texte B_POPUP / B_LIST */
00035     int     cmove;              /* Couleur B_MOVE */
00036     int     cgrastr;            /* Couleur texte B_GRASTR */
00037     int     clin_frame;     /* Couleur lignes B_FRAME */
00038     int     ctxt_frame;     /* Couleur texte B_FRAME */
00039     int     cniceline;      /* Couleur B_NICELINE */
00040 } Obj_user;
00041 /* #] Variables globales : */
00042 /* #[ Prototypage des fonctions : */
00043 void    userdef (char *rsc, int *nb_form, int nb_tree);
00044 int     cdecl bcoche (PARMBLK *para);
00045 int     cdecl brond (PARMBLK *para);
00046 int     cdecl bunder (PARMBLK *para);
00047 int     cdecl bcadre (PARMBLK *para);
00048 int     cdecl bmove (PARMBLK *para);
00049 int     cdecl bgrastr (PARMBLK *para);
00050 int     cdecl bsmstr (PARMBLK *para);
00051 int     cdecl bpopup (PARMBLK *para);
00052 int     cdecl bpict (PARMBLK *para);
00053 int     cdecl bmhier (PARMBLK *para);
00054 int     cdecl bniceline (PARMBLK *para);
00055 /* #] Prototypage des fonctions : */
00056
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2USR2.C Source File

BIG2USR2.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS D'OBJETS USERDEF
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2USR2.H"
00007 /* #[ Look par d‚faut des fenˆtres BIG :                                                    */
00008 Win_user bwin = {MD_TRANS,      /* Mode texte MOVER */
00009                                  BLACK,             /* Couleur texte MOVER */
00010                                  2,                     /* Style trame MOVER */
00011                                  BLACK,             /* Couleur trame MOVER */
00012                                  BLACK,             /* Couleur texte INFO */
00013                                  1,                     /* Style trame VELEV */
00014                                  BLACK,             /* Couleur trame VELEV */
00015                                  1,                     /* Style trame HELEV */
00016                                  BLACK,             /* Couleur trame HELEV */
00017                                  1,                     /* Style trame VSLIDE */
00018                                  WHITE,             /* Couleur trame VSLIDE */
00019                                  1,                     /* Style trame HSLIDE */
00020                                  WHITE,             /* Couleur trame HSLIDE */
00021                                  WHITE,             /* Couleur fond gadgets */
00022                                  BLACK};            /* Couleur ic“ne gadgets */
00023 /* #] Look par d‚faut des fenˆtres BIG :                                                    */
00024 /* #[ fond () Routine dessin racine fenˆtre :                                           */
00025 int cdecl fond (PARMBLK *para)
00026 {
00027 int tab[4], rec[4];
00028
00029     fill_tab (tab, 4,
00030                         para->pb_xc, para->pb_yc,
00031                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00032     vs_clip (work_display.handle, TRUE, tab);               /* Clipper */
00033     vswr_mode (work_display.handle, MD_REPLACE);        /* Dessin en mode Remplacement */
00034     vsf_interior (work_display.handle, FIS_HOLLOW); /* Fond blanc */
00035     vsf_color (work_display.handle, WHITE);
00036     vsf_perimeter (work_display.handle, FALSE);         /* Ne pas dessiner le p‚rimŠtre */
00037     fill_tab (rec, 4,
00038                         para->pb_x, para->pb_y,
00039                         para->pb_x + para->pb_w - 1,
00040                         para->pb_y + para->pb_h - 1);
00041     v_bar (work_display.handle, rec);                               /* Tracer le rectangle blanc */
00042
00043     vs_clip (work_display.handle, FALSE, tab);          /* D‚clipper */
00044     return ZERO;
00045 }
00046 /* #] fond () Routine dessin racine fenˆtre :                                           */
00047 /* #[ gadget () Routine dessin objets USERDEFs :                                    */
00048 int cdecl gadget (PARMBLK *para)
00049 {
00050 int tab[4], rec[8], color[2], obj, h, dummy;
00051 MFDB nul = {0}, pic, msk;
00052
00053     fill_tab (tab, 4,
00054                         para->pb_xc, para->pb_yc,
00055                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00056     vs_clip (work_display.handle, TRUE, tab);               /* Clipper */
00057
00058     vswr_mode (work_display.handle, MD_REPLACE);            /* Dessin en mode Remplacement */
00059     vsf_interior (work_display.handle, FIS_PATTERN);    /* Fond tram‚ */
00060     vsf_style (work_display.handle, 8);                             /* Trame 100 % */
00061     vsf_color (work_display.handle, bwin.cpat_gadgt);   /* Couleur fond */
00062     vsf_perimeter (work_display.handle, FALSE);             /* Ne pas dessiner le p‚rimŠtre */
00063     fill_tab (rec, 4,
00064                         para->pb_x, para->pb_y,
00065                         para->pb_x + para->pb_w - 1,
00066                         para->pb_y + para->pb_h - 1);
00067     v_bar (work_display.handle, rec);                                   /* Tracer le rectangle */
00068
00069     vswr_mode (work_display.handle, MD_TRANS);
00070     vsf_interior (work_display.handle, FIS_HOLLOW); /* Fond blanc */
00071     vsf_color (work_display.handle, BLACK);
00072     vsf_perimeter (work_display.handle, TRUE);          /* Dessiner le p‚rimŠtre */
00073     v_bar (work_display.handle, rec);                               /* Tracer le rectangle */
00074
00075     vswr_mode (work_display.handle, MD_REPLACE);            /* Dessin en mode Remplacement */
00076     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &dummy, &h);  /* BoŒtes caractŠres */
00077     switch (para->pb_obj)       /* Selon le gadget */
00078     {                                               /* Choisir la bonne G_IMAGE */
00079     case BW_SIZERUL :
00080         obj = h > 8 ? GA_SULH : GA_SULM;
00081         break;
00082     case BW_CLOSER :
00083         obj = h > 8 ? GA_CLOH : GA_CLOM;
00084         break;
00085     case BW_SMALLER :
00086         obj = h > 8 ? GA_SMAH : GA_SMAM;
00087         break;
00088     case BW_CYCLER :
00089         obj = h > 8 ? GA_CYCH : GA_CYCM;
00090         break;
00091     case BW_FULLER :
00092         obj = h > 8 ? GA_FULH : GA_FULM;
00093         break;
00094     case BW_SIZERUR :
00095         obj = h > 8 ? GA_SURH : GA_SURM;
00096         break;
00097     case BW_UPARROW :
00098         obj = h > 8 ? GA_AUPH : GA_AUPM;
00099         break;
00100     case BW_DNARROW :
00101         obj = h > 8 ? GA_ADNH : GA_ADNM;
00102         break;
00103     case BW_SIZERDL :
00104         obj = h > 8 ? GA_SDLH : GA_SDLM;
00105         break;
00106     case BW_LFARROW :
00107         obj = h > 8 ? GA_ALFH : GA_ALFM;
00108         break;
00109     case BW_RTARROW :
00110         obj = h > 8 ? GA_ARTH : GA_ARTM;
00111         break;
00112     case BW_SIZERDR :
00113         obj = h > 8 ? GA_SDRH : GA_SDRM;
00114         break;
00115     }
00116     pic.fd_addr = (void *) bi_trindex[GADGETS][obj].ob_spec.iconblk->ib_pdata;  /* Adresse datas */
00117     msk.fd_addr = (void *) bi_trindex[GADGETS][obj].ob_spec.iconblk->ib_pmask;  /* Adresse masque */
00118     pic.fd_w = msk.fd_w = 16;               /* Largeur image */
00119     if (h > 8)
00120         pic.fd_h = msk.fd_h = 16;           /* Hauteur image selon r‚solution */
00121     else
00122         pic.fd_h = msk.fd_h = 8;
00123     pic.fd_wdwidth = msk.fd_wdwidth = 1;        /* Largeur en mots */
00124     pic.fd_nplanes = msk.fd_nplanes = 1;        /* Nbre de plans */
00125     pic.fd_stand = msk.fd_stand = ZERO;         /* SystŠme coordonn‚es */
00126
00127     fill_tab (rec, 8,           /* Tableau des coordonn‚es */
00128                         ZERO, ZERO, pic.fd_w - 1, pic.fd_h - 1,
00129                         para->pb_x + 2, para->pb_y + 2,
00130                         para->pb_x + pic.fd_w + 1,
00131                         para->pb_y + pic.fd_h + 1);
00132     if (para->pb_currstate & SELECTED)
00133     {
00134         rec[4]++;
00135         rec[5]++;
00136         rec[6]++;
00137         rec[7]++;
00138     }
00139
00140     color[0] = WHITE;
00141     color[1] = WHITE;
00142     vrt_cpyfm (work_display.handle, MD_TRANS, rec, &msk, &nul, color);
00143     color[0] = bwin.cicn_gadgt;
00144     vrt_cpyfm (work_display.handle, MD_TRANS, rec, &pic, &nul, color);
00145
00146     vsl_width (work_display.handle, 1);
00147     vsl_ends (work_display.handle, SQUARE, SQUARE);
00148     vsl_type (work_display.handle, SOLID);
00149     vsl_color (work_display.handle, BLACK);
00150     if (para->pb_currstate & SELECTED)
00151         fill_tab (rec, 6,                                       /* Coordonn‚es lignes d'ombre */
00152                             para->pb_x + 1, para->pb_y + para->pb_h - 3,
00153                             para->pb_x + 1, para->pb_y + 1,
00154                             para->pb_x + para->pb_w - 3, para->pb_y + 1);
00155     else
00156         fill_tab (rec, 6,                                       /* Coordonn‚es lignes d'ombre */
00157                             para->pb_x + para->pb_w - 2, para->pb_y + 2,
00158                             para->pb_x + para->pb_w - 2, para->pb_y + para->pb_h - 2,
00159                             para->pb_x + 2, para->pb_y + para->pb_h - 2);
00160     v_pline (work_display.handle, 3, rec);              /* Tracer lignes d'ombre */
00161
00162     vs_clip (work_display.handle, FALSE, tab);      /* D‚clipper */
00163     return ZERO;
00164 }
00165 /* #] gadget () Routine dessin objets USERDEFs :                                    */
00166 /* #[ titinf () Routine dessin Titre et Info :                                      */
00167 int cdecl titinf (PARMBLK *para)
00168 {
00169 int tab[4], rec[6], x, y, wcell, hcell, dummy, i = ZERO, index = BLANK;
00170 char *texte;
00171
00172     fill_tab (tab, 4,
00173                         para->pb_xc, para->pb_yc,
00174                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00175     vs_clip (work_display.handle, TRUE, tab);           /* Clipper */
00176
00177     do
00178     {
00179         if (win[i].w_fen == para->pb_tree)
00180             index = i;
00181     } while ((NOT (win[i++].w_flags & WFLAST)) && (index == BLANK));
00182
00183     vswr_mode (work_display.handle, MD_REPLACE);    /* Dessin en mode Remplacement */
00184     if (para->pb_obj == BW_INFO)                    /* Si ligne d'info */
00185     {
00186         vsf_interior (work_display.handle, FIS_HOLLOW);     /* Fond blanc */
00187         vsf_color (work_display.handle, BLACK);                     /* Couleur trame et p‚rimŠtre */
00188         vsf_perimeter (work_display.handle, TRUE);              /* Dessiner le p‚rimŠtre */
00189     }
00190     else if (para->pb_obj == BW_MOVER)                          /* Si barre de titre */
00191     {
00192         if (para->pb_tree == win[id_top].w_fen)             /* Si fenˆtre 1ø plan */
00193         {
00194             vsf_interior (work_display.handle, FIS_PATTERN);    /* Trame */
00195             vsf_style (work_display.handle, bwin.spat_mover);   /* Motif de trame */
00196             vsf_color (work_display.handle, bwin.cpat_mover);   /* Couleur trame */
00197             vsf_perimeter (work_display.handle, TRUE);              /* Dessiner le p‚rimŠtre */
00198         }
00199         else                                                                                    /* Si pas fenˆtre 1ø plan */
00200         {
00201             vsf_interior (work_display.handle, FIS_HOLLOW);     /* Fond blanc */
00202             vsf_color (work_display.handle, BLACK);                     /* Couleur trame et p‚rimŠtre */
00203             vsf_perimeter (work_display.handle, TRUE);              /* Dessiner le p‚rimŠtre */
00204         }
00205     }
00206     fill_tab (rec, 4,                                                       /* Coordonn‚es rectangle */
00207                         para->pb_x, para->pb_y,
00208                         para->pb_x + para->pb_w - 1,
00209                         para->pb_y + para->pb_h - 1);
00210     v_bar (work_display.handle, rec);                                   /* Tracer rectangle */
00211
00212     if (para->pb_obj == BW_MOVER)
00213     {
00214         texte = (char *)malloc (strlen (win[index].w_title) + 1);
00215         strcpy (texte, win[index].w_title); /* Copier le texte */
00216     }
00217     else
00218     {
00219         texte = (char *)malloc (strlen (win[index].w_infos) + 1);
00220         strcpy (texte, win[index].w_infos); /* Copier le texte */
00221     }
00222     if (strlen (texte))
00223     {
00224         vst_effects (work_display.handle, EFNONE);  /* D‚sactiver tous les effets */
00225         if (para->pb_obj == BW_INFO)                        /* Si ligne d'info */
00226         {
00227             vst_color (work_display.handle, bwin.ctxt_info);    /* Couleur texte */
00228             vswr_mode (work_display.handle, MD_REPLACE);
00229             vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);   /* Caler … gauche */
00230             x = para->pb_x + 8;                                 /* Sauter un caractŠre */
00231             y = para->pb_y + 1;                                 /* Position en y */
00232         }
00233         else                                                                    /* Si barre de titre */
00234         {
00235             vst_color (work_display.handle, bwin.ctxt_mover);   /* Couleur texte */
00236             vswr_mode (work_display.handle, bwin.mtxt_mover);   /* Mode ‚criture */
00237             vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &wcell, &hcell);
00238             if (win[index].w_icon > BLANK)
00239             {
00240                 if (hcell > 8)
00241                     vst_height (work_display.handle, HPETIT, &dummy, &dummy, &wcell, &hcell);       /* Taille caractŠres */
00242                 else
00243                     vst_height (work_display.handle, HMINUS, &dummy, &dummy, &wcell, &hcell);       /* Taille caractŠres */
00244             }
00245             if (strlen ((char *)texte) * wcell <= para->pb_w)   /* S'il y a la place */
00246             {
00247                 vst_alignment (work_display.handle, HCENT, VTOP, &dummy, &dummy);   /* Centrer le texte */
00248                 x = para->pb_x + (para->pb_w / 2);
00249             }
00250             else                                                                    /* Si pas la place */
00251             {
00252                 texte[para->pb_w / wcell] = '\0';       /* Couper le texte */
00253                 vst_alignment (work_display.handle, HLEFT, VTOP, &dummy, &dummy);   /* Caler … gauche */
00254                 x = para->pb_x;
00255             }
00256             y = para->pb_y + ((para->pb_h - hcell) / 2);
00257             if (para->pb_currstate & SELECTED)
00258             {
00259                 x++;
00260                 y++;
00261             }
00262         }
00263         v_gtext (work_display.handle, x, y, texte); /* Ecrire le texte */
00264         free (texte);                                       /* Lib‚rer m‚moire texte */
00265     }
00266
00267     if (para->pb_obj == BW_MOVER)       /* Si barre de titre */
00268     {
00269         vswr_mode (work_display.handle, MD_REPLACE);
00270         vsl_width (work_display.handle, 1);     /* Pr‚parer lignes d'ombre */
00271         vsl_ends (work_display.handle, SQUARE, SQUARE);
00272         vsl_type (work_display.handle, SOLID);
00273         if (para->pb_tree == win[id_top].w_fen)             /* Si fenˆtre 1ø plan */
00274             vsl_color (work_display.handle, bwin.cpat_mover);
00275         else
00276             vsl_color (work_display.handle, BLACK);
00277         if (para->pb_currstate & SELECTED)
00278             fill_tab (rec, 6,                                       /* Coordonn‚es lignes d'ombre */
00279                                 para->pb_x + 1, para->pb_y + para->pb_h - 3,
00280                                 para->pb_x + 1, para->pb_y + 1,
00281                                 para->pb_x + para->pb_w - 3, para->pb_y + 1);
00282         else
00283             fill_tab (rec, 6,                                       /* Coordonn‚es lignes d'ombre */
00284                                 para->pb_x + para->pb_w - 2, para->pb_y + 2,
00285                                 para->pb_x + para->pb_w - 2, para->pb_y + para->pb_h - 2,
00286                                 para->pb_x + 2, para->pb_y + para->pb_h - 2);
00287         v_pline (work_display.handle, 3, rec);      /* Lignes d'ombre */
00288     }
00289
00290     vs_clip (work_display.handle, FALSE, tab);  /* D‚clipper */
00291     return ZERO;
00292 }
00293 /* #] titinf () Routine dessin Titre et Info :                                      */
00294 /* #[ elev () Routine dessin ascenseurs :                                                   */
00295 int cdecl elev (PARMBLK *para)
00296 {
00297 int tab[4], rec[4];
00298
00299     fill_tab (tab, 4,
00300                         para->pb_xc, para->pb_yc,
00301                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00302     vs_clip (work_display.handle, TRUE, tab);               /* Clipper */
00303
00304     vswr_mode (work_display.handle, MD_REPLACE);        /* Dessin en mode Remplacement */
00305     vsf_interior (work_display.handle, FIS_PATTERN);        /* Fond tram‚ */
00306     if (para->pb_obj == BW_VELEV)
00307     {
00308         vsf_style (work_display.handle, bwin.spat_velev);   /* Motif trame */
00309         vsf_color (work_display.handle, bwin.cpat_velev);   /* Couleur trame */
00310     }
00311     else if (para->pb_obj == BW_HELEV)
00312     {
00313         vsf_style (work_display.handle, bwin.spat_helev);   /* Motif trame */
00314         vsf_color (work_display.handle, bwin.cpat_helev);   /* Couleur trame */
00315     }
00316     vsf_perimeter (work_display.handle, TRUE);          /* Dessiner le p‚rimŠtre */
00317     fill_tab (rec, 4,                                       /* Coordonn‚es rectangle */
00318                         para->pb_x, para->pb_y,
00319                         para->pb_x + para->pb_w - 1,
00320                         para->pb_y + para->pb_h - 1);
00321     v_bar (work_display.handle, rec);                               /* Tracer rectangle */
00322
00323     vswr_mode (work_display.handle, MD_TRANS);
00324     vsf_interior (work_display.handle, FIS_HOLLOW); /* Fond blanc */
00325     vsf_color (work_display.handle, BLACK);
00326     v_bar (work_display.handle, rec);                               /* Tracer le rectangle */
00327
00328     vs_clip (work_display.handle, FALSE, tab);      /* D‚clipper */
00329     return ZERO;
00330 }
00331 /* #] elev () Routine dessin ascenseurs :                                                   */
00332 /* #[ sld () Routine dessin sliders :                                                           */
00333 int cdecl sld (PARMBLK *para)
00334 {
00335 int tab[4], rec[8], color[2], h, dummy;
00336 MFDB nul = {0}, pic, msk;
00337
00338     fill_tab (tab, 4,
00339                         para->pb_xc, para->pb_yc,
00340                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00341     vs_clip (work_display.handle, TRUE, tab);               /* Clipper */
00342
00343     vswr_mode (work_display.handle, MD_REPLACE);        /* Dessin en mode Remplacement */
00344     if (para->pb_obj == BW_VSLIDE)
00345     {
00346         if (bwin.cpat_vslid == WHITE)
00347         {
00348             vsf_interior (work_display.handle, FIS_HOLLOW);     /* Fond blanc */
00349             vsf_color (work_display.handle, BLACK);                     /* Couleur p‚rimŠtre */
00350         }
00351         else
00352         {
00353             vsf_interior (work_display.handle, FIS_PATTERN);    /* Fond tram‚ */
00354             vsf_style (work_display.handle, bwin.spat_vslid);   /* Motif trame */
00355             vsf_color (work_display.handle, bwin.cpat_vslid);   /* Couleur trame */
00356         }
00357     }
00358     else if (para->pb_obj == BW_HSLIDE)
00359     {
00360         if (bwin.cpat_hslid == WHITE)
00361         {
00362             vsf_interior (work_display.handle, FIS_HOLLOW);     /* Fond blanc */
00363             vsf_color (work_display.handle, BLACK);                     /* Couleur p‚rimŠtre */
00364         }
00365         else
00366         {
00367             vsf_interior (work_display.handle, FIS_PATTERN);    /* Fond tram‚ */
00368             vsf_style (work_display.handle, bwin.spat_hslid);   /* Motif trame */
00369             vsf_color (work_display.handle, bwin.cpat_hslid);   /* Couleur trame */
00370         }
00371     }
00372     vsf_perimeter (work_display.handle, TRUE);          /* Dessiner le p‚rimŠtre */
00373     fill_tab (rec, 4,                                       /* Coordonn‚es rectangle */
00374                         para->pb_x, para->pb_y,
00375                         para->pb_x + para->pb_w - 1,
00376                         para->pb_y + para->pb_h - 1);
00377     v_bar (work_display.handle, rec);                               /* Tracer rectangle */
00378
00379     vswr_mode (work_display.handle, MD_TRANS);
00380     vsf_interior (work_display.handle, FIS_HOLLOW); /* Fond blanc */
00381     vsf_color (work_display.handle, BLACK);
00382     vsf_perimeter (work_display.handle, TRUE);          /* Dessiner le p‚rimŠtre */
00383     v_bar (work_display.handle, rec);                               /* Tracer le rectangle */
00384
00385     vsl_width (work_display.handle, 1);
00386     vsl_ends (work_display.handle, SQUARE, SQUARE);
00387     vsl_type (work_display.handle, SOLID);
00388     if (para->pb_currstate & SELECTED)
00389         fill_tab (rec, 6,                                       /* Coordonn‚es lignes d'ombre */
00390                             para->pb_x + 1, para->pb_y + para->pb_h - 3,
00391                             para->pb_x + 1, para->pb_y + 1,
00392                             para->pb_x + para->pb_w - 3, para->pb_y + 1);
00393     else
00394         fill_tab (rec, 6,                                       /* Coordonn‚es lignes d'ombre */
00395                             para->pb_x + para->pb_w - 2, para->pb_y + 2,
00396                             para->pb_x + para->pb_w - 2, para->pb_y + para->pb_h - 2,
00397                             para->pb_x + 2, para->pb_y + para->pb_h - 2);
00398     v_pline (work_display.handle, 3, rec);                          /* Tracer lignes d'ombre */
00399
00400     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &dummy, &h);  /* BoŒtes caractŠres */
00401     if (para->pb_obj == BW_VSLIDE)              /* Adresse datas */
00402     {
00403         if (h > 8)
00404         {
00405             pic.fd_addr = (void *) bi_trindex[GADGETS][GA_SLVH].ob_spec.iconblk->ib_pdata;
00406             msk.fd_addr = (void *) bi_trindex[GADGETS][GA_SLVH].ob_spec.iconblk->ib_pmask;
00407         }
00408         else
00409         {
00410             pic.fd_addr = (void *) bi_trindex[GADGETS][GA_SLVM].ob_spec.iconblk->ib_pdata;
00411             msk.fd_addr = (void *) bi_trindex[GADGETS][GA_SLVM].ob_spec.iconblk->ib_pmask;
00412         }
00413     }
00414     else
00415     {
00416         if (h > 8)
00417         {
00418             pic.fd_addr = (void *) bi_trindex[GADGETS][GA_SLHH].ob_spec.iconblk->ib_pdata;
00419             msk.fd_addr = (void *) bi_trindex[GADGETS][GA_SLHH].ob_spec.iconblk->ib_pmask;
00420         }
00421         else
00422         {
00423             pic.fd_addr = (void *) bi_trindex[GADGETS][GA_SLHM].ob_spec.iconblk->ib_pdata;
00424             msk.fd_addr = (void *) bi_trindex[GADGETS][GA_SLHM].ob_spec.iconblk->ib_pmask;
00425         }
00426     }
00427     pic.fd_w = msk.fd_w = 16;               /* Largeur image */
00428     if (h > 8)
00429         pic.fd_h = msk.fd_h = 16;           /* Hauteur image selon r‚solution */
00430     else
00431         pic.fd_h = msk.fd_h = 8;
00432     pic.fd_wdwidth = msk.fd_wdwidth = 1;        /* Largeur en motes */
00433     pic.fd_nplanes = msk.fd_nplanes = 1;        /* Nbre de plans */
00434     pic.fd_stand = msk.fd_stand = ZERO;         /* SystŠme coordonn‚es */
00435
00436     fill_tab (rec, 8,           /* Tableau des coordonn‚es */
00437                         ZERO, ZERO, pic.fd_w - 1, pic.fd_h - 1,
00438                         para->pb_x + (para->pb_w / 2) - (pic.fd_w / 2),
00439                         para->pb_y + (para->pb_h / 2) - (pic.fd_h / 2),
00440                         para->pb_x + (para->pb_w / 2) - (pic.fd_w / 2) + pic.fd_w - 1,
00441                         para->pb_y + (para->pb_h / 2) - (pic.fd_h / 2) + pic.fd_h - 1);
00442     if (para->pb_currstate & SELECTED)
00443     {
00444         rec[4]++;
00445         rec[5]++;
00446         rec[6]++;
00447         rec[7]++;
00448     }
00449     color[0] = WHITE;
00450     color[1] = WHITE;
00451     vrt_cpyfm (work_display.handle, MD_TRANS, rec, &msk, &nul, color);
00452     color[0] = bwin.cicn_gadgt;
00453     vrt_cpyfm (work_display.handle, MD_TRANS, rec, &pic, &nul, color);
00454
00455     vs_clip (work_display.handle, FALSE, tab);      /* D‚clipper */
00456     return ZERO;
00457 }
00458 /* #] sld () Routine dessin sliders :                                                           */
00459 /* #[ work () Routine dessin zone de travail :                                      */
00460 int cdecl work (PARMBLK *para)
00461 {
00462 int tab[4], rec[4];
00463
00464     fill_tab (tab, 4,
00465                         para->pb_xc, para->pb_yc,
00466                         para->pb_wc + para->pb_xc - 1, para->pb_hc + para->pb_yc - 1);
00467     vs_clip (work_display.handle, TRUE, tab);                       /* Clipper */
00468
00469     vswr_mode (work_display.handle, MD_REPLACE);                /* Dessin en mode Remplacement */
00470     if (NOT (para->pb_tree[para->pb_obj].ob_state & 0x0F00))
00471     {
00472         vsf_interior (work_display.handle, FIS_HOLLOW);     /* Fond couleur 0 */
00473         vsf_color (work_display.handle, WHITE);                     /* Couleur trame */
00474     }
00475     else
00476     {
00477         vsf_interior (work_display.handle, FIS_PATTERN);    /* Trame */
00478         vsf_style (work_display.handle,     /* Motif de trame */
00479                              ((para->pb_tree[para->pb_obj].ob_state & 0xF000) >> 12));
00480         vsf_color (work_display.handle,     /* Couleur trame */
00481                              ((para->pb_tree[para->pb_obj].ob_state & 0x0F00) >> 8));
00482     }
00483     vsf_perimeter (work_display.handle, FALSE);         /* Ne pas dessiner le p‚rimŠtre */
00484     fill_tab (rec, 4,                                           /* Coordonn‚es rectangle */
00485                         para->pb_x + 1, para->pb_y + 1,
00486                         para->pb_x + para->pb_w - 2,
00487                         para->pb_y + para->pb_h - 2);
00488     v_bar (work_display.handle, rec);                                   /* Tracer rectangle */
00489
00490     vs_clip (work_display.handle, FALSE, tab);              /* D‚clipper */
00491     return ZERO;
00492 }
00493 /* #] work () Routine dessin zone de travail :                                      */
00494
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2USR2.H Source File

BIG2USR2.H

Go to the documentation of this file.
00001 /*  BIG2USR2.H */
00002
00003 /* #[ Variables globales : */
00004 extern t_display work_display;
00005 extern int id_top;
00006
00007 #include "BIG2INCL.H"
00008 extern OBJECT *bi_trindex[];
00009
00010 typedef struct win_user
00011 {
00012     int     mtxt_mover;     /* Mode texte MOVER */
00013     int     ctxt_mover;     /* Couleur texte MOVER */
00014     int     spat_mover;     /* Style trame MOVER */
00015     int     cpat_mover;     /* Couleur trame MOVER */
00016     int     ctxt_info;      /* Couleur texte INFO */
00017     int     spat_velev;     /* Style trame VELEV */
00018     int     cpat_velev;     /* Couleur trame VELEV */
00019     int     spat_helev;     /* Style trame HELEV */
00020     int     cpat_helev;     /* Couleur trame HELEV */
00021     int     spat_vslid;     /* Style trame VSLIDE */
00022     int     cpat_vslid;     /* Couleur trame VSLIDE */
00023     int     spat_hslid;     /* Style trame HSLIDE */
00024     int     cpat_hslid;     /* Couleur trame HSLIDE */
00025     int     cpat_gadgt;     /* Couleur fond gadgets */
00026     int     cicn_gadgt;     /* Couleur ic“ne gadgets */
00027 } Win_user;
00028 /* #] Variables globales : */
00029 /* #[ Prototypage des fonctions : */
00030 int     cdecl fond (PARMBLK *para);
00031 int     cdecl gadget (PARMBLK *para);
00032 int     cdecl titinf (PARMBLK *para);
00033 int     cdecl elev (PARMBLK *para);
00034 int     cdecl sld (PARMBLK *para);
00035 int     cdecl work (PARMBLK *para);
00036 /* #] Prototypage des fonctions : */
00037
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2WINB.C Source File

BIG2WINB.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002         MODULE FONCTIONS DE GESTION DES FENETRES BIG
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2WINB.H"
00007 #include "BIG2WIND.H"
00008 #include "BIG2USR2.H"
00009 #include "BIG2EVTW.H"
00010 #include "BIG2INCL.H"
00011 extern Win_user bwin;
00012 extern int topp;
00013 /* #[ Prototypage des fonctions :                                                               */
00014 void rubberbox (int *xfin, int *yfin,
00015                                 int *wfin, int *hfin,
00016                                 int obj, int index);
00017 void dragbox (int wr, int hr, int xr, int yr,
00018                             int xz, int yz, int wz, int hz,
00019                             int *xfin, int *yfin, int index);
00020 /* #] Prototypage des fonctions :                                                               */
00021 /* #[ put_fen () Placer l'arbre de fenˆtre :                                            */
00022 void put_fen (int index)
00023 {
00024 int x, y, w, h, at;
00025 OBJECT *adr;
00026
00027         /* Copie du formulaire fenˆtre */
00028     memcpy (win[index].w_fen, bi_trindex[BIG_WIND], (NGAD * sizeof (OBJECT)));
00029     adr = win[index].w_fen;
00030
00031     x = win[index].w_curr.g_x;
00032     y = win[index].w_curr.g_y;
00033     w = win[index].w_curr.g_w;
00034     h = win[index].w_curr.g_h;
00035
00036     adr->ob_x = x;                  /* Mettre tout … z‚ro */
00037     adr->ob_y = y;                  /* comme si la fenˆtre */
00038     adr->ob_width = w;          /* poss‚dait tous les */
00039     adr->ob_height = h;         /* attributs. */
00040     adr[BW_SIZERUR].ob_x = w - adr[BW_SIZERUR].ob_width;
00041     adr[BW_FULLER].ob_x = adr[BW_SIZERUR].ob_x - adr[BW_FULLER].ob_width;
00042     adr[BW_CYCLER].ob_x = adr[BW_FULLER].ob_x - adr[BW_CYCLER].ob_width;
00043     adr[BW_SMALLER].ob_x = adr[BW_CYCLER].ob_x - adr[BW_SMALLER].ob_width;
00044     adr[BW_MOVER].ob_width = w - adr[BW_SIZERUL].ob_width -
00045                                                      adr[BW_CLOSER].ob_width -
00046                                                      adr[BW_SIZERUR].ob_width -
00047                                                      adr[BW_FULLER].ob_width -
00048                                                      adr[BW_CYCLER].ob_width -
00049                                                      adr[BW_SMALLER].ob_width + 3;
00050     adr[BW_INFO].ob_width = w;
00051     adr[BW_BARRE].ob_width = w;
00052     adr[BW_VBAR].ob_x = w - adr[BW_VBAR].ob_width;
00053     adr[BW_VBAR].ob_height = h - adr[BW_SIZERUR].ob_height -
00054                                                      adr[BW_INFO].ob_height -
00055                                                      adr[BW_SIZERDR].ob_height + 2;
00056     adr[BW_VELEV].ob_height = adr[BW_VBAR].ob_height -
00057                                                         adr[BW_UPARROW].ob_height -
00058                                                         adr[BW_DNARROW].ob_height;
00059     adr[BW_DNARROW].ob_y = adr[BW_VELEV].ob_y + adr[BW_VELEV].ob_height;
00060     adr[BW_SIZERDL].ob_y = h - adr[BW_SIZERDL].ob_height;
00061     adr[BW_HBAR].ob_y = h - adr[BW_HBAR].ob_height;
00062     adr[BW_HBAR].ob_width = w - adr[BW_SIZERDL].ob_width -
00063                                                      adr[BW_SIZERDR].ob_width + 1;
00064     adr[BW_HELEV].ob_width = adr[BW_HBAR].ob_width -
00065                                                         adr[BW_LFARROW].ob_width -
00066                                                         adr[BW_RTARROW].ob_width;
00067     adr[BW_RTARROW].ob_x = adr[BW_HELEV].ob_x + adr[BW_HELEV].ob_width;
00068     adr[BW_SIZERDR].ob_x = w - adr[BW_SIZERDR].ob_width;
00069     adr[BW_SIZERDR].ob_y = h - adr[BW_SIZERDR].ob_height;
00070     adr[BW_WORK].ob_width = w - adr[BW_VBAR].ob_width + 1;
00071     adr[BW_WORK].ob_height = h - adr[BW_MOVER].ob_height -
00072                                                      adr[BW_INFO].ob_height -
00073                                                      adr[BW_HBAR].ob_height + 3;
00074
00075     if (win[index].w_flags & WFGROUP)
00076     {       /* Si groupement des flŠches */
00077         adr[BW_VELEV].ob_y = 1;
00078         adr[BW_UPARROW].ob_y = 1 + adr[BW_VELEV].ob_height;
00079         adr[BW_HELEV].ob_x = ZERO;
00080         adr[BW_LFARROW].ob_x = adr[BW_HELEV].ob_width;
00081     }
00082
00083         /* Selon les attributs absents... */
00084     at = win[index].w_attr;
00085
00086     if (NOT (at & ALLSIZER))
00087     {
00088         adr[BW_SIZERUL].ob_flags |= HIDETREE;
00089         adr[BW_SIZERUR].ob_flags |= HIDETREE;
00090         adr[BW_SIZERDL].ob_flags |= HIDETREE;
00091         adr[BW_CLOSER].ob_x -= adr[BW_SIZERUL].ob_width;
00092         adr[BW_MOVER].ob_x -= adr[BW_SIZERUL].ob_width;
00093         adr[BW_MOVER].ob_width += adr[BW_SIZERUL].ob_width;
00094         adr[BW_MOVER].ob_width += adr[BW_SIZERUR].ob_width;
00095         adr[BW_SMALLER].ob_x += adr[BW_SIZERUR].ob_width;
00096         adr[BW_CYCLER].ob_x += adr[BW_SIZERUR].ob_width;
00097         adr[BW_FULLER].ob_x += adr[BW_SIZERUR].ob_width;
00098         adr[BW_HBAR].ob_x -= adr[BW_SIZERDL].ob_width;
00099         adr[BW_HBAR].ob_width += adr[BW_SIZERDL].ob_width;
00100         adr[BW_HELEV].ob_width += adr[BW_SIZERDL].ob_width;
00101         adr[BW_RTARROW].ob_x += adr[BW_SIZERDL].ob_width;
00102     }
00103     if (NOT (at & CLOSER))
00104     {
00105         adr[BW_CLOSER].ob_flags |= HIDETREE;
00106         adr[BW_MOVER].ob_x -= adr[BW_CLOSER].ob_width;
00107         adr[BW_MOVER].ob_width += adr[BW_CLOSER].ob_width;
00108     }
00109     if (NOT (at & SMALLER))
00110     {
00111         adr[BW_SMALLER].ob_flags |= HIDETREE;
00112         adr[BW_MOVER].ob_width += adr[BW_SMALLER].ob_width;
00113     }
00114     if (NOT (at & CYCLER))
00115     {
00116         adr[BW_CYCLER].ob_flags |= HIDETREE;
00117         adr[BW_MOVER].ob_width += adr[BW_CYCLER].ob_width;
00118         adr[BW_SMALLER].ob_x += adr[BW_CYCLER].ob_width;
00119     }
00120     if (NOT (at & FULLER))
00121     {
00122         adr[BW_FULLER].ob_flags |= HIDETREE;
00123         adr[BW_MOVER].ob_width += adr[BW_FULLER].ob_width;
00124         adr[BW_SMALLER].ob_x += adr[BW_FULLER].ob_width;
00125         adr[BW_CYCLER].ob_x += adr[BW_FULLER].ob_width;
00126     }
00127     if (NOT (at & INFO))
00128     {
00129         adr[BW_INFO].ob_flags |= HIDETREE;
00130         adr[BW_WORK].ob_y -= (adr[BW_INFO].ob_height - 2);
00131         adr[BW_WORK].ob_height += (adr[BW_INFO].ob_height - 2);
00132         adr[BW_BARRE].ob_y -= (adr[BW_INFO].ob_height - 1);
00133         adr[BW_VBAR].ob_y -= (adr[BW_INFO].ob_height - 1);
00134         adr[BW_VBAR].ob_height += (adr[BW_INFO].ob_height - 1);
00135         adr[BW_VELEV].ob_height += (adr[BW_INFO].ob_height - 1);
00136         adr[BW_DNARROW].ob_y += (adr[BW_INFO].ob_height - 1);
00137     }
00138     if (NOT (at & UPARROW))
00139     {
00140         adr[BW_UPARROW].ob_flags |= HIDETREE;
00141         adr[BW_VELEV].ob_y -= (adr[BW_UPARROW].ob_height - 1);
00142         adr[BW_VELEV].ob_height += (adr[BW_UPARROW].ob_height + 1);
00143     }
00144     if (NOT (at & DNARROW))
00145     {
00146         adr[BW_DNARROW].ob_flags |= HIDETREE;
00147         adr[BW_VELEV].ob_height += adr[BW_DNARROW].ob_height;
00148     }
00149     if (NOT (at & VSLIDE))
00150     {
00151         adr[BW_VELEV].ob_flags |= HIDETREE;
00152     }
00153     if ((NOT (at & UPARROW)) &&
00154             (NOT (at & DNARROW)) &&
00155             (NOT (at & VSLIDE)))
00156     {
00157         adr[BW_VBAR].ob_flags |= HIDETREE;
00158         adr[BW_WORK].ob_width += adr[BW_VBAR].ob_width - 1;
00159     }
00160     if (NOT (at & LFARROW))
00161     {
00162         adr[BW_LFARROW].ob_flags |= HIDETREE;
00163         adr[BW_HELEV].ob_x -= (adr[BW_LFARROW].ob_width - 1);
00164         adr[BW_HELEV].ob_width += (adr[BW_LFARROW].ob_width + 1);
00165     }
00166     if (NOT (at & RTARROW))
00167     {
00168         adr[BW_RTARROW].ob_flags |= HIDETREE;
00169         adr[BW_HELEV].ob_width += adr[BW_RTARROW].ob_width;
00170     }
00171     if (NOT (at & HSLIDE))
00172     {
00173         adr[BW_HELEV].ob_flags |= HIDETREE;
00174     }
00175     if ((NOT (at & LFARROW)) &&
00176             (NOT (at & RTARROW)) &&
00177             (NOT (at & HSLIDE)))
00178     {
00179         if ((NOT (at & SIZER)) && (NOT (at & ALLSIZER)))
00180         {
00181             adr[BW_HBAR].ob_flags |= HIDETREE;
00182             adr[BW_WORK].ob_height += adr[BW_HBAR].ob_height - 1;
00183         }
00184         else
00185         {
00186             adr[BW_HELEV].ob_flags |= HIDETREE;
00187             adr[BW_LFARROW].ob_flags |= HIDETREE;
00188             adr[BW_RTARROW].ob_flags |= HIDETREE;
00189         }
00190     }
00191     if (NOT (at & SIZER))
00192     {
00193         adr[BW_SIZERDR].ob_flags |= HIDETREE;
00194         adr[BW_VBAR].ob_height += adr[BW_SIZERDR].ob_height;
00195         adr[BW_VELEV].ob_height += adr[BW_SIZERDR].ob_height;
00196         adr[BW_DNARROW].ob_y += adr[BW_SIZERDR].ob_height;
00197         adr[BW_HBAR].ob_width += adr[BW_SIZERDR].ob_width;
00198         adr[BW_HELEV].ob_width += adr[BW_SIZERDR].ob_width;
00199         adr[BW_RTARROW].ob_x += adr[BW_SIZERDR].ob_width;
00200     }
00201
00202     if (win[index].w_flags & WFGROUP)
00203     {
00204         adr[BW_UPARROW].ob_y = (adr[BW_DNARROW].ob_y - adr[BW_UPARROW].ob_height + 1);
00205         adr[BW_LFARROW].ob_x = (adr[BW_RTARROW].ob_x - adr[BW_LFARROW].ob_width + 1);
00206     }
00207 }
00208 /* #] put_fen () Placer l'arbre de fenˆtre :                                            */
00209 /* #[ no_top () Manipulation en arriŠre-plan :                                      */
00210 void no_top (int obj, int index)
00211 {
00212 int top, dummy;
00213
00214     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00215     switch (obj)
00216     {
00217     case BW_MOVER :
00218         if (win[index].w_attr & MOVER)
00219         {
00220             if ((clik == 2) && (win[index].w_icon == BLANK))
00221             {
00222                 buf[3] = win[index].w_hg;
00223                 (*win[index].w_full)();
00224                 buf[0] = WM_FULLED;
00225                 buf[1] = ap_id;
00226                 buf[3] = win[index].w_hg;
00227                 wind_mouse ();
00228             }
00229             else if ((clik == 1) && (kbd == K_CTRL))
00230             {
00231                 buf[3] = win[index].w_hg;
00232                 (*win[index].w_cycle)();
00233                 buf[0] = WM_CYCLED;
00234                 buf[1] = ap_id;
00235                 buf[3] = win[index].w_hg;
00236                 buf[4] = top;
00237             }
00238             else
00239             {
00240                 movebw (index);
00241                 buf[0] = WM_MOVED;
00242                 buf[1] = ap_id;
00243                 buf[3] = win[index].w_hg;
00244                 buf[4] = win[index].w_curr.g_x;
00245                 buf[5] = win[index].w_curr.g_y;
00246                 buf[6] = win[index].w_curr.g_w;
00247                 buf[7] = win[index].w_curr.g_h;
00248                 wind_mouse ();
00249             }
00250         }
00251         break;
00252     case BW_SIZERUL :
00253     case BW_SIZERUR :
00254     case BW_SIZERDL :
00255     case BW_SIZERDR :
00256         sizebw (obj, index);
00257         buf[0] = WM_SIZED;
00258         buf[1] = ap_id;
00259         buf[3] = win[index].w_hg;
00260         buf[4] = win[index].w_curr.g_x;
00261         buf[5] = win[index].w_curr.g_y;
00262         buf[6] = win[index].w_curr.g_w;
00263         buf[7] = win[index].w_curr.g_h;
00264         wind_mouse ();
00265         break;
00266     case BW_CLOSER :
00267         buf[3] = win[index].w_hg;
00268         (*win[index].w_close)();
00269         buf[0] = WM_CLOSED;
00270         buf[1] = ap_id;
00271         buf[3] = win[index].w_hg;
00272         wind_mouse ();
00273         break;
00274     case BW_CYCLER :
00275         buf[3] = win[index].w_hg;
00276         (*win[index].w_cycle)();
00277         buf[0] = WM_CYCLED;
00278         buf[1] = ap_id;
00279         buf[3] = win[index].w_hg;
00280         buf[4] = top;
00281         break;
00282     case BW_FULLER :
00283         buf[3] = win[index].w_hg;
00284         (*win[index].w_full)();
00285         buf[0] = WM_FULLED;
00286         buf[1] = ap_id;
00287         buf[3] = win[index].w_hg;
00288         wind_mouse ();
00289         break;
00290     case BW_HSLIDE :
00291         slid (obj, index);
00292         buf[0] = WM_HSLID;
00293         buf[1] = ap_id;
00294         buf[3] = top;
00295         buf[4] = (int)((double)win[index].w_fen[BW_HSLIDE].ob_x /
00296                                      ((double)win[index].w_fen[BW_HELEV].ob_width - (double)win[index].w_fen[BW_HSLIDE].ob_width) *
00297                                      1000.0);
00298         break;
00299     case BW_VSLIDE :
00300         slid (obj, index);
00301         buf[0] = WM_VSLID;
00302         buf[1] = ap_id;
00303         buf[3] = top;
00304         buf[4] = (int)((double)win[index].w_fen[BW_VSLIDE].ob_y /
00305                                      ((double)win[index].w_fen[BW_VELEV].ob_height - (double)win[index].w_fen[BW_VSLIDE].ob_height) *
00306                                      1000.0);
00307         break;
00308     case BW_UPARROW :
00309         arrows (obj, index);
00310         buf[0] = WM_ARROWED;
00311         buf[1] = ap_id;
00312         buf[3] = win[index].w_hg;
00313         buf[4] = WA_UPLINE;
00314         break;
00315     case BW_DNARROW :
00316         arrows (obj, index);
00317         buf[0] = WM_ARROWED;
00318         buf[1] = ap_id;
00319         buf[3] = win[index].w_hg;
00320         buf[4] = WA_DNLINE;
00321         break;
00322     case BW_LFARROW :
00323         arrows (obj, index);
00324         buf[0] = WM_ARROWED;
00325         buf[1] = ap_id;
00326         buf[3] = win[index].w_hg;
00327         buf[4] = WA_LFLINE;
00328         break;
00329     case BW_RTARROW :
00330         arrows (obj, index);
00331         buf[0] = WM_ARROWED;
00332         buf[1] = ap_id;
00333         buf[3] = win[index].w_hg;
00334         buf[4] = WA_RTLINE;
00335         break;
00336     case BW_VELEV :
00337         if (asce (obj, index))
00338             buf[4] = WA_DNPAGE;
00339         else
00340             buf[4] = WA_UPPAGE;
00341         buf[0] = WM_ARROWED;
00342         buf[1] = ap_id;
00343         buf[3] = win[index].w_hg;
00344         break;
00345     case BW_HELEV :
00346         if (asce (obj, index))
00347             buf[4] = WA_LFPAGE;
00348         else
00349             buf[4] = WA_RTPAGE;
00350         buf[0] = WM_ARROWED;
00351         buf[1] = ap_id;
00352         buf[3] = win[index].w_hg;
00353         break;
00354     case BW_SMALLER :
00355         if (kbd == K_CTRL)
00356         {
00357             alliconise (index);
00358             buf[0] = WM_ALLICONIFY;
00359             buf[1] = ap_id;
00360             buf[3] = win[index].w_hg;
00361         }
00362         else if (kbd == ZERO)
00363         {
00364             iconise (index);
00365             buf[0] = WM_ICONIFY;
00366             buf[1] = ap_id;
00367             buf[3] = win[index].w_hg;
00368         }
00369         break;
00370     }
00371 }
00372 /* #] no_top () Manipulation en arriŠre-plan :                                      */
00373 /* #[ asce() Traitement des acenseurs :                                                     */
00374 int asce (int obj, int index)
00375 {
00376 int xo, yo, s, a, sens, red = FALSE, dummy;
00377
00378     if (obj == BW_VELEV)
00379         s = BW_VSLIDE;
00380     else if (obj == BW_HELEV)
00381         s = BW_HSLIDE;
00382     a = parent (win[index].w_fen, s);
00383
00384     objc_offset (win[index].w_fen, s, &xo, &yo);
00385     if (obj == BW_VELEV)
00386     {
00387         if (my < yo)
00388             sens = FALSE;   /* Vers le haut */
00389         else
00390             sens = TRUE;    /* Vers le bas */
00391     }
00392     if (obj == BW_HELEV)
00393     {
00394         if (mx < xo)
00395             sens = FALSE;   /* Vers la gauche */
00396         else
00397             sens = TRUE;    /* Vers la droite */
00398     }
00399
00400     buf[3] = win[index].w_hg;
00401     do
00402     {
00403         red = FALSE;
00404         if ((obj == BW_VELEV) && (sens == FALSE))               /* Haut */
00405         {
00406             (*win[index].w_uppage)();
00407             red = TRUE;
00408         }
00409         else if ((obj == BW_VELEV) && (sens == TRUE))       /* Bas */
00410         {
00411             (*win[index].w_dnpage)();
00412             red = TRUE;
00413         }
00414         else if ((obj == BW_HELEV) && (sens == FALSE))  /* Gauche */
00415         {
00416             (*win[index].w_lfpage)();
00417             red = TRUE;
00418         }
00419         else if ((obj == BW_HELEV) && (sens == TRUE))       /* Droite */
00420         {
00421             (*win[index].w_rtpage)();
00422             red = TRUE;
00423         }
00424
00425         if (red)
00426             draw_obj (win[index].w_fen, a);                     /* Redessiner l'ascenseur */
00427         graf_mkstate (&dummy, &dummy, &mk, &dummy); /* Bouton souris */
00428     } while (mk);
00429     return sens;
00430 }
00431 /* #] asce() Traitement des acenseurs :                                                     */
00432 /* #[ arrows () Traitement des flŠches :                                                    */
00433 void arrows (int obj, int index)
00434 {
00435 int s, a, red = FALSE, dummy;
00436
00437     if ((obj == BW_UPARROW) || (obj == BW_DNARROW))
00438         s = BW_VSLIDE;
00439     else if ((obj == BW_LFARROW) || (obj == BW_RTARROW))
00440         s = BW_HSLIDE;
00441     a = parent (win[index].w_fen, s);
00442
00443     win[index].w_fen[obj].ob_state |= SELECTED;             /* S‚lectionner */
00444     draw_obj (win[index].w_fen, obj);                                   /* Redessiner l'objet */
00445
00446     buf[3] = win[index].w_hg;
00447     do
00448     {
00449         red = FALSE;
00450         if (obj == BW_UPARROW)
00451         {
00452             (*win[index].w_upline)();
00453             red = TRUE;
00454         }
00455         else if (obj == BW_LFARROW)
00456         {
00457             (*win[index].w_lfline)();
00458             red = TRUE;
00459         }
00460         else if (obj == BW_DNARROW)
00461         {
00462             (*win[index].w_dnline)();
00463             red = TRUE;
00464         }
00465         else if (obj == BW_RTARROW)
00466         {
00467             (*win[index].w_rtline)();
00468             red = TRUE;
00469         }
00470
00471         if (red)
00472             draw_obj (win[index].w_fen, a);                     /* Redessiner l'ascenseur */
00473         graf_mkstate (&dummy, &dummy, &mk, &dummy); /* Bouton souris */
00474     } while (mk);
00475
00476     win[index].w_fen[obj].ob_state &= ~SELECTED;                /* D‚s‚lectionner */
00477     draw_obj (win[index].w_fen, obj);                                       /* Redessiner l'objet */
00478 }
00479 /* #] arrows () Traitement des flŠches :                                                    */
00480 /* #[ slid () Mouvements sliders () :                                                           */
00481 void slid (int obj, int index)
00482 {
00483 int xfin, yfin, pere, xr, yr, wr, hr, xz, yz, wz, hz, ox, oy;
00484 MFORM slider_h_mouse =
00485     {   0x0007,0x0007,0x0001,0x0000,0x0002,
00486             /* Mask data */
00487         0x0000,0x0000,0x0810,0x1428,
00488         0x2424,0x47E2,0x8001,0x0000,
00489         0x8001,0x47E2,0x2424,0x1428,
00490         0x0810,0x0000,0x0000,0x0000,
00491             /* Cursor data */
00492         0x0000,0x0000,0x0000,0x0810,
00493         0x1818,0x381C,0x7FFE,0xFFFF,
00494         0x7FFE,0x381C,0x1818,0x0810,
00495         0x0000,0x0000,0x0000,0x0000
00496     },
00497     slider_v_mouse =
00498     {   0x0008,0x0007,0x0001,0x0000,0x0002,
00499             /* Mask data */
00500         0x0140,0x0220,0x0410,0x0808,
00501         0x1004,0x0E38,0x0220,0x02A0,
00502         0x0220,0x0220,0x0E38,0x1004,
00503         0x0808,0x0410,0x0220,0x0140,
00504             /* Cursor data */
00505         0x0080,0x01C0,0x03E0,0x07F0,
00506         0x0FF8,0x01C0,0x01C0,0x01C0,
00507         0x01C0,0x01C0,0x01C0,0x0FF8,
00508         0x07F0,0x03E0,0x01C0,0x0080
00509     };
00510
00511     pere = parent (win[index].w_fen, obj);
00512     objc_offset (win[index].w_fen, obj, &xr, &yr);
00513     wr = win[index].w_fen[obj].ob_width;
00514     hr = win[index].w_fen[obj].ob_height;
00515     objc_offset (win[index].w_fen, pere, &xz, &yz);
00516     wz = win[index].w_fen[pere].ob_width;
00517     hz = win[index].w_fen[pere].ob_height;
00518     win[index].w_fen[obj].ob_state |= SELECTED;         /* S‚lectionner */
00519     draw_obj (win[index].w_fen, obj);                               /* Redessiner l'objet */
00520     if (obj == BW_VSLIDE)
00521         graf_mouse (USER_DEF, &slider_v_mouse);
00522     else if (obj == BW_HSLIDE)
00523         graf_mouse (USER_DEF, &slider_h_mouse);
00524     objc_offset (win[index].w_fen, obj, &ox, &oy);
00525     dragbox (wr, hr, xr, yr,
00526                      xz, yz, wz, hz,
00527                      &xfin, &yfin, BLANK);
00528     graf_mouse (ARROW, ZERO);
00529     if ((xfin != ox) || (yfin != oy))
00530     {
00531         buf[3] = win[index].w_hg;
00532         if (obj == BW_VSLIDE)
00533         {
00534             win[index].w_fen[obj].ob_y = yfin - yz;
00535             vslid ();
00536         }
00537         else if (obj == BW_HSLIDE)
00538         {
00539             win[index].w_fen[obj].ob_x = xfin - xz;
00540             hslid ();
00541         }
00542     }
00543     win[index].w_fen[obj].ob_state &= ~SELECTED;    /* D‚s‚lectionner */
00544     draw_obj (win[index].w_fen, pere);                      /* Redessiner l'objet */
00545 }
00546 /* #] slid () Mouvements sliders () :                                                           */
00547 /* #[ draw_obj () Redessiner un objet :                                                     */
00548 void draw_obj (OBJECT *adr, int obj)
00549 {
00550 int i = ZERO, index = BLANK;
00551 GRECT rd, r;
00552
00553     do
00554     {
00555         if (win[i].w_fen == adr)
00556             index = i;
00557     } while ((NOT (win[i++].w_flags & WFLAST)) && (index == BLANK));
00558
00559     if (win[index].w_hg <= ZERO)
00560         return;
00561
00562     objc_offset (win[index].w_fen, obj, &r.g_x, &r.g_y);
00563     r.g_w = win[index].w_fen[obj].ob_width;
00564     r.g_h = win[index].w_fen[obj].ob_height;
00565     wind_get (win[index].w_hg, WF_FIRSTXYWH,
00566                         &rd.g_x, &rd.g_y, &rd.g_w, &rd.g_h);
00567     while ((rd.g_w > ZERO) && (rd.g_h > ZERO))
00568     {
00569         if (rc_intersect (&r, &rd))
00570             objc_draw (win[index].w_fen, obj, 1, rd.g_x, rd.g_y, rd.g_w, rd.g_h);
00571         wind_get (win[index].w_hg, WF_NEXTXYWH, &rd.g_x, &rd.g_y, &rd.g_w, &rd.g_h);
00572     }
00573 }
00574 /* #] draw_obj () Redessiner un objet :                                                     */
00575 /* #[ draw_wind () Redessiner contour fenˆtre :                                     */
00576 void draw_wind (int index, GRECT *r)
00577 {
00578 register int i;
00579 int tab[] = {BW_SIZERUL, BW_CLOSER, BW_MOVER, BW_SMALLER, BW_CYCLER, BW_FULLER,
00580                          BW_SIZERUR, BW_INFO, BW_VBAR, BW_SIZERDL, BW_HBAR, BW_SIZERDR};
00581
00582     for (i = 0 ; i < 12 ; i++)
00583         if (NOT (win[index].w_fen[tab[i]].ob_flags & HIDETREE))
00584         {
00585             objc_draw (win[index].w_fen, tab[i], 3, /* Dessiner ‚l‚ment */
00586                                  r->g_x, r->g_y, r->g_w, r->g_h);
00587         }
00588 }
00589 /* #] draw_wind () Redessiner contour fenˆtre :                                     */
00590 /* #[ resize () Replace les objets :                                                            */
00591 void resize (int index, int deltaw, int deltah)
00592 {
00593     win[index].w_fen[BW_MOVER].ob_width += deltaw;
00594     win[index].w_fen[BW_SMALLER].ob_x += deltaw;
00595     win[index].w_fen[BW_CYCLER].ob_x += deltaw;
00596     win[index].w_fen[BW_FULLER].ob_x += deltaw;
00597     win[index].w_fen[BW_SIZERUR].ob_x += deltaw;
00598     win[index].w_fen[BW_INFO].ob_width += deltaw;
00599     win[index].w_fen[BW_BARRE].ob_width += deltaw;
00600     win[index].w_fen[BW_VBAR].ob_x += deltaw;
00601     win[index].w_fen[BW_VBAR].ob_height += deltah;
00602     win[index].w_fen[BW_VELEV].ob_height += deltah;
00603     win[index].w_fen[BW_DNARROW].ob_y += deltah;
00604     win[index].w_fen[BW_SIZERDL].ob_y += deltah;
00605     win[index].w_fen[BW_HBAR].ob_y += deltah;
00606     win[index].w_fen[BW_HBAR].ob_width += deltaw;
00607     win[index].w_fen[BW_HELEV].ob_width += deltaw;
00608     win[index].w_fen[BW_RTARROW].ob_x += deltaw;
00609     win[index].w_fen[BW_SIZERDR].ob_x += deltaw;
00610     win[index].w_fen[BW_SIZERDR].ob_y += deltah;
00611     win[index].w_fen[BW_WORK].ob_width += deltaw;
00612     win[index].w_fen[BW_WORK].ob_height += deltah;
00613
00614     if (win[index].w_flags & WFGROUP)
00615     {
00616         win[index].w_fen[BW_UPARROW].ob_y =
00617                 (win[index].w_fen[BW_DNARROW].ob_y - win[index].w_fen[BW_UPARROW].ob_height + 1);
00618         win[index].w_fen[BW_LFARROW].ob_x =
00619                 (win[index].w_fen[BW_RTARROW].ob_x - win[index].w_fen[BW_LFARROW].ob_width + 1);
00620     }
00621 }
00622 /* #] resize () Replace les objets :                                                            */
00623 /* #[ sizebw () Redimensionner fenˆtre :                                                    */
00624 void sizebw (int obj, int index)
00625 {
00626 int xfin, yfin, wfin, hfin, oldw, oldh, xw, yw, ww, hw, dummy;
00627 MFORM sizdl_ur_mouse =
00628     {   0x0007,0x0007,0x0001,0x0000,0x0002,
00629             /* Mask data */
00630         0x00FF,0x0101,0x0081,0x0041,
00631         0x0081,0x0101,0x0209,0x4415,
00632         0xA822,0x9040,0x8080,0x8100,
00633         0x8200,0x8100,0x8080,0xFF00,
00634             /* Cursor data */
00635         0x0000,0x00FE,0x007E,0x003E,
00636         0x007E,0x00FE,0x01F6,0x03E2,
00637         0x47C0,0x6F80,0x7F00,0x7E00,
00638         0x7C00,0x7E00,0x7F00,0x0000
00639     },
00640     sizul_dr_mouse =
00641     {   0x0007,0x0007,0x0001,0x0000,0x0002,
00642             /* Mask data */
00643         0xFF00,0x8080,0x8100,0x8200,
00644         0x8100,0x8080,0x9040,0xA822,
00645         0x4415,0x0209,0x0101,0x0081,
00646         0x0041,0x0081,0x0101,0x00FF,
00647             /* Cursor data */
00648         0x0000,0x7F00,0x7E00,0x7C00,
00649         0x7E00,0x7F00,0x6F80,0x47C0,
00650         0x03E2,0x01F6,0x00FE,0x007E,
00651         0x003E,0x007E,0x00FE,0x0000
00652     };
00653
00654     win[index].w_fen[obj].ob_state |= SELECTED;                 /* S‚lectionner */
00655     draw_obj (win[index].w_fen, obj);                                       /* Redessiner l'objet */
00656     oldw = win[index].w_fen->ob_width;
00657     oldh = win[index].w_fen->ob_height;
00658     if (obj == BW_SIZERUL)                                  /* Haut Gauche */
00659         graf_mouse (USER_DEF, &sizul_dr_mouse);
00660     else if (obj == BW_SIZERDR)                         /* Bas Droit */
00661         graf_mouse (USER_DEF, &sizul_dr_mouse);
00662     else if (obj == BW_SIZERUR)                         /* Haut Droit */
00663         graf_mouse (USER_DEF, &sizdl_ur_mouse);
00664     else if (obj == BW_SIZERDL)                         /* Bas Gauche */
00665         graf_mouse (USER_DEF, &sizdl_ur_mouse);
00666     rubberbox (&xfin, &yfin, &wfin, &hfin, obj, index);
00667
00668     if (win[index].w_flags & WFCALAG)
00669     {
00670         bwind_calc (WC_WORK, win[index].w_attr, BLANK, win[index].w_bar,
00671                                 xfin, yfin, wfin, hfin, &xw, &yw, &ww, &hw);
00672         ww = (ww + win[index].w_wunit - 1) / win[index].w_wunit * win[index].w_wunit;
00673         hw = (hw + win[index].w_hunit - 1) / win[index].w_hunit * win[index].w_hunit;
00674         bwind_calc (WC_BORDER, win[index].w_attr, BLANK, win[index].w_bar,
00675                                 xw, yw, ww, hw, &xfin, &yfin, &wfin, &hfin);
00676     }
00677
00678     graf_mouse (ARROW, ZERO);
00679     win[index].w_fen[obj].ob_state &= ~SELECTED;                /* D‚s‚lectionner */
00680     win[index].w_curr.g_x = xfin;
00681     win[index].w_curr.g_y = yfin;
00682     win[index].w_curr.g_w = wfin;
00683     win[index].w_curr.g_h = hfin;
00684
00685     if (((win[index].w_type & 0xFF) == WTYP_PICT) ||
00686             (win[index].w_type == WTYP_FORM))
00687     {
00688         bwind_calc (WC_WORK, win[index].w_attr, BLANK, win[index].w_bar,
00689                                 win[index].w_curr.g_x, win[index].w_curr.g_y,
00690                                 win[index].w_curr.g_w, win[index].w_curr.g_h,
00691                                 &xw, &yw, &ww, &hw);
00692         if (ww > win[index].w_wtot)
00693             ww = (int)win[index].w_wtot;
00694         if (hw > win[index].w_htot)
00695             hw = (int)win[index].w_htot;
00696         if ((win[index].w_type & WTYP_TOOL) || (win[index].w_type & WTYP_MENU))
00697             hw++;
00698         bwind_calc (WC_BORDER, win[index].w_attr, BLANK, win[index].w_bar,
00699                                 xw, yw, ww, hw,
00700                                 &win[index].w_curr.g_x, &win[index].w_curr.g_y,
00701                                 &wfin, &hfin);
00702         win[index].w_curr.g_w = wfin;
00703         win[index].w_curr.g_h = hfin;
00704     }
00705
00706     resize (index, wfin - oldw, hfin - oldh);
00707
00708     if (win[index].w_flags & WFDECAL)
00709     {
00710         zone_work (index, &dummy, &dummy, &ww, &hw);
00711         switch (obj)
00712         {               /* Corrections ligne et colonne */
00713         case BW_SIZERUL :       /* Haut Gauche */
00714             win[index].w_lin -= (hfin - oldh);
00715             if (win[index].w_lin < ZERO)
00716                 win[index].w_lin = ZERO;
00717             if (win[index].w_lin > win[index].w_htot - hw)
00718                 win[index].w_lin = win[index].w_htot - hw;
00719             win[index].w_lin = win[index].w_lin / win[index].w_hunit * win[index].w_hunit;
00720             win[index].w_col -= (wfin - oldw);
00721             if (win[index].w_col < ZERO)
00722                 win[index].w_col = ZERO;
00723             if (win[index].w_col > win[index].w_wtot - ww)
00724                 win[index].w_col = win[index].w_wtot - ww;
00725             win[index].w_col = win[index].w_col / win[index].w_wunit * win[index].w_wunit;
00726             break;
00727         case BW_SIZERUR :       /* Haut Droit */
00728             win[index].w_lin -= (hfin - oldh);
00729             if (win[index].w_lin < ZERO)
00730                 win[index].w_lin = ZERO;
00731             if (win[index].w_lin > win[index].w_htot - hw)
00732                 win[index].w_lin = win[index].w_htot - hw;
00733             win[index].w_lin = win[index].w_lin / win[index].w_hunit * win[index].w_hunit;
00734             break;
00735         case BW_SIZERDL :       /* Bas Gauche */
00736             win[index].w_col -= (wfin - oldw);
00737             if (win[index].w_col < ZERO)
00738                 win[index].w_col = ZERO;
00739             if (win[index].w_col > win[index].w_wtot - ww)
00740                 win[index].w_col = win[index].w_wtot - ww;
00741             win[index].w_col = win[index].w_col / win[index].w_wunit * win[index].w_wunit;
00742             break;
00743         }
00744     }
00745
00746     buf[3] = win[index].w_hg;
00747     buf[4] = win[index].w_curr.g_x;
00748     buf[5] = win[index].w_curr.g_y;
00749     buf[6] = win[index].w_curr.g_w;
00750     buf[7] = win[index].w_curr.g_h;
00751     (*win[index].w_size)();
00752     if (NOT ((wfin == oldw) && (hfin == oldh)))     /* Si qq chose chang‚ tout redessiner */
00753     {
00754         buf[3] = win[index].w_hg;
00755         buf[4] = win[index].w_curr.g_x;
00756         buf[5] = win[index].w_curr.g_y;
00757         buf[6] = win[index].w_curr.g_w;
00758         buf[7] = win[index].w_curr.g_h;
00759         redraw ();
00760     }
00761     else                                                                                /* Si rien chang‚ */
00762         draw_obj (win[index].w_fen, obj);                   /* Redessiner l'objet */
00763     empty (MU_KEYBD);
00764 }
00765 /* #] sizebw () Redimensionner fenˆtre :                                                    */
00766 /* #[ rubberbox () Comme graf_rubberbox du GEM :                                    */
00767 void rubberbox (int *xfin, int *yfin,
00768                                 int *wfin, int *hfin,
00769                                 int obj, int index)
00770 {
00771 int tab[4], pxyf[10], pxyw[10], l1[4], l2[4], old_mx, old_my, deltax, deltay,
00772         xw, yw, ww, hw, etat, dummy;
00773
00774     if ((desc_hard_soft.multitache) && (index != id_top))
00775         etat = 0;
00776     else
00777     {
00778         evnt_timer (25, 0);     /* Petit d‚lai */
00779         graf_mkstate (&dummy, &dummy, &mk, &dummy); /* Bouton souris */
00780         if (mk)
00781             etat = 1;
00782         else
00783             etat = 0;
00784     }
00785
00786     fill_tab (tab, 4, bureau.xd, bureau.yd, bureau.xd + bureau.wd - 1, bureau.yd + bureau.hd - 1);
00787     vs_clip (work_display.handle, TRUE, tab);                   /* Clipper */
00788     vswr_mode (work_display.handle, MD_XOR);                /* Dessin en mode Xor */
00789     vsl_width (work_display.handle, 1);
00790     vsl_ends (work_display.handle, SQUARE, SQUARE);
00791     vsl_udsty (work_display.handle, 0xAAAA);
00792     vsl_type (work_display.handle, USERLINE);
00793     vsl_color (work_display.handle, BLACK);
00794     old_mx = mx;
00795     old_my = my;
00796     bwind_calc (WC_WORK, win[index].w_attr, BLANK, win[index].w_bar,
00797                             win[index].w_curr.g_x, win[index].w_curr.g_y,
00798                             win[index].w_curr.g_w, win[index].w_curr.g_h,
00799                             &xw, &yw, &ww, &hw);
00800     fill_tab (pxyf, 10,
00801                         win[index].w_curr.g_x, win[index].w_curr.g_y,
00802                         win[index].w_curr.g_x + win[index].w_curr.g_w - 1,
00803                         win[index].w_curr.g_y,
00804                         win[index].w_curr.g_x + win[index].w_curr.g_w - 1,
00805                         win[index].w_curr.g_y + win[index].w_curr.g_h - 1,
00806                         win[index].w_curr.g_x,
00807                         win[index].w_curr.g_y + win[index].w_curr.g_h - 1,
00808                         win[index].w_curr.g_x, win[index].w_curr.g_y);
00809     fill_tab (pxyw, 10,
00810                         xw, yw, xw + ww - 1, yw,
00811                         xw + ww - 1, yw + hw - 2, xw,
00812                         yw + hw - 2, xw, yw);
00813     fill_tab (l1, 4, xw, yw, xw + ww - 1, yw + hw - 1);
00814     fill_tab (l2, 4, xw + ww - 1, yw, xw, yw + hw - 1);
00815     v_hide_c (work_display.handle);
00816     v_pline (work_display.handle, 5, pxyf); /* Tracer rectangles */
00817     v_pline (work_display.handle, 5, pxyw);
00818     v_pline (work_display.handle, 2, l1);
00819     v_pline (work_display.handle, 2, l2);
00820     v_show_c (work_display.handle, TRUE);
00821
00822     if (NOT mk)
00823         wind_update (BEG_UPDATE);   /* Bloquer les fonctions de la souris */
00824     do
00825     {
00826         graf_mkstate (&mx, &my, &mk, &dummy);   /* Bouton souris */
00827         if (((mx != old_mx) || (my != old_my)) &&   /* Si souris d‚plac‚e */
00828                 (mk == etat))                                                   /* mais pas sortie */
00829         {
00830             deltax = mx - old_mx;               /* Noter amplitude d‚placement */
00831             deltay = my - old_my;
00832             old_mx = mx;                                /* Enregistrer coordonn‚es */
00833             old_my = my;
00834             v_hide_c (work_display.handle);
00835             v_pline (work_display.handle, 5, pxyf);     /* Effacer rectangles */
00836             v_pline (work_display.handle, 5, pxyw);
00837             v_pline (work_display.handle, 2, l1);
00838             v_pline (work_display.handle, 2, l2);
00839
00840             switch (obj)
00841             {
00842             case BW_SIZERUL :               /* Haut Gauche */
00843                 pxyf[0] += deltax;
00844                 pxyf[1] += deltay;
00845                 pxyf[3] += deltay;
00846                 pxyf[6] += deltax;
00847                 pxyf[8] += deltax;
00848                 pxyf[9] += deltay;
00849                 if (pxyf[2] - pxyf[0] < win[index].w_wmini)
00850                 {
00851                     pxyf[0] = pxyf[2] - win[index].w_wmini;
00852                     pxyf[6] = pxyf[2] - win[index].w_wmini;
00853                     pxyf[8] = pxyf[2] - win[index].w_wmini;
00854                 }
00855                 if (pxyf[5] - pxyf[3] < win[index].w_hmini)
00856                 {
00857                     pxyf[1] = pxyf[5] - win[index].w_hmini;
00858                     pxyf[3] = pxyf[5] - win[index].w_hmini;
00859                     pxyf[9] = pxyf[5] - win[index].w_hmini;
00860                 }
00861                 if (pxyf[2] - pxyf[0] > win[index].w_wmaxi)
00862                 {
00863                     pxyf[0] = pxyf[2] - win[index].w_wmaxi;
00864                     pxyf[6] = pxyf[2] - win[index].w_wmaxi;
00865                     pxyf[8] = pxyf[2] - win[index].w_wmaxi;
00866                 }
00867                 if (pxyf[5] - pxyf[3] > win[index].w_hmaxi)
00868                 {
00869                     pxyf[1] = pxyf[5] - win[index].w_hmaxi;
00870                     pxyf[3] = pxyf[5] - win[index].w_hmaxi;
00871                     pxyf[9] = pxyf[5] - win[index].w_hmaxi;
00872                 }
00873                 break;
00874             case BW_SIZERUR :       /* Haut Droit */
00875                 pxyf[1] += deltay;
00876                 pxyf[2] += deltax;
00877                 pxyf[3] += deltay;
00878                 pxyf[4] += deltax;
00879                 pxyf[9] += deltay;
00880                 if (pxyf[2] - pxyf[0] < win[index].w_wmini)
00881                 {
00882                     pxyf[2] = pxyf[0] + win[index].w_wmini;
00883                     pxyf[4] = pxyf[0] + win[index].w_wmini;
00884                 }
00885                 if (pxyf[5] - pxyf[3] < win[index].w_hmini)
00886                 {
00887                     pxyf[1] = pxyf[5] - win[index].w_hmini;
00888                     pxyf[3] = pxyf[5] - win[index].w_hmini;
00889                     pxyf[9] = pxyf[5] - win[index].w_hmini;
00890                 }
00891                 if (pxyf[2] - pxyf[0] > win[index].w_wmaxi)
00892                 {
00893                     pxyf[2] = pxyf[0] + win[index].w_wmaxi;
00894                     pxyf[4] = pxyf[0] + win[index].w_wmaxi;
00895                 }
00896                 if (pxyf[5] - pxyf[3] > win[index].w_hmaxi)
00897                 {
00898                     pxyf[1] = pxyf[5] - win[index].w_hmaxi;
00899                     pxyf[3] = pxyf[5] - win[index].w_hmaxi;
00900                     pxyf[9] = pxyf[5] - win[index].w_hmaxi;
00901                 }
00902                 break;
00903             case BW_SIZERDR :       /* Bas Droit */
00904                 pxyf[2] += deltax;
00905                 pxyf[4] += deltax;
00906                 pxyf[5] += deltay;
00907                 pxyf[7] += deltay;
00908                 if (pxyf[2] - pxyf[0] < win[index].w_wmini)
00909                 {
00910                     pxyf[2] = pxyf[0] + win[index].w_wmini;
00911                     pxyf[4] = pxyf[0] + win[index].w_wmini;
00912                 }
00913                 if (pxyf[5] - pxyf[3] < win[index].w_hmini)
00914                 {
00915                     pxyf[5] = pxyf[3] + win[index].w_hmini;
00916                     pxyf[7] = pxyf[3] + win[index].w_hmini;
00917                 }
00918                 if (pxyf[2] - pxyf[0] > win[index].w_wmaxi)
00919                 {
00920                     pxyf[2] = pxyf[0] + win[index].w_wmaxi;
00921                     pxyf[4] = pxyf[0] + win[index].w_wmaxi;
00922                 }
00923                 if (pxyf[5] - pxyf[3] > win[index].w_hmaxi)
00924                 {
00925                     pxyf[5] = pxyf[3] + win[index].w_hmaxi;
00926                     pxyf[7] = pxyf[3] + win[index].w_hmaxi;
00927                 }
00928                 break;
00929             case BW_SIZERDL :       /* Bas Gauche */
00930                 pxyf[0] += deltax;
00931                 pxyf[5] += deltay;
00932                 pxyf[6] += deltax;
00933                 pxyf[7] += deltay;
00934                 pxyf[8] += deltax;
00935                 if (pxyf[2] - pxyf[0] < win[index].w_wmini)
00936                 {
00937                     pxyf[0] = pxyf[2] - win[index].w_wmini;
00938                     pxyf[6] = pxyf[2] - win[index].w_wmini;
00939                     pxyf[8] = pxyf[2] - win[index].w_wmini;
00940                 }
00941                 if (pxyf[5] - pxyf[3] < win[index].w_hmini)
00942                 {
00943                     pxyf[5] = pxyf[3] + win[index].w_hmini;
00944                     pxyf[7] = pxyf[3] + win[index].w_hmini;
00945                 }
00946                 if (pxyf[2] - pxyf[0] > win[index].w_wmaxi)
00947                 {
00948                     pxyf[0] = pxyf[2] - win[index].w_wmaxi;
00949                     pxyf[6] = pxyf[2] - win[index].w_wmaxi;
00950                     pxyf[8] = pxyf[2] - win[index].w_wmaxi;
00951                 }
00952                 if (pxyf[5] - pxyf[3] > win[index].w_hmaxi)
00953                 {
00954                     pxyf[5] = pxyf[3] + win[index].w_hmaxi;
00955                     pxyf[7] = pxyf[3] + win[index].w_hmaxi;
00956                 }
00957                 break;
00958             }
00959
00960             bwind_calc (WC_WORK, win[index].w_attr, BLANK, win[index].w_bar,
00961                                     pxyf[0], pxyf[1],
00962                                     pxyf[2] - pxyf[0] + 1, pxyf[5] - pxyf[3] + 1,
00963                                     &xw, &yw, &ww, &hw);
00964             fill_tab (pxyw, 10,
00965                                 xw, yw, xw + ww - 1, yw,
00966                                 xw + ww - 1, yw + hw - 2, xw,
00967                                 yw + hw - 2, xw, yw);
00968             fill_tab (l1, 4, xw, yw, xw + ww - 1, yw + hw - 1);
00969             fill_tab (l2, 4, xw + ww - 1, yw, xw, yw + hw - 1);
00970             v_pline (work_display.handle, 5, pxyf);     /* Retracer rectangles */
00971             v_pline (work_display.handle, 5, pxyw);
00972             v_pline (work_display.handle, 2, l1);
00973             v_pline (work_display.handle, 2, l2);
00974             v_show_c (work_display.handle, TRUE);
00975         }
00976     } while (mk == etat);
00977     if (mk)
00978         wind_update (END_UPDATE);   /* Bloquer les fonctions de la souris */
00979
00980     graf_mkstate (&mx, &my, &mk, &dummy);   /* Bouton souris */
00981     if ((mk) && (wind_find (mx, my)) && (etat == 0))
00982         topp = FALSE;   /* Pas de TOPPED si pos‚ sur une fenˆtre */
00983     while (mk)
00984         graf_mkstate (&mx, &my, &mk, &dummy);   /* Bouton souris */
00985
00986     v_hide_c (work_display.handle);
00987     v_pline (work_display.handle, 5, pxyf);     /* Effacer rectangles */
00988     v_pline (work_display.handle, 5, pxyw);
00989     v_pline (work_display.handle, 2, l1);
00990     v_pline (work_display.handle, 2, l2);
00991     *xfin = pxyf[0];
00992     *yfin = pxyf[1];
00993     *wfin = pxyf[2] - pxyf[0] + 1;
00994     *hfin = pxyf[7] - pxyf[1] + 1;
00995     if (*yfin < bureau.yd)
00996     {
00997         deltay = bureau.yd - *yfin;
00998         *yfin = bureau.yd;
00999         *hfin -= deltay;
01000     }
01001     vs_clip (work_display.handle, FALSE, tab);      /* D‚clipper */
01002     v_show_c (work_display.handle, TRUE);
01003 }
01004 /* #] rubberbox () Comme graf_rubberbox du GEM :                                    */
01005 /* #[ movebw () D‚placer la fenˆtre :                                                           */
01006 void movebw (int index)
01007 {
01008 int xfin, yfin;
01009 MFORM mover_mouse =
01010     {   0x0008,0x0007,0x0001,0x0000,0x0002,
01011             /* Mask data */
01012         0xFC3F,0x8241,0x8421,0x8421,
01013         0x8241,0xB18D,0x4812,0x0420,
01014         0x0420,0x4810,0xB18D,0x8241,
01015         0x8421,0x8421,0x8241,0xFC3F,
01016             /* Cursor data */
01017         0x0000,0x7C3E,0x781E,0x781E,
01018         0x7C3E,0x4E72,0x07E0,0x03C0,
01019         0x03C0,0x07E0,0x4E72,0x7C3E,
01020         0x781E,0x781E,0x7C3E,0x0000
01021     };
01022
01023     win[index].w_fen[BW_MOVER].ob_state |= SELECTED;                    /* S‚lectionner */
01024     draw_obj (win[index].w_fen, BW_MOVER);                                      /* Redessiner l'objet */
01025     graf_mouse (USER_DEF, &mover_mouse);
01026     dragbox (win[index].w_curr.g_w, win[index].w_curr.g_h,
01027                      win[index].w_curr.g_x, win[index].w_curr.g_y,
01028                      bureau.xd - bureau.wd, bureau.yd, bureau.wd * 3, bureau.hd * 2,
01029                      &xfin, &yfin, index);
01030     graf_mouse (ARROW, ZERO);
01031     win[index].w_fen[BW_MOVER].ob_state &= ~SELECTED;                   /* D‚s‚lectionner */
01032     draw_obj (win[index].w_fen, BW_MOVER);                                      /* Redessiner l'objet */
01033     win[index].w_curr.g_x = xfin;
01034     win[index].w_curr.g_y = yfin;
01035     buf[3] = win[index].w_hg;
01036     buf[4] = win[index].w_curr.g_x;
01037     buf[5] = win[index].w_curr.g_y;
01038     buf[6] = win[index].w_curr.g_w;
01039     buf[7] = win[index].w_curr.g_h;
01040     (*win[index].w_move)();
01041     empty (MU_KEYBD);
01042 }
01043 /* #] movebw () D‚placer la fenˆtre :                                                           */
01044 /* #[ dragbox () Comme graf_dragbox du GEM :                                            */
01045 void dragbox (int wr, int hr, int xr, int yr,
01046                             int xz, int yz, int wz, int hz,
01047                             int *xfin, int *yfin, int index)
01048 {
01049 int tab[4], pxyf[10], pxyw[10], l1[4], l2[4], old_mx, old_my, deltax, deltay,
01050         xw, yw, ww, hw, etat, dummy;
01051
01052     if ((desc_hard_soft.multitache) && (index != id_top))
01053     {
01054         etat = 0;
01055     }
01056     else
01057     {
01058         evnt_timer (25, 0);     /* Petit d‚lai */
01059         graf_mkstate (&dummy, &dummy, &mk, &dummy); /* Bouton souris */
01060         if (mk)
01061             etat = 1;
01062         else
01063             etat = 0;
01064     }
01065
01066     fill_tab (tab, 4, bureau.xd, bureau.yd, bureau.xd + bureau.wd - 1, bureau.yd + bureau.hd - 1);
01067     vs_clip (work_display.handle, TRUE, tab);               /* Clipper */
01068     vswr_mode (work_display.handle, MD_XOR);                /* Dessin en mode Xor */
01069     vsl_width (work_display.handle, 1);
01070     vsl_ends (work_display.handle, SQUARE, SQUARE);
01071     vsl_udsty (work_display.handle, 0xAAAA);
01072     vsl_type (work_display.handle, USERLINE);
01073     vsl_color (work_display.handle, BLACK);
01074     old_mx = mx;
01075     old_my = my;
01076     if ((index > BLANK) && (win[index].w_icon == BLANK))
01077     {
01078         bwind_calc (WC_WORK, win[index].w_attr, BLANK, win[index].w_bar,
01079                                 win[index].w_curr.g_x, win[index].w_curr.g_y,
01080                                 win[index].w_curr.g_w, win[index].w_curr.g_h,
01081                                 &xw, &yw, &ww, &hw);
01082         fill_tab (pxyw, 10,
01083                             xw, yw, xw + ww - 1, yw,
01084                             xw + ww - 1, yw + hw - 2, xw,
01085                             yw + hw - 2, xw, yw);
01086         fill_tab (l1, 4, xw, yw, xw + ww - 1, yw + hw - 1);
01087         fill_tab (l2, 4, xw + ww - 1, yw, xw, yw + hw - 1);
01088     }
01089     fill_tab (pxyf, 10,
01090                         xr, yr,
01091                         xr + wr - 1, yr,
01092                         xr + wr - 1, yr + hr - 1,
01093                         xr, yr + hr - 1,
01094                         xr, yr);
01095     v_hide_c (work_display.handle);
01096     v_pline (work_display.handle, 5, pxyf); /* Tracer rectangle */
01097     if ((index > BLANK) && (win[index].w_icon == BLANK))
01098     {
01099         v_pline (work_display.handle, 5, pxyw);
01100         v_pline (work_display.handle, 2, l1);
01101         v_pline (work_display.handle, 2, l2);
01102     }
01103     v_show_c (work_display.handle, TRUE);
01104     if (NOT mk)
01105         wind_update (BEG_UPDATE);   /* Bloquer les fonctions de la souris */
01106     do
01107     {
01108         graf_mkstate (&mx, &my, &mk, &dummy);   /* Bouton souris */
01109         if (((mx != old_mx) || (my != old_my)) &&   /* Si souris d‚plac‚e */
01110                 (mk == etat))                                                   /* mais pas sortie */
01111         {
01112             deltax = mx - old_mx;               /* Noter amplitude d‚placement */
01113             deltay = my - old_my;
01114             old_mx = mx;                                /* Enregistrer coordonn‚es */
01115             old_my = my;
01116             v_hide_c (work_display.handle);
01117             v_pline (work_display.handle, 5, pxyf);     /* Effacer rectangle */
01118             if ((index > BLANK) && (win[index].w_icon == BLANK))
01119             {
01120                 v_pline (work_display.handle, 5, pxyw);
01121                 v_pline (work_display.handle, 2, l1);
01122                 v_pline (work_display.handle, 2, l2);
01123             }
01124             pxyf[0] += deltax;
01125             pxyf[1] += deltay;
01126             pxyf[2] += deltax;
01127             pxyf[3] += deltay;
01128             pxyf[4] += deltax;
01129             pxyf[5] += deltay;
01130             pxyf[6] += deltax;
01131             pxyf[7] += deltay;
01132             pxyf[8] += deltax;
01133             pxyf[9] += deltay;
01134
01135             if (pxyf[0] < xz)                       /* Si sortie … gauche */
01136             {
01137                 deltax = xz - pxyf[0];
01138                 pxyf[0] += deltax;
01139                 pxyf[2] += deltax;
01140                 pxyf[4] += deltax;
01141                 pxyf[6] += deltax;
01142                 pxyf[8] += deltax;
01143             }
01144             if (pxyf[1] < yz)                       /* Si sortie en haut */
01145             {
01146                 deltay = yz - pxyf[1];
01147                 pxyf[1] += deltay;
01148                 pxyf[3] += deltay;
01149                 pxyf[5] += deltay;
01150                 pxyf[7] += deltay;
01151                 pxyf[9] += deltay;
01152             }
01153             if (pxyf[2] > xz + wz - 1)      /* Si sortie … droite */
01154             {
01155                 deltax = pxyf[2] - (xz + wz - 1);
01156                 pxyf[0] -= deltax;
01157                 pxyf[2] -= deltax;
01158                 pxyf[4] -= deltax;
01159                 pxyf[6] -= deltax;
01160                 pxyf[8] -= deltax;
01161             }
01162             if (pxyf[5] > yz + hz - 1)      /* Si sortie en bas */
01163             {
01164                 deltay = pxyf[5] - (yz + hz - 1);
01165                 pxyf[1] -= deltay;
01166                 pxyf[3] -= deltay;
01167                 pxyf[5] -= deltay;
01168                 pxyf[7] -= deltay;
01169                 pxyf[9] -= deltay;
01170             }
01171             if ((index > BLANK) && (win[index].w_icon == BLANK))
01172             {
01173                 bwind_calc (WC_WORK, win[index].w_attr, BLANK, win[index].w_bar,
01174                                         pxyf[0], pxyf[1],
01175                                         pxyf[2] - pxyf[0] + 1, pxyf[5] - pxyf[3] + 1,
01176                                         &xw, &yw, &ww, &hw);
01177                 fill_tab (pxyw, 10,
01178                                     xw, yw, xw + ww - 1, yw,
01179                                     xw + ww - 1, yw + hw - 2, xw,
01180                                     yw + hw - 2, xw, yw);
01181                 fill_tab (l1, 4, xw, yw, xw + ww - 1, yw + hw - 1);
01182                 fill_tab (l2, 4, xw + ww - 1, yw, xw, yw + hw - 1);
01183             }
01184             v_pline (work_display.handle, 5, pxyf);     /* Retracer rectangle */
01185             if ((index > BLANK) && (win[index].w_icon == BLANK))
01186             {
01187                 v_pline (work_display.handle, 5, pxyw);
01188                 v_pline (work_display.handle, 2, l1);
01189                 v_pline (work_display.handle, 2, l2);
01190             }
01191             v_show_c (work_display.handle, TRUE);
01192         }
01193     } while (mk == etat);
01194     if (mk)
01195         wind_update (END_UPDATE);   /* Bloquer les fonctions de la souris */
01196
01197     graf_mkstate (&mx, &my, &mk, &dummy);   /* Bouton souris */
01198     if ((mk) && (wind_find (mx, my)) && (etat == 0))
01199         topp = FALSE;   /* Pas de TOPPED si pos‚ sur une fenˆtre */
01200     while (mk)
01201         graf_mkstate (&mx, &my, &mk, &dummy);   /* Bouton souris */
01202
01203     v_hide_c (work_display.handle);
01204     v_pline (work_display.handle, 5, pxyf);     /* Effacer rectangle */
01205     if ((index > BLANK) && (win[index].w_icon == BLANK))
01206     {
01207         v_pline (work_display.handle, 5, pxyw);
01208         v_pline (work_display.handle, 2, l1);
01209         v_pline (work_display.handle, 2, l2);
01210     }
01211     *xfin = pxyf[0];
01212     *yfin = pxyf[1];
01213     vs_clip (work_display.handle, FALSE, tab);      /* D‚clipper */
01214     v_show_c (work_display.handle, TRUE);
01215 }
01216 /* #] dragbox () Comme graf_dragbox du GEM :                                            */
01217 /* #[ set_work () Fixe trame et couleur zone de travail :                   */
01235 void set_work (int index, int pattern, int colorp)
01236 {
01237     /* Si un paramŠtre vaut -1, il reste inchang‚.
01238          ppppcccc (octet haut de l'ob_state)
01239          p : Motif pattern
01240          c : Couleur pattern */
01241 int temp;
01242
01243     if (pattern != BLANK)
01244     {
01245         temp = win[index].w_fen[BW_WORK].ob_state & 0x0FFF;
01246         win[index].w_fen[BW_WORK].ob_state = (temp | (pattern << 12));
01247     }
01248     if (colorp != BLANK)
01249     {
01250         temp = win[index].w_fen[BW_WORK].ob_state & 0xF0FF;
01251         win[index].w_fen[BW_WORK].ob_state = (temp | (colorp << 8));
01252     }
01253     if (win[index].w_hg > ZERO)
01254         print_page (index);
01255 }
01256 /* #] set_work () Fixe trame et couleur zone de travail :                   */
01257 /* #[ set_windows () Fixe ‚l‚ments graphiques des fenˆtres :            */
01311 void    set_windows (int mtxt_mover, int ctxt_mover, int spat_mover, int cpat_mover,
01312                                      int ctxt_info,
01313                                      int spat_velev,int cpat_velev, int spat_helev, int cpat_helev,
01314                                      int spat_hslid, int cpat_hslid, int spat_vslid, int cpat_vslid,
01315                                      int cpat_gadgt, int cicn_gadgt)
01316 {
01317     if (mtxt_mover != BLANK)
01318         bwin.mtxt_mover = mtxt_mover;
01319     if (ctxt_mover != BLANK)
01320         bwin.ctxt_mover = ctxt_mover;
01321     if (spat_mover != BLANK)
01322         bwin.spat_mover = spat_mover;
01323     if (cpat_mover != BLANK)
01324         bwin.cpat_mover = cpat_mover;
01325     if (ctxt_info != BLANK)
01326         bwin.ctxt_info = ctxt_info;
01327     if (spat_velev != BLANK)
01328         bwin.spat_velev = spat_velev;
01329     if (cpat_velev != BLANK)
01330         bwin.cpat_velev = cpat_velev;
01331     if (spat_helev != BLANK)
01332         bwin.spat_helev = spat_helev;
01333     if (cpat_helev != BLANK)
01334         bwin.cpat_helev = cpat_helev;
01335     if (spat_hslid != BLANK)
01336         bwin.spat_hslid = spat_hslid;
01337     if (cpat_hslid != BLANK)
01338         bwin.cpat_hslid = cpat_hslid;
01339     if (spat_vslid != BLANK)
01340         bwin.spat_vslid = spat_vslid;
01341     if (cpat_vslid != BLANK)
01342         bwin.cpat_vslid = cpat_vslid;
01343     if (cpat_gadgt != BLANK)
01344         bwin.cpat_gadgt = cpat_gadgt;
01345     if (cicn_gadgt != BLANK)
01346         bwin.cicn_gadgt = cicn_gadgt;
01347
01348     form_dial (FMD_FINISH, ZERO, ZERO, ZERO, ZERO,  /* Tout r‚afficher */
01349                          bureau.xd, bureau.yd, bureau.wd, bureau.hd);
01350 }
01351 /* #] set_windows () Fixe ‚l‚ments graphiques des fenˆtres :            */
01352 /* #[ bwind_calc () Equivalent de wind_calc du GEM :                            */
01385 void bwind_calc (int request, int attr,
01386                                  int tree, OBJECT *adrb,
01387                                  int xd, int yd, int wd, int hd,
01388                                  int *x, int *y, int *w, int *h)
01389 {
01390 OBJECT *adr = ZERO;
01391
01392     if (tree > BLANK)                   /* S'il y a un menu ou une ToolBar */
01393         adr = ir_trindex[tree]; /* Adresse formulaire */
01394     else if (adrb > ZERO)
01395         adr = adrb;
01396
01397     if (request == WC_WORK)     /* Coord. fenˆtre -> Coord. zone travail */
01398     {
01399         *x = xd + 1;
01400         *y = yd + (bi_trindex[BIG_WIND][BW_MOVER].ob_height - 1);
01401         if (attr & INFO)
01402             *y += (bi_trindex[BIG_WIND][BW_INFO].ob_height - 1);
01403         *w = wd - 2;
01404         if ((attr & UPARROW) || (attr & DNARROW) || (attr & VSLIDE))
01405             *w -= (bi_trindex[BIG_WIND][BW_VBAR].ob_width - 1);
01406         *h = hd - (bi_trindex[BIG_WIND][BW_MOVER].ob_height - 1);
01407         if (attr & INFO)
01408             *h -= (bi_trindex[BIG_WIND][BW_INFO].ob_height - 1);
01409         if ((attr & LFARROW) || (attr & RTARROW) || (attr & HSLIDE) ||
01410                 (attr & ALLSIZER) || (attr & SIZER))
01411             *h -= (bi_trindex[BIG_WIND][BW_HBAR].ob_height - 1);
01412
01413         if (adr)
01414         {
01415             if ((adr[3].ob_type == G_TITLE) ||
01416                     (adr[6].ob_type == G_TITLE))        /* Si c'est un menu */
01417             {
01418                 *y += (adr[2].ob_height);
01419                 *h -= (adr[2].ob_height);
01420             }
01421             else                                                                /* Si c'est une ToolBar */
01422             {
01423                 *y += (adr->ob_height);
01424                 *h -= (adr->ob_height);
01425             }
01426         }
01427         (*y)++;
01428         (*h) -= 2;
01429     }
01430     else if (request == WC_BORDER)  /* Coord. zone travail -> Coord. fenˆtre */
01431     {
01432         *x = xd - 1;
01433         *y = yd - (bi_trindex[BIG_WIND][BW_MOVER].ob_height - 1);
01434         if (attr & INFO)
01435             *y -= (bi_trindex[BIG_WIND][BW_INFO].ob_height - 1);
01436         *w = wd + 2;
01437         if ((attr & UPARROW) || (attr & DNARROW) || (attr & VSLIDE))
01438             *w += (bi_trindex[BIG_WIND][BW_VBAR].ob_width - 1);
01439         *h = hd + (bi_trindex[BIG_WIND][BW_MOVER].ob_height - 1);
01440         if (attr & INFO)
01441             *h += (bi_trindex[BIG_WIND][BW_INFO].ob_height - 1);
01442         if ((attr & LFARROW) || (attr & RTARROW) || (attr & HSLIDE) ||
01443                 (attr & ALLSIZER) || (attr & SIZER))
01444             *h += (bi_trindex[BIG_WIND][BW_HBAR].ob_height - 1);
01445
01446         if (adr)
01447         {
01448             if ((adr[3].ob_type == G_TITLE) ||
01449                     (adr[6].ob_type == G_TITLE))        /* Si c'est un menu */
01450             {
01451                 *y -= (adr[2].ob_height);
01452                 *h += (adr[2].ob_height);
01453             }
01454             else                                                                /* Si c'est une ToolBar */
01455             {
01456                 *y -= (adr->ob_height);
01457                 *h += (adr->ob_height);
01458             }
01459         }
01460         (*y)--;
01461         (*h) += 2;
01462     }
01463 }
01464 /* #] bwind_calc () Equivalent de wind_calc du GEM :                            */
01465 /* #[ draw_title () Redessine la barre de titre seulement :             */
01476 void draw_title (int index)
01477 {
01478 int x, y, ev, quit = FALSE, dummy;
01479
01480     objc_offset (win[index].w_fen, BW_MOVER, &x, &y);
01481     form_dial (FMD_FINISH, ZERO, ZERO, ZERO, ZERO,
01482                          x, y,
01483                          win[index].w_fen[BW_MOVER].ob_width,
01484                          win[index].w_fen[BW_MOVER].ob_height);
01485     do
01486     {
01487         ev = evnt_multi ((MU_MESAG | MU_TIMER),
01488                                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01489                                          buf, 10, 0, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy);
01490         if (ev & MU_MESAG)
01491         {
01492             if (buf[0] == WM_REDRAW)
01493             {
01494                 if (buf[4] + buf[6] > bureau.xd + bureau.wd)
01495                     buf[6] = bureau.xd + bureau.wd - buf[4];
01496                 if (buf[5] + buf[7] > bureau.yd + bureau.hd)
01497                     buf[7] = bureau.yd + bureau.hd - buf[5];
01498                 redraw ();
01499             }
01500         }
01501         else if (ev == MU_TIMER)
01502             quit = TRUE;
01503     } while (! quit);
01504 }
01505 /* #] draw_title () Redessine la barre de titre seulement :             */
01506
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2WINB.H Source File

BIG2WINB.H

Go to the documentation of this file.
00001 /*  BIG2WINB.H */
00002
00003 extern OBJECT *bi_trindex[];
00004
00005 /* #[ Prototypage des fonctions : */
00006 void put_fen (int index);
00007 void no_top (int obj, int index);
00008 int asce (int obj, int index);
00009 void arrows (int obj, int index);
00010 void slid (int obj, int index);
00011 void sizebw (int obj, int index);
00012 void movebw (int index);
00013 void resize (int index, int deltaw, int deltah);
00014 void draw_obj (OBJECT *adr, int obj);
00015 void draw_wind (int index, GRECT *r);
00016 /* #] Prototypage des fonctions : */
00017
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2WIND.C Source File

BIG2WIND.C

Go to the documentation of this file.
00001 /*                      >>> Big Is Gem <<<
00002                 MODULE FONCTIONS DE GESTION DES FENETRES
00003 */
00004 /****** En-tˆte BIG ***********************************************/
00005 #include <BIG2.H>
00006 #include "BIG2WIND.H"
00007 #include "BIG2WINB.H"
00008 #include "BIG2EVTW.H"
00009 #include "BIG2FOR1.H"
00010 #include "BIG2FOR2.H"
00011 #include "BIG2EDIT.H"
00012 extern int id_top;
00013 /****** Fonctions g‚n‚rales pour les fenˆtres *********************/
00014 /* #[ formw_draw () Dessine un formulaire en fenˆtre :                      */
00060 int formw_draw (OBJECT *adr, int index, int title, int infos,
00061                                  int wed, int attr, FNCP ricn)
00062 {
00063 int x, y, w, h, xf, yf, wf, hf, wh, i = ZERO,
00064         ok = FALSE, top, dummy, xw, yw;
00065
00066     if (win[index].w_icon > BLANK)  /* Si la fenˆtre est ic“nifi‚e, */
00067         return FALSE;                                   /* on ne fait rien. */
00068
00069     do      /* Chercher ‚ventuel objet B_MOVE et le cacher */
00070     {
00071         if ((adr[i].ob_type >> 8) == B_MOVE)
00072             adr[i].ob_flags |= HIDETREE;
00073     } while (NOT (adr[i++].ob_flags & LASTOB));
00074     adr->ob_state &= ~OUTLINED;                 /* Forcer NOT OUTLINED */
00075     adr->ob_spec.obspec.framesize = -1; /* 1 pixel … l'ext‚rieur */
00076
00077     if (win[index].w_hg == BLANK)       /* Si fenˆtre jamais cr‚‚e */
00078     {
00079         x = adr->ob_x;              /* Positionner le formulaire. */
00080         y = adr->ob_y;              /* Il a ‚t‚ centr‚ par d‚faut */
00081         w = adr->ob_width;      /* par la fonction initial() */
00082         h = adr->ob_height;
00083
00084             /* D‚duire les coordonn‚es de la fenˆtre */
00085         bwind_calc (WC_BORDER, attr, BLANK, ZERO,
00086                                 x, y, w, h, &xf, &yf, &wf, &hf);
00087
00088         if (xf < bureau.xd) /* Ne pas sortir du bureau */
00089             xf = bureau.xd;
00090         if (yf < bureau.yd)
00091             yf = bureau.yd;
00092         if (wf > bureau.wd)
00093             wf = bureau.wd;
00094         if (hf > bureau.hd)
00095             hf = bureau.hd;
00096
00097         wh = wind_create (ZERO, xf, yf, wf, hf);    /* Cr‚er la fenˆtre */
00098         if (wh > BLANK)
00099         {       /* Initialiser toutes les valeurs de la fenˆtre */
00100             win[index].w_type = WTYP_FORM;
00101             win[index].w_attr = attr;
00102
00103             win[index].w_curr.g_x = xf;
00104             win[index].w_curr.g_y = yf;
00105             win[index].w_curr.g_w = wf;
00106             win[index].w_curr.g_h = hf;
00107             win[index].w_wmini = min (160, w);              /* Calcul dimensions minimum */
00108             win[index].w_hmini = min (160, h);
00109             bwind_calc (WC_BORDER, attr, BLANK, ZERO,   /* Calcul dimensions maximum */
00110                                     x, y, w, h, &dummy, &dummy,
00111                                     &win[index].w_wmaxi, &win[index].w_hmaxi);
00112
00113             win[index].w_wunit = 16;
00114             win[index].w_hunit = 16;
00115
00116             win[index].w_cont.w_form.w_tree = adr;
00117             win[index].w_cont.w_form.w_edit = wed;
00118             win[index].w_cont.w_form.w_pos = ZERO;
00119
00120             win[index].w_bar = (OBJECT *)ZERO;
00121
00122             win[index].w_flags &= ~WFFULL;
00123             if (wed > BLANK)
00124                 win[index].w_flags &= ~WFARROW;
00125             else if (wed == BLANK)
00126                 win[index].w_flags |= WFARROW;
00127             win[index].w_mouse = ZERO;
00128
00129             win[index].w_redicn = ricn;             /* Routine redraw si ic“ne */
00130             win[index].w_redraw = ZERO;
00131             win[index].w_close = closed;
00132             win[index].w_move = moved;
00133             win[index].w_size = size_wform;
00134             win[index].w_full = full_wform;
00135
00136             if (title > BLANK)
00137                 win[index].w_title = get_string (title);
00138             if (infos > BLANK)
00139                 win[index].w_infos = get_string (infos);
00140
00141             win[index].w_wtot = adr->ob_width;
00142             win[index].w_htot = adr->ob_height;
00143             win[index].w_lin = ZERO;
00144             win[index].w_col = ZERO;
00145
00146                 /* D‚duire les coordonn‚es de la zone de travail */
00147             bwind_calc (WC_WORK, attr, BLANK, ZERO,
00148                                     xf, yf, wf, hf, &xw, &yw, &dummy, &dummy);
00149             adr->ob_x = xw;
00150             adr->ob_y = yw;
00151             ok = TRUE;
00152         }
00153     }
00154     else if (win[index].w_hg == ZERO)   /* Si fenˆtre d‚j… cr‚‚e, puis ferm‚e */
00155     {
00156             /* Cr‚er la fenˆtre */
00157         wh = wind_create (ZERO,
00158                                             win[index].w_curr.g_x, win[index].w_curr.g_y,
00159                                             win[index].w_curr.g_w, win[index].w_curr.g_h);
00160         if (wh > BLANK)
00161         {
00162             xf = win[index].w_curr.g_x;
00163             yf = win[index].w_curr.g_y;
00164             wf = win[index].w_curr.g_w;
00165             hf = win[index].w_curr.g_h;
00166
00167             if ((adr[wed].ob_type>> 8) == B_EDIT)
00168                 win[index].w_cont.w_form.w_pos =
00169                                 min ((int)strlen (adr[wed].ob_spec.tedinfo->te_ptext),
00170                                          (int)strlen (adr[wed].ob_spec.tedinfo->te_pvalid));
00171             else
00172                 win[index].w_cont.w_form.w_pos =
00173                         (int)strlen (get_text (win[index].w_cont.w_form.w_tree,
00174                                                  win[index].w_cont.w_form.w_edit));
00175             ok = TRUE;
00176         }
00177     }
00178
00179     if (ok)
00180     {
00181         put_fen (index);
00182         win[index].w_fen[BW_BARRE].ob_flags |= HIDETREE;
00183         bak_rsc (win[index].w_cont.w_form.w_tree,
00184                          &win[index].w_cont.w_form.w_bak);  /* Enregistrer ‚tat form. */
00185         win[index].w_hg = wh;
00186         wind_open (wh, xf, yf, wf, hf);                         /* Ouvrir la fenˆtre */
00187
00188         set_palette (BLANK);
00189         wind_mouse ();
00190     }
00191     else if ((NOT ok) && (win[index].w_hg > ZERO))  /* Si elle est d‚j… ouverte */
00192     {
00193         wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
00194         if (top != win[index].w_hg)
00195         {
00196             dummy = buf[3];
00197             buf[3] = win[index].w_hg;
00198             (*win[index].w_top)();
00199             buf[3] = dummy;
00200         }
00201         ok = TRUE;
00202     }
00203
00204     if (ok)
00205     {
00206         id_top = index;                 /* Elle passe au premier plan */
00207         height_sliders (index, FALSE);
00208         return TRUE;
00209     }
00210     if (NOT ok)
00211     {
00212         big_alert (1, BLANK, bi_frstr[NOT_WINDOW], TRUE);
00213         return FALSE;
00214     }
00215     return FALSE;
00216 }
00217 /* #] formw_draw () Dessine un formulaire en fenˆtre :                      */
00218 /* #[ dcl_windows () D‚clare et initialise les fenˆtres :                   */
00219 void dcl_windows (int nbre)
00220 {
00221 int index;
00222
00223         /* Reserver tableau de structures BigWind */
00224     win = (BigWind *)malloc (nbre * sizeof(BigWind));
00225
00226     if (win)
00227     {
00228         for (index = ZERO ; index < nbre ; index++)
00229         {           /* Tous les ‚l‚ments en position "neutre" */
00230             win[index].w_hg = BLANK;
00231             win[index].w_type = WTYP_NORM;
00232             win[index].w_attr = WATR_CURRB;
00233
00234             win[index].w_curr.g_x = ZERO;
00235             win[index].w_curr.g_y = ZERO;
00236             win[index].w_curr.g_w = 100;
00237             win[index].w_curr.g_h = 100;
00238             win[index].w_old.w_coord.g_x = ZERO;
00239             win[index].w_old.w_coord.g_y = ZERO;
00240             win[index].w_old.w_coord.g_w = ZERO;
00241             win[index].w_old.w_coord.g_h = ZERO;
00242             win[index].w_wmini = 100;
00243             win[index].w_hmini = 100;
00244
00245             win[index].w_wunit = 1;
00246             win[index].w_hunit = 1;
00247
00248             win[index].w_hprot = ZERO;
00249             win[index].w_vprot = ZERO;
00250
00251             win[index].w_cont.w_adr = (char *)ZERO;
00252             win[index].w_pal = (Palette *)ZERO;
00253
00254             win[index].w_bar = (OBJECT *)ZERO;
00255
00256             win[index].w_flags = WFARROW;
00257             if (index == nbre - 1)
00258                 win[index].w_flags |= WFLAST;
00259             win[index].w_mouse = ZERO;
00260             win[index].w_icon = BLANK;
00261             win[index].w_redicn = ZERO;
00262
00263             win[index].w_redraw = ZERO;
00264             win[index].w_cycle = next_wind;
00265             win[index].w_top = topped;
00266             win[index].w_close = closed;
00267             win[index].w_move = moved;
00268             win[index].w_size = sized;
00269             win[index].w_full = fulled;
00270             win[index].w_hslid = hslid;
00271             win[index].w_vslid = vslid;
00272             win[index].w_uppage = uppage;
00273             win[index].w_dnpage = dnpage;
00274             win[index].w_lfpage = lfpage;
00275             win[index].w_rtpage = rtpage;
00276             win[index].w_upline = upline;
00277             win[index].w_dnline = dnline;
00278             win[index].w_lfline = lfline;
00279             win[index].w_rtline = rtline;
00280
00281             win[index].w_title = (char *)ZERO;
00282             win[index].w_infos = (char *)ZERO;
00283
00284             win[index].w_wtot = ZERO;
00285             win[index].w_htot = ZERO;
00286             win[index].w_lin = ZERO;
00287             win[index].w_col = ZERO;
00288         }
00289     }
00290 }
00291 /* #] dcl_windows () D‚clare et initialise les fenˆtres :                   */
00292 /* #[ create_wmenu () Cr‚e un menu de fenˆtre :                                     */
00293 void create_wmenu (int tree, int index)
00294 {
00295 int nb_ob = ZERO, i, xb, yb, nb_titres = WM_BOXTITLES + 1, bmenu, xstate, oldy;
00296 char *texte;
00297 OBJECT *adr;
00298
00299     adr = ir_trindex[tree];
00300
00301     while (NOT (adr[nb_ob++].ob_flags & LASTOB)) ;  /* Compter les objets du menu */
00302     win[index].w_bar = (OBJECT *)malloc ((nb_ob + 3) * sizeof (OBJECT));
00303     win[index].w_type |= WTYP_MENU;
00304
00305     memcpy (win[index].w_bar, adr, (2 * sizeof (OBJECT)));
00306     memcpy (&win[index].w_bar[2], bi_trindex[BIGARRM], (3 * sizeof (OBJECT)));
00307     memcpy (&win[index].w_bar[5], &adr[2], ((nb_ob - 2) * sizeof (OBJECT)));
00308
00309     win[index].w_bar[WM_BKGR].ob_tail += 3;         /* G_IBOX de fond */
00310     win[index].w_bar[WM_BOXMENU].ob_next += 3;      /* G_BOX barre de menu */
00311     win[index].w_bar[WM_BOXMENU].ob_head = 2;
00312     win[index].w_bar[WM_BOXMENU].ob_tail = 5;
00313     win[index].w_bar[WM_BOXMENU].ob_spec.index = 0x1101L;
00314     win[index].w_bar[WM_BOXARROWS].ob_next = 5; /* G_BOX boŒte des flˆches */
00315     win[index].w_bar[WM_BOXARROWS].ob_head = 3;
00316     win[index].w_bar[WM_BOXARROWS].ob_tail = 4;
00317     win[index].w_bar[WM_BOXARROWS].ob_height =
00318                 win[index].w_bar[WM_BOXMENU].ob_height;
00319     win[index].w_bar[WM_LFARROW].ob_next = 4;       /* G_BOXCHAR flˆche gauche */
00320     win[index].w_bar[WM_LFARROW].ob_height =
00321                 win[index].w_bar[WM_BOXMENU].ob_height;
00322     win[index].w_bar[WM_RTARROW].ob_next = 2;       /* G_BOXCHAR flˆche droite */
00323     win[index].w_bar[WM_RTARROW].ob_height =
00324                 win[index].w_bar[WM_BOXMENU].ob_height;
00325     win[index].w_bar[WM_RTARROW].ob_flags &= ~LASTOB;
00326     win[index].w_bar[WM_BOXTITLES].ob_next = 1; /* G_IBOX barre de titre */
00327     win[index].w_bar[WM_BOXTITLES].ob_head += 3;
00328     win[index].w_bar[WM_BOXTITLES].ob_tail += 3;
00329
00330     win[index].w_fen[BW_BARRE].ob_height = win[index].w_bar[WM_BOXMENU].ob_height;
00331     oldy = win[index].w_fen[BW_WORK].ob_y;
00332     win[index].w_fen[BW_WORK].ob_y = (win[index].w_fen[BW_BARRE].ob_y + win[index].w_fen[BW_BARRE].ob_height);
00333     win[index].w_fen[BW_WORK].ob_height -= (win[index].w_fen[BW_WORK].ob_y - oldy);
00334     win[index].w_fen[BW_VBAR].ob_y = win[index].w_fen[BW_WORK].ob_y;
00335     win[index].w_fen[BW_VBAR].ob_height = win[index].w_fen[BW_WORK].ob_height;
00336     win[index].w_fen[BW_VELEV].ob_height -= (win[index].w_fen[BW_WORK].ob_y - oldy - 1);
00337     win[index].w_fen[BW_DNARROW].ob_y -= (win[index].w_fen[BW_WORK].ob_y - oldy - 1);
00338     if (win[index].w_flags & WFGROUP)
00339         win[index].w_fen[BW_UPARROW].ob_y =
00340                 (win[index].w_fen[BW_DNARROW].ob_y - win[index].w_fen[BW_UPARROW].ob_height + 1);
00341     objc_offset (win[index].w_fen, BW_BARRE, &xb, &yb);
00342     win[index].w_bar[WM_BKGR].ob_x = xb;
00343     win[index].w_bar[WM_BKGR].ob_y = yb;
00344     win[index].w_bar[WM_BOXTITLES].ob_x =
00345                 win[index].w_bar[WM_BOXARROWS].ob_width -
00346                 win[index].w_bar[WM_BOXTITLES + 1].ob_x;
00347     i = WM_BOXTITLES + 1;           /* Chercher boŒte des menus */
00348     while (win[index].w_bar[i++].ob_type != G_IBOX) ;
00349     win[index].w_bar[i - 1].ob_x = win[index].w_bar[WM_BOXTITLES].ob_x -
00350                 win[index].w_bar[i].ob_x;
00351
00352     i = 6;
00353     do
00354     {
00355         if (win[index].w_bar[i].ob_next > ZERO)
00356             win[index].w_bar[i].ob_next += 3;
00357         if (win[index].w_bar[i].ob_head != -1)
00358             win[index].w_bar[i].ob_head += 3;
00359         if (win[index].w_bar[i].ob_tail != -1)
00360             win[index].w_bar[i].ob_tail += 3;
00361     } while (NOT (win[index].w_bar[i++].ob_flags & LASTOB));
00362
00363         /* Mettre dans l'ob_flags ‚tendu des G_TITLEs le menu correspondant */
00364         /* Compter les G_TITLEs */
00365     while (win[index].w_bar[nb_titres++].ob_type == G_TITLE) ;
00366     nb_titres -= (WM_BOXTITLES + 2);
00367     if (nb_titres == 1) /* S'il n'y en a qu'un, d‚sactiver les 2 flˆches */
00368         win[index].w_bar[WM_RTARROW].ob_state |= DISABLED;
00369
00370     bmenu = win[index].w_bar[WM_BKGR].ob_tail;      /* Fond des menus */
00371     bmenu = win[index].w_bar[bmenu].ob_head;            /* 1ø boŒte de menus */
00372     xstate = bmenu << 8;
00373     win[index].w_bar[WM_BOXTITLES + 1].ob_state |= xstate;
00374
00375     i = 2;
00376     while (win[index].w_bar[bmenu].ob_next > bmenu)
00377     {
00378         bmenu = win[index].w_bar[bmenu].ob_next;        /* BoŒte de menu suivante */
00379         xstate = bmenu << 8;
00380         win[index].w_bar[WM_BOXTITLES + i++].ob_state |= xstate;
00381     }
00382
00383     i = 6;
00384     do
00385     {
00386         if ((win[index].w_bar[i].ob_type >> 8) == B_HIERM)
00387         {
00388             texte = (char *)(win[index].w_bar[i].ob_spec.userblk->ub_parm);
00389             win[index].w_bar[i].ob_type = G_STRING;
00390             win[index].w_bar[i].ob_type |= (B_HIERM << 8);
00391             win[index].w_bar[i].ob_spec.free_string = texte;
00392         }
00393     } while (NOT (win[index].w_bar[i++].ob_flags & LASTOB));
00394 }
00395 /* #] create_wmenu () Cr‚e un menu de fenˆtre :                                     */
00396 /* #[ menu_window () GŠre un menu de fenˆtre :                                      */
00397 int menu_window (int index, int xm, int ym)
00398 {
00399 GRECT rd, r;
00400 int ob, xw, yw, ww, bmenu, pere, i, etat, retour, tree,
00401         nb_titres = WM_BOXTITLES + 1, titre1 = WM_BOXTITLES + 1,
00402         x, y, w, h, km, dummy, obj, old_obj = -1, tit,
00403         evnt, b[8], sortie = FALSE;
00404 OBJECT *adr, *adrh;
00405 MFDB img;
00406
00407     objc_offset (win[index].w_fen, BW_BARRE, &xw, &yw);
00408     ww = win[index].w_fen[BW_WORK].ob_width - 1;
00409     if (NOT (win[index].w_fen[BW_VBAR].ob_flags & HIDETREE))
00410         ww += win[index].w_fen[BW_VBAR].ob_width;
00411     adr = win[index].w_bar;
00412     ob = objc_find (adr, WM_BOXARROWS, MAX_DEPTH, xm, ym);
00413     if (ob == BLANK)
00414         ob = objc_find (adr, WM_BOXTITLES, MAX_DEPTH, xm, ym);
00415
00416     if ((xm > xw) && (xm < (xw + ww)))              /* Si on a cliqu‚ dans la zone */
00417     {
00418         if (NOT (adr[ob].ob_state & DISABLED) && NOT (adr[ob].ob_flags & HIDETREE))
00419         {                                                                               /* et sur un objet */
00420             if (win[index].w_icon > BLANK)      /* Si la fenˆtre est iconifi‚e */
00421                 return FALSE;       /* on s'en va. */
00422
00423             while (adr[nb_titres++].ob_type == G_TITLE) ;       /* Compter les titres */
00424             nb_titres -= (WM_BOXTITLES + 2);
00425             while (adr[titre1++].ob_flags & HIDETREE) ;         /* Chercher 1ø titre */
00426             titre1--;
00427
00428             create_hierm (adr); /* FlŠches menus hi‚rarchiques */
00429
00430             if (adr[ob].ob_type == G_BOXCHAR)           /* Si clic sur une flˆche */
00431             {
00432                 if (ob == WM_LFARROW)                   /* Si flˆche gauche */
00433                 {
00434                     titre1--;                               /* Titre pr‚c‚dent */
00435                     adr[titre1].ob_flags &= ~HIDETREE;
00436                     adr[WM_RTARROW].ob_state &= ~DISABLED;  /* Activer flˆche droite */
00437                     if (adr[titre1 - 1].ob_type == G_IBOX)  /* Si premier titre */
00438                         adr[WM_LFARROW].ob_state |= DISABLED;   /* d‚sactiver fl. gauche */
00439                 }
00440                 else if (ob == WM_RTARROW)      /* Si flˆche droite */
00441                 {
00442                     adr[titre1].ob_flags |= HIDETREE;
00443                     titre1++;                               /* Titre suivant */
00444                     adr[WM_LFARROW].ob_state &= ~DISABLED;  /* Activer flˆche gauche */
00445                     if (adr[titre1].ob_next < titre1)               /* Si dernier titre */
00446                         adr[WM_RTARROW].ob_state |= DISABLED;   /* d‚sactiver fl.droite */
00447                 }
00448                 adr[WM_BOXTITLES].ob_x = adr[WM_BOXARROWS].ob_width - adr[titre1].ob_x;
00449                 i = WM_BOXTITLES + 1;           /* Chercher boŒte des menus */
00450                 while (win[index].w_bar[i++].ob_type != G_IBOX) ;
00451                 win[index].w_bar[i - 1].ob_x = win[index].w_bar[WM_BOXTITLES].ob_x -
00452                             win[index].w_bar[i].ob_x;
00453                 rd.g_x = xw;
00454                 rd.g_y = yw;
00455                 rd.g_w = ww;
00456                 rd.g_h = adr[WM_BOXMENU].ob_height;
00457                 wind_get (win[index].w_hg, WF_FIRSTXYWH,
00458                                     &r.g_x, &r.g_y, &r.g_w, &r.g_h);
00459                 if (rc_intersect (&rd, &r))
00460                     objc_draw (win[index].w_bar, WM_BOXMENU, MAX_DEPTH,
00461                                          r.g_x, r.g_y, r.g_w, r.g_h);
00462             }
00463             else if (adr[ob].ob_type == G_TITLE)    /* Si clic sur un titre */
00464             {
00465                 while (mk)
00466                     graf_mkstate (&dummy, &dummy, &mk, &dummy); /* Relacher bouton */
00467                 tit = ob;
00468                 bmenu = adr[tit].ob_state >> 8; /* Menu correspondant */
00469                 w = adr[bmenu].ob_width;
00470                 h = adr[bmenu].ob_height;
00471                 adr[bmenu].ob_x = adr[tit].ob_x;
00472                 adr[bmenu].ob_y = ZERO;
00473                 objc_offset (adr, bmenu, &x, &y);
00474                 if (x < (bureau.xd + 5))
00475                 {
00476                     adr[bmenu].ob_x += (bureau.xd + 5) - x;
00477                     objc_offset (adr, bmenu, &x, &y);
00478                 }
00479                 if (x + w > bureau.xd + bureau.wd - 5)
00480                 {
00481                     adr[bmenu].ob_x -= ((x + w) - (bureau.xd + bureau.wd) + 5);
00482                     objc_offset (adr, bmenu, &x, &y);
00483                 }
00484                 if (y + h > bureau.yd + bureau.hd - 5)
00485                 {
00486                     adr[bmenu].ob_y -= ((y + h) - (bureau.yd + bureau.hd) + 5);
00487                     objc_offset (adr, bmenu, &x, &y);
00488                 }
00489
00490                 wind_update (BEG_MCTRL);                /* Bloquer menu normal */
00491                 win[index].w_bar[tit].ob_state |= SELECTED;
00492                 draw_object (tit, index);
00493                 get_bkgr (x, y, w, h, &img);
00494                 objc_draw (adr, bmenu, MAX_DEPTH, x - 3, y - 3, w + 6, h + 6);
00495
00496                 do
00497                 {
00498                     evnt = evnt_multi (MU_BUTTON | MU_TIMER,
00499                                                          1, 1, 1, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO,
00500                                                          b, 10, 0, &xm, &ym, &km, &dummy, &dummy, &dummy);
00501                     if (evnt & MU_BUTTON)
00502                     {
00503                         put_bkgr (x, y, w, h, &img);
00504                         adr[bmenu].ob_x = adr[tit].ob_x;
00505                         adr[bmenu].ob_y = ZERO;
00506                         while (km)  /* Attend que le bouton de la souris soit relƒch‚ */
00507                             graf_mkstate (&dummy, &dummy, &km, &dummy);
00508                         sortie = TRUE;
00509                     }
00510                     else if (evnt == MU_TIMER)
00511                     {
00512                         graf_mkstate (&xm, &ym, &dummy, &dummy);
00513                         obj = objc_find (adr, bmenu, MAX_DEPTH, xm, ym);
00514                         if (obj == BLANK)
00515                             obj = objc_find (adr, WM_BOXTITLES, 1, xm, ym);
00516
00517                         if ((adr[obj].ob_type == G_TITLE) && (xm < (xw + ww)))
00518                         {
00519                             if (old_obj != BLANK)
00520                             {
00521                                 etat = adr[old_obj].ob_state & ~SELECTED;
00522                                 objc_change (adr, old_obj, ZERO, x, y, w, h, etat, TRUE);
00523                                 old_obj = BLANK;
00524                             }
00525                             if (obj != tit)
00526                             {
00527                                 put_bkgr (x, y, w, h, &img);
00528                                 win[index].w_bar[tit].ob_state &= ~SELECTED;
00529                                 draw_object (tit, index);
00530                                 adr[bmenu].ob_x = adr[tit].ob_x;
00531                                 adr[bmenu].ob_y = ZERO;
00532                                 tit = obj;
00533                                 bmenu = adr[tit].ob_state >> 8; /* Menu correspondant */
00534                                 w = adr[bmenu].ob_width;
00535                                 h = adr[bmenu].ob_height;
00536                                 adr[bmenu].ob_x = adr[tit].ob_x;
00537                                 adr[bmenu].ob_y = ZERO;
00538                                 objc_offset (adr, bmenu, &x, &y);
00539                                 if (x < (bureau.xd + 5))
00540                                 {
00541                                     adr[bmenu].ob_x += (bureau.xd + 5) - x;
00542                                     objc_offset (adr, bmenu, &x, &y);
00543                                 }
00544                                 if (x + w > bureau.xd + bureau.wd - 5)
00545                                 {
00546                                     adr[bmenu].ob_x -= ((x + w) - (bureau.xd + bureau.wd) + 5);
00547                                     objc_offset (adr, bmenu, &x, &y);
00548                                 }
00549                                 if (y + h > bureau.yd + bureau.hd - 5)
00550                                 {
00551                                     adr[bmenu].ob_y -= ((y + h) - (bureau.yd + bureau.hd) + 5);
00552                                     objc_offset (adr, bmenu, &x, &y);
00553                                 }
00554                                 win[index].w_bar[tit].ob_state |= SELECTED;
00555                                 draw_object (tit, index);
00556                                 get_bkgr (x, y, w, h, &img);
00557                                 objc_draw (adr, bmenu, MAX_DEPTH, x - 3, y - 3, w + 6, h + 6);
00558                             }
00559                         }
00560                         else if (adr[obj].ob_type != G_TITLE)
00561                         {
00562                             pere = parent (adr, obj);
00563                             if (old_obj != obj)
00564                             {
00565                                 if ((old_obj != BLANK) && (NOT (adr[old_obj].ob_state & DISABLED)))
00566                                 {
00567                                     etat = adr[old_obj].ob_state & ~SELECTED;
00568                                     objc_change (adr, old_obj, ZERO, x, y, w, h, etat, TRUE);
00569                                 }
00570                                 if (pere == bmenu)
00571                                 {
00572                                     if (NOT (adr[obj].ob_state & DISABLED))
00573                                     {
00574                                         etat = adr[obj].ob_state | SELECTED;
00575                                         objc_change (adr, obj, ZERO, x, y, w, h, etat, TRUE);
00576
00577                                         if ((adr[obj].ob_type >> 8) == B_HIERM)
00578                                         {
00579                                             if (adr[obj].ob_state & SELECTED)
00580                                             {
00581                                                 retour = wind_hierarch (adr, index, obj);
00582                                                 if (retour > ZERO)
00583                                                 {
00584                                                     event = MU_BUTTON;
00585                                                     put_bkgr (x, y, w, h, &img);
00586                                                     adr[bmenu].ob_x = adr[tit].ob_x;
00587                                                     adr[bmenu].ob_y = ZERO;
00588                                                     tree = adr[obj].ob_state >> 8;
00589                                                     adrh = ir_trindex[tree];
00590                                                     if ((adrh[buf[6]].ob_type >> 8) == B_FNCP)
00591                                                     {
00592                                                         (*fnc[adrh[buf[6]].ob_state >> 8])();
00593                                                         empty (MU_KEYBD);
00594                                                     }
00595                                                     wind_update (END_MCTRL);        /* D‚bloquer menu */
00596                                                     return event;
00597                                                 }
00598                                                 else if (retour == BLANK)
00599                                                 {
00600                                                     put_bkgr (x, y, w, h, &img);
00601                                                     win[index].w_bar[tit].ob_state &= ~SELECTED;
00602                                                     draw_object (tit, index);
00603                                                     obj = BLANK;
00604                                                     sortie = TRUE;
00605                                                 }
00606                                             }
00607                                         }
00608                                     }
00609                                     old_obj = obj;
00610                                 }
00611                                 else
00612                                     old_obj = BLANK;
00613                             }
00614                         }
00615                     }
00616                 } while (NOT sortie);
00617                 wind_update (END_MCTRL);        /* D‚bloquer menu normal */
00618
00619                 if ((old_obj != BLANK) && (obj != BLANK) && (NOT (adr[obj].ob_state & DISABLED)))
00620                 {
00621                     adr[obj].ob_state &= ~SELECTED;
00622                     buf[0] = BEV_WMENU;
00623                     buf[1] = ap_id;
00624                     buf[3] = tit;
00625                     buf[4] = obj;
00626                     buf[5] = index;
00627                     if ((win[index].w_bar[obj].ob_type >> 8) == B_FNCP) /* Si FNCP */
00628                     {
00629                         (*fnc[win[index].w_bar[obj].ob_state >> 8])();
00630                         empty (MU_KEYBD);
00631                     }
00632                     return evnt;
00633                 }
00634                 else
00635                 {
00636                     win[index].w_bar[tit].ob_state &= ~SELECTED;
00637                     draw_object (tit, index);
00638                     return FALSE;
00639                 }
00640             }
00641         }
00642     }
00643     return FALSE;
00644 }
00645 /* #] menu_window () GŠre un menu de fenˆtre :                                      */
00646 /* #[ wind_hierarch () Menu hi‚rarchique en fenˆtre :                           */
00647 int wind_hierarch (OBJECT *adr, int index, int option)
00648 {
00649 OBJECT *adrh, *old_adrh;
00650 int x, y, w, h, xo, yo, xm, ym, km, b[8], evnt, ob_menu, menu, pxy[8],
00651         tree, dummy, ob = ZERO, old_ob = -1, sortie = FALSE, titre,
00652         xz, yz, etat, cote, op, nbre, fl_scroll = FALSE, xs, ys, cale = 1,
00653         naff, down, haut, i, xw, ww;
00654 size_t taille;
00655 char *text;
00656 MOBLK zone;
00657 MFDB ecran = {0}, image;
00658
00659     evnt = evnt_timer (100, 0);         /* D‚lai 1/2 seconde */
00660     menu = parent (adr, option);
00661     graf_mkstate (&xm, &ym, &dummy, &dummy);
00662     if (objc_find (adr, menu, MAX_DEPTH, xm, ym) != option)
00663         return FALSE;               /* Si plus sur l'option, on sort */
00664
00665     objc_offset (adr, option, &xo, &yo);    /* Position option */
00666
00667     tree = adr[option].ob_state >> 8;
00668     adrh = ir_trindex[tree];
00669
00670     objc_offset (adr, menu, &xz, &yz);
00671
00672     titre = m_title (adr, option) + 3;
00673
00674     zone.m_out = 1;     /* 0 : Entr‚e / 1 : Sortie */
00675     zone.m_x = xz;
00676     zone.m_y = yz;
00677     zone.m_w = adr[menu].ob_width;
00678     zone.m_h = adr[menu].ob_height;
00679
00680     text = get_text (adr, option);
00681     if (text[strlen (text) - 2] == 3)
00682         x = adrh->ob_x = xo + adr[option].ob_width + 2;
00683     else if (text[strlen (text) - 2] == 4)
00684         x = adrh->ob_x = xo - adrh->ob_width - 5;
00685     y = adrh->ob_y = yo;
00686     w = adrh->ob_width;
00687     h = adrh->ob_height;
00688     if (y + h > bureau.yd + bureau.hd - 5)
00689         y = adrh->ob_y = (bureau.yd + bureau.hd) - h - 5;
00690
00691     if (h > bureau.hd)                                                  /* Si plus haut que le bureau */
00692     {
00693         if (y < bureau.yd)
00694             y = adrh->ob_y = bureau.yd + 15;
00695         naff = create_scroll (adrh, y, &nbre, ZERO);        /* cr‚er un scroll-menu */
00696         down = naff + 2;
00697         old_adrh = adrh;
00698         adrh = scroll;
00699         adrh->ob_x = x;
00700         adrh->ob_y = y;
00701         haut = adrh[1].ob_height;
00702         fl_scroll = TRUE;
00703     }
00704
00705     taille = (((((size_t)(w + 3) / 16) + 1) * 2 * (size_t)work_display.n_plane) *
00706                         (size_t)(h + 3)) + 256;
00707     image.fd_addr = malloc (taille);
00708     image.fd_w = w + 3;
00709     image.fd_h = h + 3;
00710     image.fd_wdwidth = ((w + 3) / 16) + (((w + 3) % 16) != ZERO);
00711     image.fd_stand = 1;
00712     image.fd_nplanes = work_display.n_plane;
00713     pxy[0] = x - 1;
00714     pxy[1] = y - 1;
00715     pxy[2] = pxy[0] + w + 4;
00716     pxy[3] = pxy[1] + h + 4;
00717     pxy[4] = ZERO;
00718     pxy[5] = ZERO;
00719     pxy[6] = w + 4;
00720     pxy[7] = h + 4;
00721     v_hide_c (work_display.handle);
00722     vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecran, &image);   /* Sauver le fond */
00723     v_show_c (work_display.handle, TRUE);
00724     objc_draw (adrh, ROOT, MAX_DEPTH, x - 1, y - 1, w + 4, h + 4);
00725
00726     do
00727     {
00728         evnt = evnt_multi (MU_BUTTON | MU_M1 | MU_TIMER,
00729                                              1, 1, 1,
00730                                              zone.m_out, zone.m_x, zone.m_y,
00731                                              zone.m_w, zone.m_h,
00732                                              ZERO, ZERO, ZERO, ZERO, ZERO,
00733                                              b, 10, 0, &xm, &ym, &km, &dummy, &dummy, &dummy);
00734         if (evnt & MU_BUTTON)
00735         {
00736             sortie = TRUE;
00737             while (km)  /* Attend que le bouton de la souris soit relƒch‚ */
00738                 graf_mkstate (&dummy, &dummy, &km, &dummy);
00739             adr[option].ob_state &= ~0x00FF;
00740         }
00741         else if (evnt & MU_M1)
00742         {
00743             evnt = evnt_timer (50, 0);
00744             graf_mkstate (&xm, &ym, &dummy, &dummy);
00745             if (zone.m_out)
00746             {
00747                 zone.m_out = 0;
00748                 if (text[strlen (text) - 2] == 3)
00749                     cote = (xm < zone.m_x);
00750                 else if (text[strlen (text) - 2] == 4)
00751                     cote = (xm > zone.m_x + zone.m_w);
00752                 if (cote)
00753                     sortie = TRUE;
00754                 else
00755                     adr[option].ob_state |= SELECTED;
00756             }
00757             else
00758             {
00759                 ob_menu = objc_find (adr, menu, MAX_DEPTH, xm, ym);
00760                 if (ob_menu != option)
00761                 {
00762                     etat = adr[option].ob_state & ~SELECTED;
00763                     objc_change (adr, option, ZERO, xo, yo,
00764                                              adr[option].ob_width,
00765                                              adr[option].ob_height, etat, TRUE);
00766                     adrh[ob].ob_state &= ~SELECTED;
00767                     evnt = ZERO;
00768                     sortie = TRUE;
00769                 }
00770                 else
00771                 {
00772                     zone.m_out = 1;
00773                 }
00774             }
00775         }
00776         else if (evnt == MU_TIMER)
00777         {
00778             graf_mkstate (&xm, &ym, &dummy, &dummy);
00779             ob = objc_find (adrh, ROOT, MAX_DEPTH, xm, ym);
00780
00781             if (ob == BLANK)
00782             {
00783                 op = objc_find (adr, menu, MAX_DEPTH, xm, ym);
00784                 if ((op > BLANK) && (op != option) && (op > menu))  /* Si autre option */
00785                 {
00786                     etat = adr[option].ob_state & ~SELECTED;
00787                     objc_change (adr, option, ZERO, xo, yo,
00788                                              adr[option].ob_width,
00789                                              adr[option].ob_height, etat, TRUE);
00790                     ob = ZERO;
00791                     sortie = TRUE;
00792                 }
00793                 else
00794                 {
00795                     objc_offset (win[index].w_fen, BW_BARRE, &xw, &dummy);
00796                     ww = win[index].w_fen[BW_WORK].ob_width - 1;
00797                     if (NOT (win[index].w_fen[BW_VBAR].ob_flags & HIDETREE))
00798                         ww += win[index].w_fen[BW_VBAR].ob_width;
00799                     if ((xm > xw) && (xm < (xw + ww)))              /* Si on a cliqu‚ dans la zone */
00800                     {
00801                         op = objc_find (adr, WM_BOXTITLES, MAX_DEPTH, xm, ym);
00802                         if ((op > BLANK) && (adr[op].ob_type == G_TITLE))
00803                         {
00804                             sortie = TRUE;
00805                             evnt = MU_TIMER;
00806                             ob = ZERO;
00807                             etat = adr[option].ob_state & ~SELECTED;
00808                             objc_change (adr, option, ZERO, xo, yo,
00809                                                      adr[option].ob_width,
00810                                                      adr[option].ob_height, etat, TRUE);
00811                         }
00812                     }
00813                 }
00814             }
00815
00816             if (NOT sortie)
00817             {
00818                 ob = objc_find (adrh, ROOT, MAX_DEPTH, xm, ym);
00819                 if (old_ob != ob)       /* Si objet diff‚rent */
00820                 {
00821                     if ((old_ob != -1) && (NOT (adrh[old_ob].ob_state & DISABLED)))
00822                     {
00823                         etat = adrh[old_ob].ob_state & ~SELECTED;
00824                         objc_change (adrh, old_ob, ZERO, x, y, w, h, etat, TRUE);
00825                     }
00826                     if ((ob > ROOT) && (NOT (adrh[ob].ob_state & DISABLED)))
00827                     {
00828                         etat = adrh[ob].ob_state | SELECTED;
00829                         objc_change (adrh, ob, ZERO, x, y, w, h, etat, TRUE);
00830                     }
00831                     old_ob = ob;
00832                 }
00833                 else                                /* Si mˆme objet */
00834                 {
00835                     if ((fl_scroll) && (ob == 1))
00836                     {       /* Si scroll : flˆche vers le haut */
00837                         objc_offset (adrh, ROOT, &xs, &ys);
00838                         if (cale > 1)
00839                         {
00840                             evnt_timer (50, 0);
00841                             cale--;
00842                             for (i = naff + 1 ; i > 2 ; i--)
00843                             {
00844                                 adrh[i].ob_spec = adrh[i - 1].ob_spec;
00845                                 adrh[i].ob_state = adrh[i - 1].ob_state;
00846                             }
00847                             adrh[2].ob_spec = old_adrh[cale].ob_spec;
00848                             adrh[2].ob_state = old_adrh[cale].ob_state;
00849                             pxy[0] = xs;
00850                             pxy[1] = ys + haut;
00851                             pxy[2] = pxy[0] + adrh->ob_width;
00852                             pxy[3] = ys + (naff * haut);
00853                             pxy[4] = pxy[0];
00854                             pxy[5] = ys + (2 * haut);
00855                             pxy[6] = pxy[2];
00856                             pxy[7] = ys + ((naff + 1) * haut);
00857                             v_hide_c (work_display.handle);
00858                             objc_change (adrh, ob, ZERO, x, y, w, h, NORMAL, TRUE);
00859                             vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecran, &ecran);
00860                             objc_change (adrh, ob, ZERO, x, y, w, h, SELECTED, TRUE);
00861                             v_show_c (work_display.handle, TRUE);
00862                             objc_draw (adrh, ROOT, 2,
00863                                                  x + adrh[2].ob_x, y + adrh[2].ob_y,
00864                                                  adrh[2].ob_width, adrh[2].ob_height);
00865                         }
00866                     }
00867                     else if ((fl_scroll) && (ob == down))
00868                     {       /* Si scroll : flˆche vers le bas */
00869                         objc_offset (adrh, ROOT, &xs, &ys);
00870                         if ((cale + naff) <= nbre)
00871                         {
00872                             evnt_timer (50, 0);
00873                             cale++;
00874                             for (i = 2 ; i < (naff + 1) ; i++)
00875                             {
00876                                 adrh[i].ob_spec = adrh[i + 1].ob_spec;
00877                                 adrh[i].ob_state = adrh[i + 1].ob_state;
00878                             }
00879                             adrh[naff + 1].ob_spec = old_adrh[cale + naff - 1].ob_spec;
00880                             adrh[naff + 1].ob_state = old_adrh[cale + naff - 1].ob_state;
00881                             pxy[0] = xs;
00882                             pxy[1] = ys + (2 * haut);
00883                             pxy[2] = pxy[0] + adrh->ob_width;
00884                             pxy[3] = ys + ((naff + 1) * haut);
00885                             pxy[4] = pxy[0];
00886                             pxy[5] = ys + haut;
00887                             pxy[6] = pxy[2];
00888                             pxy[7] = ys + (naff * haut);
00889                             v_hide_c (work_display.handle);
00890                             objc_change (adrh, ob, ZERO, x, y, w, h, NORMAL, TRUE);
00891                             vro_cpyfm (work_display.handle, S_ONLY, pxy, &ecran, &ecran);
00892                             objc_change (adrh, ob, ZERO, x, y, w, h, SELECTED, TRUE);
00893                             v_show_c (work_display.handle, TRUE);
00894                             objc_draw (adrh, ROOT, 2,
00895                                                  x + adrh[naff + 1].ob_x, y + adrh[naff + 1].ob_y,
00896                                                  adrh[naff + 1].ob_width, adrh[naff + 1].ob_height);
00897                         }
00898                     }
00899                 }
00900             }
00901         }
00902     } while (NOT sortie);
00903
00904     pxy[4] = x - 1;
00905     pxy[5] = y - 1;
00906     pxy[6] = pxy[4] + w + 4;
00907     pxy[7] = pxy[5] + h + 4;
00908     pxy[0] = ZERO;
00909     pxy[1] = ZERO;
00910     pxy[2] = w + 4;
00911     pxy[3] = h + 4;
00912     v_hide_c (work_display.handle);
00913     vro_cpyfm (work_display.handle, S_ONLY, pxy, &image, &ecran);   /* Restaurer le fond */
00914     v_show_c (work_display.handle, TRUE);
00915     free (image.fd_addr);   /* Lib‚rer tampon image */
00916     if (fl_scroll)
00917     {
00918         free (scroll);
00919         scroll = (OBJECT *) ZERO;
00920         adrh = old_adrh;
00921         if (ob > ZERO)
00922             ob = ob - 2 + cale;
00923     }
00924
00925     if ((ob > ZERO) && (NOT (adrh[ob].ob_state & DISABLED)) && (evnt))
00926     {
00927         evnt = TRUE;
00928         buf[0] = BEV_WHIER;
00929         buf[1] = ap_id;
00930         buf[3] = titre;
00931         buf[4] = option;
00932         buf[5] = tree;
00933         buf[6] = ob;
00934         buf[7] = index;
00935         etat = adrh[buf[6]].ob_state & 0xFF00;
00936         objc_change (adrh, buf[6], ZERO, x, y, w, h, etat, FALSE);
00937         return evnt;
00938     }
00939      else if ((((evnt & MU_BUTTON) || (evnt == MU_TIMER)) && (ob < ZERO)) ||
00940                         ((((evnt & MU_BUTTON) || (evnt == MU_TIMER)) && (ob > ZERO) && (adrh[ob].ob_state & DISABLED))))
00941         return BLANK;
00942     else if ((evnt == MU_TIMER) && (ob == ZERO))
00943         return ZERO;
00944     else
00945         return FALSE;
00946 }
00947 /* #] wind_hierarch () Menu hi‚rarchique en fenˆtre :                           */
00948 /* #[ open_window () Ouvre une fenˆtre :                                                    */
01030 int     open_window (int index, int type, int attr,
01031                                      int x, int y, int w, int h,
01032                                      int wmi, int hmi, int wma, int hma,
01033                                      int wu, int hu,
01034                                      int flags, int fmouse,
01035                                      FNCP ricn, FNCP redr, FNCP clos,
01036                                      char *title, char *info,
01037                                      long wt, long ht,
01038                                      int fmenu, int ftool, int bar,
01039                                      int pattern, int colorp)
01040 {
01041 int wh, top, ok = FALSE, retrace = FALSE, dummy, xb, yb,
01042         oldy, oldw, oldh, xw, yw, ww, hw, temp;
01043
01044     if (win[index].w_icon > BLANK)  /* Si la fenˆtre est ic“nifi‚e, */
01045         return FALSE;                                   /* on ne fait rien. */
01046
01047     if (win[index].w_hg == BLANK)       /* Si fenˆtre jamais ouverte */
01048     {                       /* Initialiser la structure */
01049         win[index].w_type = type;                   /* Type de fenˆtre */
01050         win[index].w_attr = attr;                   /* Attributs de fenˆtre */
01051         win[index].w_curr.g_x = x;              /* Position fenˆtre */
01052         win[index].w_curr.g_y = y;
01053         win[index].w_curr.g_w = w;              /* Dimensions fenˆtre */
01054         win[index].w_curr.g_h = h;
01055
01056             /* Calcul dimensions minimum */
01057         bwind_calc (WC_BORDER, attr, bar, ZERO,
01058                                 x, y, wmi, hmi, &dummy, &dummy, &wmi, &hmi);
01059         wmi = max (wmi, 150);
01060         win[index].w_wmini = wmi;                   /* Largeur mini */
01061         win[index].w_hmini = hmi;                   /* Hauteur mini */
01062         if (w < wmi)                                                /* Correction eventuelle */
01063             win[index].w_curr.g_w = w = wmi;    /* si les coordonn‚es */
01064         if (h < hmi)                                                /* de d‚part sont inf‚rieures */
01065             win[index].w_curr.g_h = h = hmi;    /* aux minimales. */
01066
01067             /* Calcul dimensions maximum */
01068         if (wma > BLANK)
01069         {
01070             bwind_calc (WC_BORDER, attr, bar, ZERO,
01071                                     x, y, wma, h, &dummy, &dummy, &wma, &dummy);
01072             win[index].w_wmaxi = wma;
01073         }
01074         else
01075             win[index].w_wmaxi = (bureau.wd * 2);
01076         if (hma > BLANK)
01077         {
01078             bwind_calc (WC_BORDER, attr, bar, ZERO,
01079                                     x, y, w, hma, &dummy, &dummy, &dummy, &hma);
01080             win[index].w_hmaxi = hma;
01081         }
01082         else
01083             win[index].w_hmaxi = (bureau.hd * 2);
01084         if (w > win[index].w_wmaxi)                 /* Correction eventuelle */
01085             win[index].w_curr.g_w = w = wma;    /* si les coordonn‚es */
01086         if (h > win[index].w_hmaxi)                 /* de d‚part sont sup‚rieures */
01087             win[index].w_curr.g_h = h = hma;    /* aux maximales. */
01088
01089         if (type == WTYP_PICT)
01090         {       /* Si fenˆtre image : pas plus grande que la taille totale */
01091             bwind_calc (WC_WORK, attr, bar, ZERO,
01092                                     x, y, w, h, &xw, &yw, &ww, &hw);
01093             if (ww > wt)
01094                 ww = (int)wt;
01095             if (hw > ht)
01096                 hw = (int)ht;
01097             if (ftool)
01098                 hw++;
01099             bwind_calc (WC_BORDER, attr, bar, ZERO,
01100                                     xw, yw, ww, hw, &x, &y, &w, &h);
01101             win[index].w_curr.g_w = w;
01102             win[index].w_curr.g_h = h;
01103         }
01104
01105         win[index].w_wunit = wu;                    /* Unit‚ largeur */
01106         win[index].w_hunit = hu;                    /* Unit‚ hauteur */
01107
01108             /* Mise en place des flags */
01109         if (flags & WFARROW)                            /* Flag clavier */
01110             win[index].w_flags |= WFARROW;  /* Gestion au clavier */
01111         else
01112             win[index].w_flags &= ~WFARROW; /* Pas gestion au clavier */
01113
01114         if (flags & WFCALAG)                            /* Calage taille et sliders */
01115         {
01116             win[index].w_flags |= WFCALAG;  /* Calage taille et sliders sur unit‚s */
01117             bwind_calc (WC_WORK, attr, bar, ZERO,
01118                                     x, y, w, h, &xw, &yw, &ww, &hw);
01119             ww = ww / wu * wu;
01120             hw = hw / hu * hu;
01121             bwind_calc (WC_BORDER, attr, bar, ZERO,
01122                                     xw, yw, ww, hw,
01123                                     &win[index].w_curr.g_x, &win[index].w_curr.g_y,
01124                                     &win[index].w_curr.g_w, &win[index].w_curr.g_h);
01125         }
01126         else
01127             win[index].w_flags &= ~WFCALAG;
01128
01129         if (flags & WFDECAL)                            /* Ajuster w_lin et w_col */
01130             win[index].w_flags |= WFDECAL;  /* sur ‚v‚nement Sizer. */
01131         else
01132             win[index].w_flags &= ~WFDECAL;
01133
01134         if (flags & WFGROUP)                            /* Flag groupement flŠches */
01135             win[index].w_flags |= WFGROUP;  /* Groupement */
01136         else
01137             win[index].w_flags &= ~WFGROUP; /* Pas groupement */
01138
01139         if (fmouse > ZERO)
01140             win[index].w_mouse = fmouse;
01141
01142         win[index].w_redicn = ricn;             /* Routine redraw si ic“ne */
01143         win[index].w_redraw = redr;             /* Routine redraw normale */
01144         win[index].w_close = clos;              /* Routine de fermeture */
01145         if (strlen (title))
01146             win[index].w_title = title;         /* Titre */
01147         if (strlen (info))
01148             win[index].w_infos = info;          /* Ligne infos */
01149
01150                 /* Cr‚ation fenˆtre */
01151         if ((wh = wind_create (ZERO,
01152                                             win[index].w_curr.g_x, win[index].w_curr.g_y,
01153                                             win[index].w_curr.g_w, win[index].w_curr.g_h)) > BLANK)
01154             ok = TRUE;
01155     }
01156     else if (win[index].w_hg == ZERO)   /* Si fenˆtre ouverte puis ferm‚e */
01157     {
01158         win[index].w_wunit = wu;        /* Rafraichir les paramŠtres */
01159         win[index].w_hunit = hu;
01160         win[index].w_mouse = fmouse;
01161         win[index].w_redicn = ricn;
01162         win[index].w_redraw = redr;
01163         win[index].w_close = clos;
01164         win[index].w_wtot = wt;
01165         win[index].w_htot = ht;
01166         win[index].w_flags = (win[index].w_flags & WFLAST) | flags;
01167             /* Calcul dimensions minimum */
01168         bwind_calc (WC_BORDER, attr, bar, ZERO,
01169                                 x, y, wmi, hmi, &dummy, &dummy, &wmi, &hmi);
01170         wmi = max (wmi, 150);
01171         win[index].w_wmini = wmi;                   /* Largeur mini */
01172         win[index].w_hmini = hmi;                   /* Hauteur mini */
01173         if (win[index].w_curr.g_w < wmi)            /* Correction eventuelle */
01174             win[index].w_curr.g_w = w = wmi;        /* si les coordonn‚es */
01175         if (win[index].w_curr.g_h < hmi)            /* de d‚part sont inf‚rieures */
01176             win[index].w_curr.g_h = h = hmi;        /* aux minimales. */
01177
01178         if (wma > BLANK)    /* Calcul dimensions maximum */
01179         {
01180             bwind_calc (WC_BORDER, attr, bar, ZERO,
01181                                     x, y, wma, h, &dummy, &dummy, &wma, &dummy);
01182             win[index].w_wmaxi = wma;
01183         }
01184         else
01185             win[index].w_wmaxi = (bureau.wd * 2);
01186         if (hma > BLANK)
01187         {
01188             bwind_calc (WC_BORDER, attr, bar, ZERO,
01189                                     x, y, w, hma, &dummy, &dummy, &dummy, &hma);
01190             win[index].w_hmaxi = hma;
01191         }
01192         else
01193             win[index].w_hmaxi = (bureau.hd * 2);
01194         if (win[index].w_curr.g_w > win[index].w_wmaxi)         /* Correction eventuelle */
01195             win[index].w_curr.g_w = w = win[index].w_wmaxi;     /* si les coordonn‚es */
01196         if (win[index].w_curr.g_h > win[index].w_hmaxi)         /* de d‚part sont sup‚rieures */
01197             win[index].w_curr.g_h = h = win[index].w_hmaxi;     /* aux maximales. */
01198         temp = win[index].w_fen[BW_WORK].ob_state & 0x0FFF;
01199         win[index].w_fen[BW_WORK].ob_state = (temp | (pattern << 12));
01200         temp = win[index].w_fen[BW_WORK].ob_state & 0xF0FF;
01201         win[index].w_fen[BW_WORK].ob_state = (temp | (colorp << 8));
01202
01203         if (type == WTYP_PICT)
01204         {       /* Si fenˆtre image : pas plus grande que la taille totale */
01205             bwind_calc (WC_WORK, attr, bar, ZERO,
01206                                     win[index].w_curr.g_x, win[index].w_curr.g_y,
01207                                     win[index].w_curr.g_w, win[index].w_curr.g_h,
01208                                     &xw, &yw, &ww, &hw);
01209             if (ww > wt)
01210                 ww = (int)wt;
01211             if (hw > ht)
01212                 hw = (int)ht;
01213             if (win[index].w_type & WTYP_TOOL)
01214                 hw++;
01215             bwind_calc (WC_BORDER, attr, bar, ZERO,
01216                                     xw, yw, ww, hw,
01217                                     &win[index].w_curr.g_x, &win[index].w_curr.g_y,
01218                                     &win[index].w_curr.g_w, &win[index].w_curr.g_h);
01219         }
01220
01221                 /* Cr‚ation fenˆtre */
01222         if ((wh = wind_create (ZERO,
01223                                             win[index].w_curr.g_x, win[index].w_curr.g_y,
01224                                             win[index].w_curr.g_w, win[index].w_curr.g_h)) > BLANK)
01225             ok = TRUE;
01226     }
01227
01228     if (ok)                                                                     /* Si elle vient d'ˆtre cr‚‚e */
01229     {
01230         put_fen (index);
01231             /* Trame et couleur zone de travail */
01232         temp = win[index].w_fen[BW_WORK].ob_state & 0x0FFF;
01233         win[index].w_fen[BW_WORK].ob_state = (temp | (pattern << 12));
01234         temp = win[index].w_fen[BW_WORK].ob_state & 0xF0FF;
01235         win[index].w_fen[BW_WORK].ob_state = (temp | (colorp << 8));
01236
01237         win[index].w_wtot = wt;     /* Largeur totale */
01238         win[index].w_htot = ht;     /* Hauteur totale */
01239
01240         win[index].w_hg = wh;           /* Enregistrer handle GEM */
01241         if (fmenu)                                      /* Si fenˆtre menu */
01242             create_wmenu (bar, index);  /* Cr‚er le menu */
01243         else if (ftool)                             /* Si fenˆtre ToolBar */
01244         {
01245             win[index].w_type |= WTYP_TOOL;
01246             win[index].w_bar = ir_trindex[bar];
01247             win[index].w_bar->ob_state &= ~OUTLINED;                    /* Pas Outline */
01248             win[index].w_bar->ob_spec.obspec.framesize = 0;     /* Pas de cadre */
01249             win[index].w_bar->ob_spec.obspec.textmode = 1;      /* Objet racine opaque */
01250             win[index].w_bar->ob_width = (bureau.wd * 2);
01251
01252             win[index].w_fen[BW_BARRE].ob_height = win[index].w_bar->ob_height;
01253             oldy = win[index].w_fen[BW_WORK].ob_y;
01254             win[index].w_fen[BW_WORK].ob_y = (win[index].w_fen[BW_BARRE].ob_y + win[index].w_fen[BW_BARRE].ob_height);
01255             win[index].w_fen[BW_WORK].ob_height -= (win[index].w_fen[BW_WORK].ob_y - oldy);
01256             win[index].w_fen[BW_VBAR].ob_y = win[index].w_fen[BW_WORK].ob_y;
01257             win[index].w_fen[BW_VBAR].ob_height = win[index].w_fen[BW_WORK].ob_height;
01258             win[index].w_fen[BW_VELEV].ob_height -= (win[index].w_fen[BW_WORK].ob_y - oldy - 1);
01259             win[index].w_fen[BW_DNARROW].ob_y -= (win[index].w_fen[BW_WORK].ob_y - oldy - 1);
01260             if (win[index].w_flags & WFGROUP)
01261                 win[index].w_fen[BW_UPARROW].ob_y =
01262                         (win[index].w_fen[BW_DNARROW].ob_y - win[index].w_fen[BW_UPARROW].ob_height + 1);
01263             objc_offset (win[index].w_fen, BW_BARRE, &xb, &yb);
01264             win[index].w_bar->ob_x = xb;
01265             win[index].w_bar->ob_y = yb;
01266         }
01267         else        /* Si ni menu, ni ToolBar */
01268             win[index].w_fen[BW_BARRE].ob_flags |= HIDETREE;
01269
01270                     /* Ouvrir la fenˆtre */
01271         wind_open (wh, win[index].w_curr.g_x, win[index].w_curr.g_y,
01272                              win[index].w_curr.g_w, win[index].w_curr.g_h);
01273     }
01274     else if ((NOT ok) && (win[index].w_hg > ZERO))  /* Si elle est d‚j… ouverte */
01275     {
01276         win[index].w_wunit = wu;        /* Rafraichir les paramŠtres */
01277         win[index].w_hunit = hu;
01278         win[index].w_mouse = fmouse;
01279         win[index].w_redicn = ricn;
01280         win[index].w_redraw = redr;
01281         win[index].w_close = clos;
01282         win[index].w_wtot = wt;
01283         win[index].w_htot = ht;
01284             /* Calcul dimensions minimum */
01285         bwind_calc (WC_BORDER, attr, bar, ZERO,
01286                                 x, y, wmi, hmi, &dummy, &dummy, &wmi, &hmi);
01287         wmi = max (wmi, 150);
01288         win[index].w_wmini = wmi;                   /* Largeur mini */
01289         win[index].w_hmini = hmi;                   /* Hauteur mini */
01290         if (win[index].w_curr.g_w < wmi)            /* Correction eventuelle */
01291             win[index].w_curr.g_w = w = wmi;        /* si les coordonn‚es */
01292         if (win[index].w_curr.g_h < hmi)            /* de d‚part sont inf‚rieures */
01293             win[index].w_curr.g_h = h = hmi;        /* aux minimales. */
01294
01295         if (wma > BLANK)    /* Calcul dimensions maximum */
01296         {
01297             bwind_calc (WC_BORDER, attr, bar, ZERO,
01298                                     x, y, wma, h, &dummy, &dummy, &wma, &dummy);
01299             win[index].w_wmaxi = wma;
01300         }
01301         else
01302             win[index].w_wmaxi = (bureau.wd * 2);
01303         if (hma > BLANK)
01304         {
01305             bwind_calc (WC_BORDER, attr, bar, ZERO,
01306                                     x, y, w, hma, &dummy, &dummy, &dummy, &hma);
01307             win[index].w_hmaxi = hma;
01308         }
01309         else
01310             win[index].w_hmaxi = (bureau.hd * 2);
01311         if (win[index].w_curr.g_w > win[index].w_wmaxi)         /* Correction eventuelle */
01312             win[index].w_curr.g_w = w = win[index].w_wmaxi;     /* si les coordonn‚es */
01313         if (win[index].w_curr.g_h > win[index].w_hmaxi)         /* de d‚part sont sup‚rieures */
01314             win[index].w_curr.g_h = h = win[index].w_hmaxi;     /* aux maximales. */
01315         temp = win[index].w_fen[BW_WORK].ob_state & 0x0FFF;
01316         win[index].w_fen[BW_WORK].ob_state = (temp | (pattern << 12));
01317         temp = win[index].w_fen[BW_WORK].ob_state & 0xF0FF;
01318         win[index].w_fen[BW_WORK].ob_state = (temp | (colorp << 8));
01319
01320         if (type == WTYP_PICT)
01321         {       /* Si fenˆtre image : pas plus grande que la taille totale */
01322             oldw = win[index].w_fen->ob_width;
01323             oldh = win[index].w_fen->ob_height;
01324             bwind_calc (WC_WORK, attr, bar, ZERO,
01325                                     win[index].w_curr.g_x, win[index].w_curr.g_y,
01326                                     win[index].w_curr.g_w, win[index].w_curr.g_h,
01327                                     &xw, &yw, &ww, &hw);
01328             if (ww > wt)
01329                 ww = (int)wt;
01330             if (hw > ht)
01331                 hw = (int)ht;
01332             bwind_calc (WC_BORDER, attr, bar, ZERO,
01333                                     xw, yw, ww, hw,
01334                                     &win[index].w_curr.g_x, &win[index].w_curr.g_y,
01335                                     &win[index].w_curr.g_w, &win[index].w_curr.g_h);
01336             wind_set (win[index].w_hg, WF_CURRXYWH,
01337                                 win[index].w_curr.g_x, win[index].w_curr.g_y,
01338                                 win[index].w_curr.g_w, win[index].w_curr.g_h);
01339             win[index].w_fen->ob_width = win[index].w_curr.g_w;
01340             win[index].w_fen->ob_height = win[index].w_curr.g_h;
01341             resize (index, win[index].w_curr.g_w - oldw, win[index].w_curr.g_h - oldh);
01342             retrace = TRUE;
01343         }
01344
01345         wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
01346         if (top != win[index].w_hg)
01347         {
01348             dummy = buf[3];
01349             buf[3] = win[index].w_hg;
01350             (*win[index].w_top)();
01351             buf[3] = dummy;
01352         }
01353         print_page (index);
01354         ok = TRUE;
01355     }
01356
01357     if (ok)                     /* Si la fenˆtre est ouverte */
01358     {
01359         id_top = index;                 /* Elle passe au premier plan */
01360         height_sliders (index, FALSE);  /* R‚gler taille sliders */
01361         if (retrace)
01362             print_wind (index);
01363
01364         if (((win[index].w_type & 0xFF) == WTYP_PICT)
01365         || ((win[index].w_type & 0xFF) == WTYP_FORM))
01366             set_palette (index);
01367         else
01368             set_palette (BLANK);
01369
01370         wind_mouse ();
01371     }
01372     else
01373         big_alert (1, BLANK, bi_frstr[NOT_WINDOW], TRUE);
01374
01375     return ok;
01376 }
01377 /* #] open_window () Ouvre une fenˆtre :                                                    */
01378 /* #[ find_index () Cherche index BIG fenˆtre GEM :                             */
01391 int find_index (int wh)
01392 {
01393 register int i = ZERO;
01394
01395     if (wh == ZERO)
01396         return BLANK;
01397
01398     if (wh > ZERO)  /* Si on cherche une fenˆtre */
01399     {
01400         do
01401         {
01402             if (wh == win[i].w_hg)
01403                 return i;
01404         } while (NOT (win[i++].w_flags & WFLAST));
01405     }
01406     else                        /* Si on cherche premiŠre fenˆtre libre */
01407     {
01408         do
01409         {
01410             if (win[i].w_hg == BLANK)
01411                 return i;
01412         } while (NOT (win[i++].w_flags & WFLAST));
01413     }
01414     return BLANK;
01415 }
01416 /* #] find_index () Cherche index BIG fenˆtre GEM :                             */
01417 /* #[ find_window () Cherche si on est dans la zone de travail :    */
01429 int find_window (int mx, int my)
01430 {
01431 int xw, yw, ww, hw, fenetre, index;
01432
01433     fenetre = wind_find (mx, my);   /* On a cliqu‚ sur une fenˆtre ? */
01434     if (fenetre)                                        /* Si oui */
01435     {
01436         index = find_index (fenetre);                           /* Prendre l'index */
01437         if (index > BLANK)
01438         {
01439             zone_work (index, &xw, &yw, &ww, &hw);      /* Zone de travail */
01440             if ((mx > xw) && (mx < (xw + ww)))              /* Si on a cliqu‚ */
01441                 if ((my > yw) && (my < (yw + hw)))          /* dans la zone */
01442                     return fenetre;                                             /* retourner Handle GEM */
01443         }
01444     }
01445     return FALSE;                                                               /* Sinon FALSE */
01446 }
01447 /* #] find_window () Cherche si on est dans la zone de travail :    */
01448 /* #[ zone_work () Retourne la zone de travail :                                    */
01465 void zone_work (int index, int *xw, int *yw, int *ww, int *hw)
01466 {
01467     if (win[index].w_icon == BLANK)
01468     {
01469         bwind_calc (WC_WORK, win[index].w_attr,
01470                                  BLANK, win[index].w_bar,
01471                                  win[index].w_curr.g_x, win[index].w_curr.g_y,
01472                                  win[index].w_curr.g_w, win[index].w_curr.g_h,
01473                                  xw, yw, ww, hw);
01474         if ((win[index].w_type & WTYP_TOOL) || (win[index].w_type & WTYP_MENU))
01475         {
01476             (*yw)++;
01477             (*hw)--;
01478         }
01479     }
01480     else
01481     {
01482         wind_get (win[index].w_hg, WF_WORKXYWH, xw, yw, ww, hw);
01483         *yw += win[index].w_fen[BW_MOVER].ob_height;
01484         *hw -= win[index].w_fen[BW_MOVER].ob_height;
01485         if ((win[index].w_bar) && (NOT win[index].w_redicn))
01486         {
01487             *yw += win[index].w_fen[BW_BARRE].ob_height;
01488             *hw -= win[index].w_fen[BW_BARRE].ob_height;
01489         }
01490     }
01491 }
01492 /* #] zone_work () Retourne la zone de travail :                                    */
01493 /* #[ wind_mouse () Ajuste les ‚v‚nement de zone souris :                   */
01494 void wind_mouse (void)
01495 {
01496 int top, index, dummy;
01497
01498     wind_get (0, WF_TOP, &top, &dummy, &dummy, &dummy);
01499     if (top)
01500     {
01501         index = find_index (top);
01502         if ((index > BLANK) && (win[index].w_mouse) && (win[index].w_icon == BLANK))
01503         {
01504             mouse.m_out = ZERO;
01505             zone_work (index, &mouse.m_x, &mouse.m_y, &mouse.m_w, &mouse.m_h);
01506             return;
01507         }
01508     }
01509     mouse.m_out = ZERO;
01510     mouse.m_x = mouse.m_y = mouse.m_w = mouse.m_h = ZERO;
01511     graf_mouse (ARROW, ZERO);                           /* Souris -> Flˆche */
01512 }
01513 /* #] wind_mouse () Ajuste les ‚v‚nement de zone souris :                   */
01514 /* #[ height_vert () Taille slider vertical :                                           */
01527 void height_vert (int index, int fredraw)
01528 {
01529 int xw, yw, ww, hw, ha, hs, hcell, mini, dummy;
01530
01531     zone_work (index, &xw, &yw, &ww, &hw);  /* Coordonn‚es zone de travail */
01532     ha = win[index].w_fen[BW_VELEV].ob_height;  /* Hauteur ascenseur */
01533     hs = (int)((long)ha * (long)hw / (long)win[index].w_htot);
01534     vst_height (work_display.handle, work_display.hc, &dummy, &dummy, &dummy, &hcell);
01535     mini = hcell > 8 ? 16 : 8;
01536     if (hs < mini)
01537         hs = mini;
01538     if (hs > ha)
01539         hs = ha;
01540     win[index].w_fen[BW_VSLIDE].ob_height = hs;
01541
01542     win[index].w_lin = min (win[index].w_lin, win[index].w_htot - hw);
01543     win[index].w_lin = max (ZERO, win[index].w_lin);
01544
01545     if ((win[index].w_type & 0xFF) != WTYP_NORM)
01546         if (win[index].w_lin + hw > win[index].w_htot)
01547             win[index].w_lin = win[index].w_htot - hw;
01548     if (fredraw)
01549         draw_obj (win[index].w_fen, BW_VELEV);
01550 }
01551 /* #] height_vert () Taille slider vertical :                                           */
01552 /* #[ height_hori () Taille slider horizontal :                                     */
01565 void height_hori (int index, int fredraw)
01566 {
01567 int xw, yw, ww, hw, wa, ws;
01568
01569     zone_work (index, &xw, &yw, &ww, &hw);
01570     wa = win[index].w_fen[BW_HELEV].ob_width;   /* Largeur ascenseur */
01571     ws = (int)((long)wa * (long)ww / (long)win[index].w_wtot);
01572     if (ws < 16)
01573         ws = 16;
01574     if (ws > wa)
01575         ws = wa;
01576     win[index].w_fen[BW_HSLIDE].ob_width = ws;
01577
01578     win[index].w_col = min (win[index].w_col, win[index].w_wtot - ww);
01579     win[index].w_col = max (ZERO, win[index].w_col);
01580
01581     if ((win[index].w_type & 0xFF) != WTYP_NORM)
01582         if (win[index].w_col + ww > win[index].w_wtot)
01583             win[index].w_col = win[index].w_wtot - ww;
01584     if (fredraw)
01585         draw_obj (win[index].w_fen, BW_HELEV);
01586 }
01587 /* #] height_hori () Taille slider horizontal :                                     */
01588 /* #[ posi_vert () Pos. slider vertical :                                                   */
01601 void posi_vert (int index, int fredraw)
01602 {
01603 int xw, yw, ww, hw, ha, slide;
01604
01605     zone_work (index, &xw, &yw, &ww, &hw);
01606
01607     if (win[index].w_htot > hw)
01608     {
01609         ha = win[index].w_fen[BW_VELEV].ob_height - /* Hauteur ascenseur */
01610                  win[index].w_fen[BW_VSLIDE].ob_height;
01611         slide = (int)((long)win[index].w_lin * (long)ha /
01612                         (long)(win[index].w_htot - hw));
01613         slide = max (min (slide, ha), ZERO);
01614     }
01615     else
01616         slide = ZERO;
01617
01618     win[index].w_fen[BW_VSLIDE].ob_y = slide;
01619     if (fredraw)
01620         draw_obj (win[index].w_fen, BW_VELEV);
01621 }
01622 /* #] posi_vert () Pos. slider vertical :                                                   */
01623 /* #[ posi_hori () Pos. slider horizontal :                                             */
01636 void posi_hori (int index, int fredraw)
01637 {
01638 int xw, yw, ww, hw, wa, slide;
01639
01640     zone_work (index, &xw, &yw, &ww, &hw);
01641
01642     if (win[index].w_wtot > ww)
01643     {
01644         wa = win[index].w_fen[BW_HELEV].ob_width -  /* Largeur ascenseur */
01645                  win[index].w_fen[BW_HSLIDE].ob_width;
01646         slide = (int)((long)win[index].w_col * (long)wa /
01647                         (long)(win[index].w_wtot - ww));
01648         slide = max (min (slide, wa), ZERO);
01649     }
01650     else
01651         slide = ZERO;
01652
01653     win[index].w_fen[BW_HSLIDE].ob_x = slide;
01654     if (fredraw)
01655         draw_obj (win[index].w_fen, BW_HELEV);
01656 }
01657 /* #] posi_hori () Pos. slider horizontal :                                             */
01658 /* #[ height_sliders () taille/Position sliders :                               */
01675 void height_sliders (int index, int fredraw)
01676 {
01677     if (win[index].w_hg <= ZERO)
01678         return;
01679     if (win[index].w_attr & VSLIDE)
01680     {
01681         height_vert (index, FALSE);
01682         posi_vert (index, FALSE);
01683         if (fredraw)
01684             draw_obj (win[index].w_fen, BW_VELEV);
01685     }
01686     if (win[index].w_attr & HSLIDE)
01687     {
01688         height_hori (index, FALSE);
01689         posi_hori (index, FALSE);
01690         if (fredraw)
01691             draw_obj (win[index].w_fen, BW_HELEV);
01692     }
01693 }
01694 /* #] height_sliders () taille/Position sliders :                               */
01695 /* #[ draw_object () Dessin objet dans fenˆtre formulaire :             */
01709 void draw_object (int object, int index)
01710 {
01711 GRECT rd, r, z;
01712 OBJECT *adr;
01713
01714     if (win[index].w_hg <= ZERO)
01715         return;
01716     if ((win[index].w_type & WTYP_MENU) || (win[index].w_type & WTYP_TOOL))
01717         adr = win[index].w_bar;
01718     else if (win[index].w_type == WTYP_FORM)
01719         adr = win[index].w_cont.w_form.w_tree;
01720
01721     wind_get (win[index].w_hg, WF_FIRSTXYWH,
01722                         &rd.g_x, &rd.g_y, &rd.g_w, &rd.g_h);
01723     objc_offset (adr, object, &r.g_x, &r.g_y);
01724     r.g_w = adr[object].ob_width;
01725     r.g_h = adr[object].ob_height;
01726     if (win[index].w_type == WTYP_FORM)
01727         zone_work (index, &z.g_x, &z.g_y, &z.g_w, &z.g_h);
01728     else if ((win[index].w_type & WTYP_MENU) || (win[index].w_type & WTYP_TOOL))
01729         wind_get (win[index].w_hg, WF_WORKXYWH, &z.g_x, &z.g_y, &z.g_w, &z.g_h);
01730     while((rd.g_w > ZERO) && (rd.g_h > ZERO))
01731     {
01732         if (rc_intersect (&r, &rd))
01733         {
01734             rc_intersect (&z, &rd);
01735             if ((rd.g_w > ZERO) && (rd.g_h > ZERO))
01736                 objc_draw (adr, ROOT, MAX_DEPTH, rd.g_x, rd.g_y, rd.g_w, rd.g_h);
01737         }
01738         wind_get (win[index].w_hg, WF_NEXTXYWH,
01739                         &rd.g_x, &rd.g_y, &rd.g_w, &rd.g_h);
01740     }
01741 }
01742 /* #] draw_object () Dessin objet dans fenˆtre formulaire :             */
01743 /* #[ print_line () Affiche une ligne :                                                     */
01744 void print_line (int f, int index)
01745 {
01746 int xw, yw, ww, hw;
01747
01748     zone_work (index, &xw, &yw, &ww, &hw);
01749     if (xw < bureau.xd)
01750     {
01751         ww -= (bureau.xd - xw);
01752         xw = bureau.xd;
01753     }
01754     yw = max (yw, bureau.yd);
01755     ww = min (ww, bureau.xd + bureau.wd - xw);
01756     hw = min (hw, bureau.yd + bureau.hd - yw);
01757
01758     buf[4] = xw;
01759     if (f)
01760         buf[5] = yw + hw - win[index].w_hunit;
01761     else
01762         buf[5] = yw + win[index].w_vprot;
01763     buf[6] = ww;
01764     buf[7] = win[index].w_hunit;
01765
01766     buf[3] = win[index].w_hg;
01767     redraw ();
01768 }
01769 /* #] print_line () Affiche une ligne :                                                     */
01770 /* #[ print_colum () Affiche une colonne :                                              */
01771 void print_colum (int f, int index)
01772 {
01773 int xw, yw, ww, hw;
01774
01775     zone_work (index, &xw, &yw, &ww, &hw);
01776     if (xw < bureau.xd)
01777     {
01778         ww -= (bureau.xd - xw);
01779         xw = bureau.xd;
01780     }
01781     yw = max (yw, bureau.yd);
01782     ww = min (ww, bureau.xd + bureau.wd - xw);
01783     hw = min (hw, bureau.yd + bureau.hd - yw);
01784
01785     if (f)
01786         buf[4] = xw + ww - win[index].w_wunit;
01787     else
01788         buf[4] = xw + win[index].w_hprot;
01789     buf[5] = yw;
01790     buf[6] = win[index].w_wunit;
01791     buf[7] = hw;
01792
01793     buf[3] = win[index].w_hg;
01794     redraw ();
01795 }
01796 /* #] print_colum () Affiche une colonne :                                              */
01797 /* #[ print_page () Affiche une page (zone de travail) :                    */
01823 void print_page (int index)
01824 {
01825 int xw, yw, ww, hw;
01826
01827     if (win[index].w_hg <= ZERO)
01828         return;
01829     zone_work (index, &xw, &yw, &ww, &hw);  /* Zone de travail fenˆtre */
01830     buf[3] = win[index].w_hg;       /* Remplir le buffer d'‚v‚nements */
01831     buf[4] = xw;
01832     buf[5] = yw;
01833     buf[6] = ww;
01834     buf[7] = hw;
01835     redraw ();                                  /* Appel redraw */
01836 }
01837 /* #] print_page () Affiche une page (zone de travail) :                    */
01838 /* #[ print_wind () R‚affiche une fenˆtre entiŠre :                             */
01839 void print_wind (int index)
01840 {
01841     if (win[index].w_hg <= ZERO)
01842         return;
01843     buf[3] = win[index].w_hg;       /* Remplir le buffer d'‚v‚nements */
01844     buf[4] = win[index].w_curr.g_x;
01845     buf[5] = win[index].w_curr.g_y;
01846     buf[6] = win[index].w_curr.g_w;
01847     buf[7] = win[index].w_curr.g_h;
01848     redraw ();                                  /* Appel redraw */
01849 }
01850 /* #] print_wind () R‚affiche une fenˆtre entiŠre :                             */
01851 /* #[ next_wind () Cycle vers fenˆtre suivante :                                    */
01861 void    next_wind (void)
01862 {
01863 int i, index;
01864
01865     index = find_index (buf[3]);
01866     if (NOT (win[index].w_flags & WFLAST))
01867         i = index + 1;      /* Partir de la fenˆtre suivante */
01868     else
01869         i = ZERO;
01870     do
01871     {
01872         if (win[i].w_hg > ZERO)
01873         {               /* La 1ø fenˆtre trouv‚e est mise au 1ø plan */
01874             buf[3] = win[i].w_hg;
01875             (*win[i].w_top)();
01876
01877             if ( ((win[i].w_type & 0xFF) == WTYP_PICT)
01878                 || ((win[index].w_type & 0xFF) == WTYP_FORM))
01879                 set_palette (i);
01880             else
01881                 set_palette (BLANK);
01882
01883             wind_mouse ();
01884             i = index - 1;      /* Pour sortir de la boucle */
01885         }
01886         else if (win[i].w_flags & WFLAST)       /* Si on arrive au bout, */
01887             i = BLANK;                                              /* repartir du d‚but. */
01888     } while (++i != index);
01889 }
01890 /* #] next_wind () Cycle vers fenˆtre suivante :                                    */
01891
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG2WIND.H Source File

BIG2WIND.H

Go to the documentation of this file.
00001 /*  BIG2WIND.H */
00002
00003 /* #[ Variables globales : */
00004 extern MOBLK mouse;
00005 extern int ap_id;
00006 extern int event;
00007 extern int buf[];
00008 extern int mk;
00009 extern t_display work_display;
00010 extern t_desktop bureau;
00011 extern OBJECT *scroll;
00012 extern OBJECT **ir_trindex;
00013 extern FNCP *fnc;
00014 extern BigWind  *win;
00015
00016 #include "BIG2INCL.H"
00017 extern char *bi_frstr[];
00018 extern OBJECT *bi_trindex[];
00019 /* #] Variables globales : */
00020 /* #[ Prototypage des fonctions : */
00021 void    dcl_windows (int nbre);
00022 void    create_wmenu (int tree, int index);
00023 int     menu_window (int index, int xm, int ym);
00024 int     wind_hierarch (OBJECT *adr, int index, int option);
00025 void    wind_mouse (void);
00026 void    print_line (int f, int index);
00027 void    print_colum (int f, int index);
00028 void    print_wind (int index);
00029 /* #] Prototypage des fonctions : */
00030
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: BIG_IMGS.H Source File

BIG_IMGS.H

Go to the documentation of this file.
00001 #include <big2.h>
00002
00003 /* Fonction de chargement et dispatching */
00004 int load_image (char *fichier, MFDB *imag);
00005
00006 /* Fonctions par formats d'image */
00007 int load_img (char *fichier, MFDB *imag);
00008 int load_pac (char *fichier, MFDB *imag);
00009 int load_pix (char *fichier, MFDB *imag);
00010 int load_pcx (char *fichier, MFDB *imag);
00011
00012 /* Fonction de d‚compactage et de lien avec un objet B_PICT */
00013 int img_attach (t_image_dial *bimg, char *fichier, int tree, int obj, int fcenterw, int fcenterh);
00014
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: big2hdoc.h Source File

big2hdoc.h

Go to the documentation of this file.
00001 /* ----- doxygen documentation of big2.h -----
00002
00003 In order not to overload the big2.h file with doxygen documentation I have created
00004 this file that only contains complementary information for big2.h
00005 */
00006
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: bigdemo.dox File Reference

bigdemo.dox File Reference

Generated on Tue Mar 9 22:42:19 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Alphabetical List

  • Data Fields

Data Structure Index

B | C | F | O | T | W
B
COOKIE Obj_user t_desktop t_image_dial
BigWind
F
Oldw t_display
W
C
Form
T
t_ident_hard_soft Win_user
Cont
O
B | C | F | O | T | W
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: d_atari.c Source File

d_atari.c

Go to the documentation of this file.
00001 /* dummy file for windows to link correctly */
00002 #ifdef WIN32
00003 #define cdecl
00004 #pragma warning(disable : 4996)                 /* disable deprecated function */
00005 #endif
00006
00007 #include <aes.h>
00008
00009 /* AES */
00010 int  vq_aes( void ){return 1;}
00011 void _crystal( AESPB *aespb ){return;}
00012
00013 int appl_init( void ) {return 1;}
00014 int appl_read( int ap_rid, int ap_rlength, void *ap_rpbuff ) {return 1;}
00015 int appl_write( int ap_wid, int ap_wlength, void *ap_wpbuff ) {return 1;}
00016 int appl_find( const char *ap_fpname ) {return 1;}
00017 int appl_tplay( void *ap_tpmem, int ap_tpnum, int ap_tpscale ) {return 1;}
00018 int appl_trecord( void *ap_trmem, int ap_trcount ) {return 1;}
00019 int appl_exit( void ) {return 1;}
00020 int appl_search( int ap_smode, char *ap_sname, int *ap_stype,
00021                  int *ap_sid ) {return 1;}
00022 int appl_getinfo( int ap_gtype, int *ap_gout1, int *ap_gout2,
00023                   int *ap_gout3, int *ap_gout4 ) {return 1;}
00024
00025 int evnt_keybd( void ) {return 1;}
00026 int evnt_button( int ev_bclicks, int ev_bmask, int ev_bstate,
00027                  int *ev_bmx, int *ev_bmy, int *ev_bbutton,
00028                  int *ev_bkstate ) {return 1;}
00029 int evnt_mouse( int ev_moflags, int ev_mox, int ev_moy,
00030                 int ev_mowidth, int ev_moheight, int *ev_momx,
00031                 int *ev_momy, int *ev_mobutton,
00032                 int *ev_mokstate ) {return 1;}
00033 int evnt_mesag( int *ev_mgpbuff ) {return 1;}
00034 int evnt_timer( int ev_tlocount, int ev_thicount ) {return 1;}
00035 int evnt_multi( int ev_mflags, int ev_mbclicks, int ev_mbmask,
00036                 int ev_mbstate, int ev_mm1flags, int ev_mm1x,
00037                 int ev_mm1y, int ev_mm1width, int ev_mm1height,
00038                 int ev_mm2flags, int ev_mm2x, int ev_mm2y,
00039                 int ev_mm2width, int ev_mm2height,
00040                 int *ev_mmgpbuff, int ev_mtlocount,
00041                 int ev_mthicount, int *ev_mmox, int *ev_mmoy,
00042                 int *ev_mmbutton, int *ev_mmokstate,
00043                 int *ev_mkreturn, int *ev_mbreturn ) {return 1;}
00044 int evnt_dclick( int ev_dnew, int ev_dgetset ) {return 1;}
00045
00046 int menu_bar( OBJECT *me_btree, int me_bshow ) {return 1;}
00047 int menu_icheck( OBJECT *me_ctree, int me_citem, int me_ccheck ) {return 1;}
00048 int menu_ienable( OBJECT *me_etree, int me_eitem,
00049                   int me_eenable ) {return 1;}
00050 int menu_tnormal( OBJECT *me_ntree, int me_ntitle,
00051                   int me_nnormal ) {return 1;}
00052 int menu_text( OBJECT *me_ttree, int me_titem,
00053                const char *me_ttext ) {return 1;}
00054 int menu_register( int me_rapid, const char *me_rpstring ) {return 1;}
00055 int menu_popup( MENU *me_menu, int me_xpos, int me_ypos,
00056                 MENU *me_mdata ) {return 1;}
00057 int menu_attach( int me_flag, OBJECT *me_tree, int me_item,
00058                  MENU *me_mdata ) {return 1;}
00059 int menu_istart( int me_flag, OBJECT *me_tree, int me_imenu,
00060                  int me_item ) {return 1;}
00061 int menu_settings( int me_flag, MN_SET *me_values ) {return 1;}
00062
00063 int objc_add( OBJECT *ob_atree, int ob_aparent, int ob_achild ) {return 1;}
00064 int objc_delete( OBJECT *ob_dltree, int ob_dlobject ) {return 1;}
00065 int objc_draw( OBJECT *ob_drtree, int ob_drstartob,
00066                int ob_drdepth, int ob_drxclip, int ob_dryclip,
00067                int ob_drwclip, int ob_drhclip ) {return 1;}
00068 int objc_find( OBJECT *ob_ftree, int ob_fstartob, int ob_fdepth,
00069                int ob_fmx, int ob_fmy ) {return 1;}
00070 int objc_offset( OBJECT *ob_oftree, int ob_ofobject,
00071                  int *ob_ofxoff, int *ob_ofyoff ) {return 1;}
00072 int objc_order( OBJECT *ob_ortree, int ob_orobject,
00073                 int ob_ornewpos ) {return 1;}
00074 int objc_edit( OBJECT *ob_edtree, int ob_edobject,
00075                int ob_edchar, int *ob_edidx, int ob_edkind ) {return 1;}
00076 int objc_change( OBJECT *ob_ctree, int ob_cobject,
00077                  int ob_cresvd, int ob_cxclip, int ob_cyclip,
00078                  int ob_cwclip, int ob_chclip,
00079                  int ob_cnewstate, int ob_credraw ) {return 1;}
00080
00081 int form_do( OBJECT *fo_dotree, int fo_dostartob ) {return 1;}
00082 int form_dial( int fo_diflag, int fo_dilittlx,
00083                int fo_dilittly, int fo_dilittlw,
00084                int fo_dilittlh, int fo_dibigx,
00085                int fo_dibigy, int fo_dibigw, int fo_dibigh ) {return 1;}
00086 int form_alert( int fo_adefbttn, const char *fo_astring ) {return 1;}
00087 int form_error( int fo_enum ) {return 1;}
00088 int form_center( OBJECT *fo_ctree, int *fo_cx, int *fo_cy,
00089                  int *fo_cw, int *fo_ch ) {return 1;}
00090 int form_keybd( OBJECT *fo_ktree, int fo_kobject, int fo_kobnext,
00091                 int fo_kchar, int *fo_knxtobject, int *fo_knxtchar ) {return 1;}
00092 int form_button( OBJECT *fo_btree, int fo_bobject, int fo_bclicks,
00093                 int *fo_bnxtobj ) {return 1;}
00094
00095 int graf_rubberbox( int gr_rx, int gr_ry, int gr_minwidth,
00096                     int gr_minheight, int *gr_rlastwidth,
00097                     int *gr_rlastheight ) {return 1;}
00098 int graf_rubbox( int gr_rx, int gr_ry, int gr_minwidth,
00099                     int gr_minheight, int *gr_rlastwidth,
00100                     int *gr_rlastheight ) {return 1;}
00101 int graf_dragbox( int gr_dwidth, int gr_dheight,
00102                   int gr_dstartx, int gr_dstarty,
00103                   int gr_dboundx, int gr_dboundy,
00104                   int gr_dboundw, int gr_dboundh,
00105                   int *gr_dfinishx, int *gr_dfinishy ) {return 1;}
00106 int graf_movebox( int gr_mwidth, int gr_mheight,
00107                   int gr_msourcex, int gr_msourcey,
00108                   int gr_mdestx, int gr_mdesty ) {return 1;}
00109 int graf_mbox( int gr_mwidth, int gr_mheight,
00110                   int gr_msourcex, int gr_msourcey,
00111                   int gr_mdestx, int gr_mdesty ) {return 1;}
00112 int graf_growbox( int gr_gstx, int gr_gsty,
00113                   int gr_gstwidth, int gr_gstheight,
00114                   int gr_gfinx, int gr_gfiny,
00115                   int gr_gfinwidth, int gr_gfinheight ) {return 1;}
00116 int graf_shrinkbox( int gr_sfinx, int gr_sfiny,
00117                     int gr_sfinwidth, int gr_sfinheight,
00118                     int gr_sstx, int gr_ssty,
00119                     int gr_sstwidth, int gr_sstheight ) {return 1;}
00120 int graf_watchbox( OBJECT *gr_wptree, int gr_wobject,
00121                    int gr_winstate, int gr_woutstate) {return 1;}
00122 int graf_slidebox( OBJECT *gr_slptree, int gr_slparent,
00123                    int gr_slobject, int gr_slvh ) {return 1;}
00124 int graf_handle( int *gr_hwchar, int *gr_hhchar,
00125                  int *gr_hwbox, int *gr_hhbox ) {return 1;}
00126 int graf_mouse( int gr_monumber, MFORM *gr_mofaddr ) {return 1;}
00127 int graf_mkstate( int *gr_mkmx, int *gr_mkmy,
00128                   int *gr_mkmstate, int *gr_mkkstate ) {return 1;}
00129
00130 int scrp_read( char *sc_rpscrap ) {return 1;}
00131 int scrp_write( char *sc_wpscrap ) {return 1;}
00132
00133 int fsel_input( char *fs_iinpath, char *fs_iinsel,
00134                 int *fs_iexbutton ) {return 1;}
00135 int fsel_exinput( char *fs_einpath, char *fs_einsel,
00136                 int *fs_eexbutton, char *fs_elabel ) {return 1;}
00137
00138 int wind_create( int wi_crkind, int wi_crwx, int wi_crwy,
00139                  int wi_crww, int wi_crwh ) {return 1;}
00140 int wind_open( int wi_ohandle, int wi_owx, int wi_owy,
00141                int wi_oww, int wi_owh ) {return 1;}
00142 int wind_close( int wi_clhandle ) {return 1;}
00143 int wind_delete( int wi_dhandle ) {return 1;}
00144 int wind_get( int wi_ghandle, int wi_gfield, ... ) {return 1;}
00145 int wind_set( int wi_shandle, int wi_sfield, ... ) {return 1;}
00146 int wind_find( int wi_fmx, int wi_fmy ) {return 1;}
00147 int wind_update( int wi_ubegend ) {return 1;}
00148 int wind_calc( int wi_ctype, int wi_ckind, int wi_cinx,
00149                int wi_ciny, int wi_cinw, int wi_cinh,
00150                int *coutx, int *couty, int *coutw,
00151                int *couth ) {return 1;}
00152 void wind_new( void ) {return;}
00153
00154 int rsrc_load( const char *re_lpfname ) {return 1;}
00155 int rsrc_free( void ) {return 1;}
00156 int rsrc_gaddr( int re_gtype, int re_gindex, void *gaddr ) {return 1;}
00157 int rsrc_saddr( int re_stype, int re_sindex, void *saddr ) {return 1;}
00158 int rsrc_obfix( OBJECT *re_otree, int re_oobject ) {return 1;}
00159 int rsrc_rcfix( RSHDR *rc_header ) {return 1;}
00160
00161 int shel_read( char *sh_rpcmd, char *sh_rptail ) {return 1;}
00162 int shel_write( int sh_wdoex, int sh_wisgr, int sh_wiscr,
00163                 char *sh_wpcmd, char *sh_wptail ) {return 1;}
00164 int shel_get( char *sh_gaddr, int sh_glen ) {return 1;}
00165 int shel_put( char *sh_paddr, int sh_plen ) {return 1;}
00166 int shel_find( char *sh_fpbuff ) {return 1;}
00167 int shel_envrn( char **sh_epvalue, char *sh_eparm ) {return 1;}
00168
00169 #include <tos.h>
00170 /* TOS*/
00171
00172 long    gemdos(U32) {return 1;}
00173 long    bios(U32) {return 1;}
00174 long    xbios(U32) {return 1;}
00175
00176 void    Pterm0( void ) {return;}
00177 long    Cconin( void ) {return 1;}
00178 void    Cconout( int c ) {return;}
00179 int     Cauxin( void ) {return 1;}
00180 void    Cauxout( int c ) {return;}
00181 int     Cprnout( int c ) {return 1;}
00182 long    Crawio( int w ) {return 1;}
00183 long    Crawcin( void ) {return 1;}
00184 long    Cnecin( void ) {return 1;}
00185 int     Cconws( const char *buf ) {return 1;}
00186 void    Cconrs( LINE *buf ) {return;}
00187 int     Cconis( void ) {return 1;}
00188 long    Dsetdrv( int drv ) {return 1;}
00189 int     Cconos( void ) {return 1;}
00190 int     Cprnos( void ) {return 1;}
00191 int     Cauxis( void ) {return 1;}
00192 int     Cauxos( void ) {return 1;}
00193 int     Dgetdrv( void ) {return 1;}
00194 void    Fsetdta( DTA *buf ) {return;}
00195 long    Super( void *stack ) {return 1;}
00196 unsigned int  Tgetdate( void ) {return 1;}
00197 unsigned int Tsetdate( unsigned int date ) {return 1;}
00198 unsigned int  Tgettime( void ) {return 1;}
00199 unsigned int  Tsettime( unsigned int time ) {return 1;}
00200 DTA     *Fgetdta( void ) {return (DTA*)1;}
00201 int     Sversion( void ) {return 1;}
00202 void    Ptermres( long keepcnt, int retcode ) {return;}
00203 int     Dfree( DISKINFO *buf, int driveno ) {return 1;}
00204 int     Dcreate( const char *path ) {return 1;}
00205 int     Ddelete( const char *path ) {return 1;}
00206 int     Dsetpath( const char *path ) {return 1;}
00207 long    Fcreate( const char *filename, int attr ) {return 1;}
00208 long    Fopen( const char *filename, int mode ) {return 1;}
00209 int     Fclose( int handle ) {return 1;}
00210 long    Fread( int handle, long count, void *buf ) {return 1;}
00211 long    Fwrite( int handle, long count, void *buf ) {return 1;}
00212 int     Fdelete( const char *filename ) {return 1;}
00213 long    Fseek( long offset, int handle, int seekmode ) {return 1;}
00214 int     Fattrib( const char *filename, int wflag, int attrib ) {return 1;}
00215 long    Fdup( int handle ) {return 1;}
00216 int     Fforce( int stch, int nonstdh ) {return 1;}
00217 int     Dgetpath( char *path, int driveno ) {return 1;}
00218 void    *Malloc( long number ) {return (void*)1;}
00219 int     Mfree( void *block ) {return 1;}
00220 int     Mshrink( int zero, void *block, long newsiz ) {return 1;}
00221 long    Pexec( int mode, char *ptr1, void *ptr2, void *ptr3 ) {return 1;}
00222 void    Pterm( int retcode ) {return;}
00223 int     Fsfirst( const char *filename, int attr ) {return 1;}
00224 int     Fsnext( void ) {return 1;}
00225 int     Frename( int zero, const char *oldname, const char *newname ) {return 1;}
00226 int     Fdatime( DOSTIME *timeptr, int handle, int wflag ) {return 1;}
00227
00228 void    *Mxalloc( long number, int mode ) {return (void*)0;}
00229 long    Maddalt( void *start, long size ) {return 1;}
00230
00231 long    Flock( int handle, int mode, long start, long length ) {return 1;}
00232
00233 void    Getmpb( MPB *ptr ) {return;}
00234 int     Bconstat( int dev ) {return 1;}
00235 long    Bconin( int dev ) {return 1;}
00236 void    Bconout( int dev, int c ) {return;}
00237 long    Rwabs( int rwflag, void *buf, int cnt, int recnr, int dev ) {return 1;}
00238 void    (*Setexc( int number, void (*exchdlr)() )) () {return (void*)1;}
00239 long    Tickcal( void ) {return 1;}
00240 BPB     *Getbpb( int dev ) {return (BPB*)1;}
00241 long    Bcostat( int dev ) {return 1;}
00242 long    Mediach( int dev ) {return 1;}
00243 long    Drvmap( void ) {return 1;}
00244 long    Kbshift( int mode ) {return 1;}
00245
00246 void    Initmouse( int type, MOUSE *par, void (*mousevec)() ) {return;}
00247 void    *Ssbrk( int count ) {return (void*)1;}
00248 void    *Physbase( void ) {return (void*)1;}
00249 void    *Logbase( void ) {return (void*)1;}
00250 int     Getrez( void ) {return 1;}
00251 void    Setscreen( void *laddr, void *paddr, int rez ) {return;}
00252 void    Setpalette( void *pallptr ) {return;}
00253 int     Setcolor( int colornum, int color ) {return 1;}
00254 int     Floprd( void *buf, void *filler, int devno, int sectno,
00255                int trackno, int sideno, int count ) {return 1;}
00256 int     Flopwr( void *buf, void *filler, int devno, int sectno,
00257                int trackno, int sideno, int count ) {return 1;}
00258 int     Flopfmt( void *buf, void *filler, int devno, int spt, int trackno,
00259                 int sideno, int interlv, long magic, int virgin ) {return 1;}
00260 void    Midiws( int cnt, void *ptr ) {return;}
00261 void    Mfpint( int erno, void (*vector)() ) {return;}
00262 IOREC   *Iorec( int dev ) {return (IOREC*)1;}
00263 long    Rsconf( int baud, int ctr, int ucr, int rsr, int tsr, int scr ) {return 1;}
00264 KEYTAB  *Keytbl( void *unshift, void *shift, void *capslock ) {return (KEYTAB*)1;}
00265 long    Random( void ) {return 1;}
00266 void    Protobt( void *buf, long serialno, int disktype, int execflag ) {return;}
00267 int     Flopver( void *buf, void *filler, int devno, int sectno,
00268                 int trackno, int sideno, int count ) {return 1;}
00269 void    Scrdmp( void ) {return;}
00270 int     Cursconf( int func, int rate ) {return 1;}
00271 void    Settime( unsigned long time ) {return;}
00272 unsigned long  Gettime( void ) {return 1;}
00273 void    Bioskeys( void ) {return;}
00274 void    Ikbdws( int count, void *ptr ) {return;}
00275 void    Jdisint( int number ) {return;}
00276 void    Jenabint( int number ) {return;}
00277 char    Giaccess( char data, int regno ) {return 1;}
00278 void    Offgibit( int bitno ) {return;}
00279 void    Ongibit( int bitno ) {return;}
00280 void    Xbtimer( int timer, int control, int data, void (*vector)() ) {return;}
00281 void    *Dosound( void *buf ) {return (void*)1;}
00282 int     Setprt( int config ) {return 1;}
00283 KBDVBASE *Kbdvbase( void ) {return (KBDVBASE*)1;}
00284 int     Kbrate( int initial, int repeat ) {return 1;}
00285 void    Prtblk( PBDEF *par ) {return;}
00286 void    Vsync( void ) {return;}
00287 long    Supexec( long (*func)() ) {return 1;}
00288 void    Puntaes( void ) {return;}
00289 int     Floprate( int devno, int newrate ) {return 1;}
00290 int     Blitmode( int mode ) {return 1;}
00291
00292 int     DMAread( long sector, int count, void *buffer, int devno ) {return 1;}
00293 int     DMAwrite( long sector, int count, void *buffer, int devno ) {return 1;}
00294 int     NVMaccess( int opcode, int start, int count, void *buffer ) {return 1;}
00295 long    Bconmap( int devno ) {return 1;}
00296 int     Esetshift( int shftMode ) {return 1;}
00297 int     Egetshift( void ) {return 1;}
00298 int     EsetBank( int bankNum ) {return 1;}
00299 int     EsetColor( int colorNum, int color ) {return 1;}
00300 void    EsetPalette( int colorNum, int count, int *palettePtr ) {return;}
00301 void    EgetPalette( int colorNum, int count, int *palettePtr ) {return;}
00302 int     EsetGray( int swtch ) {return 1;}
00303 int     EsetSmear( int swtch ) {return 1;}
00304
00305 int     Syield( void ) {return 1;}
00306 int     Fpipe( int *usrh ) {return 1;}
00307 int     Fcntl( int f, long arg, int cmd ) {return 1;}
00308 long    Finstat( int f ) {return 1;}
00309 long    Foutstat( int f ) {return 1;}
00310 long    Fgetchar( int f, int mode ) {return 1;}
00311 long    Fputchar( int f, long c, int mode ) {return 1;}
00312 long    Pwait( void ) {return 1;}
00313 int     Pnice( int delta ) {return 1;}
00314 int     Pgetpid( void ) {return 1;}
00315 int     Pgetppid( void ) {return 1;}
00316 int     Pgetpgrp( void ) {return 1;}
00317 int     Psetpgrp( int pid, int newgrp ) {return 1;}
00318 int     Pgetuid( void ) {return 1;}
00319 int     Psetuid( int id ) {return 1;}
00320 int     Pkill( int pid, int sig ) {return 1;}
00321 void    *Psignal( int sig, void *handler ) {return (void*)1;}
00322 int     Pvfork( void ) {return 1;}
00323 int     Pgetgid( void ) {return 1;}
00324 int     Psetgid( int id ) {return 1;}
00325 long    Psigblock( long mask ) {return 1;}
00326 long    Psigsetmask( long mask ) {return 1;}
00327 long    Pusrval( long arg ) {return 1;}
00328 int     Pdomain( int newdom ) {return 1;}
00329 void    Psigreturn( void ) {return;}
00330 int     Pfork( void ) {return 1;}
00331 long    Pwait3( int flag, long *rusage ) {return 1;}
00332 int     Fselect( unsigned int timeout, long *rfds, long *wfds, long *xfds ) {return 1;}
00333 void    Prusage( long *r ) {return;}
00334 long    Psetlimit( int lim, long value ) {return 1;}
00335 long    Talarm( long secs ) {return 1;}
00336 void    Pause( void ) {return;}
00337 long    Sysconf( int n ) {return 1;}
00338 long    Psigpending( void ) {return 1;}
00339 long    Dpathconf( char *name, int n ) {return 1;}
00340 long    Pmsg( int mode, long mbox, MSG *msg ) {return 1;}
00341 long    Fmidipipe( int pid, int in, int out ) {return 1;}
00342 int     Prenice( int pid, int delta ) {return 1;}
00343 long    Dopendir( char *name, int flag ) {return 1;}
00344 long    Dreaddir( int buflen, long dir, char *buf ) {return 1;}
00345 long    Drewinddir( long dir ) {return 1;}
00346 long    Dclosedir( long dir ) {return 1;}
00347 long    Fxattr( int flag, char *name, XATTR *buf ) {return 1;}
00348 long    Flink( char *oldname, char *newname ) {return 1;}
00349 long    Fsymlink( char *oldname, char *newname ) {return 1;}
00350 long    Freadlink( int size, char *buf, char *name ) {return 1;}
00351 long    Dcntl( int cmd, char *name, long arg ) {return 1;}
00352 long    Fchown( char *name, int uid, int gid ) {return 1;}
00353 long    Fchmod( char *name, int mode ) {return 1;}
00354 long    Pumask( unsigned int mode ) {return 1;}
00355 long    Psemaphore( int mode, long id, long timeout ) {return 1;}
00356 long    Dlock( int mode, int drive ) {return 1;}
00357 void    Psigpause( unsigned long mask ) {return;}
00358 long    Psigaction( int sig, SIGACTION *act, SIGACTION *oact ) {return 1;}
00359 int     Pgeteuid( void ) {return 1;}
00360 int     Pgetegid( void ) {return 1;}
00361 long    Pwaitpid( int pid, int flag, long *rusage ) {return 1;}
00362
00363 long    locksnd( void ) {return 1;}
00364 long    unlocksnd( void ) {return 1;}
00365 long    soundcmd( int mode, int data ) {return 1;}
00366 long    setbuffer( int reg, void *begaddr, void *endaddr ) {return 1;}
00367 long    setmode( int mode ) {return 1;}
00368 long    settracks( int playtracks, int rectracks ) {return 1;}
00369 long    setmontracks( int montrack ) {return 1;}
00370 long    setinterrupt( int src_inter, int cause ) {return 1;}
00371 long    buffoper( int mode ) {return 1;}
00372 long    dsptristate( int dspxmit, int dsprec ) {return 1;}
00373 long    gpio( int mode, int data ) {return 1;}
00374 long    devconnect( int src, int dst, int srcclk, int prescale,
00375                     int protocol ) {return 1;}
00376 long    sndstatus( int reset ) {return 1;}
00377 long    buffptr( long *ptr ) {return 1;}
00378
00379 int     Dsp_LoadProg( char *file, int ability, char *buffer ) {return 1;}
00380 long    Dsp_LodToBinary( char *file, char *codeptr ) {return 1;}
00381 void    Dsp_DoBlock( char *data_in, long size_in, char *data_out,
00382                      long size_out ) {return;}
00383 void    Dsp_BlkHandShake( char *data_in, long size_in, char *data_out,
00384                           long size_out ) {return;}
00385 void    Dsp_BlkUnpacked( long *data_in, long size_in, long *data_out,
00386                          long size_out ) {return;}
00387 void    Dsp_InStream( char *data_in, long block_size, long num_blocks,
00388                       long *blocks_done ) {return;}
00389 void    Dsp_OutStream( char *data_out, long block_size, long num_blocks,
00390                        long *blocks_done ) {return;}
00391 void    Dsp_IOStream( char *data_in, char *data_out, long block_insize,
00392                       long block_outsize, long num_blocks,
00393                       long *blocks_done ) {return;}
00394 void    Dsp_RemoveInterrupts( int mask ) {return;}
00395 int     Dsp_GetWordSize( void ) {return 1;}
00396 int     Dsp_Lock( void ) {return 1;}
00397 void    Dsp_Unlock( void ) {return;}
00398 void    Dsp_Available( long *xavailable, long *yavailable ) {return;}
00399 int     Dsp_Reserve( long xreserve, long yreserve ) {return 1;}
00400 void    Dsp_ExecProg( char *codeptr, long codesize, int ability ) {return;}
00401 void    Dsp_ExecBoot( char *codeptr, long codesize, int ability ) {return;}
00402 void    Dsp_TriggerHC( int vector ) {return;}
00403 int     Dsp_RequestUniqueAbility( void ) {return 1;}
00404 int     Dsp_GetProgAbility( void ) {return 1;}
00405 void    Dsp_FlushSubroutines( void ) {return;}
00406 int     Dsp_LoadSubroutine( char *codeptr, long codesize, int ability ) {return 1;}
00407 int     Dsp_InqSubrAbility( int ability ) {return 1;}
00408 int     Dsp_RunSubroutine( int handle ) {return 1;}
00409 int     Dsp_Hf0( int flag ) {return 1;}
00410 int     Dsp_Hf1( int flag ) {return 1;}
00411 int     Dsp_Hf2( void ) {return 1;}
00412 int     Dsp_Hf3( void ) {return 1;}
00413 void    Dsp_BlkWords( void *data_in, long size_in, void *data_out,
00414                       long size_out ) {return;}
00415 void    Dsp_BlkBytes( void *data_in, long size_in, void *data_out,
00416                       long size_out ) {return;}
00417 char    Dsp_HStat( void ) {return 1;}
00418 void    Dsp_SetVectors( void (*receiver)( ), long (*transmitter)( )) {return;}
00419 void    Dsp_MultBlocks( long numsend, long numreceive,
00420                         DSPBLOCK *sendblocks, DSPBLOCK *receiveblocks ) {return;}
00421 int     Vsetmode( int modecode ) {return 1;}
00422 int     mon_type( void ) {return 1;}
00423 long    VgetSize( int mode ) {return 1;}
00424 void    VsetSync( int flag ) {return;}
00425 void    VsetRGB( int index, int count, long *array ) {return;}
00426 void    VgetRGB( int index, int count, long *array ) {return;}
00427 void    VsetMask( int ormask, int andmask, int overlay ) {return;}
00428
00429 #include <vdi.h>
00430
00431 void v_opnwk( int *work_in, int *handle, int *work_out) {return;}
00432 void v_clswk( int handle ) {return;}
00433 void v_opnvwk( int *work_in, int *handle, int *work_out) {return;}
00434 void v_clsvwk( int handle ) {return;}
00435 void v_clrwk( int handle ) {return;}
00436 void v_updwk( int handle ) {return;}
00437 int vst_load_fonts( int handle, int select ) {return 1;}
00438 void vst_unload_fonts( int handle, int select ) {return;}
00439 void vs_clip( int handle, int clip_flag, int *pxyarray ) {return;}
00440 void    v_pline( int handle, int count, int *pxyarray ) {return;}
00441 void    v_pmarker( int handle, int count, int *pxyarray ) {return;}
00442 void    v_gtext( int handle, int x, int y, char *string ) {return;}
00443 void    v_fillarea( int handle, int count, int *pxyarray ) {return;}
00444 void    v_cellarray( int handle, int *pxyarray, int row_length,
00445                      int el_used, int num_rows, int wrt_mode,
00446                      int *colarray ) {return;}
00447 void    v_contourfill( int handle, int x, int y, int index ) {return;}
00448 void    vr_recfl( int handle, int *pxyarray ) {return;}
00449 void    v_bar( int handle, int *pxyarray ) {return;}
00450 void    v_arc( int handle, int x, int y, int radius,
00451                int begang, int endang ) {return;}
00452 void    v_pieslice( int handle, int x, int y, int radius,
00453                     int begang, int endang ) {return;}
00454 void    v_circle( int handle, int x, int y, int radius ) {return;}
00455 void    v_ellarc( int handle, int x, int y, int xradius,
00456                   int yradius, int begang, int endang ) {return;}
00457 void    v_ellpie( int handle, int x, int y, int xradius,
00458                   int yradius, int begang, int endang ) {return;}
00459 void    v_ellipse( int handle, int x, int y, int xradius,
00460                    int yradius  ) {return;}
00461 void    v_rbox  ( int handle, int *pxyarray ) {return;}
00462 void    v_rfbox ( int handle, int *pxyarray ) {return;}
00463 void    v_justified( int handle,int x, int y, char *string,
00464                      int length, int word_space,
00465                      int char_space ) {return;}
00466
00467 int     vswr_mode( int handle, int mode ) {return 1;}
00468 void    vs_color( int handle, int index, int *rgb_in ) {return;}
00469 int     vsl_type( int handle, int style ) {return 1;}
00470 void    vsl_udsty( int handle, int pattern ) {return;}
00471 int     vsl_width( int handle, int width ) {return 1;}
00472 int     vsl_color( int handle, int color_index ) {return 1;}
00473 void    vsl_ends( int handle, int beg_style, int end_style ) {return;}
00474 int     vsm_type( int handle, int symbol ) {return 1;}
00475 int     vsm_height( int handle, int height ) {return 1;}
00476 int     vsm_color( int handle, int color_index ) {return 1;}
00477 void    vst_height( int handle, int height, int *char_width,
00478                     int *char_height, int *cell_width,
00479                     int *cell_height ) {return;}
00480 int     vst_point( int handle, int point, int *char_width,
00481                     int *char_height, int *cell_width,
00482                     int *cell_height ) {return 1;}
00483 int     vst_rotation( int handle, int angle ) {return 1;}
00484 int     vst_font( int handle, int font ) {return 1;}
00485 int     vst_color( int handle, int color_index ) {return 1;}
00486 int     vst_effects( int handle, int effect ) {return 1;}
00487 void    vst_alignment( int handle, int hor_in, int vert_in,
00488                        int *hor_out, int *vert_out ) {return;}
00489 int     vsf_interior( int handle, int style ) {return 1;}
00490 int     vsf_style( int handle, int style_index ) {return 1;}
00491 int     vsf_color( int handle, int color_index ) {return 1;}
00492 int     vsf_perimeter( int handle, int per_vis ) {return 1;}
00493 void    vsf_udpat( int handle, int *pfill_pat, int planes ) {return;}
00494
00495 void    vro_cpyfm( int handle, int vr_mode, int *pxyarray,
00496                    MFDB *psrcMFDB, MFDB *pdesMFDB ) {return;}
00497 void    vrt_cpyfm( int handle, int vr_mode, int *pxyarray,
00498                    MFDB *psrcMFDB, MFDB *pdesMFDB,
00499                    int *color_index ) {return;}
00500 void    vr_trnfm( int handle, MFDB *psrcMFDB, MFDB *pdesMFDB ) {return;}
00501 void    v_get_pixel( int handle, int x, int y, int *pel,
00502                      int *index ) {return;}
00503
00504 void    vsin_mode( int handle, int dev_type, int mode ) {return;}
00505 void    vrq_locator( int handle, int x, int y, int *xout,
00506                      int *yout, int *term ) {return;}
00507 int     vsm_locator( int handle, int x, int y, int *xout,
00508                      int *yout, int *term ) {return 1;}
00509 void    vrq_valuator( int handle, int valuator_in,
00510                       int *valuator_out, int *terminator ) {return;}
00511 void    vsm_valuator( int handle, int val_in, int *val_out,
00512                       int *term, int *status ) {return;}
00513 void    vrq_choice( int handle, int ch_in, int *ch_out ) {return;}
00514 int     vsm_choice( int handle, int *choice ) {return 1;}
00515 void    vrq_string( int handle, int max_length, int echo_mode,
00516                     int *echo_xy, char *string ) {return;}
00517 int     vsm_string( int handle, int max_length, int echo_mode,
00518                     int *echo_xy, char *string ) {return 1;}
00519 void    vsc_form( int handle, int *pcur_form ) {return;}
00520 void    vex_timv( int handle, int (*tim_addr)(), int (**otim_addr)(),
00521                   int *tim_conv ) {return;}
00522 void    v_show_c( int handle, int reset ) {return;}
00523 void    v_hide_c( int handle ) {return;}
00524 void    vq_mouse( int handle, int *pstatus, int *x, int *y ) {return;}
00525 void    vex_butv( int handle, int (*pusrcode)(), int (**psavcode)() ) {return;}
00526 void    vex_motv( int handle, int (*pusrcode)(), int (**psavcode)() ) {return;}
00527 void    vex_curv( int handle, int (*pusrcode)(), int (**psavcode)() ) {return;}
00528 void    vq_key_s( int handle, int *pstatus ) {return;}
00529
00530 void    vq_extnd( int handle, int owflag, int *work_out ) {return;}
00531 int     vq_color( int handle, int color_index,
00532                   int set_flag, int *rgb ) {return 1;}
00533 void    vql_attributes( int handle, int *attrib ) {return;}
00534 void    vqm_attributes( int handle, int *attrib ) {return;}
00535 void    vqf_attributes( int handle, int *attrib ) {return;}
00536 void    vqt_attributes( int handle, int *attrib ) {return;}
00537 void    vqt_extent( int handle, char *string, int *extent ) {return;}
00538 int     vqt_width( int handle, int character,
00539                    int *cell_width, int *left_delta,
00540                    int *right_delta ) {return 1;}
00541 int     vqt_name( int handle, int element_num, char *name ) {return 1;}
00542 void    vq_cellarray( int handle, int *pxyarray,
00543                       int row_length, int num_rows,
00544                       int *el_used, int *rows_used,
00545                       int *status, int *colarray ) {return;}
00546 void    vqin_mode( int handle, int dew_type, int *input_mode ) {return;}
00547 void    vqt_fontinfo( int handle, int *minADE, int *maxADE,
00548                       int *distances, int *maxwidth,
00549                       int *effects ) {return;}
00550
00551 void    vq_chcells( int handle, int *rows, int *columns ) {return;}
00552 void    v_exit_cur( int handle ) {return;}
00553 void    v_enter_cur( int handle ) {return;}
00554 void    v_curup( int handle ) {return;}
00555 void    v_curdown( int handle ) {return;}
00556 void    v_curright( int handle ) {return;}
00557 void    v_curleft( int handle ) {return;}
00558 void    v_curhome( int handle ) {return;}
00559 void    v_eeos( int handle ) {return;}
00560 void    v_eeol( int handle ) {return;}
00561 void    vs_curaddress( int handle, int row, int column ) {return;}
00562 void    v_curaddress( int handle, int row, int column ) {return;}
00563 void    v_curtext( int handle, char *string ) {return;}
00564 void    v_rvon( int handle ) {return;}
00565 void    v_rvoff( int handle ) {return;}
00566 void    vq_curaddress( int handle, int *row, int *column ) {return;}
00567 int     vq_tabstatus( int handle ) {return 1;}
00568 void    v_hardcopy( int handle ) {return;}
00569 void    v_dspcur( int handle, int x, int y ) {return;}
00570 void    v_rmcur( int handle ) {return;}
00571 void    v_form_adv( int handle ) {return;}
00572 void    v_output_window( int handle, int *xyarray ) {return;}
00573 void    v_clear_disp_list( int handle ) {return;}
00574 void    v_bit_image( int handle, const char *filename,
00575                      int aspect, int x_scale, int y_scale,
00576                      int h_align, int v_align, int *xyarray ) {return;}
00577 void    vq_scan( int handle, int *g_slice, int *g_page,
00578                  int *a_slice, int *a_page, int *div_fac) {return;}
00579 void    v_alpha_text( int handle, char *string ) {return;}
00580 void    vs_palette( int handle, int palette ) {return;}
00581 void    v_sound( int handle, int frequency, int duration ) {return;}
00582 int     vs_mute( int handle, int action ) {return 1;}
00583 void    vqp_films( int handle, char *film_names ) {return;}
00584 void    vqp_state( int handle, int *port, char *film_name,
00585                    int *lightness, int *interlace,
00586                    int *planes, int *indexes ) {return;}
00587 void    vsp_state( int handle, int port, int film_num,
00588                    int lightness, int interlace, int planes,
00589                    int *indexes ) {return;}
00590 void    vsp_save( int handle ) {return;}
00591 void    vsp_message( int handle ) {return;}
00592 int     vqp_error( int handle ) {return 1;}
00593 void    v_meta_extents( int handle, int min_x, int min_y,
00594                         int max_x, int max_y ) {return;}
00595 void    v_write_meta( int handle,
00596                       int num_intin, int *intin,
00597                       int num_ptsin, int *ptsin ) {return;}
00598 void    vm_coords( int handle, int llx, int lly, int urx, int ury ) {return;}
00599 void    vm_filename( int handle, const char *filename ) {return;}
00600 void    vm_pagesize( int handle, int pgwidth, int pdheight ) {return;}
00601 void    v_offset( int handle, int offset ) {return;}
00602 void    v_fontinit( int handle, int fh_high, int fh_low ) {return;}
00603 void    v_escape2000( int handle, int times ) {return;}
00604
00605 void    vt_resolution( int handle, int xres, int yres,
00606                        int *xset, int *yset ) {return;}
00607 void    vt_axis( int handle, int xres, int yres,
00608                  int *xset, int *yset ) {return;}
00609 void    vt_origin( int handle, int xorigin, int yorigin ) {return;}
00610 void    vq_tdimensions( int handle, int *xdimension, int *ydimension ) {return;}
00611 void    vt_alignment( int handle, int dx, int dy ) {return;}
00612 void    vsp_film( int handle, int index, int lightness ) {return;}
00613 void    vsc_expose( int handle, int state ) {return;}
00614
00615 int     vq_gdos( void ) {return 1;}
00616 long    vq_vgdos( void ) {return 1;}
00617
00618 int     v_bez_on( int handle ) {return 1;}
00619 void    v_bez_off( int handle ) {return;}
00620 void    v_set_app_buff( int handle, void *address, int nparagraphs ) {return;}
00621 void    v_bez( int handle, int count, int *xyarr,
00622                 char *bezarr, int *extent, int *totpts, int *totmoves ) {return;}
00623 void    v_bez_fill( int handle, int count, int *xyarr,
00624                      char *bezarr, int *extent, int *totpts,
00625                      int *totmoves ) {return;}
00626 int     v_bez_qual( int handle, int prcnt, int *actual ) {return 1;}
00627
00628 void    vqt_f_extent( int handle, char *string, int *extent ) {return;}
00629 void    v_ftext( int handle, int x, int y, char *string ) {return;}
00630 void    v_ftext_offset( int handle, int x, int y, char *string, int *offset ) {return;}
00631 void    v_killoutline( int handle, void *component ) {return;}
00632 void    v_getoutline( int handle, int ch, int *xyarray,
00633                       char *bezarray, int maxverts, int *numverts ) {return;}
00634 void    vst_scratch( int handle, int mode ) {return;}
00635 void    vst_error( int handle, int mode, int *errorvar ) {return;}
00636 void    vqt_advance( int handle, int ch, int *advx, int *advy,
00637                      int *remx, int *remy ) {return;}
00638 void    vqt_advance32( int handle, int ch, fix31 *advx, fix31 *advy ) {return;}
00639 int     vst_arbpt( int handle, int point, int *chwd, int *chht,
00640                    int *cellwd, int *cellht ) {return 1;}
00641 fix31   vst_arbpt32( int handle, fix31 point, int *chwd, int *chht,
00642                      int *cellwd, int *cellht ) {return (fix31)1;}
00643 void    vst_charmap( int handle, int mode ) {return;}
00644 void    v_getbitmap_info( int handle, int ch, fix31 *advx, fix31 *advy,
00645                           fix31 *xoff, fix31 *yoff, fix31 *width,
00646                           fix31 *height ) {return;}
00647 void    vqt_pairkern( int handle, int ch1, int ch2, fix31 *x, fix31 *y ) {return;}
00648 void    vqt_trackkern( int handle, fix31 *x, fix31 *y ) {return;}
00649 void    vqt_fontheader( int handle, char *buffer, char *pathname ) {return;}
00650 void    vst_kern( int handle, int tmode, int pmode, int *tracks,
00651                   int *pairs ) {return;}
00652 fix31   vst_setsize32( int handle, fix31 point, int *chwd, int *chht,
00653                        int *cellwd, int *cellht ) {return (fix31)1;}
00654 void    vqt_devinfo( int handle, int devnum, int *devexits,
00655                      char *devstr ) {return;}
00656 int     v_flushcache( int handle ) {return 1;}
00657 void    vqt_cachesize( int handle, int which_cache, long *size ) {return;}
00658 void    vqt_get_table( int handle, int **map ) {return;}
00659 int     v_loadcache( int handle, char *filename, int mode ) {return 1;}
00660 int     v_savecache( int handle, char *filename ) {return 1;}
00661 int     vst_setsize( int handle, int point, int *chwd, int *chht,
00662                      int *cellwd, int *cellht ) {return 1;}
00663 int     vst_skew( int handle, int skew ) {return 1;}
00664
00665 /* GLOBALS */
00666 GEMPARBLK _GemParBlk;
00667 VDIPARBLK _VDIParBlk;
00668 int       _app;
00669
00670 #include "big2.h"
00671 int img_attach (t_image_dial *bimg, char *fichier, int tree, int obj, int fcenterw, int fcenterh) {return 1; }
00672
00673
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: d_big.c Source File

d_big.c

Go to the documentation of this file.
00001
00002 #ifdef WIN32                                    /* compile under Windoz */
00003 #define cdecl
00004 #pragma warning(disable : 4996)                 /* deprecated functions */
00005 #pragma warning(disable : 4129)                 /* invalid escape sequence */
00006 #endif
00007
00008 #include <AES.H>
00009 #include <VDI.H>
00010 #include <TOS.H>
00011 #include <big2.h>
00012
00013 int     initial (char *rsc, int menu, int desk, int nb_tree,
00014                              OBJECT *rs_tree, char *rs_str, int n_wind, int acc){return 1;}
00015 void    end (void){return;}
00016
00017 void    formm_draw (OBJECT *adr, int ed, int flmove, MFDB *img){return;}
00018 void    formm_undraw (OBJECT *adr, MFDB *img){return;}
00019 void    formf_draw (OBJECT *adr, int ed){return;}
00020 void    formf_undraw (OBJECT *adr){return;}
00021 void    create_hierm (OBJECT *adr){return;}
00022 int     dialog (int flags, OBJECT *address, int f,
00023                             int fl_rb, int form_pu, MFDB *img, int fl_move){return 1;}
00024 int     match (OBJECT *adr, int button){return 1;}
00025 void    set_popup (OBJECT *adr, int button, int option){return;}
00026 OBJECT *create_popup (int nbre, char **liste){return (OBJECT*)1;}
00027 int     free_popup (int posx, int posy, int form, OBJECT *adr){return 1;}
00028 void    get_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img){return;}
00029 void    put_bkgr (int of_x, int of_y, int of_w, int of_h, MFDB *img){return;}
00030 int     big_alert (int button, int number, char *str, int fl_alrt){return 1;}
00031 char    *get_string (int number){return (char*)1;}
00032 void    form_attach (int tree, int obj, char formular){return;}
00033 void    bulle_attach (int tree, int obj, char bulle){return;}
00034 void    set_interface (int under, int cunder, int ctxt_under,
00035                                          int cicn_coche, int ctxt_coche,
00036                                          int cicn_radio, int ctxt_radio,
00037                                          int cicn_popup, int ctxt_popup,
00038                                          int cmove, int cgrastr,
00039                                          int clin_frame, int ctxt_frame, int cniceline){return;}
00040
00041 int cdecl parent (OBJECT *adr, int object){return 1;}
00042 void    bak_rsc (OBJECT *tree, char **bak){return;}
00043 void    res_rsc (OBJECT *tree, char **bak){return;}
00044 void    dlg_mouse (void){return;}
00045
00046 void objc_xedit (OBJECT *adr, int car, int ed, int *po, int action, int f, int index){return;}
00047 void    set_text (OBJECT *adr, int object, char *string){return;}
00048 char    *get_text (OBJECT *adr, int object){return (char*)1;}
00049
00050 char    *path (char *pat){return (char*)1;}
00051 long    exist (char *name, int att){return 1;}
00052 void    set_palette (int index){return;}
00053 long    timer (void){return 1;}
00054 char    *trim (char *str){return (char*)1;}
00055 void    send_mesag (int type, int wi, int x, int y, int w, int h){return;}
00056 int     selector (char *pat, char *ext, char *file, char *title){return 1;}
00057 void    extension (char *filename, char *ext){return;}
00058 int     rc_intersect (GRECT *p1, GRECT *p2){return 1;}
00059 void    clipp (int clip_flag, GRECT *area){return;}
00060 COOKIE *first_cookie (void){return (COOKIE*)1;}             /* Le premier cookie */
00061 COOKIE *next_cookie (COOKIE *ck){return(COOKIE*)1;}     /* Cookie suivant */
00062 COOKIE *vq_cookie (long id){return(COOKIE*)1;}              /* Cherche un cookie par id */
00063 COOKIE *vq_cookie_c (char *c){return(COOKIE*)1;}            /* Cherche un cookie par chaîne */
00064 void fill_tab (int *pxy, int n, ...){return;}
00065 void empty (int evnmt){return;}
00066
00067 int     formw_draw (OBJECT *adr, int index, int title, int infos,
00068                                     int wed, int attr, FNCP ricn){return 1;}
00069 int     open_window (int index, int type, int attr,
00070                                      int x, int y, int w, int h,
00071                                      int wmi, int hmi, int wma, int hma,
00072                                      int wu, int hu,
00073                                      int flags, int fmouse,
00074                                      FNCP ricn, FNCP redr, FNCP clos,
00075                                      char *title, char *info,
00076                                      long wt, long ht,
00077                                      int fmenu, int ftool, int bar,
00078                                      int pattern, int colorp){return 1;}
00079 int     find_index (int wh){return 1;}
00080 int     find_window (int mx, int my){return 1;}
00081 void    zone_work (int index, int *xw, int *yw, int *ww, int *hw){return;}
00082 void    height_sliders (int index, int fredraw){return;}
00083 void    posi_vert (int index, int fredraw){return;}
00084 void    posi_hori (int index, int fredraw){return;}
00085 void    height_vert (int index, int fredraw){return;}
00086 void    height_hori (int index, int fredraw){return;}
00087 void    draw_object (int object, int index){return;}
00088 void    print_page (int index){return;}
00089 void    next_wind (void){return;}
00090 void    closed (void){return;}
00091 void    iconise (int index){return;}
00092 void    uniconise (int index){return;}
00093 void    alliconise (int index){return;}
00094 void    set_work (int index, int pattern, int colorp){return;}
00095 void    set_windows (int mtxt_mover, int ctxt_mover, int spat_mover, int cpat_mover,
00096                                      int ctxt_info,
00097                                      int spat_velev, int cpat_velev, int spat_helev, int cpat_helev,
00098                                      int spat_vslid, int cpat_vslid, int spat_hslid, int cpat_hslid,
00099                                      int cpat_gadgt, int cicn_gadgt){return;}
00100 void bwind_calc (int request, int attr,
00101                                  int tree, OBJECT *adrb,
00102                                  int xd, int yd, int wd, int hd,
00103                                  int *x, int *y, int *w, int *h){return;}
00104
00105
00106 OBJECT *adr_menu, *adr_desk;    /* Adresses formulaires réservées */
00107 OBJECT **ir_trindex;
00108
00109 int cliq_in;
00110 GRECT zclip;        /* Zone de clipping à redessiner si redraw */
00111 FNCP *fnc;  /* Pointeur sur les pointeurs de fonction liés aux objets */
00112 int ap_id;                          /* Numéro de l'application */
00113 int buf[8];                     /* Buffer d'évènements */
00114 int mx, my, mk;             /* Position et état souris */
00115 int edit, pos, object; /* Editable courant, pos. curseur, ob. cliqué */
00116 int kbd, key, clik;         /* Etat touches spéciales, touches, clics */
00117 int wind;                           /* Fenêtre cliquée */
00118 int intgr;                          /* Flag de ressource intégré ou non */
00119 char pathapp[];             /* Chemin de l'application */
00120 BigWind *win;               /* Pointeur sur la zone des fenêtres */
00121 t_ident_hard_soft desc_hard_soft;
00122 t_display work_display;
00123 t_desktop bureau;
00124 int aide_en_ligne;
00125 char pathapp[1];                /* Chemin de l'application */
00126 int _app;
00127
00128
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields - Variables

  • Data Fields
  • All
  • Variables
  • c
  • d
  • h
  • i
  • l
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • y

- c -

  • c : COOKIE
  • cgrastr : Obj_user
  • cicn_coche : Obj_user
  • cicn_gadgt : Win_user
  • cicn_popup : Obj_user
  • cicn_radio : Obj_user
  • clin_frame : Obj_user
  • cmove : Obj_user
  • cniceline : Obj_user
  • cpat_gadgt : Win_user
  • cpat_helev : Win_user
  • cpat_hslid : Win_user
  • cpat_mover : Win_user
  • cpat_velev : Win_user
  • cpat_vslid : Win_user
  • ctxt_coche : Obj_user
  • ctxt_frame : Obj_user
  • ctxt_info : Win_user
  • ctxt_mover : Win_user
  • ctxt_popup : Obj_user
  • ctxt_radio : Obj_user
  • ctxt_under : Obj_user
  • cunder : Obj_user
  • cur_pos : t_image_dial

- d -

  • datack : COOKIE

- h -

  • h : t_display
  • handle : t_display
  • hc : t_display
  • hd : t_desktop

- i -

  • i : COOKIE
  • ident : COOKIE

- l -

  • l : COOKIE
  • la_machine : t_ident_hard_soft
  • le_cpu : t_ident_hard_soft
  • le_gdos : t_ident_hard_soft
  • log : t_display

- m -

  • masque_coul : t_display
  • mfdb_image : t_image_dial
  • mode : t_display
  • mtxt_mover : Win_user
  • multitache : t_ident_hard_soft

- n -

  • n_color : t_display
  • n_color_pal : t_display
  • n_plane : t_display
  • nb_bit_coul : t_display

- p -

  • palette : t_display
  • phys : t_display
  • proc_graphique : t_ident_hard_soft

- r -

  • res : t_display

- s -

  • spat_helev : Win_user
  • spat_hslid : Win_user
  • spat_mover : Win_user
  • spat_velev : Win_user
  • spat_vslid : Win_user

- t -

  • taille : t_display
  • taille_ligne : t_display

- u -

  • under : Obj_user
  • une_palette : t_display

- v -

  • v_aes : t_ident_hard_soft
  • v_tos : t_ident_hard_soft

- w -

  • w : t_display
  • w_adr : Cont
  • w_att : Oldw
  • w_attr : BigWind
  • w_bak : Form
  • w_bar : BigWind
  • w_close : BigWind
  • w_col : BigWind
  • w_cont : BigWind
  • w_coord : Oldw
  • w_curr : BigWind
  • w_cycle : BigWind
  • w_dnline : BigWind
  • w_dnpage : BigWind
  • w_edit : Form
  • w_fen : BigWind
  • w_flags : BigWind
  • w_form : Cont
  • w_full : BigWind
  • w_hg : BigWind
  • w_hmaxi : BigWind
  • w_hmini : BigWind
  • w_hprot : BigWind
  • w_hslid : BigWind
  • w_htot : BigWind
  • w_hunit : BigWind
  • w_icon : BigWind
  • w_img : Cont
  • w_infos : BigWind
  • w_lfline : BigWind
  • w_lfpage : BigWind
  • w_lin : BigWind
  • w_mouse : BigWind
  • w_move : BigWind
  • w_old : BigWind
  • w_pal : BigWind
  • w_pos : Form
  • w_redicn : BigWind
  • w_redraw : BigWind
  • w_rtline : BigWind
  • w_rtpage : BigWind
  • w_size : BigWind
  • w_title : BigWind
  • w_top : BigWind
  • w_tree : Form
  • w_type : BigWind
  • w_upline : BigWind
  • w_uppage : BigWind
  • w_vprot : BigWind
  • w_vslid : BigWind
  • w_wmaxi : BigWind
  • w_wmini : BigWind
  • w_wtot : BigWind
  • w_wunit : BigWind
  • wd : t_desktop

- x -

  • xd : t_desktop

- y -

  • yd : t_desktop
Generated on Tue Mar 9 22:42:21 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- j -

  • Jdisint() : d_atari.c
  • Jenabint() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- k -

  • kbd : BIG2.H , BIG2DIAL.H , BIG2FOR2.H , BIG2INIT.C , BIG2EDIT.H , d_big.c
  • Kbdvbase() : d_atari.c
  • Kbrate() : d_atari.c
  • Kbshift() : d_atari.c
  • key : BIG2INIT.C , BIG2DIAL.H , BIG2EDIT.H , BIG2FOR2.H , BIG2.H , d_big.c , BIG2DIVR.H
  • Keytbl() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- l -

  • last() : BIG2EDIT.C , BIG2EDIT.H
  • lfline() : BIG2EVTW.H , BIG2EVTW.C
  • lfpage() : BIG2EVTW.C , BIG2EVTW.H
  • load_fontspeedo() : BIG2DEMO.C
  • load_image() : BIG_IMGS.H
  • load_img() : BIG_IMGS.H
  • load_pac() : BIG_IMGS.H
  • load_pcx() : BIG_IMGS.H
  • load_pix() : BIG_IMGS.H
  • locksnd() : d_atari.c
  • Logbase() : d_atari.c
  • look : BIG2USR1.C , BIG2FOR2.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- m -

  • M_ALERTE : BIG2DEMO.H
  • M_FORMLIBRE : BIG2DEMO.H
  • M_INFOS : BIG2DEMO.H
  • M_QUITTER : BIG2DEMO.H
  • m_title() : BIG2FOR2.C , BIG2FOR2.H
  • M_WFORMGRAND : BIG2DEMO.H
  • M_WFORMPETIT : BIG2DEMO.H
  • M_WMENU : BIG2DEMO.H
  • M_WWIND : BIG2DEMO.H
  • Maddalt() : d_atari.c
  • main() : BIG2DEMO.C
  • Malloc() : d_atari.c
  • match() : d_big.c , BIG2.H , BIG2FOR1.C
  • max : BIG2.H
  • MAX_ALRT : BIG2.H
  • Mediach() : d_atari.c
  • MENU : BIG2DEMO.H
  • menu_attach() : d_atari.c
  • menu_bar() : d_atari.c
  • menu_hierarch() : BIG2FOR1.C , BIG2FOR1.H
  • menu_icheck() : d_atari.c
  • menu_ienable() : d_atari.c
  • menu_istart() : d_atari.c
  • menu_ok() : BIG2DIAL.C , BIG2DIAL.H
  • menu_popup() : d_atari.c
  • menu_register() : d_atari.c
  • menu_settings() : d_atari.c
  • menu_text() : d_atari.c
  • menu_tnormal() : d_atari.c
  • menu_window() : BIG2WIND.C , BIG2WIND.H
  • MERCI : BIG2DEMO.H
  • Mfpint() : d_atari.c
  • Mfree() : d_atari.c
  • MH_HISTO : BIG2DEMO.H
  • MHIERA : BIG2DEMO.H
  • Midiws() : d_atari.c
  • min : BIG2.H
  • mk : BIG2.H , BIG2DIAL.H , BIG2HELP.H , BIG2INIT.C , BIG2WIND.H , d_big.c
  • mon_type() : d_atari.c
  • mouse : BIG2DIAL.H , BIG2INIT.C , BIG2WIND.H
  • move_form() : BIG2FOR2.H , BIG2FOR2.C
  • movebw() : BIG2WINB.C , BIG2WINB.H
  • moved() : BIG2EVTW.H , BIG2EVTW.C
  • Mshrink() : d_atari.c
  • MTCARRE : BIG2.H
  • MTCROIX : BIG2.H
  • MTETOILE : BIG2.H
  • MTLOSANGE : BIG2.H
  • MTPLUS : BIG2.H
  • MTPOINT : BIG2.H
  • MW_AL : BIG2DEMO.H
  • MW_ALERTE : BIG2DEMO.H
  • MW_IMAGE : BIG2DEMO.H
  • MW_INFOS : BIG2DEMO.H
  • MWH_ICN0 : BIG2DEMO.H
  • MWH_ICN1 : BIG2DEMO.H
  • MWH_ICN2 : BIG2DEMO.H
  • MWH_ICN3 : BIG2DEMO.H
  • MWH_ICN4 : BIG2DEMO.H
  • MWH_ICN5 : BIG2DEMO.H
  • MWH_ICN6 : BIG2DEMO.H
  • MWH_ICN7 : BIG2DEMO.H
  • MWH_ICN8 : BIG2DEMO.H
  • MWH_ICN9 : BIG2DEMO.H
  • mx : BIG2.H , BIG2FOR2.H , BIG2DIAL.H , BIG2INIT.C , d_big.c , BIG2HELP.H
  • Mxalloc() : d_atari.c
  • my : d_big.c , BIG2INIT.C , BIG2DIAL.H , BIG2FOR2.H , BIG2.H , BIG2HELP.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- n -

  • NB_FENETRES : BIG2DEMO.C
  • nb_objets_maison : BIG2INIT.C
  • nb_pict : BIG2USR1.H , BIG2INIT.C
  • next() : BIG2EDIT.C , BIG2EDIT.H
  • next_cookie() : BIG2DIVR.C , d_big.c , BIG2.H
  • next_option() : BIG2FOR1.C , BIG2FOR1.H
  • next_wind() : BIG2.H , BIG2WIND.C , d_big.c
  • next_word() : BIG2EDIT.H , BIG2EDIT.C
  • NFU : BIG2USR1.H
  • NGAD : BIG2.H
  • no_top() : BIG2WINB.C , BIG2WINB.H
  • NOT : BIG2.H
  • NOT_WINDOW : BIG2INCL.H
  • NOTOP : BIG2.H
  • NTU : BIG2USR1.H
  • NU : BIG2USR1.H
  • NUM_TREE : BIG2DEMO.C
  • NVMaccess() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- o -

  • objc_add() : d_atari.c
  • objc_change() : d_atari.c
  • objc_delete() : d_atari.c
  • objc_draw() : d_atari.c
  • objc_edit() : d_atari.c
  • objc_find() : d_atari.c
  • objc_offset() : d_atari.c
  • objc_order() : d_atari.c
  • objc_xedit() : BIG2.H , BIG2EDIT.C , d_big.c
  • object : BIG2FOR2.H , BIG2INIT.C , d_big.c , BIG2.H , BIG2DIAL.H , BIG2EDIT.H , BIG2FOR1.H
  • objets_desk() : BIG2DEMO.C
  • objets_maison : BIG2INIT.C
  • Offgibit() : d_atari.c
  • old_top : BIG2DIAL.H , BIG2INIT.C
  • Ongibit() : d_atari.c
  • open_window() : BIG2WIND.C , d_big.c , BIG2.H
  • open_work() : BIG2INIT.C
  • option_find() : BIG2DIAL.H , BIG2DIAL.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- z -

  • zclip : BIG2.H , BIG2EVTW.C , d_big.c
  • ZERO : BIG2.H
  • zone : BIG2DEMO.C
  • zone_work() : d_big.c , BIG2WIND.C , BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- a -

  • acc_loop() : BIG2DEMO.C
  • ADR : BIG2.H
  • adr_desk : BIG2DIAL.H , BIG2INIT.C , BIG2.H , d_big.c
  • adr_menu : BIG2DIAL.H , BIG2FOR1.H , BIG2FOR2.H , BIG2INIT.C , BIG2USR1.H , d_big.c , BIG2.H
  • adr_usr : BIG2INIT.C , BIG2USR1.H
  • aff_histo() : BIG2DEMO.C
  • aff_infos() : BIG2DEMO.C
  • aff_texte() : BIG2DEMO.C
  • affiche_bulle() : BIG2HELP.C
  • AIDE : BIG2INCL.H
  • AIDE1 : BIG2DEMO.H
  • AIDE2 : BIG2DEMO.H
  • aide_en_ligne : BIG2.H , BIG2HELP.C , d_big.c
  • AIDE_OBJET : BIG2.H
  • AL_BKGR : BIG2INCL.H
  • AL_BU1 : BIG2INCL.H
  • AL_BU2 : BIG2INCL.H
  • AL_BU3 : BIG2INCL.H
  • AL_IC : BIG2INCL.H
  • AL_ICONES : BIG2DEMO.H
  • AL_MOVE : BIG2INCL.H
  • AL_POINTEUR : BIG2DEMO.H
  • AL_ST1 : BIG2INCL.H
  • AL_ST2 : BIG2INCL.H
  • AL_ST3 : BIG2INCL.H
  • AL_ST4 : BIG2INCL.H
  • AL_ST5 : BIG2INCL.H
  • ALERT : BIG2DEMO.H
  • alliconise() : BIG2.H , BIG2EVTW.C , d_big.c
  • ALLSIZER : BIG2.H
  • ap_id : d_big.c , BIG2.H , BIG2DIAL.H , BIG2FOR1.H , BIG2INIT.C , BIG2WIND.H , BIG2DIVR.H
  • appl_exit() : d_atari.c
  • appl_find() : d_atari.c
  • appl_getinfo() : d_atari.c
  • appl_init() : d_atari.c
  • appl_read() : d_atari.c
  • appl_search() : d_atari.c
  • appl_tplay() : d_atari.c
  • appl_trecord() : d_atari.c
  • appl_write() : d_atari.c
  • ARDN : BIG2.H
  • ARLF : BIG2.H
  • arrows() : BIG2WINB.H , BIG2WINB.C
  • ARRT : BIG2.H
  • ARUP : BIG2.H
  • asce() : BIG2WINB.C , BIG2WINB.H
  • AUCUN_GDOS : BIG2.H
  • AUTRE_MACHINE : BIG2.H
  • AUTRE_PG : BIG2.H
  • AUTRE_PROCESSEUR : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- b -

  • B_BUTTON : translate.h
  • B_COCHE : translate.h
  • B_EDIT : BIG2.H
  • B_FNCP : BIG2.H
  • B_FRAME : BIG2.H
  • B_GRASTR : BIG2.H
  • B_HELP : BIG2.H
  • B_HIERM : BIG2.H
  • B_LIST : BIG2.H
  • B_MOVE : BIG2.H
  • B_PICT : BIG2.H
  • B_POPUP : BIG2.H
  • B_SELEC : BIG2.H
  • B_SMSTR : BIG2.H
  • B_UNDER : BIG2.H
  • B_UNDO : BIG2.H
  • BA_BC : BIG2DEMO.H
  • BA_BKGR : BIG2INCL.H
  • BA_FNT : BIG2DEMO.H
  • BA_LF : BIG2INCL.H
  • BA_PU : BIG2DEMO.H
  • BA_PUBX : BIG2DEMO.H
  • BA_PUIM : BIG2DEMO.H
  • BA_RB : BIG2DEMO.H
  • BA_RT : BIG2INCL.H
  • BA_SIZ : BIG2DEMO.H
  • BA_TC : BIG2DEMO.H
  • BA_TD : BIG2DEMO.H
  • BA_TG : BIG2DEMO.H
  • BA_TI : BIG2DEMO.H
  • BACKSPC : BIG2.H
  • bak_rsc() : BIG2.H , BIG2FOR2.C , d_big.c
  • bcadre() : BIG2USR1.C , BIG2USR1.H
  • BCHN : BIG2INCL.H
  • BCHS : BIG2INCL.H
  • BCMN : BIG2INCL.H
  • BCMS : BIG2INCL.H
  • bcoche() : BIG2USR1.C , BIG2USR1.H
  • Bconin() : d_atari.c
  • Bconmap() : d_atari.c
  • Bconout() : d_atari.c
  • Bconstat() : d_atari.c
  • Bcostat() : d_atari.c
  • BEV_FREEPU : BIG2.H
  • BEV_HIERM : BIG2.H
  • BEV_TOOL : BIG2.H
  • BEV_WFORM : BIG2.H
  • BEV_WHIER : BIG2.H
  • BEV_WMENU : BIG2.H
  • bgrastr() : BIG2USR1.C , BIG2USR1.H
  • bi_frstr : BIG2WIND.H
  • bi_trindex : BIG2FOR1.H , BIG2FOR2.H , BIG2USR1.H , BIG2USR2.H , BIG2WINB.H , BIG2WIND.H
  • big_alert() : BIG2FOR2.C , d_big.c , BIG2.H
  • BIG_WIND : BIG2INCL.H
  • BIGALERTE : BIG2INCL.H
  • BIGARRM : BIG2INCL.H
  • BIGARRS : BIG2INCL.H
  • BIGICN : BIG2INCL.H
  • BIGLIST : BIG2INCL.H
  • BIGNOT_RSC : BIG2INCL.H
  • BIMAGE : BIG2DEMO.C
  • bimg : BIG2DEMO.C
  • bios() : d_atari.c
  • Bioskeys() : d_atari.c
  • BIT15 : BIG2.H
  • BKGR : BIG2.H
  • BL_ASC : BIG2INCL.H
  • BL_BA : BIG2INCL.H
  • BL_BKGR : BIG2INCL.H
  • BL_DN : BIG2INCL.H
  • BL_S1 : BIG2INCL.H
  • BL_S2 : BIG2INCL.H
  • BL_S3 : BIG2INCL.H
  • BL_S4 : BIG2INCL.H
  • BL_S5 : BIG2INCL.H
  • BL_S6 : BIG2INCL.H
  • BL_S7 : BIG2INCL.H
  • BL_S8 : BIG2INCL.H
  • BL_SL : BIG2INCL.H
  • BL_UP : BIG2INCL.H
  • BLANK : BIG2.H
  • Blitmode() : d_atari.c
  • bmhier() : BIG2USR1.C , BIG2USR1.H
  • bmove() : BIG2USR1.C , BIG2USR1.H
  • bniceline() : BIG2USR1.C , BIG2USR1.H
  • bpal : BIG2.H , BIG2INIT.C
  • bpict() : BIG2USR1.C , BIG2USR1.H
  • bpopup() : BIG2USR1.C , BIG2USR1.H
  • brond() : BIG2USR1.C , BIG2USR1.H
  • BS_RIGHT : BIG2.H
  • bsmstr() : BIG2USR1.H , BIG2USR1.C
  • BU_BOXTXT : BIG2DEMO.H
  • BU_ICN : BIG2DEMO.H
  • BU_IMG : BIG2DEMO.H
  • BU_TXT1 : BIG2DEMO.H
  • BU_TXT2 : BIG2DEMO.H
  • buf : BIG2INIT.C , d_big.c , BIG2FOR1.H , BIG2DIVR.H , BIG2.H , BIG2DIAL.H , BIG2FOR2.H , BIG2EVTW.H , BIG2WIND.H
  • buffer : BIG2INIT.C , BIG2EDIT.H
  • buffoper() : d_atari.c
  • buffptr() : d_atari.c
  • bulle_attach() : d_big.c , BIG2FOR2.C , BIG2.H
  • bunder() : BIG2USR1.H , BIG2USR1.C
  • bureau : BIG2FOR1.H , BIG2.H , BIG2WIND.H , BIG2USR1.H , BIG2FOR2.H , BIG2DIAL.H , d_big.c , BIG2EVTW.H
  • BUREAU : BIG2DEMO.H
  • bureau : BIG2INIT.C
  • BW_BARRE : BIG2INCL.H
  • BW_BKGR : BIG2INCL.H
  • BW_CLOSER : BIG2INCL.H
  • BW_CYCLER : BIG2INCL.H
  • BW_DNARROW : BIG2INCL.H
  • BW_FULLER : BIG2INCL.H
  • BW_HBAR : BIG2INCL.H
  • BW_HELEV : BIG2INCL.H
  • BW_HSLIDE : BIG2INCL.H
  • BW_INFO : BIG2INCL.H
  • BW_LFARROW : BIG2INCL.H
  • BW_MOVER : BIG2INCL.H
  • BW_RTARROW : BIG2INCL.H
  • BW_SIZERDL : BIG2INCL.H
  • BW_SIZERDR : BIG2INCL.H
  • BW_SIZERUL : BIG2INCL.H
  • BW_SIZERUR : BIG2INCL.H
  • BW_SMALLER : BIG2INCL.H
  • BW_UPARROW : BIG2INCL.H
  • BW_VBAR : BIG2INCL.H
  • BW_VELEV : BIG2INCL.H
  • BW_VSLIDE : BIG2INCL.H
  • BW_WORK : BIG2INCL.H
  • bwin : BIG2WINB.C , BIG2USR2.C
  • bwind_calc() : BIG2WINB.C , BIG2.H , d_big.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- c -

  • CADRE1 : BIG2DEMO.H
  • CADRE2 : BIG2DEMO.H
  • Cauxin() : d_atari.c
  • Cauxis() : d_atari.c
  • Cauxos() : d_atari.c
  • Cauxout() : d_atari.c
  • Cconin() : d_atari.c
  • Cconis() : d_atari.c
  • Cconos() : d_atari.c
  • Cconout() : d_atari.c
  • Cconrs() : d_atari.c
  • Cconws() : d_atari.c
  • charge_image() : BIG2DEMO.C
  • charge_texte() : BIG2DEMO.C
  • CHARGEIMG : BIG2DEMO.H
  • CHARGETXT : BIG2DEMO.H
  • CharProLine : BIG2HELP.C
  • clik : BIG2.H , BIG2DIAL.H , BIG2FOR2.H , BIG2INIT.C , d_big.c
  • clipp() : BIG2.H , BIG2DIVR.C , d_big.c
  • cliq_in : BIG2.H , BIG2INIT.C , d_big.c
  • clos_acc() : BIG2DEMO.C
  • close_histo() : BIG2DEMO.C
  • close_img() : BIG2DEMO.C
  • close_txt() : BIG2DEMO.C
  • close_wmenu() : BIG2DEMO.C
  • closed() : BIG2.H , BIG2EVTW.C , d_big.c
  • CLR : BIG2.H
  • Cnecin() : d_atari.c
  • CONTACT : BIG2DEMO.H
  • copy() : BIG2EDIT.C , BIG2EDIT.H
  • COULEURS : BIG2DEMO.H
  • Cprnos() : d_atari.c
  • Cprnout() : d_atari.c
  • Crawcin() : d_atari.c
  • Crawio() : d_atari.c
  • create_hierm() : BIG2.H , BIG2FOR2.C , d_big.c
  • create_popup() : BIG2.H , d_big.c , BIG2FOR2.C
  • create_scroll() : BIG2FOR1.C , BIG2FOR1.H
  • create_wmenu() : BIG2WIND.H , BIG2WIND.C
  • cree_histo() : BIG2DEMO.C
  • CT_ARDN : BIG2.H
  • CT_ARLF : BIG2.H
  • CT_ARRT : BIG2.H
  • CT_ARUP : BIG2.H
  • CT_CLR : BIG2.H
  • Cursconf() : d_atari.c
  • cut() : BIG2EDIT.H , BIG2EDIT.C
  • CYCLER : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- d -

  • DCDEFAULT : BIG2.H
  • dcl_windows() : BIG2WIND.C , BIG2WIND.H
  • Dclosedir() : d_atari.c
  • Dcntl() : d_atari.c
  • Dcreate() : d_atari.c
  • Ddelete() : d_atari.c
  • DELETE : BIG2.H
  • desc_hard_soft : BIG2.H , BIG2EVTW.H , BIG2HELP.H , BIG2INIT.C , d_big.c
  • devconnect() : d_atari.c
  • Dfree() : d_atari.c
  • Dgetdrv() : d_atari.c
  • Dgetpath() : d_atari.c
  • dial() : BIG2DIAL.C , BIG2DIAL.H
  • dialog() : BIG2.H , BIG2DIAL.C , d_big.c
  • dialog_light() : BIG2DIAL.C
  • dlg_button() : BIG2DIAL.C , BIG2DIAL.H
  • DLG_DESK : BIG2.H
  • DLG_FORM : BIG2.H
  • dlg_keybd() : BIG2DIAL.C , BIG2DIAL.H
  • dlg_mesag() : BIG2DIAL.C , BIG2DIAL.H
  • dlg_mouse() : BIG2.H , BIG2DIAL.C , d_big.c
  • Dlock() : d_atari.c
  • DMAread() : d_atari.c
  • DMAwrite() : d_atari.c
  • dnline() : BIG2EVTW.C , BIG2EVTW.H
  • dnpage() : BIG2EVTW.C , BIG2EVTW.H
  • Dopendir() : d_atari.c
  • Dosound() : d_atari.c
  • Dpathconf() : d_atari.c
  • dragbox() : BIG2WINB.C
  • draw_curs() : BIG2EDIT.C , BIG2EDIT.H
  • draw_obj() : BIG2WINB.C , BIG2WINB.H
  • draw_object() : BIG2.H , BIG2WIND.C , d_big.c
  • draw_title() : BIG2.H , BIG2WINB.C
  • draw_wind() : BIG2WINB.C , BIG2WINB.H
  • Dreaddir() : d_atari.c
  • Drewinddir() : d_atari.c
  • Drvmap() : d_atari.c
  • Dsetdrv() : d_atari.c
  • Dsetpath() : d_atari.c
  • Dsp_Available() : d_atari.c
  • Dsp_BlkBytes() : d_atari.c
  • Dsp_BlkHandShake() : d_atari.c
  • Dsp_BlkUnpacked() : d_atari.c
  • Dsp_BlkWords() : d_atari.c
  • Dsp_DoBlock() : d_atari.c
  • Dsp_ExecBoot() : d_atari.c
  • Dsp_ExecProg() : d_atari.c
  • Dsp_FlushSubroutines() : d_atari.c
  • Dsp_GetProgAbility() : d_atari.c
  • Dsp_GetWordSize() : d_atari.c
  • Dsp_Hf0() : d_atari.c
  • Dsp_Hf1() : d_atari.c
  • Dsp_Hf2() : d_atari.c
  • Dsp_Hf3() : d_atari.c
  • Dsp_HStat() : d_atari.c
  • Dsp_InqSubrAbility() : d_atari.c
  • Dsp_InStream() : d_atari.c
  • Dsp_IOStream() : d_atari.c
  • Dsp_LoadProg() : d_atari.c
  • Dsp_LoadSubroutine() : d_atari.c
  • Dsp_Lock() : d_atari.c
  • Dsp_LodToBinary() : d_atari.c
  • Dsp_MultBlocks() : d_atari.c
  • Dsp_OutStream() : d_atari.c
  • Dsp_RemoveInterrupts() : d_atari.c
  • Dsp_RequestUniqueAbility() : d_atari.c
  • Dsp_Reserve() : d_atari.c
  • Dsp_RunSubroutine() : d_atari.c
  • Dsp_SetVectors() : d_atari.c
  • Dsp_TriggerHC() : d_atari.c
  • Dsp_Unlock() : d_atari.c
  • dsptristate() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- e -

  • edit : BIG2.H , BIG2DIAL.H , BIG2FOR1.H , BIG2FOR2.H , BIG2EDIT.H , BIG2INIT.C , d_big.c
  • EFCONT : BIG2.H
  • EFGRAS : BIG2.H
  • EFGRIS : BIG2.H
  • EFITAL : BIG2.H
  • EFNONE : BIG2.H
  • EFSOULI : BIG2.H
  • EgetPalette() : d_atari.c
  • Egetshift() : d_atari.c
  • elev() : BIG2USR2.C , BIG2USR2.H
  • empty() : BIG2.H , BIG2DIVR.C , d_big.c
  • empty_edit() : BIG2EDIT.C , BIG2EDIT.H
  • end() : BIG2.H , BIG2INIT.C , d_big.c
  • ENTER : BIG2.H
  • ESC : BIG2.H
  • EsetBank() : d_atari.c
  • EsetColor() : d_atari.c
  • EsetGray() : d_atari.c
  • EsetPalette() : d_atari.c
  • Esetshift() : d_atari.c
  • EsetSmear() : d_atari.c
  • ESPACE : BIG2.H
  • event : BIG2DIAL.H , BIG2FOR2.H , BIG2INIT.C , BIG2WIND.H
  • event_desk() : BIG2DEMO.C
  • event_freepu() : BIG2DEMO.C
  • event_mesag() : BIG2DEMO.C
  • event_pmenu() : BIG2DEMO.C
  • event_tool() : BIG2DEMO.C
  • event_wform() : BIG2DEMO.C
  • event_whier() : BIG2DEMO.C
  • event_wmenu() : BIG2DEMO.C
  • evnt_button() : d_atari.c
  • evnt_dclick() : d_atari.c
  • evnt_keybd() : d_atari.c
  • evnt_mesag() : d_atari.c
  • evnt_mouse() : d_atari.c
  • evnt_multi() : d_atari.c
  • evnt_timer() : d_atari.c
  • exist() : BIG2.H , BIG2DIVR.C , d_big.c
  • exist_edit() : BIG2EDIT.C , BIG2EDIT.H
  • EXITAUTO : BIG2INCL.H
  • extension() : d_big.c , BIG2DIVR.C , BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- f -

  • F1 : BIG2.H
  • F10 : BIG2.H
  • F2 : BIG2.H
  • F3 : BIG2.H
  • F4 : BIG2.H
  • F5 : BIG2.H
  • F6 : BIG2.H
  • F7 : BIG2.H
  • F8 : BIG2.H
  • F9 : BIG2.H
  • FALCON_030 : BIG2.H
  • FALSE : BIG2.H
  • Fattrib() : d_atari.c
  • Fchmod() : d_atari.c
  • Fchown() : d_atari.c
  • Fclose() : d_atari.c
  • Fcntl() : d_atari.c
  • Fcreate() : d_atari.c
  • Fdatime() : d_atari.c
  • Fdelete() : d_atari.c
  • Fdup() : d_atari.c
  • Fforce() : d_atari.c
  • fgdos : BIG2DEMO.C
  • Fgetchar() : d_atari.c
  • Fgetdta() : d_atari.c
  • fid : BIG2DEMO.C
  • fill_tab() : BIG2.H , BIG2DIVR.C , d_big.c
  • find_index() : d_big.c , BIG2.H , BIG2WIND.C
  • find_special() : BIG2FOR2.C , BIG2FOR2.H
  • find_touche() : BIG2FOR2.C , BIG2FOR2.H
  • find_window() : BIG2.H , BIG2WIND.C , d_big.c
  • find_zone() : BIG2HELP.C
  • Finstat() : d_atari.c
  • first() : BIG2EDIT.C , BIG2EDIT.H
  • first_cookie() : BIG2.H , BIG2DIVR.C , d_big.c
  • Flink() : d_atari.c
  • Flock() : d_atari.c
  • Flopfmt() : d_atari.c
  • Floprate() : d_atari.c
  • Floprd() : d_atari.c
  • Flopver() : d_atari.c
  • Flopwr() : d_atari.c
  • Fmidipipe() : d_atari.c
  • fnc : BIG2.H , BIG2DIAL.H , BIG2FOR1.H , BIG2INIT.C , BIG2USR1.H , BIG2WIND.H , d_big.c
  • FNCP : BIG2.H
  • FO_BC1 : BIG2DEMO.H
  • FO_BC2 : BIG2DEMO.H
  • FO_PUI : BIG2DEMO.H
  • FO_PUT : BIG2DEMO.H
  • FO_RBA1 : BIG2DEMO.H
  • FO_RBA2 : BIG2DEMO.H
  • FO_RBB1 : BIG2DEMO.H
  • FO_RBB2 : BIG2DEMO.H
  • FO_RBB3 : BIG2DEMO.H
  • fond() : BIG2USR2.C , BIG2USR2.H
  • FONT_GDOS : BIG2.H
  • FONTS : BIG2DEMO.H
  • Fopen() : d_atari.c
  • form_alert() : d_atari.c
  • form_attach() : BIG2FOR2.C , BIG2.H , d_big.c
  • form_button() : d_atari.c
  • form_center() : d_atari.c
  • form_dial() : d_atari.c
  • form_do() : d_atari.c
  • form_error() : d_atari.c
  • form_keybd() : d_atari.c
  • formf_draw() : BIG2FOR1.C , d_big.c , BIG2.H
  • formf_undraw() : BIG2.H , d_big.c , BIG2FOR1.C
  • formm_draw() : BIG2.H , BIG2FOR1.C , d_big.c
  • formm_undraw() : BIG2.H , BIG2FOR1.C , d_big.c
  • FORMULAIRE : BIG2DEMO.H
  • formulaire() : BIG2DEMO.C
  • formw_draw() : d_big.c , BIG2.H , BIG2WIND.C
  • Foutstat() : d_atari.c
  • Fpipe() : d_atari.c
  • Fputchar() : d_atari.c
  • Fread() : d_atari.c
  • Freadlink() : d_atari.c
  • free_popup() : BIG2.H , d_big.c , BIG2FOR1.C
  • Frename() : d_atari.c
  • FRSTR : BIG2DEMO.C
  • FS_ANN : BIG2INCL.H
  • FS_ARDN : BIG2INCL.H
  • FS_ARUP : BIG2INCL.H
  • FS_ASC : BIG2INCL.H
  • FS_BF : BIG2INCL.H
  • FS_BOX : BIG2INCL.H
  • FS_BOXAR : BIG2INCL.H
  • FS_BOXF : BIG2INCL.H
  • FS_BOXL : BIG2INCL.H
  • FS_FILTRE : BIG2INCL.H
  • FS_LA : BIG2INCL.H
  • FS_LP : BIG2INCL.H
  • FS_MOVE : BIG2INCL.H
  • FS_OK : BIG2INCL.H
  • FS_PATH : BIG2INCL.H
  • FS_RETOUR : BIG2INCL.H
  • FS_SAISIE : BIG2INCL.H
  • FS_SLD : BIG2INCL.H
  • FS_TITRE : BIG2INCL.H
  • Fseek() : d_atari.c
  • fsel_exinput() : d_atari.c
  • fsel_input() : d_atari.c
  • Fselect() : d_atari.c
  • Fsetdta() : d_atari.c
  • Fsfirst() : d_atari.c
  • FSM_GDOS : BIG2.H
  • Fsnext() : d_atari.c
  • Fsymlink() : d_atari.c
  • full_wform() : BIG2EVTW.C , BIG2EVTW.H
  • fulled() : BIG2EVTW.C , BIG2EVTW.H
  • Fwrite() : d_atari.c
  • Fxattr() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- g -

  • GA_ADNH : BIG2INCL.H
  • GA_ADNM : BIG2INCL.H
  • GA_ALFH : BIG2INCL.H
  • GA_ALFM : BIG2INCL.H
  • GA_ARTH : BIG2INCL.H
  • GA_ARTM : BIG2INCL.H
  • GA_AUPH : BIG2INCL.H
  • GA_AUPM : BIG2INCL.H
  • GA_CLOH : BIG2INCL.H
  • GA_CLOM : BIG2INCL.H
  • GA_CYCH : BIG2INCL.H
  • GA_CYCM : BIG2INCL.H
  • GA_FULH : BIG2INCL.H
  • GA_FULM : BIG2INCL.H
  • GA_SDLH : BIG2INCL.H
  • GA_SDLM : BIG2INCL.H
  • GA_SDRH : BIG2INCL.H
  • GA_SDRM : BIG2INCL.H
  • GA_SLHH : BIG2INCL.H
  • GA_SLHM : BIG2INCL.H
  • GA_SLVH : BIG2INCL.H
  • GA_SLVM : BIG2INCL.H
  • GA_SMAH : BIG2INCL.H
  • GA_SMAM : BIG2INCL.H
  • GA_SULH : BIG2INCL.H
  • GA_SULM : BIG2INCL.H
  • GA_SURH : BIG2INCL.H
  • GA_SURM : BIG2INCL.H
  • gadget() : BIG2USR2.C , BIG2USR2.H
  • GADGETS : BIG2INCL.H
  • GDOS_STANDARD : BIG2.H
  • gemdos() : d_atari.c
  • get_bkgr() : BIG2.H , BIG2FOR2.C , d_big.c
  • get_palette() : BIG2INIT.C
  • get_popup : BIG2.H
  • get_radio() : BIG2.H , BIG2FOR2.C
  • get_string() : BIG2.H , BIG2FOR2.C , d_big.c
  • get_text() : BIG2.H , BIG2EDIT.C , d_big.c
  • Getbpb() : d_atari.c
  • Getmpb() : d_atari.c
  • Getrez() : d_atari.c
  • Gettime() : d_atari.c
  • GF_AIDE : BIG2DEMO.H
  • GF_ANNULE : BIG2DEMO.H
  • GF_APPLIQUE : BIG2DEMO.H
  • GF_BC1 : BIG2DEMO.H
  • GF_BC2 : BIG2DEMO.H
  • GF_CONFIRME : BIG2DEMO.H
  • GF_ICN : BIG2DEMO.H
  • GF_PL : BIG2DEMO.H
  • GF_PU1 : BIG2DEMO.H
  • GF_PU2 : BIG2DEMO.H
  • GF_RAZ : BIG2DEMO.H
  • GF_RBA1 : BIG2DEMO.H
  • GF_RBA2 : BIG2DEMO.H
  • GF_RBA3 : BIG2DEMO.H
  • GF_RBA4 : BIG2DEMO.H
  • GF_RBB1 : BIG2DEMO.H
  • GF_RBB2 : BIG2DEMO.H
  • GF_RBB3 : BIG2DEMO.H
  • GF_RBB4 : BIG2DEMO.H
  • GF_RBC1 : BIG2DEMO.H
  • GF_RBC2 : BIG2DEMO.H
  • GF_RBC3 : BIG2DEMO.H
  • GF_RBC4 : BIG2DEMO.H
  • gform_wind() : BIG2DEMO.C
  • Giaccess() : d_atari.c
  • gpio() : d_atari.c
  • graf_dragbox() : d_atari.c
  • graf_growbox() : d_atari.c
  • graf_handle() : d_atari.c
  • graf_mbox() : d_atari.c
  • graf_mkstate() : d_atari.c
  • graf_mouse() : d_atari.c
  • graf_movebox() : d_atari.c
  • graf_rubberbox() : d_atari.c
  • graf_rubbox() : d_atari.c
  • graf_shrinkbox() : d_atari.c
  • graf_slidebox() : d_atari.c
  • graf_watchbox() : d_atari.c
  • GRAND_FORM : BIG2DEMO.C
  • GRANDFORM : BIG2DEMO.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- h -

  • HCENT : BIG2.H
  • height_hori() : BIG2.H , d_big.c , BIG2WIND.C
  • height_sliders() : BIG2.H , BIG2WIND.C , d_big.c
  • height_vert() : BIG2.H , BIG2WIND.C , d_big.c
  • help() : BIG2FOR2.C , BIG2FOR2.H
  • HELP : BIG2.H
  • HIERWIND : BIG2DEMO.H
  • HISTO : BIG2DEMO.C
  • HLEFT : BIG2.H
  • HMINUS : BIG2.H
  • HNORM : BIG2.H
  • HPETIT : BIG2.H
  • HRIGHT : BIG2.H
  • hslid() : BIG2EVTW.H , BIG2EVTW.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- i -

  • ICN_WF : BIG2DEMO.H
  • ICN_WN : BIG2DEMO.H
  • icone() : BIG2DEMO.C
  • iconise() : BIG2.H , BIG2EVTW.C , d_big.c
  • id_top : BIG2INIT.C , BIG2USR2.H , BIG2WIND.C , BIG2DIAL.H
  • identifier_hard_soft() : BIG2INIT.C
  • identifier_tos() : BIG2INIT.C
  • Ikbdws() : d_atari.c
  • IMAGE : BIG2DEMO.C
  • img_attach() : d_atari.c , BIG_IMGS.H
  • IMG_USER : BIG2INCL.H
  • INCONNU : BIG2.H
  • INF_HIST : BIG2DEMO.H
  • INF_INFOS : BIG2DEMO.H
  • INF_MERCI : BIG2DEMO.H
  • INF_SORTIE : BIG2DEMO.H
  • INFOS : BIG2DEMO.H
  • initial() : BIG2.H , BIG2INIT.C , d_big.c
  • Initmouse() : d_atari.c
  • inline_help() : BIG2HELP.C , BIG2HELP.H
  • INSERT : BIG2.H
  • intgr : BIG2.H , BIG2INIT.C , d_big.c
  • INTGR : BIG2DEMO.C
  • Iorec() : d_atari.c
  • ir_frstr : BIG2USR1.H , BIG2FOR2.H , BIG2HELP.H , BIG2INIT.C
  • ir_trindex : BIG2HELP.H , BIG2FOR1.H , d_big.c , BIG2DIAL.H , BIG2USR1.H , BIG2.H , BIG2WIND.H , BIG2INIT.C , BIG2FOR2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- p -

  • P_AIDE : BIG2DEMO.H
  • P_ANNULE : BIG2DEMO.H
  • P_CONFIRME : BIG2DEMO.H
  • pal_img : BIG2DIAL.H , BIG2DIVR.H , BIG2INIT.C
  • Palette : BIG2.H
  • parent() : BIG2.H , BIG2FOR2.C , d_big.c
  • paste() : BIG2EDIT.C , BIG2EDIT.H
  • path() : BIG2.H , BIG2DIVR.C , d_big.c
  • pathapp : BIG2.H , BIG2INIT.C , d_big.c
  • Pause() : d_atari.c
  • Pdomain() : d_atari.c
  • PETIT_FORM : BIG2DEMO.C
  • PETITFORM : BIG2DEMO.H
  • Pexec() : d_atari.c
  • PF_AIDE : BIG2DEMO.H
  • PF_ANNULE : BIG2DEMO.H
  • PF_APPLIQUE : BIG2DEMO.H
  • PF_BC1 : BIG2DEMO.H
  • PF_BC2 : BIG2DEMO.H
  • PF_CHAMP1 : BIG2DEMO.H
  • PF_CHAMP2 : BIG2DEMO.H
  • PF_CHAMP3 : BIG2DEMO.H
  • PF_CHAMP4 : BIG2DEMO.H
  • PF_COLOR : BIG2DEMO.H
  • PF_CONFIRME : BIG2DEMO.H
  • PF_RAZ : BIG2DEMO.H
  • PF_TRAME : BIG2DEMO.H
  • Pfork() : d_atari.c
  • pform_wind() : BIG2DEMO.C
  • PG_FALCON_030 : BIG2.H
  • PG_ST : BIG2.H
  • PG_STE : BIG2.H
  • PG_TT : BIG2.H
  • Pgetegid() : d_atari.c
  • Pgeteuid() : d_atari.c
  • Pgetgid() : d_atari.c
  • Pgetpgrp() : d_atari.c
  • Pgetpid() : d_atari.c
  • Pgetppid() : d_atari.c
  • Pgetuid() : d_atari.c
  • Physbase() : d_atari.c
  • Pkill() : d_atari.c
  • Pmsg() : d_atari.c
  • Pnice() : d_atari.c
  • POINTIL : BIG2.H
  • pop_liste() : BIG2FOR1.C , BIG2FOR1.H
  • pop_up() : BIG2FOR1.C , BIG2FOR1.H
  • POP_UP1 : BIG2DEMO.H
  • POP_UP2 : BIG2DEMO.H
  • POPUP_ICN : BIG2DEMO.H
  • pos : BIG2FOR1.H , BIG2FOR2.H , BIG2INIT.C , d_big.c , BIG2.H , BIG2DIAL.H
  • pos_curs() : BIG2EDIT.C , BIG2EDIT.H
  • posi_hori() : BIG2.H , d_big.c , BIG2WIND.C
  • posi_vert() : BIG2.H , BIG2WIND.C , d_big.c
  • Prenice() : d_atari.c
  • prev() : BIG2EDIT.C , BIG2EDIT.H
  • prev_word() : BIG2EDIT.H , BIG2EDIT.C
  • print_colum() : BIG2WIND.C , BIG2WIND.H
  • print_line() : BIG2WIND.C , BIG2WIND.H
  • print_page() : BIG2.H , BIG2WIND.C , d_big.c
  • print_wind() : BIG2WIND.C , BIG2WIND.H
  • PROC_68000 : BIG2.H
  • PROC_68030 : BIG2.H
  • Protobt() : d_atari.c
  • Prtblk() : d_atari.c
  • Prusage() : d_atari.c
  • Psemaphore() : d_atari.c
  • Psetgid() : d_atari.c
  • Psetlimit() : d_atari.c
  • Psetpgrp() : d_atari.c
  • Psetuid() : d_atari.c
  • Psigaction() : d_atari.c
  • Psigblock() : d_atari.c
  • Psignal() : d_atari.c
  • Psigpause() : d_atari.c
  • Psigpending() : d_atari.c
  • Psigreturn() : d_atari.c
  • Psigsetmask() : d_atari.c
  • Pterm() : d_atari.c
  • Pterm0() : d_atari.c
  • Ptermres() : d_atari.c
  • ptr_fonctions() : BIG2DEMO.C
  • PU_LIBRE : BIG2DEMO.H
  • PUH : BIG2INCL.H
  • PUL_ALERT : BIG2DEMO.H
  • PUL_WMENU : BIG2DEMO.H
  • PUM : BIG2INCL.H
  • Pumask() : d_atari.c
  • Puntaes() : d_atari.c
  • Pusrval() : d_atari.c
  • put_bkgr() : BIG2.H , d_big.c , BIG2FOR2.C
  • put_fen() : BIG2WINB.H , BIG2WINB.C
  • Pvfork() : d_atari.c
  • Pwait() : d_atari.c
  • Pwait3() : d_atari.c
  • Pwaitpid() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- r -

  • R_256C_320_480 : BIG2.H
  • Random() : d_atari.c
  • RBHN : BIG2INCL.H
  • RBHS : BIG2INCL.H
  • RBMN : BIG2INCL.H
  • RBMS : BIG2INCL.H
  • rc_intersect() : BIG2DIVR.C , d_big.c , BIG2.H
  • red_acc() : BIG2DEMO.C
  • redraw() : BIG2EVTW.C , BIG2EVTW.H
  • relief() : BIG2DEMO.C
  • res_rsc() : d_big.c , BIG2.H , BIG2FOR2.C
  • resize() : BIG2WINB.C , BIG2WINB.H
  • RETURN : BIG2.H
  • RO180 : BIG2.H
  • RO270 : BIG2.H
  • RO90 : BIG2.H
  • RONORM : BIG2.H
  • Rsconf() : d_atari.c
  • rsrc_free() : d_atari.c
  • rsrc_gaddr() : d_atari.c
  • rsrc_load() : d_atari.c
  • rsrc_obfix() : d_atari.c
  • rsrc_rcfix() : d_atari.c
  • rsrc_saddr() : d_atari.c
  • rtline() : BIG2EVTW.H , BIG2EVTW.C
  • rtpage() : BIG2EVTW.H , BIG2EVTW.C
  • rubberbox() : BIG2WINB.C
  • Rwabs() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- s -

  • SC_BKGR : BIG2INCL.H
  • SC_DN : BIG2INCL.H
  • SC_UP : BIG2INCL.H
  • scan() : BIG2FOR2.C , BIG2FOR2.H
  • scan_form() : BIG2FOR2.C , BIG2FOR2.H
  • scan_menu() : BIG2FOR2.C , BIG2FOR2.H
  • scan_wmenu() : BIG2FOR2.C , BIG2FOR2.H
  • scan_wtool() : BIG2FOR2.C , BIG2FOR2.H
  • Scrdmp() : d_atari.c
  • screen : BIG2FOR2.H , BIG2INIT.C , BIG2FOR1.H
  • scroll : BIG2FOR1.H , BIG2INIT.C , BIG2WIND.H
  • scrp_read() : d_atari.c
  • scrp_write() : d_atari.c
  • selector() : BIG2.H , BIG2DIVR.C , d_big.c
  • SELF : BIG2INCL.H
  • send_mesag() : BIG2.H , BIG2DIVR.C , d_big.c
  • set_attributes() : BIG2.H , BIG2FOR2.C
  • set_bimg() : BIG2DEMO.C
  • set_font() : BIG2DEMO.C
  • set_form() : BIG2DEMO.C
  • set_interface() : BIG2.H , BIG2FOR2.C , d_big.c
  • set_palette() : BIG2.H , BIG2DIVR.C , d_big.c
  • set_popup() : BIG2.H , BIG2FOR1.C , d_big.c
  • set_radio() : BIG2.H , BIG2FOR2.C
  • set_text() : BIG2.H , BIG2EDIT.C , d_big.c
  • set_windows() : BIG2.H , BIG2WINB.C , d_big.c
  • set_work() : BIG2.H , BIG2WINB.C , d_big.c
  • setbuffer() : d_atari.c
  • Setcolor() : d_atari.c
  • Setexc() : d_atari.c
  • setinterrupt() : d_atari.c
  • setmode() : d_atari.c
  • setmontracks() : d_atari.c
  • Setpalette() : d_atari.c
  • Setprt() : d_atari.c
  • Setscreen() : d_atari.c
  • Settime() : d_atari.c
  • settracks() : d_atari.c
  • SH_ARDN : BIG2.H
  • SH_ARLF : BIG2.H
  • SH_ARRT : BIG2.H
  • SH_ARUP : BIG2.H
  • SH_CLR : BIG2.H
  • SH_DELETE : BIG2.H
  • SH_F1 : BIG2.H
  • SH_F10 : BIG2.H
  • SH_F2 : BIG2.H
  • SH_F3 : BIG2.H
  • SH_F4 : BIG2.H
  • SH_F5 : BIG2.H
  • SH_F6 : BIG2.H
  • SH_F7 : BIG2.H
  • SH_F8 : BIG2.H
  • SH_F9 : BIG2.H
  • SH_INSERT : BIG2.H
  • shel_envrn() : d_atari.c
  • shel_find() : d_atari.c
  • shel_get() : d_atari.c
  • shel_put() : d_atari.c
  • shel_read() : d_atari.c
  • shel_write() : d_atari.c
  • size : BIG2DEMO.C
  • size_wform() : BIG2EVTW.C , BIG2EVTW.H
  • sizebw() : BIG2WINB.C , BIG2WINB.H
  • sized() : BIG2EVTW.H , BIG2EVTW.C
  • SIZES : BIG2DEMO.H
  • sld() : BIG2USR2.H , BIG2USR2.C
  • slid() : BIG2WINB.C , BIG2WINB.H
  • SMALLER : BIG2.H
  • sndstatus() : d_atari.c
  • soundcmd() : d_atari.c
  • SPEEDO_GDOS : BIG2.H
  • Ssbrk() : d_atari.c
  • ST : BIG2.H
  • ST_BASSE : BIG2.H
  • ST_HAUTE : BIG2.H
  • ST_MOYENNE : BIG2.H
  • start_edit() : BIG2EDIT.H , BIG2EDIT.C
  • stdkey() : BIG2DIVR.C , BIG2DIVR.H
  • STE : BIG2.H
  • Super() : d_atari.c
  • Supexec() : d_atari.c
  • Sversion() : d_atari.c
  • Syield() : d_atari.c
  • Sysconf() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- t -

  • T_BUREAU : BIG2DEMO.H
  • t_cpu : BIG2.H
  • T_FENETRES : BIG2DEMO.H
  • T_FICHIER : BIG2DEMO.H
  • t_machine : BIG2.H
  • t_proc_graphique : BIG2.H
  • t_resolution : BIG2.H
  • TAB : BIG2.H
  • Talarm() : d_atari.c
  • TBACKSP : BIG2FOR2.C
  • TBKSP : BIG2FOR2.C
  • TCLR : BIG2FOR2.C
  • TDEL : BIG2FOR2.C
  • TDELETE : BIG2FOR2.C
  • test_alerte() : BIG2DEMO.C
  • TEXTE : BIG2DEMO.C
  • TF1 : BIG2FOR2.C
  • TF10 : BIG2FOR2.C
  • TF2 : BIG2FOR2.C
  • TF3 : BIG2FOR2.C
  • TF4 : BIG2FOR2.C
  • TF5 : BIG2FOR2.C
  • TF6 : BIG2FOR2.C
  • TF7 : BIG2FOR2.C
  • TF8 : BIG2FOR2.C
  • TF9 : BIG2FOR2.C
  • Tgetdate() : d_atari.c
  • Tgettime() : d_atari.c
  • THELP : BIG2FOR2.C
  • Tickcal() : d_atari.c
  • timer() : BIG2DIVR.C , d_big.c , BIG2.H
  • TINSERT : BIG2FOR2.C
  • TIT_HIST : BIG2DEMO.H
  • TIT_IMG : BIG2DEMO.H
  • TIT_MENU : BIG2DEMO.H
  • TIT_TXT : BIG2DEMO.H
  • titinf() : BIG2USR2.C , BIG2USR2.H
  • TITRE_GF : BIG2DEMO.H
  • TITRE_PF : BIG2DEMO.H
  • TITREACC : BIG2DEMO.H
  • TL_CENTER : BIG2DEMO.H
  • TL_FONT : BIG2DEMO.H
  • TL_INV : BIG2DEMO.H
  • TL_LEFT : BIG2DEMO.H
  • TL_RIGHT : BIG2DEMO.H
  • TL_SIZE : BIG2DEMO.H
  • TOOL : BIG2DEMO.H
  • topp : BIG2DIAL.C , BIG2WINB.C
  • topped() : BIG2EVTW.C , BIG2EVTW.H
  • trame_desk() : BIG2DEMO.C
  • TRAMES : BIG2DEMO.H
  • trim() : BIG2.H , d_big.c , BIG2DIVR.C
  • TRINDEX : BIG2DEMO.C
  • TRUE : BIG2.H
  • TRUE_COLOR_320_480 : BIG2.H
  • Tsetdate() : d_atari.c
  • Tsettime() : d_atari.c
  • TT : BIG2.H
  • TUNDO : BIG2FOR2.C
  • TW_ACC : BIG2DEMO.H
  • TW_ALERTS : BIG2DEMO.H
  • TW_BUREAU : BIG2DEMO.H
  • TW_OPTIONS : BIG2DEMO.H
  • TXT1 : BIG2DEMO.H
  • TXT2 : BIG2DEMO.H
  • type_gdos : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- u -

  • UNDO : BIG2.H
  • uniconise() : BIG2.H , d_big.c , BIG2EVTW.C
  • unlocksnd() : d_atari.c
  • upline() : BIG2EVTW.H , BIG2EVTW.C
  • uppage() : BIG2EVTW.C , BIG2EVTW.H
  • userdef() : BIG2USR1.H , BIG2USR1.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- v -

  • v_alpha_text() : d_atari.c
  • v_arc() : d_atari.c
  • v_bar() : d_atari.c
  • v_bez() : d_atari.c
  • v_bez_fill() : d_atari.c
  • v_bez_off() : d_atari.c
  • v_bez_on() : d_atari.c
  • v_bez_qual() : d_atari.c
  • v_bit_image() : d_atari.c
  • v_cellarray() : d_atari.c
  • v_circle() : d_atari.c
  • v_clear_disp_list() : d_atari.c
  • v_clrwk() : d_atari.c
  • v_clsvwk() : d_atari.c
  • v_clswk() : d_atari.c
  • v_contourfill() : d_atari.c
  • v_curaddress() : d_atari.c
  • v_curdown() : d_atari.c
  • v_curhome() : d_atari.c
  • v_curleft() : d_atari.c
  • v_curright() : d_atari.c
  • v_curtext() : d_atari.c
  • v_curup() : d_atari.c
  • v_dspcur() : d_atari.c
  • v_eeol() : d_atari.c
  • v_eeos() : d_atari.c
  • v_ellarc() : d_atari.c
  • v_ellipse() : d_atari.c
  • v_ellpie() : d_atari.c
  • v_enter_cur() : d_atari.c
  • v_escape2000() : d_atari.c
  • v_exit_cur() : d_atari.c
  • v_fillarea() : d_atari.c
  • v_flushcache() : d_atari.c
  • v_fontinit() : d_atari.c
  • v_form_adv() : d_atari.c
  • v_ftext() : d_atari.c
  • v_ftext_offset() : d_atari.c
  • v_get_pixel() : d_atari.c
  • v_getbitmap_info() : d_atari.c
  • v_getoutline() : d_atari.c
  • v_gtext() : d_atari.c
  • v_hardcopy() : d_atari.c
  • v_hide_c() : d_atari.c
  • v_justified() : d_atari.c
  • v_killoutline() : d_atari.c
  • v_loadcache() : d_atari.c
  • v_meta_extents() : d_atari.c
  • v_offset() : d_atari.c
  • v_opnvwk() : d_atari.c
  • v_opnwk() : d_atari.c
  • v_output_window() : d_atari.c
  • v_pieslice() : d_atari.c
  • v_pline() : d_atari.c
  • v_pmarker() : d_atari.c
  • v_rbox() : d_atari.c
  • v_rfbox() : d_atari.c
  • v_rmcur() : d_atari.c
  • v_rvoff() : d_atari.c
  • v_rvon() : d_atari.c
  • v_savecache() : d_atari.c
  • v_set_app_buff() : d_atari.c
  • v_show_c() : d_atari.c
  • v_sound() : d_atari.c
  • v_updwk() : d_atari.c
  • v_write_meta() : d_atari.c
  • valide() : BIG2EDIT.C , BIG2EDIT.H
  • VDOWN : BIG2.H
  • vex_butv() : d_atari.c
  • vex_curv() : d_atari.c
  • vex_motv() : d_atari.c
  • vex_timv() : d_atari.c
  • VGA_16COL : BIG2.H
  • VGA_256COL : BIG2.H
  • VgetRGB() : d_atari.c
  • VgetSize() : d_atari.c
  • VLINE : BIG2.H
  • vm_coords() : d_atari.c
  • vm_filename() : d_atari.c
  • vm_pagesize() : d_atari.c
  • vq_aes() : d_atari.c
  • vq_cellarray() : d_atari.c
  • vq_chcells() : d_atari.c
  • vq_color() : d_atari.c
  • vq_cookie() : BIG2.H , BIG2DIVR.C , d_big.c
  • vq_cookie_c() : BIG2.H , BIG2DIVR.C , d_big.c
  • vq_curaddress() : d_atari.c
  • vq_extnd() : d_atari.c
  • vq_gdos() : d_atari.c
  • vq_key_s() : d_atari.c
  • vq_mouse() : d_atari.c
  • vq_scan() : d_atari.c
  • vq_screen() : BIG2INIT.C
  • vq_tabstatus() : d_atari.c
  • vq_tdimensions() : d_atari.c
  • vq_vgdos() : d_atari.c
  • vqf_attributes() : d_atari.c
  • vqin_mode() : d_atari.c
  • vql_attributes() : d_atari.c
  • vqm_attributes() : d_atari.c
  • vqp_error() : d_atari.c
  • vqp_films() : d_atari.c
  • vqp_state() : d_atari.c
  • vqt_advance() : d_atari.c
  • vqt_advance32() : d_atari.c
  • vqt_attributes() : d_atari.c
  • vqt_cachesize() : d_atari.c
  • vqt_devinfo() : d_atari.c
  • vqt_extent() : d_atari.c
  • vqt_f_extent() : d_atari.c
  • vqt_fontheader() : d_atari.c
  • vqt_fontinfo() : d_atari.c
  • vqt_get_table() : d_atari.c
  • vqt_name() : d_atari.c
  • vqt_pairkern() : d_atari.c
  • vqt_trackkern() : d_atari.c
  • vqt_width() : d_atari.c
  • vr_recfl() : d_atari.c
  • vr_trnfm() : d_atari.c
  • vro_cpyfm() : d_atari.c
  • vrq_choice() : d_atari.c
  • vrq_locator() : d_atari.c
  • vrq_string() : d_atari.c
  • vrq_valuator() : d_atari.c
  • vrt_cpyfm() : d_atari.c
  • vs_clip() : d_atari.c
  • vs_color() : d_atari.c
  • vs_curaddress() : d_atari.c
  • vs_mute() : d_atari.c
  • vs_palette() : d_atari.c
  • vsc_expose() : d_atari.c
  • vsc_form() : d_atari.c
  • VsetMask() : d_atari.c
  • Vsetmode() : d_atari.c
  • VsetRGB() : d_atari.c
  • VsetSync() : d_atari.c
  • vsf_color() : d_atari.c
  • vsf_interior() : d_atari.c
  • vsf_perimeter() : d_atari.c
  • vsf_style() : d_atari.c
  • vsf_udpat() : d_atari.c
  • vsin_mode() : d_atari.c
  • vsl_color() : d_atari.c
  • vsl_ends() : d_atari.c
  • vsl_type() : d_atari.c
  • vsl_udsty() : d_atari.c
  • vsl_width() : d_atari.c
  • vslid() : BIG2EVTW.H , BIG2EVTW.C
  • vsm_choice() : d_atari.c
  • vsm_color() : d_atari.c
  • vsm_height() : d_atari.c
  • vsm_locator() : d_atari.c
  • vsm_string() : d_atari.c
  • vsm_type() : d_atari.c
  • vsm_valuator() : d_atari.c
  • vsp_film() : d_atari.c
  • vsp_message() : d_atari.c
  • vsp_save() : d_atari.c
  • vsp_state() : d_atari.c
  • vst_alignment() : d_atari.c
  • vst_arbpt() : d_atari.c
  • vst_arbpt32() : d_atari.c
  • vst_charmap() : d_atari.c
  • vst_color() : d_atari.c
  • vst_effects() : d_atari.c
  • vst_error() : d_atari.c
  • vst_font() : d_atari.c
  • vst_height() : d_atari.c
  • vst_kern() : d_atari.c
  • vst_load_fonts() : d_atari.c
  • vst_point() : d_atari.c
  • vst_rotation() : d_atari.c
  • vst_scratch() : d_atari.c
  • vst_setsize() : d_atari.c
  • vst_setsize32() : d_atari.c
  • vst_skew() : d_atari.c
  • vst_unload_fonts() : d_atari.c
  • vswr_mode() : d_atari.c
  • Vsync() : d_atari.c
  • vt_alignment() : d_atari.c
  • vt_axis() : d_atari.c
  • vt_origin() : d_atari.c
  • vt_resolution() : d_atari.c
  • VTOP : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- w -

  • W_MENU : BIG2DEMO.H
  • WATR_ALLB : BIG2.H
  • WATR_ALLG : BIG2.H
  • WATR_CURRB : BIG2.H
  • WATR_CURRG : BIG2.H
  • WATR_FORMB : BIG2.H
  • WATR_FORMG : BIG2.H
  • WFARROW : BIG2.H
  • WFCALAG : BIG2.H
  • WFCLOSE : BIG2.H
  • WFDECAL : BIG2.H
  • WFFULL : BIG2.H
  • WFGROUP : BIG2.H
  • WFLAST : BIG2.H
  • win : BIG2DIAL.H , BIG2DIVR.H , BIG2EVTW.H , BIG2FOR2.H , BIG2HELP.H , BIG2INIT.C , BIG2WIND.H , d_big.c , BIG2.H
  • wind : BIG2.H , BIG2DIAL.H , BIG2INIT.C , d_big.c
  • wind_calc() : d_atari.c
  • wind_close() : d_atari.c
  • wind_create() : d_atari.c
  • wind_delete() : d_atari.c
  • wind_find() : d_atari.c
  • wind_get() : d_atari.c
  • wind_hierarch() : BIG2WIND.C , BIG2WIND.H
  • wind_mouse() : BIG2WIND.C , BIG2WIND.H
  • wind_new() : d_atari.c
  • wind_open() : d_atari.c
  • wind_set() : d_atari.c
  • wind_update() : d_atari.c
  • WINDACC : BIG2DEMO.C
  • WINDMENU : BIG2DEMO.C
  • winicn() : BIG2DEMO.C
  • wm_arrow() : BIG2EVTW.C , BIG2EVTW.H
  • WM_BKGR : BIG2.H
  • WM_BOXARROWS : BIG2.H
  • WM_BOXMENU : BIG2.H
  • WM_BOXTITLES : BIG2.H
  • WM_LFARROW : BIG2.H
  • WM_RTARROW : BIG2.H
  • work() : BIG2USR2.C , BIG2USR2.H
  • work_display : BIG2EVTW.H , d_big.c , BIG2WIND.H , BIG2DIVR.H , BIG2.H , BIG2USR1.H , BIG2INIT.C , BIG2EDIT.H , BIG2FOR2.H , BIG2DIAL.H , BIG2FOR1.H , BIG2HELP.H , BIG2USR2.H
  • WTYP_FORM : BIG2.H
  • WTYP_MENU : BIG2.H
  • WTYP_NORM : BIG2.H
  • WTYP_PICT : BIG2.H
  • WTYP_TOOL : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- x -

  • xbios() : d_atari.c
  • Xbtimer() : d_atari.c
  • xedit : BIG2USR1.H , BIG2INIT.C
  • xpict : BIG2USR1.H , BIG2INIT.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- a -

  • ADR : BIG2.H
  • AIDE : BIG2INCL.H
  • AIDE1 : BIG2DEMO.H
  • AIDE2 : BIG2DEMO.H
  • AIDE_OBJET : BIG2.H
  • AL_BKGR : BIG2INCL.H
  • AL_BU1 : BIG2INCL.H
  • AL_BU2 : BIG2INCL.H
  • AL_BU3 : BIG2INCL.H
  • AL_IC : BIG2INCL.H
  • AL_ICONES : BIG2DEMO.H
  • AL_MOVE : BIG2INCL.H
  • AL_POINTEUR : BIG2DEMO.H
  • AL_ST1 : BIG2INCL.H
  • AL_ST2 : BIG2INCL.H
  • AL_ST3 : BIG2INCL.H
  • AL_ST4 : BIG2INCL.H
  • AL_ST5 : BIG2INCL.H
  • ALERT : BIG2DEMO.H
  • ALLSIZER : BIG2.H
  • ARDN : BIG2.H
  • ARLF : BIG2.H
  • ARRT : BIG2.H
  • ARUP : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- m -

  • M_ALERTE : BIG2DEMO.H
  • M_FORMLIBRE : BIG2DEMO.H
  • M_INFOS : BIG2DEMO.H
  • M_QUITTER : BIG2DEMO.H
  • M_WFORMGRAND : BIG2DEMO.H
  • M_WFORMPETIT : BIG2DEMO.H
  • M_WMENU : BIG2DEMO.H
  • M_WWIND : BIG2DEMO.H
  • max : BIG2.H
  • MAX_ALRT : BIG2.H
  • MENU : BIG2DEMO.H
  • MERCI : BIG2DEMO.H
  • MH_HISTO : BIG2DEMO.H
  • MHIERA : BIG2DEMO.H
  • min : BIG2.H
  • MTCARRE : BIG2.H
  • MTCROIX : BIG2.H
  • MTETOILE : BIG2.H
  • MTLOSANGE : BIG2.H
  • MTPLUS : BIG2.H
  • MTPOINT : BIG2.H
  • MW_AL : BIG2DEMO.H
  • MW_ALERTE : BIG2DEMO.H
  • MW_IMAGE : BIG2DEMO.H
  • MW_INFOS : BIG2DEMO.H
  • MWH_ICN0 : BIG2DEMO.H
  • MWH_ICN1 : BIG2DEMO.H
  • MWH_ICN2 : BIG2DEMO.H
  • MWH_ICN3 : BIG2DEMO.H
  • MWH_ICN4 : BIG2DEMO.H
  • MWH_ICN5 : BIG2DEMO.H
  • MWH_ICN6 : BIG2DEMO.H
  • MWH_ICN7 : BIG2DEMO.H
  • MWH_ICN8 : BIG2DEMO.H
  • MWH_ICN9 : BIG2DEMO.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- n -

  • NB_FENETRES : BIG2DEMO.C
  • NFU : BIG2USR1.H
  • NGAD : BIG2.H
  • NOT : BIG2.H
  • NOT_WINDOW : BIG2INCL.H
  • NOTOP : BIG2.H
  • NTU : BIG2USR1.H
  • NU : BIG2USR1.H
  • NUM_TREE : BIG2DEMO.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- z -

  • ZERO : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- b -

  • B_BUTTON : translate.h
  • B_COCHE : translate.h
  • B_EDIT : BIG2.H
  • B_FNCP : BIG2.H
  • B_FRAME : BIG2.H
  • B_GRASTR : BIG2.H
  • B_HELP : BIG2.H
  • B_HIERM : BIG2.H
  • B_LIST : BIG2.H
  • B_MOVE : BIG2.H
  • B_PICT : BIG2.H
  • B_POPUP : BIG2.H
  • B_SELEC : BIG2.H
  • B_SMSTR : BIG2.H
  • B_UNDER : BIG2.H
  • B_UNDO : BIG2.H
  • BA_BC : BIG2DEMO.H
  • BA_BKGR : BIG2INCL.H
  • BA_FNT : BIG2DEMO.H
  • BA_LF : BIG2INCL.H
  • BA_PU : BIG2DEMO.H
  • BA_PUBX : BIG2DEMO.H
  • BA_PUIM : BIG2DEMO.H
  • BA_RB : BIG2DEMO.H
  • BA_RT : BIG2INCL.H
  • BA_SIZ : BIG2DEMO.H
  • BA_TC : BIG2DEMO.H
  • BA_TD : BIG2DEMO.H
  • BA_TG : BIG2DEMO.H
  • BA_TI : BIG2DEMO.H
  • BACKSPC : BIG2.H
  • BCHN : BIG2INCL.H
  • BCHS : BIG2INCL.H
  • BCMN : BIG2INCL.H
  • BCMS : BIG2INCL.H
  • BEV_FREEPU : BIG2.H
  • BEV_HIERM : BIG2.H
  • BEV_TOOL : BIG2.H
  • BEV_WFORM : BIG2.H
  • BEV_WHIER : BIG2.H
  • BEV_WMENU : BIG2.H
  • BIG_WIND : BIG2INCL.H
  • BIGALERTE : BIG2INCL.H
  • BIGARRM : BIG2INCL.H
  • BIGARRS : BIG2INCL.H
  • BIGICN : BIG2INCL.H
  • BIGLIST : BIG2INCL.H
  • BIGNOT_RSC : BIG2INCL.H
  • BIMAGE : BIG2DEMO.C
  • BIT15 : BIG2.H
  • BKGR : BIG2.H
  • BL_ASC : BIG2INCL.H
  • BL_BA : BIG2INCL.H
  • BL_BKGR : BIG2INCL.H
  • BL_DN : BIG2INCL.H
  • BL_S1 : BIG2INCL.H
  • BL_S2 : BIG2INCL.H
  • BL_S3 : BIG2INCL.H
  • BL_S4 : BIG2INCL.H
  • BL_S5 : BIG2INCL.H
  • BL_S6 : BIG2INCL.H
  • BL_S7 : BIG2INCL.H
  • BL_S8 : BIG2INCL.H
  • BL_SL : BIG2INCL.H
  • BL_UP : BIG2INCL.H
  • BLANK : BIG2.H
  • BS_RIGHT : BIG2.H
  • BU_BOXTXT : BIG2DEMO.H
  • BU_ICN : BIG2DEMO.H
  • BU_IMG : BIG2DEMO.H
  • BU_TXT1 : BIG2DEMO.H
  • BU_TXT2 : BIG2DEMO.H
  • BUREAU : BIG2DEMO.H
  • BW_BARRE : BIG2INCL.H
  • BW_BKGR : BIG2INCL.H
  • BW_CLOSER : BIG2INCL.H
  • BW_CYCLER : BIG2INCL.H
  • BW_DNARROW : BIG2INCL.H
  • BW_FULLER : BIG2INCL.H
  • BW_HBAR : BIG2INCL.H
  • BW_HELEV : BIG2INCL.H
  • BW_HSLIDE : BIG2INCL.H
  • BW_INFO : BIG2INCL.H
  • BW_LFARROW : BIG2INCL.H
  • BW_MOVER : BIG2INCL.H
  • BW_RTARROW : BIG2INCL.H
  • BW_SIZERDL : BIG2INCL.H
  • BW_SIZERDR : BIG2INCL.H
  • BW_SIZERUL : BIG2INCL.H
  • BW_SIZERUR : BIG2INCL.H
  • BW_SMALLER : BIG2INCL.H
  • BW_UPARROW : BIG2INCL.H
  • BW_VBAR : BIG2INCL.H
  • BW_VELEV : BIG2INCL.H
  • BW_VSLIDE : BIG2INCL.H
  • BW_WORK : BIG2INCL.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- c -

  • CADRE1 : BIG2DEMO.H
  • CADRE2 : BIG2DEMO.H
  • CHARGEIMG : BIG2DEMO.H
  • CHARGETXT : BIG2DEMO.H
  • CharProLine : BIG2HELP.C
  • CLR : BIG2.H
  • CONTACT : BIG2DEMO.H
  • COULEURS : BIG2DEMO.H
  • CT_ARDN : BIG2.H
  • CT_ARLF : BIG2.H
  • CT_ARRT : BIG2.H
  • CT_ARUP : BIG2.H
  • CT_CLR : BIG2.H
  • CYCLER : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- d -

  • DCDEFAULT : BIG2.H
  • DELETE : BIG2.H
  • DLG_DESK : BIG2.H
  • DLG_FORM : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- e -

  • EFCONT : BIG2.H
  • EFGRAS : BIG2.H
  • EFGRIS : BIG2.H
  • EFITAL : BIG2.H
  • EFNONE : BIG2.H
  • EFSOULI : BIG2.H
  • ENTER : BIG2.H
  • ESC : BIG2.H
  • ESPACE : BIG2.H
  • EXITAUTO : BIG2INCL.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- f -

  • F1 : BIG2.H
  • F10 : BIG2.H
  • F2 : BIG2.H
  • F3 : BIG2.H
  • F4 : BIG2.H
  • F5 : BIG2.H
  • F6 : BIG2.H
  • F7 : BIG2.H
  • F8 : BIG2.H
  • F9 : BIG2.H
  • FALSE : BIG2.H
  • FO_BC1 : BIG2DEMO.H
  • FO_BC2 : BIG2DEMO.H
  • FO_PUI : BIG2DEMO.H
  • FO_PUT : BIG2DEMO.H
  • FO_RBA1 : BIG2DEMO.H
  • FO_RBA2 : BIG2DEMO.H
  • FO_RBB1 : BIG2DEMO.H
  • FO_RBB2 : BIG2DEMO.H
  • FO_RBB3 : BIG2DEMO.H
  • FONTS : BIG2DEMO.H
  • FORMULAIRE : BIG2DEMO.H
  • FRSTR : BIG2DEMO.C
  • FS_ANN : BIG2INCL.H
  • FS_ARDN : BIG2INCL.H
  • FS_ARUP : BIG2INCL.H
  • FS_ASC : BIG2INCL.H
  • FS_BF : BIG2INCL.H
  • FS_BOX : BIG2INCL.H
  • FS_BOXAR : BIG2INCL.H
  • FS_BOXF : BIG2INCL.H
  • FS_BOXL : BIG2INCL.H
  • FS_FILTRE : BIG2INCL.H
  • FS_LA : BIG2INCL.H
  • FS_LP : BIG2INCL.H
  • FS_MOVE : BIG2INCL.H
  • FS_OK : BIG2INCL.H
  • FS_PATH : BIG2INCL.H
  • FS_RETOUR : BIG2INCL.H
  • FS_SAISIE : BIG2INCL.H
  • FS_SLD : BIG2INCL.H
  • FS_TITRE : BIG2INCL.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- g -

  • GA_ADNH : BIG2INCL.H
  • GA_ADNM : BIG2INCL.H
  • GA_ALFH : BIG2INCL.H
  • GA_ALFM : BIG2INCL.H
  • GA_ARTH : BIG2INCL.H
  • GA_ARTM : BIG2INCL.H
  • GA_AUPH : BIG2INCL.H
  • GA_AUPM : BIG2INCL.H
  • GA_CLOH : BIG2INCL.H
  • GA_CLOM : BIG2INCL.H
  • GA_CYCH : BIG2INCL.H
  • GA_CYCM : BIG2INCL.H
  • GA_FULH : BIG2INCL.H
  • GA_FULM : BIG2INCL.H
  • GA_SDLH : BIG2INCL.H
  • GA_SDLM : BIG2INCL.H
  • GA_SDRH : BIG2INCL.H
  • GA_SDRM : BIG2INCL.H
  • GA_SLHH : BIG2INCL.H
  • GA_SLHM : BIG2INCL.H
  • GA_SLVH : BIG2INCL.H
  • GA_SLVM : BIG2INCL.H
  • GA_SMAH : BIG2INCL.H
  • GA_SMAM : BIG2INCL.H
  • GA_SULH : BIG2INCL.H
  • GA_SULM : BIG2INCL.H
  • GA_SURH : BIG2INCL.H
  • GA_SURM : BIG2INCL.H
  • GADGETS : BIG2INCL.H
  • get_popup : BIG2.H
  • GF_AIDE : BIG2DEMO.H
  • GF_ANNULE : BIG2DEMO.H
  • GF_APPLIQUE : BIG2DEMO.H
  • GF_BC1 : BIG2DEMO.H
  • GF_BC2 : BIG2DEMO.H
  • GF_CONFIRME : BIG2DEMO.H
  • GF_ICN : BIG2DEMO.H
  • GF_PL : BIG2DEMO.H
  • GF_PU1 : BIG2DEMO.H
  • GF_PU2 : BIG2DEMO.H
  • GF_RAZ : BIG2DEMO.H
  • GF_RBA1 : BIG2DEMO.H
  • GF_RBA2 : BIG2DEMO.H
  • GF_RBA3 : BIG2DEMO.H
  • GF_RBA4 : BIG2DEMO.H
  • GF_RBB1 : BIG2DEMO.H
  • GF_RBB2 : BIG2DEMO.H
  • GF_RBB3 : BIG2DEMO.H
  • GF_RBB4 : BIG2DEMO.H
  • GF_RBC1 : BIG2DEMO.H
  • GF_RBC2 : BIG2DEMO.H
  • GF_RBC3 : BIG2DEMO.H
  • GF_RBC4 : BIG2DEMO.H
  • GRAND_FORM : BIG2DEMO.C
  • GRANDFORM : BIG2DEMO.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- h -

  • HCENT : BIG2.H
  • HELP : BIG2.H
  • HIERWIND : BIG2DEMO.H
  • HISTO : BIG2DEMO.C
  • HLEFT : BIG2.H
  • HMINUS : BIG2.H
  • HNORM : BIG2.H
  • HPETIT : BIG2.H
  • HRIGHT : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- i -

  • ICN_WF : BIG2DEMO.H
  • ICN_WN : BIG2DEMO.H
  • IMAGE : BIG2DEMO.C
  • IMG_USER : BIG2INCL.H
  • INF_HIST : BIG2DEMO.H
  • INF_INFOS : BIG2DEMO.H
  • INF_MERCI : BIG2DEMO.H
  • INF_SORTIE : BIG2DEMO.H
  • INFOS : BIG2DEMO.H
  • INSERT : BIG2.H
  • INTGR : BIG2DEMO.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- p -

  • P_AIDE : BIG2DEMO.H
  • P_ANNULE : BIG2DEMO.H
  • P_CONFIRME : BIG2DEMO.H
  • PETIT_FORM : BIG2DEMO.C
  • PETITFORM : BIG2DEMO.H
  • PF_AIDE : BIG2DEMO.H
  • PF_ANNULE : BIG2DEMO.H
  • PF_APPLIQUE : BIG2DEMO.H
  • PF_BC1 : BIG2DEMO.H
  • PF_BC2 : BIG2DEMO.H
  • PF_CHAMP1 : BIG2DEMO.H
  • PF_CHAMP2 : BIG2DEMO.H
  • PF_CHAMP3 : BIG2DEMO.H
  • PF_CHAMP4 : BIG2DEMO.H
  • PF_COLOR : BIG2DEMO.H
  • PF_CONFIRME : BIG2DEMO.H
  • PF_RAZ : BIG2DEMO.H
  • PF_TRAME : BIG2DEMO.H
  • POINTIL : BIG2.H
  • POP_UP1 : BIG2DEMO.H
  • POP_UP2 : BIG2DEMO.H
  • POPUP_ICN : BIG2DEMO.H
  • PU_LIBRE : BIG2DEMO.H
  • PUH : BIG2INCL.H
  • PUL_ALERT : BIG2DEMO.H
  • PUL_WMENU : BIG2DEMO.H
  • PUM : BIG2INCL.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- r -

  • RBHN : BIG2INCL.H
  • RBHS : BIG2INCL.H
  • RBMN : BIG2INCL.H
  • RBMS : BIG2INCL.H
  • RETURN : BIG2.H
  • RO180 : BIG2.H
  • RO270 : BIG2.H
  • RO90 : BIG2.H
  • RONORM : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- s -

  • SC_BKGR : BIG2INCL.H
  • SC_DN : BIG2INCL.H
  • SC_UP : BIG2INCL.H
  • SELF : BIG2INCL.H
  • SH_ARDN : BIG2.H
  • SH_ARLF : BIG2.H
  • SH_ARRT : BIG2.H
  • SH_ARUP : BIG2.H
  • SH_CLR : BIG2.H
  • SH_DELETE : BIG2.H
  • SH_F1 : BIG2.H
  • SH_F10 : BIG2.H
  • SH_F2 : BIG2.H
  • SH_F3 : BIG2.H
  • SH_F4 : BIG2.H
  • SH_F5 : BIG2.H
  • SH_F6 : BIG2.H
  • SH_F7 : BIG2.H
  • SH_F8 : BIG2.H
  • SH_F9 : BIG2.H
  • SH_INSERT : BIG2.H
  • SIZES : BIG2DEMO.H
  • SMALLER : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- t -

  • T_BUREAU : BIG2DEMO.H
  • T_FENETRES : BIG2DEMO.H
  • T_FICHIER : BIG2DEMO.H
  • TAB : BIG2.H
  • TBACKSP : BIG2FOR2.C
  • TBKSP : BIG2FOR2.C
  • TCLR : BIG2FOR2.C
  • TDEL : BIG2FOR2.C
  • TDELETE : BIG2FOR2.C
  • TEXTE : BIG2DEMO.C
  • TF1 : BIG2FOR2.C
  • TF10 : BIG2FOR2.C
  • TF2 : BIG2FOR2.C
  • TF3 : BIG2FOR2.C
  • TF4 : BIG2FOR2.C
  • TF5 : BIG2FOR2.C
  • TF6 : BIG2FOR2.C
  • TF7 : BIG2FOR2.C
  • TF8 : BIG2FOR2.C
  • TF9 : BIG2FOR2.C
  • THELP : BIG2FOR2.C
  • TINSERT : BIG2FOR2.C
  • TIT_HIST : BIG2DEMO.H
  • TIT_IMG : BIG2DEMO.H
  • TIT_MENU : BIG2DEMO.H
  • TIT_TXT : BIG2DEMO.H
  • TITRE_GF : BIG2DEMO.H
  • TITRE_PF : BIG2DEMO.H
  • TITREACC : BIG2DEMO.H
  • TL_CENTER : BIG2DEMO.H
  • TL_FONT : BIG2DEMO.H
  • TL_INV : BIG2DEMO.H
  • TL_LEFT : BIG2DEMO.H
  • TL_RIGHT : BIG2DEMO.H
  • TL_SIZE : BIG2DEMO.H
  • TOOL : BIG2DEMO.H
  • TRAMES : BIG2DEMO.H
  • TRINDEX : BIG2DEMO.C
  • TRUE : BIG2.H
  • TUNDO : BIG2FOR2.C
  • TW_ACC : BIG2DEMO.H
  • TW_ALERTS : BIG2DEMO.H
  • TW_BUREAU : BIG2DEMO.H
  • TW_OPTIONS : BIG2DEMO.H
  • TXT1 : BIG2DEMO.H
  • TXT2 : BIG2DEMO.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- u -

  • UNDO : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- v -

  • VDOWN : BIG2.H
  • VLINE : BIG2.H
  • VTOP : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • m
  • n
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • z

- w -

  • W_MENU : BIG2DEMO.H
  • WATR_ALLB : BIG2.H
  • WATR_ALLG : BIG2.H
  • WATR_CURRB : BIG2.H
  • WATR_CURRG : BIG2.H
  • WATR_FORMB : BIG2.H
  • WATR_FORMG : BIG2.H
  • WFARROW : BIG2.H
  • WFCALAG : BIG2.H
  • WFCLOSE : BIG2.H
  • WFDECAL : BIG2.H
  • WFFULL : BIG2.H
  • WFGROUP : BIG2.H
  • WFLAST : BIG2.H
  • WINDACC : BIG2DEMO.C
  • WINDMENU : BIG2DEMO.C
  • WM_BKGR : BIG2.H
  • WM_BOXARROWS : BIG2.H
  • WM_BOXMENU : BIG2.H
  • WM_BOXTITLES : BIG2.H
  • WM_LFARROW : BIG2.H
  • WM_RTARROW : BIG2.H
  • WTYP_FORM : BIG2.H
  • WTYP_MENU : BIG2.H
  • WTYP_NORM : BIG2.H
  • WTYP_PICT : BIG2.H
  • WTYP_TOOL : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • t_cpu : BIG2.H
  • t_machine : BIG2.H
  • t_proc_graphique : BIG2.H
  • t_resolution : BIG2.H
  • type_gdos : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • AUCUN_GDOS : BIG2.H
  • AUTRE_MACHINE : BIG2.H
  • AUTRE_PG : BIG2.H
  • AUTRE_PROCESSEUR : BIG2.H
  • FALCON_030 : BIG2.H
  • FONT_GDOS : BIG2.H
  • FSM_GDOS : BIG2.H
  • GDOS_STANDARD : BIG2.H
  • INCONNU : BIG2.H
  • PG_FALCON_030 : BIG2.H
  • PG_ST : BIG2.H
  • PG_STE : BIG2.H
  • PG_TT : BIG2.H
  • PROC_68000 : BIG2.H
  • PROC_68030 : BIG2.H
  • R_256C_320_480 : BIG2.H
  • SPEEDO_GDOS : BIG2.H
  • ST : BIG2.H
  • ST_BASSE : BIG2.H
  • ST_HAUTE : BIG2.H
  • ST_MOYENNE : BIG2.H
  • STE : BIG2.H
  • TRUE_COLOR_320_480 : BIG2.H
  • TT : BIG2.H
  • VGA_16COL : BIG2.H
  • VGA_256COL : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- _ -

  • _crystal() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- j -

  • Jdisint() : d_atari.c
  • Jenabint() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- k -

  • Kbdvbase() : d_atari.c
  • Kbrate() : d_atari.c
  • Kbshift() : d_atari.c
  • Keytbl() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- l -

  • last() : BIG2EDIT.C , BIG2EDIT.H
  • lfline() : BIG2EVTW.H , BIG2EVTW.C
  • lfpage() : BIG2EVTW.C , BIG2EVTW.H
  • load_fontspeedo() : BIG2DEMO.C
  • load_image() : BIG_IMGS.H
  • load_img() : BIG_IMGS.H
  • load_pac() : BIG_IMGS.H
  • load_pcx() : BIG_IMGS.H
  • load_pix() : BIG_IMGS.H
  • locksnd() : d_atari.c
  • Logbase() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- m -

  • m_title() : BIG2FOR2.C , BIG2FOR2.H
  • Maddalt() : d_atari.c
  • main() : BIG2DEMO.C
  • Malloc() : d_atari.c
  • match() : d_big.c , BIG2.H , BIG2FOR1.C
  • Mediach() : d_atari.c
  • menu_attach() : d_atari.c
  • menu_bar() : d_atari.c
  • menu_hierarch() : BIG2FOR1.C , BIG2FOR1.H
  • menu_icheck() : d_atari.c
  • menu_ienable() : d_atari.c
  • menu_istart() : d_atari.c
  • menu_ok() : BIG2DIAL.C , BIG2DIAL.H
  • menu_popup() : d_atari.c
  • menu_register() : d_atari.c
  • menu_settings() : d_atari.c
  • menu_text() : d_atari.c
  • menu_tnormal() : d_atari.c
  • menu_window() : BIG2WIND.C , BIG2WIND.H
  • Mfpint() : d_atari.c
  • Mfree() : d_atari.c
  • Midiws() : d_atari.c
  • mon_type() : d_atari.c
  • move_form() : BIG2FOR2.C , BIG2FOR2.H
  • movebw() : BIG2WINB.H , BIG2WINB.C
  • moved() : BIG2EVTW.H , BIG2EVTW.C
  • Mshrink() : d_atari.c
  • Mxalloc() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- n -

  • next() : BIG2EDIT.C , BIG2EDIT.H
  • next_cookie() : BIG2DIVR.C , d_big.c , BIG2.H
  • next_option() : BIG2FOR1.C , BIG2FOR1.H
  • next_wind() : BIG2.H , BIG2WIND.C , d_big.c
  • next_word() : BIG2EDIT.C , BIG2EDIT.H
  • no_top() : BIG2WINB.C , BIG2WINB.H
  • NVMaccess() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- o -

  • objc_add() : d_atari.c
  • objc_change() : d_atari.c
  • objc_delete() : d_atari.c
  • objc_draw() : d_atari.c
  • objc_edit() : d_atari.c
  • objc_find() : d_atari.c
  • objc_offset() : d_atari.c
  • objc_order() : d_atari.c
  • objc_xedit() : BIG2.H , BIG2EDIT.C , d_big.c
  • objets_desk() : BIG2DEMO.C
  • Offgibit() : d_atari.c
  • Ongibit() : d_atari.c
  • open_window() : BIG2WIND.C , d_big.c , BIG2.H
  • open_work() : BIG2INIT.C
  • option_find() : BIG2DIAL.C , BIG2DIAL.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- z -

  • zone_work() : BIG2.H , d_big.c , BIG2WIND.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- a -

  • acc_loop() : BIG2DEMO.C
  • aff_histo() : BIG2DEMO.C
  • aff_infos() : BIG2DEMO.C
  • aff_texte() : BIG2DEMO.C
  • affiche_bulle() : BIG2HELP.C
  • alliconise() : d_big.c , BIG2.H , BIG2EVTW.C
  • appl_exit() : d_atari.c
  • appl_find() : d_atari.c
  • appl_getinfo() : d_atari.c
  • appl_init() : d_atari.c
  • appl_read() : d_atari.c
  • appl_search() : d_atari.c
  • appl_tplay() : d_atari.c
  • appl_trecord() : d_atari.c
  • appl_write() : d_atari.c
  • arrows() : BIG2WINB.H , BIG2WINB.C
  • asce() : BIG2WINB.C , BIG2WINB.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- b -

  • bak_rsc() : BIG2.H , BIG2FOR2.C , d_big.c
  • bcadre() : BIG2USR1.C , BIG2USR1.H
  • bcoche() : BIG2USR1.C , BIG2USR1.H
  • Bconin() : d_atari.c
  • Bconmap() : d_atari.c
  • Bconout() : d_atari.c
  • Bconstat() : d_atari.c
  • Bcostat() : d_atari.c
  • bgrastr() : BIG2USR1.C , BIG2USR1.H
  • big_alert() : BIG2FOR2.C , d_big.c , BIG2.H
  • bios() : d_atari.c
  • Bioskeys() : d_atari.c
  • Blitmode() : d_atari.c
  • bmhier() : BIG2USR1.C , BIG2USR1.H
  • bmove() : BIG2USR1.C , BIG2USR1.H
  • bniceline() : BIG2USR1.C , BIG2USR1.H
  • bpict() : BIG2USR1.C , BIG2USR1.H
  • bpopup() : BIG2USR1.C , BIG2USR1.H
  • brond() : BIG2USR1.H , BIG2USR1.C
  • bsmstr() : BIG2USR1.C , BIG2USR1.H
  • buffoper() : d_atari.c
  • buffptr() : d_atari.c
  • bulle_attach() : BIG2.H , d_big.c , BIG2FOR2.C
  • bunder() : BIG2USR1.C , BIG2USR1.H
  • bwind_calc() : d_big.c , BIG2WINB.C , BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- c -

  • Cauxin() : d_atari.c
  • Cauxis() : d_atari.c
  • Cauxos() : d_atari.c
  • Cauxout() : d_atari.c
  • Cconin() : d_atari.c
  • Cconis() : d_atari.c
  • Cconos() : d_atari.c
  • Cconout() : d_atari.c
  • Cconrs() : d_atari.c
  • Cconws() : d_atari.c
  • charge_image() : BIG2DEMO.C
  • charge_texte() : BIG2DEMO.C
  • clipp() : BIG2.H , BIG2DIVR.C , d_big.c
  • clos_acc() : BIG2DEMO.C
  • close_histo() : BIG2DEMO.C
  • close_img() : BIG2DEMO.C
  • close_txt() : BIG2DEMO.C
  • close_wmenu() : BIG2DEMO.C
  • closed() : BIG2.H , BIG2EVTW.C , d_big.c
  • Cnecin() : d_atari.c
  • copy() : BIG2EDIT.C , BIG2EDIT.H
  • Cprnos() : d_atari.c
  • Cprnout() : d_atari.c
  • Crawcin() : d_atari.c
  • Crawio() : d_atari.c
  • create_hierm() : BIG2FOR2.C , d_big.c , BIG2.H
  • create_popup() : BIG2FOR2.C , d_big.c , BIG2.H
  • create_scroll() : BIG2FOR1.C , BIG2FOR1.H
  • create_wmenu() : BIG2WIND.H , BIG2WIND.C
  • cree_histo() : BIG2DEMO.C
  • Cursconf() : d_atari.c
  • cut() : BIG2EDIT.H , BIG2EDIT.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- d -

  • dcl_windows() : BIG2WIND.C , BIG2WIND.H
  • Dclosedir() : d_atari.c
  • Dcntl() : d_atari.c
  • Dcreate() : d_atari.c
  • Ddelete() : d_atari.c
  • devconnect() : d_atari.c
  • Dfree() : d_atari.c
  • Dgetdrv() : d_atari.c
  • Dgetpath() : d_atari.c
  • dial() : BIG2DIAL.C , BIG2DIAL.H
  • dialog() : BIG2.H , BIG2DIAL.C , d_big.c
  • dialog_light() : BIG2DIAL.C
  • dlg_button() : BIG2DIAL.C , BIG2DIAL.H
  • dlg_keybd() : BIG2DIAL.C , BIG2DIAL.H
  • dlg_mesag() : BIG2DIAL.C , BIG2DIAL.H
  • dlg_mouse() : BIG2.H , BIG2DIAL.C , d_big.c
  • Dlock() : d_atari.c
  • DMAread() : d_atari.c
  • DMAwrite() : d_atari.c
  • dnline() : BIG2EVTW.C , BIG2EVTW.H
  • dnpage() : BIG2EVTW.H , BIG2EVTW.C
  • Dopendir() : d_atari.c
  • Dosound() : d_atari.c
  • Dpathconf() : d_atari.c
  • dragbox() : BIG2WINB.C
  • draw_curs() : BIG2EDIT.C , BIG2EDIT.H
  • draw_obj() : BIG2WINB.C , BIG2WINB.H
  • draw_object() : BIG2.H , BIG2WIND.C , d_big.c
  • draw_title() : BIG2.H , BIG2WINB.C
  • draw_wind() : BIG2WINB.H , BIG2WINB.C
  • Dreaddir() : d_atari.c
  • Drewinddir() : d_atari.c
  • Drvmap() : d_atari.c
  • Dsetdrv() : d_atari.c
  • Dsetpath() : d_atari.c
  • Dsp_Available() : d_atari.c
  • Dsp_BlkBytes() : d_atari.c
  • Dsp_BlkHandShake() : d_atari.c
  • Dsp_BlkUnpacked() : d_atari.c
  • Dsp_BlkWords() : d_atari.c
  • Dsp_DoBlock() : d_atari.c
  • Dsp_ExecBoot() : d_atari.c
  • Dsp_ExecProg() : d_atari.c
  • Dsp_FlushSubroutines() : d_atari.c
  • Dsp_GetProgAbility() : d_atari.c
  • Dsp_GetWordSize() : d_atari.c
  • Dsp_Hf0() : d_atari.c
  • Dsp_Hf1() : d_atari.c
  • Dsp_Hf2() : d_atari.c
  • Dsp_Hf3() : d_atari.c
  • Dsp_HStat() : d_atari.c
  • Dsp_InqSubrAbility() : d_atari.c
  • Dsp_InStream() : d_atari.c
  • Dsp_IOStream() : d_atari.c
  • Dsp_LoadProg() : d_atari.c
  • Dsp_LoadSubroutine() : d_atari.c
  • Dsp_Lock() : d_atari.c
  • Dsp_LodToBinary() : d_atari.c
  • Dsp_MultBlocks() : d_atari.c
  • Dsp_OutStream() : d_atari.c
  • Dsp_RemoveInterrupts() : d_atari.c
  • Dsp_RequestUniqueAbility() : d_atari.c
  • Dsp_Reserve() : d_atari.c
  • Dsp_RunSubroutine() : d_atari.c
  • Dsp_SetVectors() : d_atari.c
  • Dsp_TriggerHC() : d_atari.c
  • Dsp_Unlock() : d_atari.c
  • dsptristate() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- e -

  • EgetPalette() : d_atari.c
  • Egetshift() : d_atari.c
  • elev() : BIG2USR2.H , BIG2USR2.C
  • empty() : BIG2.H , BIG2DIVR.C , d_big.c
  • empty_edit() : BIG2EDIT.C , BIG2EDIT.H
  • end() : BIG2.H , BIG2INIT.C , d_big.c
  • EsetBank() : d_atari.c
  • EsetColor() : d_atari.c
  • EsetGray() : d_atari.c
  • EsetPalette() : d_atari.c
  • Esetshift() : d_atari.c
  • EsetSmear() : d_atari.c
  • event_desk() : BIG2DEMO.C
  • event_freepu() : BIG2DEMO.C
  • event_mesag() : BIG2DEMO.C
  • event_pmenu() : BIG2DEMO.C
  • event_tool() : BIG2DEMO.C
  • event_wform() : BIG2DEMO.C
  • event_whier() : BIG2DEMO.C
  • event_wmenu() : BIG2DEMO.C
  • evnt_button() : d_atari.c
  • evnt_dclick() : d_atari.c
  • evnt_keybd() : d_atari.c
  • evnt_mesag() : d_atari.c
  • evnt_mouse() : d_atari.c
  • evnt_multi() : d_atari.c
  • evnt_timer() : d_atari.c
  • exist() : BIG2DIVR.C , d_big.c , BIG2.H
  • exist_edit() : BIG2EDIT.H , BIG2EDIT.C
  • extension() : BIG2.H , d_big.c , BIG2DIVR.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- f -

  • Fattrib() : d_atari.c
  • Fchmod() : d_atari.c
  • Fchown() : d_atari.c
  • Fclose() : d_atari.c
  • Fcntl() : d_atari.c
  • Fcreate() : d_atari.c
  • Fdatime() : d_atari.c
  • Fdelete() : d_atari.c
  • Fdup() : d_atari.c
  • Fforce() : d_atari.c
  • Fgetchar() : d_atari.c
  • Fgetdta() : d_atari.c
  • fill_tab() : BIG2.H , BIG2DIVR.C , d_big.c
  • find_index() : BIG2.H , BIG2WIND.C , d_big.c
  • find_special() : BIG2FOR2.C , BIG2FOR2.H
  • find_touche() : BIG2FOR2.C , BIG2FOR2.H
  • find_window() : BIG2.H , BIG2WIND.C , d_big.c
  • find_zone() : BIG2HELP.C
  • Finstat() : d_atari.c
  • first() : BIG2EDIT.C , BIG2EDIT.H
  • first_cookie() : d_big.c , BIG2.H , BIG2DIVR.C
  • Flink() : d_atari.c
  • Flock() : d_atari.c
  • Flopfmt() : d_atari.c
  • Floprate() : d_atari.c
  • Floprd() : d_atari.c
  • Flopver() : d_atari.c
  • Flopwr() : d_atari.c
  • Fmidipipe() : d_atari.c
  • fond() : BIG2USR2.C , BIG2USR2.H
  • Fopen() : d_atari.c
  • form_alert() : d_atari.c
  • form_attach() : BIG2.H , BIG2FOR2.C , d_big.c
  • form_button() : d_atari.c
  • form_center() : d_atari.c
  • form_dial() : d_atari.c
  • form_do() : d_atari.c
  • form_error() : d_atari.c
  • form_keybd() : d_atari.c
  • formf_draw() : BIG2FOR1.C , BIG2.H , d_big.c
  • formf_undraw() : d_big.c , BIG2.H , BIG2FOR1.C
  • formm_draw() : BIG2.H , BIG2FOR1.C , d_big.c
  • formm_undraw() : BIG2FOR1.C , d_big.c , BIG2.H
  • formulaire() : BIG2DEMO.C
  • formw_draw() : BIG2WIND.C , BIG2.H , d_big.c
  • Foutstat() : d_atari.c
  • Fpipe() : d_atari.c
  • Fputchar() : d_atari.c
  • Fread() : d_atari.c
  • Freadlink() : d_atari.c
  • free_popup() : BIG2FOR1.C , BIG2.H , d_big.c
  • Frename() : d_atari.c
  • Fseek() : d_atari.c
  • fsel_exinput() : d_atari.c
  • fsel_input() : d_atari.c
  • Fselect() : d_atari.c
  • Fsetdta() : d_atari.c
  • Fsfirst() : d_atari.c
  • Fsnext() : d_atari.c
  • Fsymlink() : d_atari.c
  • full_wform() : BIG2EVTW.H , BIG2EVTW.C
  • fulled() : BIG2EVTW.H , BIG2EVTW.C
  • Fwrite() : d_atari.c
  • Fxattr() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- g -

  • gadget() : BIG2USR2.C , BIG2USR2.H
  • gemdos() : d_atari.c
  • get_bkgr() : BIG2.H , BIG2FOR2.C , d_big.c
  • get_palette() : BIG2INIT.C
  • get_radio() : BIG2.H , BIG2FOR2.C
  • get_string() : BIG2.H , BIG2FOR2.C , d_big.c
  • get_text() : BIG2.H , BIG2EDIT.C , d_big.c
  • Getbpb() : d_atari.c
  • Getmpb() : d_atari.c
  • Getrez() : d_atari.c
  • Gettime() : d_atari.c
  • gform_wind() : BIG2DEMO.C
  • Giaccess() : d_atari.c
  • gpio() : d_atari.c
  • graf_dragbox() : d_atari.c
  • graf_growbox() : d_atari.c
  • graf_handle() : d_atari.c
  • graf_mbox() : d_atari.c
  • graf_mkstate() : d_atari.c
  • graf_mouse() : d_atari.c
  • graf_movebox() : d_atari.c
  • graf_rubberbox() : d_atari.c
  • graf_rubbox() : d_atari.c
  • graf_shrinkbox() : d_atari.c
  • graf_slidebox() : d_atari.c
  • graf_watchbox() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- h -

  • height_hori() : BIG2.H , BIG2WIND.C , d_big.c
  • height_sliders() : BIG2.H , BIG2WIND.C , d_big.c
  • height_vert() : BIG2WIND.C , d_big.c , BIG2.H
  • help() : BIG2FOR2.H , BIG2FOR2.C
  • hslid() : BIG2EVTW.C , BIG2EVTW.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- i -

  • icone() : BIG2DEMO.C
  • iconise() : BIG2.H , d_big.c , BIG2EVTW.C
  • identifier_hard_soft() : BIG2INIT.C
  • identifier_tos() : BIG2INIT.C
  • Ikbdws() : d_atari.c
  • img_attach() : BIG_IMGS.H , d_atari.c
  • initial() : BIG2.H , BIG2INIT.C , d_big.c
  • Initmouse() : d_atari.c
  • inline_help() : BIG2HELP.H , BIG2HELP.C
  • Iorec() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- p -

  • parent() : BIG2.H , BIG2FOR2.C , d_big.c
  • paste() : BIG2EDIT.C , BIG2EDIT.H
  • path() : d_big.c , BIG2.H , BIG2DIVR.C
  • Pause() : d_atari.c
  • Pdomain() : d_atari.c
  • Pexec() : d_atari.c
  • Pfork() : d_atari.c
  • pform_wind() : BIG2DEMO.C
  • Pgetegid() : d_atari.c
  • Pgeteuid() : d_atari.c
  • Pgetgid() : d_atari.c
  • Pgetpgrp() : d_atari.c
  • Pgetpid() : d_atari.c
  • Pgetppid() : d_atari.c
  • Pgetuid() : d_atari.c
  • Physbase() : d_atari.c
  • Pkill() : d_atari.c
  • Pmsg() : d_atari.c
  • Pnice() : d_atari.c
  • pop_liste() : BIG2FOR1.C , BIG2FOR1.H
  • pop_up() : BIG2FOR1.C , BIG2FOR1.H
  • pos_curs() : BIG2EDIT.C , BIG2EDIT.H
  • posi_hori() : BIG2WIND.C , d_big.c , BIG2.H
  • posi_vert() : BIG2.H , BIG2WIND.C , d_big.c
  • Prenice() : d_atari.c
  • prev() : BIG2EDIT.C , BIG2EDIT.H
  • prev_word() : BIG2EDIT.C , BIG2EDIT.H
  • print_colum() : BIG2WIND.C , BIG2WIND.H
  • print_line() : BIG2WIND.C , BIG2WIND.H
  • print_page() : BIG2WIND.C , BIG2.H , d_big.c
  • print_wind() : BIG2WIND.C , BIG2WIND.H
  • Protobt() : d_atari.c
  • Prtblk() : d_atari.c
  • Prusage() : d_atari.c
  • Psemaphore() : d_atari.c
  • Psetgid() : d_atari.c
  • Psetlimit() : d_atari.c
  • Psetpgrp() : d_atari.c
  • Psetuid() : d_atari.c
  • Psigaction() : d_atari.c
  • Psigblock() : d_atari.c
  • Psignal() : d_atari.c
  • Psigpause() : d_atari.c
  • Psigpending() : d_atari.c
  • Psigreturn() : d_atari.c
  • Psigsetmask() : d_atari.c
  • Pterm() : d_atari.c
  • Pterm0() : d_atari.c
  • Ptermres() : d_atari.c
  • ptr_fonctions() : BIG2DEMO.C
  • Pumask() : d_atari.c
  • Puntaes() : d_atari.c
  • Pusrval() : d_atari.c
  • put_bkgr() : d_big.c , BIG2FOR2.C , BIG2.H
  • put_fen() : BIG2WINB.H , BIG2WINB.C
  • Pvfork() : d_atari.c
  • Pwait() : d_atari.c
  • Pwait3() : d_atari.c
  • Pwaitpid() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- r -

  • Random() : d_atari.c
  • rc_intersect() : BIG2.H , d_big.c , BIG2DIVR.C
  • red_acc() : BIG2DEMO.C
  • redraw() : BIG2EVTW.C , BIG2EVTW.H
  • relief() : BIG2DEMO.C
  • res_rsc() : BIG2.H , BIG2FOR2.C , d_big.c
  • resize() : BIG2WINB.C , BIG2WINB.H
  • Rsconf() : d_atari.c
  • rsrc_free() : d_atari.c
  • rsrc_gaddr() : d_atari.c
  • rsrc_load() : d_atari.c
  • rsrc_obfix() : d_atari.c
  • rsrc_rcfix() : d_atari.c
  • rsrc_saddr() : d_atari.c
  • rtline() : BIG2EVTW.H , BIG2EVTW.C
  • rtpage() : BIG2EVTW.C , BIG2EVTW.H
  • rubberbox() : BIG2WINB.C
  • Rwabs() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- s -

  • scan() : BIG2FOR2.C , BIG2FOR2.H
  • scan_form() : BIG2FOR2.H , BIG2FOR2.C
  • scan_menu() : BIG2FOR2.C , BIG2FOR2.H
  • scan_wmenu() : BIG2FOR2.H , BIG2FOR2.C
  • scan_wtool() : BIG2FOR2.C , BIG2FOR2.H
  • Scrdmp() : d_atari.c
  • scrp_read() : d_atari.c
  • scrp_write() : d_atari.c
  • selector() : d_big.c , BIG2.H , BIG2DIVR.C
  • send_mesag() : BIG2.H , BIG2DIVR.C , d_big.c
  • set_attributes() : BIG2.H , BIG2FOR2.C
  • set_bimg() : BIG2DEMO.C
  • set_font() : BIG2DEMO.C
  • set_form() : BIG2DEMO.C
  • set_interface() : BIG2.H , BIG2FOR2.C , d_big.c
  • set_palette() : BIG2.H , BIG2DIVR.C , d_big.c
  • set_popup() : BIG2FOR1.C , d_big.c , BIG2.H
  • set_radio() : BIG2.H , BIG2FOR2.C
  • set_text() : BIG2.H , BIG2EDIT.C , d_big.c
  • set_windows() : BIG2.H , BIG2WINB.C , d_big.c
  • set_work() : BIG2.H , BIG2WINB.C , d_big.c
  • setbuffer() : d_atari.c
  • Setcolor() : d_atari.c
  • Setexc() : d_atari.c
  • setinterrupt() : d_atari.c
  • setmode() : d_atari.c
  • setmontracks() : d_atari.c
  • Setpalette() : d_atari.c
  • Setprt() : d_atari.c
  • Setscreen() : d_atari.c
  • Settime() : d_atari.c
  • settracks() : d_atari.c
  • shel_envrn() : d_atari.c
  • shel_find() : d_atari.c
  • shel_get() : d_atari.c
  • shel_put() : d_atari.c
  • shel_read() : d_atari.c
  • shel_write() : d_atari.c
  • size_wform() : BIG2EVTW.C , BIG2EVTW.H
  • sizebw() : BIG2WINB.C , BIG2WINB.H
  • sized() : BIG2EVTW.H , BIG2EVTW.C
  • sld() : BIG2USR2.C , BIG2USR2.H
  • slid() : BIG2WINB.H , BIG2WINB.C
  • sndstatus() : d_atari.c
  • soundcmd() : d_atari.c
  • Ssbrk() : d_atari.c
  • start_edit() : BIG2EDIT.H , BIG2EDIT.C
  • stdkey() : BIG2DIVR.C , BIG2DIVR.H
  • Super() : d_atari.c
  • Supexec() : d_atari.c
  • Sversion() : d_atari.c
  • Syield() : d_atari.c
  • Sysconf() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- t -

  • Talarm() : d_atari.c
  • test_alerte() : BIG2DEMO.C
  • Tgetdate() : d_atari.c
  • Tgettime() : d_atari.c
  • Tickcal() : d_atari.c
  • timer() : d_big.c , BIG2.H , BIG2DIVR.C
  • titinf() : BIG2USR2.C , BIG2USR2.H
  • topped() : BIG2EVTW.C , BIG2EVTW.H
  • trame_desk() : BIG2DEMO.C
  • trim() : BIG2DIVR.C , BIG2.H , d_big.c
  • Tsetdate() : d_atari.c
  • Tsettime() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- u -

  • uniconise() : BIG2.H , BIG2EVTW.C , d_big.c
  • unlocksnd() : d_atari.c
  • upline() : BIG2EVTW.C , BIG2EVTW.H
  • uppage() : BIG2EVTW.C , BIG2EVTW.H
  • userdef() : BIG2USR1.C , BIG2USR1.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- v -

  • v_alpha_text() : d_atari.c
  • v_arc() : d_atari.c
  • v_bar() : d_atari.c
  • v_bez() : d_atari.c
  • v_bez_fill() : d_atari.c
  • v_bez_off() : d_atari.c
  • v_bez_on() : d_atari.c
  • v_bez_qual() : d_atari.c
  • v_bit_image() : d_atari.c
  • v_cellarray() : d_atari.c
  • v_circle() : d_atari.c
  • v_clear_disp_list() : d_atari.c
  • v_clrwk() : d_atari.c
  • v_clsvwk() : d_atari.c
  • v_clswk() : d_atari.c
  • v_contourfill() : d_atari.c
  • v_curaddress() : d_atari.c
  • v_curdown() : d_atari.c
  • v_curhome() : d_atari.c
  • v_curleft() : d_atari.c
  • v_curright() : d_atari.c
  • v_curtext() : d_atari.c
  • v_curup() : d_atari.c
  • v_dspcur() : d_atari.c
  • v_eeol() : d_atari.c
  • v_eeos() : d_atari.c
  • v_ellarc() : d_atari.c
  • v_ellipse() : d_atari.c
  • v_ellpie() : d_atari.c
  • v_enter_cur() : d_atari.c
  • v_escape2000() : d_atari.c
  • v_exit_cur() : d_atari.c
  • v_fillarea() : d_atari.c
  • v_flushcache() : d_atari.c
  • v_fontinit() : d_atari.c
  • v_form_adv() : d_atari.c
  • v_ftext() : d_atari.c
  • v_ftext_offset() : d_atari.c
  • v_get_pixel() : d_atari.c
  • v_getbitmap_info() : d_atari.c
  • v_getoutline() : d_atari.c
  • v_gtext() : d_atari.c
  • v_hardcopy() : d_atari.c
  • v_hide_c() : d_atari.c
  • v_justified() : d_atari.c
  • v_killoutline() : d_atari.c
  • v_loadcache() : d_atari.c
  • v_meta_extents() : d_atari.c
  • v_offset() : d_atari.c
  • v_opnvwk() : d_atari.c
  • v_opnwk() : d_atari.c
  • v_output_window() : d_atari.c
  • v_pieslice() : d_atari.c
  • v_pline() : d_atari.c
  • v_pmarker() : d_atari.c
  • v_rbox() : d_atari.c
  • v_rfbox() : d_atari.c
  • v_rmcur() : d_atari.c
  • v_rvoff() : d_atari.c
  • v_rvon() : d_atari.c
  • v_savecache() : d_atari.c
  • v_set_app_buff() : d_atari.c
  • v_show_c() : d_atari.c
  • v_sound() : d_atari.c
  • v_updwk() : d_atari.c
  • v_write_meta() : d_atari.c
  • valide() : BIG2EDIT.C , BIG2EDIT.H
  • vex_butv() : d_atari.c
  • vex_curv() : d_atari.c
  • vex_motv() : d_atari.c
  • vex_timv() : d_atari.c
  • VgetRGB() : d_atari.c
  • VgetSize() : d_atari.c
  • vm_coords() : d_atari.c
  • vm_filename() : d_atari.c
  • vm_pagesize() : d_atari.c
  • vq_aes() : d_atari.c
  • vq_cellarray() : d_atari.c
  • vq_chcells() : d_atari.c
  • vq_color() : d_atari.c
  • vq_cookie() : BIG2.H , BIG2DIVR.C , d_big.c
  • vq_cookie_c() : BIG2.H , BIG2DIVR.C , d_big.c
  • vq_curaddress() : d_atari.c
  • vq_extnd() : d_atari.c
  • vq_gdos() : d_atari.c
  • vq_key_s() : d_atari.c
  • vq_mouse() : d_atari.c
  • vq_scan() : d_atari.c
  • vq_screen() : BIG2INIT.C
  • vq_tabstatus() : d_atari.c
  • vq_tdimensions() : d_atari.c
  • vq_vgdos() : d_atari.c
  • vqf_attributes() : d_atari.c
  • vqin_mode() : d_atari.c
  • vql_attributes() : d_atari.c
  • vqm_attributes() : d_atari.c
  • vqp_error() : d_atari.c
  • vqp_films() : d_atari.c
  • vqp_state() : d_atari.c
  • vqt_advance() : d_atari.c
  • vqt_advance32() : d_atari.c
  • vqt_attributes() : d_atari.c
  • vqt_cachesize() : d_atari.c
  • vqt_devinfo() : d_atari.c
  • vqt_extent() : d_atari.c
  • vqt_f_extent() : d_atari.c
  • vqt_fontheader() : d_atari.c
  • vqt_fontinfo() : d_atari.c
  • vqt_get_table() : d_atari.c
  • vqt_name() : d_atari.c
  • vqt_pairkern() : d_atari.c
  • vqt_trackkern() : d_atari.c
  • vqt_width() : d_atari.c
  • vr_recfl() : d_atari.c
  • vr_trnfm() : d_atari.c
  • vro_cpyfm() : d_atari.c
  • vrq_choice() : d_atari.c
  • vrq_locator() : d_atari.c
  • vrq_string() : d_atari.c
  • vrq_valuator() : d_atari.c
  • vrt_cpyfm() : d_atari.c
  • vs_clip() : d_atari.c
  • vs_color() : d_atari.c
  • vs_curaddress() : d_atari.c
  • vs_mute() : d_atari.c
  • vs_palette() : d_atari.c
  • vsc_expose() : d_atari.c
  • vsc_form() : d_atari.c
  • VsetMask() : d_atari.c
  • Vsetmode() : d_atari.c
  • VsetRGB() : d_atari.c
  • VsetSync() : d_atari.c
  • vsf_color() : d_atari.c
  • vsf_interior() : d_atari.c
  • vsf_perimeter() : d_atari.c
  • vsf_style() : d_atari.c
  • vsf_udpat() : d_atari.c
  • vsin_mode() : d_atari.c
  • vsl_color() : d_atari.c
  • vsl_ends() : d_atari.c
  • vsl_type() : d_atari.c
  • vsl_udsty() : d_atari.c
  • vsl_width() : d_atari.c
  • vslid() : BIG2EVTW.C , BIG2EVTW.H
  • vsm_choice() : d_atari.c
  • vsm_color() : d_atari.c
  • vsm_height() : d_atari.c
  • vsm_locator() : d_atari.c
  • vsm_string() : d_atari.c
  • vsm_type() : d_atari.c
  • vsm_valuator() : d_atari.c
  • vsp_film() : d_atari.c
  • vsp_message() : d_atari.c
  • vsp_save() : d_atari.c
  • vsp_state() : d_atari.c
  • vst_alignment() : d_atari.c
  • vst_arbpt() : d_atari.c
  • vst_arbpt32() : d_atari.c
  • vst_charmap() : d_atari.c
  • vst_color() : d_atari.c
  • vst_effects() : d_atari.c
  • vst_error() : d_atari.c
  • vst_font() : d_atari.c
  • vst_height() : d_atari.c
  • vst_kern() : d_atari.c
  • vst_load_fonts() : d_atari.c
  • vst_point() : d_atari.c
  • vst_rotation() : d_atari.c
  • vst_scratch() : d_atari.c
  • vst_setsize() : d_atari.c
  • vst_setsize32() : d_atari.c
  • vst_skew() : d_atari.c
  • vst_unload_fonts() : d_atari.c
  • vswr_mode() : d_atari.c
  • Vsync() : d_atari.c
  • vt_alignment() : d_atari.c
  • vt_axis() : d_atari.c
  • vt_origin() : d_atari.c
  • vt_resolution() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- w -

  • wind_calc() : d_atari.c
  • wind_close() : d_atari.c
  • wind_create() : d_atari.c
  • wind_delete() : d_atari.c
  • wind_find() : d_atari.c
  • wind_get() : d_atari.c
  • wind_hierarch() : BIG2WIND.H , BIG2WIND.C
  • wind_mouse() : BIG2WIND.C , BIG2WIND.H
  • wind_new() : d_atari.c
  • wind_open() : d_atari.c
  • wind_set() : d_atari.c
  • wind_update() : d_atari.c
  • winicn() : BIG2DEMO.C
  • wm_arrow() : BIG2EVTW.H , BIG2EVTW.C
  • work() : BIG2USR2.C , BIG2USR2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • g
  • h
  • i
  • j
  • k
  • l
  • m
  • n
  • o
  • p
  • r
  • s
  • t
  • u
  • v
  • w
  • x
  • z

- x -

  • xbios() : d_atari.c
  • Xbtimer() : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • FNCP : BIG2.H
  • Palette : BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- _ -

  • _app : d_atari.c , d_big.c
  • _GemParBlk : d_atari.c
  • _VDIParBlk : d_atari.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- k -

  • kbd : BIG2.H , BIG2DIAL.H , BIG2FOR2.H , BIG2INIT.C , BIG2EDIT.H , d_big.c
  • key : BIG2DIAL.H , BIG2.H , BIG2EDIT.H , BIG2INIT.C , d_big.c , BIG2DIVR.H , BIG2FOR2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- l -

  • look : BIG2FOR2.C , BIG2USR1.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- m -

  • mk : BIG2.H , BIG2DIAL.H , BIG2INIT.C , BIG2WIND.H , BIG2HELP.H , d_big.c
  • mouse : BIG2INIT.C , BIG2WIND.H , BIG2DIAL.H
  • mx : d_big.c , BIG2.H , BIG2DIAL.H , BIG2FOR2.H , BIG2HELP.H , BIG2INIT.C
  • my : BIG2HELP.H , BIG2INIT.C , BIG2FOR2.H , BIG2.H , d_big.c , BIG2DIAL.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- n -

  • nb_objets_maison : BIG2INIT.C
  • nb_pict : BIG2USR1.H , BIG2INIT.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- o -

  • object : BIG2.H , BIG2DIAL.H , BIG2FOR1.H , BIG2FOR2.H , d_big.c , BIG2INIT.C , BIG2EDIT.H
  • objets_maison : BIG2INIT.C
  • old_top : BIG2DIAL.H , BIG2INIT.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- z -

  • zclip : BIG2.H , BIG2EVTW.C , d_big.c
  • zone : BIG2DEMO.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- a -

  • adr_desk : BIG2.H , BIG2DIAL.H , d_big.c , BIG2INIT.C
  • adr_menu : BIG2FOR2.H , BIG2INIT.C , BIG2.H , BIG2USR1.H , d_big.c , BIG2DIAL.H , BIG2FOR1.H
  • adr_usr : BIG2INIT.C , BIG2USR1.H
  • aide_en_ligne : d_big.c , BIG2.H , BIG2HELP.C
  • ap_id : BIG2FOR1.H , BIG2DIVR.H , BIG2INIT.C , BIG2.H , d_big.c , BIG2WIND.H , BIG2DIAL.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- b -

  • bi_frstr : BIG2WIND.H
  • bi_trindex : BIG2FOR1.H , BIG2USR1.H , BIG2USR2.H , BIG2FOR2.H , BIG2WINB.H , BIG2WIND.H
  • bimg : BIG2DEMO.C
  • bpal : BIG2.H , BIG2INIT.C
  • buf : BIG2FOR2.H , BIG2INIT.C , BIG2WIND.H , d_big.c , BIG2.H , BIG2DIAL.H , BIG2DIVR.H , BIG2EVTW.H , BIG2FOR1.H
  • buffer : BIG2INIT.C , BIG2EDIT.H
  • bureau : BIG2WIND.H , BIG2INIT.C , BIG2DIAL.H , BIG2EVTW.H , BIG2.H , BIG2USR1.H , d_big.c , BIG2FOR1.H , BIG2FOR2.H
  • bwin : BIG2USR2.C , BIG2WINB.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- c -

  • clik : BIG2.H , BIG2DIAL.H , BIG2INIT.C , d_big.c , BIG2FOR2.H
  • cliq_in : d_big.c , BIG2INIT.C , BIG2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- d -

  • desc_hard_soft : BIG2.H , d_big.c , BIG2INIT.C , BIG2HELP.H , BIG2EVTW.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- e -

  • edit : BIG2.H , BIG2DIAL.H , BIG2FOR1.H , BIG2FOR2.H , BIG2EDIT.H , d_big.c , BIG2INIT.C
  • event : BIG2INIT.C , BIG2WIND.H , BIG2DIAL.H , BIG2FOR2.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- f -

  • fgdos : BIG2DEMO.C
  • fid : BIG2DEMO.C
  • fnc : BIG2WIND.H , BIG2USR1.H , BIG2INIT.C , BIG2FOR1.H , BIG2DIAL.H , BIG2.H , d_big.c
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- i -

  • id_top : BIG2DIAL.H , BIG2INIT.C , BIG2WIND.C , BIG2USR2.H
  • intgr : BIG2.H , BIG2INIT.C , d_big.c
  • ir_frstr : BIG2FOR2.H , BIG2HELP.H , BIG2INIT.C , BIG2USR1.H
  • ir_trindex : BIG2WIND.H , BIG2INIT.C , d_big.c , BIG2HELP.H , BIG2USR1.H , BIG2.H , BIG2FOR1.H , BIG2FOR2.H , BIG2DIAL.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- p -

  • pal_img : BIG2DIAL.H , BIG2DIVR.H , BIG2INIT.C
  • pathapp : BIG2.H , BIG2INIT.C , d_big.c
  • pos : BIG2.H , BIG2INIT.C , BIG2FOR2.H , d_big.c , BIG2DIAL.H , BIG2FOR1.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- s -

  • screen : BIG2FOR1.H , BIG2FOR2.H , BIG2INIT.C
  • scroll : BIG2INIT.C , BIG2FOR1.H , BIG2WIND.H
  • size : BIG2DEMO.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- t -

  • topp : BIG2DIAL.C , BIG2WINB.C
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- w -

  • win : BIG2.H , BIG2DIAL.H , BIG2EVTW.H , BIG2WIND.H , d_big.c , BIG2FOR2.H , BIG2DIVR.H , BIG2HELP.H , BIG2INIT.C
  • wind : BIG2.H , BIG2DIAL.H , BIG2INIT.C , d_big.c
  • work_display : BIG2.H , BIG2FOR1.H , BIG2HELP.H , BIG2INIT.C , BIG2USR1.H , BIG2WIND.H , d_big.c , BIG2FOR2.H , BIG2DIVR.H , BIG2EVTW.H , BIG2USR2.H , BIG2DIAL.H , BIG2EDIT.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Data Fields

  • All
  • Functions
  • Variables
  • Typedefs
  • Enumerations
  • Enumerator
  • Defines
  • _
  • a
  • b
  • c
  • d
  • e
  • f
  • i
  • k
  • l
  • m
  • n
  • o
  • p
  • s
  • t
  • w
  • x
  • z

- x -

  • xedit : BIG2INIT.C , BIG2USR1.H
  • xpict : BIG2INIT.C , BIG2USR1.H
Generated on Tue Mar 9 22:42:22 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: gui.dox File Reference

gui.dox File Reference

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: mainpage.dox File Reference

mainpage.dox File Reference

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: Page Index

Related Pages

Here is a list of all related documentation pages:
  • The BIGdemo: BIG Guided Visit
  • GUI of BIG Applications
  • Presentation of the BIG Library
  • BIG Reference Manual
  • BIG Revision History
  • The BIGdemo Source
  • Todo List
Generated on Tue Mar 9 22:42:17 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: presentation.dox File Reference

presentation.dox File Reference

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: reference.dox File Reference

reference.dox File Reference

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: revision.dox File Reference

revision.dox File Reference

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: source.dox File Reference

source.dox File Reference

Generated on Tue Mar 9 22:42:20 2010 for THE BIG LIBRARY by doxygen 1.6.2


THE BIG LIBRARY: translate.h Source File

translate.h

Go to the documentation of this file.
00001
00002 #define B_COCHE     B_CHECKB
00003 #define B_BUTTON    B_ROUNDB
Generated on Tue Mar 9 22:42:18 2010 for THE BIG LIBRARY by doxygen 1.6.2