sys_console.c
上传用户:qddsws
上传日期:2022-06-22
资源大小:723k
文件大小:3k
源码类别:

操作系统开发

开发平台:

C/C++

  1. #include <devices/sys_console.h>
  2. struct Text_Console Sys_Console_Text;
  3. struct Text_Console* test_ret_print() {
  4. return &Sys_Console_Text;
  5. }
  6. void system_console_command(unsigned long cmd, void* param) ;
  7. void sys_console_configure_text(struct Screen_Mode* scr);
  8. //void sys_console_print_text (struct Text_Console* scr,char* string) 
  9. void __init_device init_system_console (struct device* dev) {
  10. kprint ("Registered System Device: ");
  11. kprint (dev->name);
  12. kprint (" n");
  13. dev->command=(void*)&system_console_command;
  14. /* Poso a 0,0 les coordenades de la consola */
  15. Sys_Console_Text.Act_Column=0;
  16. Sys_Console_Text.Act_Row=30;
  17. }
  18. void system_console_command(unsigned long cmd, void* param) {
  19. struct Screen_Mode* reg_scr;
  20. switch (cmd) {
  21. case SYS_CONSOLE_REGISTER_VIDEO_DEVICE:
  22. /* Param ha de ser struct device */
  23. kprint ("SYS-Console Video Device Registered: ");
  24. Sys_Console_Text.Video_Device=(struct device*)param;
  25. kprint (Sys_Console_Text.Video_Device->name);
  26. reg_scr=(struct Screen_Mode*)kmalloc(sizeof(struct Screen_Mode));
  27. Sys_Console_Text.Video_Device->command(GET_SCREEN_MODE,reg_scr);
  28. kprint (" Configured as FB: n");
  29. char text[50];
  30. snprintf(text,"x: %dpx, y: %dpx, bpp:%dn",reg_scr->XRes,reg_scr->YRes,reg_scr->BitsPerPixel);
  31. kprint (text);
  32. sys_console_configure_text(reg_scr);
  33. kprint ("CACA");
  34. // act_print(2);
  35. break;
  36. }
  37. }
  38. void sys_console_print_text (struct Text_Console* scr,char* string) {
  39. struct xy_str out;
  40. //char *str=string;
  41. char* str=(char *)kmalloc(sizeof(char)*255);
  42. strcpy(str,string);
  43. int i=0;
  44. while (str[i]!='' && i < scr->columns-scr->Act_Column) {
  45. switch (str[i]) {
  46.                 case 'n':
  47. str[i]='';
  48. out.X=scr->Act_Column*Sys_Console_Text.Font_Width;
  49. out.Y=scr->Act_Row*Sys_Console_Text.Font_Height;
  50. out.str=str;
  51. scr->Video_Device->command(XY_PRINT_STR,&out);
  52. scr->Act_Column=0;
  53. scr->Act_Row++;
  54. str=str+i+1 ;
  55. i=-1;
  56. break;
  57. }
  58. i++;
  59. }
  60. out.X=scr->Act_Column*Sys_Console_Text.Font_Width;
  61. out.Y=scr->Act_Row*Sys_Console_Text.Font_Height;
  62. out.str=str;
  63. scr->Video_Device->command(XY_PRINT_STR,&out);
  64. scr->Act_Column+=i;
  65. }
  66. void sys_console_configure_text(struct Screen_Mode* scr) {
  67. //Sys_Console_Text.Font_Width=scr->XCharSize;
  68. //Sys_Console_Text.Font_Height=scr->YCharSize;
  69. Sys_Console_Text.Font_Width=SYS_C_FONT_WIDTH;
  70. Sys_Console_Text.Font_Height=SYS_C_FONT_HEIGHT;
  71. Sys_Console_Text.rows=scr->YRes/Sys_Console_Text.Font_Height;
  72. Sys_Console_Text.columns=scr->XRes/Sys_Console_Text.Font_Width;
  73. /* Espai per el buffer de text de la consola */
  74. Sys_Console_Text.Text_buffer=(char*)kmalloc(sizeof(char)*Sys_Console_Text.rows*Sys_Console_Text.columns);
  75. /* DEBUG INFO */
  76. kprint ("SYS_CONSOLE (Text Console) ");
  77. char text[50];
  78. snprintf(text,"XCharSize: %dpx, YCharSize: %dpx, Rows:%d, Cols:%dn",
  79. Sys_Console_Text.Font_Width,Sys_Console_Text.Font_Height,Sys_Console_Text.rows,Sys_Console_Text.columns);
  80. kprint (text);
  81. }