summaryrefslogtreecommitdiffstats
path: root/contrib/syslinux-4.02/core/cmdline.inc
blob: 3e63f9ab15ca13260157257ca373ee2f883729ce (plain) (blame)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
;; -----------------------------------------------------------------------
;;
;;   Copyright 2003-2009 H. Peter Anvin - All Rights Reserved
;;   Copyright 2009 Intel Corporation; author: H. Peter Anvin
;;
;;   This program is free software; you can redistribute it and/or modify
;;   it under the terms of the GNU General Public License as published by
;;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
;;   Boston MA 02111-1307, USA; either version 2 of the License, or
;;   (at your option) any later version; incorporated herein by reference.
;;
;; -----------------------------------------------------------------------

;;
;; cmdline.inc
;;
;; Common routine to assemble [null-terminated] command line into
;; real_mode_seg:cmd_line_here.
;; Not used by plain kernel due to BOOT_IMAGE= etc.
;;

		section .text16

;
; Assumes DS == CS
;
make_plain_cmdline:
		push es
		; ui.inc has already copied any APPEND options
		mov ax,real_mode_seg
		mov es,ax

		mov di,[CmdLinePtr]
		call do_ip_append

		mov si,[CmdOptPtr]

		call strcpy

		dec di
		mov [CmdLinePtr],di
		mov byte [es:di],0		; Null-terminate

		pop es
		ret

;
; Actual IPAppend strings...
;
%if IS_PXELINUX
		extern IPOption, BOOTIFStr, SYSUUIDStr
		global IPAppends, numIPAppends

		section .data16
		alignz 2
IPAppends	dw IPOption
		dw BOOTIFStr
		dw SYSUUIDStr
numIPAppends	equ ($-IPAppends)/2
%else
IPAppends	equ 0
numIPAppends	equ 0
%endif

;
; Handle "ipappend" strings, if applicable
;
; Assumes DS == CS; pushes output to ES:DI
;
		section .text16

do_ip_append:
%ifndef DEPEND
 %if numIPAppends > 0
		push cx
		push bx
		push si

		mov bx,IPAppends
		mov cx,[IPAppend]
		and cx,(1 << numIPAppends)-1
.loop:
		jcxz .done
		mov si,[bx]
		inc bx
		inc bx
		test cl,1
		jz .not_this

		call strcpy
		mov byte [es:di-1],' '	; Replace final null with space
.not_this:
		shr cx,1
		jmp .loop
.done:
		pop si
		pop bx
		pop cx
 %endif
%endif
		ret