carolyn@cbmvax.cbm.UUCP (Carolyn Scheppner) (06/06/86)
What follows is an AmigaBasic listing of NewConvertFD. This is a modified ConvertFD which prepends an "x" to all system function names known to conflict with AmigaBasic keywords. Bmaps created with this program make it possible for you to call these functions by prepending an "x" to their names. For example, with a dos.bmap created with NewConvertFD, absolute binary loads and saves can be implemented by calling xOpen(), xRead(), xWrite(), and xClose(). The list of known conflicting function names is in DATA statements at the end of the program. If anyone can think of any other conflicts, please let me know. Carolyn Scheppner (signature at end of message) ----------------------------CUT HERE------------------------------- 'NewConvertFD ' from ConvertFd - created Aug 9, 1985 'This program converts .fd files, like 'graphics_lib.fd' to ' .bmap format files, like 'graphics.bmap', so BASIC ' programs can access libraries of machine language routines ' by name via the LIBRARY statement. ' ' Modified 01/86 by Carolyn Scheppner CBM ' Prepends an x to all function names which ' conflict with AmigaBasic keywords. ' See data statements at end of program for ' known conflicts. To call these functions, ' prepend an x (example xRead). ' Saves the .bmap file in current or specified ' directory (previously saved in LIBS:). ' For your program to access the .bmap via ' LIBRARY, it must be in the current dir ' or the LIBS: dir. ' As far as I know, you MUST name your .bmap ' libraryname.bmap. The libraryname is the ' part of the .fd file name before the _. ' (example dos.bmap from dos_lib.fd) DEFINT a-Z 'by default, all variables are integer REM ******** for conflicting tokens ******** READ cnt 'count of conflicting tokens DIM con$(cnt) FOR k = 0 TO cnt-1: READ con$(k): NEXT REM **************************************** INPUT "Enter name of .fd file to read > ",fdFilename$ OPEN fdFilename$ FOR INPUT AS #1 INPUT "Enter name of .bmap file to produce > ",bmapFilename$ OPEN bmapFilename$ FOR OUTPUT AS #2 WHILE NOT EOF(1) GetLine IF char$ = "#" THEN 'lines which begin with "#" are command lines GOSUB GotCommand ELSEIF char$ = "*" THEN 'lines which begin with "*" are comment lines ELSE 'all other lines define a function in the library GOSUB GotFunction END IF WEND CLOSE END GotCommand: GetChar 'skip 1st "#" GetChar 'skip 2nd "#" GetToken IF token$ = "bias" THEN GetNum offset = -num END IF ram: RETURN GotFunction: GetToken 'token$=function's name REM **** prepend conflicting tokens with 'x' **** k$ = token$ FOR k = 0 TO cnt-1 IF k$ = con$(k) THEN token$ = "x" + token$ NEXT REM ********************************************** funcOffset=offset offset=offset-6 parms$="" SkipTill "(": IF char$="" THEN BadFileFormat SkipTill ")": IF char$="" THEN BadFileFormat GetChar IF char$<>"" THEN SkipTill "(": IF char$="" THEN BadFileFormat WHILE char$ <> ")" GetChar 'skip ( or , or / IF char$<>")" THEN GOSUB GetRegister IF register=0 THEN BadFileFormat IF register=-1 THEN PRINT "Warning: Function ";token$;" not included because it" PRINT " needs a parameter passed in a register BASIC cannot" PRINT " conform to." PRINT RETURN END IF parms$ = parms$+CHR$(register) 'tells BASIC which register to put this parm into END IF WEND END IF AddEntry token$,funcOffset PRINT #2,parms$; 'tells BASIC what registers to pass parms in PRINT #2,CHR$(0); 'marks end of function entry RETURN BadFileFormat: PRINT "Error: ";fdFilename$;" has a format error" PRINT "In line:";lineNum;":";buf$ PRINT "In column:";column CLOSE STOP 'map {d0,d1,d2,d3,d4,d5,d6,d7,a0,a1,a2,a3,a4} to {1,..,13} GetRegister: uchar$=UCASE$(char$) IF uchar$="D" THEN register=1 ELSEIF uchar$="A" THEN register = 9 ELSE register=0 'error RETURN END IF GetChar 'skip a or d i=ASC(char$)-48 IF i<0 OR i>7 THEN register=0: RETURN 'error GetChar 'skip digit register=register+i IF register>13 THEN register=-1 'error RETURN SUB AddEntry(nam$, liboffset%) STATIC highByte = PEEK(VARPTR(liboffset%)) lowByte = PEEK(VARPTR(liboffset%)+1) PRINT #2,nam$; CHR$(0); CHR$(highByte); CHR$(lowByte); END SUB SUB GetLine STATIC SHARED buf$,column,lineNum LINE INPUT #1,buf$ column = 0 GetChar lineNum = lineNum+1 END SUB SUB GetNum STATIC SHARED num,token$ GetToken num = VAL(token$) END SUB SUB GetToken STATIC SHARED buf$,char$,token$ SkipWhiteSpace token$="" uchar$=UCASE$(char$) WHILE ((uchar$>="A") AND (uchar$<="Z")) OR ((uchar$>="0") AND (uchar$<="9")) OR (uchar$="-") token$=token$+char$ GetChar uchar$ = UCASE$(char$) WEND END SUB SUB SkipTill(stopChar$) STATIC SHARED char$ WHILE (char$ <> stopChar$) AND (char$ <> "") GetChar WEND END SUB SUB SkipWhiteSpace STATIC SHARED char$ WHILE (char$=" ") OR (char$=CHR$(9)) GetChar WEND END SUB SUB GetChar STATIC SHARED column,char$,buf$ column = column + 1 char$ = MID$(buf$,column,1) END SUB REM **** conficting token count and tokens **** DATA 11 DATA abs, Close, Exit, Input, Open, Output DATA Read, tan, Translate, Wait, Write -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Carolyn Scheppner -- CBM >>Amiga Technical Support<< UUCP ...{allegra,caip,ihnp4,seismo}!cbmvax!carolyn PHONE 215-431-9180 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=