2022-04-11 11:44:01 +00:00
|
|
|
var FRAME_ANSI = (1<<1);
|
|
|
|
|
|
|
|
load('ansitex/load/frame-page.js');
|
|
|
|
|
|
|
|
// Our frame object
|
|
|
|
function FrameAnsi() {
|
|
|
|
PageFrame.apply(this,arguments);
|
|
|
|
|
|
|
|
/* File Extension used for frames */
|
|
|
|
this.settings.ext = 'tex';
|
|
|
|
|
|
|
|
/* Length of a frame */
|
|
|
|
this.settings.FRAME_LENGTH = 22;
|
|
|
|
/* Width of a frame */
|
|
|
|
this.settings.FRAME_WIDTH = 80;
|
|
|
|
/* Size of page owner (length) */
|
|
|
|
this.settings.FRAME_HEADER = 56;
|
|
|
|
/* Size of page number (length with a-z) */
|
|
|
|
this.settings.FRAME_PAGENUM = 12;
|
|
|
|
/* Size of cost (length without unit) */
|
|
|
|
this.settings.FRAME_COST = 9;
|
|
|
|
|
|
|
|
this.settings.MSG_SENDORNOT = '\1n\1h\1GKEY 1 TO SEND, 2 NOT TO SEND';
|
|
|
|
this.settings.MSG_LOGON = '\1n\1h\1GKEY 1 TO LOGON, 2 TO RETURN';
|
|
|
|
this.settings.MSG_SENT = '\1n\1h\1GMESSAGE SENT - KEY # TO CONTINUE';
|
|
|
|
this.settings.MSG_NOTSENT = '\1n\1h\1GMESSAGE NOT SENT - KEY # TO CONTINUE';
|
|
|
|
this.settings.ERR_NO_PARENT = '\1n\1h\1RPARENT FRAME DOESNT EXIST';
|
|
|
|
this.settings.ERR_NOT_IMPLEMENTED = '\1n\1h\1RNOT IMPLEMENTED YET?';
|
|
|
|
this.settings.ERR_ROUTE = '\1n\1h\1WMISTAKE? \1GTRY AGAIN OR TELL US ON *08';
|
|
|
|
this.settings.ERR_METHOD_NOT_EXIST = '\1n\1h\1WMISTAKE? \1GTRY AGAIN OR TELL US ON *08';
|
|
|
|
this.settings.ACCESS_DENIED = '\1n\1h\1RACCESS DENIED. MISTAKE? TRY AGAIN OR TELL US *08';
|
|
|
|
this.settings.ALREADY_MEMBER = '\1n\1h\1RALREADY MEMBER OF CUG'
|
|
|
|
this.settings.INACTIVITY = '\1n\1h\1RINACTIVITY ALERT, DISCONNECT PENDING...';
|
|
|
|
this.settings.INACTIVE = '\1n\1h\1RINACTIVITY DISCONNECT';
|
|
|
|
this.settings.NOACTION = '\1n\1h\1RNO ACTION PERFORMED';
|
|
|
|
this.settings.BASESTAR = '\1N\1G\1H*';
|
|
|
|
this.settings.INVALID_CODE = '\1n\1h\1RINVAID CODE, PLEASE TRY AGAIN *00';
|
|
|
|
this.settings.TOKEN_EMAIL = '\1n\1h\1RTOKEN EMAILED TO YOU...';
|
|
|
|
this.settings.TOKEN_SENT = '\1n\1h\1RTOKEN SENT, PLEASE ENTER TOKEN';
|
|
|
|
this.settings.INVALID_EMAIL = '\1n\1h\1RINVAID EMAIL, PLEASE TRY AGAIN *00';
|
|
|
|
this.settings.INVALID_UID = '\1n\1h\1RINVAID USER ID, PLEASE TRY AGAIN *00';
|
|
|
|
this.settings.CANNOT_SEND_TOKEN = '\1n\1h\1RCANNOT SEND VALIDATION CODE, PLEASE TRY AGAIN *00';
|
|
|
|
this.settings.USER_EXISTS = '\1n\1h\1RERROR USER EXISTS, PLEASE TRY AGAIN *00';
|
|
|
|
this.settings.USER_CREATE_ERROR = '\1n\1h\1RERROR CREATING USER, PLEASE TRY AGAIN *00';
|
|
|
|
this.settings.LOGIN_ERROR = '\1n\1h\1RERROR LOGGING IN, PLEASE TRY AGAIN *00';
|
|
|
|
this.settings.CANCEL_MSG = '\1n\1h\1GPRESS 2 TO CANCEL';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the attribute at the current position
|
|
|
|
*/
|
|
|
|
this.attr=function(field) {
|
|
|
|
console.write(ascii(27)+'['+field.i+';'+field.f+';'+field.b+'m');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Turn off the cursor
|
|
|
|
*/
|
|
|
|
this.cursorOff=function() {
|
|
|
|
ansi.send('ext_mode','clear','cursor');
|
|
|
|
this.gotoxy(0,24);
|
|
|
|
}
|
|
|
|
|
|
|
|
this.cursorOn=function(x,y) {
|
|
|
|
ansi.send('ext_mode','set','cursor');
|
|
|
|
this.gotoxy(x,y);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Field backspace, that leaves the field filler char
|
|
|
|
this.fieldbs=function(char) {
|
|
|
|
console.write(ascii(27)+'[D'+char+ascii(27)+'[D');
|
|
|
|
}
|
|
|
|
|
|
|
|
this.gotoxy=function(x,y) {
|
|
|
|
console.gotoxy(x,y);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Render the frame to the user
|
2022-04-22 12:47:53 +00:00
|
|
|
this.render=function(withoutHeader) {
|
2022-04-11 11:44:01 +00:00
|
|
|
log(LOG_DEBUG,'- ANSI FRAME');
|
|
|
|
owner = base64_decode(this.owner);
|
|
|
|
|
2022-04-22 12:47:53 +00:00
|
|
|
const frame = new Frame(1,1,this.settings.FRAME_WIDTH,this.settings.FRAME_LENGTH+2,LIGHTGRAY);
|
|
|
|
frame.open();
|
2022-04-11 11:44:01 +00:00
|
|
|
|
|
|
|
// Dont show the page number on system login page
|
2022-04-22 12:47:53 +00:00
|
|
|
if ((! withoutHeader) && (user.number || (this.type !== FRAME_TYPE_LOGIN && NO_HISTORY_FRAMES.indexOf(this.page) === -1))) {
|
2022-04-11 11:44:01 +00:00
|
|
|
log(LOG_DEBUG,' - Owner: ['+this.pageowner+']');
|
|
|
|
|
|
|
|
cost = (this.isAccessible ? this.cost+FRAME_COSTUNIT : ' -');
|
|
|
|
|
|
|
|
header = '\1n'+this.pageownerlogo+' '.repeat(this.settings.FRAME_HEADER-console.strlen(this.pageownerlogo))+'\1n '+
|
|
|
|
(this.isAccessible ? '\1W' : '\1R')+'\1H'+this.page+' '.repeat(this.settings.FRAME_PAGENUM-this.page.length)+' '+
|
|
|
|
'\1G\1H'+' '.repeat(this.settings.FRAME_COST-cost.toString().length+1)+cost+'\1n'+
|
|
|
|
(console.screen_columns > 80 ? '\n\r' : '');
|
2022-04-22 12:47:53 +00:00
|
|
|
|
|
|
|
frame.putmsg(header);
|
2022-04-11 11:44:01 +00:00
|
|
|
}
|
|
|
|
|
2022-04-22 12:47:53 +00:00
|
|
|
contentgraphic = new Graphic(this.settings.FRAME_WIDTH);
|
|
|
|
contentgraphic.auto_extend = true;
|
|
|
|
contentgraphic.ANSI = this.parse(base64_decode(this.content));
|
|
|
|
|
|
|
|
var contentframe = new Frame(1,2,this.settings.FRAME_WIDTH,this.settings.FRAME_LENGTH,LIGHTGRAY,frame);
|
|
|
|
contentframe.open();
|
|
|
|
contentframe.lf_strict = false;
|
|
|
|
contentframe.atcodes = true;
|
|
|
|
contentframe.putmsg(contentgraphic.MSG)
|
|
|
|
contentframe.scrollTo(0,0);
|
|
|
|
|
|
|
|
frame.cycle();
|
2022-04-11 11:44:01 +00:00
|
|
|
|
2022-04-22 12:47:53 +00:00
|
|
|
return contentframe;
|
2022-04-11 11:44:01 +00:00
|
|
|
};
|
|
|
|
|
2022-04-22 12:47:53 +00:00
|
|
|
this.qrcode=function(qr,subframe) {
|
2022-04-11 11:44:01 +00:00
|
|
|
// SMALL Image
|
|
|
|
var full = ascii(0xdb);
|
|
|
|
var top = ascii(0xdf);
|
|
|
|
var bot = ascii(0xdc);
|
|
|
|
var blank = ' ';
|
|
|
|
|
|
|
|
var qrcode = '';
|
|
|
|
|
|
|
|
/*
|
|
|
|
// Render the top line
|
|
|
|
var line = ascii(27)+'[1;37m'+bot;
|
|
|
|
for (var y = 0; y < qr.size; y++) {
|
|
|
|
line += bot;
|
|
|
|
}
|
|
|
|
qrcode += line+bot+bot+ascii(27)+'[0m'+"\r\n";
|
|
|
|
*/
|
|
|
|
|
|
|
|
// Render the body
|
|
|
|
for (var x = -1; x < qr.size; x=x+2) {
|
|
|
|
line = ascii(27)+'[1;37m'+full;
|
|
|
|
|
|
|
|
for (var y = 0; y < qr.size; y++) {
|
|
|
|
// Top is white
|
2022-04-16 05:36:17 +00:00
|
|
|
if (! ((x===-1)? 0 : qr.getModule(x, y))) {
|
2022-04-11 11:44:01 +00:00
|
|
|
line += (qr.getModule(x+1, y)) ? top : full;
|
|
|
|
|
2022-04-16 05:36:17 +00:00
|
|
|
// Top is black
|
2022-04-11 11:44:01 +00:00
|
|
|
} else {
|
|
|
|
line += (qr.getModule(x+1, y)) ? blank : bot;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
qrcode += line+full+ascii(27)+'[0m'+"\r\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Render the bottom
|
|
|
|
line = ascii(27)+'[1;37m'+top;
|
|
|
|
for (var y = 0; y < qr.size; y++) {
|
|
|
|
line += top;
|
|
|
|
}
|
|
|
|
qrcode += line+top+ascii(27)+'[0m'+"\r\n";
|
|
|
|
|
|
|
|
ans2bin(fo.parse(qrcode),subframe);
|
|
|
|
subframe.open();
|
|
|
|
subframe.cycle();
|
|
|
|
};
|
|
|
|
|
|
|
|
this.save=function() {
|
|
|
|
file = system.mods_dir+'ansitex/text/'+this.page+'.tex';
|
|
|
|
w = new File(file);
|
|
|
|
if (! w.open('w')) {
|
|
|
|
log(LOG_ERROR,'! ERROR: Unable to create TEX file for '+this.page);
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
w.write(JSON.stringify(this));
|
|
|
|
w.close();
|
|
|
|
|
|
|
|
log(LOG_DEBUG,'Saved file: '+this.page+'.tex');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Send a message to the baseline.
|
|
|
|
*
|
|
|
|
* @param text
|
|
|
|
* @param reposition
|
|
|
|
*/
|
|
|
|
this.sendBaseline=function(text,reposition) {
|
|
|
|
console.pushxy();
|
|
|
|
console.gotoxy(0,24);
|
|
|
|
console.print(this.getMessage(text));
|
|
|
|
console.cleartoeol();
|
|
|
|
|
|
|
|
if (! reposition) {
|
|
|
|
console.popxy();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.clearBaseline=function(reposition) {
|
|
|
|
console.pushxy();
|
|
|
|
console.gotoxy(0,24);
|
|
|
|
console.print('');
|
|
|
|
console.cleartoeol();
|
|
|
|
|
|
|
|
if (! reposition) {
|
|
|
|
console.popxy();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
FrameAnsi.prototype = PageFrame.prototype;
|
|
|
|
FrameAnsi.prototype.constructor = FrameAnsi;
|