home *** CD-ROM | disk | FTP | other *** search
- /*##############################################################################
-
- FUNNNELWEB COPYRIGHT
- ====================
- FunnelWeb is a literate-programming macro preprocessor.
-
- Copyright (C) 1992 Ross N. Williams.
-
- Ross N. Williams
- ross@spam.adelaide.edu.au
- 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of Version 2 of the GNU General Public License as
- published by the Free Software Foundation.
-
- This program is distributed WITHOUT ANY WARRANTY; without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See Version 2 of the GNU General Public License for more details.
-
- You should have received a copy of Version 2 of the GNU General Public
- License along with this program. If not, you can FTP the license from
- prep.ai.mit.edu/pub/gnu/COPYING-2 or write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- Section 2a of the license requires that all changes to this file be
- recorded prominently in this file. Please record all changes here.
-
- Programmers:
- RNW Ross N. Williams ross@spam.adelaide.edu.au
-
- Changes:
- 07-May-1992 RNW Program prepared for release under GNU GPL V2.
-
- ##############################################################################*/
-
-
- /******************************************************************************/
- /* SECTION.H */
- /******************************************************************************/
- /* */
- /* This package provides a very simple, very small abstraction for a section */
- /* number. A section number is a hierarchical group of numbers such as is */
- /* used to number the sections in documents. For example: 4.5.1.3 is a */
- /* section number. This package provides an abstraction for these numbers */
- /* that assists in their incrementing at different levels and in writing them */
- /* out. The package also checks for hierarchical inconsistencies. */
- /* */
- /******************************************************************************/
-
- /* Ensure that the body of this header file is included at most once. */
- #ifndef DONE_SECTION
- #define DONE_SECTION
-
- /******************************************************************************/
-
- #include "style.h"
-
- /******************************************************************************/
-
- /* The following constant defines the maximum number of levels that a */
- /* FunnelWeb document can have. @A corresponds to level 1. */
- #define SECLEV_MAX 5
-
- /* The following constant defines the maximum length of a string representing */
- /* a section. This is calculated as the maximum number of levels multiplied */
- /* by 1 (for the separating dots) plus a safe size for a decimal number. */
- #define SECSTR_MAX (SECLEV_MAX*(1+10))
-
- /* The following structure stores a single section number. The sc_level */
- /* field is the level of this field and is in the range [1,SECLEV_MAX]. The */
- /* sc_num field is defined only for elements [1,level] and contains the */
- /* hierarchy number at each level. */
- /* Example: For SECLEVMAX=4 and "3.4.1", level=3 and num=[?,3,4,1,?]. */
- /* Note: The first question mark is for element zero which is always unknown. */
- typedef struct
- {
- ulong sn_magic; /* Used to detect uninitialized sn objects. */
- ubyte_ sn_lev; /* Level number of section. */
- uword_ sn_num[SECLEV_MAX+1]; /* Hierarchical level numbers. */
- } sn_t;
-
- typedef sn_t *p_sn_t;
-
- /******************************************************************************/
-
- EXPORT void sn_ini P_((p_sn_t));
- /* Initializes the specified section object to the empty section at level 0. */
- /* All sections must be initialized before any other operations are performed.*/
-
- EXPORT void sn_set P_((p_sn_t,ubyte));
- /* Sets the specified section to 1.1.1.1.1.1... at the given level. */
- /* Example: sn_set(p_sn,3) yields a section set to 1.1.1. */
- /* Raises an error if the specified level is out of range. */
-
- EXPORT void sn_inc P_((p_sn_t,ubyte));
- /* Increments the number of the specified section object at the specified */
- /* level. This also has the effect of setting all lower levels to 0. For */
- /* example, 3.4.5.1 followed by sn_inc(&sn,2) would become 3.5. */
- /* Raises an error if the level is two or more lower than the current level */
- /* Example: You can't increment 2.4.1 at level 5. */
- /* Raises an error if the specified level is out of range. */
- /* Raises an error if a number at any level becomes too large (>60000). */
-
- EXPORT ubyte sn_lev P_((p_sn_t));
- /* Returns the level number of the specified section. */
-
- EXPORT void sn_str P_((p_sn_t,char *));
- /* Writes a textual representation of the specified section into the given */
- /* string. The string must be able to hold at least SECSTRMAX characters. */
-
- /******************************************************************************/
-
- /* For #ifndef preventing multiple inclusion of the body of this header file. */
- #endif
-
- /******************************************************************************/
- /* End of SECTION.H */
- /******************************************************************************/
-
-