Rev 1012 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1012 | Rev 1143 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | #include "kosSyst.h" |
1 | #include "kosSyst.h" |
2 | #include |
2 | #include |
Line -... | Line 3... | ||
- | 3 | ||
3 | 4 | char stack[16384]; |
|
Line -... | Line 5... | ||
- | 5 | char kosExePath[257]; |
|
- | 6 | ||
- | 7 | struct __MENUET_header_t |
|
- | 8 | { |
|
- | 9 | char signature[8]; |
|
- | 10 | unsigned version; |
|
- | 11 | void* entry; |
|
- | 12 | unsigned init_size; |
|
- | 13 | unsigned memsize; |
|
- | 14 | void* stackptr; |
|
- | 15 | void* command_line_ptr; |
|
- | 16 | void* app_path_ptr; |
|
- | 17 | }; |
|
- | 18 | __MENUET_header_t __MENUET_header = |
|
- | 19 | { |
|
- | 20 | {'M','E','N','U','E','T','0','1'}, |
|
- | 21 | 1, |
|
- | 22 | &crtStartUp, |
|
- | 23 | -1, |
|
- | 24 | -1, |
|
- | 25 | stack + sizeof(stack), |
|
- | 26 | NULL, |
|
- | 27 | &kosExePath |
|
- | 28 | }; |
|
- | 29 | ||
- | 30 | #if 0 |
|
Line 4... | Line 31... | ||
4 | #define atexitBufferSize 32 |
31 | #define atexitBufferSize 32 |
Line 5... | Line 32... | ||
5 | 32 | #endif |
|
Line -... | Line 33... | ||
- | 33 | ||
6 | 34 | char pureCallMessage[] = "PURE function call!"; |
|
7 | char pureCallMessage[] = "PURE function call!"; |
35 | |
8 | 36 | //char *kosExePath = NULL; |
|
9 | char *kosExePath = NULL; |
37 | |
10 | 38 | #if 0 |
|
Line 24... | Line 52... | ||
24 | else |
52 | else |
25 | { |
53 | { |
26 | return 1; |
54 | return 1; |
27 | } |
55 | } |
28 | } |
56 | } |
29 | 57 | #endif |
|
Line 30... | Line 58... | ||
30 | 58 | ||
31 | // |
59 | // |
32 | Dword RandomSeed = 1; |
60 | Dword RandomSeed = 1; |
33 | // |
61 | // |
Line 339... | Line 367... | ||
339 | Str[j] = 0; |
367 | Str[j] = 0; |
340 | } |
368 | } |
Line 341... | Line 369... | ||
341 | 369 | ||
342 | 370 | ||
343 | // ôóíêöèÿ -1 çàâåðøåíèÿ ïðîöåññà |
371 | // ôóíêöèÿ -1 çàâåðøåíèÿ ïðîöåññà |
- | 372 | void __declspec(noreturn) kos_ExitApp() |
|
344 | void kos_ExitApp() |
373 | { |
Line 345... | Line 374... | ||
345 | { |
374 | #if 0 |
346 | int i; |
375 | int i; |
347 | 376 | ||
348 | // |
377 | // |
349 | for ( i = atExitFnNum - 1; i >= 0; i-- ) |
378 | for ( i = atExitFnNum - 1; i >= 0; i-- ) |
350 | { |
379 | { |
351 | // |
380 | // |
- | 381 | atExitList[i](); |
|
352 | atExitList[i](); |
382 | } |
353 | } |
383 | // |
354 | // |
384 | #endif |
355 | __asm{ |
385 | __asm{ |
356 | mov eax, -1 |
386 | mov eax, -1 |
Line 431... | Line 461... | ||
431 | keyCode = result >> 8; |
461 | keyCode = result >> 8; |
432 | // |
462 | // |
433 | return ( result & 0xFF ) == 0; |
463 | return ( result & 0xFF ) == 0; |
434 | } |
464 | } |
Line 435... | Line -... | ||
435 | - | ||
436 | 465 | ||
437 | // ôóíêöèÿ 3 ïîëó÷èòü âðåìÿ |
466 | // ôóíêöèÿ 3 ïîëó÷èòü âðåìÿ |
438 | Dword kos_GetSystemClock() |
467 | Dword __cdecl kos_GetSystemClock() |
439 | { |
468 | { |
Line 440... | Line 469... | ||
440 | // Dword result; |
469 | // Dword result; |
441 | 470 | ||
Line 447... | Line 476... | ||
447 | } |
476 | } |
448 | // |
477 | // |
449 | // return result; |
478 | // return result; |
450 | } |
479 | } |
Line 451... | Line 480... | ||
451 | 480 | ||
452 | 481 | #if 0 |
|
453 | // ôóíêöèÿ 4 |
482 | // ôóíêöèÿ 4 |
454 | void kos_WriteTextToWindow( |
483 | void kos_WriteTextToWindow( |
455 | Word x, |
484 | Word x, |
456 | Word y, |
485 | Word y, |
Line 473... | Line 502... | ||
473 | mov edx, textPtr |
502 | mov edx, textPtr |
474 | mov esi, textLen |
503 | mov esi, textLen |
475 | int 0x40 |
504 | int 0x40 |
476 | } |
505 | } |
477 | } |
506 | } |
- | 507 | #else |
|
- | 508 | // ôóíêöèÿ 4 |
|
- | 509 | void kos_WriteTextToWindow_internal( |
|
- | 510 | Dword pos, |
|
- | 511 | Dword font, |
|
- | 512 | const char *textPtr, |
|
- | 513 | Dword textLen |
|
- | 514 | ) |
|
- | 515 | { |
|
- | 516 | __asm{ |
|
- | 517 | mov eax, 4 |
|
- | 518 | mov ebx, pos |
|
- | 519 | mov ecx, font |
|
- | 520 | mov edx, textPtr |
|
- | 521 | mov esi, textLen |
|
- | 522 | int 0x40 |
|
- | 523 | } |
|
- | 524 | } |
|
- | 525 | #endif |
|
Line 478... | Line 526... | ||
478 | 526 | ||
479 | 527 | ||
480 | // ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû |
528 | // ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû |
481 | void kos_Pause( Dword value ) |
529 | void __cdecl kos_Pause( Dword value ) |
482 | { |
530 | { |
483 | // |
531 | // |
484 | __asm{ |
532 | __asm{ |
Line 546... | Line 594... | ||
546 | // return result; |
594 | // return result; |
547 | } |
595 | } |
Line 548... | Line 596... | ||
548 | 596 | ||
549 | 597 | ||
550 | // ôóíêöèÿ 10 |
598 | // ôóíêöèÿ 10 |
551 | Dword kos_WaitForEvent() |
599 | Dword __cdecl kos_WaitForEvent() |
Line 552... | Line 600... | ||
552 | { |
600 | { |
553 | // Dword result; |
601 | // Dword result; |
Line 576... | Line 624... | ||
576 | // return result; |
624 | // return result; |
577 | } |
625 | } |
Line 578... | Line 626... | ||
578 | 626 | ||
579 | 627 | ||
580 | // ôóíêöèÿ 12 |
628 | // ôóíêöèÿ 12 |
581 | void kos_WindowRedrawStatus( Dword status ) |
629 | void __cdecl kos_WindowRedrawStatus( Dword status ) |
582 | { |
630 | { |
583 | __asm{ |
631 | __asm{ |
584 | mov eax, 12 |
632 | mov eax, 12 |
Line 604... | Line 652... | ||
604 | mov edx, colour |
652 | mov edx, colour |
605 | int 0x40 |
653 | int 0x40 |
606 | } |
654 | } |
607 | } |
655 | } |
Line 608... | Line -... | ||
608 | - | ||
609 | 656 | ||
610 | // ôóíêöèÿ 17 |
657 | // ôóíêöèÿ 17 |
611 | bool kos_GetButtonID( Dword &buttonID ) |
658 | bool kos_GetButtonID( Dword &buttonID ) |
612 | { |
659 | { |
Line 624... | Line 671... | ||
624 | return (result & 0xFF) == 0; |
671 | return (result & 0xFF) == 0; |
625 | } |
672 | } |
Line 626... | Line 673... | ||
626 | 673 | ||
627 | 674 | ||
628 | // ôóíêöèÿ 23 |
675 | // ôóíêöèÿ 23 |
629 | Dword kos_WaitForEvent( Dword timeOut ) |
676 | Dword __cdecl kos_WaitForEvent( Dword timeOut ) |
Line 630... | Line 677... | ||
630 | { |
677 | { |
631 | // Dword result; |
678 | // Dword result; |
Line 722... | Line 769... | ||
722 | } |
769 | } |
723 | } |
770 | } |
Line 724... | Line 771... | ||
724 | 771 | ||
725 | 772 | ||
726 | // ôóíêöèÿ 70 äîñòóï ê ôàéëîâîé ñèñòåìå |
773 | // ôóíêöèÿ 70 äîñòóï ê ôàéëîâîé ñèñòåìå |
727 | Dword kos_FileSystemAccess( kosFileInfo *fileInfo ) |
774 | Dword __fastcall kos_FileSystemAccess( kosFileInfo *fileInfo ) |
Line 728... | Line 775... | ||
728 | { |
775 | { |
729 | // Dword result; |
776 | // Dword result; |
730 | 777 | ||
731 | // |
778 | // |
732 | __asm{ |
779 | __asm{ |
733 | mov eax, 70 |
780 | mov eax, 70 |
734 | mov ebx, fileInfo |
781 | mov ebx, ecx //fileInfo |
735 | int 0x40 |
782 | int 0x40 |
736 | // mov result, eax |
783 | // mov result, eax |
737 | } |
784 | } |
Line 738... | Line 785... | ||
738 | // |
785 | // |
739 | // return result; |
786 | // return result; |
740 | } |
787 | } |
741 | 788 | ||
742 | 789 | ||
743 | // ôóíêöèÿ 63 âûâîä ñèìâîëÿ â îêíî îòëàäêè |
790 | // ôóíêöèÿ 63 âûâîä ñèìâîëÿ â îêíî îòëàäêè |
744 | void kos_DebugOutChar( char ccc ) |
791 | void __fastcall kos_DebugOutChar( char ccc ) |
745 | { |
792 | { |
746 | // |
793 | // |
747 | __asm{ |
794 | __asm{ |
748 | mov eax, 63 |
795 | mov eax, 63 |
Line 825... | Line 872... | ||
825 | 872 | ||
826 | // âûçîâ ñòàòè÷åñêèõ èíèöèàëèçàòîðîâ |
873 | // âûçîâ ñòàòè÷åñêèõ èíèöèàëèçàòîðîâ |
827 | // çàîäíî èíèöèàëèçàöèÿ ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë |
874 | // çàîäíî èíèöèàëèçàöèÿ ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë |
828 | //#pragma section(".CRT$XCA",long,read,write) |
875 | //#pragma section(".CRT$XCA",long,read,write) |
829 | //#pragma section(".CRT$XCZ",long,read,write) |
- | |
830 | #pragma data_seg(".CRT$XCA") |
- | |
831 | #pragma data_seg(".CRT$XCZ") |
- | |
832 | typedef void (__cdecl *_PVFV)(void); |
- | |
833 | __declspec(allocate(".CRT$XCA")) _PVFV __xc_a[1] = { NULL }; |
- | |
834 | __declspec(allocate(".CRT$XCZ")) _PVFV __xc_z[1] = { NULL }; |
- | |
835 | // |
- | |
836 | #pragma comment(linker, "/merge:.CRT=.rdata") |
- | |
837 | // |
876 | //#pragma section(".CRT$XCZ",long,read,write) |
838 | void crtStartUp() |
877 | void crtStartUp() |
839 | { |
- | |
840 | // âûçûâàåì èíèöèàëèçàòîðû ïî ñïèñêó, NULL'û èãíîðèðóåì |
- | |
841 | for ( _PVFV *pbegin = __xc_a; pbegin < __xc_z; pbegin++ ) |
- | |
842 | { |
- | |
843 | // |
878 | { |
844 | if ( *pbegin != NULL ) |
- | |
845 | (**pbegin)(); |
- | |
846 | } |
879 | __MENUET_header.app_path_ptr; |
847 | // èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë |
880 | // èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë |
848 | rtlSrand( kos_GetSystemClock() ); |
881 | rtlSrand( kos_GetSystemClock() ); |
849 | // ïóòü ê ôàéëó ïðîöåññà |
882 | // ïóòü ê ôàéëó ïðîöåññà |
850 | kosExePath = *((char **)0x20); |
883 | //kosExePath = *((char **)0x20); |
851 | // âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ |
884 | // âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ |
852 | kos_Main(); |
885 | kos_Main(); |
853 | // âûõîä |
886 | // âûõîä |
854 | kos_ExitApp(); |
887 | kos_ExitApp(); |