67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ This file and its contents are supplied under the terms of the
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ Common Development and Distribution License ("CDDL"), version 1.0.
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ You may only use this file in accordance with the terms of version
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ 1.0 of the CDDL.
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ A full copy of the text of the CDDL should have accompanied this
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ source. A copy of the CDDL is also available via the Internet at
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ http://www.illumos.org/license/CDDL.
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ Copyright 2016 Toomas Soome <tsoome@me.com>
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ This file is part of the softcore, implementing [partial] word sets.
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ Optional String word set.
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ compare is implemented in ficl core.
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ search ( c-addr1 u1 c-addr2 u2 -- c-addr3 u3 flag )
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ Search the string specified by c-addr1 u1 for the string specified by
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ c-addr2 u2. If flag is true, a match was found at c-addr3 with u3 characters
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ remaining. If flag is false there was no match and c-addr3 is c-addr1 and u3
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome\ is u1.
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome: search { c-addr1 u1 c-addr2 u2 | saved-addr1 saved-u1 -- c-addr3 u3 flag }
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome c-addr1 to saved-addr1 \ save original c-addr1
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome u1 to saved-u1 \ save original u1
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome begin
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome c-addr1 u1 u2 < if u1 else u2 then
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome c-addr2 u2 compare
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome while
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome c-addr1 1+ to c-addr1
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome u1 1- to u1
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome u1 0= if
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome saved-addr1 saved-u1 0 exit \ not found
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome then
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome repeat
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome c-addr1 u1 -1
67ab13dcc8a263ef90b5607c54df109997849a2bToomas Soome;