(SOLVED) How CTRL+C disable in DOS

DOS specific questions.
Post Reply
VANYA
Posts: 1834
Joined: Oct 24, 2010 15:16
Location: Ярославль
Contact:

(SOLVED) How CTRL+C disable in DOS

Post by VANYA »

Hi all!

I am using freedos 1.3

Tried using functions dpmi (2 example , doing the same thing):

Code: Select all

#include "dos/pc.bi"
#include "dos/dos.bi"
#include "dos/dpmi.bi"
#include "dos/go32.bi"

dim shared as _go32_dpmi_seginfo old_vector , new_vector

sub handler cdecl( r as _go32_dpmi_registers ptr)
	
	? "ctrl+c"
	
	__dpmi_simulate_real_mode_procedure_iret(r)
	
End Sub

sub set_handler()
	
	dim as _go32_dpmi_registers regs
	
	_go32_dpmi_get_real_mode_interrupt_vector(&h23, @old_vector)
	
	new_vector.pm_offset = cint(@handler)
	
	_go32_dpmi_allocate_real_mode_callback_iret(@new_vector, @regs)
	_go32_dpmi_set_real_mode_interrupt_vector(&h23, @new_vector)
	
End Sub

sub unset_handler()
	
	_go32_dpmi_set_real_mode_interrupt_vector(&h23, @old_vector)
	_go32_dpmi_free_real_mode_callback(@new_vector)
	
End Sub

set_handler()

do
	
	if inkey = chr(27) then exit do
	
	? Time
	
Loop

unset_handler()

Code: Select all

#include "dos/pc.bi"
#include "dos/dos.bi"
#include "dos/dpmi.bi"
#include "dos/go32.bi"

dim shared as _go32_dpmi_seginfo old_vector , new_vector

sub handler()
	
	asm
		
		iret
		
	End Asm
	
End Sub

sub set_handler()
	
	_go32_dpmi_get_protected_mode_interrupt_vector(&h23, @old_vector)
	
	new_vector.pm_offset = cint(@handler)
	new_vector.pm_selector = _go32_my_cs()
	
	_go32_dpmi_allocate_iret_wrapper(@new_vector)
	_go32_dpmi_set_protected_mode_interrupt_vector(&h23, @new_vector)
	
End Sub

sub unset_handler()
	
	_go32_dpmi_set_protected_mode_interrupt_vector(&h23, @old_vector)
	_go32_dpmi_free_iret_wrapper(@new_vector)
	
End Sub

set_handler()

do
	
	if inkey = chr(27) then exit do
	
	? Time
	
Loop

unset_handler()
The handler is set, I see that DOS passes control to my handler, but after processing my handler, the program terminates.
I don't know what to do anymore. Tell me, who is well versed in DOS, how to make it so that when you press CTRL + C, the program does not end, but only notifies you of a keystroke. At the moment, my program notifies and ends.
Last edited by VANYA on May 29, 2022 4:09, edited 1 time in total.
VANYA
Posts: 1834
Joined: Oct 24, 2010 15:16
Location: Ярославль
Contact:

Re: How CTRL+C disable in DOS

Post by VANYA »

I found a simple solution for this problem.

use function __djgpp_set_ctrl_c
caseih
Posts: 2157
Joined: Feb 26, 2007 5:32

Re: (SOLVED) How CTRL+C disable in DOS

Post by caseih »

I wondered if something in the djgpp standard C library would do the job. Glad you found it.
Post Reply