************************************************************* *                                                           * *                   G E T C E                               * *                  -----------                              * *                                                           * *                                                           * *      von PEARL :   CALL GETCE ( FELD     FIXED IDENT,     * *                                 LAENG    FIXED IDENT,     * *                                 LND      FIXED,           * *                                 ANZ      FIXED IDENT);    * *                                                           * *       FELD:   Adresse eines Feldes (erstes Element)       * *       LAENG:  ...des Feldes                               * *       LND:    eigene Warteschlange                        * *       ANZ:    Anzeigen                                    * *                                                           * *                                                           * *       ANZ :   1  Warteschlange leer                       * *               2  GET auf LND                              * *               3  Puffer zu kurz                           * *               4  Pufferlaenge ist 0                       * *               5  CE ist leer                              * *               6  LND ist unzulaessig                      * *                                                           * ************************************************************* *    M. Leufgen    8551 Pinzgerg   / 15.01.1989    **--------------------------------------------------**      Module KOPF fuer RTOS-UH                    * *                                                  * MDLE:  DC.L   0                                    *        DC.L   0                                    *        DC     $10                                  *        DC.B   'GETCE '                             * ****************************************************   PAGE **************************************************** *      Hyperprozessor und Trap beschreibung        * *                                                  * ENTR   OPD.V  29             Eingang               * VARW   OPD.V  10             FIXED(15) per IDENT   * INVW   OPD.V  14             FIXED(15)             * EPAR   OPD.V  19             Parameterende         * RETN   OPD    $4E4C          Ausgang               * *                                                  * TOQ    OPD    $4E4D          TAKE OFF QUEUE        * RELCE  OPD    $4E49          CE freigeben          * TERMI  OPD    $4E41          Task beenden          * ERROR  OPD    $A002          Fehler ausgeben       * *                                                  * **************************************************** *>>>>> Groesste TASK im System festlegen <<<<<<<<<<* *                                                  * MAXLND     EQU     50        groesste Task : 49    * *                                                  * **************************************************** *      Lagebeschreibung im PWS                     * *                                                  * FELD      EQU     0                                * LAENG     EQU     FELD+4                           * LND       EQU    LAENG+4                           * ANZ       EQU      LND+2                           * WSPSZ     EQU      ANZ+4                           * *                                                  * **************************************************** *      Systemadressen                              * *                                                  * TID       EQU     $802        Aktuell laufende Task* LNDTID    EQU     $852        RALI   LND nach TASK * *                                                  * **************************************************** *      Lagebeschreibung im CE                      * *                                                  * BUADR     EQU     $20                              * BULNG     EQU     $24                              * STATUS    EQU     $26                              * MODE      EQU     $28                              * *                                                  * ****************************************************   PAGE **************************************************** *                                                  * *      G E T C E    P R O C E D U R E              * *                                                  * **************************************************** *                                                  * *                                                  * *  groesste LND fuer LND-TID Tabelle bekanntgeben  * * ------------------------------------------------ * *                                                  * *                                                  * *                                                  *         DC     $AEB1,$BF95,(1*2+1)*37              * *                                                  *         DC.B   $81              Normale Task       *         DC.B   $80              LND Betreuungstask *         DC.B   '#MAXLD'         Name der TASK      *         DC     -1               Prio               *         DC.L   $66              Workspace          *         DC     MAXLD-$          Startadresse       *         DC     MAXLND           groesste LND       *         DC.B   $0               ------ STOP -------* *                                                  * *--------------------------------------------------* *                                                  * MAXLD   ERROR                                      *         DC   $1224            TASK WRONG LND (XIO) *         MOVE.W   =MAXLND,D1   LND in D1            *         TOQ                                        *         TERMI            Terminate                 *         RELCE            CE wegschmeissen          *         TERMI            Terminate                 * *                                                  * ****************************************************   PAGE **************************************************** *                                                  * *                                                  * *     Procedure fuer Lader bekannt machen          * *    -------------------------------------         * *                                                  * *                                                  * *                            Parameterende         *         DC     $AEB1,$BF95,(17*2+1)*37             *         DC.B   'GETCE '                            *         DC     GETCE-$                             * *                                                  * *                                                  * **************************************************** *                                                  * *                                                  * *                                                  * >GETCE  ENTR   WSPSZ.L                             *         VARW   FELD.Z                              *         VARW   LAENG.Z                             *         VARW   LND.X                               *         VARW   ANZ.Z                               *         EPAR                                       * *                                                  * *                                                  * * Frei :  D0....D7  /  A0....A3                    * *                                                  * *--------------------------------------------------* *                                                  *         MOVEA.L  LAENG.X,A0         CMPI.W   =0,(A0)        Laenge 0 ?         *         BNE      LOK            --> Laenge OK      *         MOVE.W   =4,D0          Anzeigen auf 4     *         BRA      EXIT           ende               * *                                                  * *--------------------------------------------------* *      Pruefen ob LND zulaessig                    * *                                                  * LOK     CLR.L    D1             D1 ganz loeschen   *         MOVE.W   LND.X,D1       LND in D1          *         CMPI.W   =MAXLND,D1     groesser MAXLND ?  *         BLT      DOK            --> LND OK         *         MOVE.W   =6,D0          Anzeigen auf 6     *         BRA      EXIT           ende               * *                                                  * *--------------------------------------------------* *      TID in LND Tabelle eintragen                * *                                                  * *                               D1 ist LND         * DOK     ASL      =2,D1          * 4  ( LND * 4 )   *         MOVEA.L  LNDTID,A1      ADR der RALI in A1 *         ADDA.L   D1,A1          RALI ADR + offset  *         MOVE.L   TID,(A1)       Task id in RALI    * *                                                  * *--------------------------------------------------* *       CE aus Warteschlange loesen                * *                                                  *         MOVE.W   LND.X,D1       LND in D1          * *                                                  *         TOQ                     Take off Queue     * *                                                  *         BRA.S     WSLEER                           * *                                                  *         BRA.S     WSOK                             * *                                                  * *--------------------------------------------------* *       Warteschlange ist leer                     * *                                                  * WSLEER  MOVE.W    =1,D0                            *         BRA       EXIT                             * *                                                  * *--------------------------------------------------* *       Eintrag in Warteschlange vorhanden         * *                                                  * WSOK    BTST      =6,MODE(A1)   Richtungsflag      *         BNE       RIFOK                            * *                                                  * *--------------------------------------------------* *       Richtungsflag steht auf 'GET'              * *                                                  *         RELCE                   CE wegschmeissen   *         MOVE.W    =2,D0                            *         BRA       EXIT                             * *                                                  * *--------------------------------------------------* *       Richtungsflag ist OK                       * *                                                  * RIFOK   MOVE.W    BULNG(A1),D1  Pufferlaenge in D1 *         CMPI      =0,D1         laenge 0 ?         *         BNE       CELOK                            * *                                                  * *--------------------------------------------------* *       Pufferlaenge ist 0                         * *                                                  *         RELCE                   CE wegschmeissen   *         MOVE.W    =5,D0                            *         BRA       EXIT                             * *                                                  * *--------------------------------------------------* *       CE-Pufferlaenge ist OK                     * *                                                  * CELOK   MOVEA.L   LAENG.X,A0         MOVE.W    (A0),D3       Laenge des.....    *         MOVE.W    BULNG(A1),D1  Laenge des CE Puff.*         CMP.W     D1,D3         passen Daten in Puf*         BGE       PASST                            * *                                                  * *--------------------------------------------------* *       Daten passen nicht in Puffer               * *                                                  *         RELCE                   CE wegschmeissen   *         MOVE.W    =3,D0                            *         BRA       EXIT                             * *                                                  * *--------------------------------------------------* *       Datenpuffer ist gross genug                * *                                                  * PASST   MOVE.W    D1,(A0)       Laenge als Rueckgab*         MOVEA.L   FELD.X,A3     Adresse der Puf.adr*         MOVEA.L   BUADR(A1),A2  Adresse des CE PUF * *                                                  * *                                                  * *--------------------------------------------------* *       Daten vom CE in Anwenderpuffer             * *                                                  * *                                                  *         SUBQ     =1,D1          fuer BDF           * *                               ******************** LOOP    MOVE.B   (A2)+,(A3)+    von  CE ....       * *                               nach Puffer        *         DBF      D1,LOOP        ******************** *                                                  * *--------------------------------------------------* *                                                  * *       CE freigeben                               * *                                                  *         RELCE                                      * *                                                  *         MOVE.W   =0,D0        keine Fehler         * *                                                  * *--------------------------------------------------* *                                                  * EXIT    MOVEA.L  ANZ.X,A3     Adresse der Anzeigen *         MOVE.W   D0,(A3)      Anzeigen eintragen   *         RETN                                       * *                                                  * *                                                  * ****************************************************        END 