home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3127 / xmless.c < prev   
Encoding:
C/C++ Source or Header  |  1991-03-25  |  3.6 KB  |  168 lines

  1. /** xmless by Andy Colebourne and Andrew Brooks **/
  2.  
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <X11/Intrinsic.h>
  7. #include <X11/Xlib.h>
  8. #include <X11/X.h>
  9. #include <Xm/Xm.h>
  10. #include <Xm/Label.h>
  11. #include <Xm/RowColumn.h>
  12. #include <Xm/Text.h>
  13. #include <Xm/List.h>
  14. #include <Xm/PushB.h>
  15. #include <Xm/Form.h>
  16.  
  17.  
  18. #include <stdio.h>
  19. #include <sys/file.h>
  20.  
  21.  
  22. String fallback_resources[] = {
  23.     "*textwindow.rows:                  24",
  24.     "*textwindow.columns:               80",
  25.     NULL,
  26. };
  27.  
  28.  
  29. Widget toplevel;
  30. int popups;
  31.  
  32.  
  33. void killpop(w, c1, c2)
  34. Widget w;
  35. {
  36.     XtUnmanageChild(w);
  37.     XtDestroyWidget(w);
  38.     popups--;
  39.     if (popups == 0)
  40.        exit(0);
  41. }
  42.  
  43. static XtCallbackRec call_kill[] = { {(XtCallbackProc)killpop, (caddr_t)NULL},
  44.                             { (XtCallbackProc)NULL, (caddr_t)NULL} };
  45.  
  46.  
  47. main(argc,argv)
  48. int argc;
  49. char* argv[];
  50. {
  51. char** arg = argv;
  52. FILE* fp;
  53. XtAppContext app_con;
  54.  
  55.     toplevel = XtAppInitialize(&app_con, "Xbrowser", NULL, 0,
  56.                                &argc, argv, fallback_resources, NULL, 0);
  57.     popups = 0;
  58.  
  59.     if (argc==1)
  60.         dostdin(stdin);
  61.     else
  62.     {
  63.         while (argc--!=1)
  64.         {
  65.             if (!strcmp(*++arg,"-"))
  66.                 dostdin(stdin);
  67.             else
  68.             {
  69.                 fp=fopen(*arg,"r");
  70.                 if (fp==NULL)
  71.                 {
  72.                     fprintf(stderr,"%s: cannot open %s\n",argv[0],*arg);
  73.                     continue;
  74.                 }
  75.                 dofile(fp, *arg, *arg);
  76.                 fclose(fp);
  77.             }
  78.         }
  79.     }
  80.  
  81.     if (popups != 0 )
  82.         XtAppMainLoop(app_con);
  83.      
  84. }
  85.  
  86. dostdin(fp)
  87. FILE* fp;
  88. {
  89.     char c;
  90.     char *name=tmpnam(NULL);
  91.     FILE *temp=fopen(name,"w");
  92.  
  93.     while ((c=getc(fp))!=EOF)
  94.        putc(c, temp);
  95.     fclose(temp);
  96.     temp=fopen(name,"r");
  97.     dofile(temp, name, "stdin");
  98.     remove(name);
  99.     
  100. }
  101.  
  102. void view_window(str, title)
  103. char *str;
  104. char *title;
  105. {
  106. Widget pop, textwindow, outer;
  107. Arg al[10];
  108. int ac;
  109.  
  110.     ac = 0;
  111.     XtSetArg(al[ac], XmNunmapCallback, call_kill);  ac++;
  112.  
  113.     XtSetArg(al[ac], XmNokLabelString, XmStringCreateLtoR("Close", XmSTRING_DEFAULT_CHARSET) ); ac++;
  114.     pop = XmCreatePromptDialog(toplevel, "textpopup", al, ac);
  115.     outer = XtParent(pop);
  116.  
  117.     XtUnmanageChild(XmSelectionBoxGetChild(pop, XmDIALOG_SELECTION_LABEL) );
  118.     XtUnmanageChild(XmSelectionBoxGetChild(pop, XmDIALOG_TEXT ) );
  119.     XtUnmanageChild(XmSelectionBoxGetChild(pop, XmDIALOG_SEPARATOR ) );
  120.     XtUnmanageChild(XmSelectionBoxGetChild(pop, XmDIALOG_APPLY_BUTTON) );
  121.     XtUnmanageChild(XmSelectionBoxGetChild(pop, XmDIALOG_CANCEL_BUTTON) );
  122.     XtUnmanageChild(XmSelectionBoxGetChild(pop, XmDIALOG_HELP_BUTTON) );
  123.  
  124.     ac = 0;
  125.     XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
  126.     XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
  127.     XtSetArg(al[ac], XmNeditMode, XmMULTI_LINE_EDIT); ac++;
  128.     XtSetArg(al[ac], XmNscrollLeftSide, TRUE); ac++;
  129.     textwindow = XmCreateScrolledText(pop, "textwindow", al, ac);
  130.     XtManageChild(textwindow);
  131.  
  132.     ac = 0;
  133.  
  134.     XtSetArg (al[ac], XmNtitle, title); ac++;
  135.     XtSetValues(outer, al, ac);
  136.  
  137.  
  138.     ac = 0;
  139.     XtSetArg(al[ac], XmNdefaultPosition, FALSE);  ac++;
  140.     XtSetValues(XtParent(textwindow), al, ac);
  141.  
  142.     if (str != NULL)
  143.         XmTextSetString(textwindow, str);
  144.  
  145.     XtManageChild(pop);
  146.     popups++;
  147. }
  148.  
  149.  
  150. dofile(fp, name, title)
  151. FILE* fp;
  152. char *name;
  153. char *title;
  154. {
  155. struct stat buf;  
  156. char *string;
  157. int len;
  158.  
  159.     stat(name, &buf);
  160.     len = buf.st_size; 
  161.     string = (char *)XtMalloc(len+1);
  162.     fread(string, sizeof(char), len, fp);
  163.     string[len]='\0';
  164.     view_window(string, title);
  165.     XtFree(string);
  166. }
  167.  
  168.