-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathLSI LINKER.c
More file actions
61 lines (53 loc) · 1.86 KB
/
LSI LINKER.c
File metadata and controls
61 lines (53 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*------------------------------------------------*
* *
* Редактор связей для LSI-11 *
* *
*------------------------------------------------*/
/*
* Данная программа упрощена по сравнению с ld:
* Сегменты данных сливаются в сегмент кода и, таким образом,
* невозможно сформировать загрузочные модули длинее 64K или
* модули с разделяемым кодом (что на LSI-11 несущественно).
*/
#include "LinkerDefs"
#ifdef R_11
# pragma STARTER(NULL);
#endif
#ifdef i_86
# pragma STARTER(), EXIT();
#endif
main()
{
InitDiag();
ClrSym(); ClrES(); /* Обнуляем таблицы */
ModIni(); /* Подготавливаем библиотечный поиск */
Pass1();
Pass2();
ErrTerm(); /* Выход с диагностикой, если надо */
}
void Pass1()
{
char *mn; /* Имя модуля */
Module *m; /* Описатель модуля */
char *cfn; /* Имя выходного файла */
cfn = CFopen(); /* Начинаем чтение упр. файла */
OutIni( cfn ); /* Открываем выходной файл */
Pict( cfn ); /* Выдаем картинку на дисплей */
Tinit(); /* Сброс счетчиков в Tcopy */
while( (mn = CFget()) != NULL ){ /*Читаем упр. файл, пока не EOF*/
if( (m = ModOpen( mn )) != NULL ){ /*Ищем и открываем модуль*/
Tcopy( m ); /* Копируем тело, заносим m->Moutbase */
SymGet( m ); /* Читаем символьную информациюю */
ModClose(); /* Освобождаем метку файла */
}
}
}
void Pass2()
{
Module *m;
while( (m = ModNext()) != NULL ){ /* Открываем очередной модуль */
Reloc( m ); /* ... и перемещаем его */
ModClose();
}
OutClose(); /* Возможно, переименовываем вых. файл */
}