Contents of /tags/mkinitrd-6_1_12/isolinux/parsecmd.inc
Parent Directory | Revision Log
Revision 939 -
(show annotations)
(download)
Tue Nov 17 21:24:51 2009 UTC (14 years, 10 months ago) by niro
File size: 3263 byte(s)
Tue Nov 17 21:24:51 2009 UTC (14 years, 10 months ago) by niro
File size: 3263 byte(s)
tagged 'mkinitrd-6_1_12'
1 | ;; $Id: parsecmd.inc,v 1.1 2007-09-01 22:44:05 niro Exp $ |
2 | ;; ----------------------------------------------------------------------- |
3 | ;; |
4 | ;; Copyright 1994-2002 H. Peter Anvin - All Rights Reserved |
5 | ;; |
6 | ;; This program is free software; you can redistribute it and/or modify |
7 | ;; it under the terms of the GNU General Public License as published by |
8 | ;; the Free Software Foundation, Inc., 53 Temple Place Ste 330, |
9 | ;; Boston MA 02111-1307, USA; either version 2 of the License, or |
10 | ;; (at your option) any later version; incorporated herein by reference. |
11 | ;; |
12 | ;; ----------------------------------------------------------------------- |
13 | |
14 | ;; |
15 | ;; parsecmd.inc |
16 | ;; |
17 | ;; Command line parser code |
18 | ;; |
19 | |
20 | section .text |
21 | |
22 | ; ------------------------------------------------------------------------- |
23 | ; getcommand: Get a keyword from the current "getc" file and match it |
24 | ; against a list of keywords (keywd_table). Each entry in |
25 | ; that table should have the following form: |
26 | ; <32 bit hash value> <16 bit handler offset> |
27 | ; |
28 | ; The handler is called, and upon return this function |
29 | ; returns with CF = 0. On EOF, this function returns |
30 | ; with CF = 1. |
31 | ; ------------------------------------------------------------------------- |
32 | |
33 | getcommand: |
34 | .find: |
35 | call skipspace ; Skip leading whitespace |
36 | jz .eof ; End of file |
37 | jc .find ; End of line: try again |
38 | |
39 | ; Do this explicitly so #foo is treated as a comment |
40 | cmp al,'#' ; Leading hash mark -> comment |
41 | je .skipline |
42 | |
43 | or al,20h ; Convert to lower case |
44 | movzx ebx,al ; Hash for a one-char keyword |
45 | .read_loop: |
46 | push ebx |
47 | call getc |
48 | pop ebx |
49 | jc .eof |
50 | cmp al,' ' ; Whitespace |
51 | jbe .done |
52 | or al,20h |
53 | rol ebx,5 |
54 | xor bl,al |
55 | jmp short .read_loop |
56 | .done: call ungetc |
57 | call skipspace |
58 | jz .eof |
59 | jc .noparm |
60 | call ungetc ; Return nonwhitespace char to buf |
61 | mov si,keywd_table |
62 | mov cx,keywd_count |
63 | .table_search: |
64 | lodsd |
65 | cmp ebx,eax |
66 | je .found_keywd |
67 | lodsd ; Skip entrypoint/argument |
68 | loop .table_search |
69 | |
70 | ; Otherwise unrecognized keyword |
71 | mov si,err_badcfg |
72 | jmp short .error |
73 | |
74 | ; No parameter |
75 | .noparm: |
76 | mov si,err_noparm |
77 | mov al,10 ; Already at EOL |
78 | .error: |
79 | call cwritestr |
80 | jmp short .skipline |
81 | |
82 | .found_keywd: lodsw ; Load argument into ax |
83 | call [si] |
84 | clc |
85 | ret |
86 | |
87 | .eof: stc |
88 | ret |
89 | |
90 | .skipline: cmp al,10 ; Search for LF |
91 | je .find |
92 | call getc |
93 | jc .eof |
94 | jmp short .skipline |
95 | |
96 | section .latebss |
97 | alignb 4 |
98 | vk_size equ (vk_end + 3) & ~3 |
99 | VKernelBuf: resb vk_size ; "Current" vkernel |
100 | AppendBuf resb max_cmd_len+1 ; append= |
101 | Ontimeout resb max_cmd_len+1 ; ontimeout |
102 | Onerror resb max_cmd_len+1 ; onerror |
103 | KbdMap resb 256 ; Keyboard map |
104 | FKeyName resb 10*FILENAME_MAX ; File names for F-key help |
105 | KernelCNameLen resw 1 ; Length of unmangled kernel name |
106 | InitRDCNameLen resw 1 ; Length of unmangled initrd name |
107 | %if IS_SYSLINUX |
108 | KernelName resb FILENAME_MAX+1 ; Mangled name for kernel |
109 | KernelCName resb FILENAME_MAX+2 ; Unmangled kernel name |
110 | InitRDCName resb FILENAME_MAX+2 ; Unmangled initrd name |
111 | %else |
112 | KernelName resb FILENAME_MAX ; Mangled name for kernel |
113 | KernelCName resb FILENAME_MAX ; Unmangled kernel name |
114 | InitRDCName resb FILENAME_MAX ; Unmangled initrd name |
115 | %endif |
116 | MNameBuf resb FILENAME_MAX |
117 | InitRD resb FILENAME_MAX |