home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / gnu / src / amiga / libnix-0.7-src.lha / libnix-0.7 / sources / headers / splitinline < prev    next >
Encoding:
Text File  |  1994-12-12  |  3.4 KB  |  126 lines

  1. /* 
  2.  * splits a inline header file of gcc into multiple one-function-per-file 
  3.  * c files to generate glue-code.
  4.  */
  5.  
  6. IF ~SHOW("L","rexxsupport.library") THEN
  7. DO
  8.   IF ~ADDLIB("rexxsupport.library",0,-30,34) THEN
  9.   DO
  10.     ECHO "No rexxsupport.library"
  11.     RETURN 20
  12.   END
  13. END
  14.  
  15. filelist=SHOWDIR("gnu:os-include/inline","F","00"x)
  16.  
  17. filelist=DELSTR(filelist,POS("stubs.h",filelist),8)
  18.  
  19. DO WHILE filelist~==""
  20.  
  21.   PARSE VAR filelist filename "00"x filelist
  22.  
  23.   IF ~OPEN(infile,"gnu:os-include/inline/"filename,"R") THEN RETURN 20
  24.   IF ~OPEN(outfile,filename,"W") THEN RETURN 20
  25.  
  26.   DO UNTIL EOF(infile)
  27.     aline=READLN(infile)
  28.     IF LEFT(aline,15)=="static __inline" THEN BREAK
  29.     IF LEFT(aline,2)~=="__" & LEFT(aline,7)~=="#ifndef" & ,
  30.        LEFT(aline,6)~=="#endif" THEN CALL WRITELN(outfile,aline)
  31.   END
  32.  
  33.   IF ~CLOSE(outfile) THEN RETURN 20
  34.  
  35.   DO UNTIL EOF(infile)
  36.  
  37.     IF LEFT(aline,7)=="#define" THEN /* Is a macro */
  38.     DO /* This construction leads to a lot of warnings, but they are harmless */
  39.       
  40.       funcname=WORD(aline,2)
  41.       funcname=LEFT(funcname,POS("(",funcname)-1)
  42.       aline=SUBSTR(aline,9)
  43.  
  44.       IF ~OPEN(outfile,funcname".c","W") THEN RETURN 20
  45.  
  46.       IF RIGHT(aline,1)=="\" THEN
  47.       DO /* ... taglist type */
  48.         bline=READLN(infile)
  49.         start=POS("(",aline)
  50.         DO WHILE start~=0
  51.           aline=INSERT("long ",aline,start)
  52.           start=POS(",",aline,start+1)
  53.         END
  54.         aline=INSERT(",",aline,POS("...",aline)-1)
  55.         aline=LEFT(aline,LENGTH(aline)-1)
  56.         bline=SUBSTR(bline,POS(";",bline)+1)
  57.         bline=LEFT(bline,POS(";",bline)-1)
  58.         bline=INSERT("&",bline,LASTPOS("_",bline))
  59.         bline=DELSTR(bline,LASTPOS("_",bline),1)
  60.       END
  61.       ELSE
  62.       DO /* Normal macro */
  63.     bline=SUBSTR(aline,POS(")",aline)+2)
  64.     aline=LEFT(aline,POS(")",aline))
  65.       END
  66.       
  67.       CALL WRITELN(outfile,"#include <dos/dos.h>")
  68.       CALL WRITELN(outfile,"#include <intuition/classusr.h>")
  69.       CALL WRITELN(outfile,"#include <inline/"filename">")      
  70.       CALL WRITELN(outfile,"#undef "funcname)
  71.       IF isvoid THEN
  72.       DO
  73.         CALL WRITELN(outfile,"void "aline)
  74.         CALL WRITELN(outfile,"{ "bline"; }")
  75.       END
  76.       ELSE
  77.       DO
  78.         CALL WRITELN(outfile,"long "aline)
  79.         CALL WRITELN(outfile,"{ return "bline"; }")
  80.       END
  81.  
  82.       IF ~CLOSE(outfile) THEN RETURN 20
  83.       
  84.       DO UNTIL EOF(infile)
  85.         aline=READLN(infile)
  86.         IF LEFT(aline,15)=="static __inline" | ,
  87.            LEFT(aline,7)=="#define" THEN BREAK
  88.       END
  89.     END
  90.     ELSE
  91.     DO /* Is a normal function -> no warnings generated */
  92.  
  93.       IF POS("void",aline)~=0 THEN /* Test for void type */
  94.         isvoid=1
  95.       ELSE
  96.         isvoid=0
  97.  
  98.       bline=READLN(infile)
  99.       funcname=WORD(bline,1)
  100.  
  101.       IF ~OPEN(outfile,funcname".c","W") THEN RETURN 20
  102.     
  103.       CALL WRITELN(outfile,"#include <dos/dos.h>")
  104.       CALL WRITELN(outfile,"#include <intuition/classusr.h>")
  105.       CALL WRITELN(outfile,"#include """filename"""")
  106.       CALL WRITELN(outfile,SUBWORD(aline,3))
  107.       CALL WRITELN(outfile,bline)
  108.     
  109.       DO UNTIL EOF(infile)
  110.         aline=READLN(infile)
  111.         IF LEFT(aline,15)=="static __inline" | ,
  112.            LEFT(aline,7)=="#define" THEN BREAK
  113.         IF LEFT(aline,2)~=="__" & LEFT(aline,7)~=="#ifndef" & ,
  114.            LEFT(aline,6)~=="#endif" THEN CALL WRITELN(outfile,aline)
  115.       END
  116.  
  117.       IF ~CLOSE(outfile) THEN RETURN 20
  118.     END
  119.   END
  120.  
  121.   IF ~CLOSE(infile) THEN RETURN 20
  122.  
  123. END    
  124.  
  125. RETURN 0
  126.