[OpenBIOS] Paflof with case insensitive dictionary lookups.

Stefan Reinauer stepan at suse.de
Wed Jun 12 16:19:26 CEST 2002


Hi,..

as described in one of my last mails, case insensitive number parsing
and dictionary lookups are needed for IEEE compliance. I made a little
patch to Paflof, that does this.
As Segher suggested, I created a word COMP-NOCASE, which is used by
$FIND instead of the case sensitive COMP word. It uses UPC to uppercase
the values while comparing. 
Additionally I changed DIGIT to uppercase a digit before comparing it to
A-F so deadbeef is now a valid hex value, like DEADBEEF is.
This should be checked in asap.

  Stefan

-- 
The x86 isn't all that complex - it just doesn't make a lot of
sense.          -- Mike Johnson, Leader of 80x86 Design at AMD
	                          Microprocessor Report (1994)
-------------- next part --------------
Index: engine.in
===================================================================
RCS file: /srv/cvs/openbios/paflof/engine.in,v
retrieving revision 1.35
diff -u -r1.35 engine.in
--- engine.in	2002/06/12 05:41:37	1.35
+++ engine.in	2002/06/12 13:07:08
@@ -184,8 +184,11 @@
 col(ACCEPT TUCK 0 DO?DO(21) KEY DUP LIT('\n') = ?BRANCH(7) SPACE DROP DROP DROP I UNLOOP EXIT DUP EMIT OVER C! 1 + DOLOOP(-22) DROP KEY LIT('\n') = ?BRANCH(-6) CR)
 col(EXPECT ACCEPT SPAN !)
 
+// COMP-NOCASE needed for dictionary lookups.
+col(COMP-NOCASE 0 DO?DO(33) OVER I + C@ UPC OVER I + C@ UPC OVER OVER < ?BRANCH(8) DROP DROP UNLOOP DROP DROP LIT(-1) EXIT > ?BRANCH(5) UNLOOP DROP DROP 1 EXIT DOLOOP(-33) DROP DROP 0)
+
 // 5.2
-col(DIGIT OVER DUP LIT('A') LIT('Z') BETWEEN ?BRANCH(3) LIT(7) - LIT('0') - DUP ROT 0 SWAP WITHIN ?BRANCH(4) NIP TRUE BRANCH(2) DROP FALSE)
+col(DIGIT OVER UPC DUP LIT('A') LIT('Z') BETWEEN ?BRANCH(3) LIT(7) - LIT('0') - DUP ROT 0 SWAP WITHIN ?BRANCH(4) NIP TRUE BRANCH(2) DROP FALSE)
 col(>NUMBER DUP 0= ?BRANCH(1) EXIT OVER C@ BASE @ DIGIT ?BRANCH(23) SWAP >R SWAP >R >R BASE @ U* SWAP BASE @ UM* ROT + R> 0 D+ R> CHAR+ R> 1- BRANCH(-35) DROP)
 col($NUMBER DUP 0= ?BRANCH(4) DROP DROP TRUE EXIT >R DUP >R C@ LIT('-') = DUP ?BRANCH(15) R> CHAR+ R> 1- DUP 0= ?BRANCH(5) DROP DROP DROP TRUE EXIT >R >R 0 0 R> R> >NUMBER NIP 0= ?BRANCH(7) DROP SWAP ?BRANCH(1) NEGATE FALSE EXIT DROP DROP DROP TRUE)
 
@@ -208,7 +211,7 @@
 col(WORDS LAST @ ?DUP ?BRANCH(9) DUP CELL+ CHAR+ COUNT TYPE SPACE @ BRANCH(-12))
 col(HEADER ALIGN HERE LAST @ , LATEST ! 0 C, DUP C, BOUNDS DO?DO(5) I C@ C, DOLOOP(-5) ALIGN)
 col(>XCODE CELL+ CHAR+ DUP C@ + CHAR+ ALIGNED)
-col($FIND LAST @ >R OVER OVER R@ CELL+ CHAR+ COUNT ROT OVER = ?BRANCH(17) COMP 0= ?BRANCH(16) DROP DROP R> DUP >XCODE SWAP IMMEDIATE? ?BRANCH(2) 1 EXIT -1 EXIT DROP DROP DROP R> @ DUP 0= ?BRANCH(-38) DROP FALSE)
+col($FIND LAST @ >R OVER OVER R@ CELL+ CHAR+ COUNT ROT OVER = ?BRANCH(17) COMP-NOCASE 0= ?BRANCH(16) DROP DROP R> DUP >XCODE SWAP IMMEDIATE? ?BRANCH(2) 1 EXIT -1 EXIT DROP DROP DROP R> @ DUP 0= ?BRANCH(-38) DROP FALSE)
 col(REVEAL LATEST @ LAST !)
 
 col(FINDCHAR SWAP 0 DO?DO(16) OVER I + C@ OVER = ?BRANCH(6) I UNLOOP NIP NIP TRUE EXIT DOLOOP(-16) DROP DROP FALSE)


More information about the openbios mailing list