Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ' Возвращает количество цифр в числе с учётом знака
- Public Function GetDigitCount(ByVal Number As Integer) As Integer
- Dim Count As Integer
- If Number < 0 Then
- Number *= -1
- Count = 1
- End If
- Do
- Number = Number \ 10
- Count += 1
- Loop While Number
- Return Count
- End Function
- ' Преобразует число в строку
- ' Number — число
- ' DigitCount — количество цифр в числе
- ' Buffer — буфер для заполнения строкой
- ' Границы буфера не проверяются, прожет произойти переполнение
- Public Sub ToWString(ByVal Number As Integer, ByVal DigitCount As Integer, ByVal Buffer As Byte Ptr)
- ' Флаг знака
- Dim flag As Integer
- If Number < 0 Then
- Number *= -1
- flag = 1
- ' Поставить минус
- Buffer[0] = 45
- End If
- For i As Integer = DigitCount - 1 - flag To 0 Step -1
- Buffer[(i + flag) * SizeOf(WString)] = Number Mod 10 + 48 ' символ нуля в кодовой таблице
- Number = Number \ 10
- Next i
- End Sub
- ' Очистка буфера
- Public Sub ZeroBuffer(ByVal Buffer As Byte Ptr, ByVal BufferLength As Integer)
- For i As Integer = 0 To Length - 1
- Buffer[i] = 0
- Next
- End Sub
- ' Точка входа в программу
- Public Sub Main Alias "Main"()
- Const Number As Integer = -324
- Dim ReturnCode As Integer
- 'Dim InHandle As HANDLE = GetStdHandle(STD_INPUT_HANDLE)
- Dim OutHandle As HANDLE = GetStdHandle(STD_OUTPUT_HANDLE)
- ' Куча по умолчанию
- Dim hDefaultProcessHeap As Integer Ptr = GetProcessHeap()
- If hDefaultProcessHeap Then
- ' Выделить память из кучи
- ' Количество символов для строки
- Dim Count As Integer = GetDigitCount(Number)
- ' Количество байт под строку
- ' Плюс пара символов на перенос каретки
- Dim BytesCount As Integer = (Count + 2 + 1) * SizeOf(WString)
- ' Выделение памяти
- Dim aHeaps As Byte Ptr = HeapAlloc(hDefaultProcessHeap, 0, BytesCount)
- If aHeaps Then
- ' Обнуление буфера
- ZeroBuffer(aHeaps, BytesCount)
- ' Строка в текст
- ToWString(Number, Count, aHeaps)
- ' Добавить перенос строки
- aHeaps[Count * SizeOf(WString)] = 13
- aHeaps[Count * SizeOf(WString) + SizeOf(WString)] = 10
- ' Печать на сонсоль
- WriteConsole(OutHandle, aHeaps, Count+2, 0, 0)
- ' Очистка
- HeapFree(hDefaultProcessHeap, 0, aHeaps)
- 'SleepEx(INFINITE, 0)
- Else
- ReturnCode = 1
- End If
- Else
- ReturnCode = 1
- End If
- ExitProcess(ReturnCode)
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement