[openfirmware] r900 - clients/lib ofw/core

svn at openfirmware.info svn at openfirmware.info
Fri Aug 29 01:14:16 CEST 2008


Author: wmb
Date: 2008-08-29 01:14:16 +0200 (Fri, 29 Aug 2008)
New Revision: 900

Modified:
   clients/lib/lib.c
   clients/lib/wrappers.c
   clients/lib/wrappers64.c
   ofw/core/filecmds.fth
Log:
Added "firmworks,create" to the client interface so client programs
can ask OFW to create new files.


Modified: clients/lib/lib.c
===================================================================
--- clients/lib/lib.c	2008-08-28 22:42:50 UTC (rev 899)
+++ clients/lib/lib.c	2008-08-28 23:14:16 UTC (rev 900)
@@ -103,9 +103,14 @@
   if (fp == (FILE *)NULL)
       return ((FILE *)NULL);
 
-  if ((fp->id = OFOpen(name)) == 0)
+  if ((fp->id = OFOpen(name)) == 0) {
+      if (mode[0] == 'w' && ((fp->id = OFCreate(name)) != 0))
+          goto good;
+
       return ((FILE *)NULL);
+  }
   
+ good:
   fp->bufc = 0;
   return(fp);
 }

Modified: clients/lib/wrappers.c
===================================================================
--- clients/lib/wrappers.c	2008-08-28 22:42:50 UTC (rev 899)
+++ clients/lib/wrappers.c	2008-08-28 23:14:16 UTC (rev 900)
@@ -243,6 +243,24 @@
 	return ((ihandle) argarray[CIF_HANDLER_IN+LOW(1)]);
 }
 
+/* FirmWorks extension */
+ihandle
+OFCreate( char *devicename)
+{
+#ifdef CIF64
+	ULONG argarray[] = { 0,(ULONG)"firmworks,create", 0,1, 0,1, 0,0, 0,0};
+#else
+	cell_t argarray[] = { (cell_t)"firmworks,create", 1,1,0,0};
+#endif
+
+	argarray[CIF_HANDLER_IN+LOW(0)] = (long)devicename;
+	if (call_firmware(argarray) != 0)
+	{
+		return (ihandle)0;
+	}
+	return ((ihandle) argarray[CIF_HANDLER_IN+LOW(1)]);
+}
+
 void
 OFClose(ihandle id)
 {

Modified: clients/lib/wrappers64.c
===================================================================
--- clients/lib/wrappers64.c	2008-08-28 22:42:50 UTC (rev 899)
+++ clients/lib/wrappers64.c	2008-08-28 23:14:16 UTC (rev 900)
@@ -176,6 +176,19 @@
 }
 
 ihandle
+OFCreate( char *devicename)
+{
+	ULONG argarray[] = { (ULONG)"firmworks,create",1,1,0,0};
+
+	argarray[CIF_HANDLER_IN+0] = (long)devicename;
+	if (call_firmware(argarray) != 0)
+	{
+		return (ihandle)0;
+	}
+	return ((ihandle) argarray[CIF_HANDLER_IN+1]);
+}
+
+ihandle
 OFOpen( char *devicename)
 {
 	ULONG argarray[] = { (ULONG)"open",1,1,0,0};

Modified: ofw/core/filecmds.fth
===================================================================
--- ofw/core/filecmds.fth	2008-08-28 22:42:50 UTC (rev 899)
+++ ofw/core/filecmds.fth	2008-08-28 23:14:16 UTC (rev 900)
@@ -525,6 +525,12 @@
 ;
 ' $create-file to _ofcreate
 
+dev /client-services
+: firmworks,create  ( cstr -- ihandle )
+   cscount  ['] $create-file  catch  if  2drop 0  then
+;
+device-end
+
 internal
 
 : ?delete-file  ( path$ -- continue? )




More information about the openfirmware mailing list