// File: arnoldrobbins[P]mcilroy-regex/sed1.cpp
// Function: yc(Text*, Text*)
void
yc(Text *script, Text *t)
{
	int i;
	int delim = *t->w++;
	uchar *s = script->w;
	uchar *p, *q;
	uchar c, d;
	if(delim == '\n' || delim=='\\')
		syntax("missing delimiter");
	assure(script, 256);
	for(i=0; i<256; i++) 
		s[i] = 0;
	for(q=t->w; *q!=delim; q++)
		if(*q == '\n')
			syntax("missing delimiter");
		else if(*q=='\\' && q[1]==delim)
			q++;
	for(p=t->w, q++; *p != delim; p++, q++) {
		if(*p=='\\' && p[1]==delim)
			p++;
		if(*q == '\n')
			syntax("missing delimiter");
		if(*q == delim)
			syntax("string lengths differ");
		if(*q=='\\' && q[1]==delim)
			q++;
		if(s[*p] && s[*p]!=*q)
			syntax("ambiguous map");
		if(s[*p])
			synwarn("redundant map");
		s[*p] = *q;
	}
	if(*q++ != delim)
		syntax("string lengths differ");
	for(i=0; i<256; i++)
		if(s[i] == 0)
			s[i] = i;
	t->w = q;
	script->w += 256;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rcx
movq (%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, (%rcx)
movzbl (%rax), %eax
movl %eax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
cmpl $0xa, -0x18(%rbp)
je 0x6ece
cmpl $0x5c, -0x18(%rbp)
jne 0x6eda
leaq 0xa5e1(%rip), %rdi      # 0x114b6
callq 0x6220
movq -0x8(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x6f04
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x8(%rcx), %rcx
addq $-0x100, %rcx
addq $-0x1, %rcx
cmpq %rcx, %rax
jb 0x6f14
movq -0x8(%rbp), %rdi
movl $0x100, %esi            # imm = 0x100
callq 0x5ae0
jmp 0x6f16
jmp 0x6f16
movl $0x0, -0x14(%rbp)
cmpl $0x100, -0x14(%rbp)     # imm = 0x100
jge 0x6f3d
movq -0x20(%rbp), %rax
movslq -0x14(%rbp), %rcx
movb $0x0, (%rax,%rcx)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x6f1d
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl -0x18(%rbp), %eax
je 0x6fa5
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0x6f6e
leaq 0xa54f(%rip), %rdi      # 0x114b6
callq 0x6220
jmp 0x6f95
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x5c, %eax
jne 0x6f93
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %eax
cmpl -0x18(%rbp), %eax
jne 0x6f93
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x6f95
jmp 0x6f97
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x6f48
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
cmpl -0x18(%rbp), %eax
je 0x70cb
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x5c, %eax
jne 0x6ff1
movq -0x28(%rbp), %rax
movzbl 0x1(%rax), %eax
cmpl -0x18(%rbp), %eax
jne 0x6ff1
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl $0xa, %eax
jne 0x7009
leaq 0xa4b2(%rip), %rdi      # 0x114b6
callq 0x6220
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl -0x18(%rbp), %eax
jne 0x7021
leaq 0xa4ac(%rip), %rdi      # 0x114c8
callq 0x6220
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x5c, %eax
jne 0x7046
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %eax
cmpl -0x18(%rbp), %eax
jne 0x7046
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
movzbl (%rcx), %ecx
cmpb $0x0, (%rax,%rcx)
je 0x707d
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
movzbl (%rcx), %ecx
movzbl (%rax,%rcx), %eax
movq -0x30(%rbp), %rcx
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x707d
leaq 0xa466(%rip), %rdi      # 0x114de
callq 0x6220
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
movzbl (%rcx), %ecx
cmpb $0x0, (%rax,%rcx)
je 0x709a
leaq 0xa457(%rip), %rdi      # 0x114ec
callq 0x62a0
movq -0x30(%rbp), %rax
movb (%rax), %dl
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
movzbl (%rcx), %ecx
movb %dl, (%rax,%rcx)
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x6fbc
movq -0x30(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x30(%rbp)
movzbl (%rax), %eax
cmpl -0x18(%rbp), %eax
je 0x70ee
leaq 0xa3df(%rip), %rdi      # 0x114c8
callq 0x6220
movl $0x0, -0x14(%rbp)
cmpl $0x100, -0x14(%rbp)     # imm = 0x100
jge 0x712c
movq -0x20(%rbp), %rax
movslq -0x14(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x0, %eax
jne 0x711f
movl -0x14(%rbp), %eax
movb %al, %dl
movq -0x20(%rbp), %rax
movslq -0x14(%rbp), %rcx
movb %dl, (%rax,%rcx)
jmp 0x7121
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x70f5
movq -0x30(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rcx
addq $0x100, %rcx            # imm = 0x100
movq %rcx, (%rax)
addq $0x40, %rsp
popq %rbp
retq
nop