2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
5 Write the functionlist to a FD file for identify.library.
10 static void write_fd_func(FILE *out
, struct functionhead
*funclistit
, unsigned int lvo
)
12 struct functionarg
*arglistit
;
15 if (funclistit
->lvo
> lvo
+ 1)
17 if (funclistit
->lvo
== lvo
+ 2)
18 fprintf(out
, "private()()\n");
20 fprintf(out
, "##bias %u\n", (funclistit
->lvo
- 1) * 6);
23 fprintf(out
, "%s(", funclistit
->name
);
25 for (arglistit
= funclistit
->arguments
;
27 arglistit
= arglistit
->next
)
29 /* Print a , separator when not the first function argument */
30 if (arglistit
!= funclistit
->arguments
)
33 /* Print only variable name */
34 variable
= arglistit
->arg
+ strlen(arglistit
->arg
) - 1;
35 while ((variable
>= arglistit
->arg
) &&
36 (isalnum(*variable
) || (*variable
== '_')))
40 fprintf(out
, "%s", variable
+ 1);
45 void writefd(struct config
*cfg
)
49 struct functionhead
*funclistit
;
50 struct functionarg
*arglistit
;
57 snprintf(line
, 255, "%s/%s_lib.fd", cfg
->gendir
, cfg
->modulename
);
59 out
= fopen(line
, "w");
68 fprintf(out
, "##base _%s\n", cfg
->libbase
);
70 if (cfg
->modtype
== DEVICE
)
72 /* because of BeginIO/EndIO */
73 /* FIXME: do we need special handling for other module types, too? */
74 fprintf(out
, "##bias %u\n", (cfg
->firstlvo
- 2) * 6);
78 fprintf(out
, "##bias %u\n", cfg
->firstlvo
* 6);
82 "* Automatically generated from '%s'.\n"
83 "* Edits will be lost. This file is supposed to be a support file for identify.library.\n"
88 fprintf(out
, "##public\n");
90 for (funclistit
= cfg
->funclist
, lvo
= cfg
->firstlvo
- 1;
92 funclistit
= funclistit
->next
95 switch (funclistit
->libcall
)
98 write_fd_func(out
, funclistit
, lvo
);
100 for (arglistit
= funclistit
->arguments
;
102 arglistit
= arglistit
->next
105 /* Print a , separator when not the first function argument */
106 if (arglistit
!= funclistit
->arguments
)
109 /* Print register name in lower case */
110 for (lower
= arglistit
->reg
; *lower
!= '\0'; lower
++)
112 fputc(tolower(*lower
), out
);
117 lvo
= funclistit
->lvo
;
121 write_fd_func(out
, funclistit
, lvo
);
122 /* TODO: Currently all SYSV ABI vectors are base-less */
123 fprintf(out
, "sysv)\n");
124 lvo
= funclistit
->lvo
;
129 fprintf(out
, "##end\n");