[Coco] OS9 HEX to DECIMAL conversion.

coco at jechar.ca coco at jechar.ca
Sat Jun 2 15:31:49 EDT 2018


I have created the Final Version.
All features implemented, let me know If there are any
issues I have overlooked.

{SOURCE START}
PROCEDURE Ih_drv
DIM hs:STRING
DIM drv:INTEGER
DIM dno:REAL
DIM zb:STRING
DIM zh:STRING[4]
DIM zl:STRING[4]
DIM yhs:STRING
DIM yls:STRING
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
DIM af:STRING
DIM al:INTEGER
DIM ad:STRING[1]
DIM i:INTEGER
DIM ta:STRING
PARAM a:STRING[4];b:STRING[4]
10 ON ERROR GOTO 1000
20 IF a="-?" THEN
   GOTO 1010
   END
ENDIF
REM Constants
hs="$"
al=LEN(a)
af=MID$(a,1,1)
IF af="=" THEN
   a=MID$(a,2,al)
   al=al-1
   IF al=0 THEN
     END
   ENDIF
ENDIF
REM Data Verification
IF al>=4 THEN
    GOTO 1020
ENDIF
FOR i=1 TO al
    ad=MID$(a,i,1)
    IF ((ad<"0") OR (ad>"9")) THEN
       GOTO 1020
       END
    ENDIF
NEXT i
bfile="/dd/SYS/ihbase"
ON ERROR GOTO 139
OPEN #fp1,bfile:READ
INPUT #fp1," Reading Zero Drive Base Offset Data ... ",zb
PRINT "Alternate Base Extended Offset is ",zb
zh=MID$(zb,1,4)
zl="$"+MID$(zb,5,3)
yh=VAL(zh)
yl=VAL(zl)
GOTO 200
END
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.
current="$FFFFFF"
WRITE #fp2,current
SEEK #fp2,0
400 REM
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 - Show Directory
500 ON ERROR GOTO 502
501 GOTO 503
502 END
503 REM Process Second Parameter
IF b="-d" THEN
     GOTO 510
ELSE
    IF  b="-r" THEN
        GOSUB 540
    ENDIF
ENDIF
510 ON ERROR GOTO 520
     SHELL "dir /ih"
     END
520 er=ERR
     ON ERROR
     REM - Directory Listing Failed
     IF b<>"-d" THEN
        END
     ENDIF
     PRINT "OS9 Directory Listing Failed."
530    INPUT "Do you want to try RSDOS (y/N) ?",ta
        IF ta="y" THEN
           GOSUB 540
        ENDIF
END
540 REM GOSUB - Display RSDOS directtory.
        SHELL "shell x load /dd/util/rsdos"
        SHELL "shell x rsdos -dir /ih"
     RETURN
1000 er=ERR
ON ERROR
IF er=56 THEN
   PRINT
ELSE
   END
ENDIF
1010 PRINT " Ih WPC & Ofs Prameter Calculator v2.3"
PRINT
PRINT " Default Drive Zero Offset=$52DDC"
PRINT " Alternate Drive Zero Offset may be set in /dd/sys/ihbase"
PRINT
PRINT " SYNTAX:(*Commands shown in UPPER but should be typed in lower 
case. )"
PRINT " IH_DRV -?    This help message."
PRINT " IH_DRV  N    Where n is the number that sets the dmode of /ih"
PRINT "              for drive number n."
PRINT " IH_DRV =N    .. "
PRINT " IH_DRV N -D  .. and also lists 'OS9' directory."
PRINT " IH_DRV N -R  .. and also lists 'RSDOS' directory."
PRINT
PRINT "  (c) CC - GNU Special Thanks to  Curtis & Wanye "
END
1020 PRINT ">> n must be  0 to 999 ."
END
{SOURCE END}

This Ends this Thread.

On 2018-05-28 08:46, coco at jechar.ca wrote:
> 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