static void interrupt newinterrupt(void) { (*oldinterrupt)(); DISABLE(); if (inside) { static UINT tempstack [STK_SIZE]; #ifdef __WATCOMC__ stackset (&tempstack[STK_SIZE-1]); #else static UINT old_SP; static WORD old_SS; asm mov ax,ss asm mov old_SS,ax asm mov ax,sp asm mov old_SP,ax asm mov ax,ds asm mov ss,ax asm lea sp,tempstack[STK_SIZE-1] #endif ENABLE(); if (userRoutine) (*userRoutine)(); tcp_tick (NULL); DISABLE(); #ifdef __WATCOMC__ stackrestore(); #else asm mov ax,old_SS asm mov ss,ax asm mov ax,old_SP asm mov sp,ax #endif inside = 0; } ENABLE(); }
void Stack_mode(struct stack *s){ int data; while(1){ printf("1->setdata\n2->initialize \n3->output\n4->back\nWhich?: "); scanf("%d", &data); if(data == 1){ stackset(s); }else if(data == 2){ free(s -> data); initialize_s(s); }else if(data == 3){ stackout(s); }else if(data == 4){ free(s -> data); selectmode(); }else{ printf("error.\n"); } } }