BrightScript

1 program Added 2026-02-06T08:24:19Z Agent: claude-codeModel: sonnetWebSearch: disabled Evidence Report issue View issues
Aliases: —
Provenance: commit eb7c4d015e · authored 2026-02-06T09:26:27+01:00 · agent claude-code · model sonnet

Sources mentioning this language

3 sources · pl_id: pl/brightscript
LLM (this repo) · 1LinguistHyperpolyglot

Extensions claimed by this language

1 claim. Each row is one upstream assertion with its strength. SWH column shows file occurrences with that extension across the entire archive.
ExtensionSourceStrengthSWH
.brslinguistprimary64.4K files

Related languages

ChatScript (0.37)VoltScript (0.37)ZScript (0.35)F-Script (0.33)Qt Script (0.33)

LLM-contributed programs

Array Sum Example

Provenance: commit eb7c4d015e · authored 2026-02-06T09:26:27+01:00 · agent claude-code · model sonnet · WebSearch disabled
code.brs · added: 2026-02-06T08:24:19Z
sub Main()
    print "Hello from BrightScript!"
    numbers = [1, 2, 3, 4, 5]
    sum = 0
    for each num in numbers
        sum = sum + num
    end for
    print "Sum of numbers: "; sum
end sub

Real programs from Software Heritage

1 sample mined from derived_datasets/<date>/contents/*.parquet, byte-verified against the SWH archive. Citation-grade qualified SWHIDs preserved.
HomeScreen.brs · 30169 B · ext .brs · seen 147× in SWH
via unique-primary
swh:1:cnt:d10fd92c181274ff5dd48e1133924d54602c3e1b;origin=https://github.com/MediaBrowser/Emby.Roku;anchor=swh:1:rev:bef3b50a90044ce97231e6a995ea06ab493a4416;path=/source/HomeScreen.brs
Open in SWH · Raw bytes (SWH) · GitHub raw
Show source
'**********************************************************
'** createHomeScreen
'**********************************************************

Function createHomeScreen(viewController as Object) as Object

	names = []
	keys = []
	
	views = getUserViews()
	
	for each view in views
	
		names.push(view.Title)
		
		key = view.CollectionType + "|" + view.Id + "|" + firstOf(view.HDPosterUrl, "")
		
		keys.push(key)
		
	end for
	
	names.push("Options")
	keys.push("options")

	loader = CreateObject("roAssociativeArray")
	loader.getUrl = getHomeScreenRowUrl
	loader.parsePagedResult = parseHomeScreenResult
	loader.getLocalData = getHomeScreenLocalData

    screen = createPaginatedGridScreen(viewController, names, keys, loader, "two-row-flat-landscape-custom", 8, 75)

	screen.baseHandleMessage = screen.HandleMessage
	screen.HandleMessage = handleHomeScreenMessage

    screen.OnTimerExpired = homeScreenOnTimerExpired
    screen.SuperActivate = screen.Activate
    screen.Activate = homeScreenActivate

	screen.refreshBreadcrumb = homeRefreshBreadcrumb

    screen.clockTimer = createTimer()
    screen.clockTimer.Name = "clock"
    screen.clockTimer.SetDuration(20000, true) ' A little lag is fine here
    viewController.AddTimer(screen.clockTimer, screen)
	
	ConnectionManager().sendWolToAllServers(m)

    screen.SetDescriptionVisible(false)

	return screen
End Function

Function getUserViews() as Object

	views = []
	
	if getGlobalVar("user") = invalid then return views
	
	url = GetServerBaseUrl() + "/Users/" + getGlobalVar("user").Id + "/Views?fields=PrimaryImageAspectRatio"
	
    request = HttpRequest(url)
    request.ContentType("json")
    request.AddAuthorization()

    response = request.GetToStringWithTimeout(10)
    if response <> invalid
	
        result = parseItemsResponse(response, 0, "two-row-flat-landscape-custom")

		for each i in result.Items
		
			viewType = firstOf(i.CollectionType, "")
			
			' Filter out unsupported views
			if viewType = "movies" or viewType = "music" or viewType = "tvshows" or viewType = "livetv" or viewType = "channels" or viewType = "folders" or viewType = "playlists" or viewType = "boxsets" then
				views.push(i)
			
			' Treat all other types as folders for now
			else 
				viewType = "folders"
				views.push(i)
			end if
		
			' Normalize this
			i.CollectionType = viewType
			
		end for
		
	end if	
	
	return views

End Function

Function getHomeScreenLocalData(row as Integer, id as String, startItem as Integer, count as Integer) as Object

	viewController = GetViewController()
	
	parts = id.tokenize("|")
	id = parts[0]
	parentId = firstOf(parts[1], "")
	viewTileImageUrl = parts[2]
	
	if id = "options" then
		return GetOptionButtons(viewController)
		
	else if id = "movies" 
	
		movieToggle  = (firstOf(RegUserRead("movieToggle"), "2")).ToInt()
		
		' Jump list
		if movieToggle = 3 then
		
			return GetMovieButtons(viewController, movieToggle, parentId, viewTileImageUrl)
		end if
		
	else if id = "tvshows" 
	
		tvToggle  = (firstOf(RegUserRead("tvToggle"), "1")).ToInt()
		
		' Jump list
		if tvToggle = 3 then
		
			return GetTVButtons(viewController, tvToggle, parentId, viewTileImageUrl)
		end if
		
	end If
	
	return invalid

End Function

Function getHomeScreenRowUrl(row as Integer, id as String) as String

    parts = id.tokenize("|")
	id = parts[0]
	parentId = firstOf(parts[1], "")
	
	url = GetServerBaseUrl()

    query = {}

	if id = "folders"
	
		url = url  + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?sortby=sortname"
		query.AddReplace("Fields", "PrimaryImageAspectRatio")
		
	else if id = "playlists" or id = "boxsets"
	
		url = url  + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?sortby=sortname"
		
	else if id = "channels"
	
		url = url  + "/Channels?userid=" + HttpEncode(getGlobalVar("user").Id)

	else if id = "movies"
	
		movieToggle  = (firstOf(RegUserRead("movieToggle"), "1")).ToInt()

		' Next Up
		if movieToggle = 1 then
			
			url = url + "/Movies/Recommendations?userId=" + HttpEncode(getGlobalVar("user").Id)
			
			query = {
				ItemLimit: "20"
				CategoryLimit: "1"
				fields: "PrimaryImageAspectRatio",
				ImageTypeLimit: "1"
			}
			
		' Latest
		else if movieToggle = 2 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?IncludeItemTypes=Movie"
			query = {
				recursive: "true"
				ExcludeLocationTypes: "Virtual"
				fields: "PrimaryImageAspectRatio"
				sortby: "DateCreated"
				sortorder: "Descending"
				filters: "IsUnplayed",
				ImageTypeLimit: "1"
			}
			
		' Resume
		else if movieToggle = 4 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Movie"
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "DatePlayed"
				sortorder: "Descending"
				filters: "IsResumable",
				ImageTypeLimit: "1"
			}
			
		' Favorites
		else if movieToggle = 5 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Movie"
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "SortName"
				sortorder: "Ascending"
				filters: "IsFavorite",
				ImageTypeLimit: "1"
			}
			
		' Genres
		else if movieToggle = 6 then
			
			url = url + "/Genres?Recursive=true"
			query = {
				userid: getGlobalVar("user").Id
				includeitemtypes: "Movie"
				fields: "PrimaryImageAspectRatio"
				sortby: "SortName"
				sortorder: "Ascending"
			}
			
		end if		
		
	else if id = "tvshows"
	
		tvToggle  = (firstOf(RegUserRead("tvToggle"), "1")).ToInt()

		' Next Up
		if tvToggle = 1 then
			
			url = url + "/Shows/NextUp?userId=" + HttpEncode(getGlobalVar("user").Id)
			
			query = {
				fields: "PrimaryImageAspectRatio,Overview",
				ImageTypeLimit: "1"
			}
			
		' Latest
		else if tvToggle = 2 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?IncludeItemTypes=Episode"
			query = {
				recursive: "true"
				ExcludeLocationTypes: "Virtual"
				fields: "PrimaryImageAspectRatio"
				sortby: "DateCreated"
				sortorder: "Descending"
				filters: "IsUnplayed",
				ImageTypeLimit: "1"
			}
			
		' Resume
		else if tvToggle = 4 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Episode"
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "DatePlayed"
				sortorder: "Descending"
				filters: "IsResumable",
				ImageTypeLimit: "1"
			}
			
		' Favorites
		else if tvToggle = 5 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Series"
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "SortName"
				sortorder: "Ascending"
				filters: "IsFavorite",
				ImageTypeLimit: "1"
			}
			
		' Genres
		else if tvToggle = 6 then
			
			url = url + "/Genres?Recursive=true"
			query = {
				userid: getGlobalVar("user").Id
				includeitemtypes: "Series"
				fields: "PrimaryImageAspectRatio"
				sortby: "SortName"
				sortorder: "Ascending",
				ImageTypeLimit: "1"
			}
			
		end if		
		
	else if id = "livetv"
	
		liveTvToggle = (firstOf(RegUserRead("liveTvToggle"), "1")).ToInt()

		' Suggested
		if liveTvToggle = 1 then
			
			url = url + "/LiveTv/Programs/Recommended?userId=" + HttpEncode(getGlobalVar("user").Id)
			query = {
				IsAiring: "true"
			}
			
		' Favorites
		else if liveTvToggle = 2 then
			
			url = url + "/LiveTv/Channels?userId=" + HttpEncode(getGlobalVar("user").Id)
			query = {
				IsFavorite: "true"
			}
			
		' Resume
		else if liveTvToggle = 3 then
			
			url = url + "/LiveTv/Recordings?userId=" + HttpEncode(getGlobalVar("user").Id)
			query = {
				IsInProgress: "false"
			}
			
		end if		
		
	else if id = "music"
	
		musicToggle  = (firstOf(RegUserRead("musicToggle"), "1")).ToInt()

		' Latest
		if musicToggle = 1 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=MusicAlbum"		
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "DateCreated"
				sortorder: "Descending",
				ImageTypeLimit: "1"
			}
		
		else
		
			' Not going to use the output, just checking to see if the user has music in their library
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Audio"		
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "DateCreated"
				sortorder: "Descending",
				ImageTypeLimit: "1"
			}
		
			
		end if		
		
	end If
	
	if id <> "channels" and id <> "livetv" and parentId <> "" then
		
		query.AddReplace("ParentId", parentId)
	end if

	for each key in query
		url = url + "&" + key +"=" + HttpEncode(query[key])
	end for

    return url

End Function

Function parseHomeScreenResult(row as Integer, id as string, startIndex as Integer, json as String) as Object

	viewController = GetViewController()
	maxListSize = 60
	
	parts = id.tokenize("|")
	id = parts[0]
	parentId = firstOf(parts[1], "")
	viewTileImageUrl = parts[2]
	
	if id = "folders" then
		return parseItemsResponse(json, 0, "two-row-flat-landscape-custom")
	else if id = "playlists" then
		return parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
	else if id = "boxsets" then
		return parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
	else if id = "channels" then
		return parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
		
	else if id = "movies" then
	
		movieToggle  = (firstOf(RegUserRead("movieToggle"), "1")).ToInt()		
		
		if movieToggle = 1 then
			response = parseSuggestedMoviesResponse(json)
		else if movieToggle = 6 then
			response = parseItemsResponse(json, 1, "mixed-aspect-ratio-portrait", "moviegenre")
		else
			response = parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
		end if
		
		buttons = GetBaseMovieButtons(viewController, movieToggle, parentId, viewTileImageUrl, response)
		buttonCount = buttons.Count()
		minTotalRecordCount = buttonCount + response.Items.Count()
		
		' Only insert buttons if startIndex = 0
		if startIndex = 0 then						
			buttons.Append(response.Items)		
			response.Items = buttons
		end if
		
		if response.TotalCount > maxListSize then response.TotalCount = maxListSize	
		if response.TotalCount < minTotalRecordCount then response.TotalCount = minTotalRecordCount	
		return response
		
	else if id = "tvshows" then
	
		tvToggle  = (firstOf(RegUserRead("tvToggle"), "1")).ToInt()		
		
		if tvToggle = 5 then
			response = parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
		else if tvToggle = 6 then
			response = parseItemsResponse(json, 1, "mixed-aspect-ratio-portrait", "tvgenre")
		else
			response = parseItemsResponse(json, 0, "two-row-flat-landscape-custom")
		end if
		
		buttons = GetBaseTVButtons(viewController, tvToggle, parentId, viewTileImageUrl)
		buttonCount = buttons.Count()
		minTotalRecordCount = buttonCount + response.Items.Count()
		
		' Only insert buttons if startIndex = 0
		if startIndex = 0 then						
			buttons.Append(response.Items)		
			response.Items = buttons
		end if
		
		if response.TotalCount > maxListSize then response.TotalCount = maxListSize	
		if response.TotalCount < minTotalRecordCount then response.TotalCount = minTotalRecordCount	
		return response
		
	else if id = "livetv" then
	
		liveTvToggle = (firstOf(RegUserRead("liveTvToggle"), "1")).ToInt()
		
		if liveTvToggle = 1 then
			response = parseLiveTvProgramsResponse(json)
		else if liveTvToggle = 2 then
			response = parseLiveTvChannelsResult(json)
		else
			response = parseLiveTvRecordingsResponse(json)
		end if
		
		buttons = GetBaseLiveTVButtons(viewController, liveTvToggle)
		buttonCount = buttons.Count()
		minTotalRecordCount = buttonCount + response.Items.Count()
		
		' Only insert buttons if startIndex = 0
		if startIndex = 0 then						
			buttons.Append(response.Items)		
			response.Items = buttons
		end if
		
		if response.TotalCount > maxListSize then response.TotalCount = maxListSize	
		if response.TotalCount < minTotalRecordCount then response.TotalCount = minTotalRecordCount	
		return response
		
	else if id = "music" then
	
		response = parseItemsResponse(json, 0, "mixed-aspect-ratio-square")
		
		if response.TotalCount = 0 then
			Return {
				Items: []
				TotalCount: 0
			}
		end if    
	
		musicToggle  = (firstOf(RegUserRead("musicToggle"), "1")).ToInt()		
		
		if musicToggle <> 1 then
			return GetMusicButtons(viewController, musicToggle, parentId, viewTileImageUrl)
		end if
		
		buttons = GetBaseMusicButtons(viewController, musicToggle, parentId, viewTileImageUrl)
		buttonCount = buttons.Count()
		minTotalRecordCount = buttonCount + response.Items.Count()
		
		' Only insert buttons if startIndex = 0
		if startIndex = 0 then
			buttons.Append(response.Items)		
			response.Items = buttons
		end if
		
		if response.TotalCount > maxListSize then response.TotalCount = maxListSize	
		if response.TotalCount < minTotalRecordCount then response.TotalCount = minTotalRecordCount	
		return response
		
	end if

	return parseItemsResponse(json, 0, "two-row-flat-landscape-custom")
	
End Function

Function handleHomeScreenMessage(msg) as Boolean

	handled = false

	viewController = m.ViewController

	if type(msg) = "roGridScreenEvent" Then

        if msg.isListItemSelected() Then
			
			rowIndex = msg.GetIndex()
			context = m.contentArray[rowIndex]           
            index = msg.GetData()
            item = context[index]

            if item = invalid then

            Else If item.ContentType = "MovieToggle" Then

				handled = true
                GetNextMovieToggle()
                m.loader.RefreshRow(rowIndex)

            Else If item.ContentType = "MovieRefreshSuggested" Then
				
                handled = true
                m.loader.RefreshRow(rowIndex)

            Else If item.ContentType = "TVToggle" Then
				
                handled = true

                GetNextTVToggle()
                m.loader.RefreshRow(rowIndex)

            Else If item.ContentType = "LiveTVToggle" Then
				
                handled = true

                GetNextLiveTVToggle()
                m.loader.RefreshRow(rowIndex)

            Else If item.ContentType = "MusicToggle" Then
				
                handled = true

                GetNextMusicToggle()
                m.loader.RefreshRow(rowIndex)

            End If
				
        End If
			
    End If

	return handled or m.baseHandleMessage(msg)

End Function

'**********************************************************
'** GetNextMovieToggle
'**********************************************************

Function GetNextMovieToggle()

	movieToggle  = (firstOf(RegUserRead("movieToggle"), "2")).ToInt()
	
    movieToggle = movieToggle + 1

    if movieToggle = 7 then
        movieToggle = 1
    end if

    RegUserWrite("movieToggle", movieToggle)
	
End Function

'**********************************************************
'** Get GetMovieButtons
'**********************************************************

Function GetBaseMovieButtons(viewController as Object, movieToggle as Integer, parentId as String, allTileImageUrl = invalid, movieResponse = invalid) As Object

	if firstOf(allTileImageUrl, "") = "" then
		allTileImageUrl = viewController.getThemeImageUrl("hd-movies.jpg")
	end if
	
	buttons = [
        {
            Title: "Movie Library"
            ContentType: "MovieLibrary"
            ShortDescriptionLine1: "Library"
            HDPosterUrl: allTileImageUrl
            SDPosterUrl: allTileImageUrl,
			Id: parentId
        }
    ]

    switchButton = [
        {
            ContentType: "MovieToggle"
        }
    ]

    if movieToggle = 1 then
	
        switchButton[0].HDPosterUrl = viewController.getThemeImageUrl("hd-toggle-1.jpg")
        switchButton[0].SDPosterUrl = viewController.getThemeImageUrl("hd-toggle-1.jpg")
        buttons.Append( switchButton )

        suggestedButton = [
                {
                    ContentType: "MovieRefreshSuggested"
 
…(truncated)…

Contribute — propose a file extension

Tell us where to find evidence about BrightScript (mapped to pl/brightscript). A reference URL is required; at least one of extension or program code must be provided too. A maintainer reviews each submission via a draft PR before anything lands.
Optional: attach a program from that URL
If the reference URL points at a single source file you'd like to add as an example program, paste it below. The workflow will write it under languages/BrightScript/programs/<sha>/. Keep under ~200 lines.
(or open the pre-filled issue directly)
← BrighterScript brightscript-lang →