Subversion Repositories Kolibri OS

Rev

Rev 31 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 31 Rev 109
Line 1... Line 1...
1
; flat assembler core
1
; flat assembler core
2
; Copyright (c) 1999-2005, Tomasz Grysztar.
2
; Copyright (c) 1999-2006, Tomasz Grysztar.
3
; All rights reserved.
3
; All rights reserved.
Line 4... Line 4...
4
 
4
 
5
preprocessor:
5
preprocessor:
6
	mov	edi,characters
6
        mov     edi,characters
Line 331... Line 331...
331
	stos	byte [edi]
331
        stos    byte [edi]
332
	pop	ecx
332
        pop     ecx
333
	ret
333
        ret
334
 
334
 
Line -... Line 335...
-
 
335
lower_case:
-
 
336
        mov     edi,converted
-
 
337
        mov     ebx,characters
-
 
338
      convert_case:
-
 
339
        lods    byte [esi]
-
 
340
        xlat    byte [ebx]
-
 
341
        stos    byte [edi]
-
 
342
        loop    convert_case
-
 
343
      case_ok:
-
 
344
        ret
-
 
345
 
-
 
346
get_directive:
-
 
347
        push    edi
-
 
348
        mov     edx,esi
-
 
349
        mov     ebp,ecx
-
 
350
        call    lower_case
-
 
351
        pop     edi
-
 
352
      scan_directives:
-
 
353
        mov     esi,converted
-
 
354
        movzx   eax,byte [edi]
-
 
355
        or      al,al
-
 
356
        jz      no_directive
-
 
357
        mov     ecx,ebp
-
 
358
        inc     edi
-
 
359
        mov     ebx,edi
-
 
360
        add     ebx,eax
-
 
361
        mov     ah,[esi]
-
 
362
        cmp     ah,[edi]
-
 
363
        jb      no_directive
-
 
364
        ja      next_directive
-
 
365
        cmp     cl,al
-
 
366
        jne     next_directive
-
 
367
        repe    cmps byte [esi],[edi]
-
 
368
        jb      no_directive
-
 
369
        je      directive_ok
-
 
370
      next_directive:
-
 
371
        mov     edi,ebx
-
 
372
        add     edi,2
-
 
373
        jmp     scan_directives
-
 
374
      no_directive:
-
 
375
        mov     esi,edx
-
 
376
        mov     ecx,ebp
-
 
377
        stc
-
 
378
        ret
-
 
379
      directive_ok:
-
 
380
        lea     esi,[edx+ebp]
-
 
381
        movzx   eax,word [ebx]
-
 
382
        add     eax,preprocessor
-
 
383
        clc
-
 
384
        ret
-
 
385
 
-
 
386
 
335
preprocess_line:
387
preprocess_line:
336
	mov	eax,esp
388
        mov     eax,esp
337
	sub	eax,100h
389
        sub     eax,100h
338
	jc	stack_overflow
390
        jc      stack_overflow
339
	cmp	eax,[stack_limit]
391
        cmp     eax,[stack_limit]
Line 389... Line 441...
389
	cmp	cl,3
441
        cmp     cl,3
390
	jb	not_preprocessor_directive
442
        jb      not_preprocessor_directive
391
	push	edi
443
        push    edi
392
	mov	edi,preprocessor_directives
444
        mov     edi,preprocessor_directives
393
	call	get_symbol
445
        call    get_directive
394
	pop	edi
446
        pop     edi
395
	jc	not_preprocessor_directive
447
        jc      not_preprocessor_directive
396
	mov	byte [edx-2],3Bh
448
        mov     byte [edx-2],3Bh
397
	movzx	ebx,ax
449
        jmp     near eax
398
	add	ebx,preprocessor
-
 
399
	jmp	near ebx
-
 
400
      not_preprocessor_directive:
450
      not_preprocessor_directive:
401
	xor	ch,ch
451
        xor     ch,ch
402
	call	get_preprocessor_symbol
452
        call    get_preprocessor_symbol
403
	jc	not_macro
453
        jc      not_macro
404
	mov	byte [ebx-2],3Bh
454
        mov     byte [ebx-2],3Bh
405
	mov	[struc_name],0
455
        mov     [struc_name],0
Line 693... Line 743...
693
	add	edx,5
743
        add     edx,5
694
	add	esi,2
744
        add     esi,2
695
	push	edx esi
745
        push    edx esi
696
	mov	esi,edx
746
        mov     esi,edx
697
	call	process_fix_constants
747
        call    skip_parameters
698
	xchg	esi,[esp]
748
        xchg    esi,[esp]
699
	mov	ch,11b
749
        mov     ch,11b
700
	jmp	define_symbolic_constant
750
        jmp     define_preprocessor_constant
701
define_equ_constant:
751
define_equ_constant:
702
	add	esi,3
752
        add     esi,3
703
	push	esi
753
        push    esi
704
	call	process_equ_constants
754
        call    process_equ_constants
705
	push	esi
755
        push    esi
706
	mov	esi,[struc_name]
756
        mov     esi,[struc_name]
707
	mov	ch,10b
757
        mov     ch,10b
708
      define_symbolic_constant:
758
      define_preprocessor_constant:
709
	mov	byte [esi-2],3Bh
759
        mov     byte [esi-2],3Bh
710
	mov	cl,[esi-1]
760
        mov     cl,[esi-1]
711
	call	add_preprocessor_symbol
761
        call    add_preprocessor_symbol
712
	pop	esi ebx
762
        pop     esi ebx
713
	mov	ecx,edi
763
        mov     ecx,edi
714
	dec	ecx
764
        dec     ecx
715
	sub	ecx,ebx
765
        sub     ecx,ebx
716
	mov	[edx+8],ebx
766
        mov     [edx+8],ebx
717
	mov	[edx+12],ecx
767
        mov     [edx+12],ecx
718
	jmp	line_preprocessed
768
        jmp     line_preprocessed
719
define_struc:
769
define_symbolic_constant:
-
 
770
        lods    byte [esi]
-
 
771
        cmp     al,1Ah
-
 
772
        jne     invalid_name
-
 
773
        lods    byte [esi]
-
 
774
        mov     cl,al
-
 
775
        mov     ch,10b
-
 
776
        call    add_preprocessor_symbol
-
 
777
        movzx   eax,byte [esi-1]
-
 
778
        add     esi,eax
-
 
779
        push    esi edx
-
 
780
        call    skip_parameters
-
 
781
        pop     edx ebx
-
 
782
        lea     ecx,[esi-1]
-
 
783
        sub     ecx,ebx
-
 
784
        mov     [edx+8],ebx
-
 
785
        mov     [edx+12],ecx
-
 
786
        jmp     line_preprocessed
-
 
787
      skip_parameters:
-
 
788
        lods    byte [esi]
-
 
789
        or      al,al
-
 
790
        jz      parameters_skipped
-
 
791
        cmp     al,'{'
-
 
792
        je      parameters_skipped
-
 
793
        cmp     al,22h
-
 
794
        je      skip_quoted_parameter
-
 
795
        cmp     al,1Ah
-
 
796
        jne     skip_parameters
-
 
797
        lods    byte [esi]
-
 
798
        movzx   eax,al
-
 
799
        add     esi,eax
-
 
800
        jmp     skip_parameters
-
 
801
      skip_quoted_parameter:
-
 
802
        lods    dword [esi]
-
 
803
        add     esi,eax
-
 
804
        jmp     skip_parameters
-
 
805
      parameters_skipped:
-
 
806
        ret
-
 
807
 
-
 
808
define_struc:
720
	mov	ch,1
809
        mov     ch,1
721
	jmp	make_macro
810
        jmp     make_macro
722
define_macro:
811
define_macro:
723
	xor	ch,ch
812
        xor     ch,ch
724
      make_macro:
813
      make_macro:
Line 855... Line 944...
855
	mov	[error_line],eax
944
        mov     [error_line],eax
856
	mov	[instant_macro_start],esi
945
        mov     [instant_macro_start],esi
857
	cmp	[base_code],10h
946
        cmp     [base_code],10h
858
	je	prepare_match
947
        je      prepare_match
859
      skip_parameters:
948
        call    skip_parameters
860
	lods	byte [esi]
949
      instant_macro_parameters_skipped:
861
	or	al,al
-
 
862
	jz	instant_macro_parameters_end
-
 
863
	cmp	al,'{'
-
 
864
	je	instant_macro_parameters_end
-
 
865
	cmp	al,22h
-
 
866
	je	skip_quoted_parameter
-
 
867
	cmp	al,1Ah
-
 
868
	jne	skip_parameters
-
 
869
	lods	byte [esi]
-
 
870
	movzx	eax,al
-
 
871
	add	esi,eax
-
 
872
	jmp	skip_parameters
-
 
873
      skip_quoted_parameter:
-
 
874
	lods	dword [esi]
-
 
875
	add	esi,eax
-
 
876
	jmp	skip_parameters
-
 
877
      instant_macro_parameters_end:
-
 
878
	dec	esi
950
        dec     esi
879
	mov	[parameters_end],esi
951
        mov     [parameters_end],esi
880
	lods	byte [esi]
952
        lods    byte [esi]
881
	cmp	al,'{'
953
        cmp     al,'{'
882
	je	found_macro_block
954
        je      found_macro_block
883
	or	al,al
955
        or      al,al
Line 886... Line 958...
886
prepare_match:
958
prepare_match:
887
	call	skip_pattern
959
        call    skip_pattern
888
	mov	[value_type],80h+10b
960
        mov     [value_type],80h+10b
889
	call	process_symbolic_constants
961
        call    process_symbolic_constants
890
	jmp	instant_macro_parameters_end
962
        jmp     instant_macro_parameters_skipped
891
      skip_pattern:
963
      skip_pattern:
892
	lods	byte [esi]
964
        lods    byte [esi]
893
	or	al,al
965
        or      al,al
894
	jz	invalid_macro_arguments
966
        jz      invalid_macro_arguments
895
	cmp	al,','
967
        cmp     al,','
896
	je	pattern_skipped
968
        je      pattern_skipped
Line 1008... Line 1080...
1008
	call	move_data
1080
        call    move_data
1009
	mov	esi,edi
1081
        mov     esi,edi
1010
	ret
1082
        ret
1011
      move_data:
1083
      move_data:
1012
	shr	ecx,1
1084
        lea     eax,[edi+ecx]
-
 
1085
        cmp     eax,[memory_end]
-
 
1086
        jae     out_of_memory
-
 
1087
        shr     ecx,1
1013
	jnc	movsb_ok
1088
        jnc     movsb_ok
1014
	movs	byte [edi],[esi]
1089
        movs    byte [edi],[esi]
1015
      movsb_ok:
1090
      movsb_ok:
1016
	shr	ecx,1
1091
        shr     ecx,1
1017
	jnc	movsw_ok
1092
        jnc     movsw_ok
Line 1111... Line 1186...
1111
	mov	al,[esi-1]
1186
        mov     al,[esi-1]
1112
	stos	byte [edi]
1187
        stos    byte [edi]
1113
	xor	dl,dl
1188
        xor     dl,dl
1114
	jmp	after_macro_operators
1189
        jmp     after_macro_operators
1115
      symbol_conversion:
1190
      reduce_symbol_conversion:
-
 
1191
        inc     esi
-
 
1192
      symbol_conversion:
1116
	cmp	byte [esi],1Ah
1193
        mov     edx,esi
-
 
1194
        mov     al,[esi]
-
 
1195
        cmp     al,1Ah
1117
	jne	unexpected_characters
1196
        jne     symbol_character_conversion
1118
	lea	eax,[edi+3]
1197
        lods    word [esi]
-
 
1198
        movzx   ecx,ah
-
 
1199
        lea     ebx,[edi+3]
1119
	sub	eax,esi
1200
        jmp     convert_to_quoted_string
-
 
1201
      symbol_character_conversion:
-
 
1202
        cmp     al,22h
-
 
1203
        je      after_macro_operators
-
 
1204
        cmp     al,'`'
-
 
1205
        je      reduce_symbol_conversion
-
 
1206
        lea     ebx,[edi+5]
-
 
1207
        xor     ecx,ecx
-
 
1208
        or      al,al
-
 
1209
        jz      convert_to_quoted_string
-
 
1210
        cmp     al,'#'
-
 
1211
        je      convert_to_quoted_string
-
 
1212
        inc     ecx
-
 
1213
      convert_to_quoted_string:
-
 
1214
        sub     ebx,edx
1120
	ja	shift_line_data
1215
        ja      shift_line_data
1121
	mov	al,22h
1216
        mov     al,22h
1122
	mov	dl,al
1217
        mov     dl,al
1123
	stos	byte [edi]
1218
        stos    byte [edi]
1124
	lods	word [esi]
1219
        mov     ebx,edi
1125
	movzx	eax,ah
-
 
1126
	mov	ecx,eax
-
 
1127
	mov	ebx,edi
-
 
1128
	stos	dword [edi]
1220
        mov     eax,ecx
-
 
1221
        stos    dword [edi]
1129
	rep	movs byte [edi],[esi]
1222
        rep     movs byte [edi],[esi]
1130
	cmp	edi,esi
1223
        cmp     edi,esi
1131
	je	before_macro_operators
1224
        je      before_macro_operators
1132
	jmp	after_macro_operators
1225
        jmp     after_macro_operators
1133
      shift_line_data:
1226
      shift_line_data:
1134
	lea	edx,[esi+2]
1227
        push    ecx
-
 
1228
        mov     edx,esi
1135
	lea	esi,[ebp-1]
1229
        lea     esi,[ebp-1]
1136
	add	ebp,eax
1230
        add     ebp,ebx
1137
	lea	edi,[ebp-1]
1231
        lea     edi,[ebp-1]
1138
	lea	ecx,[esi+1]
1232
        lea     ecx,[esi+1]
1139
	sub	ecx,edx
1233
        sub     ecx,edx
1140
	std
1234
        std
1141
	rep	movs byte [edi],[esi]
1235
        rep     movs byte [edi],[esi]
1142
	cld
1236
        cld
1143
	movzx	eax,byte [edx-1]
1237
        pop     eax
1144
	sub	edi,3
1238
        sub     edi,3
1145
	mov	dl,22h
1239
        mov     dl,22h
1146
	mov	[edi-1],dl
1240
        mov     [edi-1],dl
1147
	mov	ebx,edi
1241
        mov     ebx,edi
1148
	mov	[edi],eax
1242
        mov     [edi],eax
1149
	lea	esi,[edi+4+eax]
1243
        lea     esi,[edi+4+eax]
1150
	jmp	before_macro_operators
1244
        jmp     before_macro_operators
1151
      concatenation:
1245
      concatenation:
1152
	cmp	byte [esi],'#'
1246
        cmp     dl,1Ah
1153
	je	reduce_concatenation_symbol
-
 
1154
	cmp	dl,1Ah
-
 
1155
	je	symbol_concatenation
1247
        je      symbol_concatenation
1156
	cmp	dl,22h
1248
        cmp     dl,22h
1157
	je	string_concatenation
1249
        je      string_concatenation
1158
      no_concatenation:
1250
      no_concatenation:
1159
	cmp	esi,edi
1251
        cmp     esi,edi
1160
	je	before_macro_operators
1252
        je      before_macro_operators
1161
	jmp	after_macro_operators
1253
        jmp     after_macro_operators
1162
      reduce_concatenation_symbol:
1254
      symbol_concatenation:
1163
	movs	byte [edi],[esi]
-
 
1164
	cmp	byte [esi],'#'
-
 
1165
	je	reduce_concatenation_symbol
-
 
1166
	jmp	no_concatenation
-
 
1167
      symbol_concatenation:
-
 
1168
	cmp	byte [esi],1Ah
1255
        cmp     byte [esi],1Ah
1169
	jne	no_concatenation
1256
        jne     no_concatenation
1170
	inc	esi
1257
        inc     esi
1171
	lods	byte [esi]
1258
        lods    byte [esi]
1172
	movzx	ecx,al
1259
        movzx   ecx,al
Line 1184... Line 1271...
1184
	cmp	byte [esi],22h
1271
        cmp     byte [esi],22h
1185
	je	do_string_concatenation
1272
        je      do_string_concatenation
1186
	cmp	byte [esi],'`'
1273
        cmp     byte [esi],'`'
1187
	jne	no_concatenation
1274
        jne     no_concatenation
1188
	inc	esi
1275
      concatenate_converted_symbol:
-
 
1276
        inc     esi
1189
	cmp	byte [esi],1Ah
1277
        mov     al,[esi]
-
 
1278
        cmp     al,'`'
-
 
1279
        je      concatenate_converted_symbol
-
 
1280
        cmp     al,22h
-
 
1281
        je      do_string_concatenation
-
 
1282
        cmp     al,1Ah
1190
	jne	unexpected_characters
1283
        jne     concatenate_converted_symbol_character
1191
	inc	esi
1284
        inc     esi
1192
	lods	byte [esi]
1285
        lods    byte [esi]
1193
	movzx	ecx,al
1286
        movzx   ecx,al
1194
	add	[ebx],ecx
1287
        add     [ebx],ecx
1195
	rep	movs byte [edi],[esi]
1288
        rep     movs byte [edi],[esi]
1196
	jmp	after_macro_operators
1289
        jmp     after_macro_operators
1197
      do_string_concatenation:
1290
      concatenate_converted_symbol_character:
-
 
1291
        or      al,al
-
 
1292
        jz      after_macro_operators
-
 
1293
        cmp     al,'#'
-
 
1294
        je      after_macro_operators
-
 
1295
        inc     dword [ebx]
-
 
1296
        movs    byte [edi],[esi]
-
 
1297
        jmp     after_macro_operators
-
 
1298
      do_string_concatenation:
1198
	inc	esi
1299
        inc     esi
1199
	lods	dword [esi]
1300
        lods    dword [esi]
1200
	mov	ecx,eax
1301
        mov     ecx,eax
1201
	add	[ebx],eax
1302
        add     [ebx],eax
1202
	rep	movs byte [edi],[esi]
1303
        rep     movs byte [edi],[esi]
Line 1540... Line 1641...
1540
	jmp	irps_parameter_ok
1641
        jmp     irps_parameter_ok
1541
      irps_quoted_string:
1642
      irps_quoted_string:
1542
	mov	eax,[ebx+1]
1643
        mov     eax,[ebx+1]
1543
	add	eax,1+4
1644
        add     eax,1+4
1544
      irps_symbol:
1645
        jmp     irps_parameter_ok
-
 
1646
      irps_symbol:
1545
	movzx	eax,byte [ebx+1]
1647
        movzx   eax,byte [ebx+1]
1546
	add	eax,1+1
1648
        add     eax,1+1
1547
      irps_parameter_ok:
1649
      irps_parameter_ok:
1548
	mov	[edx+8],eax
1650
        mov     [edx+8],eax
1549
	add	ebx,eax
1651
        add     ebx,eax
Line 1755... Line 1857...
1755
	je	process_macro_line
1857
        je      process_macro_line
1756
	inc	[counter]
1858
        inc     [counter]
1757
      process_macro_line:
1859
      process_macro_line:
1758
	mov	[current_line],edi
1860
        mov     [current_line],edi
1759
	cmp	edi,[memory_end]
1861
        lea     eax,[edi+10h]
-
 
1862
        cmp     eax,[memory_end]
1760
	jae	out_of_memory
1863
        jae     out_of_memory
1761
	mov	eax,[esp+4]
1864
        mov     eax,[esp+4]
1762
	or	eax,eax
1865
        or      eax,eax
1763
	jz	instant_macro_line_header
1866
        jz      instant_macro_line_header
1764
	stos	dword [edi]
1867
        stos    dword [edi]
1765
	mov	eax,ecx
1868
        mov     eax,ecx
Line 1786... Line 1889...
1786
	jz	process_macro_line_element
1889
        jz      process_macro_line_element
1787
	mov	ax,3Bh
1890
        mov     ax,3Bh
1788
	stos	word [edi]
1891
        stos    word [edi]
1789
      process_macro_line_element:
1892
      process_macro_line_element:
1790
	lods	byte [esi]
1893
        lea     eax,[edi+100h]
-
 
1894
        cmp     eax,[memory_end]
-
 
1895
        jae     out_of_memory
-
 
1896
        lods    byte [esi]
1791
	cmp	al,'}'
1897
        cmp     al,'}'
1792
	je	macro_line_processed
1898
        je      macro_line_processed
1793
	or	al,al
1899
        or      al,al
1794
	jz	macro_line_processed
1900
        jz      macro_line_processed
1795
	cmp	al,1Ah
1901
        cmp     al,1Ah
Line 1802... Line 1908...
1802
	jne	process_macro_line_element
1908
        jne     process_macro_line_element
1803
      copy_macro_string:
1909
      copy_macro_string:
1804
	mov	ecx,[esi]
1910
        mov     ecx,[esi]
1805
	add	ecx,4
1911
        add     ecx,4
1806
	rep	movs byte [edi],[esi]
1912
        call    move_data
1807
	jmp	process_macro_line_element
1913
        jmp     process_macro_line_element
1808
      process_macro_symbol:
1914
      process_macro_symbol:
1809
	push	esi edi
1915
        push    esi edi
1810
	test	[macro_status],20h
1916
        test    [macro_status],20h
1811
	jz	not_macro_directive
1917
        jz      not_macro_directive
1812
	movzx	ecx,byte [esi]
1918
        movzx   ecx,byte [esi]
1813
	inc	esi
1919
        inc     esi
1814
	mov	edi,macro_directives
1920
        mov     edi,macro_directives
1815
	call	get_symbol
1921
        call    get_directive
1816
	jnc	process_macro_directive
1922
        jnc     process_macro_directive
1817
	dec	esi
1923
        dec     esi
1818
	jmp	not_macro_directive
1924
        jmp     not_macro_directive
1819
      process_macro_directive:
1925
      process_macro_directive:
1820
	movzx	edx,ax
1926
        mov     edx,eax
1821
	add	edx,preprocessor
1927
        pop     edi eax
1822
	pop	edi eax
-
 
1823
	mov	byte [edi],0
1928
        mov     byte [edi],0
1824
	inc	edi
1929
        inc     edi
1825
	pop	ecx ebx
1930
        pop     ecx ebx
1826
	jmp	near edx
1931
        jmp     near edx
1827
      not_macro_directive:
1932
      not_macro_directive:
Line 1843... Line 1948...
1843
	mov	edx,[edx+12]
1948
        mov     edx,[edx+12]
1844
	or	edx,edx
1949
        or      edx,edx
1845
	jz	replace_macro_counter
1950
        jz      replace_macro_counter
1846
	xchg	esi,edx
1951
        xchg    esi,edx
1847
	rep	movs byte [edi],[esi]
1952
        call    move_data
1848
	mov	esi,edx
1953
        mov     esi,edx
1849
	jmp	process_macro_line_element
1954
        jmp     process_macro_line_element
1850
      group_macro_symbol:
1955
      group_macro_symbol:
1851
	xor	eax,eax
1956
        xor     eax,eax
1852
	cmp	[counter],eax
1957
        cmp     [counter],eax
1853
	je	replace_macro_symbol
1958
        je      replace_macro_symbol
Line 2379... Line 2484...
2379
	mov	al,'%'
2484
        mov     al,'%'
2380
	stos	byte [edi]
2485
        stos    byte [edi]
2381
	mov	esi,ebx
2486
        mov     esi,ebx
2382
	jmp	preprocess_path
2487
        jmp     preprocess_path
2383
 
2488
>
2384
include_variable db 'INCLUDE',0
-
 
2385
 
-
 
2386
symbol_characters db 27
-
 
2387
 db 9,0Ah,0Dh,1Ah,20h,'+-/*=<>()[]{}:,|&~#`;\'
-
 
2388
 
-
 
2389
preprocessor_directives:
-
 
2390
 db 7,'include'
-
 
2391
 dw include_file-preprocessor
-
 
2392
 db 3,'irp'
-
 
2393
 dw irp_directive-preprocessor
-
 
2394
 db 4,'irps'
-
 
2395
 dw irps_directive-preprocessor
-
 
2396
 db 5,'macro'
-
 
2397
 dw define_macro-preprocessor
-
 
2398
 db 5,'match'
-
 
2399
 dw match_directive-preprocessor
-
 
2400
 db 5,'purge'
-
 
2401
 dw purge_macro-preprocessor
-
 
2402
 db 4,'rept'
-
 
2403
 dw rept_directive-preprocessor
-
 
2404
 db 7,'restore'
-
 
2405
 dw restore_equ_constant-preprocessor
-
 
2406
 db 7,'restruc'
-
 
2407
 dw purge_struc-preprocessor
-
 
2408
 db 5,'struc'
-
 
2409
 dw define_struc-preprocessor
-
 
2410
 db 0
-
 
2411
 
-
 
2412
macro_directives:
-
 
2413
 db 6,'common'
-
 
2414
 dw common_block-preprocessor
-
 
2415
 db 7,'forward'
-
 
2416
 dw forward_block-preprocessor
-
 
2417
 db 5,'local'
-
 
2418
 dw local_symbols-preprocessor
-
 
2419
 db 7,'reverse'
-
 
2420
 dw reverse_block-preprocessor
-
 
2421
 db 0
-
 
2422
>
-