📄 context.c
字号:
/* Copyright (c) 2005 Russ Cox, MIT; see COPYRIGHT */#include "taskimpl.h"#if defined(__APPLE__)voidmakecontext(ucontext_t *ucp, void (*func)(void), int argc, ...){ ulong *sp, *tos; va_list arg; tos = (ulong*)ucp->uc_stack.ss_sp+ucp->uc_stack.ss_size/sizeof(ulong); sp = tos - 16; ucp->mc.pc = (long)func; ucp->mc.sp = (long)sp; va_start(arg, argc); ucp->mc.r3 = va_arg(arg, long); va_end(arg);}intgetcontext(ucontext_t *uc){ return _getmcontext(&uc->mc);}intsetcontext(ucontext_t *uc){ _setmcontext(&uc->mc); return 0;}intswapcontext(ucontext_t *oucp, ucontext_t *ucp){ if(getcontext(oucp) == 0) setcontext(ucp); return 0;}#endif#if defined(__FreeBSD__) && __FreeBSD_version < 500000/* * FreeBSD 4 and earlier needs the context functions. */voidmakecontext(ucontext_t *ucp, void (*func)(void), int argc, ...){ int *sp; sp = (int*)ucp->uc_stack.ss_sp+ucp->uc_stack.ss_size/4; sp -= argc; memmove(sp, &argc+1, argc*sizeof(int)); *--sp = 0; /* return address */ ucp->uc_mcontext.mc_eip = (long)func; ucp->uc_mcontext.mc_esp = (int)sp;}extern int getmcontext(mcontext_t*);extern int setmcontext(mcontext_t*);intgetcontext(ucontext_t *uc){ return getmcontext(&uc->uc_mcontext);}voidsetcontext(ucontext_t *uc){ setmcontext(&uc->uc_mcontext);}intswapcontext(ucontext_t *oucp, ucontext_t *ucp){ if(getcontext(oucp) == 0) setcontext(ucp); return 0;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -