home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / FOXPRO / ME102 / ME.PRG < prev   
Text File  |  1993-05-20  |  8KB  |  317 lines

  1. *******************************************************************************
  2. *
  3. *  ME - MiniEditor / 2.3.92
  4. *
  5. *******************************************************************************
  6. *  Release 1.01 / 31.07.92
  7. *          1.02 / 09.04.93
  8.  
  9.  
  10. #include screen.hdr        && FCO 2.4
  11. #include bits.hdr
  12.  
  13. #include data.hdr
  14. #include colors.hdr
  15. #include io.hdr
  16. #include database.hdr
  17. #include fileio.hdr
  18. #include string.hdr
  19. #include system.hdr
  20. #include keys.hdr
  21. #include error.hdr
  22. #include warn.hdr
  23. #include math.hdr
  24. #include memo.hdr
  25. #include date.hdr
  26. #include tsr.hdr
  27.  
  28. *******************************************************************************
  29. *
  30. *  Defines
  31. *
  32. *******************************************************************************
  33.  
  34. #define vers        "1.02"
  35.  
  36.  
  37. *******************************************************************************
  38. *
  39. *  Database strukture
  40. *
  41. *******************************************************************************
  42.  
  43. DBFDEF ME
  44.         MEMO    text
  45. ENDDEF
  46.  
  47.  
  48. *******************************************************************************
  49. *
  50. *  Global Variables
  51. *
  52. *******************************************************************************
  53.  
  54. VARDEF
  55.     CHAR(80)    temp_path
  56.     CHAR(80)    me_dbf
  57.     UINT    std_color = &blue_light_cyan
  58.     UINT        msg_color = &white_black
  59.     UINT    key_color = &white_red
  60.     UINT    hi_color  = &white_white
  61.     UINT        ax, bx, cx, dx, si, di, bp, ds, es
  62.     FILE        f
  63.     CHAR(128)   datei
  64.     CHAR(128)   dateiname
  65.     CHAR(255)   line
  66.     LOGICAL     insert
  67. ENDDEF
  68.  
  69.  
  70. *******************************************************************************
  71. *
  72. *  Allgemeine Funktionen
  73. *
  74. *******************************************************************************
  75.  
  76.  
  77. *--- Laufzeitfehler ausgeben und Programm korrekt beenden
  78. *
  79. PROCEDURE error_proc
  80.   set color to
  81.   ?? chr(7)
  82.   @ 10, 0 clear to 12, 79
  83.   @ 11, 5 ?? "Laufzeitfehler:",trim(i_str(__errcode))+", "+e_message()
  84.   @ 12, 0
  85.   close all
  86.   cursor_on
  87.   quit
  88. ENDPRO
  89.  
  90. *--- Shift Status anzeigen
  91. *
  92. PROCEDURE shift_status
  93.   PARAMETERS CONST logical x
  94.   VARDEF
  95.     INT r, c, oldcolor
  96.   ENDDEF
  97.   IF lastkey() = &K_INS .or. x
  98.      oldcolor = __color_std
  99.      r = row()
  100.      c = col()
  101.      __color_std = hi_color
  102.      ax = 0x0200
  103.      Interrupt(0x16, ax, bx, cx, dx, si, di, bp, ds, es)
  104.      IF TestBit( ax,7 )
  105.         insert = .t.
  106.         @ 0,65 ?? "Einfg"
  107.         ELSE
  108.              insert = .f.
  109.              @ 0,65 ?? space(5)
  110.      ENDIF
  111.      __color_std = oldcolor
  112.      @ r, c
  113.   ENDIF
  114. ENDPRO
  115.  
  116. *--- Alles Eingaben gehen über diese Routine
  117. *
  118. FUNCTION UINT keyfilter
  119.   VARDEF
  120.     UINT col, row, n
  121.   ENDDEF
  122.   do shift_status with .f.
  123.   ax = 0x0300
  124.   Interrupt(0x10, ax, bx, cx, dx, si, di, bp, ds, es)
  125.   col = dx % 256
  126.   row = dx / 256
  127.   DO CASE
  128.      CASE lastkey() = &K_F1
  129.           save_screen()
  130.           IF exist( trim(temp_path)+"me.hlp" )
  131.              clear
  132.              type( trim(temp_path)+"me.hlp" )
  133.              DO WHILE inkey() = 0
  134.              ENDDO
  135.              ELSE
  136.                   ?? chr(7)
  137.           ENDIF
  138.           restore_area()
  139.           RETURN &K_F1
  140.      CASE lastkey() = &K_TAB
  141.           IF insert
  142.              keyboard( space( 8-( col % 8)))
  143.              ELSE
  144.                   n = 8-( col % 8 )
  145.                   DO while n > 0
  146.                      key_int( &K_RIGHT )
  147.                      n = n - 1
  148.                   ENDDO
  149.           ENDIF
  150.   ENDCASE
  151.   RETURN lastkey()
  152. ENDPRO
  153.  
  154.  
  155. *******************************************************************************
  156. *
  157. *    Function: FCO_MAIN
  158. * Description: Main entry point for program.
  159. *
  160. *
  161. *******************************************************************************
  162.  
  163. PROCEDURE FCO_main
  164.   PARAMETERS CONST char(128) cmd_line
  165.  
  166.   SET SCOREBOARD OFF
  167.   SET MESSAGE TO 24
  168.   SET INTENSITY ON
  169.   SET EXACT OFF
  170.   SET DATE GERMAN
  171.  
  172.   *--- MemoBuffer setzen
  173.   __memo_max = 32768
  174.  
  175.   *--- Hilfe mit F1, alle Eingaben über keyfilter
  176.   ON KEY DO keyfilter
  177.  
  178.   *---setup error procedure
  179.   ON ERROR DO error_proc
  180.  
  181.   *--- create path from current directory
  182.   temp_path = chr( curdrive() + 'A' ) + ":" +  curdir( 0 )
  183.   IF right( temp_path, 1 ) <> "\"
  184.      *--- add ending backslash
  185.      temp_path = temp_path + "\"
  186.   ENDIF
  187.   me_dbf = temp_path + "ME.DBF"
  188.  
  189.   *--- Farben setzen
  190.   IF .NOT. iscolor() .OR. "/mono" $ lower( cmd_line )
  191.      msg_color = &white_black
  192.      std_color = &black_white
  193.      key_color = &white_dark_grey
  194.      hi_color  = &white_black
  195.   ENDIF
  196.  
  197.   IF "/mono" $ lower( cmd_line )
  198.      datei = AllTrim( stuff( cmd_line, at( "/mono", lower( cmd_line )), 5, "" ))
  199.      ELSE
  200.           datei = AllTrim( cmd_line )
  201.   ENDIF
  202.  
  203.   DO CASE
  204.      case len( datei ) = 0
  205.           ? "MiniEditor v"+&vers
  206.           ? chr(7)+"Syntax: ME [Laufwerk:]Dateiname [/mono]"
  207.           delay(1)
  208.           quit
  209.      case filesize( datei ) > __memo_max
  210.           ? chr(7)+"Datei darf maximal",;
  211.             trim( i_str( __memo_max )),"Byte groß sein"
  212.           delay(1)
  213.           quit
  214.   ENDCASE
  215.  
  216.   *--- Dateiname ohne Extension sichern
  217.   dateiname = left( datei, at( ".", datei ) -1 )
  218.       
  219.   *--- Datenbank neu erzeugen
  220.   IF exist( me_dbf )
  221.      erase "me.dbf"
  222.      erase "me.dbt"
  223.   ENDIF
  224.   BUILD me_dbf FROM ALIAS me
  225.   use me_dbf alias me
  226.   append blank
  227.  
  228.   __color_std = std_color
  229.   clear
  230.  
  231.   __color_std = msg_color
  232.   __color_enhcd = msg_color    && Hintergrund auch setzen
  233.   @ 0, 0 clear to 0,79
  234.   @ 0, 1 ?? "ME v"+&vers,"(c) 1993 by Alfred Klich"
  235.   @ 0,38 ?? "["+datei+"]"
  236.   __color_std = msg_color
  237.   @24, 0 clear to 24,79
  238.   @24, 1 ?? "   = Hilfe │        = speichern + Ende │     = Abbruch"
  239.   __color_std = key_color   
  240.   @24, 1 ?? "F1"
  241.   @24,14 ?? "Ctrl-W"
  242.   @24,42 ?? "ESC"
  243.  
  244.   __color_std = std_color
  245.  
  246.   *--- Status und Cursor anzeigen
  247.   DO shift_status with .t.
  248.  
  249.   *--- Wenn Datei vorhanden, Text in Memofeld laden
  250.   *
  251.   IF exist( datei )
  252.      f_open( f, datei, &F_READ, &F_TEXT )
  253.      m_open( me->text, &MO_CREATE )
  254.      f_getln( f, line )                  && 1. Zeile übergehen
  255.      m_put( me->text, line )
  256.      DO WHILE .not. f_eof( f )
  257.         f_getln( f, line )
  258.         *--- <tabs> durch <space> ersetzen
  259.         DO WHILE .T.
  260.            IF at( chr( 9 ), line ) > 0
  261.               line = stuff( line, at( chr( 9 ), line ), 1,;
  262.                             space( 9 - at( chr( 9 ), line ) % 8 ))
  263.               ELSE
  264.                    exit
  265.            ENDIF
  266.         ENDDO
  267.         m_putln( me->text, line )
  268.      ENDDO
  269.      f_close( f )
  270.      m_close( me->text )
  271.      *--- .TMP-Datei erstellen
  272.      copy file datei to dateiname + ".TMP" 
  273.   ENDIF
  274.  
  275.   *--- Text im Memofeld editieren
  276.   *
  277.   m_edit( me->text, 1, 0, 23, 79, .F. )
  278.  
  279.   *--- Text wieder in Datei zurückschreiben
  280.   *
  281.   IF lastkey() <> &K_ESC
  282.      m_open( me->text, &MO_READ )
  283.      f_open( f, datei, &F_CREATE, &F_TEXT )
  284.      m_getln( me->text, line )
  285.      f_put( f, line )
  286.      DO WHILE .not. m_eof( me->text )
  287.         m_getln( me->text, line )
  288.         IF IsEmpty( line )
  289.            line = " "
  290.         ENDIF  
  291.         f_putln( f, line )
  292.      ENDDO
  293.      m_close( me->text )
  294.      f_close( f )
  295.      *--- .TMP in .BAK-Datei umbenennen
  296.      IF exist( dateiname + ".BAK" ) 
  297.         erase( dateiname + ".BAK" )
  298.      ENDIF  
  299.      IF exist( dateiname + ".TMP" )
  300.         rename( dateiname + ".TMP" ) to ( dateiname + ".BAK" ) 
  301.      ENDIF
  302.      ELSE
  303.           *--- .TMP-Datei löschen
  304.           IF exist( dateiname + ".TMP" )
  305.              erase ( dateiname + ".TMP" )
  306.           ENDIF
  307.   ENDIF
  308.  
  309.   *--- Programm beenden
  310.   *
  311.   close all
  312.   set color to
  313.   clear
  314.   quit
  315.  
  316. ENDPRO
  317.