Add timeoutcmd command
authorhpa <hpa>
Mon, 24 Nov 2003 01:40:34 +0000 (01:40 +0000)
committerhpa <hpa>
Mon, 24 Nov 2003 01:40:34 +0000 (01:40 +0000)
NEWS
isolinux.asm
keywords
keywords.inc
ldlinux.asm
parseconfig.inc
pxelinux.asm
syslinux.doc
ui.inc

diff --git a/NEWS b/NEWS
index 78d8217..fde4a47 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ Starting with 1.47, changes marked with SYSLINUX/PXELINUX/ISOLINUX
 apply to that specific program only; other changes apply to all of
 them.
 
+Changes in 2.08:
+       * Add "timeoutcmd" to allow timeout to have a different action
+         than just pressing Enter.
+
 Changes in 2.07:
        * MEMDISK: Workaround for BIOSes which go into a snit when
          they get a RESET command for the floppy system when there is
index 4c24bd2..51d9468 100644 (file)
@@ -126,6 +126,7 @@ dir_clust   resd 1                  ; Length in clusters
 VKernelBuf:    resb vk_size            ; "Current" vkernel
                alignb 4
 AppendBuf       resb max_cmd_len+1     ; append=
+TimeOutCmd     resb max_cmd_len+1      ; timeoutcmd
 KbdMap         resb 256                ; Keyboard map
 FKeyName       resb 10*FILENAME_MAX    ; File names for F-key help
 NumBuf         resb 15                 ; Buffer to load number
@@ -1600,6 +1601,7 @@ img_table:
 ; Misc initialized (data) variables
 ;
 AppendLen       dw 0                    ; Bytes in append= command
+TimeOutCmdLen  dw 0                    ; Bytes in timeoutcmd command
 KbdTimeOut      dw 0                    ; Keyboard timeout (if any)
 CmdLinePtr     dw cmd_line_here        ; Command line advancing pointer
 initrd_flag    equ $
@@ -1608,7 +1610,6 @@ VKernelCtr        dw 0                    ; Number of registered vkernels
 ForcePrompt    dw 0                    ; Force prompt
 AllowImplicit   dw 1                    ; Allow implicit kernels
 SerialPort     dw 0                    ; Serial port base (or 0 for no serial port)
-NextSocket     dw 49152                ; Counter for allocating socket numbers
 VGAFontSize    dw 16                   ; Defaults to 16 byte font
 UserFont       db 0                    ; Using a user-specified font
 ScrollAttribute        db 07h                  ; White on black (for text mode)
index f8e8c8e..4a4f71f 100644 (file)
--- a/keywords
+++ b/keywords
@@ -13,6 +13,7 @@ prompt
 say
 serial
 timeout
+timeoutcmd
 f0
 f1
 f2
index b1dacfd..b7c18eb 100644 (file)
@@ -57,6 +57,7 @@ keywd_table:
                keyword say,       pc_say
                keyword serial,    pc_serial
                keyword timeout,   pc_timeout
+               keyword timeoutcmd, pc_timeoutcmd
                keyword f1,        pc_fkey,     FKeyName+(0<<FILENAME_MAX_LG2)
                keyword f2,        pc_fkey,     FKeyName+(1<<FILENAME_MAX_LG2)
                keyword f3,        pc_fkey,     FKeyName+(2<<FILENAME_MAX_LG2)
index 545c132..c8faa60 100644 (file)
@@ -116,6 +116,7 @@ xbs_vgatmpbuf       equ 2*trackbufsize
 VKernelBuf:    resb vk_size            ; "Current" vkernel
                alignb 4
 AppendBuf       resb max_cmd_len+1     ; append=
+TimeOutCmd     resb max_cmd_len+1      ; timeoutcmd
 KbdMap         resb 256                ; Keyboard map
 FKeyName       resb 10*16              ; File names for F-key help
 NumBuf         resb 15                 ; Buffer to load number
@@ -1422,6 +1423,7 @@ exten_table_end:
 debug_magic    dw 0D00Dh               ; Debug code sentinel
 %endif
 AppendLen       dw 0                    ; Bytes in append= command
+TimeOutCmdLen  dw 0                    ; Bytes in timeoutcmd command
 KbdTimeOut      dw 0                    ; Keyboard timeout (if any)
 CmdLinePtr     dw cmd_line_here        ; Command line advancing pointer
 initrd_flag    equ $
index 3235a9c..937d22f 100644 (file)
@@ -27,6 +27,15 @@ pc_default:  mov di,default_cmd
                ret
 
 ;
+; "timeoutcmd" command
+;
+pc_timeoutcmd: mov di,TimeOutCmd
+               call getline
+               sub di,TimeOutCmd
+               mov [TimeOutCmdLen],di
+               ret
+
+;
 ; "append" command
 ;
 pc_append:      cmp word [VKernelCtr],byte 0
index fdc5780..b8aa92d 100644 (file)
@@ -198,6 +198,7 @@ xbs_vgatmpbuf       equ 2*trackbufsize
 VKernelBuf:    resb vk_size            ; "Current" vkernel
                alignb 4
 AppendBuf       resb max_cmd_len+1     ; append=
+TimeOutCmd     resb max_cmd_len+1      ; timeoutcmd
 KbdMap         resb 256                ; Keyboard map
 BootFile       resb 256                ; Boot file from DHCP packet
 PathPrefix     resb 256                ; Path prefix derived from the above
@@ -2460,6 +2461,7 @@ pxe_udp_read_pkt:
 BaseStack      dd StackBuf             ; SS:ESP of base stack
                dw 0
 AppendLen       dw 0                    ; Bytes in append= command
+TimeOutCmdLen  dw 0                    ; Bytes in timeoutcmd command
 KbdTimeOut      dw 0                    ; Keyboard timeout (if any)
 CmdLinePtr     dw cmd_line_here        ; Command line advancing pointer
 initrd_flag    equ $
@@ -2468,10 +2470,14 @@ VKernelCtr      dw 0                    ; Number of registered vkernels
 ForcePrompt    dw 0                    ; Force prompt
 AllowImplicit   dw 1                    ; Allow implicit kernels
 SerialPort     dw 0                    ; Serial port base (or 0 for no serial port)
-NextSocket     dw 49152                ; Counter for allocating socket numbers
 VGAFontSize    dw 16                   ; Defaults to 16 byte font
 UserFont       db 0                    ; Using a user-specified font
 ScrollAttribute        db 07h                  ; White on black (for text mode)
+
+;
+; PXELINUX-specific variables
+; 
+NextSocket     dw 49152                ; Counter for allocating socket numbers
 KeepPXE                db 0                    ; Should PXE be kept around?
 
 ;
index e217812..765924d 100644 (file)
@@ -222,6 +222,12 @@ TIMEOUT timeout
         NOTE: The maximum possible timeout value is 35996; corresponding to
         just below one hour.
 
+TIMEOUTCMD kernel options...
+       Sets the command line invoked on a timeout.  Normally this is
+       the same thing as invoked by "DEFAULT".  If this is specified,
+       then "DEFAULT" is used only if the user presses <Enter> to
+       boot.
+
 SERIAL port [[baudrate] flowcontrol]
        Enables a serial port to act as the console.  "port" is a
        number (0 = /dev/ttyS0 = COM1, etc.) or an I/O port address
diff --git a/ui.inc b/ui.inc
index e3563e7..a43af40 100644 (file)
--- a/ui.inc
+++ b/ui.inc
@@ -60,8 +60,14 @@ tick_loop:   push dx
                je tick_loop
                pop cx
                loop time_loop                  ; If so, decrement counter
+
+               ; Timeout!!!!
                call vgahidecursor
-               jmp command_done                ; Timeout!
+               mov si,TimeOutCmd               ; Copy timeoutcommand if we have one...
+               mov cx,TimeOutCmdLen
+               rep movsb
+.stddefault:
+               jmp command_done
 
 get_char_pop:  pop eax                         ; Clear stack
 get_char: