From owner-acpi-jp@jp.freebsd.org  Tue Jan  4 01:03:35 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id BAA86389;
	Tue, 4 Jan 2000 01:03:35 +0900 (JST)
	(envelope-from owner-acpi-jp@jp.FreeBSD.org)
Received: from tasogare.imasy.or.jp (daemon@tasogare.imasy.or.jp [202.227.24.5])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id BAA86384
	for <acpi-jp@jp.freebsd.org>; Tue, 4 Jan 2000 01:03:35 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Received: from localhost (isdn49.imasy.or.jp [202.227.24.241])
	by tasogare.imasy.or.jp (8.9.3+3.2W/3.7W-tasogare/smtpfeed 1.01) with ESMTP id BAA03288
	for <acpi-jp@jp.freebsd.org>; Tue, 4 Jan 2000 01:03:31 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Message-Id: <200001031603.BAA03288@tasogare.imasy.or.jp>
To: acpi-jp@jp.freebsd.org
X-Mailer: Mew version 1.93 on Emacs 19.34 / Mule 2.3 (SUETSUMUHANA)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Date: Tue, 04 Jan 2000 01:03:31 +0900
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
X-Dispatcher: imput version 980905(IM100)
Lines: 83
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+990727
X-Sequence: acpi-jp 199
Subject: [acpi-jp 199] Store to Index implementaion
Errors-To: owner-acpi-jp@jp.freebsd.org
Sender: owner-acpi-jp@jp.freebsd.org
X-Originator: iwasaki@jp.freebsd.org

Store(0x1, Index(BUFF, 0x0, Zero)) $B$N$h$&$J(B Index $B$N8~$3$&$N(B
$BNN0h$X%"%/%;%9$9$kOC$G$9!#(B
Index $B$N(B source $B$,(B Package $B$N>l9g$O4JC1$=$&$J$s$G$9$,!"(BBuffer $B$N(B
$B>l9g$O8=>u$N<BAu$G$O6l$7$=$&$G$9!#$I$&$7$^$7$g$&(B?
# $B:#$^$G=8$^$C$?(B DSDT $B$r8+$k8B$j!"(BIndex(Buffer,XXX) $B$J$d$D$OL5$$$h$&$G$9$,(B...

$B$H$j$"$($:(B Package $B$N>l9g$N$_!"8=>u$N(B acpi_store_to_name() $B$N(B
$BOHAH$_$K$N$C$+$C$?7A$G%3!<%I$r;n$7$K=q$$$F$_$^$7$?!#(B
$B0J2<$N$h$&$K(B Buff[0] $B$,99?7$5$l$F$$$k$h$&$G$9!#(B

AML>s
    If(LEqual(Local0, 0x4)){
        Store(0x1, Index(BUFF, 0x0, Zero))[Store number 0x1]
AML>t
_WAK  Method: Arg 1 From 0x280ee77d To 0x280eea2a
  BUFF  Package:elements 2 
        Num:0x1
        Num:0x1
  Arg0    Num:0x1
  Local0  Num:0x4


Index: parse.c
===================================================================
RCS file: /home/cvs/ACPI/util/acpiconf/parse.c,v
retrieving revision 1.14
diff -u -r1.14 parse.c
--- parse.c	2000/01/03 10:16:59	1.14
+++ parse.c	2000/01/03 15:40:38
@@ -1393,15 +1393,33 @@
 		break;
 
 	case 0x88:		/* IndexOp */
+	{
+		union aml_object *srcobj, *objref;
+
 		DPRINT("Index(");
-		acpi_parse_termobj(env, indent);
+		srcobj = acpi_eval_name(env,acpi_parse_termobj(env, indent));
 		DPRINT(", ");
-		acpi_parse_termobj(env, indent);
+		num1 = acpi_objtonum
+		  (env, acpi_eval_name(env, acpi_parse_termobj(env, indent)));
 		DPRINT(", ");
-		acpi_parse_termobj(env, indent);
+		distname1 = acpi_parse_termobj(env, indent);
 		DPRINT(")");
+		switch (srcobj->type) {
+		case aml_t_package:
+			objref = srcobj->package.objects[num1];
+			break;
+		default:
+			fprintf(stderr,"Index supports package only for now\n");
+			return aname;
+		}
+		
+		acpi_store_to_name(env, objref, distname1);
+		env->work.property = objref;
+		aname = &env->work;
+		strncpy(aname->name, "####", 4);	/* No name */
 		break;
-
+	}
+	
 	case 0x89:		/* MatchOp */
 		DPRINT("Match(");
 		acpi_parse_termobj(env, indent);
Index: store.c
===================================================================
RCS file: /home/cvs/ACPI/util/acpiconf/store.c,v
retrieving revision 1.4
diff -u -r1.4 store.c
--- store.c	2000/01/03 10:17:00	1.4
+++ store.c	2000/01/03 15:10:04
@@ -112,7 +112,7 @@
 	}
 	switch(name->property->type){
 	case aml_t_num:
-		if(name==&env->work)
+		if(memcmp(name->name, "####", 4) && name==&env->work)
 			break;
 		if(obj->type==aml_t_num){
 			name->property->num=obj->num;
