.head 0 + Application Description: Centura SQLWindows/32 Standard Application Template .head 1 - Outline Version - 4.0.34 .head 1 + Design-time Settings .data VIEWINFO 0000: 6F00000001000000 FFFF01000D004347 5458566965775374 6174650400010000 0020: 0000000000CF0000 002C000000020000 0003000000FFFFFF FFFFFFFFFFFCFFFF 0040: FFE9FFFFFFFFFFFF FF000000007C0200 004D010000010000 0001000000010000 0060: 000F4170706C6963 6174696F6E497465 6D00000000 .enddata .head 2 - Outline Window State: Normal .head 2 + Outline Window Location and Size .data VIEWINFO 0000: 6600040003002D00 0000000000000000 0000B71E5D0E0500 1D00FFFF4D61696E 0020: 0000000000000000 0000000000000000 0000003B00010000 00000000000000E9 0040: 1E800A00008600FF FF496E7465726E61 6C2046756E637469 6F6E730000000000 0060: 0000000000000000 0000000000003200 0100000000000000 0000E91E800A0000 0080: DF00FFFF56617269 61626C6573000000 0000000000000000 0000000000000000 00A0: 3000010000000000 00000000F51E100D 0000F400FFFF436C 6173736573000000 00C0: 0000000000000000 0000000000000000 .enddata .data VIEWSIZE 0000: D000 .enddata .head 3 - Left: -0.013" .head 3 - Top: 0.0" .head 3 - Width: 8.013" .head 3 - Height: 4.969" .head 2 + Options Box Location .data VIEWINFO 0000: D4180909B80B1A00 .enddata .data VIEWSIZE 0000: 0800 .enddata .head 3 - Visible? Yes .head 3 - Left: 4.15" .head 3 - Top: 1.885" .head 3 - Width: 3.8" .head 3 - Height: 2.073" .head 2 + Class Editor Location .head 3 - Visible? No .head 3 - Left: 0.575" .head 3 - Top: 0.094" .head 3 - Width: 5.063" .head 3 - Height: 2.719" .head 2 + Tool Palette Location .head 3 - Visible? No .head 3 - Left: 6.388" .head 3 - Top: 0.729" .head 2 - Fully Qualified External References? Yes .head 2 - Reject Multiple Window Instances? No .head 2 - Enable Runtime Checks Of External References? Yes .head 2 - Use Release 4.0 Scope Rules? No .head 2 - Edit Fields Read Only On Disable? No .head 1 - Libraries .head 1 + Global Declarations .head 2 + Window Defaults .head 3 + Tool Bar .head 4 - Display Style? Etched .head 4 - Font Name: MS Sans Serif .head 4 - Font Size: 8 .head 4 - Font Enhancement: System Default .head 4 - Text Color: System Default .head 4 - Background Color: System Default .head 3 + Form Window .head 4 - Display Style? Etched .head 4 - Font Name: MS Sans Serif .head 4 - Font Size: 8 .head 4 - Font Enhancement: System Default .head 4 - Text Color: System Default .head 4 - Background Color: System Default .head 3 + Dialog Box .head 4 - Display Style? Etched .head 4 - Font Name: MS Sans Serif .head 4 - Font Size: 8 .head 4 - Font Enhancement: System Default .head 4 - Text Color: System Default .head 4 - Background Color: System Default .head 3 + Top Level Table Window .head 4 - Font Name: MS Sans Serif .head 4 - Font Size: 8 .head 4 - Font Enhancement: System Default .head 4 - Text Color: System Default .head 4 - Background Color: System Default .head 3 + Data Field .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + Multiline Field .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + Spin Field .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + Background Text .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + Pushbutton .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 3 + Radio Button .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + Check Box .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + Option Button .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 3 + Group Box .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + Child Table Window .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + List Box .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + Combo Box .head 4 - Font Name: Use Parent .head 4 - Font Size: Use Parent .head 4 - Font Enhancement: Use Parent .head 4 - Text Color: Use Parent .head 4 - Background Color: Use Parent .head 3 + Line .head 4 - Line Color: Use Parent .head 3 + Frame .head 4 - Border Color: Use Parent .head 4 - Background Color: 3D Face Color .head 3 + Picture .head 4 - Border Color: Use Parent .head 4 - Background Color: Use Parent .head 2 + Formats .head 3 - Number: 0'%' .head 3 - Number: #0 .head 3 - Number: ###000 .head 3 - Number: ###000;'($'###000')' .head 3 - Date/Time: hh:mm:ss AMPM .head 3 - Date/Time: M/d/yy .head 3 - Date/Time: MM-dd-yy .head 3 - Date/Time: dd-MMM-yyyy .head 3 - Date/Time: MMM d, yyyy .head 3 - Date/Time: MMM d, yyyy hh:mm AMPM .head 3 - Date/Time: MMMM d, yyyy hh:mm AMPM .head 2 - External Functions .head 2 + Constants .data CCDATA 0000: 3000000000000000 0000000000000000 00000000 .enddata .data CCSIZE 0000: 1400 .enddata .head 3 + System .head 4 - ! ! ! ! ! ( Registry ) .head 4 - Number: HKEY_CLASSES_ROOT = 0x80000000 .head 4 - Number: HKEY_CURRENT_USER = 0x80000001 .head 4 - Number: HKEY_LOCAL_MACHINE = 0x80000002 .head 4 - Number: HKEY_USERS = 0x80000003 .head 4 - Number: HKEY_PERFORMANCE_DATA = 0x80000004 .head 4 - Number: HKEY_CURRENT_COFIG = 0x80000005 .head 4 - Number: HKEY_DYN_DATA = 0x80000006 .head 4 - Number: REG_KEY_READ = 0x0001 | 0x0008 | 0x0010 .head 4 - Number: REG_ERR_SUCCESS = 0 .head 4 - Number: REG_ERR_FILE_NOT_FOUND = 2 .head 4 - Number: REG_ERR_MORE_DATA = 234 .head 3 + User .head 4 - ! ! .head 4 - ! ! ! *** Printer Attributes .head 4 - Number: PRINTER_ATT_QUEUED = 0x00000001 .head 4 - Number: PRINTER_ATT_DIRECT = 0x00000002 .head 4 - Number: PRINTER_ATT_DEFAULT = 0x00000004 .head 4 - Number: PRINTER_ATT_SHARED = 0x00000008 .head 4 - Number: PRINTER_ATT_NETWORK = 0x00000010 .head 4 - Number: PRINTER_ATT_HIDDEN = 0x00000020 .head 4 - Number: PRINTER_ATT_LOCAL = 0x00000040 .head 4 - Number: PRINTER_ATT_ENABLE_DEVQ = 0x00000080 .head 4 - Number: PRINTER_ATT_KEEPPRINTEDJOBS = 0x00000100 .head 4 - Number: PRINTER_ATT_COMPLETE_FIRST = 0x00000200 .head 4 - Number: PRINTER_ATT_WORK_OFFLINE = 0x00000400 .head 4 - Number: PRINTER_ATT_ENABLE_BIDI = 0x00000800 .head 4 - Number: PRINTER_ATT_RAW_ONLY = 0x00001000 .head 4 - Number: PRINTER_ATT_PUBLISHED = 0x00002000 .head 4 - ! ! .head 4 - ! ! *** Port Attributes .head 4 - Number: PORT_TYPE_WRITE = 0x0001 .head 4 - Number: PORT_TYPE_READ = 0x0002 .head 4 - Number: PORT_TYPE_REDIRECTED = 0x0004 .head 4 - Number: PORT_TYPE_NET_ATTACHED = 0x0008 .head 3 - Enumerations .head 2 - Resources .head 2 - Variables .head 2 + Internal Functions .head 3 + Function: SalSysGetProcessList .head 4 - Description: author: Petra Zamburek based on a sample from Daniel Mock posted November 1999 date: 2000-11-27 version 1.0 desc: Returns all running process IDs and process names example: Call SalSysGetProcessList( lsProcessNames, lnProcessIDs ) .head 4 + Returns .head 5 - Boolean: .head 4 + Parameters .head 5 - Receive String: rsaProcessNames[*] .head 5 - Receive Number: rnaProcessesID[*] .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: nRet .head 5 - Boolean: bOk .head 5 - Number: nCounter .head 5 - Number: nArrayCounter .head 5 - ! .head 5 - String: sBuffer .head 5 - Number: nProcessBlocks .head 5 - Number: nBlocks .head 5 - Number: nBlocksNeeded .head 5 - Number: nMemBlock .head 4 + Actions .head 5 - Set nBlocks = 8 .head 5 - Set nBlocksNeeded = 96 .head 5 + While nBlocks <= nBlocksNeeded .head 6 - Set nBlocks = nBlocks*2 .head 6 - Set bOk = SalStrSetBufferLength( sBuffer, (nBlocks*4) ) .head 6 - Set nMemBlock = CStructAllocFarMem( nBlocks*4 ) .head 6 - Set nRet = CStructCopyToFarMem( nMemBlock, sBuffer, (nBlocks*4) ) .head 6 - If EnumProcesses( nMemBlock, nBlocks, nBlocksNeeded ) .head 6 - Set nRet = CStructCopyFromFarMem( nMemBlock, sBuffer, (nBlocks*4) ) .head 6 - Set nRet = CStructFreeFarMem( nMemBlock ) .head 5 - Set nCounter = 0 .head 5 - Set nArrayCounter = 0 .head 5 + While nCounter < (nBlocksNeeded/4) .head 6 - Set rnaProcessesID[nArrayCounter] = CStructGetLong( sBuffer, (nCounter*4 ) ) .head 6 - ! if functions passes, then inc array counter, otherwise skip over it .head 6 + If SalSysGetModuleName( rnaProcessesID[nArrayCounter], rsaProcessNames[nArrayCounter] ) .head 7 - Set nArrayCounter = nArrayCounter + 1 .head 6 + Else .head 7 - Set rnaProcessesID[nArrayCounter] = NUMBER_Null .head 7 - Set rsaProcessNames[nArrayCounter] = '' .head 6 - Set nCounter = nCounter + 1 .head 5 - Return TRUE .head 3 + Function: SalSysGetModuleList .head 4 - Description: author: Petra Zamburek based on a sample from Daniel Mock posted November 1999 date: 2000-11-27 version 1.0 desc: Returns all modules to a process example: Call SalSysGetModuleList(lnProcessID, lsModuleNames) .head 4 + Returns .head 5 - Boolean: .head 4 + Parameters .head 5 - Number: nProcessID .head 5 - Receive String: sModules[*] .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: nProcessHandle .head 5 - Number: nRet .head 5 - Boolean: bOk .head 5 - Number: nCounter .head 5 - ! .head 5 - String: sBuffer .head 5 - Number: nProcessBlocks .head 5 - Number: nBlocks .head 5 - Number: nBlocksNeeded .head 5 - Number: nMemBlock .head 5 - Number: nSize .head 5 - Number: nModuleID .head 5 - String: sModuleName .head 4 + Actions .head 5 - Set nProcessHandle = OpenProcess( PROCESS_ALL_ACCESS, FALSE, nProcessID ) .head 5 + If nProcessHandle = 0 .head 6 - Return FALSE .head 5 - Set nBlocks = 8 .head 5 - Set nBlocksNeeded = 96 .head 5 + While nBlocks <= nBlocksNeeded .head 6 - Set nBlocks = nBlocks*2 .head 6 - Set bOk = SalStrSetBufferLength( sBuffer, (nBlocks*4) ) .head 6 - Set nMemBlock = CStructAllocFarMem( nBlocks*4 ) .head 6 - Set nRet = CStructCopyToFarMem( nMemBlock, sBuffer, (nBlocks*4) ) .head 6 - Set bOk = EnumProcessModules( nProcessHandle, nMemBlock, nBlocks, nBlocksNeeded ) .head 6 - Set nRet = CStructCopyFromFarMem( nMemBlock, sBuffer, (nBlocks*4) ) .head 6 - Set nRet = CStructFreeFarMem( nMemBlock ) .head 5 - Set nCounter = 0 .head 5 + While nCounter < (nBlocksNeeded/4) .head 6 - Set nModuleID = CStructGetLong( sBuffer, (nCounter*4 ) ) .head 6 - Set nSize = 200 .head 6 - Set bOk = SalStrSetBufferLength( sModuleName, nSize ) .head 6 - Set nRet = GetModuleFileNameExA( nProcessHandle, nModuleID, sModuleName, nSize ) .head 6 - Set sModules[nCounter] = sModuleName .head 6 - Set nCounter = nCounter + 1 .head 5 - Return TRUE .head 3 + Function: SalSysGetModuleName .head 4 - Description: author: Petra Zamburek based on a sample from Daniel Mock posted November 1999 date: 2000-11-27 version 1.0 desc: Returns a Moduel names for a processID .head 4 + Returns .head 5 - Boolean: .head 4 + Parameters .head 5 - Number: nProcessID .head 5 - Receive String: sModule .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: nRet .head 5 - Boolean: bOk .head 5 - Number: nCounter .head 5 - Number: nProcessHandle .head 5 - ! .head 5 - String: sBuffer .head 5 - Number: nProcessBlocks .head 5 - Number: nBlocks .head 5 - Number: nBlocksNeeded .head 5 - Number: nMemBlock .head 5 - Number: nSize .head 5 - Number: nModuleID .head 5 - String: sModuleName .head 4 + Actions .head 5 - Set sModuleName = '' .head 5 - Set nProcessHandle = OpenProcess( PROCESS_ALL_ACCESS, FALSE, nProcessID ) .head 5 + If nProcessHandle = 0 .head 6 - Set sModule = '' .head 6 - Return FALSE .head 5 - Set nSize = 4 .head 5 - Set nBlocks = nSize .head 5 - Set bOk = SalStrSetBufferLength( sBuffer, (nSize) ) .head 5 - Set nMemBlock = CStructAllocFarMem( nSize ) .head 5 - Set nRet = CStructCopyToFarMem( nMemBlock, sBuffer, (nSize) ) .head 5 - Set bOk = EnumProcessModules( nProcessHandle, nMemBlock, nBlocks, nBlocksNeeded ) .head 5 - Set nRet = CStructCopyFromFarMem( nMemBlock, sBuffer, nSize ) .head 5 - Set bOk = CStructFreeFarMem( nMemBlock ) .head 5 - Set nModuleID = CStructGetLong( sBuffer, 0 ) .head 5 - Set nSize = 200 .head 5 - Set bOk = SalStrSetBufferLength( sModuleName, nSize ) .head 5 - Set nRet = GetModuleFileNameExA( nProcessHandle, nModuleID, sModuleName, nSize ) .head 5 - ! .head 5 - Set nRet = GetLastError () .head 5 - ! .head 5 - Set sModule = sModuleName .head 5 - Call CloseHandle( nProcessHandle ) .head 5 - Return TRUE .head 3 + Function: SalSysRegistryRead .head 4 - Description: author: R. J. Burke (i think) date: version: desc: This function reads a value from the registry. Returns TRUE, if the value was found Returns FALSE, in all other cases allowed RootKeys: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_PERFORMANCE_DAT HKEY_CURRENT_COFIG HKEY_DYN_DATA example: If SalSysRegistryRead(HKEY_LOCAL_MACHINE,'SOFTWARE\\Centura','TestItem',sValue) .. all Ok .head 4 + Returns .head 5 - Boolean: .head 4 + Parameters .head 5 - ! rootkey of the registry .head 5 + Number: pnRegistryRootKey .head 6 - ! allowed RootKeys: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_PERFORMANCE_DAT HKEY_CURRENT_COFIG HKEY_DYN_DATA .head 5 - ! subkey .head 5 + String: psRegistrySubKey .head 6 - ! subkey, somthing like 'SOFTWARE\\Centura' .head 5 - ! item .head 5 + String: psRegistryItem .head 6 - ! the itemname e.g. WindowPosX .head 5 - ! variable for the result .head 5 - Receive String: psRegistryData .head 4 - Static Variables .head 4 + Local variables .head 5 - ! handle of the registry-key .head 5 - Number: lnRegistrySubKey .head 5 - Number: lnLength .head 5 - Number: lnError .head 4 + Actions .head 5 - ! open the registry .head 5 - Set lnError = RegOpenKeyExA (pnRegistryRootKey, psRegistrySubKey, 0, REG_KEY_READ, lnRegistrySubKey) .head 5 - ! check, if the registry-key was not found .head 5 + If lnError = REG_ERR_FILE_NOT_FOUND .head 6 - Return FALSE .head 5 + If lnError != REG_ERR_SUCCESS .head 6 - Return FALSE .head 5 - ! initialize buffer with a defaul-value .head 5 - Set lnLength = 50 .head 5 - Call SalStrSetBufferLength (psRegistryData, lnLength + 1) .head 5 - ! read the value .head 5 - Set lnError = RegQueryValueExA (lnRegistrySubKey, psRegistryItem, NUMBER_Null, 0, psRegistryData, lnLength) .head 5 - ! if the buffer was too small, the required length for the buffer is in _nLength and the read can be repeated .head 5 + If lnError = REG_ERR_MORE_DATA .head 6 - Call SalStrSetBufferLength (psRegistryData, lnLength + 1) .head 6 - Set lnError = RegQueryValueExA (lnRegistrySubKey, psRegistryItem, NUMBER_Null, 0, psRegistryData, lnLength) .head 5 - ! check, if the registry-key was not found .head 5 + If lnError = REG_ERR_FILE_NOT_FOUND .head 6 - Return FALSE .head 5 + If lnError != REG_ERR_SUCCESS .head 6 - ! close registry .head 6 - Call RegCloseKey (lnRegistrySubKey) .head 6 - Return FALSE .head 5 - ! close registry .head 5 - Set lnError = RegCloseKey (lnRegistrySubKey) .head 5 + If lnError != REG_ERR_SUCCESS .head 6 - Return FALSE .head 5 - Return TRUE .head 3 + Function: SalSysRegistryWrite .head 4 - Description: autor: R. J. Burke (i think) date: version: desc: This function writes a value to the registry. Returns TRUE, if the value was written Returns FALSE, in all other cases allowed RootKeys: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_PERFORMANCE_DAT HKEY_CURRENT_COFIG HKEY_DYN_DATA example: If SalSysRegistryWrite(HKEY_LOCAL_MACHINE,'SOFTWARE\\Centura','TestItem','Test') .. all Ok .head 4 + Returns .head 5 - Boolean: .head 4 + Parameters .head 5 - ! rootkey of the registry .head 5 + Number: pnRegistryRootKey .head 6 - ! allowed RootKeys: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_PERFORMANCE_DAT HKEY_CURRENT_COFIG HKEY_DYN_DATA .head 5 - ! subkey .head 5 + String: psRegistrySubKey .head 6 - ! subkey, somthing like 'SOFTWARE\\Centura' .head 5 - ! item .head 5 + String: psRegistryItem .head 6 - ! the itemname e.g. WindowPosX .head 5 - ! value .head 5 - String: psRegistryData .head 5 - ! the value .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: lnRegistryKey .head 5 - Number: lnLength .head 5 - Number: lnError .head 4 + Actions .head 5 - ! if the key doesn't exist: create key .head 5 - Set lnError = RegCreateKeyA (pnRegistryRootKey, psRegistrySubKey, lnRegistryKey) .head 5 + If lnError != REG_ERR_SUCCESS .head 6 - Return FALSE .head 5 - ! write value to the regisry .head 5 - Set lnLength = SalStrLength (psRegistryData) + 1 .head 5 - Set lnError = RegSetValueExA (lnRegistryKey, psRegistryItem, NUMBER_Null, 1, psRegistryData, lnLength) .head 5 + If lnError != REG_ERR_SUCCESS .head 6 - ! close registry .head 6 - Call RegCloseKey (lnRegistryKey) .head 6 - Return FALSE .head 5 - ! close registry .head 5 - Set lnError = RegCloseKey (lnRegistryKey) .head 5 + If lnError != REG_ERR_SUCCESS .head 6 - Return FALSE .head 5 - Return TRUE .head 3 + Function: SalSysRegistryDeleteItem .head 4 - Description: autor: R. J. Burke (i think) date: version: desc: This function deletes a item and itґs avlue from the registry. Returns TRUE, if the value was deleted allowed RootKeys: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_PERFORMANCE_DAT HKEY_CURRENT_COFIG HKEY_DYN_DATA .head 4 + Returns .head 5 - Boolean: .head 4 + Parameters .head 5 + Number: pnRegistryRootKey .head 6 - ! allowed RootKeys: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_PERFORMANCE_DAT HKEY_CURRENT_COFIG HKEY_DYN_DATA .head 5 + String: psRegistrySubKey .head 6 - ! subkey, somthing like 'SOFTWARE\\Centura' .head 5 + String: psRegistryItem .head 6 - ! the itemname e.g. WindowPosX .head 4 - Static Variables .head 4 + Local variables .head 5 - ! handle of the registry-key .head 5 - Number: lnRegistrySubKey .head 5 - Number: lnLength .head 5 - Number: lnError .head 4 + Actions .head 5 - ! open the registry .head 5 - Set lnError = RegOpenKeyExA (pnRegistryRootKey, psRegistrySubKey, 0, 0x000E000F, lnRegistrySubKey) .head 5 - ! check, if the registry-key was not found .head 5 + If lnError = REG_ERR_FILE_NOT_FOUND .head 6 - Return FALSE .head 5 + If lnError != REG_ERR_SUCCESS .head 6 - Return FALSE .head 5 - ! delete the item .head 5 - Set lnError = RegDeleteValueA (lnRegistrySubKey, psRegistryItem) .head 5 - Set lnError = RegCloseKey (lnRegistrySubKey) .head 5 + If lnError != REG_ERR_SUCCESS .head 6 - Return FALSE .head 5 - Return TRUE .head 3 + Function: SalSysGetComputerName .head 4 - Description: author: ??? date: ??? version: 1.01 desc: Returns the computername example: Set sComputername = SalSysGetComputerName() .head 4 + Returns .head 5 - String: .head 4 - Parameters .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: nSize .head 5 - String: sCOMPUTERNAME .head 4 + Actions .head 5 - Set nSize = 250 .head 5 - Call SalStrSetBufferLength( sCOMPUTERNAME, nSize + 1 ) .head 5 - Call GetComputerNameA( sCOMPUTERNAME, nSize ) .head 5 - Set sCOMPUTERNAME = SalStrLeftX( sCOMPUTERNAME, nSize ) .head 5 + If sCOMPUTERNAME = STRING_Null .head 6 - ! When API has failed check the environemt settings .head 6 - Set sCOMPUTERNAME = VisDosGetEnvString( 'COMPUTERNAME' ) .head 5 - Return sCOMPUTERNAME .head 3 + Function: SalSysGetUserName .head 4 - Description: author: taken from C. Astor sample date: ??? version: 1.00 desc: Returns the username .head 4 + Returns .head 5 - String: .head 4 - Parameters .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: nSize .data INHERITPROPS 0000: 0100 .enddata .head 5 - String: sBuffer .data INHERITPROPS 0000: 0100 .enddata .head 4 + Actions .head 5 - Set nSize = 50 .head 5 - Call SalStrSetBufferLength( sBuffer, nSize ) .head 5 - Call GetUserNameA( sBuffer, nSize ) .head 5 - Return sBuffer .head 3 + Function: SalSysGetIP .head 4 - Description: author: ??? (extracted from winsock.apl) date: ??? version: desc: Returns the IP address of a given hostname example: Set lsIP = SalSysGetIP('MyComputer_NT') .head 4 + Returns .head 5 - String: .head 4 + Parameters .head 5 - String: spHostName .head 4 - Static Variables .head 4 + Local variables .head 5 - ! .head 5 - Number: nLowVersion .head 5 - Number: nHighVersion .head 5 - Number: nMaxSockets .head 5 - Number: nMaxUp .head 5 - Number: nlpVendorInfo .head 5 - String: sSystemStatus .head 5 - String: sDescription .head 5 - String: sNull .head 5 - ! .head 5 - Number: nStructPointer .head 5 - String: sIP .head 5 - String: spMem .head 5 - String: sStr .head 5 - ! .head 5 - Number: nFarPointer .head 5 - Number: nLen .head 4 + Actions .head 5 - ! Init .head 5 + If WSAStartup(257,nLowVersion,nHighVersion, sDescription,sNull,sSystemStatus, nMaxSockets,nMaxUp,nlpVendorInfo ) != 0 .head 6 - Return '' .head 5 - ! .head 5 - Set nStructPointer = gethostbyname( spHostName ) .head 5 + If nStructPointer = NUMBER_Null or nStructPointer = 0 .head 6 - ! Call SalMessageBox( 'Connection failed - ' || SalNumberToStrX( WSAGetLastError( ), 0 ), 'Error', 0 ) .head 6 - Return '' .head 5 - ! .head 5 - Call SalStrSetBufferLength( spMem, 1000 ) .head 5 - Call CStructCopyFromFarMem( nStructPointer, spMem, 1000 ) .head 5 - ! .head 5 - Set nFarPointer = CStructGetFarPointer( spMem, 12 ) .head 5 - ! .head 5 - Call SalStrSetBufferLength( sStr, 4 ) .head 5 - Call CStructCopyFromFarMem( nFarPointer, sStr, 4 ) .head 5 - Set nFarPointer = CStructGetFarPointer( sStr, 0 ) .head 5 - Call SalStrSetBufferLength( sStr, 4 ) .head 5 - Call CStructCopyFromFarMem( nFarPointer, sStr, 4 ) .head 5 - Set nFarPointer = CStructGetFarPointer( sStr, 0 ) .head 5 - ! .head 5 - Set nFarPointer = inet_ntoa( nFarPointer ) .head 5 - Set nLen = lstrlen( nFarPointer ) + 1 .head 5 - Call SalStrSetBufferLength( sIP, nLen ) .head 5 - Call CStructCopyFromFarMem( nFarPointer, sIP, nLen ) .head 5 - ! Close .head 5 - Call WSACleanup( ) .head 5 - ! .head 5 - Return sIP .head 3 + Function: SalSysGetDriveInfo .head 4 - Description: author: Philippe Gibone date: 10/07/2002 version 1.0 desc: Retrieves Disks info example: .head 4 + Returns .head 5 - Number: .head 4 + Parameters .head 5 - FunctionalVar: aDrive[*] .head 6 - Class: sDriveInfo .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: nLogicalDrive .head 5 - String: sDriveListe[*] .head 5 - Number: i .head 5 - String: sSerial .head 5 - ! Spйcifique GetDiskFreeSpaceEx .head 5 - Number: nFreeCaller .head 5 - String: sFree .head 5 - String: sTotal .head 5 - Number: nTotal .head 5 - Number: nFree .head 5 - Number: nTemp .head 5 - ! Spйcifique GetVolumeInformation .head 5 - String: sLabel .head 5 - Number: nLabel .head 5 - Number: nSerial .head 5 - Number: nComponent .head 5 - Number: nFlags .head 5 - String: sFileSystem .head 5 - Number: nFileSystem .head 4 + Actions .head 5 - Set nLogicalDrive =VisDosEnumDrives(sDriveListe) .head 5 - Set i = 0 .head 5 - Set nTotal = CStructAllocFarMem( 8 ) .head 5 - Set nFree = CStructAllocFarMem( 8 ) .head 5 - Set nFreeCaller = CStructAllocFarMem( 8 ) .head 5 + Loop .head 6 + If i >= nLogicalDrive .head 7 - Break .head 6 - Set aDrive[i].nDriveType = VisDosGetDriveType(sDriveListe[i]) .head 6 - Set sLabel = "" .head 6 - Set sFileSystem = "" .head 6 - Set nSerial = 0 .head 6 - Set nComponent = 0 .head 6 - Set nFlags = 0 .head 6 - Set aDrive[i].nSize = 0 .head 6 - Set aDrive[i].nFree = 0 .head 6 - Set nLabel = 100 .head 6 - Set nFileSystem =100 .head 6 - Call SalStrSetBufferLength(sLabel, nLabel) .head 6 - Call SalStrSetBufferLength(sFileSystem, nFileSystem) .head 6 - Set aDrive[i].sLetter = sDriveListe[i] .head 6 + If GetVolumeInformationA( sDriveListe[i] || "\\", sLabel, nLabel, nSerial, nComponent, nFlags, sFileSystem, nFileSystem) .head 7 - Set aDrive[i].sLabel = sLabel .head 7 - Set aDrive[i].sFileSystem = sFileSystem .head 6 + Else .head 7 - Set aDrive[i].sLabel = "" .head 7 - Set aDrive[i].sFileSystem = "" .head 6 - Call SalStrSetBufferLength(sFree, 8) .head 6 - Call SalStrSetBufferLength(sTotal, 8) .head 6 - Call CStructPutLong(sTotal, 0, 0) .head 6 - Call CStructPutLong(sTotal, 4, 0) .head 6 - Call GetDiskFreeSpaceExA( sDriveListe[i], nFreeCaller, nTotal , nFree) .head 6 - Call CStructCopyFromFarMem( nTotal, sTotal, 8 ) .head 6 - Call CStructCopyFromFarMem( nFree, sFree, 8 ) .head 6 - Set nTemp = CStructGetLong(sTotal, 0) / 1024 / 1024 .head 6 + If nTemp < 0 .head 7 - Set nTemp = 4096 + nTemp .head 6 - Set aDrive[i].nSize = nTemp + CStructGetLong(sTotal, 4) * 4096 .head 6 - Set nTemp = CStructGetLong(sFree, 0) / 1024 / 1024 .head 6 + If nTemp < 0 .head 7 - Set nTemp = 4096 + nTemp .head 6 - Set aDrive[i].nFree = nTemp + CStructGetLong(sFree, 4) * 4096 .head 6 - Set aDrive[i].nSerial = nSerial .head 6 - Set sSerial = '00000000' || SalNumberToHex(nSerial) .head 6 - Set aDrive[i].sSerial = SalStrMidX(sSerial, SalStrLength(sSerial) - 8, 4) || '-' || SalStrRightX(sSerial, 4) .head 6 - Set aDrive[i].nFileNameLength = nComponent .head 6 - Set aDrive[i].nFlags = nFlags .head 6 - Set aDrive[i].sFlags = SalNumberToHex(nFlags) .head 6 + Select Case aDrive[i].nDriveType .head 7 + Case DRIVE_Floppy .head 8 - Set aDrive[i].sDriveType = "Floppy" .head 8 - Break .head 7 + Case DRIVE_Fixed .head 8 - Set aDrive[i].sDriveType = "Fixed Drive" .head 8 - Break .head 7 + Case DRIVE_Network .head 8 - Set aDrive[i].sDriveType = "Network Drive" .head 8 - Break .head 7 + Case DRIVE_CDROM .head 8 - Set aDrive[i].sDriveType = "CD-ROM" .head 8 - Break .head 7 + Case DRIVE_RAM .head 8 - Set aDrive[i].sDriveType = "RAM Drive" .head 8 - Break .head 7 + Default .head 8 - Set aDrive[i].sDriveType = "Unknown" .head 8 - Break .head 6 - Set i = i + 1 .head 5 - Call CStructFreeFarMem( nTotal ) .head 5 - Call CStructFreeFarMem( nFree ) .head 5 - Call CStructFreeFarMem( nFreeCaller ) .head 5 - Return nLogicalDrive .head 3 + Function: SalSysGetPrinterInfo .head 4 - Description: author: Philippe Gibone date: 10/07/2002 version 1.0 desc: Retrieves Printers info example: .head 4 + Returns .head 5 - Number: .head 4 + Parameters .head 5 - FunctionalVar: aPrinterInfo[*] .head 6 - Class: sPrinterInfo .head 4 - Static Variables .head 4 + Local variables .head 5 - String: sPrinterEnum .head 5 - Number: nNeed .head 5 - Number: nReturned .head 5 - Number: nAdresse .head 5 - String: sPrinterName .head 5 - String: sPort .head 5 - Number: i .head 5 - Number: nTotal .head 4 + Actions .head 5 - Call SalStrSetBufferLength(sPrinterEnum, 1000) .head 5 - Call EnumPrintersA( 2, 0, 5, sPrinterEnum, 0, nNeed, nReturned ) .head 5 + If nNeed = 0 .head 6 - Return 0 .head 5 + Else .head 6 - Call EnumPrintersA( 2, 0, 5, sPrinterEnum, nNeed, nNeed, nReturned ) .head 6 - Set i = 0 .head 6 + Loop .head 7 + If i >= nReturned .head 8 - Break .head 7 - Set nAdresse = CStructGetFarPointer( sPrinterEnum, 20 * i ) .head 7 + If nAdresse != 0 .head 8 - Call SalStrSetBufferLength(sPrinterName, 1000) .head 8 - Call CStructCopyFromFarMem( nAdresse, sPrinterName, 1000 ) .head 8 - Set aPrinterInfo[i].sPrinterName = SalStrLeftX(sPrinterName, SalStrLength(sPrinterName)) .head 7 - Set nAdresse = CStructGetFarPointer( sPrinterEnum, 20 * i + 4 ) .head 7 + If nAdresse != 0 .head 8 - Call SalStrSetBufferLength(sPort, 1000) .head 8 - Call CStructCopyFromFarMem( nAdresse, sPort, 1000 ) .head 8 - Set aPrinterInfo[i].sPort = SalStrLeftX(sPort, SalStrLength(sPort)) .head 7 - Set aPrinterInfo[i].nAttribute = CStructGetLong( sPrinterEnum, 20 * i + 8 ) .head 7 - Set aPrinterInfo[i].sAttribute = "" .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_DEFAULT .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "DEFAULT + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_SHARED .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "SHARED + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_NETWORK .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "NETWORK +" .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_QUEUED .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "QUEUED + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_DIRECT .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "DIRECT + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_HIDDEN .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "HIDDEN + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_LOCAL .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "LOCAL + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_ENABLE_DEVQ .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "ENABLE_DEVQ + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_KEEPPRINTEDJOBS .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "KEEPPRINTEDJOBS + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_COMPLETE_FIRST .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "DO_COMPLETE_FIRST + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_WORK_OFFLINE .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "WORK_OFFLINE + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_ENABLE_BIDI .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "ENABLE_BIDI + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_RAW_ONLY .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "RAW_ONLY + " .head 7 + If aPrinterInfo[i].nAttribute & PRINTER_ATT_PUBLISHED .head 8 - Set aPrinterInfo[i].sAttribute = aPrinterInfo[i].sAttribute || "PUBLISHED + " .head 7 - Set aPrinterInfo[i].sAttribute = '0x' || SalNumberToHex(aPrinterInfo[i].nAttribute) || ' = ' || SalStrLeftX(aPrinterInfo[i].sAttribute, SalStrLength(aPrinterInfo[i].sAttribute) - 3) .head 7 - Set i = i + 1 .head 6 - Set nTotal = nReturned .head 5 - Call SalStrSetBufferLength(sPrinterEnum, 1000) .head 5 - Set nNeed = 0 .head 5 - Set nReturned = 0 .head 5 - Call EnumPrintersA( 4, 0, 4, sPrinterEnum, 0, nNeed, nReturned ) .head 5 + If nNeed = 0 .head 6 - Return nTotal .head 5 + Else .head 6 - Call EnumPrintersA( 4, 0, 4, sPrinterEnum, nNeed, nNeed, nReturned ) .head 6 - Set i = 0 .head 6 + Loop .head 7 + If i >= nReturned .head 8 - Break .head 7 - Set nAdresse = CStructGetFarPointer( sPrinterEnum, 12 * i ) .head 7 + If nAdresse != 0 .head 8 - Call SalStrSetBufferLength(sPrinterName, 1000) .head 8 - Call CStructCopyFromFarMem( nAdresse, sPrinterName, 1000 ) .head 8 - Set aPrinterInfo[nTotal + i].sPrinterName = SalStrLeftX(sPrinterName, SalStrLength(sPrinterName)) .head 7 - Set nAdresse = CStructGetFarPointer( sPrinterEnum, 12 * i + 4 ) .head 7 + If nAdresse != 0 .head 8 - Call SalStrSetBufferLength(sPort, 1000) .head 8 - Call CStructCopyFromFarMem( nAdresse, sPort, 1000 ) .head 8 - Set aPrinterInfo[nTotal + i].sServerName = SalStrLeftX(sPort, SalStrLength(sPort)) .head 7 - Set aPrinterInfo[nTotal + i].nAttribute = CStructGetLong( sPrinterEnum, 12 * i + 8 ) .head 7 - Set aPrinterInfo[nTotal + i].sAttribute = "" .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_DEFAULT .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "DEFAULT + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_SHARED .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "SHARED + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_NETWORK .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "NETWORK + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_QUEUED .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "QUEUED + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_DIRECT .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "DIRECT + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_HIDDEN .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "HIDDEN + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_LOCAL .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "LOCAL + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_ENABLE_DEVQ .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "ENABLE_DEVQ + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_KEEPPRINTEDJOBS .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "KEEPPRINTEDJOBS + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_COMPLETE_FIRST .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "DO_COMPLETE_FIRST + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_WORK_OFFLINE .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "WORK_OFFLINE + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_ENABLE_BIDI .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "ENABLE_BIDI + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_RAW_ONLY .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "RAW_ONLY + " .head 7 + If aPrinterInfo[nTotal + i].nAttribute & PRINTER_ATT_PUBLISHED .head 8 - Set aPrinterInfo[nTotal + i].sAttribute = aPrinterInfo[nTotal + i].sAttribute || "PUBLISHED + " .head 7 - Set aPrinterInfo[nTotal + i].sAttribute = '0x' || SalNumberToHex(aPrinterInfo[nTotal + i].nAttribute) || ' = ' || SalStrLeftX(aPrinterInfo[nTotal + i].sAttribute, SalStrLength(aPrinterInfo[nTotal + i].sAttribute) - 3) .head 7 - Set i = i + 1 .head 6 - Return nTotal + nReturned .head 3 + Function: SalSysGetDisplayInfo .head 4 - Description: author: Philippe Gibone date: 10/07/2002 version 1.0 desc: Retrieves Display info example: .head 4 + Returns .head 5 - Number: .head 4 + Parameters .head 5 - FunctionalVar: aDisplayInfo[*] .head 6 - Class: sDisplayInfo .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: nHorizontalSet .head 5 - Number: nVerticalSet .head 5 - Number: nBitPerPixelSet .head 5 - String: sDisplayEnum .head 5 - Number: i .head 5 - Number: hDC .head 4 + Actions .head 5 - Set hDC = GetDC( hWndForm ) .head 5 - Set nHorizontalSet = GetDeviceCaps( hDC, HORZRES ) .head 5 - Set nVerticalSet = GetDeviceCaps( hDC, VERTRES ) .head 5 - Set nBitPerPixelSet = GetDeviceCaps( hDC, BITSPIXEL ) .head 5 - Call ReleaseDC(hWndForm, hDC) .head 5 - Set i = 0 .head 5 - Call SalStrSetBufferLength(sDisplayEnum, 1000) .head 5 + While EnumDisplaySettingsA( 0, i, sDisplayEnum) .head 6 - Set aDisplayInfo[i].nBitsPerPixel = CStructGetLong(sDisplayEnum, 104) .head 6 - Set aDisplayInfo[i].nHorizontal = CStructGetLong(sDisplayEnum, 108) .head 6 - Set aDisplayInfo[i].nVertical = CStructGetLong(sDisplayEnum, 112) .head 6 - Set aDisplayInfo[i].nFrequency = CStructGetLong(sDisplayEnum, 120) .head 6 + If aDisplayInfo[i].nBitsPerPixel = nBitPerPixelSet AND aDisplayInfo[i].nHorizontal = nHorizontalSet AND aDisplayInfo[i].nVertical = nVerticalSet .head 7 - Set aDisplayInfo[i].bCurrent = TRUE .head 6 + Else .head 7 - Set aDisplayInfo[i].bCurrent = FALSE .head 6 - Set i = i + 1 .head 5 - Return i .head 3 + Function: SalSysGetPortInfo .head 4 - Description: author: Philippe Gibone date: 10/01/2003 version 1.0 desc: Retrieves Ports info .head 4 + Returns .head 5 - Number: .head 4 + Parameters .head 5 - FunctionalVar: aPortInfo[*] .head 6 - Class: sPortInfo .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: nNeeded .head 5 - Number: nReturned .head 5 - Number: i .head 5 - String: sPortType .head 5 - String: sBuffer .head 5 - Number: nSize .head 5 - Number: nLength .head 5 - Number: nAddress .head 5 - String: sTemp .head 4 + Actions .head 5 - Call aPortInfo[0].Init() .head 5 - Set nSize = sPortInfo.nSize .head 5 - Call GetPortNumber( 0, 2, 0, 0, nNeeded, nReturned ) .head 5 + If nNeeded .head 6 - Call SalStrSetBufferLength( sBuffer, nNeeded + 1 ) .head 6 - Call EnumPort( 0, 2, sBuffer, nNeeded, nNeeded, nReturned ) .head 6 - Set i = 0 .head 6 + While i < nReturned .head 7 - Set aPortInfo[i].sPortName = '' .head 7 - Set aPortInfo[i].sMonitorName = '' .head 7 - Set aPortInfo[i].sDescription = '' .head 7 - Set aPortInfo[i].nPortType = 0 .head 7 - Set aPortInfo[i].nReserved = 0 .head 7 - Set aPortInfo[i].sPortType = '' .head 7 - Set nAddress = CStructGetLong(sBuffer, i * nSize) .head 7 - Set nLength = lstrlen(nAddress) .head 7 + If nLength != 0 .head 8 - Call SalStrSetBufferLength( sTemp, nLength + 1) .head 8 - Call CStructCopyFromFarMem( nAddress, sTemp, nLength + 1 ) .head 8 - Set aPortInfo[i].sPortName = sTemp .head 7 - Set nAddress = CStructGetLong(sBuffer, i * nSize + 4) .head 7 - Set nLength = lstrlen(nAddress) .head 7 + If nLength != 0 .head 8 - Call SalStrSetBufferLength( sTemp, nLength + 1) .head 8 - Call CStructCopyFromFarMem( nAddress, sTemp, nLength + 1 ) .head 8 - Set aPortInfo[i].sMonitorName = sTemp .head 7 - Set nAddress = CStructGetLong(sBuffer, i * nSize + 8) .head 7 - Set nLength = lstrlen(nAddress) .head 7 + If nLength != 0 .head 8 - Call SalStrSetBufferLength( sTemp, nLength + 1) .head 8 - Call CStructCopyFromFarMem( nAddress, sTemp, nLength + 1 ) .head 8 - Set aPortInfo[i].sDescription = sTemp .head 7 - Set aPortInfo[i].nPortType = CStructGetLong(sBuffer, i * nSize + 12) .head 7 - Set aPortInfo[i].nReserved = CStructGetLong(sBuffer, i * nSize + 16) .head 7 + If aPortInfo[i].nPortType & PORT_TYPE_WRITE .head 8 - Set aPortInfo[i].sPortType = 'Write & ' .head 7 + If aPortInfo[i].nPortType & PORT_TYPE_READ .head 8 - Set aPortInfo[i].sPortType = aPortInfo[i].sPortType || 'Read & ' .head 7 + If aPortInfo[i].nPortType & PORT_TYPE_REDIRECTED .head 8 - Set aPortInfo[i].sPortType = aPortInfo[i].sPortType || 'Redirected & ' .head 7 + If aPortInfo[i].nPortType & PORT_TYPE_NET_ATTACHED .head 8 - Set aPortInfo[i].sPortType = aPortInfo[i].sPortType || 'Network & ' .head 7 - Set aPortInfo[i].sPortType = SalStrLeftX(aPortInfo[i].sPortType, SalStrLength(aPortInfo[i].sPortType) - 2) .head 7 - Set i = i + 1 .head 5 - Return nReturned .head 3 + Function: SalSysGetOSVersion .head 4 - Description: author: © Christian Astor - Adresse E-mail : castorix@club-internet.fr - Adresse ICQ (UIN) : 4396797 date: ® ??? version: 1.00 desc: Returns the version of the OS. parameter: String: sVersion is returned, contaiing OS information Return Value:a number, defined as constant. Possible return values: VERSION_OS_95 = 0 VERSION_OS_95_OSR1 = 1 VERSION_OS_95_OSR2 = 2 VERSION_OS_95_OSR21 = 3 VERSION_OS_95_OSR25 = 4 VERSION_OS_98 = 5 VERSION_OS_98_SE = 6 VERSION_OS_NT_351 = 7 VERSION_OS_NT_4 = 8 VERSION_OS_2000 = 9 VERSION_OS_ME = 10 VERSION_OS_WHISTLER = 11 example: Select Case SalSysGetOSVersion( sVersion ) Case VERSION_OS_95 ... Break Case VERSION_OS_2000 ... Break .head 4 + Returns .head 5 - Number: nVersion .head 4 + Parameters .head 5 + Receive String: sVersion .head 6 - ! the version string as retrun value .head 4 - Static Variables .head 4 + Local variables .head 5 - Number: nStructSize .head 5 - Number: nMajorVersion .head 5 - Number: nMinorVersion .head 5 - Number: nBuildNumber .head 5 - Number: nPlatformId .head 5 - String: sCSDVersion .head 5 - String: sCSD .head 4 + Actions .head 5 - Set nStructSize = 156 .head 5 - Call SalStrSetBufferLength( sCSDVersion,128 ) .head 5 - Call GetVersionExA( nStructSize, nMajorVersion, nMinorVersion, nBuildNumber, nPlatformId, sCSDVersion ) .head 5 - Set sVersion =SalNumberToStrX( nMajorVersion, 0 ) || "." || SalStrRepeatX( "0", SalStrLength(SalNumberToStrX( nMinorVersion, 0 ) )) || SalNumberToStrX( nMinorVersion, 0 ) || "." || SalNumberToStrX( nBuildNumber & 0xFFFF, 0 ) .head 5 - Call SalStrSetBufferLength( sCSD,129 ) .head 5 - Call CStructGetString( sCSDVersion, 0, SalStrLength(sCSDVersion) + 1, sCSD ) .head 5 - Set sVersion = sVersion || sCSD .head 5 + If nPlatformId = VER_PLATFORM_WIN32_NT .head 6 + If nMajorVersion = 3 and nMinorVersion = 51 .head 7 - Return VERSION_OS_NT_351 .head 6 + Else If nMajorVersion = 4 and nMinorVersion = 0 .head 7 - Return VERSION_OS_NT_4 .head 6 + Else If nMajorVersion = 5 and nMinorVersion = 0 .head 7 - Return VERSION_OS_2000 .head 6 + Else If nMajorVersion = 5 and nMinorVersion = 1 .head 7 - Return VERSION_OS_WHISTLER .head 6 + Else .head 7 - Call SalMessageBox('don\'t know, what kind of WinOs mayber WinXP?','STOP',MB_IconStop) .head 7 - Return 0 .head 5 + Else If nPlatformId = VER_PLATFORM_WIN32_WINDOWS .head 6 + If nMajorVersion = 4 and nMinorVersion = 0 .head 7 + If sCSDVersion = " A" .head 8 - Return VERSION_OS_95_OSR1 .head 7 + Else If sCSDVersion = " B" .head 8 - ! If SalNumberLow(nTemp1) = 1111 .head 8 - Return VERSION_OS_95_OSR2 .head 7 + Else .head 8 - Return VERSION_OS_95 .head 6 + Else If nMajorVersion = 4 and nMinorVersion = 3 .head 7 + If sCSDVersion = " B" .head 8 - Return VERSION_OS_95_OSR21 .head 7 + Else If sCSDVersion = " C" .head 8 - Return VERSION_OS_95_OSR25 .head 6 + Else If nMajorVersion = 4 and nMinorVersion = 10 .head 7 + If sCSDVersion = " A" .head 8 - Return VERSION_OS_98_SE .head 7 + Else .head 8 - Return VERSION_OS_98 .head 6 + Else If nMajorVersion = 4 and nMinorVersion = 90 .head 7 - Return VERSION_OS_ME .head 3 + Function: SalSysPing .head 4 - Description: author: Stefane Beltrame?? (posted by him) date: 28.07.2003 version 1.0 desc: Pings another computer and returns a boolean if successful, or not. .head 4 + Returns .head 5 - Boolean: .head 4 + Parameters .head 5 - String: p_sTarget .head 5 - Number: p_nTimeout .head 4 - Static Variables .head 4 + Local variables .head 5 - Boolean: bOk .head 5 - Number: nTarget .head 5 - ! .head 5 - Number: nWSADataPtr .head 5 - Boolean: bWSAStartupOk .head 5 - ! .head 5 - Number: nIcmpHandle .head 5 - Number: nRet .head 5 - ! .head 5 - Number: nReplyBufferPtr .head 5 - Number: nLowVersion .data INHERITPROPS 0000: 0100 .enddata .head 5 - Number: nHighVersion .data INHERITPROPS 0000: 0100 .enddata .head 5 - String: sDescription .data INHERITPROPS 0000: 0100 .enddata .head 5 - String: sNull .data INHERITPROPS 0000: 0100 .enddata .head 5 - String: sSystemStatus .data INHERITPROPS 0000: 0100 .enddata .head 5 - Number: nMaxSockets .data INHERITPROPS 0000: 0100 .enddata .head 5 - Number: nMaxUp .data INHERITPROPS 0000: 0100 .enddata .head 5 - Number: nlpVendorInfo .data INHERITPROPS 0000: 0100 .enddata .head 4 + Actions .head 5 - Set bOk = TRUE .head 5 - ! Translate IP addr string to number .head 5 + If bOk .head 6 - Set nTarget = inet_addr(p_sTarget) .head 6 - Set bOk = (nTarget != 0xFFFFFFFF) .head 5 - ! .head 5 - ! Allocate WSAData memory for WSAStartup() .head 5 + If bOk .head 6 - Set nWSADataPtr = CStructAllocFarMem(526) .head 6 - Set bOk = (nWSADataPtr != 0) .head 5 - ! Call WSAStartup .head 5 + If bOk .head 6 - Set bWSAStartupOk = (WSAStartup(0x0101,nLowVersion,nHighVersion, sDescription,sNull,sSystemStatus, nMaxSockets,nMaxUp,nlpVendorInfo) = 0) .head 6 - ! Set bWSAStartupOk = (WSAStartup(0x0101, nWSADataPtr) = 0) .head 6 - ! (257,nLowVersion,nHighVersion, sDescription,sNull,sSystemStatus, nMaxSockets,nMaxUp,nlpVendorInfo ) .head 6 - Set bOk = bWSAStartupOk .head 5 - ! .head 5 - ! Allocate ICMP_ECHO_REPLY memory for IcmpSendEcho() .head 5 + If bOk .head 6 - Set nReplyBufferPtr = CStructAllocFarMem(256) .head 6 - Set bOk = (nReplyBufferPtr != 0) .head 5 - ! Create IcmpHandle .head 5 + If bOk .head 6 - Set nIcmpHandle = IcmpCreateFile() .head 6 - Set bOk = (nIcmpHandle != 0) .head 5 - ! Ping .head 5 + If bOk .head 6 - Set nRet = IcmpSendEcho(nIcmpHandle, nTarget, 0, 0, 255, 0, 0, 0, 0, nReplyBufferPtr, 256, p_nTimeout) .head 6 - Set bOk = (nRet != 0) .head 5 - ! Close IcmpHandle .head 5 + If nIcmpHandle != 0 .head 6 - Call IcmpCloseHandle(nIcmpHandle) .head 6 - Set nIcmpHandle = 0 .head 5 - ! Free ICMP_ECHO_REPLY memory .head 5 + If nReplyBufferPtr != 0 .head 6 - Call CStructFreeFarMem(nReplyBufferPtr) .head 6 - Set nReplyBufferPtr = 0 .head 5 - ! .head 5 - ! Call WSACleanup .head 5 + If bWSAStartupOk .head 6 - Call WSACleanup() .head 5 - ! Free WSAData memory .head 5 + If nWSADataPtr != 0 .head 6 - Call CStructFreeFarMem(nWSADataPtr) .head 6 - Set nWSADataPtr = 0 .head 5 - ! .head 5 - Return bOk .head 2 - Named Menus .head 2 + Class Definitions .head 3 + Functional Class: sDriveInfo .head 4 - Description: .head 4 - Derived From .head 4 - Class Variables .head 4 + Instance Variables .head 5 - String: sLetter .head 5 - String: sLabel .head 5 - String: sFileSystem .head 5 - String: sDriveType .head 5 - Number: nSerial .head 5 - String: sSerial .head 5 - Number: nFileNameLength .head 5 - Number: nFlags .head 5 - String: sFlags .head 5 - Number: nDriveType .head 5 - Number: nSize .head 5 - Number: nFree .head 4 - Functions .head 3 + Functional Class: sPrinterInfo .head 4 - Description: .head 4 - Derived From .head 4 - Class Variables .head 4 + Instance Variables .head 5 - String: sPrinterName .head 5 - String: sPort .head 5 - String: sServerName .head 5 - Number: nAttribute .head 5 - String: sAttribute .head 4 - Functions .head 3 + Functional Class: sDisplayInfo .head 4 - Description: .head 4 - Derived From .head 4 - Class Variables .head 4 + Instance Variables .head 5 - String: sColour .head 5 - Number: nHorizontal .head 5 - Number: nVertical .head 5 - Number: nBitsPerPixel .head 5 - Number: nFrequency .head 5 - Boolean: bCurrent .head 4 - Functions .head 3 + Functional Class: sPortInfo .head 4 - Description: .head 4 - Derived From .head 4 + Class Variables .head 5 - Number: nSize .head 4 + Instance Variables .head 5 - String: sPortName .head 5 - String: sMonitorName .head 5 - String: sDescription .head 5 - Number: nPortType .head 5 - Number: nReserved .head 5 - String: sPortType .head 4 + Functions .head 5 + Function: Init .head 6 - Description: .head 6 - Returns .head 6 - Parameters .head 6 - Static Variables .head 6 - Local variables .head 6 + Actions .head 7 - Set nSize = 20 .head 2 + Default Classes .head 3 - MDI Window: cBaseMDI .head 3 - Form Window: .head 3 - Dialog Box: .head 3 - Table Window: .head 3 - Quest Window: .head 3 - Data Field: .head 3 - Spin Field: .head 3 - Multiline Field: .head 3 - Pushbutton: .head 3 - Radio Button: .head 3 - Option Button: .head 3 - Check Box: .head 3 - Child Table: .head 3 - Quest Child Window: cQuickDatabase .head 3 - List Box: .head 3 - Combo Box: .head 3 - Picture: .head 3 - Vertical Scroll Bar: .head 3 - Horizontal Scroll Bar: .head 3 - Column: .head 3 - Background Text: .head 3 - Group Box: .head 3 - Line: .head 3 - Frame: .head 3 - Custom Control: .head 3 - ActiveX: .head 2 - Application Actions
Return to http://gupta.narod.ru/