1 /******************************************************************************
2 *
3 * Copyright (C) 2006, The Gentee Group. All rights reserved.
4 * This file is part of the Gentee open source project - http://www.gentee.com.
5 *
6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT").
7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS
8 * ACCEPTANCE OF THE AGREEMENT.
9 *
10 * ID: jump 07.02.07 0.0.A.
11 *
12 * Author: Alexander Krivonogov ( algen )
13 *
14 * Summary: Переходы и метки
15 *
16 ******************************************************************************/
17
18 #include "func.h"
19
20 /*-----------------------------------------------------------------------------
21 *
22 * ID: j_jump 07.02.06 0.0.A.
23 *
24 * Summary: Добавление перехода в таблицу меток
25 *
26 -----------------------------------------------------------------------------*/
27 uint STDCALL j_jump( uint cmd, uint flag, uint link )
28 {
29 uint off; //Смещение на элемент в таблице меток
30 pflabel curlabel; //Текущий элемент в таблице меток
31
32 out_add2uint( cmd, 0 );
33
34 off = fd.blabels.use;
35 curlabel = (pflabel)buf_appendtype( &fd.blabels, sizeof( flabel ));
36
37 curlabel->type = flag;
38 curlabel->offbout = fd.bout->use - sizeof( uint );
39 curlabel->link = link;
40 return off;
41 }
42
43 /*-----------------------------------------------------------------------------
44 *
45 * ID: j_label 07.02.06 0.0.A.
46 *
47 * Summary: Добавление метки в таблицу меток
48 *
49 -----------------------------------------------------------------------------*/
50 uint STDCALL j_label( uint flag, uint link )
51 {
52 uint off; //Смещение на элемент в таблице меток
53 pflabel curlabel; //Текущий элемент в таблице меток
54
55 off = fd.blabels.use;
56 curlabel = (pflabel)buf_appendtype( &fd.blabels, sizeof( flabel ));
57
58 curlabel->type = flag;
59 curlabel->offbout = fd.bout->use;
60 curlabel->link = link;
61 return off;
62 }
63
64 /*-----------------------------------------------------------------------------
65 *
66 * ID: j_correct 07.02.06 0.0.A.
67 *
68 * Summary: Корректировка последовательности переходов
69 *
70 -----------------------------------------------------------------------------*/
71 void STDCALL j_correct( uint curoff, uint link )
72 {
73 pflabel curlabel; // Текущий элемент в таблице меток
74 while ( curoff != -1 )
75 {
76 curlabel = (pflabel)( fd.blabels.data + curoff );
77 curoff = curlabel->link;
78 curlabel->link = link;
79 }
80 }
81