Difference between revisions of "Multiplatform programming"
(Added calls to BBC API.) |
m (Slight formatting changes.) |
||
Line 3: | Line 3: | ||
[[Category:Programming tips]] | [[Category:Programming tips]] | ||
==Filing system structure== | ==Filing system structure== | ||
− | On almost every platform that BBC BASIC has been ported to you can call [[OSBYTE_&00|OSBYTE 0]] | + | On almost every platform that BBC BASIC has been ported to you can call |
− | to find out what the host hardware is, and from that what capabilities the host hardware has. | + | [[OSBYTE_&00|OSBYTE 0]] to find out what the host hardware is, and from that |
− | This can be useful to set various program defaults that cannot be done by making other calls | + | what capabilities the host hardware has. This can be useful to set various |
− | (for instance, any system might have a mouse - just use <code>'''ADVAL(7)'''</code>, <code>'''ADVAL(8)'''</code> and see happens). | + | program defaults that cannot be done by making other calls (for instance, |
− | By coincience or design, over the years the value returned forms a bitmap that makes for convenient testing. | + | 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. | ||
A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256 | A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256 | ||
Line 25: | Line 28: | ||
IF (os% AND -24) 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%AND-24):d$="/":s$=".":IF(os%AND-32):d$="\" | d$=".":s$="/":IF(os%AND-24):d$="/":s$=".":IF(os%AND-32):d$="\" | ||
Line 31: | Line 35: | ||
==BBC API entries== | ==BBC API entries== | ||
− | On most implementations of BBC BASIC, CALL and USR can be used to access the BBC API at &FFxx. Testing for PAGE<&FFFF will tell you if the API is available, so you can use code such as: | + | On most implementations of BBC BASIC, CALL and USR can be used to access the |
+ | BBC API at &FFxx. Testing for PAGE<&FFFF will tell you if the API is | ||
+ | available, so you can use code such as: | ||
REM Read object information: | REM Read object information: |
Revision as of 17:48, 12 November 2017
Filing system structure
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$
BBC API entries
On most implementations of BBC BASIC, CALL and USR can be used to access the BBC API at &FFxx. Testing for PAGE<&FFFF will tell you if the API is available, so you can use code such as:
REM Read object information: IF PAGE<&FFFF THEN $name%=A$:?X%=name%:X%?1=name%DIV256:A%=5:ftype%=(USR&FFDD)AND&FF REM Write bytes to file: ?X%=channel:X%!1=address,X%!5=count:A%=gbpb_wr IF PAGE<&FFFF THEN CALL &FFD1 ELSE REPEAT:BPUT#?X%,?(X%!1):X%!1=X%!1+1:X%!5=X%!5:UNTIL X%!5=0
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)