home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / texmf / source / driver / show / amiga / amkey.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-07  |  20.3 KB  |  818 lines

  1. /*
  2. **    This file generated by localize 2.9 (AmigaDOS 2.1) from amkey.c
  3. */
  4. /************************************************************************/
  5. /*                                    */
  6. /*        K    E    Y    -    h a n d l i n g        */
  7. /*                                    */
  8. /************************************************************************/
  9.  
  10.  
  11. #include "defines.h"
  12.  
  13. #include <stdio.h>
  14. #include <ctype.h>
  15.  
  16. #include <intuition/intuition.h>
  17. #include <exec/devices.h>
  18. #include <devices/console.h>
  19.  
  20. #ifdef AZTEC_C
  21. #  include <functions.h>
  22. #endif
  23.  
  24. #include "globals.h"
  25.  
  26. #include <string.h>
  27. #include <stdlib.h>
  28. #include <dos.h>
  29.  
  30. #include <clib/intuition_protos.h>
  31. #include <clib/exec_protos.h>
  32. #include <clib/console_protos.h>
  33.  
  34. #include <pragmas/intuition_pragmas.h>
  35. #include <pragmas/exec_pragmas.h>
  36. #include <pragmas/console_pragmas.h>
  37.  
  38. #include "amscreen.h"
  39. #include "gad_def.h"
  40. #include "small_arp.h"
  41. #include "minrexx.h"
  42. #include "arexx.h"
  43.  
  44. #include "amscreen.i"
  45. #include "messwin.i"
  46. #include "showdvi.i"
  47. #include "gadget.i"
  48. #include "am_requ.i"
  49. #include "am_menu.i"
  50. #include "globals.i"
  51. #include "config.i"
  52. #include "newcli.i"
  53. #include "amkey.i"
  54. #include "prefwin.i"
  55. #include "help.i"
  56. #include "search.i"
  57. #include "searchwin.i"
  58.  
  59.  
  60. #include <pragmas/console_pragmas.h>
  61.  
  62. /*
  63.  * Fuer die locale-Library:
  64.  *
  65.  * Hier duerfen *nur* die MSG_#? Nummern eingebunden werden!
  66.  * Achtung:
  67.  * Es muss/sollte 'multiple-include' erlaubt sein!
  68.  */
  69. #include "local.i"
  70.  
  71. #undef  CATCOMP_ARRAY
  72. #undef  CATCOMP_BLOCK
  73. #undef  CATCOMP_STRINGS
  74. #define CATCOMP_NUMBERS
  75. #include "localstr.h"
  76.  
  77.  
  78.  
  79. extern struct Library  *ConsoleDevice;
  80. extern struct IOStdReq  ConsoleReq;
  81.  
  82.  
  83. extern long        current_page_phy;
  84. extern long        current_page;
  85.  
  86.  
  87.  
  88. #define SCROLL_Y_NORM        1    // 9
  89. #define SCROLL_Y_NORM_REPEAT    12    // 18
  90. #define SCROLL_Y_ALT        6    // 1
  91. #define SCROLL_Y_ALT_REPEAT    24    // 6
  92.  
  93. #define SCROLL_X_NORM        1    // 4
  94. #define SCROLL_X_NORM_REPEAT    4    // 8
  95. #define SCROLL_X_ALT        4    // 1
  96. #define SCROLL_X_ALT_REPEAT    8    // 4
  97.  
  98.  
  99.  
  100. static void handle_number        Args((int n));
  101. static char *change_key            Args((unsigned int Code, unsigned int Qualifier,
  102.                           char *buffer, int buflen));
  103.  
  104.  
  105.  
  106. static char *change_key(unsigned int Code, unsigned int Qualifier,
  107.             char *buffer, int buflen)
  108. {
  109.   long error;
  110.   struct InputEvent ie;
  111.   char *ret = NULL;
  112. #if 0
  113.   struct KeyMap km;
  114.  
  115.   if (!OpenDevice("console.device",-1L, &req, 0L)) {
  116.     ConsoleDevice = &(req.io_Device->dd_Library);
  117. #endif
  118.  
  119.     if (ConsoleDevice != NULL) {
  120. #if 0 /* superfluous */
  121.       ConsoleReq.io_Message.mn_ReplyPort = NULL;
  122.       ConsoleReq.io_Command = CD_ASKDEFAULTKEYMAP;
  123.       ConsoleReq.io_Flags   = IOF_QUICK;
  124.       ConsoleReq.io_Length  = sizeof(km);
  125.       ConsoleReq.io_Data    = (APTR)&km;
  126.       
  127.       error = DoIO((struct IORequest *)&ConsoleReq);
  128.       
  129.       if (!error) {
  130. #endif
  131.         ie.ie_NextEvent = NULL;
  132.         ie.ie_Class     = IECLASS_RAWKEY;
  133.         ie.ie_SubClass  = 0;
  134.         ie.ie_Code      = Code;
  135.         ie.ie_Qualifier = Qualifier;
  136.         ie.ie_EventAddress = NULL;
  137.         
  138.         error = RawKeyConvert(&ie, buffer, (long)buflen-1L, NULL /*&km*/);
  139.         if (error>0) {
  140.           buffer[error] = '\0';
  141.         }
  142.         else {
  143.           buffer[0] = '\0';
  144.         }
  145.         ret = buffer;
  146. #if 0 /* superfluous */
  147.       }
  148. #endif
  149.     }
  150. #if 0
  151.     CloseDevice(&req);
  152.   }
  153. #endif
  154.  
  155.   return ret;
  156. }
  157.  
  158.  
  159.  
  160. /***************    T A S T A T U R    ***********************/
  161.  
  162. static void handle_number(int n)
  163. {
  164.   if (n == 10)        set_counter(0);
  165.   if (n>0 && n<10)    set_counter(n);
  166.   switch (n) {
  167.     case 15:    set_counter(0);
  168.         break;
  169.     case 29:
  170.     case 30:
  171.     case 31:    set_counter(n-28);
  172.         break;
  173.     case 45:
  174.     case 46:
  175.     case 47:    set_counter(n-41);
  176.         break;
  177.     case 61:
  178.     case 62:
  179.     case 63:    set_counter(n-54);
  180.         break;
  181.   }
  182. }
  183.  
  184. static long tast(int *dx, int *dy, unsigned int Code, unsigned int Qualifier,
  185.          int *is_p_nr, WORD MouseX, WORD MouseY)
  186. {
  187.   register long ret;
  188.   int scroll;
  189.   int help;
  190.   char buffer[40], *b, c;
  191.   unsigned int code, qualifier;
  192.  
  193.   *dx = *dy = 0;
  194.   *is_p_nr = 0;
  195.   ret = 5;
  196.   qualifier = Qualifier - 32768;
  197.   code = Code & 255;
  198.  
  199. #ifdef DEBUG
  200.   if (DeBug) {
  201.     printf("Code: %d, Qual: %d\n",code,qualifier); 
  202.   }
  203. #endif
  204.  
  205.   b = change_key(Code, Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT), buffer, 39);
  206.  
  207.   /** bb = change_key(Code, Qualifier, buffer, 39); **/
  208.   if (b == NULL) {
  209.     FatalStr(5, "can't convert RAW-code!");
  210.   }
  211.   c = *b;    /* take first character */
  212.  
  213.   /* printf("Code: %d, Qual: %d, Zeichen: %c\n",code,qualifier,c);  */
  214.  
  215.   if ((code == 51) && (qualifier & IEQUALIFIER_CONTROL) && (Enable_Abort == 1)) {
  216.     CXBRK();        /* CTRL C  --  Prog. Ende     */
  217.     return 0;        /* oder falls es nicht geht...     */
  218.   }
  219.   
  220.  
  221.   if (c == '=' && (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))) {
  222.     c = '+';    /* HACK wg. amerikanischer tastatur */
  223.   }
  224.  
  225.   if ((qualifier & (IEQUALIFIER_LCOMMAND | IEQUALIFIER_RCOMMAND))
  226.     && c >= '0' && c <= '9') {
  227.     int k;
  228.     
  229.     if (c == '0') {
  230.       k = 9;
  231.     }
  232.     else {
  233.       k = c - '1';
  234.     }
  235.     if (k < show_state.menu_res_lines) {
  236.       if (resolution != show_state.mres[k]) {
  237.         resolution = show_state.mres[k];
  238.         hconvresolution = resolution;
  239.         vconvresolution = resolution;
  240.         if (is_dvif) {
  241.           OpenNewDVI(filename, TRUE);
  242.           set_chres;
  243.           if (is_show) {
  244.             show_full_page(TRUE);    /* full-page modus off (no_refresh=TRUE) */
  245.           }
  246.       /* set_checked_os_menu(); sollte auch mit 'mutual exclude' gehen!! */
  247.           return 3L;                /* neues File, Name nicht geaendert. */
  248.         }
  249.       }
  250.     }
  251.   }
  252.  
  253.   if (!(qualifier & ~IEQUALIFIER_NUMERICPAD)) {
  254.     handle_number(code);    /* ohne alles (kein SHIFT, ALT, AMIGA ...) */
  255.   }
  256.  
  257.   if (code > 79 && code < 90) {            /* function keys */
  258.     /*int result = 0;*/
  259.     /* ACHTUNG!!!                            */
  260.     /* call_rexx ist synchron. Wenn man in call_rexx einen ShowDVI    */
  261.     /* Befehl absetzt, gibt es eine Endlos-Schleife!!            */
  262.     if (qualifier == 0L && show_state.ftast[code-80] != NULL) {
  263.       /* call_rexx(show_state.ftast[code-80], &result, TRUE); */
  264.       /* ok("Call command: \n\"%s\"\nResult: %ld", show_state.ftast[code-80], result); */
  265.       asyncRexxCmd(show_state.ftast[code-80]);
  266.     }
  267.     else if ((qualifier == IEQUALIFIER_LSHIFT 
  268.        || qualifier == IEQUALIFIER_RSHIFT) &&
  269.         show_state.ftast[code-70] != NULL) {
  270.            /* ok("Call command: \n\"%s\"", show_state.ftast[code-70]); */
  271.            /* call_rexx(show_state.ftast[code-70], &result, TRUE); */
  272.            asyncRexxCmd(show_state.ftast[code-70]);
  273.          }
  274.   }
  275.  
  276.   if (is_show) {
  277.     if (code == CURSORUP || code == CURSORDOWN ||
  278.         code == CURSORLEFT || code == CURSORRIGHT || 
  279.         c == ' ' || c == 'b' || c == 'B' ||
  280.     (code == 24 && !(qualifier & (IEQUALIFIER_LCOMMAND | IEQUALIFIER_RCOMMAND))/* Ao */)
  281.        ) {
  282.       return 5;
  283.     }
  284.   }
  285.  
  286.   switch (code) 
  287.    {
  288.     case CURSORUP:
  289.     case CURSORDOWN:
  290.     if (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) {
  291.  
  292.       /* bei SHIFT und REPEAT wird *nix* gemacht */
  293.  
  294.       if (!(qualifier & IEQUALIFIER_REPEAT)) {
  295.         if (!is_print &&
  296.             (code == CURSORUP   && static_y_Koo == 0) || 
  297.             (code == CURSORDOWN && static_y_Koo+x_win_i_height == wy)) {
  298.  
  299.           /* nicht im drucken und ganz am Ende/Anfang der Seite */
  300.           if (code == CURSORUP) {
  301.             set_jmpdown;
  302.             ret = -1;    /* prev page */
  303.           }
  304.           else {
  305.             set_jmpup;
  306.             ret =  1;    /* next page */
  307.           }
  308.         }
  309.         else {
  310.           /* noch nicht ganz am Ende/Anfang der Seite */
  311.  
  312.           *dy = x_win_i_height-x_win_i_height/4;
  313.           if (code == CURSORUP) *dy = - *dy;
  314.           ret = 0;
  315.         }
  316.       }
  317.  
  318.     }
  319.     else {
  320.           if (qualifier & IEQUALIFIER_REPEAT) {                /* *** REPEAT *** */
  321.             if (qualifier & (IEQUALIFIER_LALT | IEQUALIFIER_RALT)) {        /* ALT */
  322.           scroll = SCROLL_Y_ALT_REPEAT;
  323.             }
  324.             else if (qualifier & IEQUALIFIER_CONTROL) {                /* CTRL */
  325.           scroll = wy;
  326.             }
  327.             else {                                /* weder noch */
  328.               scroll = SCROLL_Y_NORM_REPEAT;
  329.             }
  330.       }
  331.       else {                            /* *** erstmalig *** */
  332.             if (qualifier & (IEQUALIFIER_LALT | IEQUALIFIER_RALT)) {        /* ALT */
  333.           scroll = SCROLL_Y_ALT;
  334.             }
  335.             else if (qualifier & IEQUALIFIER_CONTROL) {                /* CTRL */
  336.           scroll = wy;
  337.             }
  338.             else {                                /* weder noch */
  339.               scroll = SCROLL_Y_NORM;
  340.             }
  341.       }
  342.  
  343.       if (code == CURSORUP) {
  344.         scroll = -scroll;
  345.       }
  346.       *dy = scroll;
  347.       ret = 0;
  348.     }
  349.         break;
  350.  
  351.  
  352.     case CURSORLEFT:
  353.     case CURSORRIGHT:
  354.  
  355.         if (qualifier & IEQUALIFIER_REPEAT) {                /* *** REPEAT *** */
  356.           if (qualifier & (IEQUALIFIER_LALT | IEQUALIFIER_RALT)) {        /* ALT */
  357.         scroll = SCROLL_X_ALT_REPEAT;
  358.           }
  359.           else if (qualifier & IEQUALIFIER_CONTROL) {                /* CTRL */
  360.         scroll = wx;
  361.           }
  362.           else if (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) {    /* SHIFT */
  363.             scroll = x_win_i_width-x_win_i_width/2;
  364.           }
  365.           else {                                /* weder noch */
  366.             scroll = SCROLL_X_NORM_REPEAT;
  367.           }
  368.     }
  369.     else {                                /* *** erstmalig *** */
  370.           if (qualifier & (IEQUALIFIER_LALT | IEQUALIFIER_RALT)) {        /* ALT */
  371.         scroll = SCROLL_X_ALT;
  372.           }
  373.           else if (qualifier & IEQUALIFIER_CONTROL) {                /* CTRL */
  374.         scroll = wx;
  375.           }
  376.           else if (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) {    /* SHIFT */
  377.             scroll = x_win_i_width-x_win_i_width/2;
  378.           }
  379.           else {                                /* weder noch */
  380.             scroll = SCROLL_X_NORM;
  381.           }
  382.     }
  383.  
  384.     if (code == CURSORLEFT) {
  385.       scroll = -scroll;
  386.     }
  387.  
  388.     *dx = scroll;
  389.     ret = 0;
  390.     
  391.     break;
  392.  
  393.  
  394. #ifdef OLDIEOLD
  395.     if (qualifier & IEQUALIFIER_REPEAT) {
  396.       if (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) {
  397.         scroll = SCROLL_X_SHIFT_R;
  398.       }
  399.       else if (qualifier & (IEQUALIFIER_LALT | IEQUALIFIER_RALT)) {
  400.         scroll = wx;
  401.       }
  402.       else scroll = SCROLL_X_NORM_R;
  403.     }
  404.     else {
  405.       if (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) {
  406.         scroll = SCROLL_X_SHIFT;
  407.       }
  408.       else if (qualifier & (IEQUALIFIER_LALT | IEQUALIFIER_RALT)) {
  409.         scroll = wx;
  410.       }
  411.       else scroll = SCROLL_X_NORM;
  412.     }
  413.     if (code == CURSORLEFT) {
  414.       scroll = -scroll;
  415.     }
  416.     *dx = scroll;
  417.     ret = 0;
  418.  
  419.         break;
  420. #endif
  421.  
  422.  
  423.     case 95:                /* HELP */
  424.         if (is_amigaguide) {
  425.           HelpKeyAGuide(qualifier & IEQUALIFIER_CONTROL);
  426.         }
  427.         else {
  428.             AboutWinUp();        /* File am_requ.c */
  429.         }
  430.     break;
  431.  
  432.     default:
  433.  
  434.       // if (isascii(c)) c = toupper(c);
  435.  
  436.       switch (c) {
  437.         case 'x':
  438.          TogglePrefWin();
  439.          break;
  440.     case 'm':
  441.          ToggleMessWin(MouseX, MouseY);
  442.          break;
  443.     case 'M':
  444.          SetupMargin();
  445.          break;
  446.     case 'r':
  447.     case 'R':
  448.          execute_script(show_state.command, (c == 'R'));
  449.          break;
  450.     case 'l':
  451.          if (is_dvif) {
  452.            DrawDottedBorder(TRUE, FALSE);    /* toggle, !no_refresh */
  453.          }
  454.          else {
  455.            Message(MSG_NO_DVI_FILE);
  456.            beep();
  457.          }
  458.          break;
  459.         case 27:                        /* ESC */
  460.              if (is_escex) {
  461.                if (real_prog_end()) {
  462.                    Enable_Abort = 0;        /* am Ende nicht noch ein ^C */
  463.                  ret = 10;
  464.                }
  465.          }
  466.          else {
  467.            if (is_ownscr) {
  468.              ScreenToBack(screen);        /* Screen weg!! */
  469.            }
  470.            else {
  471.              WindowToBack(win2);
  472.            }
  473.             make_old_active();
  474.          }
  475.              break;
  476.         case 13:                /* RET - ENTER */
  477.         case '+':
  478.          if (qualifier & IEQUALIFIER_REPEAT) {
  479.            break;
  480.          }
  481.  
  482.          if (is_print) {
  483.            ret = 42;
  484.          }
  485.          else {
  486.                if ((!(qualifier & ~(IEQUALIFIER_CONTROL)) && code == 68) ||
  487.                (!(qualifier & ~(IEQUALIFIER_NUMERICPAD | IEQUALIFIER_CONTROL)) && code == 67) ||
  488.             (!(qualifier & ~(IEQUALIFIER_NUMERICPAD | IEQUALIFIER_CONTROL)) && c == '+')) {
  489.              help = clear_counter(0);
  490.              if (help <= 0) {
  491.            if (qualifier & IEQUALIFIER_CONTROL) {
  492.                  set_tusephy;        /* temp use of physical number */
  493.                }
  494.                    ret = 1;
  495.              }
  496.              else {
  497.                ret = current_page + help;
  498.                *is_p_nr = 1;
  499.              }
  500.                }
  501.                 else {
  502.           if (qualifier & IEQUALIFIER_CONTROL) {
  503.                set_tusephy;        /* temp use of physical number */
  504.              }
  505.                  ret = 2;
  506.                }
  507.            if (code == 67 || c == '+') {
  508.           set_jmpup;
  509.            }
  510.              }
  511.              break;
  512.         case ' ':                /* SPACE */
  513.              if (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) {
  514.            if (!is_print && static_y_Koo == 0) {    /* selbe wie bei 'b' */
  515.          set_jmpdown;
  516.          ret = -1;    /* prev page */
  517.            }
  518.            else {
  519.               *dy = -x_win_i_height+x_win_i_height/4;
  520.          ret = 0;
  521.            }
  522.              }
  523.              else {
  524.            if (!is_print && static_y_Koo+x_win_i_height==wy) {
  525.          set_jmpup;
  526.          ret = 1;    /* next page */
  527.            }
  528.            else {
  529.              *dy = x_win_i_height-x_win_i_height/4;
  530.              ret = 0;
  531.            }
  532.          }
  533.          break;
  534.         case 'b':                /* b ... back */
  535.          if (!is_print && static_y_Koo == 0) {
  536.         set_jmpdown;
  537.         ret = -1;    /* prev page */
  538.          }
  539.          else {
  540.             *dy = -x_win_i_height+x_win_i_height/4;
  541.         ret = 0;
  542.          }
  543.          break;
  544.         case 8:                   /* Backspace */
  545.         case '-':                        /* - Zehnerfeld */
  546.          if (qualifier & IEQUALIFIER_REPEAT) {
  547.            break;
  548.          }
  549.  
  550.          if (is_print) {
  551.            ret = 42;
  552.          }
  553.          else {
  554.            if (is_pscro) {
  555. #if 0
  556.              blatt_ok_gad(&page);
  557.          if (page != 0L) {
  558.            ret = page;
  559.            *is_p_nr = 1;
  560.          }
  561. #endif
  562.            }
  563.            else {
  564.              if ((!(qualifier & ~(IEQUALIFIER_CONTROL)) && (code == 11 || code == 65)) ||
  565.                  (!(qualifier & ~(IEQUALIFIER_NUMERICPAD | IEQUALIFIER_CONTROL)) && code == 74) ||
  566.              (!(qualifier & ~(IEQUALIFIER_CONTROL)) && c == '-')) {
  567.                help = clear_counter(0);
  568.                if (help <= 0) {
  569.                if (qualifier & IEQUALIFIER_CONTROL) {
  570.                    set_tusephy;        /* temp use of physical number */
  571.                  }
  572.                  ret = -1;
  573.                }
  574.                else {
  575.                  ret = current_page - help;
  576.                  *is_p_nr = 1;
  577.                }
  578.              }
  579.              else {
  580.            if (qualifier & IEQUALIFIER_CONTROL) {
  581.                  set_tusephy;        /* temp use of physical number */
  582.                }
  583.                ret = -2;
  584.              }
  585.              if (c == '-') {
  586.            set_jmpdown;
  587.              }
  588.            }
  589.          }
  590.          break;
  591.  
  592.         case 's':                /* s ... search */
  593.              ret = StartSearch(SO_OpenSearchWin);
  594.              break;
  595.  
  596.         case '1':                    /* ! ... newcli */
  597.         case '!':
  598.              if (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) {
  599.                make_newcli(screen);
  600.              }
  601.              break;
  602.         case 'p':                /* p ... page on printer  */
  603.          if (is_dvif) {
  604.              printing();
  605.          }
  606.          else {
  607.            Message(MSG_NO_DVI_FILE);
  608.            beep();
  609.            }
  610.              break;
  611.         case 'c':                /* c ... Counter loeschen */
  612.          if (qualifier & (IEQUALIFIER_LCOMMAND | IEQUALIFIER_RCOMMAND)) {
  613.            show_col_request();          /* Ac .. change color     */
  614.          }
  615.          else {
  616.            (void)clear_counter(0);
  617.          }
  618.              break ;
  619.         case '.':                /* . numeric-pad and ...  */
  620.         case 'g':                /* g ... gehe zur Seite NR  */
  621.          if (is_print) {
  622.            ret = 42;
  623.          }
  624.          else {
  625.            if (code != 60 || (qualifier & IEQUALIFIER_NUMERICPAD)) {
  626.          if (qualifier & IEQUALIFIER_CONTROL) {
  627.                set_tusephy;        /* temp use of physical number */
  628.              }
  629.              if (is_pscro) {
  630. #if 0
  631.            blatt_ok_gad(&page);
  632.            if (page != 0L) {
  633.              ret = page;
  634.              *is_p_nr = 1;
  635.            }
  636. #endif
  637.          }
  638.          else {
  639.                help = clear_counter(0);
  640.                if (help != -1) {
  641.                  ret = help;
  642.                  *is_p_nr = 1;
  643.                }
  644.              }
  645.            }
  646.          }
  647.              break;
  648.         case 'i':                /* i ... vert. Aufl. aendern */
  649.          if (is_show) {
  650.         show_full_page(FALSE);  /* show-Modus ausschalten */
  651.          }
  652.          change_resolution();
  653.              break;
  654.         case 'd':                 /* d ... WB-Screen her!! */
  655.          (void)WBenchToFront();
  656.          make_old_active();
  657.          break;
  658.         case 'f':                /* f ... show full page */
  659.           if (is_dvif) {
  660.            show_full_page(FALSE);
  661.          }
  662.          else {            /* noch kein DVI-File geladen */
  663.            Message(MSG_NO_DVI_FILE);
  664.            beep();
  665.          }
  666.              break;
  667.         case 'o':                /* o ... change Gadgets */
  668.          if (qualifier & (IEQUALIFIER_LCOMMAND | IEQUALIFIER_RCOMMAND)) {
  669.                if (is_print) {
  670.                  ret = 42;
  671.                }
  672.                else {
  673.              ret = LoadFileReq();
  674.            }
  675.          }
  676.          else {
  677.            if (!is_show) {
  678.              toggle_scrollbar(FALSE);
  679.            }
  680.          }
  681.              break;
  682.     case '\\':                /* CTRL-\ Programm Ende */
  683.          if (qualifier & IEQUALIFIER_CONTROL) {
  684.                if (real_prog_end()) {
  685.                    Enable_Abort = 0;        /* am Ende nicht noch ein ^C */
  686.                  ret = 10;            /* QUIT */
  687.                }
  688.          }
  689.          break;
  690.         case 'q':                /* q ... Quit */
  691.          if (qualifier & (IEQUALIFIER_LCOMMAND | IEQUALIFIER_RCOMMAND)) {
  692.                if (real_prog_end()) {
  693.                    Enable_Abort = 0;        /* am Ende nicht noch ein ^C */
  694.                  ret = 10;            /* QUIT */
  695.                }
  696.          }
  697.              break;
  698.         case 'w':                /* w ... write configuration */
  699.          if (qualifier & (IEQUALIFIER_LCOMMAND | IEQUALIFIER_RCOMMAND)) {
  700.            write_config_file();
  701.          }
  702.              break;
  703.         case 'a':                /* a ... Again- File neu einlesen */
  704.         case 1  : /* ^a */
  705.          if (qualifier & (IEQUALIFIER_LCOMMAND | IEQUALIFIER_RCOMMAND)) {
  706.            ToggleAutoAgain();
  707.          }
  708.          else {
  709.                if (is_print) {
  710.                  ret = 42;
  711.                }
  712.                else {
  713.                  if (access(filename,4) == 0) {
  714.                    char *p = strrchr(filename,'.');
  715.                    if (p != NULL && stricmp(p,".dvi") == 0) {
  716.            if (qualifier & IEQUALIFIER_CONTROL) {
  717.                    set_tusephy;        /* temp use of physical number */
  718.                  }
  719.                  OpenNewDVI(filename, FALSE);
  720.                  ret = 3;        /* neues File, Name nicht geaendert. */
  721.                }
  722.                else {
  723.                  Message(MSG_NO_DVI_FILE);
  724.                  beep();
  725.                }
  726.              }
  727.              else {            /* noch kein DVI-File geladen */
  728.                Message(MSG_CANT_ACCESS_FILE,filename);
  729.                beep();
  730.              }
  731.            }
  732.          }
  733.          break;
  734.         case 'y':                /* y ... umschalten phy <-> log Seitennummeren */
  735.              toggle_usephy;
  736.          write_status();
  737.          Set_PgGadPageCur();
  738.              break;
  739. #if defined(MYDEBUG)
  740.     case 'D':
  741. #if defined(MWDEBUG)
  742.          MWReport("MemoryLib Report", MWR_SUM);
  743. #endif
  744.          D(bug("ShowDVI: alw: %ld, bmfast: %ld, bmcpu: %ld, scroll: %ld\n",
  745.             is_alwbmfast, is_bmfast, is_bmcpu, is_scrollras));
  746.          break;
  747. #endif
  748.         default: ret = 5;            /* no action */
  749.              break;
  750.       } /* end switch (c) */
  751.    }
  752.   if (ret == 42 && *is_p_nr != 1) {
  753.     Message(MSG_NOT_WHILE_PRINTING);
  754.     beep();
  755.     ret = 5;
  756.   }
  757.   return (ret);
  758. }
  759.  
  760. long work_with_raw_key(unsigned int Code, unsigned int Qualifier,
  761.              WORD MouseX, WORD MouseY)
  762. {
  763.   long ret, ex = 0;
  764.   int dx, dy;
  765.   int is_page_number;
  766.  
  767.   if (!is_osmenu) {
  768.     /* dieses hin/weg ist, damit die Short-Cuts funktionieren */
  769.     if (Code == 103) {
  770.       /* Rechte AMIGA Taste nach unten */
  771.       MyModifyIDCMP(0, IDCMP_MENUVERIFY);        /* weg mit dem MENUVERIFY */
  772.       return 0;
  773.     }
  774.     if (Code == 103+128) {
  775.       /* Rechte AMIGA Taste nach oben */
  776.       MyModifyIDCMP(IDCMP_MENUVERIFY, 0);        /* MENUVERIFY wieder hin */
  777.       /* des return kommt gleich danach */
  778.     }
  779.   }
  780.  
  781.   if (Code&128) {        /* Taste hoch */
  782.     return 0;
  783.   }
  784.   ret = tast(&dx, &dy, Code, Qualifier, &is_page_number, MouseX, MouseY);
  785.   if (is_page_number == 1) {
  786.     ex = ret;
  787.     if (ex == 0) ex = -1;        /* special hack for page number 0 */
  788.   }
  789.   else {
  790.     if ((ret != 0)&&(ret != 5)) {
  791.       ex = KOMM+(long)ret;         
  792.                 /* ret ==  0 normal        */
  793.                 /* ret ==  5 no action     */
  794.                 /* ret == -1 Seite zurueck */
  795.                 /* ret ==  1 Seite vor     */
  796.                 /* ret == -2 Textanfang    */
  797.                 /* ret ==  2 Textende      */
  798.                 /* ret == 10 Programmende  */
  799.                 /* ret ==  3 again DVI-F.  */
  800.                 /* ret ==  4 neues DVI-F.  */
  801.                 /* ret ==  6 search mode   */
  802.     }         
  803.     else {                             
  804.       if (ret == 0) {                 
  805.     if (is_gadg) {
  806.       window_plus_sbar_move(dx,dy);
  807.     }        /* setzt auch die Scrollbars richtig */
  808.     else {
  809.       window_move(dx,dy);
  810.     }
  811.       }
  812.     }
  813.   }
  814.   
  815.   return ex;
  816. }
  817.  
  818.