~ubuntu-branches/debian/jessie/arb/jessie

« back to all changes in this revision

Viewing changes to AISC_COM/AISC/aisc_com.pa

  • Committer: Package Import Robot
  • Author(s): Elmar Pruesse, Andreas Tille, Elmar Pruesse
  • Date: 2014-09-02 15:15:06 UTC
  • mfrom: (1.1.6)
  • Revision ID: package-import@ubuntu.com-20140902151506-jihq58b3iz342wif
Tags: 6.0.2-1
[ Andreas Tille ]
* New upstream version
  Closes: #741890
* debian/upstream -> debian/upstream/metadata
* debian/control:
   - Build-Depends: added libglib2.0-dev
   - Depends: added mafft, mrbayes
* debian/rules
   - Add explicite --remove-section=.comment option to manual strip call
* cme fix dpkg-control
* arb-common.dirs: Do not create unneeded lintian dir
* Add turkish debconf translation (thanks for the patch to Mert Dirik
  <mertdirik@gmail.com>)
  Closes: #757497

[ Elmar Pruesse ]
* patches removed:
   - 10_config.makefiles.patch,
     80_no_GL.patch
       removed in favor of creating file from config.makefile.template via 
       sed in debian/control
   - 20_Makefile_main.patch
       merged upstream
   - 21_Makefiles.patch
       no longer needed
   - 30_tmpfile_CVE-2008-5378.patch: 
       merged upstream
   - 50_fix_gcc-4.8.patch:
       merged upstream
   - 40_add_libGLU.patch:
       libGLU not needed for arb_ntree)
   - 60_use_debian_packaged_raxml.patch:
       merged upstream
   - 70_hardening.patch
       merged upstream
   - 72_add_math_lib_to_linker.patch
       does not appear to be needed
* patches added:
   - 10_upstream_r12793__show_db_load_progress:
       backported patch showing progress while ARB is loading a database
       (needed as indicator/splash screen while ARB is launching)
   - 20_upstream_r12794__socket_permissions:
       backported security fix
   - 30_upstream_r12814__desktop_keywords:
       backported add keywords to desktop (fixes lintian warning)
   - 40_upstream_r12815__lintian_spelling:
       backported fix for lintian reported spelling errors
   - 50_private_nameservers
       change configuration to put nameservers into users home dirs
       (avoids need for shared writeable directory)
   - 60_use_debian_phyml
       use phyml from debian package for both interfaces in ARB
* debian/rules:
   - create config.makefile from override_dh_configure target
   - use "make tarfile" in override_dh_install
   - remove extra cleaning not needed for ARB 6
   - use "dh_install --list-missing" to avoid missing files
   - added override_dh_fixperms target
* debian/control:
   - added libarb-dev package
   - Depends: added phyml, xdg-utils
   - Suggests: removed phyml
   - fix lintian duplicate-short-description (new descriptions)
* debian/*.install:
   - "unrolled" confusing globbing to select files
   - pick files from debian/tmp
   - moved all config files to /etc/arb
* debian/arb-common.templates: updated
* scripts:
   - removed arb-add-pt-server
   - launch-wrapper: 
     - only add demo.arb to newly created $ARBUSERDATA
     - pass commandline arguments through bin/arb wrapper
   - preinst: removing old PT server index files on upgrade from 5.5*
   - postinst: set setgid on shared PT dir
* rewrote arb.1 manfile
* added file icon for ARB databases
* using upstream arb_tcp.dat

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
IF $(argc) = 4
3
 
ELSE
4
 
        ERROR   Falsche Parameteranzahl: Syntax aisc xxx.pa xxx.aisc outfile
 
1
IF $(argc) != 4
 
2
    ERROR Wrong number of parameters[$(argc)]. Usage: aisc aisc_com.pa xxx.aisc outfile
5
3
ENDIF
6
4
 
7
5
DATA AISC { $(#FILE $(argv[2])) };
 
6
DUMPDATA DUMP/aisc_com.pa__$(argv[2]).dump
 
7
 
8
8
OPEN save $(argv[3])
9
9
MOVETO $(AISC/PROJECT)
10
10
 
11
 
IF $(MYTABSTOP)
12
 
        TABSTOP $(MYTABSTOP)
13
 
ELSE
14
 
        TABSTOP 8
15
 
ENDIF   
16
 
TAB     0       0
17
 
TAB     1       8
18
 
TAB     2       16
19
 
TAB     3       24
20
 
TAB     4       32
21
 
TAB     5       40
22
 
TAB     6       48
23
 
TAB     7       56
24
 
TAB     8       64
25
 
TAB     9       70
26
 
 
27
11
OUT save
28
12
MOVETO $(DATA/.)
29
13
 
30
 
P /*********************************************************************
31
 
P  * Created automagically from $(argv[2])
32
 
P  * using aisc-script 'aisc_com.pa'
 
14
P /* -----------------------------------------------------------------
 
15
P  * Created automagically from ../$(argv[2])
 
16
P  * using aisc-script '../AISC/aisc_com.pa'
33
17
P  * DO NOT EDIT THIS FILE!!!
34
 
P  *********************************************************************/$n
 
18
P  * ----------------------------------------------------------------- */$n
 
19
 
 
20
P #ifndef _LIMITS_H
 
21
P #include <limits.h>
 
22
P #endif
 
23
P #ifndef AISC_GLOBAL_H
 
24
P #include <aisc_global.h>
 
25
P #endif
35
26
 
36
27
P #ifndef AISC_MAX_OBJECT
37
 
P #define AISC_MAX_OBJECT $(MAX_OBJECT)
38
 
P #define AISC_MAX_ATTR $(MAX_KEY)
39
 
P #define MAX_AISC_SET_GET $(MAX_PAR_CNT)
40
 
P #define AISC_MAX_STRING_LEN $(MAX_STRING_LEN)
41
 
P #define AISC_MESSAGE_BUFFER_LEN ((AISC_MAX_STRING_LEN/4+3)*($(MAX_PAR_CNT)+2))
42
 
P #define AISC_MAGIC_NUMBER $(MAGIC_NUMBER)00
43
 
 
44
 
P $ntypedef struct struct_aisc_com {
45
 
P $1int$2socket;
46
 
P $1int$2message_type;
47
 
P $1char$2*message;
48
 
P $1int$2*message_queue;
49
 
P $1int$2magic;
50
 
P $1char$2*error;$n} aisc_com;
51
 
 
52
 
P #ifndef _AISC_BYTESTRING
53
 
P #define _AISC_BYTESTRING
54
 
P $ntypedef struct struct_bytestring {
55
 
P $1char$2*data;
56
 
P $1int$2size;$n} bytestring;
57
 
P #endif
58
 
 
59
 
 
60
 
P #ifdef __cplusplus
61
 
P const int $1AISC_GET$3= (int)AISC_MAGIC_NUMBER$6+ 0;
62
 
P const int $1AISC_SET$3= (int)AISC_MAGIC_NUMBER$6+ 1;
63
 
P const int $1AISC_NSET$3= (int)AISC_MAGIC_NUMBER$6+ 2;
64
 
P const int $1AISC_CREATE$3= (int)AISC_MAGIC_NUMBER$6+ 3;
65
 
P const int $1AISC_FIND$3= (int)AISC_MAGIC_NUMBER$6+ 4;
66
 
P const int $1AISC_COPY$3= (int)AISC_MAGIC_NUMBER$6+ 5;
67
 
P const int $1AISC_DELETE$3= (int)AISC_MAGIC_NUMBER$6+ 6;
68
 
P const int $1AISC_INIT$3= (int)AISC_MAGIC_NUMBER$6+ 7;
69
 
P const int $1AISC_DEBUG_INFO$3= (int)AISC_MAGIC_NUMBER$6+ 8;
70
 
P #else
71
 
P $nenum aisc_command_list {
72
 
P $1AISC_GET$3= AISC_MAGIC_NUMBER$6+ 0,
73
 
P $1AISC_SET$3= AISC_MAGIC_NUMBER$6+ 1,
74
 
P $1AISC_NSET$3= AISC_MAGIC_NUMBER$6+ 2,
75
 
P $1AISC_CREATE$3= AISC_MAGIC_NUMBER$6+ 3,
76
 
P $1AISC_FIND$3= AISC_MAGIC_NUMBER$6+ 4,
77
 
P $1AISC_COPY$3= AISC_MAGIC_NUMBER$6+ 5,
78
 
P $1AISC_DELETE$3= AISC_MAGIC_NUMBER$6+ 6,
79
 
P $1AISC_INIT$3= AISC_MAGIC_NUMBER$6+ 7,
80
 
P $1AISC_DEBUG_INFO$3= AISC_MAGIC_NUMBER$6+ 8,
81
 
P       };
82
 
P #endif
83
 
 
84
 
P #ifdef __cplusplus
85
 
P       const int $1AISC_CCOM_OK$3= AISC_MAGIC_NUMBER$6+ 0;
86
 
P       const int $1AISC_CCOM_ERROR$3= AISC_MAGIC_NUMBER$6+ 1;
87
 
P       const int $1AISC_CCOM_MESSAGE$3= AISC_MAGIC_NUMBER$6+ 2;
88
 
P #else
89
 
P       $nenum aisc_client_command_list {
90
 
P               AISC_CCOM_OK$3= AISC_MAGIC_NUMBER$6+ 0,
91
 
P               AISC_CCOM_ERROR$3= AISC_MAGIC_NUMBER$6+ 1,
92
 
P               AISC_CCOM_MESSAGE$3= AISC_MAGIC_NUMBER$6+ 2,
93
 
P       };
94
 
P #endif
95
 
P #endif
96
 
 
97
 
FOR $(ENUM)
98
 
        IF $(SKEY)
99
 
                CREATE $(my_attribute[$(ENUM)]) $(OBJECT_KEY)_ATTR_$(SKEY)
100
 
        ENDIF
101
 
#       P       typedef enum enum_$(ENUM) {
102
 
#       FOR $({/VAR)
103
 
#               IF $(VAL)
104
 
#                       P $2$(VAR)$3=$4 $(VAL),$\
105
 
#               ELSE
106
 
#                       P $2$(VAR),$\
107
 
#               ENDIF
108
 
#               P $6/* $(DOCU)$8*/
109
 
#       ENDFOR
110
 
#       P       } $(ENUM);
111
 
ENDFOR
112
 
P $n
113
 
 
114
 
 
115
 
FOR $(STRUCT)
116
 
        IF $(JOINED)
117
 
        ELSEIF $(SKEY)
118
 
                P typedef long T_$(OBJECT_KEY)_$(SKEY);
119
 
        ENDIF
120
 
ENDFOR
121
 
P $n$n
122
 
P #define $(OBJECT_KEY)_ATTR_INT(a,b)$6( (a+b) | 0x1000000 )
123
 
FOR $(ENUM)
124
 
        IF $(SKEY)
125
 
                P #define $(OBJECT_KEY)_ATTR_$(SKEY)(a,b)$6( (a+b) | 0x1000000 )
126
 
        ENDIF
127
 
ENDFOR
128
 
 
129
 
P #define $(OBJECT_KEY)_ATTR_DOUBLE(a,b)$6( (a+b) | 0x2000000 )
130
 
P #define $(OBJECT_KEY)_ATTR_STRING(a,b)$6( (a+b) | 0x3000000 )
 
28
P # define AISC_MAX_OBJECT         $(MAX_OBJECT)
 
29
P # define AISC_MAX_ATTR           $(MAX_KEY)
 
30
P # define MAX_AISC_SET_GET        $(MAX_PAR_CNT)
 
31
P # define AISC_MAX_STRING_LEN     $(MAX_STRING_LEN)
 
32
P # define AISC_MESSAGE_BUFFER_LEN ((AISC_MAX_STRING_LEN/4+3)*($(MAX_PAR_CNT)+2))
 
33
P # define AISC_MAGIC_NUMBER       $(MAGIC_NUMBER)00
 
34
--
 
35
P struct aisc_com;
 
36
--
 
37
P const int AISC_GET $|= AISC_MAGIC_NUMBER+0;
 
38
P const int AISC_SET $|= AISC_MAGIC_NUMBER+1;
 
39
P const int AISC_NSET $|= AISC_MAGIC_NUMBER+2;
 
40
P const int AISC_CREATE $|= AISC_MAGIC_NUMBER+3;
 
41
P const int AISC_FIND $|= AISC_MAGIC_NUMBER+4;
 
42
P const int AISC_COPY $|= AISC_MAGIC_NUMBER+5;
 
43
P const int AISC_DELETE $|= AISC_MAGIC_NUMBER+6;
 
44
P const int AISC_INIT $|= AISC_MAGIC_NUMBER+7;
 
45
P const int AISC_DEBUG_INFO $|= AISC_MAGIC_NUMBER+8;
 
46
--
 
47
P const int AISC_CCOM_OK $|= AISC_MAGIC_NUMBER+0;
 
48
P const int AISC_CCOM_ERROR $|= AISC_MAGIC_NUMBER+1;
 
49
P const int AISC_CCOM_MESSAGE $|= AISC_MAGIC_NUMBER+2;
 
50
--
 
51
P #endif
 
52
--
 
53
FOR $(ENUM)
 
54
    IF $(SKEY)
 
55
        CREATE $(my_attribute[$(ENUM)]) $(OBJECT_KEY)_ATTR_$(SKEY)
 
56
    ENDIF
 
57
ENDFOR
 
58
--
 
59
P #define $(OBJECT_KEY)_ATTR_INT(a,b) $|(((a)+(b))|0x1000000)
 
60
FOR $(ENUM)
 
61
    IF $(SKEY)
 
62
        P #define $(OBJECT_KEY)_ATTR_$(SKEY)(a,b) $|(((a)+(b))|0x1000000)
 
63
    ENDIF
 
64
ENDFOR
 
65
P #define $(OBJECT_KEY)_ATTR_DOUBLE(a,b) $|(((a)+(b))|0x2000000)
 
66
P #define $(OBJECT_KEY)_ATTR_STRING(a,b) $|(((a)+(b))|0x3000000)
131
67
CREATE $(my_attribute[char]) $(OBJECT_KEY)_ATTR_INT
132
68
CREATE $(my_attribute[int]) $(OBJECT_KEY)_ATTR_INT
133
69
CREATE $(my_attribute[func]) $(OBJECT_KEY)_ATTR_INT
137
73
CREATE $(my_attribute[aisc_string]) $(OBJECT_KEY)_ATTR_STRING
138
74
CREATE $(my_attribute[bytestring]) $(OBJECT_KEY)_ATTR_BYTES
139
75
FOR $(STRUCT)
 
76
    IF $(JOINED)
 
77
    ELSEIF $(SKEY)
 
78
        P #define $(OBJECT_KEY)_ATTR_$(SKEY)(a,b) $|(((a)+(b))|0x4000000)
 
79
        CREATE $(my_attribute[$(STRUCT)]) $(OBJECT_KEY)_ATTR_$(SKEY)
 
80
    ENDIF
 
81
ENDFOR
 
82
P #define $(OBJECT_KEY)_ATTR_BYTES(a,b) $|(((a)+(b))|0x5000000)
 
83
--
 
84
P enum Aisc_Object_Type {
 
85
INDENT +1
 
86
    FOR $(STRUCT)
140
87
        IF $(JOINED)
141
88
        ELSEIF $(SKEY)
142
 
                P #define $(OBJECT_KEY)_ATTR_$(SKEY)(a,b)$6( (a+b) | 0x4000000 )
143
 
                CREATE $(my_attribute[$(STRUCT)]) $(OBJECT_KEY)_ATTR_$(SKEY)
 
89
            P $(OBJECT_KEY)_$(SKEY) $|= 0x10000*$(SKEYC),
144
90
        ENDIF
145
 
ENDFOR
146
 
P #define $(OBJECT_KEY)_ATTR_BYTES(a,b)$6( (a+b) | 0x5000000 )
147
 
 
148
 
P $n$ntypedef enum Attributes_Header_List {
 
91
    ENDFOR
 
92
    P $(OBJECT_KEY)_MAX $|= 0x10000*$(MAX_OBJECT),
 
93
    P $(OBJECT_KEY)_INDEX $|= 0x10000*0x1ff
 
94
INDENT -1
 
95
P };
 
96
--
149
97
FOR $(STRUCT)
150
 
        IF $(JOINED)
151
 
        ELSEIF $(SKEY)
152
 
                P $1$(OBJECT_KEY)_$(SKEY)$5=$6$(SKEYC)*0x10000,
153
 
        ENDIF
 
98
    IF $(JOINED)
 
99
    ELSEIF $(SKEY)
 
100
        P struct T_$(OBJECT_KEY)_$(SKEY) : public AISC_Object {
 
101
        INDENT +1
 
102
        P T_$(OBJECT_KEY)_$(SKEY)() : AISC_Object($(OBJECT_KEY)_$(SKEY)) {}
 
103
        P void assign(const T_$(OBJECT_KEY)_$(SKEY)& o) { set(o.type(), o.get()); }
 
104
        INDENT -1
 
105
        P };
 
106
    ENDIF
154
107
ENDFOR
155
 
P       $1$(OBJECT_KEY)_MAX$5=$6$(MAX_OBJECT)*0x10000,
156
 
P       $1$(OBJECT_KEY)_INDEX$5=$60x1ff0000
157
 
P       } Aisc_Objekt_Type;$n$n
 
108
--
158
109
 
159
110
CREATE $(A)
160
111
CREATE $(add) 0
162
113
CREATE $(skey) 0
163
114
CREATE $(struct) 0
164
115
CREATE $(com)
165
 
        FOR $(STRUCT)
166
 
                IF $(SKEY)
167
 
                        PUSH
168
 
                        IF $(JOINED)
169
 
                        ELSE
170
 
                                P       /************$2$(SKEY)$4*************/
171
 
                                P       typedef enum {
172
 
                        ENDIF
173
 
                        SET $(skey) $(SKEY)
174
 
                        SET $(struct) $(STRUCT)
175
 
                        CALL struct_attr,0,$1$(SKEY)_,/* 
176
 
                        IF $(JOIN_NEXT)
177
 
                        ELSE
178
 
                                P $1$(SKEY)_LASTATTR$4= 0
179
 
                                P } $(OBJECT_KEY)_$(SKEY)_Attribute;$n
180
 
                        ENDIF
181
 
                        POP
182
 
                ENDIF
183
 
        ENDFOR
 
116
 
 
117
FOR $(STRUCT)
 
118
    IF $(SKEY)
 
119
        PUSH
 
120
        IF $(JOINED)
 
121
        ELSE
 
122
            P enum $(OBJECT_KEY)_$(SKEY)_Attribute { // $(SKEY)
 
123
            INDENT +1
 
124
        ENDIF
 
125
        SET $(skey) $(SKEY)
 
126
        SET $(struct) $(STRUCT)
 
127
        CALL insert_struct_attributes,0,$(SKEY)_,//
 
128
        IF $(JOIN_NEXT)
 
129
        ELSE
 
130
            P $(SKEY)_FORCELONG $|= LONG_MAX
 
131
            INDENT -1
 
132
            P };
 
133
            --
 
134
        ENDIF
 
135
        POP
 
136
    ENDIF
 
137
ENDFOR
184
138
CLOSE save
185
139
 
186
140
EXIT
187
141
 
188
 
FUNCTION struct_attr,a,s,c
189
 
        FOR $({/TYPE)
190
 
                IF $(KEY)
191
 
                        IF $(TYPE) = dllh
192
 
                                P $(s)PRED$4= $\
193
 
                                P $(my_attribute[$(struct)])$\
194
 
                                P $6($(OBJECT_KEY)_$(skey),$8$(+ $(a)+$(KEYC))),$9/* DO */
195
 
                                P $(s)NEXT$4= $\
196
 
                                P $(my_attribute[$(struct)])$\
197
 
                                P $6($(OBJECT_KEY)_$(skey),$8$(+ 1+$(+ $(a)+$(KEYC)))),$9$(c) */
198
 
 
199
 
                                SET $(add) $(+ $(a)+$(KEYC))
200
 
                                SET $(add) $(+ 2+$(add))
201
 
                                SET $(str) $(s)$(KEY)
202
 
                                PUSH
203
 
                                MOVETO $(/AISC/DATA/STRUCT.dll_header)
204
 
                                CALL struct_attr,$(add),$(str),$(c) H
205
 
                                POP
206
 
 
207
 
                        ELSEIF $(REF) ~ s
208
 
                                SET $(add) $(+ $(a),$(KEYC))
209
 
                                SET $(str) $(s)$(KEY)
210
 
                                SET $(com) $(c) S
211
 
                                PUSH
212
 
                                MOVETO $(/AISC/DATA/STRUCT.$(TYPE))
213
 
                                CALL struct_attr,$(add),$(str),$(com)
214
 
                                POP
215
 
                        ELSE
216
 
                                IF $(REF) ~ d
217
 
                                        SET $(com) $(c) DL
218
 
                                ELSEIF $(REF) ~ v
219
 
                                        SET $(com) $(c) [$(SIZE)]
220
 
                                ELSEIF $(REF) ~ *
221
 
                                        SET $(com) $(c) []
222
 
                                ELSEIF $(TYPE) = func
223
 
                                        SET $(com) $(c) FUNC
224
 
                                ELSE
225
 
                                        SET $(com) $(c)
226
 
                                ENDIF
227
 
                                IF $(my_attribute[$(TYPE)])
228
 
                                        P $(s)$(KEY)$4= $\
229
 
                                        P $(my_attribute[$(TYPE)])$\
230
 
                                        P $6($(OBJECT_KEY)_$(skey),$8$(+ $(a)+$(KEYC))),$9$(com) */
231
 
                                ELSE
232
 
                                        ERROR TYPE $(TYPE) unknown, no key build
233
 
                                ENDIF
234
 
                                IF $(REF) ~ d
235
 
                                        P $(s)$(KEY)_CNT$4= $\
236
 
                                        P $(my_attribute[int])$\
237
 
                                        P $6($(OBJECT_KEY)_$(skey),$8$(+ 1,$(+ $(a)+$(KEYC)))),$9$(com) */
238
 
                                ENDIF
239
 
                        ENDIF
240
 
                ENDIF
241
 
        ENDFOR
 
142
FUNCTION insert_struct_attributes,a,s,c
 
143
    FOR $({/TYPE)
 
144
        IF $(KEY)
 
145
            IF $(TYPE) = dllh
 
146
                P $(s)PRED $|= $\
 
147
                P $(my_attribute[$(struct)])$\
 
148
                P $|($(OBJECT_KEY)_$(skey), $(+ $(a)+$(KEYC))), $|// DO
 
149
 
 
150
                P $(s)NEXT $|= $\
 
151
                P $(my_attribute[$(struct)])$\
 
152
                P $|($(OBJECT_KEY)_$(skey), $(+ 1+$(+ $(a)+$(KEYC)))), $|$(c)
 
153
 
 
154
                SET $(add) $(+ $(a)+$(KEYC))
 
155
                SET $(add) $(+ 2+$(add))
 
156
                SET $(str) $(s)$(KEY)
 
157
                PUSH
 
158
                MOVETO $(/AISC/DATA/STRUCT.dll_header)
 
159
                CALL insert_struct_attributes,$(add),$(str),$(c) H
 
160
                POP
 
161
            ELSEIF $(REF) ~ s
 
162
                SET $(add) $(+ $(a),$(KEYC))
 
163
                SET $(str) $(s)$(KEY)
 
164
                SET $(com) $(c) S
 
165
                PUSH
 
166
                MOVETO $(/AISC/DATA/STRUCT.$(TYPE))
 
167
                CALL insert_struct_attributes,$(add),$(str),$(com)
 
168
                POP
 
169
            ELSE
 
170
                IF $(REF) ~ d
 
171
                    SET $(com) $(c) DL
 
172
                ELSEIF $(REF) ~ v
 
173
                    SET $(com) $(c) [$(SIZE)]
 
174
                ELSEIF $(REF) ~ *
 
175
                    SET $(com) $(c) []
 
176
                ELSEIF $(TYPE) = func
 
177
                    SET $(com) $(c) FUNC
 
178
                ELSE
 
179
                    SET $(com) $(c)
 
180
                ENDIF
 
181
                IF $(my_attribute[$(TYPE)])
 
182
                    P $(s)$(KEY) $|= $\
 
183
                    P $(my_attribute[$(TYPE)])$\
 
184
                    P $|($(OBJECT_KEY)_$(skey), $(+ $(a)+$(KEYC))), $|$(com)
 
185
                ELSE
 
186
                    ERROR TYPE $(TYPE) unknown, no key build
 
187
                ENDIF
 
188
                IF $(REF) ~ d
 
189
                    P $(s)$(KEY)_CNT $|= $\
 
190
                    P $(my_attribute[int])$\
 
191
                    P $|($(OBJECT_KEY)_$(skey), $(+ 1,$(+ $(a)+$(KEYC)))), $|$(com)
 
192
                ENDIF
 
193
            ENDIF
 
194
        ENDIF
 
195
    ENDFOR
242
196
RETURN