03-14-2024, 06:09 AM
Code: (Select All)
Type Font_Name_Type
Name As String
FileName As String
End Type
ReDim Shared Fonts(10000) As Font_Name_Type
Screen _NewImage(1280, 720, 32)
GetFontList
numbered = -1 'number our quick list
l = 20 'number to print to the screen
w = 50 'width to print to the screen
Do
Cls
_Limit 30
k = _KeyHit
Select Case k
Case 20480: s = s + 1: If s > UBound(Fonts) Then s = UBound(Fonts)
Case 18432: s = s - 1: If s < 0 Then s = 0
End Select
Locate 10
start = s: finish = s + l - 1
For i = start To finish
If numbered Then counter$ = LTrim$(Str$(i)) + ") "
Locate , 10: Print counter$ + Left$(Fonts(i).Name, w);
Locate , 70: Print Left$(Fonts(i).FileName, w)
Next
_Display
Loop Until k = 27
Sub GetFontList
Shell _Hide "Powershell -command " + Chr$(34) + "Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts'|Out-File -Encoding Ascii 'temp_fontlist.txt'" + Chr$(34)
f = FreeFile
Open "temp_fontlist.txt" For Binary As #f
Do Until EOF(1)
Line Input #1, temp$
sep = InStr(temp$, ":")
l$ = _Trim$(Left$(temp$, sep - 1))
r$ = _Trim$(Mid$(temp$, sep + 1))
If l$ <> "PSPath" Then 'we can stop reading files at this point (according to my tests)
If l$ <> "" Then 'skip the blank space lines
Fonts(count).Name = l$
Fonts(count).FileName = r$
count = count + 1
End If
Else
count = count - 1
Exit Do
End If
Loop
Close f
'Kill "temp_fontlist.txt"
ReDim _Preserve Fonts(count) As Font_Name_Type
'a quick and simple combsort to make certain our list is in alphabetical order
gap = count
Do
gap = 10 * gap \ 13
If gap < 1 Then gap = 1
i = 0
swapped = 0
Do
If Fonts(i).Name > Fonts(i + gap).Name Then
Swap Fonts(i).Name, Fonts(i + gap).Name
Swap Fonts(i).FileName, Fonts(i + gap).FileName
swapped = -1
End If
i = i + 1
Loop Until i + gap > count
Loop Until gap = 1 And swapped = 0
End Sub
I'm thinking the above version should work with either command prompt or terminal, with zero issues. Give it a try if you have a chance, and if it works as advertised this time, I'll go in and correct the original post and clean up the other versions from there to here, just to keep it from being confusing for others and hard to understand.
I honestly think, this whole time, the issue was nothing more than shelling out to CMD vs shelling out to Terminal, and the way they try and process the input.