home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 3 / FREEWARE.BIN / towns_os / wink_kai / wink.c < prev    next >
Text File  |  1980-01-02  |  7KB  |  339 lines

  1. /************************************************************
  2.  
  3.     FM-TOWNS Text Screen Editer Program
  4.  
  5.     1989.7.27   v1.00   Make By Ken
  6.  
  7. ************************************************************/
  8. #include    <stdio.h>
  9. #include    <stdlib.h>
  10. #include    <setjmp.h>
  11. #include    <string.h>
  12. #define MAIN
  13. #include    "defs.h"
  14.  
  15. #ifdef    FMR70
  16. #include    <signal.h>
  17. #endif
  18.  
  19. #ifdef  TOWNS
  20. #include    <egb.h>
  21. #include    <fmc.h>
  22. #include    <snd.h>
  23. #include    "oaklib.h"
  24. #define    unlink(f) remove(f)
  25.  
  26. #define BUFF_SIZE (66000)                /* customaized by YAMA */
  27.  
  28. #endif
  29.  
  30. extern void wrtstr();
  31. extern void Dsp_ins_mode();
  32. extern void Dsp_free();
  33. extern void Ins_buf();
  34. extern void Cut_buf();
  35. extern int  Dsp_init();
  36. extern int  Bfp_init();
  37. extern void Set_vram();
  38. extern void Dsp_vram();
  39. extern BOOL edit();
  40. extern int  Del_wind();
  41. extern void Bfp_end();
  42. extern void RSB_end();
  43. extern void putstr();
  44. extern void putsys();
  45. extern void putmode();
  46. extern int  modeW;
  47. extern void Dmy_form();
  48. extern void Del_buf();
  49. extern void Auto_log_init();
  50. extern void CD_endof();
  51. extern int ML_Start( char * ,int , char * );    /* customaized by YAMA */
  52. extern int ML_End();                            /* customaized by YAMA */
  53. extern char buff[];                                /* customaized by YAMA */
  54.  
  55. extern UCHAR vram[];
  56. extern char  *SPCSTR;
  57. extern char  *Auto_log_file;
  58.  
  59.     char     *work;
  60.     char    *swork;
  61.     jmp_buf mark;
  62.     char    *file_name=NULL;
  63.     char    *Tmp_device_name=NULL;
  64.  
  65. static BOOL    old_wrt_flg=ERR;
  66. static char     tmp_name[160];
  67. static int    Back_up = FALSE;
  68. static int    Apend_Z = FALSE;
  69.  
  70. void    Start_Msg()
  71. {
  72.     static char *msg[]={
  73.     "           WINK @ー            ",
  74.     "   Multi Screen Text Editor   ",
  75.     "  WINK 改 [ver1.00.00]  ",
  76.     "  Copyright (c) 1989 By FFMT  ",
  77.     "    Created by K.Miyazaki     ",
  78.     "       thanks to RED++        ",
  79.     "  customaized by  N.Yamazaki  ",
  80.     NULL
  81.     };
  82.     int     i;
  83.     char    tmp[160];
  84.  
  85.     Dmy_form(tmp,30,0x98,0x95,0x99); 
  86.     wrtstr(tmp,20,9,0x07);
  87.     Dmy_form(tmp,30,0x96,0x20,0x96); 
  88.     for ( i = 0 ; msg[i] != NULL ; i++ ) {
  89.         wrtstr(tmp,20,10+i,0x07);
  90.         wrtstr(msg[i],21,10+i,i == 0 ? 0x14 : 0x07);
  91.     }
  92.     Dmy_form(tmp,30,0x9A,0x95,0x9B); 
  93.     wrtstr(tmp,20,16,0x07);
  94.     wrtstr("WINK",22,12,0x16);
  95.     wrtstr(" 改 ",30,12,0x03);
  96. }
  97. void    Gra_init()
  98. {
  99. #ifdef    TOWNS
  100.     work = (char *)malloc(2048);
  101.     memset(work,0,2048);
  102.     swork =(char *)malloc(16384);        /* customaized by YAMA */
  103.     memset(swork,0,16384);            /* customaized by YAMA */
  104.     EGB_init(work,2048);
  105.     EGB_resolution(work, 0, 3);
  106.     EGB_resolution(work, 1, 3);
  107.     EGB_displayPage(work, 0, 3);
  108.     EGB_pen(work,0);
  109.     EGB_penSize(work,1);
  110.     SND_init(swork);                /* customaized by YAMA */
  111.     SND_elevol_init();
  112.     SND_elevol_mute(0x33);
  113.     SND_elevol_set(1,64,64);
  114.     ML_Start(buff,BUFF_SIZE,swork);        /* customaized by YAMA */
  115. #endif
  116. }
  117. void    Dsp_file_name()
  118. {
  119.     char    tmp[160];
  120.  
  121.     memset(tmp,' ',60); tmp[60] = '\0';
  122.     wrtstr(tmp,0,1,0x1F);
  123.     if ( file_name != NULL ) {
  124.     sprintf(tmp," %-12s ",file_name);
  125.     wrtstr(tmp,0,1,0x14);
  126.     } else
  127.     wrtstr("  [Not File]  ",1,1,0x1F);
  128. }
  129. void    Dsp_wrt_flg()
  130. {
  131.     if ( Wrt_flg != old_wrt_flg ) {
  132.     if ( (old_wrt_flg = Wrt_flg) == FALSE )
  133.         wrtstr("表示",0,0,0x17);
  134.     else
  135.         wrtstr("編集",0,0,0x17);
  136.     }
  137. }
  138. void    Dsp_PFKEY()
  139. {
  140.     int     i;
  141.     static char *menu[]={
  142.     " MENU1"," MENU2"," MENU3"," MENU4","BGM",
  143.     " 選択 "," 削除 "," 確定 "," 複写 "," 通信 " };
  144.  
  145.     for ( i = 0 ; i < 10 ; i++ )
  146.         wrtstr(menu[i],i*7+(i/5),MENU_Y,0x1F);
  147. }
  148. void    Dsp_status()
  149. {
  150.     UCHAR   tmp[100];
  151.  
  152.     memset(tmp,' ',80); tmp[80] = '\0';
  153.     wrtstr(tmp,0,0,0x1F);
  154.     wrtstr(tmp,0,1,0x1F);
  155.     Dsp_ins_mode();
  156.     Dsp_file_name();
  157.     Dsp_wrt_flg();
  158.     Dsp_free();
  159.     Dsp_PFKEY();
  160. }
  161. int     Buf_init(file)
  162. char    *file;
  163. {
  164.     int        n;
  165.     FILE    *fp;
  166.     UCHAR   tmp[512];
  167.  
  168.     top_ptr = lin_ptr = ent_ptr = btm_ptr = 0;
  169.     if ( file != (char *)NULL && (fp = fopen(file,"rb")) != (FILE *)NULL ) {
  170.     wrtstr("ファイルを読み込んでいます",30,1,0x15);
  171.     while ( (n = fread(tmp,1,512,fp)) > 0 ) {
  172.         Ins_buf(btm_ptr,n,tmp);
  173.         btm_ptr += n;
  174.     }
  175.     if ( btm_ptr > 0 && *Cnv_ptr(btm_ptr-1) == '\x1A' )
  176.         Del_buf(--btm_ptr,1L);
  177.     file_name = file;
  178.     fclose(fp);
  179.     wrtstr(SPCSTR,30,1,0x1F);
  180.     } else
  181.     file_name = file;
  182.  
  183.     chk_ptr = cke_ptr = ERR;
  184.     CONTRL = 0; TAB = 8;
  185.     Wrt_flg = FALSE;
  186.     old_wrt_flg = TRUE;
  187.  
  188.     return FALSE;
  189. }
  190. int    save(file)
  191. char    *file;
  192. {
  193.     FILE    *fp;
  194.     UCHAR   tmp[256];
  195.     int        n;
  196.     LONG    sp,sz;
  197.     char    *p;
  198.  
  199.     if ( file != NULL ) {
  200.     file_name = file;
  201.     Dsp_file_name();
  202.     }
  203.     if ( file_name == NULL )
  204.     return ERR;
  205.  
  206.     if ( Back_up != FALSE ) {
  207.     strcpy((char *)tmp,file_name);
  208.     if ( (p = strrchr((char *)tmp,'.')) == NULL )
  209.         for ( p = (char *)tmp ; *p != '\0' ; p++ );
  210.     strcpy(p,".BAK");
  211.     unlink((char *)tmp);
  212.     rename(file_name,(char *)tmp);
  213.     }
  214.  
  215.     if ( (fp = fopen(file_name,"wb")) == NULL )
  216.     return ERR;
  217.  
  218.     for ( sp = 0,sz = btm_ptr ; sz > 0 ; ) {
  219.     if ( sz < 256 ) n = sz; else n = 256;
  220.         Cut_buf(tmp,n,sp);
  221.     fwrite(tmp,1,n,fp);
  222.     sp += n;
  223.     sz -= n;
  224.     }
  225.  
  226.     if ( Apend_Z == FALSE ) {
  227.     tmp[0] = 0x1A;
  228.     fwrite(tmp,1,1,fp);
  229.     }
  230.  
  231.     if ( ferror(fp) ) {
  232.     fclose(fp);
  233.     return ERR;
  234.     }
  235.     fclose(fp);
  236.     return FALSE;
  237. }
  238. void    Set_file_name(file)
  239. char    *file;
  240. {
  241.     strcpy(tmp_name,file);
  242.     file_name = tmp_name;
  243.     Dsp_file_name();
  244. }
  245. void    Set2_file_name(file)
  246. char    *file;
  247. {
  248.     strcpy(tmp_name,file);
  249.     file_name = tmp_name;
  250. }
  251. void    main(argc,argv)
  252. int    argc;
  253. char    *argv[];
  254. {
  255.     int     i;
  256.     char    tmp[80];
  257.     char    *p;
  258.     char    *file=NULL;
  259.  
  260. #ifdef    FMR70
  261.     signal(SIGINT,SIG_IGN);
  262. #endif
  263.  
  264.     while ( --argc > 0 ) {
  265.     p = *(++argv);
  266.     if ( *p == '-' || *p == '/' ) {
  267.         switch(*(++p)) {
  268.         case 'A': case 'a':
  269.             Auto_log_file = ++p;
  270.             break;
  271.         case 'B': case 'b':
  272.             Back_up = TRUE;
  273.             break;
  274.         case 'Z': case 'z':
  275.             Apend_Z = TRUE;
  276.             break;
  277.         case 'R': case 'r':
  278.             modeW = (modeW & 0xFFF3) | 0x0008;
  279.             break;
  280.         case 'F': case 'f':
  281.             modeW = (modeW & 0xFFCF) | 0x0020;
  282.             break;
  283.         case 'K': case 'k':
  284.             modeW = (modeW & 0xFE3F) | 0x0080;
  285.             break;
  286.         case 'H': case 'h':
  287.             modeW = (modeW & 0xFE3F) | 0x0100;
  288.             break;
  289.         case 'T': case 't':
  290.             Tmp_device_name = ++p;
  291.             break;
  292.         }
  293.     } else
  294.         file = p;
  295.     }
  296.  
  297.     Gra_init();
  298.     Dsp_init();
  299.     KAN_open(putstr,putsys,putmode);
  300.     KYB_clic(1);
  301.     Auto_log_init();
  302.     Dsp_status();
  303.     Start_Msg();
  304.  
  305.     if ( Bfp_init() != FALSE ) {
  306.     wrtstr("メモリ管理の初期化に失敗しました",30,1,0x12);
  307.     exit(0);
  308.     }
  309.     if ( Buf_init(file) != FALSE ) {
  310.     wrtstr("ファイルの初期化に失敗しました",30,1,0x12);
  311.     exit(0);
  312.     }
  313.  
  314.     Dsp_status();
  315.     Set_vram();
  316.     Dsp_vram(vram);
  317.  
  318.     if ( (i = setjmp(mark)) != 0 ) {
  319.     sprintf(tmp,"致命的なエラ-が発生しました #%d",i);
  320.     wrtstr(tmp,30,1,0x12);
  321.     }
  322.  
  323.     do {
  324.         while ( edit() == FALSE );
  325.     } while ( Del_wind() == FALSE );
  326.  
  327.     Bfp_end();
  328.     RSB_end();
  329.     KYB_clic(1);
  330.  
  331. #ifdef    TOWNS
  332.     KAN_close();
  333.     CD_endof();
  334.     ML_End(); 
  335.     SND_end();
  336. #endif
  337.  
  338. }
  339.