home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / textplus_465.lzh / TextPlus / SrcE.lzh / SrcE / miscE.c < prev    next >
C/C++ Source or Header  |  1990-08-06  |  15KB  |  530 lines

  1. /*
  2.  *       miscE.c             © by Martin Steppler
  3.  */
  4.  
  5. struct Device   *ConsoleDevice = NULL;
  6. struct IOStdReq ConsoleMsg;
  7.  
  8. extern void ReleaseFileSelect();
  9. char *BriefText[] = {
  10.    "LETTER", "ASCII ", "AUT", "   "
  11. };
  12.  
  13. #define OFFSET     431
  14. #define KLOTZ      10240
  15.  
  16. DeadKeyConvert(Message, KeyBuffer, BufferSize, KeyMap)
  17. struct IntuiMessage *Message;
  18. UBYTE *KeyBuffer;
  19. int BufferSize;
  20. struct KeyMap *KeyMap;
  21. {
  22.    static struct InputEvent InputEvent =
  23.    {
  24.       NULL,             /* struct InputEvent *ie_NextEvent; */
  25.       IECLASS_RAWKEY,   /* UBYTE ie_Class; */
  26.       0,                /* UBYTE ie_SubClass; */
  27.       0,                /* UWORD ie_Code; */
  28.       0                 /* UWORD ie_Qualifier; */
  29.                         /* union */
  30.                         /* { */
  31.                         /*    struct */
  32.                         /*    { */
  33.                         /*       WORD ie_x; */
  34.                         /*       WORD ie_y; */
  35.                         /*    } ie_xy; */
  36.                         /*    APTR ie_addr; */
  37.                         /* } ie_position; */
  38.                         /* struct timeval ie_TimeStamp; */
  39.    };
  40.  
  41.    if (Message->Class != RAWKEY)          return(-2);
  42.    if (Message->Code & IECODE_UP_PREFIX)  return(0);
  43.  
  44.    InputEvent.ie_Code = Message->Code;
  45.    InputEvent.ie_Qualifier = Message->Qualifier;
  46.    InputEvent.ie_position.ie_addr = (APTR)*(Message->IAddress);
  47.  
  48.    return(RawKeyConvert(&InputEvent, KeyBuffer, BufferSize, KeyMap));
  49. }
  50.  
  51. OpenReadConsole()
  52. {
  53.    if (OpenDevice("console.device", -1L, &ConsoleMsg, 0) != 0)
  54.       return(-1);
  55.    ConsoleDevice = (struct Device *)ConsoleMsg.io_Device;
  56.    return(0);
  57. }
  58.  
  59. Meldung()
  60. {
  61.    UBYTE string[80];
  62.  
  63.    StilAus();
  64.    strcpy(string, "                                                     ");
  65.    Move(RP, 6, 20);
  66.    Text(RP, string, strlen(string));
  67.    Move(RP, 6, 20);
  68.    Text(RP, buffer, strlen(buffer));
  69.    sprintf(buffer, "PGE %-3d LIN %-3d COL %-3d", s+1, z+1, x);
  70.    Move(RP, OFFSET, 20);
  71.    Text(RP, buffer, strlen(buffer));
  72.    if(ein==TRUE) ein=FALSE; else ein=TRUE;
  73.    StilAn();
  74.    Einfuegen();
  75. }
  76. Brief()
  77. {
  78.    br++;
  79.    if(br==2) br=0;
  80.    ZSDisplay();
  81.    MenueUeberwachung(3);
  82. }
  83. Auto()
  84. {
  85.    au++; if(au==2) au=0; ZSDisplay();
  86.    MenueUeberwachung(3);
  87. }
  88. Backup()
  89. {
  90.    if(++bak==2) bak=0; MenueUeberwachung(3);
  91.    if(bak) sprintf(buffer, "Backup mode switched ON!");
  92.    else    sprintf(buffer, "Backup mode switched OFF!");
  93. }
  94. NamenSetzen(FName)
  95. UBYTE *FName;
  96. {
  97.    UBYTE string[80];
  98.  
  99.    StilAus();
  100.    strcpy(string, "                                                     ");
  101.    Move(RP, 6, 9);
  102.    Text(RP, string, strlen(string));
  103.    Move(RP, 6, 9);
  104.    Text(RP, FName, strlen(FName));
  105.    strcpy(titel, FName);
  106.    StilAn();
  107. }
  108. Einfuegen()
  109. {
  110.    StilAus();
  111.    if(ein==FALSE) {
  112.       sprintf(buffer, "INS %s %s LN %-5d", BriefText[au+2],
  113.          BriefText[br], s*(SEITE+1)+z+1);
  114.       ein = TRUE;
  115.    }
  116.    else {
  117.       sprintf(buffer, "    %s %s LN %-5d", BriefText[au+2],
  118.          BriefText[br],s*(SEITE+1)+z+1);
  119.       ein = FALSE;
  120.    }
  121.    Move(RP, OFFSET, 9);
  122.    Text(RP, buffer, strlen(buffer));
  123.    StilAn();
  124.    MenueUeberwachung(3);
  125. }
  126. LadeConfig(fn)
  127. char *fn;
  128. {
  129.    struct FileHandle *handle;
  130.    int ende = FALSE, x1, ln, trans, zaehler=0, alt, weiter=FALSE, durch=FALSE;
  131.    UBYTE buf[256];
  132.  
  133.    if(!(handle=Open(fn,MODE_OLDFILE))) return(FALSE);
  134.    FOREVER {
  135.       if(ende) break;
  136.       if((ln = Read(handle,buffer,GROESSE))<GROESSE) {
  137.          Close(handle); ende=TRUE;
  138.       }
  139.       trans = ln; ln=0;
  140. hops: if(weiter) {
  141.          FOREVER {
  142.             if(ln==trans) break;
  143.             if(buffer[ln++] == LF) { weiter=FALSE; break; }
  144.          }
  145.          if(ln==trans) continue;
  146.       }
  147.       if(zaehler<3 || zaehler==9) { zaehler++; weiter=TRUE; goto hops; }
  148.       if(zaehler<=18  && !durch ) x1=0;
  149.       alt=zaehler;
  150.       do {
  151.          if((buf[x1++] = buffer[ln++]) == 32) {
  152.             buf[--x1] = EOS; zaehler++;
  153.          }
  154.       } while(ln<trans && zaehler==alt);
  155.       durch=FALSE;
  156.       if(zaehler>alt) {
  157.          switch(zaehler) {
  158.             case 4:
  159.                if((MAX=atoin(buf))>ABSMAX) MAX=ABSMAX; else if(MAX<10) MAX=10;
  160.                break;                    /* Textbreite */
  161.             case 5:
  162.                if((SEITE=atoin(buf)-1)>71) SEITE=71; else if(SEITE<9) SEITE=9;
  163.                break;                    /* Seitenlänge */
  164.             case 6:
  165.                ein = (atoin(buf)) ? FALSE:TRUE;
  166.                break;                    /* Einfügen Modus */
  167.             case 7:
  168.                br  = (atoin(buf)) ? FALSE:TRUE;
  169.                break;                    /* Brief Modus */
  170.             case 8:
  171.                au  = (atoin(buf)) ? FALSE:TRUE;
  172.                break;                    /* Auto-Trenn Modus */
  173.             case 9:
  174.                if((schrift=atoin(buf))<0 || schrift>3) schrift=1;
  175.                break;                    /* Druck Modus */
  176.             case 11:
  177.                if((zg3=atoin(buf))<0) zg3=0;
  178.                break;                    /* linker Rand */
  179.             case 12:
  180.                if((zg4=atoin(buf))<zg3) zg4=zg3+1;
  181.                break;                    /* rechter Rand */
  182.             case 13:
  183.                if((zg5=atoin(buf))>72) zg5=72; else if(zg5<10) zg5=10;
  184.                break;                    /* Papierlänge */
  185.             case 14:
  186.                znum  = (atoin(buf)) ? 4:5;
  187.                break;                    /* Zeilennummerierung */
  188.             case 15:
  189.                snum  = (atoin(buf)) ? FALSE:TRUE;
  190.                break;                    /* Seitennummerierung */
  191.             case 16:
  192.                bak   = (atoin(buf)) ? TRUE:FALSE;
  193.                break;                    /* Backup */
  194.             case 17:
  195.                iconx = atoin(buf);
  196.                break;                    /* Iconify x-Koordinate */
  197.             case 18:
  198.                icony = atoin(buf);
  199.                break;                    /* Iconify y-Koordinate */
  200.             case 22:
  201.                if(strlen(buf)==77) strcpy(tab,buf);
  202.                break;                    /* Tabulator */
  203.          }
  204.          weiter=TRUE; goto hops;
  205.       }
  206.       else durch=TRUE;
  207.    }
  208.    return(TRUE);
  209. }
  210. Laden(fn)      /* fn = Filename */
  211. char *fn;
  212. {
  213.    struct FileHandle *handle;
  214.    register int ln, s1=se, x1=0, z1=ze;
  215.    int trans = KLOTZ-1, zaehler=0, flaggy=FALSE, st=0, txp=FALSE;
  216.    UBYTE *Buf;
  217.  
  218.    if((ln=strlen(fn))>=4) {     /* File im Briefformat <- `.txp` - Endung */
  219.       if((fn[ln-1]==80||fn[ln-1]==112)&&(fn[ln-2]==120||fn[ln-2]==88)&&
  220.          (fn[ln-3]==84||fn[ln-3]==116)&&fn[ln-4]==46) txp=TRUE;
  221.    }
  222.    if(!br && !txp) { strcat(fn, ".txp"); txp=TRUE; }
  223.    if(!(handle=Open(fn,MODE_OLDFILE)))
  224.    {
  225.       sprintf(buffer, "Can't open %s!", fn); strcpy(str,buffer);
  226.       Meldung();
  227.       return(FALSE);
  228.    }
  229.    if(!(Buf = (UBYTE *)AllocMem(KLOTZ, MEMF_CLEAR))) {
  230.       Close(handle); return(FALSE);
  231.    }
  232.    FOREVER {
  233.       if((ln = Read(handle,Buf,KLOTZ))<KLOTZ) {
  234.          trans = ln-1;
  235.          if(!ln) {           /* EOF */
  236.             Close(handle);
  237.             break;
  238.          }
  239.       }
  240.       zaehler += trans+1;   /* Textlänge mitzählen */
  241.       ln = 0;
  242. lab1: do {
  243.          if((buffer[x1++] = Buf[ln++]) <=9) {
  244.             if(buffer[x1-1]<9) st++;   /* Steuercode im Text */
  245.             else { x1--;       /* TAB     im Text */
  246.                /* if(x1 & 8) { buffer[x1++] = 32; } */
  247.                if(x1<MAX+st) {
  248.                   do {
  249.                      buffer[x1++] = 32;
  250.                   } while((x1 & 15) && x1<MAX+st);
  251.                }
  252.             }
  253.          }
  254.       } while(x1<MAX+st && Buf[ln-1]!=LF && ln<=trans);
  255.       if(Buf[ln-1]==LF || x1==MAX+st || trans<KLOTZ-1) {
  256.          if(Buf[ln-1]==LF) --x1;
  257.          while(x1 && buffer[x1-1] == 32) x1--; /* Rand-Spaces weg damit    */
  258.          buffer[x1] = EOS;           /* LineFeed oder Zeilenende */
  259.          if(x1==MAX+st) {                      /* LineFeed und  Zeilenende */
  260.             if(ln<KLOTZ) { if(Buf[ln]==LF) ln++; }
  261.          }
  262.          if(!(a[s1] [z1] = (UBYTE *)AllocMem(x1+2, MEMF_CLEAR))) {
  263.            flaggy=TRUE; Close(handle); SpeicherMangel();
  264.            break;   /* Out of memory */
  265.          }
  266.          strcpy(a[s1] [z1], buffer);
  267.          a[s1] [z1] [x1+1] = (txp==TRUE) ? st : 0; /* Steuercodes abspei. */
  268.          if(ln>trans && trans<KLOTZ-1) { Close(handle); break; } /* EOF */
  269.          x1=st=0; z1++;
  270.          if(s1==MAS && z1>sei) {
  271.             z1=sei; flaggy=TRUE; Close(handle);
  272.             break;
  273.          }
  274.          if(z1>SEITE) {
  275.             z1=0;
  276.             if(++s1>MAS) {
  277.                s1=MAS; z1=SEITE; flaggy=TRUE; Close(handle);
  278.                break;
  279.             }
  280.          }
  281.          if(ln>trans) continue;  /* Weiter von disk lesen */
  282.          goto lab1;
  283.       }  /* else Weiter von disk lesen */
  284.    }
  285.    FreeMem(Buf, KLOTZ);
  286.    se = s1; ze = z1;
  287.    if(flaggy == TRUE) {
  288.       if(blo)
  289.          sprintf(buffer, "Out of memory! Block-length: %d!", zaehler);
  290.       else
  291.          sprintf(buffer, "Out of memory! Text-length: %d!",zaehler);
  292.    }
  293.    else {
  294.       if(blo)
  295.          sprintf(str, "Length: %d End of block:", zaehler);
  296.       else
  297.          sprintf(buffer, "Length: %d End: page %d line %d!",
  298.             zaehler, se+1, ze+1);
  299.    }
  300.    if(!blo || flaggy) { strcpy(str, buffer); Meldung(); }
  301.    return(TRUE);
  302. }
  303. XPlus()
  304. {
  305.    if((++x)>MAX) {
  306.       x=MIX; Flagge = TRUE+off; off=0;
  307.       YZPlus();
  308.       Flagge=spe=zpe= FALSE;
  309.    }
  310.    else if(x-MAX1==off) {
  311.       off+=OFF1; SText(); meld=FALSE;
  312.    }
  313. }
  314. YZPlus()
  315. {
  316.    int len=0;
  317.  
  318.    y++;
  319.    if(++z>SEITE) {
  320.       z = 0;
  321.       if(++s>MAS) {
  322.          s=MAS; z=SEITE; y--;
  323.          if(Flagge >= TRUE) x = MAX;
  324.          if(Flagge >  TRUE) off=Flagge-1;
  325.          sprintf(buffer, "%s", FehlerText[2]);
  326.          meld = TRUE;
  327.       }
  328.       if(s>se) {
  329.          s = se; z = ze; y=y-1;
  330.          if(Flagge >= TRUE) x = MAX;
  331.          if(Flagge >  TRUE) off=Flagge-1;
  332.          sprintf(buffer, "%s", FehlerText[1]);
  333.          meld = TRUE;
  334.       }
  335.    }
  336.    if(s==se){
  337.       if(z>ze) {
  338.          z = ze; y-- ;
  339.          if(Flagge >= TRUE) x = MAX;
  340.          if(Flagge >  TRUE) off=Flagge-1;
  341.          sprintf(buffer, "%s", FehlerText[1]);
  342.          meld = TRUE;
  343.       }
  344.    }
  345.    if(Flagge>TRUE && x==MIX) {
  346.       if(y>MAY) y=MAY; Flagge=FALSE; SText(); meld=FALSE;
  347.    }
  348.    if(y>MAY) {
  349.       y = MAY; Hochrollen();
  350.    }
  351.    else if(blo==2) {
  352.       if(BloRel(0)) { y--; if(--z<0) { z=SEITE; s--; } len=1; blo=0; }
  353.       SetAPen(RP, 0); RectFill(RP, 0, y*8-8, RRAND, y*8-1);
  354.       SetAPen(RP, 1);
  355.       Rolling();
  356.       if(len) { y++; blo=2; if(++z>SEITE) { z=0; s++; } }
  357.    }
  358. }
  359. XMinus()
  360. {
  361.    if(--x<MIX) {
  362.       x=MAX;
  363.       if(MAX>=MAX1) off=((MAX-MAX1)/OFF1+1)*OFF1;
  364.       Flagge = TRUE+off;
  365.       YZMinus();
  366.       Flagge=spe=zpe=FALSE;
  367.    }
  368.    else if(x==off) {
  369.       off-=OFF1; SText(); meld=FALSE;
  370.    }
  371. }
  372. YZMinus()
  373. {
  374.    int len=0;
  375.  
  376.    y--;
  377.    if(--z<0) {
  378.       z = SEITE;
  379.       if(--s<0) {
  380.          s=0; z=0;  y=MIY;
  381.          if(Flagge>=TRUE) { x=MIX; off=0; }
  382.          sprintf(buffer,"%s", FehlerText[0]);
  383.          meld = TRUE;
  384.       }
  385.    }
  386.    if(Flagge>TRUE && x==MAX) {
  387.       if(y<MIY) y=MIY; Flagge=FALSE; SText(); meld=FALSE;
  388.    }
  389.    if(y<MIY) {
  390.       y=MIY;
  391.       Runterrollen();
  392.    }
  393.    else if(blo==2) {
  394.       if(BloRel(0)) { y++; if(++z>SEITE) { z=0; s++; } len=1; blo=0; }
  395.       SetAPen(RP, 0); RectFill(RP, 0, y*8-8, RRAND, y*8-1);
  396.       SetAPen(RP, 1);
  397.       Rolling();
  398.       if(len) { y--; blo=2; if(--z<0) { z=SEITE; s--; } }
  399.    }
  400. }
  401.  
  402. TitelZeile()
  403. {
  404.    int h, var;
  405.  
  406.    SetAPen(RP, 1);
  407.    Move(RP, 0, 30);
  408.    Draw(RP, 640, 30);
  409.    for(h = 2; h <= 79; h++) {
  410.       var = (h-1) * 8;
  411.       if(h==10||h==20||h==30||h==40||h==50||h==60||h==70) {
  412.          Move(RP, var, 24);
  413.          Draw(RP, var, 30);
  414.       }
  415.       else {
  416.          if(h==5||h==15||h==25||h==35||h==45||h==55||h==65||h==75) {
  417.             Move(RP, var, 26);
  418.             Draw(RP, var, 30);
  419.          }
  420.          else {
  421.              Move(RP, var, 27);
  422.              Draw(RP, var, 30);
  423.          }
  424.       }
  425.    }
  426. }
  427. Tabulator(ganz,var,yk)
  428. int ganz, var, yk;
  429. {
  430.  
  431.    if(ganz==TRUE) {
  432.       for(var=0; var<=77; var++) {
  433.          if(tab[var]=='1') {
  434.             Move(RP, (var*8)+1, 25); Draw(RP, (var*8)+5, 25);
  435.             Move(RP, (var*8)+3, 26); Draw(RP, (var*8)+3, 28);
  436.          }
  437.       }
  438.    }
  439.    else {
  440.       var = var/8; if(var<0) var=0; if(var>77) var=77;
  441.       if(yk>30 || ganz==2) {
  442.          yk = yk/8+1; if(yk<MIY) yk=MIY; if(yk>MAY) yk=MAY;
  443.          if(ganz!=2) x=var+off+1;
  444.          if(yk>y) {
  445.             for(ganz=y; ganz<yk; ganz++) YZPlus();
  446.          }
  447.          else if(y>yk) {
  448.             for(ganz=y; ganz>yk; ganz--) YZMinus();
  449.          }
  450.          ZSDisplay(); /* y=yk */
  451.       }
  452.       else {
  453.          if(tab[var]=='1') {
  454.             tab[var]='0';
  455.             SetAPen(RP, 0);
  456.             RectFill(RP, (var*8)+1,25, (var*8)+5, 28);
  457.             SetAPen(RP, 1);
  458.          }
  459.          else {
  460.             tab[var]='1';
  461.             Move(RP, (var*8)+1, 25); Draw(RP, (var*8)+5, 25);
  462.             Move(RP, (var*8)+3, 26); Draw(RP, (var*8)+3, 28);
  463.          }
  464.       }
  465.    }
  466. }
  467.  
  468. ZSDisplay()
  469. {
  470.    StilAus();
  471.    sprintf(buffer, "PGE %-3d LIN %-3d COL %-3d", s+1, z+1, x);
  472.    Move(RP, OFFSET, 20);
  473.    Text(RP, buffer, strlen(buffer));
  474.    sprintf(buffer, "                                                     ");
  475.    Move(RP, 6, 20);
  476.    Text(RP, buffer, strlen(buffer));
  477.    if(ein==TRUE) ein=FALSE; else ein=TRUE;
  478.    StilAn();
  479.    Einfuegen();
  480. }
  481.  
  482. Schluss()
  483. {
  484.    register int si, zi;
  485.    int i;
  486.  
  487.    if(se>=0) {
  488.       for(si=0; si<=se; si++) {
  489.          for(zi=0; zi<=SEITE; zi++) {
  490.             FreeMem(a[si] [zi], SL(si,zi)+2);
  491.             if(si==se && zi==ze) break;
  492.         }
  493.       }
  494.    }
  495.    ReleaseFileSelect();
  496.    if(Fenster->MenuStrip && icfy)  ClearMenuStrip(Fenster, &Menus[0]);
  497.    if(Fenster)                     CloseWindow(Fenster);
  498.    if(Scheibe && icfy)             CloseScreen(Scheibe);
  499.    if(ConsoleDevice)               CloseDevice(&ConsoleMsg);
  500.    if(DosBase)                     CloseLibrary(DosBase);
  501.    if(GfxBase)                     CloseLibrary(GfxBase);
  502.    if(IntuitionBase)               CloseLibrary(IntuitionBase);
  503. }
  504. Oeffnen()
  505. {
  506.    if(!(IntuitionBase=(struct IntuitionBase *)
  507.       OpenLibrary("intuition.library",INTUITION_REV)))
  508.       Und_tschuess("Can't open intuition-library!\n");
  509.  
  510.    if(!(GfxBase=(struct GfxBase *)
  511.       OpenLibrary("graphics.library",GRAPHICS_REV)))
  512.       Und_tschuess("Can't open graphics-library!\n");
  513.  
  514.    if(!(DosBase=(struct DosLibrary *) OpenLibrary("dos.library",0)))
  515.       Und_tschuess("Can't open dos-library!\n");
  516.  
  517.    if(OpenReadConsole() != 0)
  518.       Und_tschuess("Can't open console.device!\n");
  519.    return(TRUE);
  520. }
  521. Und_tschuess(bye)
  522. char *bye;
  523. {
  524.    if(DosBase)       CloseLibrary(DosBase);
  525.    if(GfxBase)       CloseLibrary(GfxBase);
  526.    if(IntuitionBase) CloseLibrary(IntuitionBase);
  527.    printf(bye);
  528.    exit(FALSE);
  529. }
  530.