summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-02-06 13:48:44 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-02-06 13:48:44 +0000
commit5599d6e9e663145fa790a0193e3469f76ec05d41 (patch)
treec712412d7989043940cce6ccf4ec393050a6cbd6
parentProblem report from Brian Cuthie regarding incorrect calculation (diff)
downloadrtems-5599d6e9e663145fa790a0193e3469f76ec05d41.tar.bz2
Added @table/@end table capability along with the avdas.d test case where
this capability was first used.
-rw-r--r--doc/tools/pdl2texi/Makefile2
-rw-r--r--doc/tools/pdl2texi/main.c104
-rw-r--r--doc/tools/pdl2texi/test_cases/avdas.d260
3 files changed, 363 insertions, 3 deletions
diff --git a/doc/tools/pdl2texi/Makefile b/doc/tools/pdl2texi/Makefile
index 4d72b9462e..f4867d32d6 100644
--- a/doc/tools/pdl2texi/Makefile
+++ b/doc/tools/pdl2texi/Makefile
@@ -73,6 +73,8 @@ enum:
avdas:
./$(PROG) -v -p "Magic Subsystem" \
-u "Magic Subsystem" test_cases/avdas.d
+ ./$(PROG) -w -v -p "Magic Subsystem" \
+ -u "Magic Subsystem" test_cases/avdas.d
clean:
rm -f *.o $(PROG) *.txt core *.html $(PROJECT) Drive.texi
diff --git a/doc/tools/pdl2texi/main.c b/doc/tools/pdl2texi/main.c
index f2592c2310..3c52d4871a 100644
--- a/doc/tools/pdl2texi/main.c
+++ b/doc/tools/pdl2texi/main.c
@@ -171,7 +171,10 @@ typedef enum {
OUTPUTS,
PDL,
SYNCHRONIZATION,
- TIMING
+ TIMING,
+
+ RAW_EXAMPLE, /* our own */
+
} Keyword_indices_t;
#define KEYWORD_FIRST OBJECT
@@ -197,6 +200,7 @@ typedef struct {
} Line_Control;
typedef enum {
+ RT_NO_CHECK, /* don't do this at all */
RT_FORBIDDEN, /* no text to right allowed */
RT_OPTIONAL, /* text to right optional -- none below */
RT_NONE, /* text to right is "none" or nothing -- none below */
@@ -316,7 +320,9 @@ Keyword_info_t Keywords[] = {
{ "SYNCHRONIZATION:",
HEADING, RT_MAYBE_BELOW, BL_RAW, Validate_synchronization },
{ "TIMING:",
- HEADING, RT_REQUIRED, BL_FORBIDDEN, NULL }
+ HEADING, RT_REQUIRED, BL_FORBIDDEN, NULL },
+ { "",
+ TEXT, RT_NO_CHECK, BL_RAW, NULL }
};
#define NUMBER_OF_KEYWORDS \
@@ -811,6 +817,7 @@ Line_Control *FormatParagraph(
boolean do_loop;
boolean is_bullet;
int length;
+ int i;
length = 0;
@@ -827,6 +834,39 @@ Line_Control *FormatParagraph(
for ( ; *src && isspace( *src ) ; src++ ); /* skip leading spaces */
+ if ( !strncmp( src, "@table", 6 ) ) {
+
+ to_add = DeleteLine( to_add );
+ src = to_add->Contents;
+ for ( i=4 ; *src && isspace( *src ) && i-- ; src++ );
+ /* skip leading spaces */
+
+ for ( ; ; ) {
+ if ( _Chain_Is_last( &to_add->Node ) ) {
+ fprintf(
+ stderr,
+ "Missing end table for table starting at line %d\n",
+ starting_line
+ );
+ exit_application( 1 );
+ }
+ if ( !strncmp( src, "@end table", 10 ) ) {
+ to_add = DeleteLine( to_add );
+ return to_add;
+ }
+ strcpy( Paragraph, src );
+ strcpy( to_add->Contents, Paragraph );
+ SetLineFormat( to_add, PARAGRAPH_OUTPUT );
+ to_add->keyword = RAW_EXAMPLE;
+ to_add = (Line_Control *) to_add->Node.next;
+
+ src = to_add->Contents;
+ for ( i=4 ; *src && isspace( *src ) && i-- ; src++ );
+ /* skip leading spaces */
+
+ }
+ }
+
if ( *src == '+' ) {
if ( is_bullet == TRUE )
break;
@@ -1520,6 +1560,7 @@ void CrunchBelow(
/* XXX expand this and address the error numbers */
char *Format_Errors[] = {
/* unused */ "no formatting error",
+ /* RT_NO_CHECK */ "why am I here",
/* RT_FORBIDDEN */ "no text allowed to right or below",
/* RT_OPTIONAL */ "text to right optional -- none below",
/* RT_NONE */ "text to right is \"none\" or nothing -- none below",
@@ -1565,7 +1606,7 @@ int MergeText( void )
key = &Keywords[ line->keyword ];
- if ( !line->keyword ) {
+ if ( !line->keyword || key->text_mode == RT_NO_CHECK ) {
line = (Line_Control *) line->Node.next;
continue;
}
@@ -1597,6 +1638,9 @@ int MergeText( void )
}
switch ( key->text_mode ) {
+ case RT_NO_CHECK: /* no requirements */
+ break;
+
case RT_FORBIDDEN: /* no text to right or below allowed */
if ( is_text_to_right || is_text_below ) {
error_code = 1;
@@ -2736,6 +2780,26 @@ void FormatToTexinfo( void )
_Chain_Insert( line->Node.previous, &new_line->Node );
/* at this point line points to the next keyword */
break;
+
+ case RAW_EXAMPLE:
+
+ /* now take care of the raw text which is here */
+
+ new_line = AllocateLine();
+ strcpy( new_line->Contents, "@example" );
+ _Chain_Insert( line->Node.previous, &new_line->Node );
+
+ while ( line->keyword == RAW_EXAMPLE ) {
+ line = (Line_Control *) line->Node.next;
+ }
+
+ new_line = AllocateLine();
+ strcpy( new_line->Contents, "@end example" );
+ _Chain_Insert( line->Node.previous, &new_line->Node );
+
+ /* at this point line points to the next keyword */
+ break;
+
}
}
@@ -2966,6 +3030,40 @@ void FormatToWord( void )
/* at this point line points to the next keyword */
break;
+
+ case RAW_EXAMPLE:
+
+ /* now take care of the raw text which is here */
+
+ new_line = AllocateLine();
+ _Chain_Insert( line->Node.previous, &new_line->Node );
+ strcpy( new_line->Contents, "@Example = " );
+
+
+ while ( line->keyword == RAW_EXAMPLE ) {
+ if ( strlen( line->Contents ) ) {
+ new_line->keyword = line->keyword;
+ new_line->format = line->format;
+ length = strlen(new_line->Contents);
+ if ( (length + strlen(line->Contents) + 12) > PARAGRAPH_SIZE ) {
+ fprintf( stderr, "Output line too long at %d\n", line->number );
+ exit_application( 1 );
+ }
+
+ strcat( new_line->Contents, line->Contents );
+ strcat( new_line->Contents, "<@ManualCR>" );
+ line = DeleteLine( line );
+ } else {
+ line = (Line_Control *) line->Node.next;
+ new_line = AllocateLine();
+ _Chain_Insert( line->Node.previous, &new_line->Node );
+ strcpy( new_line->Contents, "@Example = " );
+ }
+ }
+
+ /* at this point line points to the next keyword */
+ break;
+
}
}
diff --git a/doc/tools/pdl2texi/test_cases/avdas.d b/doc/tools/pdl2texi/test_cases/avdas.d
new file mode 100644
index 0000000000..1d79a319f1
--- /dev/null
+++ b/doc/tools/pdl2texi/test_cases/avdas.d
@@ -0,0 +1,260 @@
+OBJECT: AVDAS
+ DESCRIPTION:
+ This object collects various values from other objects in the system
+ and outputs the values in a message on a serial interface. The message
+ can be read and used as diagnostic information.
+ THEORY OF OPERATION:
+ This object contains a Server task which periodically collects
+ diagnostic values from other objects in the system and outputs the
+ values in a message on a serial interface. The diagnostic values
+ collected and formatted reflect system status.
+ NOTES:
+ The following engineering note consists of a chart to aid in the
+ decision making process of whether the AVDAS should reflect System
+ status or Switch status. As it is right now, it was decided to
+ reflect System status.
+
+ @table
+ System Switch
+ Gun Manual Weapon_control Gunner_console
+ Gun Air ------- -------
+ Gun Ground ------- -------
+ *Remote Status Remote Remote
+ *Msl Armed Indicate Missiles Missiles
+ *Rain Mode FOV FOV
+ *Msl Uncage Verified Missiles Missiles
+ *Msl Activate Status Missiles Missiles
+ *RSO Status Weapon_control Weapon_control
+ *Fire Permit Weapon_control_(new) Weapon_control_(new)
+ *Stab Mode Status Drive_(new) Drive_(new)
+ Uncage Mode Status Weapon_control Gunner_console_(new)
+ Engage Mode Status Mode Gunner_console_(new)
+ *Palm Grip Status Gunner_handstation Gunner_handstation
+ *System Fault Status Fault (Add) Fault_(new)
+ FLIR FOV Status FOV Gunner_console
+ *Autotrack Status Video_tracker Video_tracker
+ Arm Switch Status Weapon_control Gunner_console
+ *Uncage Switch Status Gunner_handstation Gunner_handstation
+ *Trig Switch Status Gunner_handstation Gunner_handstation
+ *Msl Fire Cmd Status Missiles_(new) Missiles_(new)
+ Helicopter Mode Weapon_control Gunner_console_(new)
+ IFF Challenge Switch IFF_(new) Gunner_console
+ *Auto Slew Status Autoslew_Is_on Autoslew_Is_on
+
+ @end table
+
+ Message bytes 26 through 29 are not set at this time pending
+ completion of the Super Elevate object.
+
+ATTRIBUTE DESCRIPTIONS: none
+
+ASSOCIATION DESCRIPTIONS: none
+
+ABSTRACT TYPE DESCRIPTIONS: none
+
+DATA ITEM DESCRIPTIONS:
+
+DATA ITEM: Message
+ DESCRIPTION:
+ This data item is the buffer used to build an AVDAS data message.
+ The first two bytes are place-holders for the header bytes. The
+ last byte is a place-holder for the checksum byte.
+ DERIVATION: array[ 36 ]
+ TYPE: bytes
+ DEFAULT:
+ all bytes = 0x00
+
+DATA ITEM: The_Channel
+ DESCRIPTION:
+ This data item contains the handle to the AVDAS channel.
+ TYPE: Channel_Control handle
+ DEFAULT: NULL
+
+METHOD DESCRIPTIONS:
+
+METHOD: Break_Up
+ DESCRIPTION:
+ This method converts a floating point number to two ascii bytes
+ based on an input range and weighting factor.
+ VISIBILITY: private
+ INPUTS:
+ max_range
+ min_range
+ value
+ weight_factor
+ OUTPUTS:
+ lower_byte
+ upper_byte
+ PDL:
+ if value between 0 and min_range
+ set temp2 to min_range
+ set bit_ratio to absolute value( temp2 / 0x8000 )
+ else if value between 0 and max_range
+ set temp2 to max_range
+ set bit_ratio to absolute value( temp2 / 0x7FF0 )
+
+ set temp3 to (value / temp2) * weight_factor
+
+ set temp4 to temp3 converted to unsigned 16 bit value
+
+ set temp4 to two's compliment of temp4
+
+ set lower_byte to lower 8 bits of temp4
+
+ set upper_byte to upper 8 bits of temp4
+
+METHOD: Create
+ DESCRIPTION:
+ This method performs the necessary actions to create this object.
+ VISIBILITY: public
+ INPUTS: none
+ OUTPUTS: none
+ PDL:
+ initialize Message to default
+
+ get AVDAS protocol information using the AVDAS_protocol object
+ create a channel for the AVDAS interface using the Channel object
+ attach the channel to the AVDAS interface using the Channel object
+ with the following parameters:
+ flush - FALSE
+ major_number - CONFIGURATION_AVDAS_MAJOR
+ minor_number - CONFIGURATION_AVDAS_MINOR
+
+TASK DESCRIPTIONS:
+
+TASK: Server
+ DESCRIPTION:
+ This task periodically collects diagnostic values and outputs the
+ values in a message on a serial interface.
+ INPUTS: none
+ SYNCHRONIZATION: period
+ TIMING: 100 ms
+ REQUIREMENTS:
+ AFS 3.1.4 Provide AVDAS
+ AFS 3.1.7 Update AVDAS port
+ PDL:
+ create a period
+
+ wait for completion using the Initialization object
+
+ loop forever
+ wait for period to expire
+
+ initialize Message
+
+ get absolute azimuth using the Turret object
+ format absolute azimuth and store in Message[2] and Message[3]
+
+ get elevation using the Turret object
+ format elevation and store in Message[4] and Message[5]
+
+ get drive rate using the Drive object
+ format azimuth rate and store in Message[6] and Message[7]
+ format elevation rate and store in Message[8] and Message[9]
+
+ get drive displacement using the Drive object
+ format azimuth displacement and store in Message[10] and Message[11]
+ format elevation displacement and
+ store in Message[12] and Message[13]
+
+ get seeker position error using the Seeker object
+ format azimuth position error and
+ store in Message[14] and Message[15]
+ format elevation position error and
+ store in Message[16] and Message[17]
+
+ get range using the Laser object
+ format range and store in Message[18] and Message[19]
+
+ get north reference using the Turret object
+ format north reference and store in Message[20] and Message[21]
+
+ get video tracker position error using the Video_tracker object
+ format azimuth position error and
+ store in Message[22] and Message[23]
+ format elevation position error and
+ store in Message[24] and Message[25]
+
+ ?get lead command?
+
+ get gun mode switch using the Weapon_control object
+ format gun mode switch and store in Message[30]
+
+ determine if remote is active using the Remote object
+ format remote active and store in Message[30]
+
+ determine if missile is safed using the Missiles object
+ format missile safed and store in Message[30]
+
+ determine if rain mode is active using the FOV object
+ format rain mode active and store in Message[30]
+
+ get missile inventory using the Missiles object
+ format present indicators and store in Message[31]
+ format selected indicators and store in Message[32]
+
+ determine if missile uncage verified using the Missiles object
+ format missile uncage verified and store in Message[32]
+
+ determine if missile activated using the Missiles object
+ format missile activated and store in Message[32]
+
+ determine if RSO is authorized using the Weapon_control object
+ format RSO authorized and store in Message[32]
+
+ determine if fire permit using the Weapon_control object
+ format fire permit and store in Message[32]
+
+ determine if stab mode using the Drive object
+ format stab mode and store in Message[33]
+
+ determine if uncage mode is WEAPON_CONTROL_MANUAL_UNCAGE using
+ the Weapon_control object
+ format uncage mode and store in Message[33]
+
+ determine if current mode is MODE_ENGAGE using the Mode object
+ format current mode and store in Message[33]
+
+ determine if palmgrip switch is pressed using the
+ Gunner_handstation object
+ format palmgrip switch pressed and store in Message[33]
+
+ determine if fault is active using the Fault object
+ format fault active and store in Message[33]
+
+ determine if FOV FLIR zoom is FOV_ZOOM_NARROW using the FOV object
+ format FOV FLIR zoom and store in Message[33]
+
+ determine if video tracker is on using the Video_tracker object
+ format video tracker on and store in Message[34]
+
+ determine if armed using the Weapon_control object
+ format armed and store in Message[34]
+
+ determine if uncage trigger switch pressed using the
+ Gunner_handstation object
+ format uncage trigger switch pressed and store in Message[34]
+
+ determine if fire trigger switch pressed using the
+ Gunner_handstation object
+ format fire trigger switch pressed and store in Message[34]
+
+ determine if missiles is firing using the Missiles object
+ format missiles firing and store in Message[34]
+
+ determine if helicopter mode is WEAPON_CONTROL_ON using the
+ Weapon_control object
+ format helicopter mode and store in Message[34]
+
+ determine if IFF challenge using the IFF object
+ format IFF challenge and store in Message[34]
+
+ determine if autoslew is on using the Autoslew object
+ format autoslew is on and store in Message[34]
+
+ loop until successful
+ write Message using the Channel object
+ if unsuccessful
+ reset the Channel object
+
+ENDOBJECT: AVDAS