[Coco] OS9 HEX to DECIMAL conversion.

coco at jechar.ca coco at jechar.ca
Mon May 28 08:46:52 EDT 2018


On 2018-05-27 12:05, L. Curtis Boyle wrote:
> On May 26, 2018, at 6:46 PM, coco at jechar.ca wrote:
>> 
>> Well I have a version that solves my original problem although
>> I would like to add a few more features yet.
>> 
>> […]
>> 
>> I put this in the file ih_drv.b09 and when I load
>> it I get an error.
>> 
>> .b09
>> ^
>> Ih_drv
>> ERROR #110
>> Ready
> 
> If you are trying to run it by typing 'BASIC09 lh_drv.b09’, you will
> get errors like that. You need to pack it (which you mentioned that
> you have already done), and then run it with either ‘runb lh_drv’ (if
> you are using the stock SHELL), or just ‘lh_drv’ (if you are running
> Shellplus). It’s easier to pass parameters with Shellplus as well, as
> has been mentioned before; you don’t need to surround the parameters
> in quotes.
> (If you want to avoid that error when loading BASIC09 source, just
> launch BASIC09 by itself ‘basic09’, and then LOAD ih_drv.b09 at the B:
> prompt).
> 
> I mucked with your code for a bit, and for some strange reason, if I
> did ON ERROR to trap a parameter error (#56) to check if no parameters
> were sent, it would go to the routine properly, but when I tried to
> shut ON ERROR off and then GOTO where you were printing the help
> message, it would then exit with the error anyways. I changed the help
> message to be a subroutine instead (both from the error 56 ON ERROR,
> and from passing it ‘-?’, and now that works (using shellplus). I did
> try moving PARAM to after the DIM statements (the examples in the
> BASIC09 manual show this), but that made no difference (and I tried a
> couple of other things that are still in this listing that follow, but
> you can clean those up if you wish). I had to change your creating of
> /dd/sys/cihxofs to use CREATE instead of SHELL “ECHO”; otherwise, you
> didn’t have a path to the file to write to. I also have it write a
> default value so it has something to read (you may need to change that
> value).
> 
> PROCEDURE Ih_drv
> DIM hs:STRING
> DIM drv:INTEGER
> DIM dno:REAL
> DIM yh:REAL
> DIM yl:REAL
> DIM y:REAL
> DIM yhi:INTEGER
> DIM yhp:REAL
> DIM ylr:REAL
> DIM yli:INTEGER
> DIM bfile:STRING[16]
> DIM cfile:STRING[16]
> DIM current:STRING[10]
> DIM fp1:BYTE
> DIM fp2:BYTE
> DIM er:INTEGER
> DIM wpc:STRING
> DIM ofs:STRING
> PARAM a:STRING[4];b:STRING[4]
> 
> 10 ON ERROR GOTO 1000
> 20 IF a="-?" THEN
>   GOSUB 5000
>   END
> ENDIF
> bfile="/dd/SYS/ihbase"
> ON ERROR GOTO 139
> OPEN #fp1,bfile:READ
> PRINT "Alternate Base Extended Offsets"
> PRINT "To be Supported in Future Versions"
> GOTO 139
> REM Untill we suport alternate base offsets.
> GOTO 200
> REM If a alternate offset base is loaded skip the standard base.
> 139  er:=ERR
> REM  Standard Cloud9 CF card offset to HBD Drive 0.
>     yh=VAL("$52")
>     yl=VAL("$DDC")
> 200 REM
> PRINT
> drv=VAL(a)
> dno=FLOAT(drv)
> y=yh*4096.0+yl+(dno*630.0)
> yhi=FIX(((y/4096)-0.5))
> yhir=FLOAT(yhi)
> yhp=yhir*4096.0
> ylr=y-yhp
> yli=FIX(ylr)
> 
> cfile="/dd/SYS/cihxofs"
> ON ERROR GOTO 300
> OPEN #fp2, cfile:UPDATE
> GOTO 400
> 300 er:=ERR
> REM If it does not exist create it.
> CREATE #fp2,cfile:UPDATE
> REM Write a default value if the file is empty.
> REM Change this if needed.
> current="0000"
> WRITE #fp2,current
> SEEK #fp2,0
> 400 REM
> PRINT
> PRINT USING "S,H3,H3",hs,yhi,yli
> PRINT #fp2 USING "S,H3,H3",hs,yhi,yli
> PRINT
> SEEK #fp2,0
> READ #fp2,current
> wpc=MID$(current,2,2)
> ofs=MID$(current,4,4)
> PRINT "WPC = ",wpc
> PRINT "OFS = ",ofs
> SHELL "dmode /ih wpc="+wpc+" ofs="+ofs
> PRINT
> PRINT "/ih setup for drive #",a
> REM - Future enhancement b= -d SHELL "dir /ih"
> END
> 
> 1000 er=ERR
> ON ERROR
> PRINT "Error #";er;" trapped"
> IF er=56 THEN
>   PRINT "At least 1 parameter is required"
>   PRINT "  use 'ih_drv -?' for help"
>   GOSUB 5000
>   END
> ENDIF
> 
> 5000 PRINT "Ih WPC & Ofs Prameter Calculator"
> PRINT
> PRINT "Assumes Drive Zero Offset=$52DDC"
> PRINT
> PRINT "SYNTAX:"
> PRINT "ih_drv -?  This help message."
> PRINT "ih_drv n   Where n is a number sets the dmode"
> PRINT "           of /ih for drive number n."
> PRINT
> PRINT "(c) CC - GNU"
Thanks for the code improvements, I will look them over in a few days, 
very busy with gardening now, and try out your version.
P.S. Yes it's shell plus I am using.

> RETURN
> 
> 
> 
> 
> 
>> 
>> Ignored the error and Packed it anyway and the program
>> works fine.
>> 
>> To all who have helped so far Wayne,Curtis,James ect. Thank You
>> the program is very useful to me.
>> 
>> However I would like to add 3 features yet more for general benefit 
>> then my own.
>> 
>> 1. I would like just typing ih_drv to give help just like
>>   ih_drv -?
>> 
>> 2. I would like ih_drv n -d
>>   to display the directory of drive n by spawning dir or
>>   rsdos as appropriate.
>> 
>> 3. For me the Hard coded address of drive zero is ok but people
>>   with other IDE systems may not have there drive zero at address
>>   $052DDC as I do. I would like to have the program read it's
>>   drive base address from a file called /dd/SYS/ihbase
>> 
>> Any suggestions would be appreciated, I have attemped 1. and 2. and 
>> ran into problems.
>> 
>> Coco mailing list
>> Coco at maltedmedia.com
>> https://pairlist5.pair.net/mailman/listinfo/coco
>> 


More information about the Coco mailing list