ZealOS/src/Kernel/KernelC.HH

735 lines
33 KiB
HolyC
Raw Normal View History

2020-02-15 20:01:48 +00:00
#help_index "AutoComplete"
#help_file "::/Doc/AutoComplete"
2020-02-16 00:09:08 +00:00
public extern CAutoCompleteGlobals ac;
2020-02-15 20:01:48 +00:00
#help_index "AutoComplete/Dictionary"
2020-02-16 00:09:08 +00:00
public extern CAutoCompleteDictGlobals acd;
2020-02-15 20:01:48 +00:00
#help_index "Bit"
public extern U8 *rev_bits_table;
2020-02-15 20:01:48 +00:00
#help_index "Boot"
#help_file "::/Doc/Boot"
public extern U0 Reboot(Bool format_ramdisks=FALSE);
2020-02-15 20:01:48 +00:00
#help_index "Call"
public argpop extern I64 CallStackGrow(I64 stack_size_threshold, I64 stack_size, /*argpop*/I64 (*fp_addr)(...), ...);
2020-02-15 20:01:48 +00:00
//fp_addr can have any fixed number of arguments.
#help_index "Call/FarCall32"
public _extern _FAR_CALL32 Bool FarCall32(U0 (*fp_addr)());//Not reentrant
public _extern C32_EAX U32 c32_eax;
public _extern C32_EBX U32 c32_ebx;
public _extern C32_ECX U32 c32_ecx;
public _extern C32_EDI U32 c32_edi;
public _extern C32_EDX U32 c32_edx;
public _extern C32_EFLAGS U32 c32_eflags;
public _extern C32_ESI U32 c32_esi;
2020-02-15 20:01:48 +00:00
#help_index "Char/BitMaps"
public extern U32 char_bmp_alpha[16], char_bmp_alpha_numeric[16], char_bmp_alpha_numeric_no_at[16],
char_bmp_word[16],
char_bmp_dec_numeric[16], char_bmp_hex_numeric[16],
char_bmp_white_space[16], char_bmp_non_eol_white_space[16],
char_bmp_zero_cr_nl_cursor[16],
char_bmp_zero_tab_cr_nl_cursor[16], char_bmp_zero_tab_cr_nl_cursor_dollar[16],
char_bmp_macro[16],
char_bmp_printable[16], char_bmp_displayable[16], char_bmp_safe_dollar[16],
char_bmp_filename[16],
char_bmp_non_eol[16];
2020-02-15 20:01:48 +00:00
#help_index "Char/Conversion"
public extern U8 *Char2KeyName( I64 ch, Bool include_ctrl=TRUE);
public extern I64 Char2ScanCode(I64 ch, I64 sc_flags=0);
public extern U8 ScanCode2Char( I64 sc);
public extern U8 *ScanCode2KeyName(I64 sc);
public extern F64 Str2F64(U8 *src, U8 **_end_ptr=NULL);
public extern I64 Str2I64(U8 *st, I64 radix=10, U8 **_end_ptr=NULL);
public extern U8 *StrScan(U8 *src, U8 *format, ...);
2020-02-15 20:01:48 +00:00
#help_index "Char/Conversion;Time/Date/CDate;Date/CDate"
public extern CDate Str2Date(U8 *src);
#help_index "Char/Flags"
public extern U0 FlagsScan(U8 *_dst_flags, U8 *list, U8 *src);
public extern U8 *FlagsStrPrint(U8 *dst, U8 *list, I64 flags, Bool print_all=FALSE, I64 print_all_length=0);
2020-02-15 20:01:48 +00:00
#help_index "Char/Lists"
public extern I64 ListMatch(U8 *needle, U8 *haystack_list, I64 flags=0);
2020-02-16 00:26:51 +00:00
public extern U8 *ListSub(I64 sub, U8 *list);
2020-02-15 20:01:48 +00:00
#help_index "Char/Operations"
public extern U8 *MStrPrint(U8 *format, ...);
public extern U8 *MStrUtil(U8 *src, I64 flags, F64 indent_scale_factor=0);
public extern U8 *ScaleIndent(U8 *src, F64 indent_scale_factor);
public extern I64 Spaces2Tabs(U8 *dst, U8 *src);
public _extern _STRCOMPARE I64 StrCompare(U8 *st1, U8 *st2);
public _extern _STRCOPY U0 StrCopy(U8 *dst, U8 *src);
public extern U8 *StrFind(U8 *needle, U8 *haystack_str, I64 flags=0);
public extern U8 *StrFirstOcc( U8 *src, U8 *marker);
public extern U8 *StrFirstRemove(U8 *src, U8 *marker, U8 *dst=NULL);
public _extern _STRICOMPARE I64 StrICompare(U8 *st1, U8 *st2);
public _extern _STRIMATCH U8 *StrIMatch(U8 *needle, U8 *haystack_str);
public extern U8 *StrLastOcc(U8 *src, U8 *marker);
public extern U8 *StrReplace(U8 *str, U8 *old, U8 *new, I64 sff_flags=NONE, Bool free_str=FALSE);
public extern U8 *StrLastRemove(U8 *src, U8 *marker, U8 *dst=NULL);
public _extern _STRMATCH U8 *StrMatch(U8 *needle, U8 *haystack_str);
public _extern _STRNCOMPARE I64 StrNCompare( U8 *st1, U8 *st2, I64 n);
public _extern _STRNICOMPARE I64 StrNICompare(U8 *st1, U8 *st2, I64 n);
public extern I64 StrOcc(U8 *src, U8 ch);
public extern U8 *StrPrint( U8 *dst, U8 *format, ...);
public extern U8 *StrPrintJoin(U8 *dst, U8 *format, I64 argc, I64 *argv);
public extern U8 *StrUtil(U8 *_src, I64 flags);
public extern U8 *Tabs2Spaces(U8 *src);
public extern Bool WildMatch(U8 *test_str, U8 *wild_str);
2020-02-15 20:01:48 +00:00
#help_index "Char/Operations;Memory"
public extern U8 *CatPrint(U8 *dst, U8 *format, ...);
2020-02-15 20:01:48 +00:00
2021-07-02 00:53:42 +01:00
#help_index "Char/Operations;Memory/System Heap"
2020-02-16 02:38:13 +00:00
public extern U8 *ZStrNew(U8 *buf);
2020-02-15 20:01:48 +00:00
#help_index "Char/Operations;Memory/Heap"
public extern U8 *StrNew(U8 *buf, CTask *mem_task=NULL);
2020-02-15 20:01:48 +00:00
#help_index "Char/Output;StdOut"
public extern U0 GetOutOfDollar();
public extern Bool IsSilent();
public extern U0 Print( U8 *format, ...);
public extern U0 PrintErr( U8 *format, ...);
public extern U0 PrintWarn(U8 *format, ...);
public extern U0 PutChars(U64 ch);
extern U0 PutHex(I64 num, I64 width);
public extern U0 PutKey(I64 ch=0, I64 sc=0);
extern U0 PutS(U8 *st); //Use $LK,"Print",A="MN:Print"$()
public extern Bool Silent(Bool val=ON);
extern U8 *StrPrintHex(U8 *dst, I64 num;I64 width);
2020-02-15 20:01:48 +00:00
#help_index "Char;Debugging/Raw Output;TextBase Layer/Char"
2020-02-16 00:09:08 +00:00
public extern CTextGlobals text;
2020-02-15 20:01:48 +00:00
#help_index "Compiler/Lex"
public extern U0 HashSrcFileSet(CCompCtrl *cc, CHashSrcSym *h, I64 line_num_offset=0);
2020-02-15 20:01:48 +00:00
#help_index "Compiler;Cmd Line (Typically)"
extern U8 *Load(U8 *filename, I64 ld_flags=0, CBinFile *bfh_addr=INVALID_PTR); //INVALID_PTR=don't care what load addr
2020-02-15 20:01:48 +00:00
#help_index "Data Types/Circular Queue"
public extern I64 QueueCount(CQueue *head);
public extern CQueue *QueueCopy( CQueue *head, CTask *mem_task=NULL);
public extern U0 QueueDel( CQueue *head, Bool querem=FALSE);
public extern I64 QueueSize( CQueue *head);
2020-02-15 20:01:48 +00:00
#help_index "Data Types/Fifo"
public extern I64 FifoI64Count(CFifoI64 *f);
public extern U0 FifoI64Del( CFifoI64 *f);
public extern U0 FifoI64Flush(CFifoI64 *f);
public extern Bool FifoI64Ins( CFifoI64 *f, I64 q);
public extern CFifoI64 *FifoI64New(I64 size, CTask *mem_task=NULL);
public extern Bool FifoI64Peek( CFifoI64 *f, I64 *_q);
public extern Bool FifoI64Remove(CFifoI64 *f, I64 *_q);
public extern I64 FifoU8Count( CFifoU8 *f);
public extern U0 FifoU8Del( CFifoU8 *f);
public extern U0 FifoU8Flush( CFifoU8 *f);
public extern Bool FifoU8Insert(CFifoU8 *f, U8 b);
public extern CFifoU8 *FifoU8New(I64 size, CTask *mem_task=NULL);
public extern Bool FifoU8Peek( CFifoU8 *f, U8 *_b);
public extern Bool FifoU8Remove(CFifoU8 *f, U8 *_b);
2020-02-15 20:01:48 +00:00
#help_index "Data Types/Linked List"
public extern I64 LinkedListCount(U8 **_list);
public extern U8 *LinkedListCopy( U8 **_list, CTask *mem_task=NULL);
public extern U0 LinkedListDel( U8 **_list);
public extern I64 LinkedListSize( U8 **_list);
2020-02-15 20:01:48 +00:00
#help_index "Data Types/Queue Vector"
public extern U0 QueueVectU8Del(CQueueVectU8 *v);
public extern I64 QueueVectU8Get(CQueueVectU8 *v, I64 idx);
public extern CQueueVectU8 *QueueVectU8New(I64 min_idx=0);
public extern U0 QueueVectU8Put(CQueueVectU8 *v, I64 idx, U8 ch);
2020-02-15 20:01:48 +00:00
#help_index "Debugging"
public extern U8 *Caller(I64 num=1);
public extern Bool CheckCodePtr(U8 *ptr);
public extern Bool CheckOnStack(U8 *ptr, CTask *task=NULL);
public extern Bool CheckPtr( U8 *ptr);
public extern Bool IsSingleUser();
public extern Bool IsSysDebug();
public extern Bool SingleUser(Bool val);
public extern Bool SysDebug( Bool val);
public extern U8 *TaskCaller( CTask *task=NULL, I64 num=0, Bool saved_context=FALSE);
public extern I64 UnusedStack(CTask *task=NULL);
public extern CDebugGlobals debug;
2020-02-15 20:01:48 +00:00
#help_index "Debugging/Debugger"
public extern Bool B(U8 *addr, CTask *task=NULL, Bool live=TRUE) //Toggle bpt.
public extern I64 B2(CTask *task=NULL, Bool live=TRUE);
extern CBpt *BptFind(U8 *needle_addr, CTask *haystack_task=NULL, Bool rem=FALSE);
public extern Bool BptR(U8 *addr, CTask *task=NULL, Bool live=TRUE, Bool rem=TRUE);
public extern Bool BptS(U8 *addr, CTask *task=NULL, Bool live=TRUE);
public extern Bool DebugMode(Bool val);
public extern Bool E(U8 *addr, I64 count=512, I64 edf_dof_flags=0);
public extern Bool EdLite(U8 *filename, I64 num=1, I64 edf_dof_flags=0);
extern Bool EdLiteFileLine(U8 *fl_file_line, I64 edf_dof_flags=0);
public extern Bool Fix(I64 edf_dof_flags=0);
public extern U0 FixSet(U8 *filename, I64 line);
public extern U0 G( U8 *mouse=INVALID_PTR, CTask *task=NULL);
public extern U0 G2(U8 *mouse=INVALID_PTR, CTask *task=NULL);
public extern Bool IsDebugMode();
public extern U0 S( U8 *mouse=INVALID_PTR, CTask *task=NULL);
#help_index "Debugging/Debugger;DolDoc/Cmd Line (Typically);Cmd Line (Typically);Help System"
public extern Bool Man(U8 *st, I64 edf_dof_flags=0);
2020-02-15 20:01:48 +00:00
#help_index "Debugging/Dump"
public extern U0 CallerRep(U8 **rbp=NULL, CTask *task=NULL);
public extern U0 D( U8 *addr, I64 count=0x80, Bool show_offset=TRUE);
public extern U0 Da(U8 **addr, I64 count=0x10);
public extern U0 Dm(U8 *addr, I64 count=0x80);
public extern U0 Dr( CTask *task=NULL);
public extern U0 StackRep( CTask *task=NULL);
extern I64 *TaskRegAddr(CTask *task, I64 reg_num);
2020-02-15 20:01:48 +00:00
#help_index "Debugging/FunSeg"
2020-02-15 22:25:33 +00:00
#help_file "::/Doc/DebugFunSeg"
public extern Bool PutSrcLink( U8 *addr, I64 count=1, U8 *buf=NULL);
public extern U8 *SrcEdLink( U8 *addr, I64 count=1, CTask *mem_task=NULL);
public extern U8 *SrcFileName(U8 *addr, I64 count=1, CTask *mem_task=NULL);
public extern I64 SrcLineNum( U8 *addr, I64 count=1);
2020-02-15 20:01:48 +00:00
#help_index "Debugging/FunSeg;Hash/System"
public extern CHash *FunSegFind(U8 *addr, I64 *_offset);
2020-02-15 20:01:48 +00:00
#help_index "Debugging/Raw Output"
public extern Bool IsRaw();
public extern Bool Raw(Bool val);
public extern U0 RawD( I64 mS=100, U8 *addr, I64 count=0x80);
public extern U0 RawDm(I64 mS=100, U8 *addr, I64 count=0x80);
extern U0 RawDr(CTask *task=NULL);
public extern U0 RawPrint(I64 mS=100, U8 *format, ...);
public extern U0 RawPutChar(I64 ch);
public extern U0 LFBFlush();
2020-02-15 20:01:48 +00:00
#help_index "Debugging;Debugging/Debugger"
public extern U0 Debug(U8 *message=NULL, I64 message_num=0);
public extern U0 Panic(U8 *message=NULL, I64 message_num=0, Bool panic=TRUE);
2020-02-15 20:01:48 +00:00
#help_index "Define;Char/Define"
#help_file "::/Doc/Define"
public extern U8 *Define( U8 *dname);
public extern CHashDefineStr *DefineLoad( U8 *dname, U8 *st);
public extern U0 DefinePrint(U8 *dname, U8 *src, ...);
2020-02-15 20:01:48 +00:00
#help_index "Define;Char/Define;Char/Lists"
public extern I64 DefineCount( U8 *dname);
public extern CHashDefineStr *DefineListLoad(U8 *dname, U8 *list);
public extern I64 DefineMatch(U8 *needle, U8 *haystack_list_dname, I64 flags=0);
public extern U8 *DefineSub(I64 sub, U8 *dname);
2020-02-15 20:01:48 +00:00
#help_index "Devices;Memory/Page Tables"
public extern U8 *Mem32DevAlloc(I64 size, I64 alignment);
public extern U0 Mem32DevFree(U8 *base);
public extern U8 *Mem64DevAlloc(I64 *_pages1Gig);
public extern U0 Mem64DevFree(U8 *base, I64 pages1Gig);
public extern CDevGlobals dev;
2020-02-15 20:01:48 +00:00
#help_index "DolDoc/Clip"
public extern CDoc *sys_clip_doc;
#help_index "DolDoc/Task;StdOut/Task"
#help_file "::/Doc/StdOutTask"
extern CDoc *(*fp_doc_put)(CTask *task=NULL);
#help_index "Exceptions"
public extern U0 Break();
public extern Bool BreakLock( CTask *task=NULL);
public extern Bool BreakUnlock(CTask *task=NULL);
public extern U0 PutExcept(Bool catch_it=TRUE);
extern U0 SysTry(U8 *start_label, U8 *skip_label);
extern U0 SysUntry();
public extern U0 throw(I64 ch=0, Bool no_log=FALSE);
2020-02-15 20:01:48 +00:00
#help_index "File/CD DVD"
public extern U0 DVDImageRead( U8 dvd_drive_let, U8 *out_name);
public extern U0 DVDImageWrite(U8 dvd_drive_let, U8 *in_name=NULL, I64 media_type=MT_DVD);
2020-02-15 20:01:48 +00:00
#help_index "File/CFile"
public extern Bool FBlkRead( CFile *f, U8 *buf, I64 blk=FFB_NEXT_BLK, I64 count=1);
public extern Bool FBlkWrite(CFile *f, U8 *buf, I64 blk=FFB_NEXT_BLK, I64 count=1);
public extern U0 FClose( CFile *f);
public extern CFile *FOpen(U8 *filename, U8 *flags, I64 count=0);
public extern I64 FSize( CFile *f);
2020-02-15 20:01:48 +00:00
#help_index "File/Cmd Line (Typically);Cmd Line (Typically)"
public extern Bool Cd(U8 *dirname=NULL, Bool make_dirs=FALSE);
public extern I64 Del(U8 *files_find_mask, Bool make_mask=FALSE, Bool del_dir=FALSE, Bool print_message=TRUE);
public extern I64 Dir(U8 *files_find_mask="*", Bool full=FALSE);
public extern Bool DirMake(U8 *filename, I64 entry_count=0);
public extern Bool Drive( U8 drv_let);
public extern U0 DiskChange(U8 drv_let=0);
public extern U0 HomeSet(U8 *dirname);
2020-02-15 20:01:48 +00:00
#help_index "File/FileNames"
extern CDirEntry *Cd2DirEntry(CDirEntry *tmpde, U8 *abs_name);
public extern U8 *DirCur(CTask *task=NULL, CTask *mem_task=NULL);
public extern U8 *DirFile( U8 *dirname, U8 *name=NULL, U8 *_extension=NULL);
public extern U8 *DirNameAbs(U8 *dirname);
public extern CBlkDev *DriveIsWritable(U8 drv_let=0, Bool except=FALSE);
public extern U8 *ExtChange( U8 *filename, U8 *extension);
public extern U8 *ExtDefault(U8 *filename, U8 *extension);
public extern U8 *FileExtDot( U8 *src);
public extern U8 *FileExtRemove(U8 *src, U8 *dst=NULL);
public extern U8 *FileNameAbs( U8 *filename, I64 fuf_flags=0);
public extern Bool FileNameCheck(U8 *filename);
public extern Bool FilesFindMatch(U8 *_test_name, U8 *files_find_mask, I64 fuf_flags=0);
public extern Bool IsDir(U8 *dir_name);
public extern Bool IsDotC(U8 *filename);
public extern U0 PutDirLink(U8 *dirname, U8 *full_name=NULL);
public extern U0 PutFileLink(U8 *filename, U8 *full_name=NULL, I64 line=0, Bool plain_text=FALSE);
public extern U0 ToFileLine(U8 *_fl_file_line, U8 **_filename, I64 *_linenum);
2020-02-15 20:01:48 +00:00
#help_index "File/FileNames;Misc"
public extern U8 *FileNameTmpTxt();
#help_index "File/Internal"
public extern U0 DirContextDel(CDirContext *dirc, Bool restore=TRUE);
public extern CDirContext *DirContextNew(U8 *mask, Bool make_mask=FALSE, Bool make_dirs=FALSE, Bool no_mask=FALSE);
public extern Bool DirNew(CDrive *drive, U8 *cur_dir, CDirEntry *tmpde, Bool free_old_chain=TRUE);
extern I64 FileAttr(U8 *name, I64 old_attr=0);
2020-02-15 20:01:48 +00:00
#help_index "File/Low Level"
#help_file "::/Doc/FileLowLevel"
public extern CBlkDev *BlkDevCheck(CBlkDev *bd, Bool except=TRUE);
public extern U0 BlkDevDel( CBlkDev *bd);
public extern Bool BlkDevLock( CBlkDev *bd);
public extern CBlkDev *BlkDevNextFreeSlot(U8 first_drive_let, I64 type);
public extern Bool BlkDevUnlock(CBlkDev *bd, Bool reset=FALSE);
public extern U0 BlkDevsRelease();
public extern Bool BlkRead( CDrive *drive, U8 *buf, I64 blk, I64 count);
public extern Bool BlkWrite( CDrive *drive, U8 *buf, I64 blk, I64 count);
public extern U0 BlkWriteZero(CDrive *drive, I64 blk, I64 count);
public extern I64 Clus2Blk( CDrive *drive, I64 c);
public extern I64 ClusAlloc( CDrive *drive, I64 c=0, I64 count=1, Bool contiguous=FALSE);
public extern I64 ClusBlkRead( CDrive *drive, U8 *buf, I64 c, I64 blks);
public extern I64 ClusBlkWrite(CDrive *drive, U8 *buf, I64 c, I64 blks);
public extern I64 ClusNumNext( CDrive *drive, I64 c, I64 count=1);
public extern I64 ClusRead( CDrive *drive, U8 *buf, I64 c, I64 count);
public extern I64 ClusWrite( CDrive *drive, U8 *buf, I64 c, I64 count);
extern Bool CopySingle(U8 *f1, U8 *f2); //Just one file
public extern U8 Drive2Letter(CDrive *drive=NULL);
public extern CDrive *DriveCheck( CDrive *drive, Bool except=TRUE);
public extern U0 DriveDel( CDrive *drive);
public extern Bool DriveLock( CDrive *drive);
public extern CDrive *DriveMakeFreeSlot(U8 drv_let);
public extern U8 *DriveModelNum(U8 drv_let=0);
public extern U8 DriveNextFreeLet(U8 first_drive_let='C');
public extern U8 *DriveSerialNum( U8 drv_let=0);
public extern U8 DriveTextAttrGet(U8 drv_let=0);
public extern Bool DriveUnlock(CDrive *drive, Bool reset=FALSE);
public extern U0 DrivesRelease();
extern U0 FAT32FreeClus(CDrive *drive, I64 c);
public extern CBlkDev *Letter2BlkDev( U8 drv_let=0, Bool except=TRUE);
public extern I64 Letter2BlkDevType(U8 drv_let);
public extern CDrive *Letter2Drive( U8 drv_let=0, Bool except=TRUE);
public extern U8 Letter2Letter( U8 drv_let=0);
extern I64 Name2DirClus( CDrive *drive, U8 *dirname);
extern I64 Name2ParentDirClus(CDrive *drive, U8 *dirname);
extern U0 RedSeaFreeClus( CDrive *drive, I64 c, I64 count);
2020-02-15 20:01:48 +00:00
#help_index "File/Program Routines"
public extern U0 DirEntryDel( CDirEntry *tmpde);
public extern U0 DirEntryDel2(CDirEntry *tmpde);
public extern U0 DirTreeDel( CDirEntry *tmpde);
public extern U0 DirTreeDel2( CDirEntry *tmpde);
public extern Bool FileFind( U8 *filename, CDirEntry *_de=NULL, I64 fuf_flags=0);
public extern U8 *FileRead( U8 *filename, I64 *_size=NULL, I64 *_attr=NULL);
public extern I64 FileWrite(U8 *filename, U8 *fbuf, I64 size, CDate cdt=0, I64 attr=0);
2020-02-15 20:01:48 +00:00
#help_index "File/Program Routines;File/FileNames"
public extern CDirEntry *FilesFind(U8 *files_find_mask, I64 fuf_flags=0);
2020-02-15 20:01:48 +00:00
#help_index "File/System"
public extern CATARep *ATAIDDrives(CATARep *head, CATARep **_ata_drive, CATARep **_atapi_drive);
extern CBlkDev *ATAMount(U8 first_drive_let, I64 type, I64 base0, I64 base1, I64 unit);
extern Bool IDEATAPIStartStop(CBlkDev *bd, F64 timeout, Bool start);
extern I64 IDEATAProbe(I64 base0, I64 base1, I64 unit);
extern I64 BlkDevAdd( CBlkDev *bd, I64 prt_num=I64_MIN, Bool whole_drive, Bool make_free);
extern U0 DiskCacheInit(I64 size_in_U8s);
public extern U0 DiskCacheInvalidate(CDrive *drive);
public extern I64 MountIDEAuto();
extern U0 AHCIHbaReset();
extern U0 AHCIPortReset(I64 port_num);
extern U0 AHCIPortInit(CBlkDev *bd, CAHCIPort *port, I64 port_num);
extern I64 AHCIAtaBlksRW( CBlkDev *bd, U8 *buf, I64 blk, I64 count, Bool write);
extern I64 AHCIAtaBlksRead( CBlkDev *bd, U8 *buf, I64 blk, I64 count);
extern I64 AHCIAtaBlksWrite( CBlkDev *bd, U8 *buf, I64 blk, I64 count);
extern I64 AHCIAtapiBlksRead( CBlkDev *bd, U8 *buf, I64 blk, I64 count);
extern Bool AHCIAtapiSeek( CBlkDev *bd, I64 blk);
extern Bool AHCIAtapiStartStop(CBlkDev *bd, Bool start);
extern Bool DiscEject(U8 drv_let);
extern Bool DiscLoad( U8 drv_let);
public extern CBlkDevGlobals blkdev;
2020-02-15 20:01:48 +00:00
#help_index "Graphics/Color"
extern U0 (*fp_set_std_palette)();
public extern U8 *Color2Str(U8 *buf, CColorROPU32 c);
public extern CColorROPU16 Str2ColorU16(U8 *st);
public extern CColorROPU32 Str2ColorU32(U8 *st);
2020-02-15 20:01:48 +00:00
#help_index "Hash"
#help_file "::/Doc/Hash"
public _extern _HASH_ADD U0 HashAdd( CHash *tmph, CHashTable *table);
public _extern _HASH_ADD_AFTER U0 HashAddAfter(CHash *tmph, CHash *pred, CHashTable *table);
//Add hash entry after entry.
public _extern _HASH_BUCKET_FIND CHash **HashBucketFind( U8 *needle_str, CHashTable *haystack_table);
public _extern _HASH_FIND CHash *HashFind( U8 *needle_str, CHashTable *haystack_table,
I64 mask, I64 instance=1);
public _extern _HASH_SINGLE_TABLE_FIND CHash *HashSingleTableFind(U8 *needle_str, CHashTable *haystack_table,
I64 mask, I64 instance=1);
public _extern _HASH_STR I64 HashStr(U8 *st);
public extern CHashTable *HashTableNew(I64 size, CTask *mem_task=NULL);
2020-02-15 20:01:48 +00:00
#help_index "Hash/Frame"
#help_file "::/Doc/Frame"
public extern I64 FramePtr(U8 *name, CTask *task=NULL);
public extern CHashGeneric *FramePtrAdd(U8 *name, I64 val=0, CTask *task=NULL);
public extern I64 FramePtrDel(U8 *name, CTask *task=NULL);
public extern I64 FramePtrSet(U8 *name, I64 val, CTask *task=NULL);
2020-02-15 20:01:48 +00:00
#help_index "Hash/System"
public extern U0 HashDel(CHashSrcSym *tmph);
public extern CHashGeneric *HashGenericAdd(U8 *name, I64 type,
I64 val=0, I64 u8=0, I64 u16=0, CTask *task=NULL);
public extern CHashGeneric *HashPublic(U8 *st, I64 mask, Bool val=TRUE);
public _extern _HASH_REM_DEL Bool HashRemDel(CHash *tmph, CHashTable *table, I64 instance=1);
//instance must match tmph's
public extern U0 HashTableDel( CHashTable *table);
public extern I64 HashTablePurge(CHashTable *table);
public extern I64 HashTypeNum(CHash *tmph);
public extern I64 HashVal( CHash *tmph);
extern U0 SysSymImportsResolve(U8 *sptr, I64 ld_flags=0);
2020-02-15 20:01:48 +00:00
#help_index "Hash/System;Char/Lists"
public extern I64 HashListAdd(U8 *list, I64 type, CHashTable *table);
2020-02-15 20:01:48 +00:00
#help_index "Hash/System;Define;Char/Define;Char/Lists"
public extern I64 HashDefineListAdd(U8 *dname, I64 type, CHashTable *table);
2020-02-15 20:01:48 +00:00
#help_index "Help System;Debugging/Debugger"
public extern U0 Help();
#help_index "Info;File/Cmd Line (Typically);Cmd Line (Typically);Install"
2020-02-15 22:53:02 +00:00
public extern U0 DriveRep();
2020-02-15 20:01:48 +00:00
#help_index "Install"
#help_file "::/Doc/Install"
extern CATARep *ATARepFind(CATARep *haystack_head, I64 needle_num);
public extern Bool DriveEnable(U8 drv_let, Bool val);
2020-02-15 20:01:48 +00:00
#help_index "Install;File/Cmd Line (Typically);Cmd Line (Typically);"
public extern U0 Format(U8 drv_let, Bool quick=TRUE, Bool confirm=TRUE, I64 type=FSt_FAT32);
2020-02-15 20:01:48 +00:00
#help_index "Install;Memory/BlkPool"
public extern I64 Scale2Mem(I64 min, I64 max, I64 limit=2*1024*1024*1024);
2020-02-15 20:01:48 +00:00
#help_index "Job/Exe;Task/Job/Exe"
2021-07-02 00:53:42 +01:00
public extern U0 SysErr( U8 *format, ...);
public extern U0 SysWarn(U8 *format, ...);
public extern U0 SysLog( U8 *format, ...);
public extern I64 ExeCmdLine(CCompCtrl *cc);
public extern U0 JobDel(CJob *tmpc);
public extern I64 JobsHandler(I64 run_flags, CTask *task=NULL);
extern U0 ServerCmdLine();
public extern U0 ServerTaskCont();
public extern CJob *TaskExe(CTask *server, CTask *master, U8 *data, I64 flags);
public extern U0 TaskResetAwaitingMessage(CTask *task=NULL);
public extern U0 UserTaskCont();
2020-02-15 20:01:48 +00:00
#help_index "Job/Exe;Task/Job/Exe;Compiler"
2021-07-02 00:53:42 +01:00
public extern I64 Sys(U8 *format, ...);
public extern I64 PopUp(U8 *buf, CTask *parent=NULL, CTask **_pu_task=NULL);
public extern I64 PopUpPrint(U8 *format, ...);
2020-02-15 20:01:48 +00:00
#help_index "Job/Exe;Task/Job/Exe;MultiCore"
public extern I64 JobResGet( CJob *request=NULL);
public extern Bool JobResScan(CJob *request=NULL, I64 *_res=NULL);
2020-02-15 20:01:48 +00:00
2020-02-15 23:56:05 +00:00
#help_index "Job/Text & Messages;Task/Job/Text & Messages"
public extern CJob *TaskText(CTask *server, CTask *master, U8 *data, I64 flags);
2020-02-15 20:01:48 +00:00
2020-02-15 23:56:05 +00:00
#help_index "Job/Text & Messages;Task/Job/Text & Messages;InFile;StdIn/InFile"
public extern U0 In(U8 *format, ...);
2020-02-15 20:01:48 +00:00
public extern U0 InFile(U8 *filename);
public extern U0 InStr(U8 *format, ...);
public extern U0 XTalk( CTask *task, U8 *format, ...);
public extern U0 XTalkStr( CTask *task, U8 *format, ...);
public extern U0 XTalkStrWait(CTask *task, U8 *format, ...);
public extern U0 XTalkWait( CTask *task, U8 *format, ...);
2020-02-15 20:01:48 +00:00
2020-02-15 23:56:05 +00:00
#help_index "Job/Text & Messages;Task/Job/Text & Messages;Messages"
public extern U0 Message(I64 message_code, I64 arg1, I64 arg2, I64 flags=0);
public extern U0 MessagePost( CTask *task, I64 message_code, I64 arg1, I64 arg2, I64 flags=0);
public extern U0 MessagePostWait(CTask *task, I64 message_code, I64 arg1, I64 arg2, I64 flags=0);
public extern CJob *TaskMessage(CTask *server, CTask *master, I64 message_code, I64 arg1, I64 arg2, I64 flags);
2020-02-15 20:01:48 +00:00
#help_index "Job;Task/Job"
#help_file "::/Doc/Job"
#help_index "Keyboard Devices/System;Char/System"
#help_file "::/Doc/KeyDev"
public extern U0 CtrlAltCBSet(U8 ch, U0 (*fp_handler)(I64 sc),
U8 *no_shift_desc=NULL, U8 *shift_desc=NULL, Bool in_irq=FALSE);
public extern U0 KeyDescSet(U8 *format, ...);
public extern CKeyDevEntry *KeyDevAdd(Bool (*fp_put_key)(I64 ch, I64 sc), Bool (*fp_puts)(U8 *st),
I64 priority, Bool key_descs=FALSE);
public extern U0 KeyDevRemove(CKeyDevEntry *tmpk);
extern CKeyDevGlobals keydev;
extern CJob sys_macro_head;
extern CTask *sys_macro_task;
2020-02-15 20:01:48 +00:00
#help_index "Keyboard Devices;Char/Input;StdIn"
extern U8 *(*fp_getstr2)(I64 flags=0); //StrGet $LK,"Flags",A="MN:SGF_SHIFT_ESC_EXIT"$
public extern Bool AreYouSure();
public extern I64 CharGet(I64 *_scan_code=NULL, Bool echo=TRUE, Bool raw_cursor=FALSE);
public extern I64 KeyGet( I64 *_scan_code=NULL, Bool echo=FALSE, Bool raw_cursor=FALSE);
public extern I64 StrNGet(U8 *buf, I64 size, Bool allow_ext=TRUE);
public extern U8 *StrGet(U8 *message=NULL, U8 *default=NULL, I64 flags=0);
extern U0 KbdInit();
public extern I64 KbdMouseEventTime();
extern U0 KbdMouseHandler(Bool poll_kbd, Bool poll_mouse);
extern U0 KbdMouseInit();
extern I64 KbdMessagesQueue();
public extern U0 KbdTypeMatic(U8 delay);
extern Bool MouseHardDriverInstall();
public extern Bool MouseHardEnable(Bool val=TRUE);
public extern I64 PressAKey();
public extern I64 CharScan();
public extern Bool KeyScan(I64 *_ch=NULL, I64 *_scan_code=NULL, Bool echo=FALSE);
public extern Bool YorN();
public extern CKbdStateGlobals kbd;
2020-02-15 20:01:48 +00:00
#help_index "Math"
public extern I64 CeilI64(I64 num, I64 to);
public extern U64 CeilU64(U64 num, U64 to);
public extern F64 Clamp(F64 d, F64 lo, F64 hi);
public extern I64 FloorI64(I64 num, I64 to);
public extern U64 FloorU64(U64 num, U64 to);
public extern F64 Max(F64 n1, F64 n2);
public extern F64 Min(F64 n1, F64 n2);
2020-02-15 20:01:48 +00:00
public extern F64 Pow10I64(I64 i);
public extern F64 Rand(); //With timestamp
public extern U8 RandU8();
2020-02-15 20:01:48 +00:00
public extern I16 RandI16();
public extern I32 RandI32();
public extern I64 RandI64();
public extern U16 RandU16();
public extern U32 RandU32();
public extern U64 RandU64();
public extern I64 RoundI64(I64 num, I64 to);
public extern I64 Seed(I64 seed=0, CTask *task=NULL);
2020-02-15 20:01:48 +00:00
#help_index "Memory/Info"
public extern I64 MemBIOSTotal();
2021-07-02 00:53:42 +01:00
#help_index "Memory/System Heap"
2020-02-16 02:38:13 +00:00
public extern U8 *ZCAlloc(I64 size);
public extern U8 *ZMAlloc(I64 size);
public extern U8 *ZMAllocIdent(U8 *src);
public extern U8 *ZReAlloc( U8 *src, U64 size);
2020-02-15 20:01:48 +00:00
#help_index "Memory/BlkPool"
public extern U0 BlkPoolAdd( CBlkPool *bp, CMemBlk *m, I64 pags);
public extern U0 BlkPoolInit(CBlkPool *bp, I64 pags);
public extern U8 *MemPagAlloc(I64 pags, CBlkPool *bp=NULL);
public extern U0 MemPagFree(CMemBlk *m, CBlkPool *bp=NULL);
2020-02-15 20:01:48 +00:00
#help_index "Memory/Heap"
public extern U8 *CAlloc( I64 size, CTask *mem_task=NULL);
public extern U8 *CAllocAligned(I64 size, I64 alignment, CTask *mem_task=NULL, I64 misalignment=0);
public _extern _FREE U0 Free(U8 *addr);
public _extern _MALLOC U8 *MAlloc( I64 size, CTask *mem_task=NULL);
public extern U8 *MAllocAligned(I64 size, I64 alignment, CTask *mem_task=NULL, I64 misalignment=0);
public extern U8 *MAllocIdent(U8 *src, CTask *mem_task=NULL);
public extern U8 *ReAlloc( U8 *src, U64 size, CTask *mem_task=NULL);
public _extern _MHEAP_CTRL CHeapCtrl *MHeapCtrl( U8 *src);
public _extern _MSIZE I64 MSize( U8 *src); //size of heap object
public _extern _MSIZE2 I64 MSize2( U8 *src); //Internal size
2020-02-15 20:01:48 +00:00
#help_index "Memory/HeapCtrl"
public extern U0 HeapCtrlDel( CHeapCtrl *hc);
public extern CHeapCtrl *HeapCtrlInit(CHeapCtrl *hc=NULL, CTask *task=NULL, CBlkPool *bp);
#help_index "Memory/Segmentation"
public extern U8 *Seg2Linear(U32 *ptr);
2020-02-15 20:01:48 +00:00
#help_index "Memory/Page Tables"
public extern I64 *MemPageTable(U8 *a);
#help_index "Messages"
2020-02-15 23:56:05 +00:00
#help_file "::/Doc/Messages"
public extern I64 FlushMessages(CTask *task=NULL);
public extern I64 MessageGet( I64 *_arg1=NULL, I64 *_arg2=NULL, I64 mask=~1, CTask *task=NULL);
extern U0 InputFilterTask();
public extern I64 MessageScan(I64 *_arg1=NULL, I64 *_arg2=NULL, I64 mask=~1, CTask *task=NULL);
2020-02-15 20:01:48 +00:00
#help_index "Misc"
public extern U0 QuickSort( U8 *base, I64 num, I64 width, I64 (*fp_compare)(U8 *e1, U8 *e2));
public extern U0 QuickSortI64(I64 *base, I64 num, I64 (*fp_compare)(I64 e1, I64 e2));
public extern F64 sys_os_version;
2020-02-15 20:01:48 +00:00
#help_index "Misc/Progress Bars"
2020-02-16 00:54:39 +00:00
public extern U0 ProgressBarsReset(U8 *path=NULL);
2020-02-15 20:01:48 +00:00
#help_index "Mouse"
#help_file "::/Doc/Mouse"
public extern U0 GridInit();
public extern U0 MouseSet(I64 x=I64_MAX, I64 y=I64_MAX, I64 z=I64_MAX, I64 l=I64_MAX, I64 r=I64_MAX);
public extern CMouseStateGlobals mouse;
public extern CGridGlobals mouse_grid;
public extern CMouseHardStateGlobals mouse_hard;
extern CMouseHardStateGlobals mouse_hard_last;
extern CMouseStateGlobals mouse_last;
2020-02-15 20:01:48 +00:00
#help_index "Mouse/Ptr"
extern U0 MouseInit();
extern U0 MouseUpdate(I64 x, I64 y, I64 z, Bool l, Bool r);
2020-02-15 20:01:48 +00:00
#help_index "MultiCore"
extern U0 Core0StartMP();
extern U0 CoreAPExecutiveTask();
public extern U0 MPInt(U8 num, I64 cpu_num=1);
public extern U0 MPIntAll(U8 num);
public extern U0 MPNMInt();
extern CTask *SpawnQueue(U0 (*fp_addr)(U8 *data), U8 *data=NULL, U8 *task_name=NULL, I64 target_cpu,
CTask *parent=NULL, //NULL means system_task
I64 stack_size=0, I64 flags=1<<JOBf_ADD_TO_QUE);
2020-02-15 20:01:48 +00:00
#help_index "MultiCore;Boot"
public extern U0 MPHalt();
#help_index "MultiCore;Job/Exe;Task/Job/Exe"
public extern CJob *JobQueue(I64 (*fp_addr)(U8 *data), U8 *data=NULL, I64 target_cpu=1, I64 flags=1<<JOBf_FREE_ON_COMPLETE,
I64 job_code=JOBT_CALL, U8 *aux_str=NULL, I64 aux1=0, I64 aux2=0);
2020-02-15 20:01:48 +00:00
#help_index "PCI"
public extern I64 PCIClassFind(I64 class_code, I64 n);
public extern U16 PCIReadU16( I64 bus, I64 dev, I64 fun, I64 rg);
public extern U32 PCIReadU32( I64 bus, I64 dev, I64 fun, I64 rg);
public extern U8 PCIReadU8( I64 bus, I64 dev, I64 fun, I64 rg);
public extern U0 PCIWriteU16(I64 bus, I64 dev, I64 fun, I64 rg, I64 val);
public extern U0 PCIWriteU32(I64 bus, I64 dev, I64 fun, I64 rg, I64 val);
public extern U0 PCIWriteU8( I64 bus, I64 dev, I64 fun, I64 rg, I64 val);
public _extern SYS_PCIBIOS_SERVICE_DIR U32 sys_PCIBIOS_service_dir;//Far call routine in the BIOS
public _extern SYS_PCI_SERVICES U32 sys_pci_services;//Far call routine in the BIOS
2020-02-15 20:01:48 +00:00
#help_index "PCI;Info;File/System;Devices"
public extern I64 ATARep(Bool prompt=TRUE, Bool just_ide=FALSE, CATARep **_head=NULL);
2020-02-15 20:01:48 +00:00
#help_index "Processor"
public extern U8 *IntEntryGet(I64 irq);
public extern U8 *IntEntrySet(I64 irq, U0 (*fp_new_handler)(), I64 type=IDTET_IRQ);
2020-02-15 20:01:48 +00:00
2020-02-15 23:19:08 +00:00
#help_index "ScreenCast;Cmd Line (Typically)"
public extern Bool ScreenCast(Bool val=ON, Bool just_audio=FALSE, U8 *print_format="B:/Tmp/%X.GR")
public extern CScreenCastGlobals screencast;
2020-02-15 20:01:48 +00:00
2020-02-16 00:49:37 +00:00
#help_index "Sound"
#help_file "::/Doc/Sound"
public extern U0 Beep(I8 ona=62, Bool busy=FALSE);
public extern I8 Freq2Ona(F64 freq);
public extern Bool IsMute();
public extern Bool Mute(Bool val);
public extern F64 Ona2Freq(I64 ona);
public extern U0 Sound(I8 ona=0);
public extern U0 SoundReset();
2020-02-15 20:01:48 +00:00
#help_index "StdIn"
#help_file "::/Doc/Streams"
#help_index "StdOut"
#help_file "::/Doc/Streams"
#help_index "Task"
public extern I64 BirthWait(CTask **_task, I64 task_num=-1);
public extern U0 DeathWait(CTask **_task, Bool send_exit=FALSE);
public extern U0 Exit();
public extern Bool IsSuspended(CTask *task=NULL);
public extern Bool Kill( CTask *task, Bool wait=TRUE, Bool just_break=FALSE);
public extern Bool Suspend( CTask *task=NULL, Bool state=TRUE);
_extern _TASK_CONTEXT_RESTORE U0 TaskContextRestore();
_extern _TASK_END_NOW U0 TaskEndNow();
extern U0 TaskKillDying();
public extern U0 TaskQueueIns( CTask *task, CTask *pred=NULL);
public extern U0 TaskQueueRemove(CTask *task);
public extern Bool TaskValidate( CTask *task);
public extern U0 TaskWait( CTask *task=NULL, Bool cmd_line_prompt=FALSE);
public extern CTask *User(U8 *format=NULL, ...);
public extern U0 UserCmdLine();
public _extern _YIELD U0 Yield();
2021-07-02 00:53:42 +01:00
public extern CTask *sys_task;
public extern I64 sys_num_spawned_tasks;
extern CTask *sys_winmgr_task, *sys_task_being_screen_updated;
2020-02-15 20:01:48 +00:00
#help_index "Task/Delay;Time/CPU Cycles"
public extern U0 Busy(I64 <EFBFBD>S); //Loosely timed
public extern U0 PortNop(); //On the order of 1uS
extern I64 TimeCal();
2020-02-15 20:01:48 +00:00
#help_index "Task/Delay;Time/Jiffies"
public extern U0 Sleep(I64 mS);
public extern U0 SleepUntil(I64 wake_jiffy);
#help_index "Task/Misc"
extern U0 (*fp_update_ctrls)(CTask *task);
public extern U0 TSSBusy(I64 tr, Bool val=OFF);
public extern U0 TaskDerivedValsUpdate(CTask *task=NULL, Bool update_z_buf=TRUE);
public extern U0 WinDerivedValsUpdate( CTask *task);
2020-02-15 20:01:48 +00:00
#help_index "Task;Job/Exe;Task/Job/Exe;MultiCore"
public extern CTask *Spawn(U0 (*fp_addr)(U8 *data), U8 *data=NULL,
U8 *task_name=NULL, I64 target_cpu=-1, //-1 means current CPU
CTask *parent=NULL, //NULL means system_task
I64 stack_size=0, I64 flags=1<<JOBf_ADD_TO_QUE);
2020-02-15 20:01:48 +00:00
2020-02-17 01:36:52 +00:00
#help_index "Time/CPU Cycles;Time/Jiffies"
2020-02-16 00:20:04 +00:00
public extern CCountsGlobals counts;
2020-02-15 20:01:48 +00:00
#help_index "Time/Date/CDate;Date/CDate"
#help_file "::/Doc/TimeDate"
public extern U0 Date2Struct(CDateStruct *_ds, CDate cdt);
extern U8 *MPrintDate(CDate cdt);
extern U8 *MPrintTime(CDate cdt);
public extern CDate Now();
public extern CDate Struct2Date(CDateStruct *_ds);
public extern CDate local_time_offset;
2020-02-15 20:01:48 +00:00
#help_index "Time/Date/CMOS;Date/CMOS"
public extern U8 CMOSRegRead( I64 register);
public extern U0 CMOSRegWrite(I64 register, I64 val);
public extern Bool CMOSIsBcd();
public extern U0 TimeSet(CDateStruct *ds);
2020-02-15 20:01:48 +00:00
#help_index "Time/Date;Date"
#help_file "::/Doc/Date"
public extern I64 DayOfWeek( I64 i);
public extern I64 FirstDayOfMon( I64 i);
2020-02-15 20:01:48 +00:00
public extern I64 FirstDayOfYear(I64 i);
public extern I64 LastDayOfMon( I64 i);
public extern I64 LastDayOfYear( I64 i);
2020-02-15 20:01:48 +00:00
public extern I64 YearStartDate(I64 year);
public extern U16 month_start_days[12];
public extern U16 month_start_days_leap[12];
2020-02-15 20:01:48 +00:00
#help_index "Time/Jiffies"
#help_file "::/Doc/TimeJiffy"
public extern I64 SysTimerRead();//18.33333*65536Hz (SYS_TIMER_FREQ)
#help_index "Time/Seconds"
public extern Bool Blink(F64 Hz=2.5);
public extern F64 tS(); //From SysTimerFreq.
2020-02-15 20:01:48 +00:00
#help_index "Windows"
public extern Bool WinInside(I64 x, I64 y, CTask *task=NULL, I64 border=0);
2020-02-15 20:01:48 +00:00
#help_index ""