📄 api.h
字号:
#define _fnum_windowComponentGetWidth 12033#define _fnum_windowComponentSetWidth 12034#define _fnum_windowComponentGetHeight 12035#define _fnum_windowComponentSetHeight 12036#define _fnum_windowComponentFocus 12037#define _fnum_windowComponentDraw 12038#define _fnum_windowComponentGetData 12039#define _fnum_windowComponentSetData 12040#define _fnum_windowComponentGetSelected 12041#define _fnum_windowComponentSetSelected 12042#define _fnum_windowNewButton 12043#define _fnum_windowNewCanvas 12044#define _fnum_windowNewCheckbox 12045#define _fnum_windowNewContainer 12046#define _fnum_windowNewIcon 12047#define _fnum_windowNewImage 12048#define _fnum_windowNewList 12049#define _fnum_windowNewListItem 12050#define _fnum_windowNewMenu 12051#define _fnum_windowNewMenuBar 12052#define _fnum_windowNewMenuItem 12053#define _fnum_windowNewPasswordField 12054#define _fnum_windowNewProgressBar 12055#define _fnum_windowNewRadioButton 12056#define _fnum_windowNewScrollBar 12057#define _fnum_windowNewTextArea 12058#define _fnum_windowNewTextField 12059#define _fnum_windowNewTextLabel 12060#define _fnum_windowDebugLayout 12061// User functions. All are in the 13000-13999 range#define _fnum_userAuthenticate 13000#define _fnum_userLogin 13001#define _fnum_userLogout 13002#define _fnum_userGetNames 13003#define _fnum_userAdd 13004#define _fnum_userDelete 13005#define _fnum_userSetPassword 13006#define _fnum_userGetPrivilege 13007#define _fnum_userGetPid 13008#define _fnum_userSetPid 13009#define _fnum_userFileAdd 13010#define _fnum_userFileDelete 13011#define _fnum_userFileSetPassword 13012// Network functions. All are in the 14000-14999 range#define _fnum_networkDeviceGetCount 14000#define _fnum_networkDeviceGet 14001#define _fnum_networkInitialized 14002#define _fnum_networkInitialize 14003#define _fnum_networkShutdown 14004#define _fnum_networkOpen 14005#define _fnum_networkClose 14006#define _fnum_networkCount 14007#define _fnum_networkRead 14008#define _fnum_networkWrite 14009#define _fnum_networkPing 14010// Miscellaneous functions. All are in the 99000-99999 range#define _fnum_fontGetDefault 99000#define _fnum_fontSetDefault 99001#define _fnum_fontLoad 99002#define _fnum_fontGetPrintedWidth 99003#define _fnum_imageLoad 99004#define _fnum_imageSave 99005#define _fnum_shutdown 99006#define _fnum_version 99007#define _fnum_encryptMD5 99008#define _fnum_lockGet 99009#define _fnum_lockRelease 99010#define _fnum_lockVerify 99011#define _fnum_variableListCreate 99012#define _fnum_variableListDestroy 99013#define _fnum_variableListGet 99014#define _fnum_variableListSet 99015#define _fnum_variableListUnset 99016#define _fnum_configurationReader 99017#define _fnum_configurationWriter 99018#define _fnum_keyboardGetMaps 99019#define _fnum_keyboardSetMap 99020#define _fnum_deviceTreeGetCount 99021#define _fnum_deviceTreeGetRoot 99022#define _fnum_deviceTreeGetChild 99023#define _fnum_deviceTreeGetNext 99024#define _fnum_mouseLoadPointer 99025#define _fnum_mouseSwitchPointer 99026// Utility macros for stack manipulation#define stackPush(value) \ __asm__ __volatile__ ("pushl %0 \n\t" : : "r" (value))#define stackAdj(bytes) \ __asm__ __volatile__ ("addl %0, %%esp \n\t" \ : : "r" (bytes) : "%esp")// The generic calls for accessing the kernel API#define sysCall(retCode) \ if (!visopsys_in_kernel) \ { \ __asm__ __volatile__ ("lcall $0x003B,$0x00000000 \n\t" \ "movl %%eax, %0 \n\t" \ : "=r" (retCode) : : "%eax", "memory"); \ } \ else \ { \ retCode = -1; \ }// These use the macros defined above to call the kernel with the// appropriate number of argumentsstatic inline int sysCall_0(int fnum){ // Do a syscall with NO parameters int status = 0; stackPush(fnum); stackPush(1); sysCall(status); stackAdj(8); return (status);}static inline int sysCall_1(int fnum, void *arg1){ // Do a syscall with 1 parameter int status = 0; stackPush(arg1); stackPush(fnum); stackPush(2); sysCall(status); stackAdj(12); return (status);}static inline int sysCall_2(int fnum, void *arg1, void *arg2){ // Do a syscall with 2 parameters int status = 0; stackPush(arg2); stackPush(arg1); stackPush(fnum); stackPush(3); sysCall(status); stackAdj(16); return (status);}static inline int sysCall_3(int fnum, void *arg1, void *arg2, void *arg3){ // Do a syscall with 3 parameters int status = 0; stackPush(arg3); stackPush(arg2); stackPush(arg1); stackPush(fnum); stackPush(4); sysCall(status); stackAdj(20); return (status);}static inline int sysCall_4(int fnum, void *arg1, void *arg2, void *arg3, void *arg4){ // Do a syscall with 4 parameters int status = 0; stackPush(arg4); stackPush(arg3); stackPush(arg2); stackPush(arg1); stackPush(fnum); stackPush(5); sysCall(status); stackAdj(24); return (status);}static inline int sysCall_5(int fnum, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5){ // Do a syscall with 5 parameters int status = 0; stackPush(arg5); stackPush(arg4); stackPush(arg3); stackPush(arg2); stackPush(arg1); stackPush(fnum); stackPush(6); sysCall(status); stackAdj(28); return (status);}static inline int sysCall_6(int fnum, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6){ // Do a syscall with 6 parameters int status = 0; stackPush(arg6); stackPush(arg5); stackPush(arg4); stackPush(arg3); stackPush(arg2); stackPush(arg1); stackPush(fnum); stackPush(7); sysCall(status); stackAdj(32); return (status);}static inline int sysCall_7(int fnum, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7){ // Do a syscall with 7 parameters int status = 0; stackPush(arg7); stackPush(arg6); stackPush(arg5); stackPush(arg4); stackPush(arg3); stackPush(arg2); stackPush(arg1); stackPush(fnum); stackPush(8); sysCall(status); stackAdj(36); return (status);}static inline int sysCall_8(int fnum, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8){ // Do a syscall with 8 parameters int status = 0; stackPush(arg8); stackPush(arg7); stackPush(arg6); stackPush(arg5); stackPush(arg4); stackPush(arg3); stackPush(arg2); stackPush(arg1); stackPush(fnum); stackPush(9); sysCall(status); stackAdj(40); return (status);}static inline int sysCall_9(int fnum, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9){ // Do a syscall with 9 parameters int status = 0; stackPush(arg9); stackPush(arg8); stackPush(arg7); stackPush(arg6); stackPush(arg5); stackPush(arg4); stackPush(arg3); stackPush(arg2); stackPush(arg1); stackPush(fnum); stackPush(10); sysCall(status); stackAdj(44); return (status);}// These inline functions are used to call specific kernel functions. // There will be one of these for every API function.//// Text input/output functions//_X_ static inline objectKey textGetConsoleInput(void){ // Proto: kernelTextInputStream *kernelTextGetConsoleInput(void); // Desc : Returns a reference to the console input stream. This is where keyboard input goes by default. return ((objectKey) sysCall_0(_fnum_textGetConsoleInput));}_X_ static inline int textSetConsoleInput(objectKey newStream){ // Proto: int kernelTextSetConsoleInput(kernelTextInputStream *); // Desc : Changes the console input stream. GUI programs can use this function to redirect input to a text area or text field, for example. return (sysCall_1(_fnum_textSetConsoleInput, newStream));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -