mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-26 23:36:32 +00:00
RWF -> RAWF
This commit is contained in:
parent
63fbfcc42b
commit
bc5326f73d
12 changed files with 26 additions and 26 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/Kernel.BIN.C
BIN
src/Kernel.BIN.C
Binary file not shown.
|
@ -9,21 +9,21 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$().
|
||||||
I64 i,row,col;
|
I64 i,row,col;
|
||||||
U8 *ptr,*ptr1,*ptr2;
|
U8 *ptr,*ptr1,*ptr2;
|
||||||
|
|
||||||
if (!(text.raw_flags&RWF_SHOW_DOLLAR)) {
|
if (!(text.raw_flags&RAWF_SHOW_DOLLAR)) {
|
||||||
if (ch=='$$') {
|
if (ch=='$$') {
|
||||||
if (text.raw_flags&RWF_IN_DOLLAR) {
|
if (text.raw_flags&RAWF_IN_DOLLAR) {
|
||||||
text.raw_flags&=~RWF_IN_DOLLAR;
|
text.raw_flags&=~RAWF_IN_DOLLAR;
|
||||||
if (!(text.raw_flags & RWF_LAST_DOLLAR)) {
|
if (!(text.raw_flags & RAWF_LAST_DOLLAR)) {
|
||||||
text.raw_flags&=~RWF_LAST_DOLLAR;
|
text.raw_flags&=~RAWF_LAST_DOLLAR;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
text.raw_flags|=RWF_IN_DOLLAR|RWF_LAST_DOLLAR;
|
text.raw_flags|=RAWF_IN_DOLLAR|RAWF_LAST_DOLLAR;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
text.raw_flags&=~RWF_LAST_DOLLAR;
|
text.raw_flags&=~RAWF_LAST_DOLLAR;
|
||||||
if (text.raw_flags&RWF_IN_DOLLAR)
|
if (text.raw_flags&RAWF_IN_DOLLAR)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ch=='\t') {
|
if (ch=='\t') {
|
||||||
|
@ -43,7 +43,7 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$().
|
||||||
row=text.raw_col/text.cols%text.rows;
|
row=text.raw_col/text.cols%text.rows;
|
||||||
col=text.raw_col%text.cols;
|
col=text.raw_col%text.cols;
|
||||||
if (!Bt(&sys_run_level,RLf_VESA)) { //if text mode
|
if (!Bt(&sys_run_level,RLf_VESA)) { //if text mode
|
||||||
if (text.raw_flags&RWF_SCROLL && text.raw_col && !row && !col) {
|
if (text.raw_flags&RAWF_SCROLL && text.raw_col && !row && !col) {
|
||||||
MemCopy(text.vga_text_alias,text.vga_text_alias+text.cols*2,
|
MemCopy(text.vga_text_alias,text.vga_text_alias+text.cols*2,
|
||||||
text.cols*(text.rows-1)*2);
|
text.cols*(text.rows-1)*2);
|
||||||
MemSet(text.vga_text_alias+text.cols*(text.rows-1)*2,0,text.cols*2);
|
MemSet(text.vga_text_alias+text.cols*(text.rows-1)*2,0,text.cols*2);
|
||||||
|
@ -56,7 +56,7 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$().
|
||||||
} else {
|
} else {
|
||||||
OutU8(VGAP_IDX,VGAR_MAP_MASK);
|
OutU8(VGAP_IDX,VGAR_MAP_MASK);
|
||||||
OutU8(VGAP_DATA,0x0F); //All planes -- WHITE
|
OutU8(VGAP_DATA,0x0F); //All planes -- WHITE
|
||||||
if (text.raw_flags&RWF_SCROLL && text.raw_col && !row && !col) {
|
if (text.raw_flags&RAWF_SCROLL && text.raw_col && !row && !col) {
|
||||||
//Scroll cached image
|
//Scroll cached image
|
||||||
MemCopy(text.raw_screen_image,
|
MemCopy(text.raw_screen_image,
|
||||||
text.raw_screen_image+GR_WIDTH*FONT_HEIGHT>>3,
|
text.raw_screen_image+GR_WIDTH*FONT_HEIGHT>>3,
|
||||||
|
|
|
@ -71,7 +71,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
|
||||||
|
|
||||||
PUSHFD
|
PUSHFD
|
||||||
CLI
|
CLI
|
||||||
text.raw_flags=text.raw_flags&~RWF_SCROLL|RWF_SHOW_DOLLAR;
|
text.raw_flags=text.raw_flags&~RAWF_SCROLL|RAWF_SHOW_DOLLAR;
|
||||||
kbd.scan_code=0;
|
kbd.scan_code=0;
|
||||||
QueueInit(&head);
|
QueueInit(&head);
|
||||||
head.line=StrNew("");
|
head.line=StrNew("");
|
||||||
|
@ -295,7 +295,7 @@ Bool EdLite(U8 *filename,I64 num=1,I64 edf_dof_flags=0)
|
||||||
Raw(old_raw);
|
Raw(old_raw);
|
||||||
DebugMode(old_debug);
|
DebugMode(old_debug);
|
||||||
SingleUser(old_single);
|
SingleUser(old_single);
|
||||||
text.raw_flags=text.raw_flags&~RWF_SHOW_DOLLAR|old_raw_flags&RWF_SHOW_DOLLAR;
|
text.raw_flags=text.raw_flags&~RAWF_SHOW_DOLLAR|old_raw_flags&RAWF_SHOW_DOLLAR;
|
||||||
POPFD
|
POPFD
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -610,7 +610,7 @@ U0 Fault2(I64 fault_num,I64 fault_err_code)
|
||||||
was_mouse_enabled = CallExtStr("MouseEnable", FALSE);
|
was_mouse_enabled = CallExtStr("MouseEnable", FALSE);
|
||||||
was_raw=Raw(ON);
|
was_raw=Raw(ON);
|
||||||
was_silent=Silent(OFF);
|
was_silent=Silent(OFF);
|
||||||
text.raw_flags|=RWF_SHOW_DOLLAR|RWF_SCROLL;
|
text.raw_flags|=RAWF_SHOW_DOLLAR|RAWF_SCROLL;
|
||||||
|
|
||||||
"Task \"";
|
"Task \"";
|
||||||
"%s",Fs->task_title;
|
"%s",Fs->task_title;
|
||||||
|
@ -629,7 +629,7 @@ U0 Fault2(I64 fault_num,I64 fault_err_code)
|
||||||
DebugMode(was_in_debug);
|
DebugMode(was_in_debug);
|
||||||
Silent(was_silent);
|
Silent(was_silent);
|
||||||
Raw(was_raw);
|
Raw(was_raw);
|
||||||
CallExtStr("MouseEnable", was_mouse_enabled);
|
CallExtStr("MouseEnable", was_mouse_enabled);
|
||||||
text.raw_flags=old_raw_flags;
|
text.raw_flags=old_raw_flags;
|
||||||
}
|
}
|
||||||
SingleUser(was_single_user);
|
SingleUser(was_single_user);
|
||||||
|
|
|
@ -180,7 +180,6 @@ $LK,"RT_I64",A="FL:::/Kernel/KernelA.HH,1619"$
|
||||||
$LK,"SEMA_REFRESH_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,663"$
|
$LK,"SEMA_REFRESH_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,663"$
|
||||||
$LK,"KbdMouseReset",A="FL:::/Kernel/SerialDev/Mouse.CC,284",BI=29$
|
$LK,"KbdMouseReset",A="FL:::/Kernel/SerialDev/Mouse.CC,284",BI=29$
|
||||||
$LK,"SUF_SAFE_DOLLAR",A="FL:::/Kernel/KernelA.HH,3854"$
|
$LK,"SUF_SAFE_DOLLAR",A="FL:::/Kernel/KernelA.HH,3854"$
|
||||||
$LK,"RWF_SHOW_DOLLAR",A="FL:::/Kernel/KernelA.HH,3652"$
|
|
||||||
$LK,"HTt_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,706"$
|
$LK,"HTt_INTERNAL_TYPE",A="FL:::/Kernel/KernelA.HH,706"$
|
||||||
$LK,"RedSeaFileWrite",A="FL:::/Kernel/BlkDev/FileSysRedSea.CC,509",BI=30$
|
$LK,"RedSeaFileWrite",A="FL:::/Kernel/BlkDev/FileSysRedSea.CC,509",BI=30$
|
||||||
$LK,"CPatchTableAbsAddr",A="FL:::/Kernel/KernelA.HH,414"$
|
$LK,"CPatchTableAbsAddr",A="FL:::/Kernel/KernelA.HH,414"$
|
||||||
|
@ -308,6 +307,7 @@ $LK,"HomeSet",A="FL:::/Kernel/BlkDev/DiskDirB.CC,1",BI=58$
|
||||||
$LK,"PostMessage",A="FL:::/Kernel/Job.CC,242",BI=59$
|
$LK,"PostMessage",A="FL:::/Kernel/Job.CC,242",BI=59$
|
||||||
$LK,"DrivesRelease",A="FL:::/Kernel/BlkDev/DiskDrive.CC,27",BI=60$
|
$LK,"DrivesRelease",A="FL:::/Kernel/BlkDev/DiskDrive.CC,27",BI=60$
|
||||||
$LK,"D3Mul",A="FL:::/Kernel/KernelB.HH,141"$
|
$LK,"D3Mul",A="FL:::/Kernel/KernelB.HH,141"$
|
||||||
|
$LK,"RAWF_SHOW_DOLLAR",A="FL:::/Kernel/KernelA.HH,3652"$
|
||||||
$LK,"CH_CTRLR",A="FL:::/Kernel/KernelA.HH,3557"$
|
$LK,"CH_CTRLR",A="FL:::/Kernel/KernelA.HH,3557"$
|
||||||
$LK,"SK_NAME",A="FL:::/Kernel/BlkDev/DiskDirA.CC,86"$
|
$LK,"SK_NAME",A="FL:::/Kernel/BlkDev/DiskDirA.CC,86"$
|
||||||
$LK,"CtrlAltC",A="FL:::/Kernel/KeyDev.CC,133",BI=61$
|
$LK,"CtrlAltC",A="FL:::/Kernel/KeyDev.CC,133",BI=61$
|
||||||
|
@ -548,7 +548,6 @@ $LK,"Caller",A="FL:::/Kernel/KDebug.CC,60",BI=115$
|
||||||
$LK,"SUF_S2T",A="FL:::/Kernel/KernelA.HH,3851"$
|
$LK,"SUF_S2T",A="FL:::/Kernel/KernelA.HH,3851"$
|
||||||
$LK,"ATA_DEV_RST",A="FL:::/Kernel/KernelA.HH,2375"$
|
$LK,"ATA_DEV_RST",A="FL:::/Kernel/KernelA.HH,2375"$
|
||||||
$LK,"INT_MP_CRASH_ADDR",A="FL:::/Kernel/KInterrupts.CC,2"$
|
$LK,"INT_MP_CRASH_ADDR",A="FL:::/Kernel/KInterrupts.CC,2"$
|
||||||
$LK,"RWF_LAST_DOLLAR",A="FL:::/Kernel/KernelA.HH,3651"$
|
|
||||||
$LK,"RS_ATTR_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2614"$
|
$LK,"RS_ATTR_CONTIGUOUS",A="FL:::/Kernel/KernelA.HH,2614"$
|
||||||
$LK,"ARGT_NONE",A="FL:::/Kernel/KernelA.HH,1936"$
|
$LK,"ARGT_NONE",A="FL:::/Kernel/KernelA.HH,1936"$
|
||||||
$LK,"DOCT_DATA",A="FL:::/Kernel/KernelA.HH,979"$
|
$LK,"DOCT_DATA",A="FL:::/Kernel/KernelA.HH,979"$
|
||||||
|
@ -663,6 +662,7 @@ $LK,"CVBEMode",A="FL:::/Kernel/KernelA.HH,4024"$
|
||||||
$LK,"BlkDevLockFwdingSet",A="FL:::/Kernel/BlkDev/DiskAddDev.CC,1",BI=128$
|
$LK,"BlkDevLockFwdingSet",A="FL:::/Kernel/BlkDev/DiskAddDev.CC,1",BI=128$
|
||||||
$LK,"InU8",A="FL:::/Kernel/KernelB.HH,62"$
|
$LK,"InU8",A="FL:::/Kernel/KernelB.HH,62"$
|
||||||
$LK,"PRINTF_NEG_AUX_FORMAT_NUM",A="FL:::/Kernel/KernelA.HH,3995"$
|
$LK,"PRINTF_NEG_AUX_FORMAT_NUM",A="FL:::/Kernel/KernelA.HH,3995"$
|
||||||
|
$LK,"RAWF_LAST_DOLLAR",A="FL:::/Kernel/KernelA.HH,3651"$
|
||||||
$LK,"ARGT_SREG",A="FL:::/Kernel/KernelA.HH,1983"$
|
$LK,"ARGT_SREG",A="FL:::/Kernel/KernelA.HH,1983"$
|
||||||
$LK,"_STRNCOMPARE",A="FL:::/Kernel/StrA.CC,154"$
|
$LK,"_STRNCOMPARE",A="FL:::/Kernel/StrA.CC,154"$
|
||||||
$LK,"CMemUnused",A="FL:::/Kernel/KernelA.HH,2897"$
|
$LK,"CMemUnused",A="FL:::/Kernel/KernelA.HH,2897"$
|
||||||
|
@ -768,7 +768,6 @@ $LK,"In",A="FL:::/Kernel/Job.CC,482",BI=148$
|
||||||
$LK,"ACD_DEF_CHAR",A="FL:::/Kernel/KernelA.HH,1574"$
|
$LK,"ACD_DEF_CHAR",A="FL:::/Kernel/KernelA.HH,1574"$
|
||||||
$LK,"Gs",A="FL:::/Kernel/KernelB.HH,227"$
|
$LK,"Gs",A="FL:::/Kernel/KernelB.HH,227"$
|
||||||
$LK,"SYS_PROGRESS3_DESC",A="FL:::/Kernel/KStart32.CC,55"$
|
$LK,"SYS_PROGRESS3_DESC",A="FL:::/Kernel/KStart32.CC,55"$
|
||||||
$LK,"RWF_SCROLL",A="FL:::/Kernel/KernelA.HH,3653"$
|
|
||||||
$LK,"REGG_LOCAL_VARS",A="FL:::/Kernel/KernelA.HH,1851"$
|
$LK,"REGG_LOCAL_VARS",A="FL:::/Kernel/KernelA.HH,1851"$
|
||||||
$LK,"RepInU8",A="FL:::/Kernel/KernelB.HH,71"$
|
$LK,"RepInU8",A="FL:::/Kernel/KernelB.HH,71"$
|
||||||
$LK,"progress3_t0",A="FL:::/Kernel/KernelB.HH,207"$
|
$LK,"progress3_t0",A="FL:::/Kernel/KernelB.HH,207"$
|
||||||
|
@ -2209,6 +2208,7 @@ $LK,"SYS_RUN_LEVEL",A="FL:::/Kernel/KStart16.CC,26"$
|
||||||
$LK,"SCF_SCROLL",A="FL:::/Kernel/KernelA.HH,3599"$
|
$LK,"SCF_SCROLL",A="FL:::/Kernel/KernelA.HH,3599"$
|
||||||
$LK,"SCf_SCROLL",A="FL:::/Kernel/KernelA.HH,3584"$
|
$LK,"SCf_SCROLL",A="FL:::/Kernel/KernelA.HH,3584"$
|
||||||
$LK,"ClusAlloc",A="FL:::/Kernel/BlkDev/DiskClus.CC,128",BI=474$
|
$LK,"ClusAlloc",A="FL:::/Kernel/BlkDev/DiskClus.CC,128",BI=474$
|
||||||
|
$LK,"RAWF_SCROLL",A="FL:::/Kernel/KernelA.HH,3653"$
|
||||||
$LK,"BDf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2721"$
|
$LK,"BDf_INIT_IN_PROGRESS",A="FL:::/Kernel/KernelA.HH,2721"$
|
||||||
$LK,"TK_SUB_EQU",A="FL:::/Kernel/KernelA.HH,2156"$
|
$LK,"TK_SUB_EQU",A="FL:::/Kernel/KernelA.HH,2156"$
|
||||||
$LK,"TK_DIV_EQU",A="FL:::/Kernel/KernelA.HH,2151"$
|
$LK,"TK_DIV_EQU",A="FL:::/Kernel/KernelA.HH,2151"$
|
||||||
|
@ -2672,7 +2672,6 @@ $LK,"IOAPICVER",A="FL:::/Kernel/KernelA.HH,582"$
|
||||||
$LK,"LAPIC_LVT_TIMER",A="FL:::/Kernel/KernelA.HH,567"$
|
$LK,"LAPIC_LVT_TIMER",A="FL:::/Kernel/KernelA.HH,567"$
|
||||||
$LK,"FAT32FreeClus",A="FL:::/Kernel/BlkDev/FileSysFAT.CC,399",BI=558$
|
$LK,"FAT32FreeClus",A="FL:::/Kernel/BlkDev/FileSysFAT.CC,399",BI=558$
|
||||||
$LK,"sys_mem_init_flag",A="FL:::/Kernel/KernelB.HH,165"$
|
$LK,"sys_mem_init_flag",A="FL:::/Kernel/KernelB.HH,165"$
|
||||||
$LK,"RWF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,3650"$
|
|
||||||
$LK,"DISPLAYf_CHILDREN_NOT_ON_TOP",A="FL:::/Kernel/KernelA.HH,3366"$
|
$LK,"DISPLAYf_CHILDREN_NOT_ON_TOP",A="FL:::/Kernel/KernelA.HH,3366"$
|
||||||
$LK,"sys_var_init_flag",A="FL:::/Kernel/KernelB.HH,168"$
|
$LK,"sys_var_init_flag",A="FL:::/Kernel/KernelB.HH,168"$
|
||||||
$LK,"IOAPIC_DATA",A="FL:::/Kernel/KernelA.HH,579"$
|
$LK,"IOAPIC_DATA",A="FL:::/Kernel/KernelA.HH,579"$
|
||||||
|
@ -2694,6 +2693,7 @@ $LK,"DOCF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,1347"$
|
||||||
$LK,"TaskStackNew",A="FL:::/Kernel/KTask.CC,100",BI=566$
|
$LK,"TaskStackNew",A="FL:::/Kernel/KTask.CC,100",BI=566$
|
||||||
$LK,"_REP_IN_U16",A="FL:::/Kernel/KUtils.CC,310"$
|
$LK,"_REP_IN_U16",A="FL:::/Kernel/KUtils.CC,310"$
|
||||||
$LK,"_REP_IN_U32",A="FL:::/Kernel/KUtils.CC,298"$
|
$LK,"_REP_IN_U32",A="FL:::/Kernel/KUtils.CC,298"$
|
||||||
|
$LK,"RAWF_IN_DOLLAR",A="FL:::/Kernel/KernelA.HH,3650"$
|
||||||
$LK,"MP_VECT_ADDR",A="FL:::/Kernel/KernelA.HH,575"$
|
$LK,"MP_VECT_ADDR",A="FL:::/Kernel/KernelA.HH,575"$
|
||||||
$LK,"CR0f_TS",A="FL:::/Kernel/KernelA.HH,519"$
|
$LK,"CR0f_TS",A="FL:::/Kernel/KernelA.HH,519"$
|
||||||
$LK,"I_WAKE",A="FL:::/Kernel/KernelA.HH,327"$
|
$LK,"I_WAKE",A="FL:::/Kernel/KernelA.HH,327"$
|
||||||
|
|
|
@ -3647,10 +3647,10 @@ public class CSysFixedArea
|
||||||
|
|
||||||
#help_index "Char;Debugging/Raw Output;TextBase Layer/Char"
|
#help_index "Char;Debugging/Raw Output;TextBase Layer/Char"
|
||||||
//text.raw_flags
|
//text.raw_flags
|
||||||
#define RWF_IN_DOLLAR 1
|
#define RAWF_IN_DOLLAR 1
|
||||||
#define RWF_LAST_DOLLAR 2
|
#define RAWF_LAST_DOLLAR 2
|
||||||
#define RWF_SHOW_DOLLAR 4
|
#define RAWF_SHOW_DOLLAR 4
|
||||||
#define RWF_SCROLL 8
|
#define RAWF_SCROLL 8
|
||||||
|
|
||||||
public class CTextGlobals
|
public class CTextGlobals
|
||||||
{
|
{
|
||||||
|
|
|
@ -360,7 +360,7 @@ U0 Core0Init()
|
||||||
IMPORT SET_GS_BASE;
|
IMPORT SET_GS_BASE;
|
||||||
CALL SET_GS_BASE
|
CALL SET_GS_BASE
|
||||||
|
|
||||||
MPAPICInit;
|
MPAPICInit;
|
||||||
}
|
}
|
||||||
|
|
||||||
interrupt U0 IntMPCrash()
|
interrupt U0 IntMPCrash()
|
||||||
|
@ -369,7 +369,7 @@ interrupt U0 IntMPCrash()
|
||||||
*(dev.uncached_alias+LAPIC_EOI)(U32 *)=0;
|
*(dev.uncached_alias+LAPIC_EOI)(U32 *)=0;
|
||||||
mp_count=1;
|
mp_count=1;
|
||||||
Raw(ON);
|
Raw(ON);
|
||||||
text.raw_flags|=RWF_SHOW_DOLLAR;
|
text.raw_flags|=RAWF_SHOW_DOLLAR;
|
||||||
"MP Crash CPU%02X Task:%08X\n"
|
"MP Crash CPU%02X Task:%08X\n"
|
||||||
"RIP:%P\n",debug.mp_crash->cpu_num,debug.mp_crash->task,debug.mp_crash->rip;
|
"RIP:%P\n",debug.mp_crash->cpu_num,debug.mp_crash->task,debug.mp_crash->rip;
|
||||||
Panic(debug.mp_crash->message,debug.mp_crash->message_num);
|
Panic(debug.mp_crash->message,debug.mp_crash->message_num);
|
||||||
|
|
|
@ -9,7 +9,7 @@ U8 *Tabs2Spaces(U8 *src)
|
||||||
dst[i]=CH_SPACE;
|
dst[i]=CH_SPACE;
|
||||||
if (i>=l-2) {
|
if (i>=l-2) {
|
||||||
tmp=MAlloc(l<<1);
|
tmp=MAlloc(l<<1);
|
||||||
MemCopy(tmp,dst,i+1);
|
MemCopy(tmp,dst,i+1);
|
||||||
Free(dst);
|
Free(dst);
|
||||||
l<<=1;
|
l<<=1;
|
||||||
dst=tmp;
|
dst=tmp;
|
||||||
|
@ -76,7 +76,7 @@ U0 GetOutOfDollar()
|
||||||
{//If a $$ has been printed, print another $$ to exit mode.
|
{//If a $$ has been printed, print another $$ to exit mode.
|
||||||
CDoc *doc;
|
CDoc *doc;
|
||||||
if (IsRaw) {
|
if (IsRaw) {
|
||||||
if (text.raw_flags&RWF_IN_DOLLAR)
|
if (text.raw_flags&RAWF_IN_DOLLAR)
|
||||||
'$$';
|
'$$';
|
||||||
} else {
|
} else {
|
||||||
if (fp_doc_put && (doc=(*fp_doc_put)(Fs)) && doc->flags&DOCF_IN_DOLLAR)
|
if (fp_doc_put && (doc=(*fp_doc_put)(Fs)) && doc->flags&DOCF_IN_DOLLAR)
|
||||||
|
|
Binary file not shown.
Loading…
Reference in a new issue