#title: Sheet I-Cord Cast-On (plain python)
# Casts on a sheet by knitting a small tube, leaving one stitch on the bed each time; slow but fancy.

#Write header:
print(';!knitout-2')
print(';;Machine: SWGN2')
print(';;Carriers: 1 2 3 4 5 6 7 8 9 10')

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
carrier = "3" #carrier name
cordWidth = 4 #cord width

#Bring in carrier:
print(f"inhook {carrier}")
#Set stitch table entry for cast-on:
print(f"x-stitch-number 101")

#On SWGN2 machines, carriers start on the right,
#so will start by making a closed tube bind-off for the cord on the right.

#All-needle closed-tube cast-on, with carrier ending on the left:
print(f"rack -0.75")
for n in range(max, max - cordWidth-1, -1):
	print(f"tuck - f{n} {carrier}")
	print(f"tuck - b{n} {carrier}")
print(f"rack 0")

#Set stitch table entry for knitting:
print(f"x-stitch-number 105")

#Knit a small tube, leaving an extra stitch to the right and moving the stitches every course:
#Start first course of the tube:
for n in range(max - cordWidth, max+1, 1):
	print(f"knit + f{n} {carrier}")
#send out yarn inserting hook; it is no longer needed to hold the yarn in place:
print(f"releasehook {carrier}")
#Middle of tube:
for tubeMax in range(max, min-1, -1):
	for n in range(tubeMax, tubeMax - cordWidth-1, -1):
		print(f"knit - b{n} {carrier}")
	print(f"miss - b{tubeMax-cordWidth-1} {carrier}")
	for n in range(tubeMax - cordWidth, tubeMax+1, 1):
		print(f"xfer f{n} bs{n}")
	print(f"rack -1")
	for n in range(tubeMax - cordWidth, tubeMax+1, 1):
		print(f"xfer bs{n} f{n-1}")
	print(f"rack 0")
	for n in range(tubeMax - cordWidth, tubeMax+1, 1):
		print(f"knit + f{n-1} {carrier}")
	print(f"tuck + f{tubeMax} {carrier}")
	for n in range(tubeMax - cordWidth, tubeMax+1, 1):
		print(f"xfer b{n} fs{n}")
	print(f"rack 1")
	for n in range(tubeMax - cordWidth, tubeMax+1, 1):
		print(f"xfer fs{n} b{n-1}")
	print(f"rack 0")
#Finish last course of tube (and get carrier to the left):
for n in range(min - 1, min - cordWidth - 1-1, -1):
	print(f"knit - b{n} {carrier}")

#Closed bind-off on the tube:
for n in range(min - cordWidth - 1, min - 1+1, 1):
	print(f"xfer b{n} f{n}")
	print(f"knit + f{n} {carrier}")
	print(f"rack -1")
	print(f"xfer f{n} b{n+1}")
	print(f"knit + b{n+1} {carrier}")
	print(f"rack 0")
print(f"xfer b{min} f{min}")

#Knit regular course to get carrier to the right:
for n in range(min, max+1, 1):
	print(f"knit + f{n} {carrier}")

#...now can knit on [min,max].
