formatting strings
Apr 7, 2011 18:44:57 GMT 1
Post by l18l on Apr 7, 2011 18:44:57 GMT 1
' formatstring
' created 2011-04-07 by L18L
INCLUDE "/usr/share/BaCon/hug_imports.bac"
INIT
' use C function asprintf
IMPORT "asprintf(char**,char*,...)" FROM "libc.so" TYPE int ALIAS ASPRINTF
'----------------------------------------------------------------------------
' formatstring(VAR v$ SIZE t)
' implementing deprecated C function sprintf using asprintf and FREE
' returns STRING result
' so you have the functionality of "PRINT var, ... FORMAT fmt" with GUI
' example: console PRINT var1$, var2$ FORMAT "file %1$s not found in directory %2$s"
' GUI: a$ = SPRINTF("The file %1$s was not found in directory %2$s", var1$, var2$)
'
' (1 to 6) strings
FUNCTION formatstring(VAR v$ SIZE t)
LOCAL result TYPE STRING
LOCAL rtrn$
ASPRINTF(ADDRESS(result), v$[1], v$[2], v$[3], v$[4], v$[5], v$[6])
rtrn$ = result
FREE result
RETURN rtrn$
END FUNCTION
'----------------------------------------------------------------------------
' demo example
var1$ = "foo"
var2$ = "bar"
fmt$ = "The file %2$s was not found in directory %1$s"
REM PRINT var1$, var2$ FORMAT fmt$
text$ = formatstring(fmt$, var1$, var2$)
output$ = "var1$=foo var2$=bar \nfmt$=The file %2$s was not found in directory %1$s \n\nusing text$=formatstring(\"fmt$\", var1$, var2$)\n result is:\n"
PRINT output$
PRINT text$
mainwin = WINDOW("FMTS format string", 450, 80)
output=MARK(output$, 440,50)
ATTACH(mainwin, output, 10,10)
text = MARK(text$, 420,15)
ATTACH(mainwin, text, 10 ,60)
DISPLAY