Difference between revisions of "Multiplatform programming"

From BeebWiki
Jump to: navigation, search
m
(Updated to better test DOS platforms.)
Line 1: Line 1:
 
[[Category:Programming]]
 
[[Category:Programming]]
 
[[Category:BASIC]]
 
[[Category:BASIC]]
On almost every platform that BBC BASIC has been ported to you can call [[OSBYTE_&00|OSBYTE 0]] to find out what the host hardware is, and from that what capabilities the host hardware has.
+
[[Category:Programming tips]]
This can be useful to set various program defaults that cannot be done by making other calls (for instance, any system might have a mouse - just use <code>'''ADVAL(7)'''</code>, <code>'''ADVAL(8)'''</code> and see happens).
+
On almost every platform that BBC BASIC has been ported to you can call [[OSBYTE_&00|OSBYTE 0]]
 +
to find out what the host hardware is, and from that what capabilities the host hardware has.
 +
This can be useful to set various program defaults that cannot be done by making other calls
 +
(for instance, any system might have a mouse - just use <code>'''ADVAL(7)'''</code>, <code>'''ADVAL(8)'''</code> and see happens).
 
By coincience or design, over the years the value returned forms a bitmap that makes for convenient testing.
 
By coincience or design, over the years the value returned forms a bitmap that makes for convenient testing.
  
 
     A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
 
     A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
 
      
 
      
     IF(os%AND40)=0 THEN Directory seperators are '.'
+
     IF (os% AND -24)=0 THEN paths are :drive.directory.file/ext
     IF(os%AND40)=8 THEN Directory seperators are '/'
+
     IF (os% AND -24)=8 THEN paths are directory/file.ext
     IF(os%AND32)  THEN Directory seperators are '\'
+
     IF (os% AND -32)  THEN paths are d:directory\file.ext
 
      
 
      
     IF(os%AND40)=0 THEN Extension seperators are '/'
+
     IF (os% AND -24)=0 THEN Directory seperators are '.'
     IF(os%AND40)  THEN Extension seperators are '.'
+
    IF (os% AND -24)=8 THEN Directory seperators are '/'
 +
     IF (os% AND -32)  THEN Directory seperators are '\'
 
      
 
      
     IF(os%AND40)=0 THEN Drive specifiers are :d
+
     IF (os% AND -24)=0 THEN Extension seperators are '/'
     IF(os%AND40)  THEN Drive specifiers are d:
+
    IF (os% AND -24)  THEN Extension seperators are '.'
 +
   
 +
    IF (os% AND -24)=0 THEN Drive specifiers are :d
 +
     IF (os% AND -24)  THEN Drive specifiers are d:
  
 
You can then use these tests in platform-independant code, such as in the following example:
 
You can then use these tests in platform-independant code, such as in the following example:
  
     d$=".":s$="/":IF(os%AND40):d$="/":s$=".":IF(os%AND32):d$="\"
+
     d$=".":s$="/":IF(os%AND-24):d$="/":s$=".":IF(os%AND-32):d$="\"
 
     filename$=dir$+d$+name$+s$+ext$
 
     filename$=dir$+d$+name$+s$+ext$
  
Line 27: Line 34:
  
 
[[User:Jgharston|Jgharston]] 18:51, 29 November 2010 (UTC)
 
[[User:Jgharston|Jgharston]] 18:51, 29 November 2010 (UTC)
 +
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 20:54, 3 July 2016 (UTC)

Revision as of 21:54, 3 July 2016

On almost every platform that BBC BASIC has been ported to you can call OSBYTE 0 to find out what the host hardware is, and from that what capabilities the host hardware has. This can be useful to set various program defaults that cannot be done by making other calls (for instance, any system might have a mouse - just use ADVAL(7), ADVAL(8) and see happens). By coincience or design, over the years the value returned forms a bitmap that makes for convenient testing.

   A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
   
   IF (os% AND -24)=0 THEN paths are :drive.directory.file/ext
   IF (os% AND -24)=8 THEN paths are directory/file.ext
   IF (os% AND -32)   THEN paths are d:directory\file.ext
   
   IF (os% AND -24)=0 THEN Directory seperators are '.'
   IF (os% AND -24)=8 THEN Directory seperators are '/'
   IF (os% AND -32)   THEN Directory seperators are '\'
   
   IF (os% AND -24)=0 THEN Extension seperators are '/'
   IF (os% AND -24)   THEN Extension seperators are '.'
   
   IF (os% AND -24)=0 THEN Drive specifiers are :d
   IF (os% AND -24)   THEN Drive specifiers are d:

You can then use these tests in platform-independant code, such as in the following example:

   d$=".":s$="/":IF(os%AND-24):d$="/":s$=".":IF(os%AND-32):d$="\"
   filename$=dir$+d$+name$+s$+ext$

See also

  • The generic FileIO library uses these techniques.
  • The ProgEnv library sets os% and also returns other platform environment parameters such as the command line and the run filename.

Jgharston 18:51, 29 November 2010 (UTC) Jgharston (talk) 20:54, 3 July 2016 (UTC)