Annotation of rpl/src/encart.c, revision 1.1
1.1 ! bertrand 1: /*
! 2: ================================================================================
! 3: RPL/2 (R) version 4.0.9
! 4: Copyright (C) 1989-2010 Dr. BERTRAND Joël
! 5:
! 6: This file is part of RPL/2.
! 7:
! 8: RPL/2 is free software; you can redistribute it and/or modify it
! 9: under the terms of the CeCILL V2 License as published by the french
! 10: CEA, CNRS and INRIA.
! 11:
! 12: RPL/2 is distributed in the hope that it will be useful, but WITHOUT
! 13: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
! 14: FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL V2 License
! 15: for more details.
! 16:
! 17: You should have received a copy of the CeCILL License
! 18: along with RPL/2. If not, write to info@cecill.info.
! 19: ================================================================================
! 20: */
! 21:
! 22:
! 23: #include "rpl.conv.h"
! 24:
! 25: #ifdef MOTIF_SUPPORT
! 26: # include <X11/Xlib.h>
! 27: # include <Xm/XmAll.h>
! 28: # include <X11/xpm.h>
! 29: #endif
! 30:
! 31:
! 32: void
! 33: encart(struct_processus *s_etat_processus, unsigned long duree)
! 34: {
! 35: # ifdef MOTIF_SUPPORT
! 36: # include "rpl.xpm"
! 37:
! 38: Display *display;
! 39:
! 40: int argc;
! 41: int erreur;
! 42: int hauteur;
! 43: int hauteur_xpm;
! 44: int largeur;
! 45: int largeur_xpm;
! 46:
! 47: Pixel couleur_arriere_plan;
! 48: Pixel couleur_avant_plan;
! 49:
! 50: Pixmap pixmap_rpl;
! 51: Pixmap pixmap_rpl_masque;
! 52:
! 53: Position hauteur_popup;
! 54: Position largeur_popup;
! 55:
! 56: String *argv;
! 57:
! 58: struct timespec attente;
! 59:
! 60: struct timeval temps_ecoule;
! 61: struct timeval horodatage_initial;
! 62: struct timeval horodatage_final;
! 63:
! 64: unsigned long decor;
! 65: unsigned long fonctions;
! 66:
! 67: Widget cadre;
! 68: Widget form;
! 69: Widget objet_principal;
! 70: Widget pixmap;
! 71:
! 72: XEvent evenement;
! 73:
! 74: XtAppContext app;
! 75:
! 76: if (strstr(XmVERSION_STRING, "LessTif") != NULL)
! 77: {
! 78: printf("Lesstif is broken, please consider an upgrade to OpenMotif.\n");
! 79: return;
! 80: }
! 81:
! 82: argc = 0;
! 83: argv = NULL;
! 84:
! 85: display = XOpenDisplay(NULL);
! 86:
! 87: // Si display est nul, il n'y pas de serveur X.
! 88:
! 89: if (display != NULL)
! 90: {
! 91: XCloseDisplay(display);
! 92:
! 93: objet_principal = XtVaOpenApplication(&app, "rpl",
! 94: NULL, 0, &argc, argv, NULL, topLevelShellWidgetClass, NULL);
! 95: XSynchronize(XtDisplay(objet_principal), False);
! 96:
! 97: form = XtVaCreateManagedWidget("rplSplashScreen",
! 98: xmFormWidgetClass, objet_principal,
! 99: NULL);
! 100:
! 101: cadre = XtVaCreateManagedWidget("rplExternalFrame",
! 102: xmFrameWidgetClass, form,
! 103: XmNtopAttachment, XmATTACH_FORM,
! 104: XmNbottomAttachment, XmATTACH_FORM,
! 105: XmNleftAttachment, XmATTACH_FORM,
! 106: XmNrightAttachment, XmATTACH_FORM,
! 107: XmNtopOffset, 5,
! 108: XmNleftOffset, 5,
! 109: XmNrightOffset, 5,
! 110: XmNbottomOffset, 5,
! 111: XmNmarginWidth, 5,
! 112: XmNmarginHeight, 5,
! 113: NULL);
! 114:
! 115: XtVaGetValues(form,
! 116: XmNforeground, &couleur_avant_plan,
! 117: XmNbackground, &couleur_arriere_plan,
! 118: NULL);
! 119:
! 120: if ((erreur = XCreatePixmapFromData(XtDisplay(form),
! 121: DefaultRootWindow(XtDisplay(form)), rpl_xpm,
! 122: &pixmap_rpl, &pixmap_rpl_masque, NULL)) != 0)
! 123: {
! 124: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
! 125: return;
! 126: }
! 127:
! 128: pixmap = XtVaCreateManagedWidget("rplPixmap",
! 129: xmLabelWidgetClass, cadre,
! 130: XmNlabelType, XmPIXMAP,
! 131: XmNlabelPixmap, pixmap_rpl,
! 132: NULL);
! 133:
! 134: XtVaGetValues(objet_principal,
! 135: XmNmwmDecorations, &decor,
! 136: XmNmwmFunctions, &fonctions,
! 137: NULL);
! 138:
! 139: decor &= ~(MWM_DECOR_ALL + MWM_DECOR_MAXIMIZE + MWM_DECOR_RESIZEH
! 140: + MWM_DECOR_TITLE + MWM_DECOR_MENU + MWM_DECOR_BORDER);
! 141: fonctions &= ~(MWM_FUNC_ALL + MWM_FUNC_RESIZE + MWM_FUNC_CLOSE
! 142: + MWM_FUNC_MINIMIZE + MWM_FUNC_MAXIMIZE);
! 143:
! 144: largeur = WidthOfScreen(XtScreen(form));
! 145: hauteur = HeightOfScreen(XtScreen(form));
! 146:
! 147: XtVaSetValues(objet_principal,
! 148: XmNmwmDecorations, decor,
! 149: XmNmwmFunctions, fonctions,
! 150: NULL);
! 151:
! 152: #if 0
! 153: XtRealizeWidget(objet_principal);
! 154:
! 155: XtVaGetValues(objet_principal,
! 156: XmNheight, &hauteur_popup,
! 157: XmNwidth, &largeur_popup,
! 158: NULL);
! 159:
! 160: XtVaSetValues(objet_principal,
! 161: XmNx, (largeur - largeur_popup) / 2,
! 162: XmNy, (hauteur - hauteur_popup) / 2,
! 163: NULL);
! 164: #else
! 165: sscanf(rpl_xpm[0], "%d %d", &largeur_xpm, &hauteur_xpm);
! 166:
! 167: largeur_popup = largeur_xpm + 28;
! 168: hauteur_popup = hauteur_xpm + 28;
! 169:
! 170: XtVaSetValues(objet_principal,
! 171: XmNx, (largeur - largeur_popup) / 2,
! 172: XmNy, (hauteur - hauteur_popup) / 2,
! 173: NULL);
! 174:
! 175: XtRealizeWidget(objet_principal);
! 176: #endif
! 177:
! 178: XFlush(XtDisplay(form));
! 179:
! 180: attente.tv_sec = 0;
! 181: attente.tv_nsec = 1000;
! 182:
! 183: gettimeofday(&horodatage_initial, NULL);
! 184:
! 185: do
! 186: {
! 187: if (XtAppPending(app) != 0)
! 188: {
! 189: XtAppNextEvent(app, &evenement);
! 190: XtDispatchEvent(&evenement);
! 191: }
! 192:
! 193: nanosleep(&attente, NULL);
! 194: gettimeofday(&horodatage_final, NULL);
! 195:
! 196: temps_ecoule.tv_sec = horodatage_final.tv_sec
! 197: - horodatage_initial.tv_sec;
! 198: temps_ecoule.tv_usec = horodatage_final.tv_usec
! 199: - horodatage_initial.tv_usec;
! 200:
! 201: if (temps_ecoule.tv_usec < 0)
! 202: {
! 203: temps_ecoule.tv_usec += 1000000;
! 204: temps_ecoule.tv_sec--;
! 205: }
! 206: } while (((temps_ecoule.tv_usec / ((double) 1000000))
! 207: + temps_ecoule.tv_sec) < (duree / ((double) 1000000)));
! 208:
! 209: XtUnrealizeWidget(objet_principal);
! 210:
! 211: XmDestroyPixmap(XtScreen(form), pixmap_rpl);
! 212: XmDestroyPixmap(XtScreen(form), pixmap_rpl_masque);
! 213:
! 214: XtDestroyWidget(pixmap);
! 215: XtDestroyWidget(cadre);
! 216: XtDestroyWidget(form);
! 217: XtDestroyWidget(objet_principal);
! 218:
! 219: while(XtAppPending(app) == 0)
! 220: {
! 221: nanosleep(&attente, NULL);
! 222: }
! 223:
! 224: while(XtAppPending(app) != 0)
! 225: {
! 226: XtAppNextEvent(app, &evenement);
! 227: XtDispatchEvent(&evenement);
! 228: nanosleep(&attente, NULL);
! 229: }
! 230:
! 231: XtDestroyApplicationContext(app);
! 232: }
! 233: # endif
! 234:
! 235: return;
! 236: }
! 237:
! 238: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>