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>