print <<END;
#ifndef DOINIT
-EXT OP * (*check[])();
+EXT OP * (*check[]) _((OP *op));
#else
-EXT OP * (*check[])() = {
+EXT OP * (*check[]) _((OP *op)) = {
END
for (@ops) {
tie tie ck_fun idms R S L
untie untie ck_fun is R
-tied tied ck_fun st R
+tied tied ck_fun s R
dbmopen dbmopen ck_fun is H S S
dbmclose dbmclose ck_fun is H
prtf printf ck_listiob ims F? L
print print ck_listiob ims F? L
-sysopen sysopen ck_fun st F S S S?
+sysopen sysopen ck_fun s F S S S?
sysread sysread ck_fun imst F R S S?
syswrite syswrite ck_fun imst F S S S?
eof eof ck_eof is F?
tell tell ck_fun st F?
seek seek ck_fun s F S S
+# truncate really behaves as if it had both "S S" and "F S"
truncate truncate ck_trunc is S S
fcntl fcntl ck_fun st F S S