home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / cpm68k / kmince.lbr / PROGHEAD.CQ / PROGHEAD.C
Text File  |  1986-08-29  |  5KB  |  243 lines

  1. /* -*-c,save-*- */
  2. /* 
  3.  * PROGHEAD.C - Program head generator functions for Mince
  4.  * Robert Heller Created: Tue Sep 24, 1985 19:50:37.36
  5.  * Last Mod Tue Sep 24, 1985 22:02:06.94
  6.  */
  7.  
  8. #include "mince.gbl"
  9. #define PRFILE1 "PROFILE.HED"    /* file which contains profile info */
  10. #define PRFILE2 "A:PROFILE.HED"    /* (secondary) file which contains profile
  11.                    info */
  12. /* Profile data structure */
  13.  
  14. static struct {
  15.     char PerName[32];        /* personal name */
  16.     char CopyRight[256];    /* copyright notice */
  17.     } ProFile;
  18. static int ProRead = FALSE;    /* init flag */
  19. static char *linepfx = "";    /* line prefix text */
  20.  
  21. #define CMODESTR "/* -*-c,save-*- */"    /* text to put at top of C file */
  22. #define SMODESTR "* -*-save-*-"        /* text to put at top of S file */
  23. #ifdef LISPMODE
  24. #define LMODESTR "; -*-lisp,save-*-"    /* text to put at top of LSP file */
  25. #endif
  26.  
  27. /* MGenCPr - generate a C program head (like the one above) */
  28.  
  29. MGenCPr()
  30. {
  31.     static char descr[65];
  32.  
  33.     chkprofl();
  34.     linepfx = " * ";
  35.     BToStart();
  36.     insstr(CMODESTR);
  37.     BInsert(NL);
  38.     insstr("/*");
  39.     BInsert(NL);
  40.     insstr(" * ");
  41.     insstr(buffs[cbuff].fname);
  42.     insstr(" - ");
  43.     GetArg("Description: ",CR,descr,64);
  44.     insstr(descr);
  45.     BInsert(NL);
  46.     insstr(" * ");
  47.     insstr(ProFile.PerName);
  48.     insstr(". Created: ");
  49. #ifdef STRIDE
  50.     MInsTime();
  51. #else
  52.     GetArg("Current Date: ",CR,descr,32);
  53.     insstr(descr);
  54. #endif
  55.     BInsert(NL);
  56.     insstr(" * Last Mod: ");
  57.     BInsert(NL);
  58.     insstr(" * ");
  59.     BInsert(NL);    
  60.     if (ProFile.CopyRight[0] != '\0' && Ask("Copyrighted? ")) {
  61.     insstr(" * ");
  62.     insstr(ProFile.CopyRight);
  63.     BInsert(NL);
  64.     insstr(" * ");
  65.     BInsert(NL);
  66.     }
  67.     insstr(" */");
  68.     BInsert(NL);
  69.     arg = 0;
  70.     }
  71.  
  72. /* MGenSPr - generate an S program head */
  73.  
  74. MGenSPr()
  75. {
  76.     static char descr[65];
  77.  
  78.     chkprofl();
  79.     linepfx = "* ";
  80.     BToStart();
  81.     insstr(SMODESTR);
  82.     BInsert(NL);
  83.     insstr("*");
  84.     BInsert(NL);
  85.     insstr("* ");
  86.     insstr(buffs[cbuff].fname);
  87.     insstr(" - ");
  88.     GetArg("Description: ",CR,descr,64);
  89.     insstr(descr);
  90.     BInsert(NL);
  91.     insstr("* ");
  92.     insstr(ProFile.PerName);
  93.     insstr(". Created: ");
  94. #ifdef STRIDE
  95.     MInsTime();
  96. #else
  97.     GetArg("Current Date: ",CR,descr,32);
  98.     insstr(descr);
  99. #endif
  100.     BInsert(NL);
  101.     insstr("* Last Mod: ");
  102.     BInsert(NL);
  103.     insstr("* ");
  104.     BInsert(NL);    
  105.     if (ProFile.CopyRight[0] != '\0' && Ask("Copyrighted? ")) {
  106.     insstr("* ");
  107.     insstr(ProFile.CopyRight);
  108.     BInsert(NL);
  109.     insstr("* ");
  110.     BInsert(NL);
  111.     }
  112.     insstr("*");
  113.     BInsert(NL);
  114.     arg = 0;
  115.     }
  116. #ifdef LISPMODE
  117. /* MGenLPr - generate a LISP program head */
  118.  
  119. MGenLPr()
  120. {
  121.     static char descr[65];
  122.  
  123.     chkprofl();
  124.     linepfx = ";;; ";
  125.     BToStart();
  126.     insstr(LMODESTR);
  127.     BInsert(NL);
  128.     insstr(";;;");
  129.     BInsert(NL);
  130.     insstr(";;; ");
  131.     insstr(buffs[cbuff].fname);
  132.     insstr(" - ");
  133.     GetArg("Description: ",CR,descr,64);
  134.     insstr(descr);
  135.     BInsert(NL);
  136.     insstr(";;; ");
  137.     insstr(ProFile.PerName);
  138.     insstr(". Created: ");
  139. #ifdef STRIDE
  140.     MInsTime();
  141. #else
  142.     GetArg("Current Date: ",CR,descr,32);
  143.     insstr(descr);
  144. #endif
  145.     BInsert(NL);
  146.     insstr(";;; Last Mod: ");
  147.     BInsert(NL);
  148.     insstr(";;; ");
  149.     BInsert(NL);    
  150.     if (ProFile.CopyRight[0] != '\0' && Ask("Copyrighted? ")) {
  151.     insstr(";;; ");
  152.     insstr(ProFile.CopyRight);
  153.     BInsert(NL);
  154.     insstr(";;; ");
  155.     BInsert(NL);
  156.     }
  157.     insstr(";;;");
  158.     BInsert(NL);
  159.     arg = 0;
  160.     }
  161. #endif
  162. /* MGenOPr - generate a program head (misc. catch all) */
  163.  
  164. MGenOPr()
  165. {
  166.     static char descr[65];
  167.  
  168.     chkprofl();
  169.     linepfx = "";
  170.     BToStart();
  171.     insstr(buffs[cbuff].fname);
  172.     insstr(" - ");
  173.     GetArg("Description: ",CR,descr,64);
  174.     insstr(descr);
  175.     BInsert(NL);
  176.     insstr(ProFile.PerName);
  177.     insstr(". Created: ");
  178. #ifdef STRIDE
  179.     MInsTime();
  180. #else
  181.     GetArg("Current Date: ",CR,descr,32);
  182.     insstr(descr);
  183. #endif
  184.     BInsert(NL);
  185.     insstr("Last Mod: ");
  186.     BInsert(NL);
  187.     if(ProFile.CopyRight[0] != '\0' && Ask("Copyrighted? ")) {
  188.     insstr(ProFile.CopyRight);
  189.     BInsert(NL);
  190.     BInsert(NL);
  191.     }
  192.     arg = 0;
  193.     }
  194. static insstr(str)
  195. register char *str;
  196. {
  197.     while (*str != '\0') {
  198.     BInsert(*str++);
  199.     if (*(str-1) == NL) insstr(linepfx);
  200.     }
  201.     }
  202. static chkprofl()
  203. {
  204.     FILE *pfile,*fopen();
  205.     char *index();
  206.     register int c,n;
  207.     register char *p;
  208.  
  209.     if (ProRead) return;
  210.     pfile = fopen(PRFILE1,"r");
  211.     if (pfile == NULL) pfile = fopen(PRFILE2,"r");
  212.     if (pfile == NULL) {
  213.     strcpy(ProFile.PerName,"Anonymous");
  214.     ProFile.CopyRight[0] = '\0';
  215.     }
  216.     else {
  217.     fgets(ProFile.PerName,31,pfile);
  218.     p = index(ProFile.PerName,'\n'); *p = '\0';
  219.     n = 0; p =(&ProFile.CopyRight[0]);
  220.     while ((c = fgetc(pfile)) != EOF && ++n < 256)
  221.         if (c == '\n') *p++ = NL;
  222.         else *p++ = c;
  223.     fclose(pfile);
  224.     }
  225.     ProRead = TRUE;
  226.     }
  227. MGenPro()
  228. {
  229.     char modetyp[10];
  230.  
  231.     if (GetArg("Which mode :",CR,modetyp,9)) {
  232.     LowCase(modetyp);
  233.     if (strcmp(modetyp,"c") == 0) MGenCPr();
  234.     else if (strcmp(modetyp,"s") == 0) MGenSPr();
  235. #ifdef LISPMODE
  236.     else if (strcmp(modetyp,"lisp") == 0) MGenLPr();
  237. #endif
  238.     else MGenOPr();
  239.     }
  240.     }
  241. s") == 0) MGenSPr();
  242. #ifdef LISPMODE
  243.     else if (strcmp(m