409 lines
7.4 KiB
C++
409 lines
7.4 KiB
C++
|
#include <string.h>
|
|||
|
#include <tswin.hpp>
|
|||
|
#include "proboard.hpp"
|
|||
|
|
|||
|
const int MAX_ICONS = 200;
|
|||
|
|
|||
|
static Window rip_window;
|
|||
|
|
|||
|
static void
|
|||
|
open_sending_rip()
|
|||
|
{
|
|||
|
tsw_cursoroff();
|
|||
|
rip_window.open(tsw_hsize/2-15 , tsw_vsize/2 - 1 , tsw_hsize/2+15 , tsw_vsize/2 + 1 , 0x1F , 0);
|
|||
|
tsw_centerline(tsw_vsize/2,"SENDING RIP SEQUENCE",0x9E);
|
|||
|
}
|
|||
|
|
|||
|
static void
|
|||
|
close_sending_rip()
|
|||
|
{
|
|||
|
rip_window.close();
|
|||
|
tsw_cursoron();
|
|||
|
}
|
|||
|
|
|||
|
String
|
|||
|
meganum( word num )
|
|||
|
{
|
|||
|
int n[2];
|
|||
|
char s[3] = "00";
|
|||
|
|
|||
|
n[0] = num / 36;
|
|||
|
n[1] = num % 36;
|
|||
|
|
|||
|
for(int i = 0 ; i < 2 ; i++)
|
|||
|
{
|
|||
|
if(n[i] < 10)
|
|||
|
s[i] = '0' + n[i];
|
|||
|
else
|
|||
|
s[i] = 'A' + n[i] - 10;
|
|||
|
}
|
|||
|
|
|||
|
return String(s);
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_text_window( int x0, int y0 , int x1 , int y1 , int font )
|
|||
|
{
|
|||
|
if(rip_mode)
|
|||
|
{
|
|||
|
io.show_local = FALSE;
|
|||
|
|
|||
|
String s;
|
|||
|
|
|||
|
s << "\r!|w" << meganum(x0)
|
|||
|
<< meganum(y0)
|
|||
|
<< meganum(x1)
|
|||
|
<< meganum(y1)
|
|||
|
<< '1'
|
|||
|
<< char(font + '0')
|
|||
|
<< '\n';
|
|||
|
|
|||
|
io << s << char(0xFF);
|
|||
|
|
|||
|
io.show_local = TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_reset()
|
|||
|
{
|
|||
|
if(rip_mode) rip_send("\r!|1K|*\n");
|
|||
|
}
|
|||
|
|
|||
|
bool
|
|||
|
show_rip( char *ripfile , bool reset )
|
|||
|
{
|
|||
|
if(!rip_mode) return FALSE;
|
|||
|
|
|||
|
FileName fn(cfg.RIPpath,ripfile);
|
|||
|
fn.changeExt("RIP");
|
|||
|
|
|||
|
if(reset) rip_reset();
|
|||
|
|
|||
|
open_sending_rip();
|
|||
|
|
|||
|
io.show_local = FALSE;
|
|||
|
io << '\r';
|
|||
|
char k = io.sendfile(fn , NULL);
|
|||
|
io.show_local = TRUE;
|
|||
|
|
|||
|
close_sending_rip();
|
|||
|
|
|||
|
return (k != ANS_NOFILE);
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_send( char *s )
|
|||
|
{
|
|||
|
if(!rip_mode) return;
|
|||
|
|
|||
|
open_sending_rip();
|
|||
|
io.show_local = FALSE;
|
|||
|
io << s << char(0xFF);
|
|||
|
io.show_local = TRUE;
|
|||
|
close_sending_rip();
|
|||
|
}
|
|||
|
|
|||
|
bool
|
|||
|
rip_icon_exists( char *fn )
|
|||
|
{
|
|||
|
String cmd = "\r!|1F010000";
|
|||
|
cmd << fn << "\n";
|
|||
|
rip_send(cmd);
|
|||
|
|
|||
|
String response;
|
|||
|
dword ticks = clockticks();
|
|||
|
|
|||
|
while(clockdiff(ticks)<30)
|
|||
|
{
|
|||
|
char k = io.readkey();
|
|||
|
|
|||
|
if(k)
|
|||
|
{
|
|||
|
if(k == '\r')
|
|||
|
{
|
|||
|
if(response == "0")
|
|||
|
{
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
if(response == "1")
|
|||
|
{
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if(k == '\n') continue;
|
|||
|
|
|||
|
response << k;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void
|
|||
|
rip_send_icons()
|
|||
|
{
|
|||
|
if(rip_mode)
|
|||
|
{
|
|||
|
FileName fn(cfg.iconspath,"*.IC?");
|
|||
|
|
|||
|
String *icons = new String[MAX_ICONS];
|
|||
|
|
|||
|
DirScan dir(fn);
|
|||
|
|
|||
|
for(int i = 0 ; int(dir) && i<MAX_ICONS ; )
|
|||
|
{
|
|||
|
if(!rip_icon_exists(dir))
|
|||
|
{
|
|||
|
icons[i++] = (char *)dir;
|
|||
|
}
|
|||
|
|
|||
|
dir++;
|
|||
|
}
|
|||
|
|
|||
|
fn(cfg.iconspath,"*.HI?");
|
|||
|
|
|||
|
dir.first(fn);
|
|||
|
|
|||
|
for(; int(dir) && i<MAX_ICONS; )
|
|||
|
{
|
|||
|
if(!rip_icon_exists(dir))
|
|||
|
{
|
|||
|
icons[i++] = (char *)dir;
|
|||
|
}
|
|||
|
|
|||
|
dir++;
|
|||
|
}
|
|||
|
|
|||
|
if(i)
|
|||
|
{
|
|||
|
fn(mypath,"RIPICONS.$$$");
|
|||
|
|
|||
|
File f(fn,fmode_text | fmode_create);
|
|||
|
|
|||
|
for( i-- ; i>=0 ; i--)
|
|||
|
{
|
|||
|
f << cfg.iconspath << (char *)icons[i] << '\n';
|
|||
|
}
|
|||
|
f.close();
|
|||
|
|
|||
|
rip_send("\r!|907020000<>\n");
|
|||
|
|
|||
|
download(form("/F=@%s /K=Z /I /Q /N /T",(char *)fn));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_query( char *cmd )
|
|||
|
{
|
|||
|
rip_send(form("\r!|10000%s\n" , cmd));
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_color( int color )
|
|||
|
{
|
|||
|
rip_send(form("\r!|c%02X\n",color));
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_fill_color( int pattern , int color)
|
|||
|
{
|
|||
|
rip_send(form("\r!|S%02X%02X\n",pattern,color));
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_bar( int x1 , int y1 , int x2 , int y2 )
|
|||
|
{
|
|||
|
String cmd = "\r!|B";
|
|||
|
|
|||
|
cmd << meganum(x1)
|
|||
|
<< meganum(y1)
|
|||
|
<< meganum(x2)
|
|||
|
<< meganum(y2)
|
|||
|
<< '\n';
|
|||
|
|
|||
|
rip_send(cmd);
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_kill_mouse_fields()
|
|||
|
{
|
|||
|
rip_send("\r!|1K\n");
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_nomore()
|
|||
|
{
|
|||
|
rip_send("\r!|#|#|#\n");
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_get_image( int x1,int y1,int x2,int y2 )
|
|||
|
{
|
|||
|
String cmd = "\r!|1C";
|
|||
|
|
|||
|
cmd << meganum(x1)
|
|||
|
<< meganum(y1)
|
|||
|
<< meganum(x2)
|
|||
|
<< meganum(y2)
|
|||
|
<< "0\n";
|
|||
|
|
|||
|
rip_send(cmd);
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_put_image( int x,int y )
|
|||
|
{
|
|||
|
String cmd = "\r!|1P";
|
|||
|
|
|||
|
cmd << meganum(x)
|
|||
|
<< meganum(y)
|
|||
|
<< "000\n";
|
|||
|
|
|||
|
rip_send(cmd);
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_button(int x1,int y1,int x2,int y2,int hotkey,bool def,char *icon,char *text,char *hostcmd)
|
|||
|
{
|
|||
|
String cmd = "\r!|1U";
|
|||
|
|
|||
|
cmd << meganum(x1)
|
|||
|
<< meganum(y1)
|
|||
|
<< meganum(x2)
|
|||
|
<< meganum(y2)
|
|||
|
<< meganum(hotkey)
|
|||
|
<< meganum(def ? 2:0)
|
|||
|
<< '0'
|
|||
|
<< icon << "<>" << text << "<>" << hostcmd
|
|||
|
<< '\n';
|
|||
|
|
|||
|
rip_send(cmd);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void
|
|||
|
rip_start_dialog( char *prompt, int max )
|
|||
|
{
|
|||
|
int width = max;
|
|||
|
|
|||
|
if(strlen(prompt) > width) width = strlen(prompt);
|
|||
|
|
|||
|
int offset = width/2 + width%2;
|
|||
|
|
|||
|
rip_save_textwindow();
|
|||
|
rip_get_image(297-offset*8, 50 , 342+offset*8, 108 );
|
|||
|
rip_send("\r!|Y00000100|1B0000020PVK030F000F080700000F07000000\n");
|
|||
|
rip_button(300-offset*8,53,339+offset*8,105,0,FALSE,"","","");
|
|||
|
rip_send("\r!|1B0000020PHK030F000F080700000F07000000\n");
|
|||
|
rip_button(310-offset*8,56,329+offset*8,75,0,FALSE,"",prompt,"");
|
|||
|
|
|||
|
offset = max/2+max%2;
|
|||
|
|
|||
|
rip_text_window(40-offset,11,39+offset,11,0);
|
|||
|
rip_send("\r!|1B00000200LC030B00080F0100080F07000000\n");
|
|||
|
rip_button(310-offset*8,87,329+offset*8,98,0,FALSE,"","","");
|
|||
|
rip_nomore();
|
|||
|
|
|||
|
io.show_local = FALSE;
|
|||
|
io.color(6);
|
|||
|
io.show_local = TRUE;
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_end_dialog()
|
|||
|
{
|
|||
|
rip_paste_clipboard();
|
|||
|
rip_restore_textwindow();
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_start_yesno_dialog( char *prompt , bool def)
|
|||
|
{
|
|||
|
int width = 30;
|
|||
|
|
|||
|
if(strlen(prompt) > width) width = strlen(prompt);
|
|||
|
|
|||
|
int offset = width/2 + width%2;
|
|||
|
|
|||
|
rip_save_textwindow();
|
|||
|
rip_get_image(297-offset*8, 50 , 358+offset*8, 125 );
|
|||
|
rip_send("\r!|Y00000100|1B0000020PVK030F000F080700000F07000000\n");
|
|||
|
rip_button(300-offset*8,53,339+offset*8,120,0,FALSE,"","","");
|
|||
|
rip_send("\r!|1B0000020PHK030F000F080700000F07000000\n");
|
|||
|
rip_button(310-offset*8,56,329+offset*8,75,0,FALSE,"",prompt,"");
|
|||
|
|
|||
|
rip_send("\r!|1B0000020SAI030E000F080700020F07000000\n");
|
|||
|
|
|||
|
rip_text_window(0,0,0,0,0);
|
|||
|
rip_button(250,85,310,108,'Y',def ,"","Yes","Y");
|
|||
|
rip_button(329,85,389,108,'N',!def,"","No" ,"N");
|
|||
|
rip_nomore();
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_textmode()
|
|||
|
{
|
|||
|
if(user.screenLength == 38) user.screenLength = 23;
|
|||
|
|
|||
|
if(rip_mode)
|
|||
|
{
|
|||
|
if(user.ripFont)
|
|||
|
{
|
|||
|
rip_screenlines = 22;
|
|||
|
rip_text_window(0,0,79,21,2);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
rip_screenlines = 38;
|
|||
|
rip_text_window(0,0,79,37,0);
|
|||
|
}
|
|||
|
|
|||
|
rip_send("\r!|Y00000100\n"
|
|||
|
"!|1B0000020074030F000F080F00000F07000000|1U018OHR9A0000<><>\n"
|
|||
|
"!|1B0000020PHC030F000F080700000F07000000|1U028PHR9A0000<><>\n"
|
|||
|
"!|#|#|#\n");
|
|||
|
|
|||
|
rip_show_enter();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_clear_status()
|
|||
|
{
|
|||
|
rip_fill_color(1,7);
|
|||
|
rip_color(7);
|
|||
|
rip_bar(3,315,637,332);
|
|||
|
rip_kill_mouse_fields();
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_show_enter()
|
|||
|
{
|
|||
|
rip_send("\r!|1B0000020QOY030F000B080300000E07000000|1UF58THN960000<>Enter<>^m\n!|#|#|#\n");
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_show_more()
|
|||
|
{
|
|||
|
rip_send(
|
|||
|
"\r!|1B0000020QOY020F000B080100020E07000000\n"
|
|||
|
"!|1U2T8T47962H00<>Yes<>Y|1U4H8T5V962600<>No<>N|1U658T8N961V00<>Continuous<>C\n"
|
|||
|
"!|1B0000020PI8020B000F080700000E07000000|1U0B8S2J970000<>More?<>|#|#|#\n"
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
rip_show_more_tag()
|
|||
|
{
|
|||
|
rip_send(
|
|||
|
"\r!|1B0000020QOY020F000B080100020E07000000\n"
|
|||
|
"!|1U2T8T47962H00<>Yes<>Y|1U4H8T5V962600<>No<>N|1U658T8N961V00<>Continuous<>C\n"
|
|||
|
"!|1UAK8TDC961X00<>Edit Tagged<>E|1U8W8TAA962C00<>Tag<>T\n"
|
|||
|
"!|1B0000020PI8020B000F080700000E07000000|1U0B8S2J970000<>More?<>|#|#|#\n"
|
|||
|
);
|
|||
|
}
|