words[]: type Tid = Thread ¢ const bool yes = 1 , no = 0 const uint ok = 0 const { float pi = 3.1415926535898 float ec = 2.718281828459 } enum int FD = { stdin , stdout , stderr , fd_void = - 1 } enum int16 s_type = { s_none = - 1 , s_unknown = 0 , s_any = 0 , s_pipe = 1 , s_tty = 2 , s_dir = 4 , s_block = 6 , s_file = 8 , s_link = 10 , s_socket = 12 , s_erased = 14 } enum { fnm_pathname = 2 , fnm_nohidden = 4 , fnm_casefold = 16 } enum { f_follow_symlink = 1 , f_create_path = 2 } type FileInfo = { str filename ; uint16 filetype ; uint16 permissions ; uint32 user ; uint32 group ; uint32 _dummy ; uint64 count ; float64 ctime ; float64 mtime ; float64 atime ; } ; enum { s_packetized = 1 << 0 , s_connected = 1 << 1 , s_unreliable = 1 << 2 , s_listening = 1 << 3 } type Stream = { int16 fd ; int8 filetype ; int8 streamtype ; uint32 stopctls ; str filepath ; int32 out_state ; int32 in_state ; Irpt out_irpt ; float64 out_lastio ; float64 out_timeout ; int8 [ ] out_data ; int8 * out_ptr ; Irpt in_irpt ; float64 in_lastio ; float64 in_timeout ; int8 [ ] in_data ; int8 * in_ptr ; int8 [ ] putbackbuffer ; } enum SocketDomainType = { local = 0 , inet = 16 , stream = 1 , packet = 2 , datagram = 3 , tcp = inet + stream , udp = inet + datagram } extern { bool match ( str ¢ string , str ¢ pattern , uint flags ) = opcode match str fullpath ( str ¢ path , uint flags ) = opcode fullpath s_type nodetype ( str ¢ path , bool resolve_symlink ) = opcode nodetype FileInfo fileinfo ( str ¢ path , bool resolve_symlink ) = opcode fileinfo void renamefile ( str ¢ path , str ¢ newpath , bool replace ) = opcode renamefile void swapfiles ( str ¢ path , str ¢ path2 ) = opcode swapfiles str tempfile ( str ¢ renamable_to_path ) = opcode tempfile FD tempfile ( ) = opcode tempfile utf8str readfile ( str ¢ path ) = opcode readfile str readlink ( str ¢ path ) = opcode readlink FileInfo [ ] readdir ( str ¢ path ) = opcode readdir void createfile ( str ¢ path , uint8 [ ] ¢ data , uint how , uint mode ) = opcode createfile void createfile ( str ¢ path , utf8str ¢ data , uint how , uint mode ) = opcode createfile void createlink ( str ¢ path , str ¢ data ) = opcode createlink void createdir ( str ¢ path , uint mode ) = opcode createdir void createpipe ( str ¢ path , uint mode ) = opcode createpipe void rmvfile ( str ¢ path ) = opcode rmvfile void rmvlink ( str ¢ path ) = opcode rmvlink void rmvdir ( str ¢ path , bool fulltree ) = opcode rmvdir FD socket ( SocketDomainType , str ¢ myaddress ) = opcode socket void connect ( FD , str ¢ peeraddress ) = opcode connect FD accept ( FD ) = opcode accept FD open ( str ¢ , uint how , uint mode ) = opcode open FD open ( str ¢ , uint how ) = opcode open void close ( FD ) = opcode close long fpos ( FD ) = opcode fpos long flen ( FD ) = opcode flen void seek ( FD , ulong ) = opcode fseek void truncate ( FD ) = opcode truncate str errorstr ( int error ) = opcode errorstr str errorstr ( ) = opcode errorstr void print ( str ) = opcode print void print ( str ¢ ) = opcode print void print ( int ) = opcode print void print ( uint ) = opcode print void print ( long ) = opcode print void print ( ulong ) = opcode print void putchar ( utf8char ) = opcode putbyte void putchar ( ucs1char ) = opcode putchar void putchar ( ucs2char ) = opcode putchar void putchar ( ucs4char ) = opcode putchar char getchar ( ) = opcode getchar void write ( FD , int8 ) = opcode write void write ( FD , int16 ) = opcode write void write ( FD , int32 ) = opcode write void write ( FD , int64 ) = opcode write void write ( FD , uint8 ) = opcode write void write ( FD , uint16 ) = opcode write void write ( FD , uint32 ) = opcode write void write ( FD , uint64 ) = opcode write void write ( FD , str ¢ ) = opcode write void write ( FD , str ) = opcode write int8 read ( FD ) = opcode read int16 read ( FD ) = opcode read int32 read ( FD ) = opcode read int64 read ( FD ) = opcode read uint8 read ( FD ) = opcode read uint16 read ( FD ) = opcode read uint32 read ( FD ) = opcode read uint64 read ( FD ) = opcode read str read ( FD ) = opcode read void read ( FD , str ¢ ) = opcode read void read ( FD , str ¢ , uint32 ) = opcode read bool isfile ( str ¢ path ) bool isdir ( str ¢ path ) bool islink ( str ¢ path ) FileInfo fileinfo ( str ¢ path ) void createfile ( str ¢ path , uint8 [ ] ¢ data , uint how ) void createfile ( str ¢ path , uint8 [ ] ¢ data ) void createdir ( str ¢ path ) void createpipe ( str ¢ path ) } float32 round ( float32 ) = opcode round ; float32 floor ( float32 ) = opcode floor ; float32 ceil ( float32 ) = opcode ceil ; float32 integ ( float32 ) = opcode integ ; float32 fract ( float32 ) = opcode fract ; int sign ( float32 ) = opcode sign ; float32 abs ( float32 ) = opcode abs ; float32 min ( float32 , float32 ) = opcode min ; float32 max ( float32 , float32 ) = opcode max ; float32 min ( float32 , float32 , float32 ) = opcode min ; float32 max ( float32 , float32 , float32 ) = opcode max ; float32 random ( ) = opcode random ; float32 random ( float32 ) = opcode random ; float32 sin ( float32 ) = opcode sin ; float32 cos ( float32 ) = opcode cos ; float32 tan ( float32 ) = opcode tan ; float32 asin ( float32 ) = opcode asin ; float32 acos ( float32 ) = opcode acos ; float32 atan ( float32 ) = opcode atan ; float32 sinh ( float32 ) = opcode sinh ; float32 cosh ( float32 ) = opcode cosh ; float32 tanh ( float32 ) = opcode tanh ; float32 exp10 ( float32 ) = opcode exp10 ; float32 log10 ( float32 ) = opcode log10 ; float32 exp2 ( float32 ) = opcode exp2 ; float32 log2 ( float32 ) = opcode log2 ; float32 expe ( float32 ) = opcode expe ; float32 loge ( float32 ) = opcode loge ; float32 exp ( float32 , float32 ) = opcode exp ; float32 log ( float32 , float32 ) = opcode log ; float32 pow ( float32 , int ) = opcode pow ; float32 sqrt ( float32 ) = opcode sqrt ; str numstr ( float32 ) = opcode numstr ; float32 numval ( str ¢ ) = opcode numval ; float32 min ( float32 [ ] ¢ ) = opcode min ; float32 min ( float32 [ to ] ) = opcode min ; float32 max ( float32 [ ] ¢ ) = opcode max ; float32 max ( float32 [ to ] ) = opcode max ; void print ( float32 ) = opcode print ; void write ( FD , float32 ) = opcode write ; float32 read ( FD ) = opcode read ; scope float32 { float32 mant ( float32 ) = opcode mant ; int exp ( float32 ) = opcode frexp ; } float64 round ( float64 ) = opcode round ; float64 floor ( float64 ) = opcode floor ; float64 ceil ( float64 ) = opcode ceil ; float64 integ ( float64 ) = opcode integ ; float64 fract ( float64 ) = opcode fract ; int sign ( float64 ) = opcode sign ; float64 abs ( float64 ) = opcode abs ; float64 min ( float64 , float64 ) = opcode min ; float64 max ( float64 , float64 ) = opcode max ; float64 min ( float64 , float64 , float64 ) = opcode min ; float64 max ( float64 , float64 , float64 ) = opcode max ; float64 random ( ) = opcode random ; float64 random ( float64 ) = opcode random ; float64 sin ( float64 ) = opcode sin ; float64 cos ( float64 ) = opcode cos ; float64 tan ( float64 ) = opcode tan ; float64 asin ( float64 ) = opcode asin ; float64 acos ( float64 ) = opcode acos ; float64 atan ( float64 ) = opcode atan ; float64 sinh ( float64 ) = opcode sinh ; float64 cosh ( float64 ) = opcode cosh ; float64 tanh ( float64 ) = opcode tanh ; float64 exp10 ( float64 ) = opcode exp10 ; float64 log10 ( float64 ) = opcode log10 ; float64 exp2 ( float64 ) = opcode exp2 ; float64 log2 ( float64 ) = opcode log2 ; float64 expe ( float64 ) = opcode expe ; float64 loge ( float64 ) = opcode loge ; float64 exp ( float64 , float64 ) = opcode exp ; float64 log ( float64 , float64 ) = opcode log ; float64 pow ( float64 , int ) = opcode pow ; float64 sqrt ( float64 ) = opcode sqrt ; str numstr ( float64 ) = opcode numstr ; float64 numval ( str ¢ ) = opcode numval ; float64 min ( float64 [ ] ¢ ) = opcode min ; float64 min ( float64 [ to ] ) = opcode min ; float64 max ( float64 [ ] ¢ ) = opcode max ; float64 max ( float64 [ to ] ) = opcode max ; void print ( float64 ) = opcode print ; void write ( FD , float64 ) = opcode write ; float64 read ( FD ) = opcode read ; scope float64 { float64 mant ( float64 ) = opcode mant ; int exp ( float64 ) = opcode frexp ; } float128 round ( float128 ) = opcode round ; float128 floor ( float128 ) = opcode floor ; float128 ceil ( float128 ) = opcode ceil ; float128 integ ( float128 ) = opcode integ ; float128 fract ( float128 ) = opcode fract ; int sign ( float128 ) = opcode sign ; float128 abs ( float128 ) = opcode abs ; float128 min ( float128 , float128 ) = opcode min ; float128 max ( float128 , float128 ) = opcode max ; float128 min ( float128 , float128 , float128 ) = opcode min ; float128 max ( float128 , float128 , float128 ) = opcode max ; float128 random ( ) = opcode random ; float128 random ( float128 ) = opcode random ; float128 sin ( float128 ) = opcode sin ; float128 cos ( float128 ) = opcode cos ; float128 tan ( float128 ) = opcode tan ; float128 asin ( float128 ) = opcode asin ; float128 acos ( float128 ) = opcode acos ; float128 atan ( float128 ) = opcode atan ; float128 sinh ( float128 ) = opcode sinh ; float128 cosh ( float128 ) = opcode cosh ; float128 tanh ( float128 ) = opcode tanh ; float128 exp10 ( float128 ) = opcode exp10 ; float128 log10 ( float128 ) = opcode log10 ; float128 exp2 ( float128 ) = opcode exp2 ; float128 log2 ( float128 ) = opcode log2 ; float128 expe ( float128 ) = opcode expe ; float128 loge ( float128 ) = opcode loge ; float128 exp ( float128 , float128 ) = opcode exp ; float128 log ( float128 , float128 ) = opcode log ; float128 pow ( float128 , int ) = opcode pow ; float128 sqrt ( float128 ) = opcode sqrt ; str numstr ( float128 ) = opcode numstr ; float128 numval ( str ¢ ) = opcode numval ; float128 min ( float128 [ ] ¢ ) = opcode min ; float128 min ( float128 [ to ] ) = opcode min ; float128 max ( float128 [ ] ¢ ) = opcode max ; float128 max ( float128 [ to ] ) = opcode max ; void print ( float128 ) = opcode print ; void write ( FD , float128 ) = opcode write ; float128 read ( FD ) = opcode read ; scope float128 { float128 mant ( float128 ) = opcode mant ; int exp ( float128 ) = opcode frexp ; } int sign ( int8 ) = opcode sign int sign ( int16 ) = opcode sign int sign ( int32 ) = opcode sign int sign ( int64 ) = opcode sign uint8 abs ( int8 ) = opcode abs uint16 abs ( int16 ) = opcode abs uint32 abs ( int32 ) = opcode abs uint64 abs ( int64 ) = opcode abs int16 swap ( int16 ) = opcode swap uint16 swap ( uint16 ) = opcode swap int32 swap ( int32 ) = opcode swap uint32 swap ( uint32 ) = opcode swap int64 swap ( int64 ) = opcode swap uint64 swap ( uint64 ) = opcode swap int16 hilo ( int16 ) = opcode hilo uint16 hilo ( uint16 ) = opcode hilo int32 hilo ( int32 ) = opcode hilo uint32 hilo ( uint32 ) = opcode hilo int64 hilo ( int64 ) = opcode hilo uint64 hilo ( uint64 ) = opcode hilo int16 lohi ( int16 ) = opcode lohi uint16 lohi ( uint16 ) = opcode lohi int32 lohi ( int32 ) = opcode lohi uint32 lohi ( uint32 ) = opcode lohi int64 lohi ( int64 ) = opcode lohi uint64 lohi ( uint64 ) = opcode lohi uint8 flip ( uint8 ) = opcode flip uint16 flip ( uint16 ) = opcode flip uint32 flip ( uint32 ) = opcode flip uint64 flip ( uint64 ) = opcode flip int pow ( int , int ) = opcode pow uint pow ( uint , int ) = opcode pow long pow ( long , int ) = opcode pow ulong pow ( ulong , int ) = opcode pow uint random ( uint ) = opcode random ulong random ( ulong ) = opcode random void flip ( byte [ to ] ) = opcode flip ; void rol ( byte [ to ] ) = opcode rol ; void ror ( byte [ to ] ) = opcode ror ; void sort ( byte [ to ] ) = opcode sort ; void rsort ( byte [ to ] ) = opcode rsort ; void shuffle ( byte [ to ] ) = opcode shuffle ; void revert ( byte [ to ] ) = opcode revert ; byte [ ] join ( byte [ ] [ ] ¢ , byte ) = opcode join ; byte [ ] join ( byte [ ] [ ] ¢ , byte [ ] ¢ ) = opcode join ; byte [ ] [ ] split ( byte [ ] ¢ , byte ) = opcode split ; byte [ ] [ ] split ( byte [ ] ¢ , byte [ ] ¢ ) = opcode split ; byte min ( byte , byte ) = opcode min ; byte min ( byte [ to ] ) = opcode min ; byte max ( byte , byte ) = opcode max ; byte max ( byte [ to ] ) = opcode max ; uint find ( byte [ to ] , byte ) = opcode find ; uint find ( byte [ to ] , byte [ ] ¢ ) = opcode find ; uint rfind ( byte [ to ] , byte ) = opcode rfind ; uint rfind ( byte [ to ] , byte [ ] ¢ ) = opcode rfind ; void shrinktofit ( byte [ ] & ) = opcode shrinktofit byte [ to ] substr ( byte [ ] ¢ , uint a , uint e ) = opcode substr byte [ to ] midstr ( byte [ ] ¢ , uint i , uint n ) = opcode midstr byte [ to ] leftstr ( byte [ ] ¢ , uint n ) = opcode leftstr byte [ to ] rightstr ( byte [ ] ¢ , uint n ) = opcode rightstr byte numval ( utf8str ¢ ) = opcode numval byte numval ( ucs1str ¢ ) = opcode numval byte numval ( ucs2str ¢ ) = opcode numval byte numval ( ucs4str ¢ ) = opcode numval void flip ( ubyte [ to ] ) = opcode flip ; void rol ( ubyte [ to ] ) = opcode rol ; void ror ( ubyte [ to ] ) = opcode ror ; void sort ( ubyte [ to ] ) = opcode sort ; void rsort ( ubyte [ to ] ) = opcode rsort ; void shuffle ( ubyte [ to ] ) = opcode shuffle ; void revert ( ubyte [ to ] ) = opcode revert ; ubyte [ ] join ( ubyte [ ] [ ] ¢ , ubyte ) = opcode join ; ubyte [ ] join ( ubyte [ ] [ ] ¢ , ubyte [ ] ¢ ) = opcode join ; ubyte [ ] [ ] split ( ubyte [ ] ¢ , ubyte ) = opcode split ; ubyte [ ] [ ] split ( ubyte [ ] ¢ , ubyte [ ] ¢ ) = opcode split ; ubyte min ( ubyte , ubyte ) = opcode min ; ubyte min ( ubyte [ to ] ) = opcode min ; ubyte max ( ubyte , ubyte ) = opcode max ; ubyte max ( ubyte [ to ] ) = opcode max ; uint find ( ubyte [ to ] , ubyte ) = opcode find ; uint find ( ubyte [ to ] , ubyte [ ] ¢ ) = opcode find ; uint rfind ( ubyte [ to ] , ubyte ) = opcode rfind ; uint rfind ( ubyte [ to ] , ubyte [ ] ¢ ) = opcode rfind ; void shrinktofit ( ubyte [ ] & ) = opcode shrinktofit ubyte [ to ] substr ( ubyte [ ] ¢ , uint a , uint e ) = opcode substr ubyte [ to ] midstr ( ubyte [ ] ¢ , uint i , uint n ) = opcode midstr ubyte [ to ] leftstr ( ubyte [ ] ¢ , uint n ) = opcode leftstr ubyte [ to ] rightstr ( ubyte [ ] ¢ , uint n ) = opcode rightstr ubyte numval ( utf8str ¢ ) = opcode numval ubyte numval ( ucs1str ¢ ) = opcode numval ubyte numval ( ucs2str ¢ ) = opcode numval ubyte numval ( ucs4str ¢ ) = opcode numval void flip ( short [ to ] ) = opcode flip ; void rol ( short [ to ] ) = opcode rol ; void ror ( short [ to ] ) = opcode ror ; void sort ( short [ to ] ) = opcode sort ; void rsort ( short [ to ] ) = opcode rsort ; void shuffle ( short [ to ] ) = opcode shuffle ; void revert ( short [ to ] ) = opcode revert ; short [ ] join ( short [ ] [ ] ¢ , short ) = opcode join ; short [ ] join ( short [ ] [ ] ¢ , short [ ] ¢ ) = opcode join ; short [ ] [ ] split ( short [ ] ¢ , short ) = opcode split ; short [ ] [ ] split ( short [ ] ¢ , short [ ] ¢ ) = opcode split ; short min ( short , short ) = opcode min ; short min ( short [ to ] ) = opcode min ; short max ( short , short ) = opcode max ; short max ( short [ to ] ) = opcode max ; uint find ( short [ to ] , short ) = opcode find ; uint find ( short [ to ] , short [ ] ¢ ) = opcode find ; uint rfind ( short [ to ] , short ) = opcode rfind ; uint rfind ( short [ to ] , short [ ] ¢ ) = opcode rfind ; void shrinktofit ( short [ ] & ) = opcode shrinktofit short [ to ] substr ( short [ ] ¢ , uint a , uint e ) = opcode substr short [ to ] midstr ( short [ ] ¢ , uint i , uint n ) = opcode midstr short [ to ] leftstr ( short [ ] ¢ , uint n ) = opcode leftstr short [ to ] rightstr ( short [ ] ¢ , uint n ) = opcode rightstr short numval ( utf8str ¢ ) = opcode numval short numval ( ucs1str ¢ ) = opcode numval short numval ( ucs2str ¢ ) = opcode numval short numval ( ucs4str ¢ ) = opcode numval void flip ( ushort [ to ] ) = opcode flip ; void rol ( ushort [ to ] ) = opcode rol ; void ror ( ushort [ to ] ) = opcode ror ; void sort ( ushort [ to ] ) = opcode sort ; void rsort ( ushort [ to ] ) = opcode rsort ; void shuffle ( ushort [ to ] ) = opcode shuffle ; void revert ( ushort [ to ] ) = opcode revert ; ushort [ ] join ( ushort [ ] [ ] ¢ , ushort ) = opcode join ; ushort [ ] join ( ushort [ ] [ ] ¢ , ushort [ ] ¢ ) = opcode join ; ushort [ ] [ ] split ( ushort [ ] ¢ , ushort ) = opcode split ; ushort [ ] [ ] split ( ushort [ ] ¢ , ushort [ ] ¢ ) = opcode split ; ushort min ( ushort , ushort ) = opcode min ; ushort min ( ushort [ to ] ) = opcode min ; ushort max ( ushort , ushort ) = opcode max ; ushort max ( ushort [ to ] ) = opcode max ; uint find ( ushort [ to ] , ushort ) = opcode find ; uint find ( ushort [ to ] , ushort [ ] ¢ ) = opcode find ; uint rfind ( ushort [ to ] , ushort ) = opcode rfind ; uint rfind ( ushort [ to ] , ushort [ ] ¢ ) = opcode rfind ; void shrinktofit ( ushort [ ] & ) = opcode shrinktofit ushort [ to ] substr ( ushort [ ] ¢ , uint a , uint e ) = opcode substr ushort [ to ] midstr ( ushort [ ] ¢ , uint i , uint n ) = opcode midstr ushort [ to ] leftstr ( ushort [ ] ¢ , uint n ) = opcode leftstr ushort [ to ] rightstr ( ushort [ ] ¢ , uint n ) = opcode rightstr ushort numval ( utf8str ¢ ) = opcode numval ushort numval ( ucs1str ¢ ) = opcode numval ushort numval ( ucs2str ¢ ) = opcode numval ushort numval ( ucs4str ¢ ) = opcode numval void flip ( int [ to ] ) = opcode flip ; void rol ( int [ to ] ) = opcode rol ; void ror ( int [ to ] ) = opcode ror ; void sort ( int [ to ] ) = opcode sort ; void rsort ( int [ to ] ) = opcode rsort ; void shuffle ( int [ to ] ) = opcode shuffle ; void revert ( int [ to ] ) = opcode revert ; int [ ] join ( int [ ] [ ] ¢ , int ) = opcode join ; int [ ] join ( int [ ] [ ] ¢ , int [ ] ¢ ) = opcode join ; int [ ] [ ] split ( int [ ] ¢ , int ) = opcode split ; int [ ] [ ] split ( int [ ] ¢ , int [ ] ¢ ) = opcode split ; int min ( int , int ) = opcode min ; int min ( int [ to ] ) = opcode min ; int max ( int , int ) = opcode max ; int max ( int [ to ] ) = opcode max ; uint find ( int [ to ] , int ) = opcode find ; uint find ( int [ to ] , int [ ] ¢ ) = opcode find ; uint rfind ( int [ to ] , int ) = opcode rfind ; uint rfind ( int [ to ] , int [ ] ¢ ) = opcode rfind ; void shrinktofit ( int [ ] & ) = opcode shrinktofit int [ to ] substr ( int [ ] ¢ , uint a , uint e ) = opcode substr int [ to ] midstr ( int [ ] ¢ , uint i , uint n ) = opcode midstr int [ to ] leftstr ( int [ ] ¢ , uint n ) = opcode leftstr int [ to ] rightstr ( int [ ] ¢ , uint n ) = opcode rightstr int numval ( utf8str ¢ ) = opcode numval int numval ( ucs1str ¢ ) = opcode numval int numval ( ucs2str ¢ ) = opcode numval int numval ( ucs4str ¢ ) = opcode numval void flip ( uint [ to ] ) = opcode flip ; void rol ( uint [ to ] ) = opcode rol ; void ror ( uint [ to ] ) = opcode ror ; void sort ( uint [ to ] ) = opcode sort ; void rsort ( uint [ to ] ) = opcode rsort ; void shuffle ( uint [ to ] ) = opcode shuffle ; void revert ( uint [ to ] ) = opcode revert ; uint [ ] join ( uint [ ] [ ] ¢ , uint ) = opcode join ; uint [ ] join ( uint [ ] [ ] ¢ , uint [ ] ¢ ) = opcode join ; uint [ ] [ ] split ( uint [ ] ¢ , uint ) = opcode split ; uint [ ] [ ] split ( uint [ ] ¢ , uint [ ] ¢ ) = opcode split ; uint min ( uint , uint ) = opcode min ; uint min ( uint [ to ] ) = opcode min ; uint max ( uint , uint ) = opcode max ; uint max ( uint [ to ] ) = opcode max ; uint find ( uint [ to ] , uint ) = opcode find ; uint find ( uint [ to ] , uint [ ] ¢ ) = opcode find ; uint rfind ( uint [ to ] , uint ) = opcode rfind ; uint rfind ( uint [ to ] , uint [ ] ¢ ) = opcode rfind ; void shrinktofit ( uint [ ] & ) = opcode shrinktofit uint [ to ] substr ( uint [ ] ¢ , uint a , uint e ) = opcode substr uint [ to ] midstr ( uint [ ] ¢ , uint i , uint n ) = opcode midstr uint [ to ] leftstr ( uint [ ] ¢ , uint n ) = opcode leftstr uint [ to ] rightstr ( uint [ ] ¢ , uint n ) = opcode rightstr uint numval ( utf8str ¢ ) = opcode numval uint numval ( ucs1str ¢ ) = opcode numval uint numval ( ucs2str ¢ ) = opcode numval uint numval ( ucs4str ¢ ) = opcode numval void flip ( long [ to ] ) = opcode flip ; void rol ( long [ to ] ) = opcode rol ; void ror ( long [ to ] ) = opcode ror ; void sort ( long [ to ] ) = opcode sort ; void rsort ( long [ to ] ) = opcode rsort ; void shuffle ( long [ to ] ) = opcode shuffle ; void revert ( long [ to ] ) = opcode revert ; long [ ] join ( long [ ] [ ] ¢ , long ) = opcode join ; long [ ] join ( long [ ] [ ] ¢ , long [ ] ¢ ) = opcode join ; long [ ] [ ] split ( long [ ] ¢ , long ) = opcode split ; long [ ] [ ] split ( long [ ] ¢ , long [ ] ¢ ) = opcode split ; long min ( long , long ) = opcode min ; long min ( long [ to ] ) = opcode min ; long max ( long , long ) = opcode max ; long max ( long [ to ] ) = opcode max ; uint find ( long [ to ] , long ) = opcode find ; uint find ( long [ to ] , long [ ] ¢ ) = opcode find ; uint rfind ( long [ to ] , long ) = opcode rfind ; uint rfind ( long [ to ] , long [ ] ¢ ) = opcode rfind ; void shrinktofit ( long [ ] & ) = opcode shrinktofit long [ to ] substr ( long [ ] ¢ , uint a , uint e ) = opcode substr long [ to ] midstr ( long [ ] ¢ , uint i , uint n ) = opcode midstr long [ to ] leftstr ( long [ ] ¢ , uint n ) = opcode leftstr long [ to ] rightstr ( long [ ] ¢ , uint n ) = opcode rightstr long numval ( utf8str ¢ ) = opcode numval long numval ( ucs1str ¢ ) = opcode numval long numval ( ucs2str ¢ ) = opcode numval long numval ( ucs4str ¢ ) = opcode numval void flip ( ulong [ to ] ) = opcode flip ; void rol ( ulong [ to ] ) = opcode rol ; void ror ( ulong [ to ] ) = opcode ror ; void sort ( ulong [ to ] ) = opcode sort ; void rsort ( ulong [ to ] ) = opcode rsort ; void shuffle ( ulong [ to ] ) = opcode shuffle ; void revert ( ulong [ to ] ) = opcode revert ; ulong [ ] join ( ulong [ ] [ ] ¢ , ulong ) = opcode join ; ulong [ ] join ( ulong [ ] [ ] ¢ , ulong [ ] ¢ ) = opcode join ; ulong [ ] [ ] split ( ulong [ ] ¢ , ulong ) = opcode split ; ulong [ ] [ ] split ( ulong [ ] ¢ , ulong [ ] ¢ ) = opcode split ; ulong min ( ulong , ulong ) = opcode min ; ulong min ( ulong [ to ] ) = opcode min ; ulong max ( ulong , ulong ) = opcode max ; ulong max ( ulong [ to ] ) = opcode max ; uint find ( ulong [ to ] , ulong ) = opcode find ; uint find ( ulong [ to ] , ulong [ ] ¢ ) = opcode find ; uint rfind ( ulong [ to ] , ulong ) = opcode rfind ; uint rfind ( ulong [ to ] , ulong [ ] ¢ ) = opcode rfind ; void shrinktofit ( ulong [ ] & ) = opcode shrinktofit ulong [ to ] substr ( ulong [ ] ¢ , uint a , uint e ) = opcode substr ulong [ to ] midstr ( ulong [ ] ¢ , uint i , uint n ) = opcode midstr ulong [ to ] leftstr ( ulong [ ] ¢ , uint n ) = opcode leftstr ulong [ to ] rightstr ( ulong [ ] ¢ , uint n ) = opcode rightstr ulong numval ( utf8str ¢ ) = opcode numval ulong numval ( ucs1str ¢ ) = opcode numval ulong numval ( ucs2str ¢ ) = opcode numval ulong numval ( ucs4str ¢ ) = opcode numval void flip ( utf8char [ to ] ) = opcode flip ; void rol ( utf8char [ to ] ) = opcode rol ; void ror ( utf8char [ to ] ) = opcode ror ; void sort ( utf8char [ to ] ) = opcode sort ; void rsort ( utf8char [ to ] ) = opcode rsort ; void shuffle ( utf8char [ to ] ) = opcode shuffle ; void revert ( utf8char [ to ] ) = opcode revert ; utf8char [ ] join ( utf8char [ ] [ ] ¢ , utf8char ) = opcode join ; utf8char [ ] join ( utf8char [ ] [ ] ¢ , utf8char [ ] ¢ ) = opcode join ; utf8char [ ] [ ] split ( utf8char [ ] ¢ , utf8char ) = opcode split ; utf8char [ ] [ ] split ( utf8char [ ] ¢ , utf8char [ ] ¢ ) = opcode split ; utf8char min ( utf8char , utf8char ) = opcode min ; utf8char min ( utf8char [ to ] ) = opcode min ; utf8char max ( utf8char , utf8char ) = opcode max ; utf8char max ( utf8char [ to ] ) = opcode max ; uint find ( utf8char [ to ] , utf8char ) = opcode find ; uint find ( utf8char [ to ] , utf8char [ ] ¢ ) = opcode find ; uint rfind ( utf8char [ to ] , utf8char ) = opcode rfind ; uint rfind ( utf8char [ to ] , utf8char [ ] ¢ ) = opcode rfind ; void shrinktofit ( utf8char [ ] & ) = opcode shrinktofit utf8char [ to ] substr ( utf8char [ ] ¢ , uint a , uint e ) = opcode substr utf8char [ to ] midstr ( utf8char [ ] ¢ , uint i , uint n ) = opcode midstr utf8char [ to ] leftstr ( utf8char [ ] ¢ , uint n ) = opcode leftstr utf8char [ to ] rightstr ( utf8char [ ] ¢ , uint n ) = opcode rightstr utf8char numval ( utf8str ¢ ) = opcode numval utf8char numval ( ucs1str ¢ ) = opcode numval utf8char numval ( ucs2str ¢ ) = opcode numval utf8char numval ( ucs4str ¢ ) = opcode numval void flip ( ucs1char [ to ] ) = opcode flip ; void rol ( ucs1char [ to ] ) = opcode rol ; void ror ( ucs1char [ to ] ) = opcode ror ; void sort ( ucs1char [ to ] ) = opcode sort ; void rsort ( ucs1char [ to ] ) = opcode rsort ; void shuffle ( ucs1char [ to ] ) = opcode shuffle ; void revert ( ucs1char [ to ] ) = opcode revert ; ucs1char [ ] join ( ucs1char [ ] [ ] ¢ , ucs1char ) = opcode join ; ucs1char [ ] join ( ucs1char [ ] [ ] ¢ , ucs1char [ ] ¢ ) = opcode join ; ucs1char [ ] [ ] split ( ucs1char [ ] ¢ , ucs1char ) = opcode split ; ucs1char [ ] [ ] split ( ucs1char [ ] ¢ , ucs1char [ ] ¢ ) = opcode split ; ucs1char min ( ucs1char , ucs1char ) = opcode min ; ucs1char min ( ucs1char [ to ] ) = opcode min ; ucs1char max ( ucs1char , ucs1char ) = opcode max ; ucs1char max ( ucs1char [ to ] ) = opcode max ; uint find ( ucs1char [ to ] , ucs1char ) = opcode find ; uint find ( ucs1char [ to ] , ucs1char [ ] ¢ ) = opcode find ; uint rfind ( ucs1char [ to ] , ucs1char ) = opcode rfind ; uint rfind ( ucs1char [ to ] , ucs1char [ ] ¢ ) = opcode rfind ; void shrinktofit ( ucs1char [ ] & ) = opcode shrinktofit ucs1char [ to ] substr ( ucs1char [ ] ¢ , uint a , uint e ) = opcode substr ucs1char [ to ] midstr ( ucs1char [ ] ¢ , uint i , uint n ) = opcode midstr ucs1char [ to ] leftstr ( ucs1char [ ] ¢ , uint n ) = opcode leftstr ucs1char [ to ] rightstr ( ucs1char [ ] ¢ , uint n ) = opcode rightstr ucs1char numval ( utf8str ¢ ) = opcode numval ucs1char numval ( ucs1str ¢ ) = opcode numval ucs1char numval ( ucs2str ¢ ) = opcode numval ucs1char numval ( ucs4str ¢ ) = opcode numval void flip ( ucs2char [ to ] ) = opcode flip ; void rol ( ucs2char [ to ] ) = opcode rol ; void ror ( ucs2char [ to ] ) = opcode ror ; void sort ( ucs2char [ to ] ) = opcode sort ; void rsort ( ucs2char [ to ] ) = opcode rsort ; void shuffle ( ucs2char [ to ] ) = opcode shuffle ; void revert ( ucs2char [ to ] ) = opcode revert ; ucs2char [ ] join ( ucs2char [ ] [ ] ¢ , ucs2char ) = opcode join ; ucs2char [ ] join ( ucs2char [ ] [ ] ¢ , ucs2char [ ] ¢ ) = opcode join ; ucs2char [ ] [ ] split ( ucs2char [ ] ¢ , ucs2char ) = opcode split ; ucs2char [ ] [ ] split ( ucs2char [ ] ¢ , ucs2char [ ] ¢ ) = opcode split ; ucs2char min ( ucs2char , ucs2char ) = opcode min ; ucs2char min ( ucs2char [ to ] ) = opcode min ; ucs2char max ( ucs2char , ucs2char ) = opcode max ; ucs2char max ( ucs2char [ to ] ) = opcode max ; uint find ( ucs2char [ to ] , ucs2char ) = opcode find ; uint find ( ucs2char [ to ] , ucs2char [ ] ¢ ) = opcode find ; uint rfind ( ucs2char [ to ] , ucs2char ) = opcode rfind ; uint rfind ( ucs2char [ to ] , ucs2char [ ] ¢ ) = opcode rfind ; void shrinktofit ( ucs2char [ ] & ) = opcode shrinktofit ucs2char [ to ] substr ( ucs2char [ ] ¢ , uint a , uint e ) = opcode substr ucs2char [ to ] midstr ( ucs2char [ ] ¢ , uint i , uint n ) = opcode midstr ucs2char [ to ] leftstr ( ucs2char [ ] ¢ , uint n ) = opcode leftstr ucs2char [ to ] rightstr ( ucs2char [ ] ¢ , uint n ) = opcode rightstr ucs2char numval ( utf8str ¢ ) = opcode numval ucs2char numval ( ucs1str ¢ ) = opcode numval ucs2char numval ( ucs2str ¢ ) = opcode numval ucs2char numval ( ucs4str ¢ ) = opcode numval void flip ( ucs4char [ to ] ) = opcode flip ; void rol ( ucs4char [ to ] ) = opcode rol ; void ror ( ucs4char [ to ] ) = opcode ror ; void sort ( ucs4char [ to ] ) = opcode sort ; void rsort ( ucs4char [ to ] ) = opcode rsort ; void shuffle ( ucs4char [ to ] ) = opcode shuffle ; void revert ( ucs4char [ to ] ) = opcode revert ; ucs4char [ ] join ( ucs4char [ ] [ ] ¢ , ucs4char ) = opcode join ; ucs4char [ ] join ( ucs4char [ ] [ ] ¢ , ucs4char [ ] ¢ ) = opcode join ; ucs4char [ ] [ ] split ( ucs4char [ ] ¢ , ucs4char ) = opcode split ; ucs4char [ ] [ ] split ( ucs4char [ ] ¢ , ucs4char [ ] ¢ ) = opcode split ; ucs4char min ( ucs4char , ucs4char ) = opcode min ; ucs4char min ( ucs4char [ to ] ) = opcode min ; ucs4char max ( ucs4char , ucs4char ) = opcode max ; ucs4char max ( ucs4char [ to ] ) = opcode max ; uint find ( ucs4char [ to ] , ucs4char ) = opcode find ; uint find ( ucs4char [ to ] , ucs4char [ ] ¢ ) = opcode find ; uint rfind ( ucs4char [ to ] , ucs4char ) = opcode rfind ; uint rfind ( ucs4char [ to ] , ucs4char [ ] ¢ ) = opcode rfind ; void shrinktofit ( ucs4char [ ] & ) = opcode shrinktofit ucs4char [ to ] substr ( ucs4char [ ] ¢ , uint a , uint e ) = opcode substr ucs4char [ to ] midstr ( ucs4char [ ] ¢ , uint i , uint n ) = opcode midstr ucs4char [ to ] leftstr ( ucs4char [ ] ¢ , uint n ) = opcode leftstr ucs4char [ to ] rightstr ( ucs4char [ ] ¢ , uint n ) = opcode rightstr ucs4char numval ( utf8str ¢ ) = opcode numval ucs4char numval ( ucs1str ¢ ) = opcode numval ucs4char numval ( ucs2str ¢ ) = opcode numval ucs4char numval ( ucs4str ¢ ) = opcode numval bool is_letter ( uint ) = opcode is_letter bool is_bin_digit ( uint ) = opcode is_bin_digit bool is_dec_digit ( uint ) = opcode is_dec_digit bool is_hex_digit ( uint ) = opcode is_hex_digit uint digit_value ( uint ) = opcode digit_value scope ucs4str { ucs4char [ ] spacestr ( uint ) = opcode spacestr ; ucs4char [ ] spacestr ( uint , ucs4char ) = opcode spacestr ; ucs4char [ ] charstr ( uint ) = opcode charstr ; ucs4char hexchar ( uint ) ucs4char [ ] hexstr ( uint8 ) = opcode hexstr ; ucs4char [ ] hexstr ( uint16 ) = opcode hexstr ; ucs4char [ ] hexstr ( uint32 ) = opcode hexstr ; ucs4char [ ] hexstr ( uint64 ) = opcode hexstr ; ucs4char [ ] hexstr ( uint , uint digits ) = opcode hexstr ; ucs4char [ ] hexstr ( ulong , uint digits ) = opcode hexstr ; ucs4char [ ] binstr ( uint8 ) = opcode binstr ; ucs4char [ ] binstr ( uint16 ) = opcode binstr ; ucs4char [ ] binstr ( uint32 ) = opcode binstr ; ucs4char [ ] binstr ( uint64 ) = opcode binstr ; ucs4char [ ] binstr ( uint , uint digits ) = opcode binstr ; ucs4char [ ] binstr ( ulong , uint digits ) = opcode binstr ; ucs4char [ ] binstr ( uint , ucs4char [ ] ¢ o , ucs4char [ ] ¢ l ) = opcode binstr ; ucs4char [ ] binstr ( ulong , ucs4char [ ] ¢ o , ucs4char [ ] ¢ l ) = opcode binstr ; ucs4char [ ] numstr ( int ) = opcode numstr ; ucs4char [ ] numstr ( uint ) = opcode numstr ; ucs4char [ ] numstr ( long ) = opcode numstr ; ucs4char [ ] numstr ( ulong ) = opcode numstr ; ucs4char [ ] toupper ( ucs4char [ ] ¢ ) = opcode toupper ; ucs4char [ ] tolower ( ucs4char [ ] ¢ ) = opcode tolower ; ucs4char [ ] escape ( ucs4char [ ] ¢ , ucs4char leftquote ) = opcode escape ; ucs4char [ ] unescape ( ucs4char [ ] ¢ ) = opcode unescape ; ucs4char [ ] urlencode ( ucs4char [ ] ¢ ) = opcode urlencode ; ucs4char [ ] urldecode ( ucs4char [ ] ¢ ) = opcode urldecode ; ucs4char [ ] entab ( ucs4char [ ] ¢ , uint tabwidth ) = opcode entab ; ucs4char [ ] detab ( ucs4char [ ] ¢ , uint tabwidth ) = opcode detab ; ucs4char [ ] toupper ( ucs4char [ to ] ) = opcode toupper ; ucs4char [ ] tolower ( ucs4char [ to ] ) = opcode tolower ; ucs4char [ ] escape ( ucs4char [ to ] , ucs4char leftquote ) = opcode escape ; ucs4char [ ] unescape ( ucs4char [ to ] ) = opcode unescape ; ucs4char [ ] urlencode ( ucs4char [ to ] ) = opcode urlencode ; ucs4char [ ] urldecode ( ucs4char [ to ] ) = opcode urldecode ; ucs4char [ ] entab ( ucs4char [ to ] , uint tabwidth ) = opcode entab ; ucs4char [ ] detab ( ucs4char [ to ] , uint tabwidth ) = opcode detab ; ucs1str toucs1 ( ucs4char [ ] ¢ ) = opcode toucs1 ; ucs2str toucs2 ( ucs4char [ ] ¢ ) = opcode toucs2 ; ucs4str toucs4 ( ucs4char [ ] ¢ ) = opcode toucs4 ; utf8str toutf8 ( ucs4char [ ] ¢ ) = opcode toutf8 ; ucs1str toucs1 ( ucs4char [ to ] ) = opcode toucs1 ; ucs2str toucs2 ( ucs4char [ to ] ) = opcode toucs2 ; ucs4str toucs4 ( ucs4char [ to ] ) = opcode toucs4 ; utf8str toutf8 ( ucs4char [ to ] ) = opcode toutf8 ; ucs4char [ ] min ( ucs4char [ ] , ucs4char [ ] ) = opcode min ; ucs4char [ ] min ( ucs4char [ ] , ucs4char [ ] ¢ ) = opcode min ; ucs4char [ ] min ( ucs4char [ ] ¢ , ucs4char [ ] ) = opcode min ; ucs4char [ ] ¢ min ( ucs4char [ ] ¢ , ucs4char [ ] ¢ ) = opcode min ; ucs4char [ ] ¢ min ( ucs4char [ ] [ ] ¢ ) = opcode min ; ucs4char [ ] ¢ min ( ucs4char [ ] [ to ] ) = opcode min ; ucs4char [ ] max ( ucs4char [ ] , ucs4char [ ] ) = opcode max ; ucs4char [ ] max ( ucs4char [ ] , ucs4char [ ] ¢ ) = opcode max ; ucs4char [ ] max ( ucs4char [ ] ¢ , ucs4char [ ] ) = opcode max ; ucs4char [ ] ¢ max ( ucs4char [ ] ¢ , ucs4char [ ] ¢ ) = opcode max ; ucs4char [ ] ¢ max ( ucs4char [ ] [ ] ¢ ) = opcode max ; ucs4char [ ] ¢ max ( ucs4char [ ] [ to ] ) = opcode max ; void flip ( ucs4char [ ] [ to ] ) = opcode flip ; void rol ( ucs4char [ ] [ to ] ) = opcode rol ; void ror ( ucs4char [ ] [ to ] ) = opcode ror ; void sort ( ucs4char [ ] [ to ] ) = opcode sort ; void rsort ( ucs4char [ ] [ to ] ) = opcode rsort ; void shuffle ( ucs4char [ ] [ to ] ) = opcode shuffle ; void revert ( ucs4char [ ] [ to ] ) = opcode revert ; } scope ucs2str { ucs2char [ ] spacestr ( uint ) = opcode spacestr ; ucs2char [ ] spacestr ( uint , ucs2char ) = opcode spacestr ; ucs2char [ ] charstr ( uint ) = opcode charstr ; ucs2char hexchar ( uint ) ucs2char [ ] hexstr ( uint8 ) = opcode hexstr ; ucs2char [ ] hexstr ( uint16 ) = opcode hexstr ; ucs2char [ ] hexstr ( uint32 ) = opcode hexstr ; ucs2char [ ] hexstr ( uint64 ) = opcode hexstr ; ucs2char [ ] hexstr ( uint , uint digits ) = opcode hexstr ; ucs2char [ ] hexstr ( ulong , uint digits ) = opcode hexstr ; ucs2char [ ] binstr ( uint8 ) = opcode binstr ; ucs2char [ ] binstr ( uint16 ) = opcode binstr ; ucs2char [ ] binstr ( uint32 ) = opcode binstr ; ucs2char [ ] binstr ( uint64 ) = opcode binstr ; ucs2char [ ] binstr ( uint , uint digits ) = opcode binstr ; ucs2char [ ] binstr ( ulong , uint digits ) = opcode binstr ; ucs2char [ ] binstr ( uint , ucs2char [ ] ¢ o , ucs2char [ ] ¢ l ) = opcode binstr ; ucs2char [ ] binstr ( ulong , ucs2char [ ] ¢ o , ucs2char [ ] ¢ l ) = opcode binstr ; ucs2char [ ] numstr ( int ) = opcode numstr ; ucs2char [ ] numstr ( uint ) = opcode numstr ; ucs2char [ ] numstr ( long ) = opcode numstr ; ucs2char [ ] numstr ( ulong ) = opcode numstr ; ucs2char [ ] toupper ( ucs2char [ ] ¢ ) = opcode toupper ; ucs2char [ ] tolower ( ucs2char [ ] ¢ ) = opcode tolower ; ucs2char [ ] escape ( ucs2char [ ] ¢ , ucs2char leftquote ) = opcode escape ; ucs2char [ ] unescape ( ucs2char [ ] ¢ ) = opcode unescape ; ucs2char [ ] urlencode ( ucs2char [ ] ¢ ) = opcode urlencode ; ucs2char [ ] urldecode ( ucs2char [ ] ¢ ) = opcode urldecode ; ucs2char [ ] entab ( ucs2char [ ] ¢ , uint tabwidth ) = opcode entab ; ucs2char [ ] detab ( ucs2char [ ] ¢ , uint tabwidth ) = opcode detab ; ucs2char [ ] toupper ( ucs2char [ to ] ) = opcode toupper ; ucs2char [ ] tolower ( ucs2char [ to ] ) = opcode tolower ; ucs2char [ ] escape ( ucs2char [ to ] , ucs2char leftquote ) = opcode escape ; ucs2char [ ] unescape ( ucs2char [ to ] ) = opcode unescape ; ucs2char [ ] urlencode ( ucs2char [ to ] ) = opcode urlencode ; ucs2char [ ] urldecode ( ucs2char [ to ] ) = opcode urldecode ; ucs2char [ ] entab ( ucs2char [ to ] , uint tabwidth ) = opcode entab ; ucs2char [ ] detab ( ucs2char [ to ] , uint tabwidth ) = opcode detab ; ucs1str toucs1 ( ucs2char [ ] ¢ ) = opcode toucs1 ; ucs2str toucs2 ( ucs2char [ ] ¢ ) = opcode toucs2 ; ucs4str toucs4 ( ucs2char [ ] ¢ ) = opcode toucs4 ; utf8str toutf8 ( ucs2char [ ] ¢ ) = opcode toutf8 ; ucs1str toucs1 ( ucs2char [ to ] ) = opcode toucs1 ; ucs2str toucs2 ( ucs2char [ to ] ) = opcode toucs2 ; ucs4str toucs4 ( ucs2char [ to ] ) = opcode toucs4 ; utf8str toutf8 ( ucs2char [ to ] ) = opcode toutf8 ; ucs2char [ ] min ( ucs2char [ ] , ucs2char [ ] ) = opcode min ; ucs2char [ ] min ( ucs2char [ ] , ucs2char [ ] ¢ ) = opcode min ; ucs2char [ ] min ( ucs2char [ ] ¢ , ucs2char [ ] ) = opcode min ; ucs2char [ ] ¢ min ( ucs2char [ ] ¢ , ucs2char [ ] ¢ ) = opcode min ; ucs2char [ ] ¢ min ( ucs2char [ ] [ ] ¢ ) = opcode min ; ucs2char [ ] ¢ min ( ucs2char [ ] [ to ] ) = opcode min ; ucs2char [ ] max ( ucs2char [ ] , ucs2char [ ] ) = opcode max ; ucs2char [ ] max ( ucs2char [ ] , ucs2char [ ] ¢ ) = opcode max ; ucs2char [ ] max ( ucs2char [ ] ¢ , ucs2char [ ] ) = opcode max ; ucs2char [ ] ¢ max ( ucs2char [ ] ¢ , ucs2char [ ] ¢ ) = opcode max ; ucs2char [ ] ¢ max ( ucs2char [ ] [ ] ¢ ) = opcode max ; ucs2char [ ] ¢ max ( ucs2char [ ] [ to ] ) = opcode max ; void flip ( ucs2char [ ] [ to ] ) = opcode flip ; void rol ( ucs2char [ ] [ to ] ) = opcode rol ; void ror ( ucs2char [ ] [ to ] ) = opcode ror ; void sort ( ucs2char [ ] [ to ] ) = opcode sort ; void rsort ( ucs2char [ ] [ to ] ) = opcode rsort ; void shuffle ( ucs2char [ ] [ to ] ) = opcode shuffle ; void revert ( ucs2char [ ] [ to ] ) = opcode revert ; } scope ucs1str { ucs1char [ ] spacestr ( uint ) = opcode spacestr ; ucs1char [ ] spacestr ( uint , ucs1char ) = opcode spacestr ; ucs1char [ ] charstr ( uint ) = opcode charstr ; ucs1char hexchar ( uint ) ucs1char [ ] hexstr ( uint8 ) = opcode hexstr ; ucs1char [ ] hexstr ( uint16 ) = opcode hexstr ; ucs1char [ ] hexstr ( uint32 ) = opcode hexstr ; ucs1char [ ] hexstr ( uint64 ) = opcode hexstr ; ucs1char [ ] hexstr ( uint , uint digits ) = opcode hexstr ; ucs1char [ ] hexstr ( ulong , uint digits ) = opcode hexstr ; ucs1char [ ] binstr ( uint8 ) = opcode binstr ; ucs1char [ ] binstr ( uint16 ) = opcode binstr ; ucs1char [ ] binstr ( uint32 ) = opcode binstr ; ucs1char [ ] binstr ( uint64 ) = opcode binstr ; ucs1char [ ] binstr ( uint , uint digits ) = opcode binstr ; ucs1char [ ] binstr ( ulong , uint digits ) = opcode binstr ; ucs1char [ ] binstr ( uint , ucs1char [ ] ¢ o , ucs1char [ ] ¢ l ) = opcode binstr ; ucs1char [ ] binstr ( ulong , ucs1char [ ] ¢ o , ucs1char [ ] ¢ l ) = opcode binstr ; ucs1char [ ] numstr ( int ) = opcode numstr ; ucs1char [ ] numstr ( uint ) = opcode numstr ; ucs1char [ ] numstr ( long ) = opcode numstr ; ucs1char [ ] numstr ( ulong ) = opcode numstr ; ucs1char [ ] toupper ( ucs1char [ ] ¢ ) = opcode toupper ; ucs1char [ ] tolower ( ucs1char [ ] ¢ ) = opcode tolower ; ucs1char [ ] escape ( ucs1char [ ] ¢ , ucs1char leftquote ) = opcode escape ; ucs1char [ ] unescape ( ucs1char [ ] ¢ ) = opcode unescape ; ucs1char [ ] urlencode ( ucs1char [ ] ¢ ) = opcode urlencode ; ucs1char [ ] urldecode ( ucs1char [ ] ¢ ) = opcode urldecode ; ucs1char [ ] entab ( ucs1char [ ] ¢ , uint tabwidth ) = opcode entab ; ucs1char [ ] detab ( ucs1char [ ] ¢ , uint tabwidth ) = opcode detab ; ucs1char [ ] toupper ( ucs1char [ to ] ) = opcode toupper ; ucs1char [ ] tolower ( ucs1char [ to ] ) = opcode tolower ; ucs1char [ ] escape ( ucs1char [ to ] , ucs1char leftquote ) = opcode escape ; ucs1char [ ] unescape ( ucs1char [ to ] ) = opcode unescape ; ucs1char [ ] urlencode ( ucs1char [ to ] ) = opcode urlencode ; ucs1char [ ] urldecode ( ucs1char [ to ] ) = opcode urldecode ; ucs1char [ ] entab ( ucs1char [ to ] , uint tabwidth ) = opcode entab ; ucs1char [ ] detab ( ucs1char [ to ] , uint tabwidth ) = opcode detab ; ucs1str toucs1 ( ucs1char [ ] ¢ ) = opcode toucs1 ; ucs2str toucs2 ( ucs1char [ ] ¢ ) = opcode toucs2 ; ucs4str toucs4 ( ucs1char [ ] ¢ ) = opcode toucs4 ; utf8str toutf8 ( ucs1char [ ] ¢ ) = opcode toutf8 ; ucs1str toucs1 ( ucs1char [ to ] ) = opcode toucs1 ; ucs2str toucs2 ( ucs1char [ to ] ) = opcode toucs2 ; ucs4str toucs4 ( ucs1char [ to ] ) = opcode toucs4 ; utf8str toutf8 ( ucs1char [ to ] ) = opcode toutf8 ; ucs1char [ ] min ( ucs1char [ ] , ucs1char [ ] ) = opcode min ; ucs1char [ ] min ( ucs1char [ ] , ucs1char [ ] ¢ ) = opcode min ; ucs1char [ ] min ( ucs1char [ ] ¢ , ucs1char [ ] ) = opcode min ; ucs1char [ ] ¢ min ( ucs1char [ ] ¢ , ucs1char [ ] ¢ ) = opcode min ; ucs1char [ ] ¢ min ( ucs1char [ ] [ ] ¢ ) = opcode min ; ucs1char [ ] ¢ min ( ucs1char [ ] [ to ] ) = opcode min ; ucs1char [ ] max ( ucs1char [ ] , ucs1char [ ] ) = opcode max ; ucs1char [ ] max ( ucs1char [ ] , ucs1char [ ] ¢ ) = opcode max ; ucs1char [ ] max ( ucs1char [ ] ¢ , ucs1char [ ] ) = opcode max ; ucs1char [ ] ¢ max ( ucs1char [ ] ¢ , ucs1char [ ] ¢ ) = opcode max ; ucs1char [ ] ¢ max ( ucs1char [ ] [ ] ¢ ) = opcode max ; ucs1char [ ] ¢ max ( ucs1char [ ] [ to ] ) = opcode max ; void flip ( ucs1char [ ] [ to ] ) = opcode flip ; void rol ( ucs1char [ ] [ to ] ) = opcode rol ; void ror ( ucs1char [ ] [ to ] ) = opcode ror ; void sort ( ucs1char [ ] [ to ] ) = opcode sort ; void rsort ( ucs1char [ ] [ to ] ) = opcode rsort ; void shuffle ( ucs1char [ ] [ to ] ) = opcode shuffle ; void revert ( ucs1char [ ] [ to ] ) = opcode revert ; } scope utf8str { utf8char [ ] spacestr ( uint ) = opcode spacestr ; utf8char [ ] spacestr ( uint , utf8char ) = opcode spacestr ; utf8char [ ] charstr ( uint ) = opcode charstr ; char hexchar ( uint ) utf8char [ ] hexstr ( uint8 ) = opcode hexstr ; utf8char [ ] hexstr ( uint16 ) = opcode hexstr ; utf8char [ ] hexstr ( uint32 ) = opcode hexstr ; utf8char [ ] hexstr ( uint64 ) = opcode hexstr ; utf8char [ ] hexstr ( uint , uint digits ) = opcode hexstr ; utf8char [ ] hexstr ( ulong , uint digits ) = opcode hexstr ; utf8char [ ] binstr ( uint8 ) = opcode binstr ; utf8char [ ] binstr ( uint16 ) = opcode binstr ; utf8char [ ] binstr ( uint32 ) = opcode binstr ; utf8char [ ] binstr ( uint64 ) = opcode binstr ; utf8char [ ] binstr ( uint , uint digits ) = opcode binstr ; utf8char [ ] binstr ( ulong , uint digits ) = opcode binstr ; utf8char [ ] binstr ( uint , utf8char [ ] ¢ o , utf8char [ ] ¢ l ) = opcode binstr ; utf8char [ ] binstr ( ulong , utf8char [ ] ¢ o , utf8char [ ] ¢ l ) = opcode binstr ; utf8char [ ] numstr ( int ) = opcode numstr ; utf8char [ ] numstr ( uint ) = opcode numstr ; utf8char [ ] numstr ( long ) = opcode numstr ; utf8char [ ] numstr ( ulong ) = opcode numstr ; utf8char [ ] toupper ( utf8char [ ] ¢ ) = opcode toupper ; utf8char [ ] tolower ( utf8char [ ] ¢ ) = opcode tolower ; utf8char [ ] escape ( utf8char [ ] ¢ , char leftquote ) = opcode escape ; utf8char [ ] unescape ( utf8char [ ] ¢ ) = opcode unescape ; utf8char [ ] urlencode ( utf8char [ ] ¢ ) = opcode urlencode ; utf8char [ ] urldecode ( utf8char [ ] ¢ ) = opcode urldecode ; utf8char [ ] entab ( utf8char [ ] ¢ , uint tabwidth ) = opcode entab ; utf8char [ ] detab ( utf8char [ ] ¢ , uint tabwidth ) = opcode detab ; utf8char [ ] toupper ( utf8char [ to ] ) = opcode toupper ; utf8char [ ] tolower ( utf8char [ to ] ) = opcode tolower ; utf8char [ ] escape ( utf8char [ to ] , char leftquote ) = opcode escape ; utf8char [ ] unescape ( utf8char [ to ] ) = opcode unescape ; utf8char [ ] urlencode ( utf8char [ to ] ) = opcode urlencode ; utf8char [ ] urldecode ( utf8char [ to ] ) = opcode urldecode ; utf8char [ ] entab ( utf8char [ to ] , uint tabwidth ) = opcode entab ; utf8char [ ] detab ( utf8char [ to ] , uint tabwidth ) = opcode detab ; ucs1str toucs1 ( utf8char [ ] ¢ ) = opcode toucs1 ; ucs2str toucs2 ( utf8char [ ] ¢ ) = opcode toucs2 ; ucs4str toucs4 ( utf8char [ ] ¢ ) = opcode toucs4 ; utf8str toutf8 ( utf8char [ ] ¢ ) = opcode toutf8 ; ucs1str toucs1 ( utf8char [ to ] ) = opcode toucs1 ; ucs2str toucs2 ( utf8char [ to ] ) = opcode toucs2 ; ucs4str toucs4 ( utf8char [ to ] ) = opcode toucs4 ; utf8str toutf8 ( utf8char [ to ] ) = opcode toutf8 ; utf8char [ ] min ( utf8char [ ] , utf8char [ ] ) = opcode min ; utf8char [ ] min ( utf8char [ ] , utf8char [ ] ¢ ) = opcode min ; utf8char [ ] min ( utf8char [ ] ¢ , utf8char [ ] ) = opcode min ; utf8char [ ] ¢ min ( utf8char [ ] ¢ , utf8char [ ] ¢ ) = opcode min ; utf8char [ ] ¢ min ( utf8char [ ] [ ] ¢ ) = opcode min ; utf8char [ ] ¢ min ( utf8char [ ] [ to ] ) = opcode min ; utf8char [ ] max ( utf8char [ ] , utf8char [ ] ) = opcode max ; utf8char [ ] max ( utf8char [ ] , utf8char [ ] ¢ ) = opcode max ; utf8char [ ] max ( utf8char [ ] ¢ , utf8char [ ] ) = opcode max ; utf8char [ ] ¢ max ( utf8char [ ] ¢ , utf8char [ ] ¢ ) = opcode max ; utf8char [ ] ¢ max ( utf8char [ ] [ ] ¢ ) = opcode max ; utf8char [ ] ¢ max ( utf8char [ ] [ to ] ) = opcode max ; void flip ( utf8char [ ] [ to ] ) = opcode flip ; void rol ( utf8char [ ] [ to ] ) = opcode rol ; void ror ( utf8char [ ] [ to ] ) = opcode ror ; void sort ( utf8char [ ] [ to ] ) = opcode sort ; void rsort ( utf8char [ ] [ to ] ) = opcode rsort ; void shuffle ( utf8char [ ] [ to ] ) = opcode shuffle ; void revert ( utf8char [ ] [ to ] ) = opcode revert ; } utf8char [ ] spacestr ( uint ) = opcode spacestr ; utf8char [ ] spacestr ( uint , utf8char ) = opcode spacestr ; utf8char [ ] charstr ( uint ) = opcode charstr ; char hexchar ( uint ) utf8char [ ] hexstr ( uint8 ) = opcode hexstr ; utf8char [ ] hexstr ( uint16 ) = opcode hexstr ; utf8char [ ] hexstr ( uint32 ) = opcode hexstr ; utf8char [ ] hexstr ( uint64 ) = opcode hexstr ; utf8char [ ] hexstr ( uint , uint digits ) = opcode hexstr ; utf8char [ ] hexstr ( ulong , uint digits ) = opcode hexstr ; utf8char [ ] binstr ( uint8 ) = opcode binstr ; utf8char [ ] binstr ( uint16 ) = opcode binstr ; utf8char [ ] binstr ( uint32 ) = opcode binstr ; utf8char [ ] binstr ( uint64 ) = opcode binstr ; utf8char [ ] binstr ( uint , uint digits ) = opcode binstr ; utf8char [ ] binstr ( ulong , uint digits ) = opcode binstr ; utf8char [ ] binstr ( uint , utf8char [ ] ¢ o , utf8char [ ] ¢ l ) = opcode binstr ; utf8char [ ] binstr ( ulong , utf8char [ ] ¢ o , utf8char [ ] ¢ l ) = opcode binstr ; utf8char [ ] numstr ( int ) = opcode numstr ; utf8char [ ] numstr ( uint ) = opcode numstr ; utf8char [ ] numstr ( long ) = opcode numstr ; utf8char [ ] numstr ( ulong ) = opcode numstr ; utf8char [ ] toupper ( utf8char [ ] ¢ ) = opcode toupper ; utf8char [ ] tolower ( utf8char [ ] ¢ ) = opcode tolower ; utf8char [ ] escape ( utf8char [ ] ¢ , char leftquote ) = opcode escape ; utf8char [ ] unescape ( utf8char [ ] ¢ ) = opcode unescape ; utf8char [ ] urlencode ( utf8char [ ] ¢ ) = opcode urlencode ; utf8char [ ] urldecode ( utf8char [ ] ¢ ) = opcode urldecode ; utf8char [ ] entab ( utf8char [ ] ¢ , uint tabwidth ) = opcode entab ; utf8char [ ] detab ( utf8char [ ] ¢ , uint tabwidth ) = opcode detab ; utf8char [ ] toupper ( utf8char [ to ] ) = opcode toupper ; utf8char [ ] tolower ( utf8char [ to ] ) = opcode tolower ; utf8char [ ] escape ( utf8char [ to ] , char leftquote ) = opcode escape ; utf8char [ ] unescape ( utf8char [ to ] ) = opcode unescape ; utf8char [ ] urlencode ( utf8char [ to ] ) = opcode urlencode ; utf8char [ ] urldecode ( utf8char [ to ] ) = opcode urldecode ; utf8char [ ] entab ( utf8char [ to ] , uint tabwidth ) = opcode entab ; utf8char [ ] detab ( utf8char [ to ] , uint tabwidth ) = opcode detab ; ucs1str toucs1 ( utf8char [ ] ¢ ) = opcode toucs1 ; ucs2str toucs2 ( utf8char [ ] ¢ ) = opcode toucs2 ; ucs4str toucs4 ( utf8char [ ] ¢ ) = opcode toucs4 ; utf8str toutf8 ( utf8char [ ] ¢ ) = opcode toutf8 ; ucs1str toucs1 ( utf8char [ to ] ) = opcode toucs1 ; ucs2str toucs2 ( utf8char [ to ] ) = opcode toucs2 ; ucs4str toucs4 ( utf8char [ to ] ) = opcode toucs4 ; utf8str toutf8 ( utf8char [ to ] ) = opcode toutf8 ; utf8char [ ] min ( utf8char [ ] , utf8char [ ] ) = opcode min ; utf8char [ ] min ( utf8char [ ] , utf8char [ ] ¢ ) = opcode min ; utf8char [ ] min ( utf8char [ ] ¢ , utf8char [ ] ) = opcode min ; utf8char [ ] ¢ min ( utf8char [ ] ¢ , utf8char [ ] ¢ ) = opcode min ; utf8char [ ] ¢ min ( utf8char [ ] [ ] ¢ ) = opcode min ; utf8char [ ] ¢ min ( utf8char [ ] [ to ] ) = opcode min ; utf8char [ ] max ( utf8char [ ] , utf8char [ ] ) = opcode max ; utf8char [ ] max ( utf8char [ ] , utf8char [ ] ¢ ) = opcode max ; utf8char [ ] max ( utf8char [ ] ¢ , utf8char [ ] ) = opcode max ; utf8char [ ] ¢ max ( utf8char [ ] ¢ , utf8char [ ] ¢ ) = opcode max ; utf8char [ ] ¢ max ( utf8char [ ] [ ] ¢ ) = opcode max ; utf8char [ ] ¢ max ( utf8char [ ] [ to ] ) = opcode max ; void flip ( utf8char [ ] [ to ] ) = opcode flip ; void rol ( utf8char [ ] [ to ] ) = opcode rol ; void ror ( utf8char [ ] [ to ] ) = opcode ror ; void sort ( utf8char [ ] [ to ] ) = opcode sort ; void rsort ( utf8char [ ] [ to ] ) = opcode rsort ; void shuffle ( utf8char [ ] [ to ] ) = opcode shuffle ; void revert ( utf8char [ ] [ to ] ) = opcode revert ; void memcpy ( byte * z , byte * q , uint cnt ) = opcode memcpy void memset ( byte * z , int q , uint cnt ) = opcode memset void memclr ( byte * z , uint cnt ) = opcode memclr enum { tm_utc = 0 , tm_localtime = 1 , tm_time = 2 , tm_date = 4 , tm_timezone = 8 , tm_sec = 16 , tm_msec = 32 } extern { float now ( ) = opcode now str timestr ( float seconds , uint flags ) = opcode timestr float timeval ( str ¢ , uint flags ) = opcode timeval } enum int16 tid_state1 = { not_linked = 0 , running = 1 , timeshed = 2 , suspended = 3 } enum int16 tid_state2 = { not_sheduled = 0 , semashed = 1 , mutexshed = 2 , irptshed = 3 } ; type Thread = { tid_state1 state1 ; tid_state2 state2 ; int16 prio ; int16 prio_org ; Tid next1 , prev1 ; Tid next2 , prev2 ; void * blocker ; float64 time ; Mutex * mutexes ; uint16 * [ ] rstack ; int [ ] vstack ; int8 * context0 ; int8 * context1 ; uint16 * ip ; uint16 * * rp ; int32 * vp ; int8 * gp ; int32 _errno ; int32 _dummy ; } scope Thread { Thread kill ( Thread ) = opcode kill } Thread new ( ) = opcode new Thread new ( int16 prio ) = opcode new Thread new ( int16 prio , uint vsz , uint rsz ) = opcode new Tid self ( ) = opcode self int num_cores ( ) = opcode num_cores uint vfree ( ) = opcode vfree uint rfree ( ) = opcode rfree void freeze ( bool ) = opcode freeze void termi ( Tid ) = opcode termi void suspend ( Tid ) = opcode suspend void resume ( Tid ) = opcode resume void termi ( ) = opcode termi void suspend ( ) = opcode suspend void wait ( ) = opcode wait void wait ( float sec ) = opcode wait void shedule ( float when ) = opcode shedule void busywait ( uint usec ) = opcode busywait type Sema = { Tid waiters uint32 count int32 _dummy ; } scope Sema { void request ( Sema ¢ ) = opcode request void request ( Sema ¢ , uint n ) = opcode request void release ( Sema ¢ ) = opcode release void release ( Sema ¢ , uint n ) = opcode release bool tryrequest ( Sema ¢ ) = opcode tryrequest bool tryrequest ( Sema ¢ , float timeout ) = opcode tryrequest void clear ( Sema ¢ ) = opcode clear Sema kill ( Sema ) = opcode kill } Sema new ( ) = opcode new type Mutex = { Tid waiters uint32 count int16 oprio int16 _dummy ; Tid owner Mutex ¢ next , prev } scope Mutex { void lock ( Mutex ¢ ) = opcode lock void unlock ( Mutex ¢ ) = opcode unlock bool trylock ( Mutex ¢ ) = opcode trylock bool trylock ( Mutex ¢ , float timeout ) = opcode trylock Mutex kill ( Mutex ) = opcode kill } Mutex new ( ) = opcode new type Irpt = { Tid waiters uint32 count int32 _dummy ; } scope Irpt { void wait ( Irpt ¢ ) = opcode wait void wait ( Irpt ¢ , float timeout ) = opcode wait void trigger ( Irpt ¢ ) = opcode trigger void clear ( Irpt ¢ ) = opcode clear Irpt kill ( Irpt ) = opcode kill } Irpt new ( ) = opcode new type Object = { void * senders } scope Object { Object kill ( Object ) = opcode kill } extern { void abort ( ) = opcode abort void abort ( str msg ) = opcode abort void abort ( str ¢ msg ) = opcode abort void TODO ( ) void PANIC ( str msg ) void PANIC ( str ¢ msg ) void tron ( ) = opcode tron void troff ( ) = opcode troff } ; scope vt100 { extern { str request_position str save_position str restore_position str cursor_left_1 str cursor_right_1 str cursor_up_1 str cursor_down_1 str clear_right str clear_left str clear_down str clear_up str clear_line str clear_screen str cls str locate ( int row , int col ) str hlocate ( int col ) str vlocate ( int row ) str cursor_left ( int n ) str cursor_right ( int n ) str cursor_up ( int n ) str cursor_down ( int n ) } } uint64 empty_board = 434650421954089056 type PieceDefinition = { int b , c , d , e } PieceDefinition [ 10 ] piece_definition = { { b = 1 , c = 1 , d = 1 , e = 7 } , { b = 7 , c = 1 , d = - 6 , e = 1 } , { b = 1 , c = 1 , d = 7 , e = 6 } , { b = 1 , c = 1 , d = 6 , e = 7 } , { b = 7 , c = 1 , d = - 6 , e = 13 } , { b = 1 , c = 1 , d = 6 , e = 1 } , { b = 1 , c = 7 , d = 1 , e = 6 } , { b = 1 , c = 7 , d = 6 , e = 1 } , { b = 1 , c = 7 , d = 1 , e = 1 } , { b = 1 , c = 1 , d = 1 , e = 6 } } void Rotate ( PieceDefinition ¢ p ) { int rotated ( int n ) { n += 24 int h = n % 7 - 3 int d = n / 7 - 3 return d - 6 * h } p . b = rotated ( p . b ) p . c = rotated ( p . c ) p . d = rotated ( p . d ) p . e = rotated ( p . e ) } void Mirror ( PieceDefinition ¢ p ) { int mirrored ( int n ) { n += 24 int h = n % 7 - 3 int d = n / 7 - 3 return - d - h * 7 } p . b = mirrored ( p . b ) p . c = mirrored ( p . c ) p . d = mirrored ( p . d ) p . e = mirrored ( p . e ) } uint64 Bits ( PieceDefinition ¢ p ) { int a = 0 , b = p . b , c = p . c + b , d = p . d + c , e = p . e + d , m = min ( a , b , min ( c , d , e ) ) a -= m b -= m c -= m d -= m e -= m return 1 << a | 1 << b | 1 << c | 1 << d | 1 << e } uint64 [ 12 ] [ 10 ] rotated_pieces = alloc uint64 [ 12 ] [ 10 ] ( ) { uint i = 10 ; do { while i -- ; rotated_pieces [ i ] = alloc uint64 [ 12 ] ( ) } } int p do { int r do { rotated_pieces [ p ] [ r ] = Bits ( piece_definition [ p ] ) Rotate ( piece_definition [ p ] ) while ++ r < 12 if r % 6 == 0 Mirror ( piece_definition [ p ] ) } while ++ p < 10 } int r = 3 do { rotated_pieces [ 3 ] [ r ] = ~ 0 while ++ r < 9 } void PrintBoard ( str b ) { int i do { print ( "" + b [ i ++ ] + 32 + b [ i ++ ] + 32 + b [ i ++ ] + 32 + b [ i ++ ] + 32 + b [ i ++ ] + " \n" ) i += 2 print ( " " + b [ i ++ ] + 32 + b [ i ++ ] + 32 + b [ i ++ ] + 32 + b [ i ++ ] + 32 + b [ i ++ ] + " \n" ) i ++ while i < 64 } print ( "\n" ) ; } const int N_MAX = 2098 int num_solutions str [ N_MAX ] solutions = alloc str [ N_MAX ] ( ) uint64 [ 10 ] used_pieces = alloc uint64 [ 10 ] ( ) void StoreSolution ( ) { str solution = spacestr ( 64 ) void insert_piece ( uint64 bits , uint c ) { int i do { until ( uint8 ) bits ; bits >>= 8 ; i += 8 } do { if bits & 1 solution [ i ] = ( utf8char ) ( c + 48 ) bits >>= 1 i ++ while bits } } uint p do { insert_piece ( used_pieces [ p ] , p ) while ++ p < 10 } assert ( num_solutions < N_MAX ) solutions [ num_solutions ++ ] = solution [ to ] solution [ to ] . flip ( ) solutions [ num_solutions ++ ] = solution } void Solve ( uint64 board , uint avail , int i0 ) { if avail { do { while board >> i0 & 1 i0 ++ } int p do { if avail >> p & 1 { uint64 & used_piece = used_pieces [ p ] uint64 [ ] ¢ rotated_piece = rotated_pieces [ p ] int r do { used_piece = rotated_piece [ r ] << i0 if board & used_piece == 0 && used_piece >> i0 == rotated_piece [ r ] { Solve ( board | used_piece , avail - 1 << p , i0 ) } while ++ r < 12 } } while ++ p < 10 } } else { assert ( board == ~ 0 ) StoreSolution ( ) } } Solve ( empty_board , 1023 , 0 ) print ( "" + num_solutions + " solutions found\n\n" ) ; PrintBoard ( min ( solutions ) ) ; PrintBoard ( max ( solutions ) ) ; ""