2
2
Copyright (c) 1993-2008, Cognitive Technologies
5
����������� ��������� ��������������� � ������������� ��� � ���� ��������� ����,
6
��� � � �������� �����, � ����������� ��� ���, ��� ���������� ��������� �������:
8
* ��� ��������� ��������������� ��������� ���� ������ ���������� ���������
9
���� ����������� �� ��������� �����, ���� ������ ������� � �����������
11
* ��� ��������� ��������������� ��������� ���� � ������������ �/��� �
12
������ ����������, ������������ ��� ���������������, ������ �����������
13
��������� ���� ���������� �� ��������� �����, ���� ������ ������� �
14
����������� ����� �� ��������.
15
* �� �������� Cognitive Technologies, �� ����� �� ����������� �� �����
16
���� ������������ � �������� �������� ��������� �/��� �����������
17
���������, ���������� �� ���� ��, ��� ���������������� �����������
20
��� ��������� ������������� ����������� ��������� ���� �/��� ������� ������ "���
21
��� ����" ��� ������-���� ���� ��������, ���������� ���� ��� ���������������,
22
������� �������� ������������ �������� � ����������� ��� ���������� ����, �� ��
23
������������� ���. �� �������� ��������� ���� � �� ���� ������ ����, �������
24
����� �������� �/��� �������� �������������� ���������, �� � ���� ������ ��
25
��Ѩ� ���������������, ������� ����� �����, ���������, ����������� ���
26
������������� ������, ��������� � �������������� ��� ���������� ����������
27
������������� ������������� ��������� (������� ������ ������, ��� ������,
28
������� ���������, ��� ������ �/��� ������ �������, ���������� ��-�� ��������
29
������� ��� �/��� ������ ��������� �������� ��������� � ������� �����������,
30
�� �� ������������� ����� ��������), �� �� ������������� ���, ���� ���� �����
31
�������� ��� ������ ���� ���� �������� � ����������� ����� ������� � ������.
5
Разрешается повторное распространение и использование как в виде исходного кода,
6
так и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
8
* При повторном распространении исходного кода должны оставаться указанное
9
выше уведомление об авторском праве, этот список условий и последующий
11
* При повторном распространении двоичного кода в документации и/или в
12
других материалах, поставляемых при распространении, должны сохраняться
13
указанная выше информация об авторском праве, этот список условий и
14
последующий отказ от гарантий.
15
* Ни название Cognitive Technologies, ни имена ее сотрудников не могут
16
быть использованы в качестве средства поддержки и/или продвижения
17
продуктов, основанных на этом ПО, без предварительного письменного
20
ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИМИ ЛИЦАМИ "КАК
21
ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,
22
ВКЛЮЧАЯ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, НО НЕ
23
ОГРАНИЧИВАЯСЬ ИМИ. НИ ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
24
МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, НИ В КОЕМ СЛУЧАЕ НЕ
25
НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ
26
ПОСЛЕДОВАВШИЕ УБЫТКИ, СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ИЛИ ПОНЕСЕННЫЕ ВСЛЕДСТВИЕ
27
НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ ПОТЕРИ ДАННЫХ, ИЛИ ДАННЫЕ,
28
СТАВШИЕ НЕГОДНЫМИ, ИЛИ УБЫТКИ И/ИЛИ ПОТЕРИ ДОХОДОВ, ПОНЕСЕННЫЕ ИЗ-ЗА ДЕЙСТВИЙ
29
ТРЕТЬИХ ЛИЦ И/ИЛИ ОТКАЗА ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ,
30
НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМИ СЛУЧАЯМИ), НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ДАЖЕ ЕСЛИ ТАКОЙ
31
ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ И ПОТЕРЬ.
33
33
Redistribution and use in source and binary forms, with or without modification,
34
34
are permitted provided that the following conditions are met:
90
90
/**********************************************************************/
91
91
/******** L o k a l f u n c t i o n s p r o t o t y p e s ********/
92
92
/**********************************************************************/
93
static INT mvbuf(WORD l);
94
static INT set_descr(CHAR c);
95
static INT do_fragm(void);
96
static void move_from_near_to_huge(CHAR *a, CHAR *b, INT l);
97
static INT create_segm(struct segm *prev_adr,WORD segm_size,WORD type);
100
static INT prev_letter(void);
93
static int16_t mvbuf(uint16_t l);
94
static int16_t set_descr(char c);
95
static int16_t do_fragm(void);
96
static void move_from_near_to_huge(char *a, char *b, int16_t l);
97
static int16_t create_segm(struct segm *prev_adr,uint16_t segm_size,uint16_t type);
98
static int16_t n_l(void);
99
static int16_t p_l(void);
100
static int16_t prev_letter(void);
102
102
/***********************************************************************/
333
333
} /* end of fill_fragm */
335
335
/************************************************************************/
336
INT set_descr(CHAR c)
336
int16_t set_descr(char c)
338
338
This procedure sets up sheet_descr or head of line.
339
339
c=SHEET means sheet_descriptor; c=LINE means line_descriptor.
343
343
struct segm *segm_ptr;
344
/* CHAR * return_str_ptr;*/
344
/* char * return_str_ptr;*/
345
345
check_free_mem();
348
348
SPQ.sheet_disk_descr_ptr=(struct sheet_disk_descr *)SPQ.buff_ptr;
350
if ((DWORD)(SPQ.buff_ptr - (BYTE*)SPQ.text_buff) > (DWORD)(SPQ.buff_l - sizeof(struct sheet_disk_descr)))
350
if ((uint32_t)(SPQ.buff_ptr - (uchar*)SPQ.text_buff) > (uint32_t)(SPQ.buff_l - sizeof(struct sheet_disk_descr)))
353
353
SPQ.qt_fm=SPQ.sheet_disk_descr_ptr->quant_fragm;
354
354
if(SPQ.qt_fm >= MAX_FRAGM ) return TOO_MANY_FRAGMS;
356
if (SPQ.buff_ptr-(BYTE*)SPQ.text_buff >=
356
if (SPQ.buff_ptr-(uchar*)SPQ.text_buff >=
357
357
SPQ.buff_l-SPQ.sheet_disk_descr_ptr->descr_lth)
358
358
/* not enough room in buffer for all fragm descr */
415
415
check_free_mem();
417
if ( (DWORD)(SPQ.buff_ptr - (BYTE*)SPQ.text_buff) > (DWORD)(SPQ.buff_l - sizeof(struct fragm_disk)) )
417
if ( (uint32_t)(SPQ.buff_ptr - (uchar*)SPQ.text_buff) > (uint32_t)(SPQ.buff_l - sizeof(struct fragm_disk)) )
419
419
SPQ.fragm_disk_ptr=(struct fragm_disk *)SPQ.buff_ptr;
420
420
SPQ.cur_fragm=SPQ.fragm_disk_ptr->fragm_numb;
421
421
SPQ.ptr_next_segm=(struct segm *)SPQ.free_alloc_mem;
422
422
SPQ.str_ptr=SPQ.ptr_next_segm->string;
423
423
SPQ.st.cur_segm->next_in_fragm=SPQ.ptr_next_segm;
424
SPQ.free_alloc_mem=(CHAR *)(SPQ.ptr_next_segm+1);
424
SPQ.free_alloc_mem=(char *)(SPQ.ptr_next_segm+1);
425
425
SPQ.ptr_next_segm->prev_in_fragm=
426
426
SPQ.tab_ptr->tab_fragm[SPQ.cur_sheet][SPQ.cur_fragm].last_segm;
427
427
if ((SPQ.sheet_flag[SPQ.cur_sheet] == EXIST) &&
529
529
SPQ.skip_line_x=0;
531
531
/*****************************************************/
532
void move_from_near_to_huge(CHAR *a, CHAR *b, INT l)
532
void move_from_near_to_huge(char *a, char *b, int16_t l)
534
534
while (l--) *a++=*b++;
536
void move_from_cur_to_new(struct segm *cur_segm, CHAR *cur_symb)
536
void move_from_cur_to_new(struct segm *cur_segm, char *cur_symb)
538
538
This procedure relocates string from current segm to new,
539
539
as well as changes busy and string lengths & SPQ.free_alloc_mem
540
540
if it's necessary.
547
547
s_new=&SPQ.new_segm->string[SPQ.new_segm->busy_lth];
548
548
s_old=&cur_segm->string[cur_segm->busy_lth];
669
669
(LT *)next_symb(YES,YES,YES,cur_segm,cur_symb)) != NULL))
671
671
l=define_lth(cur_symb);
672
shift(LEFT,(INT)(l-sizeof(LT)),cur_segm,cur_symb+l);
672
shift(LEFT,(int16_t)(l-sizeof(LT)),cur_segm,cur_symb+l);
673
673
new_symb1=(LT *)cur_symb;
678
if ((DWORD)(cur_segm->busy_lth + sizeof(LT)) > (DWORD)(cur_segm->string_lth))
678
if ((uint32_t)(cur_segm->busy_lth + sizeof(LT)) > (uint32_t)(cur_segm->string_lth))
679
679
{ /* segment is full */
681
681
create_segm(cur_segm,SIZE_NEW_SEGM,2);
682
682
SPQ.ns_segm=SPQ.new_segm;
683
SPQ.ns_symb=(CHAR *)(SPQ.ns_segm->string);
683
SPQ.ns_symb=(char *)(SPQ.ns_segm->string);