-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathemerg-print.cx
More file actions
executable file
·129 lines (129 loc) · 6.68 KB
/
emerg-print.cx
File metadata and controls
executable file
·129 lines (129 loc) · 6.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//-*-C-*-
/*******************************************************************************
* ___ public
* ¦OUX¦ C+
* ¦/C+¦ OUX/C+ OS
* --- kernel
* emergency print
* ©overcq on ‟Gentoo Linux 17.1” “x86_64” 2021‒5‒16 L
*******************************************************************************/
_private B E_emerg_print_S_active;
_internal N32 E_emerg_print_S_x;
_internal N32 E_emerg_print_S_y;
_internal N32 E_emerg_print_S_color;
_internal N8 E_emerg_print_S_font_size;
_internal N8 E_emerg_print_S_font_thickness;
_internal N8 E_emerg_print_S_x_pre_post, E_emerg_print_S_y_pre_post;
_internal N32 E_emerg_print_S_background_color;
_internal N32 E_emerg_print_S_x_min, E_emerg_print_S_x_max, E_emerg_print_S_y_min;
//==============================================================================
_private
N
E_emerg_print_M( void
){ E_emerg_print_S_active = yes;
E_emerg_print_S_font_size = 1;
E_emerg_print_S_font_thickness = 1;
E_emerg_print_S_x = E_emerg_print_S_font_thickness + 1;
E_emerg_print_S_y = E_emerg_print_S_font_size + 1;
E_emerg_print_S_x_pre_post = ( E_emerg_print_S_font_thickness + 1 + 2 ) / 3;
E_emerg_print_S_y_pre_post = ( E_emerg_print_S_font_size + 1 + 2 ) / 3;
E_emerg_print_S_color = E_vga_S_text_color;
E_emerg_print_S_background_color = 0xffeff0;
E_vga_I_fill_rect( 0, 0, E_main_S_framebuffer.width, E_main_S_framebuffer.height, E_vga_R_video_color( E_vga_S_background_color ));
E_vga_I_fill_rect( E_main_S_framebuffer.width / 2 - 50, E_main_S_framebuffer.height / 2 - 10 - 13, 48, 5, E_vga_R_video_color( 0x2b2b2b ));
E_vga_I_fill_rect( E_main_S_framebuffer.width / 2 - 50, E_main_S_framebuffer.height / 2 - 10, 48, 5, E_vga_R_video_color( 0x2b2b2b ));
E_vga_I_fill_rect( E_main_S_framebuffer.width / 2, E_main_S_framebuffer.height / 2 + 4, 48, 5, E_vga_R_video_color( 0x2b2b2b ));
E_vga_I_fill_rect( E_main_S_framebuffer.width / 2, E_main_S_framebuffer.height / 2 + 4 + 13, 48, 5, E_vga_R_video_color( 0x2b2b2b ));
E_vga_I_fill_rect( E_main_S_framebuffer.width / 2 - 38, E_main_S_framebuffer.height / 2 - 37, 38 + 34, 37 + 36, E_vga_R_video_color( 0x43864f ));
E_vga_I_fill_rect( E_main_S_framebuffer.width / 2 - 50, E_main_S_framebuffer.height / 2 + 4, 48, 5, E_vga_R_video_color( 0x2b2b2b ));
E_vga_I_fill_rect( E_main_S_framebuffer.width / 2 - 50, E_main_S_framebuffer.height / 2 + 4 + 13, 48, 5, E_vga_R_video_color( 0x2b2b2b ));
E_vga_I_fill_rect( E_main_S_framebuffer.width / 2, E_main_S_framebuffer.height / 2 - 10 - 13, 48, 5, E_vga_R_video_color( 0x2b2b2b ));
E_vga_I_fill_rect( E_main_S_framebuffer.width / 2, E_main_S_framebuffer.height / 2 - 10, 48, 5, E_vga_R_video_color( 0x2b2b2b ));
E_vga_Q_buffer_I_draw( 0, 0, E_main_S_framebuffer.width, E_main_S_framebuffer.height );
return E_emerg_print_I_print( "OUX/C+ OS ©overcq <overcq@int.pl> https:/""/github.com/overcq" );
}
_internal
void
E_emerg_print_I_scroll_fwd( N dy
){ E_mem_Q_blk_I_copy( E_vga_S_framebuffer
, E_vga_S_framebuffer + dy * E_main_S_framebuffer.width
, ( E_main_S_framebuffer.height - dy ) * E_main_S_framebuffer.width * sizeof( *E_vga_S_framebuffer )
);
E_vga_I_fill_rect( 0, E_main_S_framebuffer.height - dy, E_main_S_framebuffer.width, dy, E_vga_R_video_color( E_vga_S_background_color ));
E_vga_Q_buffer_I_draw( 0, 0, E_main_S_framebuffer.width, E_main_S_framebuffer.height );
}
_private
void
E_emerg_print_I_print_nl( void
){ E_emerg_print_S_x = E_emerg_print_S_font_thickness + 1;
E_emerg_print_S_x_min = E_emerg_print_S_x - E_emerg_print_S_x_pre_post;
N32 y_next = E_emerg_print_S_y + ( E_emerg_print_S_font_size + 1 ) * E_font_S_font.height + E_emerg_print_S_font_size + 1;
if( y_next > E_main_S_framebuffer.height - (( E_emerg_print_S_font_size + 1 ) * E_font_S_font.height + E_emerg_print_S_font_size + 1 ))
{ E_emerg_print_I_scroll_fwd( y_next - ( E_main_S_framebuffer.height - (( E_emerg_print_S_font_size + 1 ) * E_font_S_font.height + E_emerg_print_S_font_size + 1 )));
E_emerg_print_S_y = E_main_S_framebuffer.height - (( E_emerg_print_S_font_size + 1 ) * E_font_S_font.height + E_emerg_print_S_font_size + 1 );
}else
E_emerg_print_S_y = y_next;
E_vga_I_fill_rect( 0
, E_emerg_print_S_y - E_emerg_print_S_y_pre_post
, E_emerg_print_S_x_pre_post
, E_emerg_print_S_y_pre_post + ( E_emerg_print_S_font_size + 1 ) * E_font_S_font.height + E_emerg_print_S_y_pre_post
, E_vga_R_video_color( E_emerg_print_S_background_color )
);
}
_internal
void
E_emerg_print_I_print_u( U u
){ if( u == '\n' )
{ E_emerg_print_I_print_nl();
return;
}
N32 font_i;
if( !E_font_T_print_u( E_main_S_framebuffer.width - E_emerg_print_S_x, E_emerg_print_S_font_thickness, &u, &font_i ))
E_emerg_print_I_print_nl();
N width = ( E_emerg_print_S_font_thickness + 1 ) * E_font_S_font.bitmap[ font_i ].width;
E_vga_I_fill_rect( E_emerg_print_S_x - E_emerg_print_S_x_pre_post
, E_emerg_print_S_y - E_emerg_print_S_y_pre_post
, E_emerg_print_S_x_pre_post + width + E_emerg_print_S_x_pre_post
, E_emerg_print_S_y_pre_post + ( E_emerg_print_S_font_size + 1 ) * E_font_S_font.height + E_emerg_print_S_y_pre_post
, E_vga_R_video_color( E_emerg_print_S_background_color )
);
E_font_I_draw_u( font_i
, E_emerg_print_S_x, E_emerg_print_S_y
, 0, E_main_S_framebuffer.height
, E_emerg_print_S_color
, E_emerg_print_S_font_size, E_emerg_print_S_font_thickness
);
if( E_emerg_print_S_x_max < E_emerg_print_S_x + width + E_emerg_print_S_x_pre_post )
E_emerg_print_S_x_max = E_emerg_print_S_x + width + E_emerg_print_S_x_pre_post;
E_emerg_print_S_x += width + E_emerg_print_S_font_thickness + 1;
}
_private
N
E_emerg_print_I_print( Pc s
){ E_emerg_print_S_x_min = E_emerg_print_S_x_max = E_emerg_print_S_x - E_emerg_print_S_x_pre_post;
E_emerg_print_S_y_min = E_emerg_print_S_y - E_emerg_print_S_y_pre_post;
while( *s )
{ U u = ~0;
Pc s_ = E_text_Z_su_R_u( s, &u );
if( s_ == s )
return ~0;
s = s_;
if( ~u )
E_emerg_print_I_print_u(u);
}
E_vga_Q_buffer_I_draw( E_emerg_print_S_x_min
, E_emerg_print_S_y_min
, E_emerg_print_S_x_max - E_emerg_print_S_x_min
, E_emerg_print_S_y + ( E_emerg_print_S_font_size + 1 ) * E_font_S_font.height + E_emerg_print_S_y_pre_post - E_emerg_print_S_y_min
);
return 0;
}
_private
void
E_emerg_print_I_set_panic( void
){ E_emerg_print_S_x = E_emerg_print_S_font_thickness + 1;
E_emerg_print_S_y = E_emerg_print_S_font_size + 1;
E_emerg_print_S_background_color = 0x88;
E_emerg_print_S_color = 0xffffff;
}
/******************************************************************************/