Source file vgamem.icn
#
# vgamem.icn - determine video memory
#

$ifdef MAIN
procedure main()
   every write(vgamem(), " bytes")
end
$endif

procedure vgamem()
local results := []
$ifdef _UNIX
   pin := open("/sbin/lspci -v", "p") | stop("can't run /sbin/lspci")
   while line := read(pin) do {
      line ? {
	 if any(&digits) & find("VGA") then {
	    mem := 0
	    while line := read(pin) do {
	       if line == "" then break
	       line ? {
		  tab(many(' \t'))
		  if ="Memory at" then {
		     tab(many(' \t')) | next
		     tab(many(&digits ++ 'abcdefABCDEF')) | next
		     tab(many(' \t')) | next
		     ="(" | next
		     tab(many(&digits)) | next
		     ="-bit," | next
		     tab(many(' \t')) | next
		     ="prefetchable" | next
		     =")" | next
		     tab(many(' \t')) | next
		     ="[" | next
		     ="size=" | next
		     mem <:= KMsize(tab(many(&digits++'KM')))
		     }
	          }
	       }
	    put(results, 0 < mem)
	    }
         }
      }
   close(pin)
   suspend !results
$endif
$ifdef _MS_WINDOWS_NT

   # try for a TEMP directory, settle for current directory if no TEMP
   fn := ((getenv("TEMP") || "\\")|"") || "foo.txt"

   system("\"\\Program Files\\Common Files\\Microsoft Shared\\MSInfo\\" ||
          "msinfo32\" /report " || fn ||" /categories +componentsdisplay")

   if not (fin := open(fn)) then {
      write("can't get display memory")
      fail
      }
   while line := read(fin) do {
      line ? {
	 # Look for "Adapter RAM" - in MSinfo32's Unicode output
         if tab(find("A\0d\0a\0p\0t\0e\0r\0 \0R\0A\0M\0")) then {
	    tab(find("(")+2) | fail
	    mem := 0
	    while c := move(1) do { mem := mem * 10 + integer(c); move(1) }
	    close(fin)
	    remove(fn)
	    return mem
            }
         }
      }
   close(fin)
$endif
end

#
# KMsize - convert a string like 64M (64 Megs) into an integer
#
procedure KMsize(s)
    case s[-1] of {
	"M": return integer(s[1:-1]) * 1024 * 1024
	"K": return integer(s[1:-1]) * 1024
	default: return s
    }
end

This page produced by UniDoc on 2021/04/15 @ 23:59:43.