int
 assemble(char *file)
 {
-       char ofile[100], incfile[20], *p;
+       char *ofile, incfile[20], *p;
        int i, of;
 
+       ofile = alloc(strlen(file)+3); // +3 for .x\0 (x=thechar)
        strcpy(ofile, file);
        p = utfrrune(ofile, '/');
        if(p) {
 
 EXTERN int32   thunk;
 EXTERN Biobuf  obuf;
 
+void*   alloc(int32);
 void*  allocn(void*, int32, int32);
 void   errorexit(void);
 void   pushio(void);
 
 int
 assemble(char *file)
 {
-       char ofile[100], incfile[20], *p;
+       char *ofile, incfile[20], *p;
        int i, of;
 
+       ofile = alloc(strlen(file)+3); // +3 for .x\0 (x=thechar)
        strcpy(ofile, file);
        p = utfrrune(ofile, pathchar());
        if(p) {
 
 EXTERN int32   thunk;
 EXTERN Biobuf  obuf;
 
+void*   alloc(int32);
 void*  allocn(void*, int32, int32);
 void   errorexit(void);
 void   pushio(void);
 
 int
 assemble(char *file)
 {
-       char ofile[100], incfile[20], *p;
+       char *ofile, incfile[20], *p;
        int i, of;
 
+       ofile = alloc(strlen(file)+3); // +3 for .x\0 (x=thechar)
        strcpy(ofile, file);
        p = utfrrune(ofile, pathchar());
        if(p) {