LOCALS

.MODEL	TINY


PUBLIC	OutSystemInfo12


INCLUDE	GRAPHHI.INC

SymbolWidth             EQU    	8       ;ширина матрицы символа
SymbolHight             EQU    	16      ;высота матрицы символа

Window_Header_FGd       EQU	COLOR_DARKGRAY	;цвет заголовка окна
Window_Header_BkGd      EQU     COLOR_BTNFACE
Window_Header_Color	EQU	Window_Header_BkGd SHL 8 + Window_Header_FGd

Window_Headers_FGd      EQU     COLOR_BLUE	;цвет подзаголовков окна

Window_Item_FGd1        EQU     COLOR_BLACK	;цвет элементов окна
Window_Item_FGd2	EQU	COLOR_BLACK

InstalledStr_FGd        EQU    	COLOR_BLACK	;цвет сообщения "установлен"
NotInstalledStr_FGd     EQU    	COLOR_DARKGRAY	;цвет сообщения "не установлен"
NotInstalledStr_BkGd    EQU    	COLOR_BTNFACE
NotInstalledStr_Color	EQU	NotInstalledStr_BkGd SHL 8 + NotInstalledStr_FGd

Window_step_y           EQU     20	;расстояния между элементами окон


;
;Окно информации о компьютере
;
Window1_x1              EQU     41	;координаты окна
Window1_y1              EQU     50
Window1_x2              EQU     598
Window1_y2              EQU     185

Window1_Header_x	EQU	283	;координаты заголовка окна
Window1_Header_y	EQU	43

Window1_step_x		EQU	128

Window1_Item1_x		EQU	(Window1_x1+15)	;координаты 1-го элемента окна
Window1_Item1_y		EQU	(Window1_y1+10)


;
;Окно информации о памяти
;
Window2_x1              EQU     41	;координаты окна
Window2_y1              EQU     201
Window2_x2              EQU     367
Window2_y2              EQU     296

Window2_Header_x	EQU	180	;координаты заголовка окна
Window2_Header_y	EQU	194

Window2_Header12_FGd	EQU	COLOR_BLUE	;цвет 1-го и 2-го подзаголовков окна
Window2_Header1_x	EQU	212	        ;координаты 1-го подзаголовка окна
Window2_Header2_x	EQU	281	        ;координаты 2-го подзаголовка окна
Window2_Header12_y	EQU	(Window2_y1+10)

Window2_Item1_x		EQU	(Window2_x1+15)	;координаты 1-го элемента окна
Window2_Item1_y		EQU	(Window2_y1+10+Window_step_y)


;
;Окно информации о дисках
;
Window3_x1              EQU     383	;координаты окна
Window3_y1              EQU     201
Window3_x2              EQU     598
Window3_y2              EQU     296

Window3_Header_x	EQU	471	;координаты заголовка окна
Window3_Header_y	EQU	194

Window3_Header12_FGd	EQU	COLOR_BLUE	;цвет 1-го и 2-го подзаголовков окна
Window3_Header1_x	EQU	410	;координаты 1-го подзаголовка
Window3_Header2_x	EQU	512	;координаты 2-го подзаголовка
Window3_Header12_y	EQU	(Window3_y1+20)


;
;Окно информации о разном
;
Window4_x1              EQU     41	;координаты окна
Window4_y1              EQU     312
Window4_x2              EQU     598
Window4_y2              EQU     447

Window4_Header_x	EQU	295	;координаты заголовка окна
Window4_Header_y	EQU	305

Window4_step_x		EQU	128

Window4_Item1_x		EQU	(Window4_x1+15)	;координаты 1-го элемента окна
Window4_Item1_y		EQU	(Window4_y1+10)

Ports_Headers_FGd	EQU	COLOR_BLUE	;цвет подзаголовков пункта "Порты"


.DATA

EXTRN	pszComputerType:WORD
EXTRN	pszBIOSName:WORD
EXTRN	szBIOSDate:BYTE
EXTRN	szCPU:BYTE
EXTRN	bMathCo:BYTE
EXTRN	pszMathCo:WORD
EXTRN	pszVideoAdapterType:WORD
EXTRN	szVideoMemSize:BYTE
EXTRN	bVESA_flag:BYTE
EXTRN	szVESAOEMString:BYTE
EXTRN	szMainMemSize:BYTE
EXTRN	szFreeMainMemSize:BYTE
EXTRN	szExtMemSize:BYTE
EXTRN	szFreeExtMemSize:BYTE
EXTRN	szExpMemSize:BYTE
EXTRN	szFreeExpMemSize:BYTE
EXTRN	bFDD1Type:BYTE
EXTRN	bFDD2Type:BYTE
EXTRN	pszFDD1Type:WORD
EXTRN	pszFDD2Type:WORD
EXTRN	bHDD0_flag:BYTE
EXTRN	bHDD1_flag:BYTE
EXTRN	szHDD0Size:BYTE
EXTRN	szHDD1Size:BYTE
EXTRN	bLPTPorts:BYTE
EXTRN	bCOMPorts:BYTE
EXTRN	bGamePort:BYTE
EXTRN	wCDROMCount:WORD
EXTRN	CDROMLetters:BYTE
EXTRN	szMSCDEXVer:BYTE
EXTRN	szCDROMNotInstalled:BYTE
EXTRN	bSC_flag:BYTE
EXTRN	pszSCType:WORD
EXTRN	pszKbdType:WORD
EXTRN	bMouse_flag:BYTE
EXTRN	pszMouseType:WORD
EXTRN	szMouseDrvrVer:BYTE
EXTRN	szOS:BYTE

Window1_Header          DB      "Компьютер",0
ComputerType_Header     DB      "Тип компьютера:",0
BIOSName_Header         DB      "BIOS:",0
BIOSDate_Header         DB      "Дата BIOS:",0
CPUHeader		DB      "Процессор:",0
MathCoHeader		DB      "Сопроцессор:",0
VideoAdapter_Header     DB      "Видеоадаптер:",0
VideoMemSize_Header     DB      "Видео-ОЗУ:",0

Window2_Header          DB      "Память",0
Window2_Header1         DB      "Всего",0
Window2_Header2         DB      "Свободно",0
MainMemory_Header       DB      "Основная   [кб]:",0
ExtMemory_Header        DB      "Память XMS [кб]:",0
ExpMemory_Header        DB      "Память EMS [кб]:",0

Window3_Header		DB	"Диски",0
FDD_Header              DB      "Дисководы",0
HDD_Header              DB      "Жесткие",0

Window4_Header          DB      "Разное",0
Ports_Header		DB	"Порты:",0
LPTPorts_Header         DB      "LPT:",0
COMPorts_Header         DB      "COM:",0
GamePort_Header         DB      "Game:",0
CDDrives_Header		DB	"CD-ROM:",0
MSCDEXVer_Header	DB	"Версия MSCDEX:",0
SoundCard_Header	DB      "Звуковая карта:",0
Kbd_Header              DB      "Клавиатура:",0
Mouse_Header            DB      "Мышь:",0
MouseDrvVer_Header      DB      "Версия драйвера:",0
OS_Header		DB      "ОС:",0


.CODE

EXTRN	StrLen:PROC
EXTRN	Line12:PROC
EXTRN	Rectangle3D:PROC
EXTRN	WriteChar12x:PROC
EXTRN	WriteStr12x:PROC
EXTRN	OutText3D:PROC

OutSystemInfo12	PROC
;
;Процедура:	выводит на экран основную информацию о системе в режиме VGA 12h
;
;Использует:	Rectangle3D, WriteStr12x, WriteChar12x, Line12, StrLen,
;		OutText3D
;
;Вызов:		нет
;
;Возврат:	нет
;
;Изменяемые
;  регистры:	AX,BX,CX,DX,Flags
;
                push    si      ;сохраняем регистры в стеке
                push    di

;----------------------------------------------------------------------------
;Окно с информацией о КОМПЬЮТЕРЕ
;----------------------------------------------------------------------------

;строим окно

		mov	ax,Window1_y2
		push	ax
		mov	ax,Window1_x2
		push	ax
		mov	ax,Window1_y1
		push	ax
		mov	ax,Window1_x1
		push	ax
		call	Rectangle3D

;выводим заголовок окна

                mov     cx,Window1_Header_x
                mov     dx,Window1_Header_y
                mov     bx,Window_Header_Color
                mov     si,OFFSET Window1_Header
                call    OutText3D

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Тип компьютера
;----------------------------------------------------------------------------

;выводим заголовок

		mov	cx,Window1_Item1_x
		mov	dx,Window1_Item1_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET ComputerType_Header
		call	WriteStr12x


;выводим тип компьютера

		mov	cx,Window1_Item1_x+Window1_step_x
		mov	bl,Window_Item_FGd1
		mov	si,[pszComputerType]
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Идентификатор BIOS
;----------------------------------------------------------------------------

;выводим заголовок

		mov	cx,Window1_Item1_x
		mov	dx,Window1_Item1_y+Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET BIOSName_Header
		call	WriteStr12x

;выводим идентификатор BIOS

		mov	cx,Window1_Item1_x+Window1_step_x
		mov	bl,Window_Item_FGd1
		mov	si,[pszBIOSName]
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Дата BIOS
;----------------------------------------------------------------------------

;выводим заголовок

		mov	cx,Window1_Item1_x+Window1_step_x+208
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET BIOSDate_Header
		call	WriteStr12x

;выводим на экран строку с датой BIOS

		mov	cx,Window1_Item1_x+Window1_step_x+208+88
		mov	bl,Window_Item_FGd2
		mov	si,OFFSET szBIOSDate
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Тип процессора
;----------------------------------------------------------------------------

;выводим на экран заголовок

		mov	cx,Window1_Item1_x
		mov	dx,Window1_Item1_y+2*Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET CPUHeader
		call	WriteStr12x

;выводим на экран тип процессора

		mov	cx,Window1_Item1_x+Window1_step_x
		mov	bl,Window_Item_FGd1
		mov	si,OFFSET szCPU
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Тип сопроцессора
;----------------------------------------------------------------------------

;выводим на экран заголовок

		mov	cx,Window1_Item1_x
		mov	dx,Window1_Item1_y+3*Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET MathCoHeader
		call	WriteStr12x

;выводим на экран тип сопроцессора

		mov	cx,Window1_Item1_x+Window1_step_x
		mov	si,[pszMathCo]

		cmp	[bMathCo],0
		jne	@@MathCoType

		mov	bx,NotInstalledStr_Color
		call	OutText3D
		jmp	@@MathCo_End

@@MathCoType:	mov	bl,Window_Item_FGd1
		call	WriteStr12x

@@MathCo_End:

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Видеоадаптер
;----------------------------------------------------------------------------

;выводим на экран заголовок

		mov	cx,Window1_Item1_x
		mov	dx,Window1_Item1_y+4*Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET VideoAdapter_Header
		call	WriteStr12x

;выводим тип видеоадаптера

		mov	cx,Window1_Item1_x+Window1_step_x
		mov	bl,Window_Item_FGd1
		mov	si,[pszVideoAdapterType]
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Объем видеопамяти
;----------------------------------------------------------------------------

;выводим на экран заголовок

		mov	cx,Window1_Item1_x+Window1_step_x+208
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET VideoMemSize_Header
		call	WriteStr12x

;выводим объем видеопамяти

		mov	cx,Window1_Item1_x+Window1_step_x+208+88
		mov	bl,Window_Item_FGd2
		mov	si,OFFSET szVideoMemSize
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Информация фирмы-производителя
;----------------------------------------------------------------------------

		cmp	[bVESA_flag],0
		je	@@NoVESA

;выводим информацию фирмы-производителя

		mov	cx,Window1_Item1_x+Window1_step_x
		mov	dx,Window1_Item1_y+5*Window_step_y
		mov	bl,Window_Item_FGd1
		mov	si,OFFSET szVESAOEMString
		call	WriteStr12x

@@NoVESA:

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Окно с информацией о ПАМЯТИ
;----------------------------------------------------------------------------

;строим окно

		mov	ax,Window2_y2
		push	ax
		mov	ax,Window2_x2
		push	ax
		mov	ax,Window2_y1
		push	ax
		mov	ax,Window2_x1
		push	ax
		call	Rectangle3D

;выводим заголовок окна

		mov	cx,Window2_Header_x
		mov	dx,Window2_Header_y
		mov	bx,Window_Header_Color
		mov	si,OFFSET Window2_Header
                call    OutText3D

;выводим 1-ый и 2-ой подзаголовки окна

		mov	cx,Window2_Header1_x
		mov	dx,Window2_Header12_y
		mov	bl,Window2_Header12_FGd
		mov	si,OFFSET Window2_Header1
		call	WriteStr12x

		mov	cx,Window2_Header2_x
		mov	si,OFFSET Window2_Header2
		call	WriteStr12x

;строим таблицу

		mov	al,Window2_Header12_FGd
		push	ax
		mov	ax,Window2_Header12_y+SymbolHight
		push	ax
		mov	ax,Window2_Header2_x+9*SymbolWidth-1
		push	ax
		mov	ax,Window2_Header12_y+SymbolHight
		push	ax
		mov	ax,Window2_Header1_x-5*SymbolWidth/2
		push	ax
		call	Line12

		mov	al,Window2_Header12_FGd
		push	ax
		mov	ax,Window2_Header12_y+3*Window_step_y+SymbolHight-1
		push	ax
		mov	ax,Window2_Header1_x+15*SymbolWidth/2
		push	ax
		mov	ax,Window2_Header12_y
		push	ax
		mov	ax,Window2_Header1_x+15*SymbolWidth/2
		push	ax
		call	Line12

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Основная память
;----------------------------------------------------------------------------

;выводим на экран заголовок

		mov	cx,Window2_Item1_x
		mov	dx,Window2_Item1_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET MainMemory_Header
		call	WriteStr12x

;выводим размер основной памяти

		mov	si,OFFSET szMainMemSize
		call	StrLen		;CX = длина строки с размером основной
					;памяти
		mov	al,SymbolWidth
		mul	cl		;AX = длина строки в пикселах

		mov	cx,Window2_Header1_x+48
		sub	cx,ax
		mov	bl,Window_Item_FGd2
		call	WriteStr12x

;выводим размер свободной основной памяти

		mov	si,OFFSET szFreeMainMemSize
		call	StrLen		;CX = длина строки с размером свободной
					;основной памяти
		mov	al,SymbolWidth
		mul	cl		;AX = длина строки в пикселах

		mov	cx,Window2_Header2_x+60
		sub	cx,ax
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Память XMS
;----------------------------------------------------------------------------

;выводим на экран заголовок

		mov	cx,Window2_Item1_x
		mov	dx,Window2_Item1_y+Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET ExtMemory_Header
		call	WriteStr12x

;выводим размер всей памяти XMS

		mov	si,OFFSET szExtMemSize
		call	StrLen		;CX = длина строки с размером памяти XMS
		mov	al,SymbolWidth
		mul	cl		;AX = длина строки в пикселах

		mov	cx,Window2_Header1_x+48
		sub	cx,ax
		mov	bl,Window_Item_FGd2
		call	WriteStr12x

;выводим размер свободной памяти XMS

		mov	si,OFFSET szFreeExtMemSize
		call	StrLen		;CX = длина строки с размером
					;свободной памяти XMS
		mov	al,SymbolWidth
		mul	cl		;AX = длина строки в пикселах

		mov	cx,Window2_Header2_x+60
		sub	cx,ax
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Память EMS
;----------------------------------------------------------------------------

;выводим на экран заголовок

		mov	cx,Window2_Item1_x
		mov	dx,Window2_Item1_y+2*Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET ExpMemory_Header
		call	WriteStr12x

;выводим размер всей памяти EMS

		mov	si,OFFSET szExpMemSize
		call	StrLen		;CX = длина строки с размером памяти EMS
		mov	al,SymbolWidth
		mul	cl		;AX = длина строки в пикселах

		mov	cx,Window2_Header1_x+48
		sub	cx,ax
		mov	bl,Window_Item_FGd2
		call	WriteStr12x

;выводим размер свободной памяти EMS

		mov	si,OFFSET szFreeExpMemSize
		call	StrLen		;CX = длина строки с размером
					;свободной памяти EMS
		mov	al,SymbolWidth
		mul	cl		;AX = длина строки в пикселах

		mov	cx,Window2_Header2_x+60
		sub	cx,ax
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Окно с информацией о ДИСКАХ
;----------------------------------------------------------------------------

;строим окно

		mov	ax,Window3_y2
		push	ax
		mov	ax,Window3_x2
		push	ax
		mov	ax,Window3_y1
		push	ax
		mov	ax,Window3_x1
		push	ax
		call	Rectangle3D

;выводим заголовок окна

		mov	cx,Window3_Header_x
		mov	dx,Window3_Header_y
		mov     bx,Window_Header_Color
		mov	si,OFFSET Window3_Header
                call    OutText3D

;выводим 1-ый и 2-ой подзаголовки окна

		mov	cx,Window3_Header1_x
		mov	dx,Window3_Header12_y
		mov	bl,Window3_Header12_FGd
		mov	si,OFFSET FDD_Header
		call	WriteStr12x

		mov	cx,Window3_Header2_x
		mov	si,OFFSET HDD_Header
		call	WriteStr12x

;строим таблицу

		mov	al,Window3_Header12_FGd
		push	ax
		mov	ax,Window3_Header12_y+SymbolHight
		push	ax
		mov	ax,Window3_Header2_x+56+2*SymbolWidth-1
		push	ax
		mov	ax,Window3_Header12_y+SymbolHight
		push	ax
		mov	ax,Window3_Header1_x-3*SymbolWidth/2
		push	ax
		call	Line12

		mov	al,Window3_Header12_FGd
		push	ax
		mov	ax,Window3_Header12_y+2*Window_step_y+SymbolHight-1
		push	ax
		mov	ax,Window3_Header1_x+21*SymbolWidth/2
		push	ax
		mov	ax,Window3_Header12_y
		push	ax
		mov	ax,Window3_Header1_x+21*SymbolWidth/2
		push	ax
		call	Line12

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Дисководы
;----------------------------------------------------------------------------

;выводим типы дисководов флоппи дисков

		mov	bl,Window_Item_FGd1
		mov	dx,Window3_Header12_y+Window_step_y

		cmp	[bFDD1Type],0
		je	@@FDD2

		mov	cx,Window3_Header1_x-SymbolWidth/2
		mov	si,[pszFDD1Type]
		call	WriteStr12x

		add	dx,Window_step_y

@@FDD2:		cmp	[bFDD2Type],0
		je	@@FDD_end

		mov	cx,Window3_Header1_x-SymbolWidth/2
		mov	si,[pszFDD2Type]
		call	WriteStr12x

@@FDD_end:

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Жесткие диски
;----------------------------------------------------------------------------

;выводим размеры жестких дисков

		mov	bl,Window_Item_FGd1
		mov	dx,Window3_Header12_y+Window_step_y

		cmp	[bHDD0_flag],0
		je	@@HDD1

		mov	si,OFFSET szHDD0Size
		call	StrLen		;CX = длина строки
		mov	al,SymbolWidth
		mul	cl		;AX = длина строки в пикселах

		mov	cx,Window3_Header2_x+56
		sub	cx,ax
		call	WriteStr12x

		add	dx,Window_step_y

@@HDD1:		cmp	[bHDD1_flag],0
		je	@@HDD_end

		mov	si,OFFSET szHDD1Size
		call	StrLen		;CX = длина строки
		mov	al,SymbolWidth
		mul	cl		;AX = длина строки в пикселах

		mov	cx,Window3_Header2_x+56
		sub	cx,ax
		call	WriteStr12x

@@HDD_end:

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Окно с информацией о РАЗНОМ
;----------------------------------------------------------------------------

;строим окно

		mov	ax,Window4_y2
		push	ax
		mov	ax,Window4_x2
		push	ax
		mov	ax,Window4_y1
		push	ax
		mov	ax,Window4_x1
		push	ax
		call	Rectangle3D

;выводим заголовок окна

		mov	cx,Window4_Header_x
		mov	dx,Window4_Header_y
		mov	bx,Window_Header_Color
		mov	si,OFFSET Window4_Header
                call    OutText3D

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Порты
;----------------------------------------------------------------------------

;выводим заголовок

		mov	cx,Window4_Item1_x
		mov	dx,Window4_Item1_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET Ports_Header
		call	WriteStr12x

;Параллельные порты LPT
;
;выводим заголовок

		mov	cx,Window4_Item1_x+Window4_step_x
		mov	dx,Window4_Item1_y
		mov	bl,Ports_Headers_FGd
		mov	si,OFFSET LPTPorts_Header
		call	WriteStr12x

;выводим количество параллельных портов LPT

		mov	al,[bLPTPorts]
		mov	cx,Window4_Item1_x+Window4_step_x+40
		mov	bl,Window_Item_FGd2
		call	WriteChar12x

;Последовательные порты COM
;
;выводим заголовок

		mov	cx,Window4_Item1_x+Window4_step_x+72
		mov	dx,Window4_Item1_y
		mov	bl,Ports_Headers_FGd
		mov	si,OFFSET COMPorts_Header
		call	WriteStr12x

;выводим количество последовательных портов COM

		mov	al,[bCOMPorts]
		mov	cx,Window4_Item1_x+Window4_step_x+72+40
		mov	bl,Window_Item_FGd2
		call	WriteChar12x

;Игровой порт
;
;выводим заголовок

		mov	cx,Window4_Item1_x+Window4_step_x+2*72
		mov	dx,Window4_Item1_y
		mov	bl,Ports_Headers_FGd
		mov	si,OFFSET GamePort_Header
		call	WriteStr12x

;выводим количество игровых портов

		mov	al,[bGamePort]
		mov	cx,Window4_Item1_x+Window4_step_x+2*72+48
		mov	bl,Window_Item_FGd2
		call	WriteChar12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Устройства CD-ROM
;----------------------------------------------------------------------------

;выводим заголовок

		mov	cx,Window4_Item1_x
		mov	dx,Window4_Item1_y+Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET CDDrives_Header
		call	WriteStr12x

		mov	cx,Window4_Item1_x+Window4_step_x

		cmp	[wCDROMCount],0
		jne	CD_Installed

		mov	bx,NotInstalledStr_Color
		mov	si,OFFSET szCDROMNotInstalled
		call	OutText3D
		jmp	CD_end

CD_Installed:

;Буквенные названия устройств CD-ROM

		mov	bl,Window_Item_FGd1
		mov	di,cx

		mov	si,OFFSET CDROMLetters
		mov	cx,[wCDROMCount]	;CX = количество устройств CD-ROM
		cld

@@CDLetterLoop:	push	cx

		lodsb
		add	al,'A'
		mov	cx,di
		mov	dx,Window4_Item1_y+Window_step_y
		call	WriteChar12x

		mov	al,':'
		lea	cx,[di+SymbolWidth]
		mov	dx,Window4_Item1_y+Window_step_y
		call	WriteChar12x

		add	di,3*SymbolWidth

		pop	cx
		loop	@@CDLetterLoop

;Версия драйвера MSCDEX.EXE
;
;выводим заголовок

		mov	cx,Window4_Item1_x+Window4_step_x+208
		mov	dx,Window4_Item1_y+Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET MSCDEXVer_Header
		call	WriteStr12x

;выводим версию драйвера MSCDEX.EXE

		mov	cx,Window4_Item1_x+Window4_step_x+208+120
		mov	bl,Window_Item_FGd2
		mov	si,OFFSET szMSCDEXVer
		call	WriteStr12x

CD_end:

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Звуковая карта
;----------------------------------------------------------------------------

;выводим заголовок

		mov	cx,Window4_Item1_x
		mov	dx,Window4_Item1_y+2*Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET SoundCard_Header
		call	WriteStr12x

;выводим тип звуковой карты

		mov	cx,Window4_Item1_x+Window4_step_x
		mov	si,[pszSCType]

		cmp	[bSC_flag],0
		jne	@@WriteSCType

		mov	bx,NotInstalledStr_Color
		call	OutText3D
		jmp	@@SC_End

@@WriteSCType:	mov	bl,Window_Item_FGd1
		call	WriteStr12x

@@SC_End:

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Клавиатура
;----------------------------------------------------------------------------

;выводим заголовок

		mov	cx,Window4_Item1_x
		mov	dx,Window4_Item1_y+3*Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET Kbd_Header
		call	WriteStr12x

;выводим тип клавиатуры

		mov	cx,Window4_Item1_x+Window4_step_x
		mov	bl,Window_Item_FGd1
		mov	si,[pszKbdType]
		call	WriteStr12x

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Мышь
;----------------------------------------------------------------------------

;выводим заголовок

		mov	cx,Window4_Item1_x
		mov	dx,Window4_Item1_y+4*Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET Mouse_Header
		call	WriteStr12x

;выводим тип мыши

		mov	cx,Window4_Item1_x+Window4_step_x
		mov	si,[pszMouseType]

		cmp	[bMouse_flag],0
		jne	Mouse_Installed

		mov	bx,NotInstalledStr_Color
		call	OutText3D
		jmp	Mouse_end

Mouse_Installed:
		mov	bl,Window_Item_FGd1
		call	WriteStr12x

;Выводим версию драйвера мыши
;
;выводим заголовок

		mov	cx,Window4_Item1_x+Window4_step_x+208
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET MouseDrvVer_Header
		call	WriteStr12x

;выводим версию драйвера мыши

		mov	cx,Window4_Item1_x+Window4_step_x+208+136
		mov	bl,Window_Item_FGd2
		mov	si,OFFSET szMouseDrvrVer
		call	WriteStr12x

Mouse_end:

;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
;Операционная система
;----------------------------------------------------------------------------

;выводим заголовок

		mov	cx,Window4_Item1_x
		mov	dx,Window4_Item1_y+5*Window_step_y
		mov	bl,Window_Headers_FGd
		mov	si,OFFSET OS_Header
		call	WriteStr12x

;выводим тип ОС

		mov	cx,Window4_Item1_x+Window4_step_x
		mov	bl,Window_Item_FGd1
		mov	si,OFFSET szOS
		call	WriteStr12x

;----------------------------------------------------------------------------


		pop	di	;восстанавливаем регистры
		pop	si

		ret

OutSystemInfo12	ENDP


END
