Skip to content
Snippets Groups Projects
Commit 2ecb5452 authored by cvs2git's avatar cvs2git
Browse files

This commit was manufactured by cvs2svn to create tag 'sbbs310i'.

parent 00146d6f
No related branches found
No related tags found
No related merge requests found
Showing
with 27 additions and 1677 deletions
......@@ -2,7 +2,7 @@ Synchronet for Unix
-=-=-=-=-=-=-=-=-=-
Created: Mar 15, 2002
Updated: Apr 12, 2002
Updated: Mar 15, 2002
By: Rob Swindell
http://www.synchro.net
......@@ -61,8 +61,6 @@ A. Yes, but it will be optional.
Step-by-step Instructions
=========================
Note: These instructions assume you are already logged in as 'root'.
1. Get and build the current source code:
A. Create the Synchronet BBS directory on your file system:
......@@ -81,7 +79,6 @@ Note: These instructions assume you are already logged in as 'root'.
cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co xtrn
cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/sbbs3
cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/uifc
cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/xpdev
cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/libdialog
cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs co src/mozilla
(this last one may take a while as it includes pre-compiled libraries)
......@@ -90,14 +87,14 @@ Note: These instructions assume you are already logged in as 'root'.
cd /sbbs/src/sbbs3
E. Build the main executable (and utilities):
gmake
gmake -f Makefile.gnu
(there *should* be no warnings or errors)
F. Change to this directory:
cd /sbbs/src/sbbs3/scfg
G. Build the Synchronet configuration utility (SCFG):
gmake
gmake -f Makefile.gnu
H. Congratulate yourself on a job well-done.
......@@ -114,13 +111,13 @@ Note: These instructions assume you are already logged in as 'root'.
/sbbs/src/sbbs3/gcc.linux.exe.debug/fixsmb
/sbbs/src/sbbs3/gcc.linux.exe.debug/smbutil
/sbbs/src/sbbs3/gcc.linux.exe.debug/sbbs
/sbbs/src/sbbs3/scfg/gcc.linux.debug/scfg
/sbbs/src/sbbs3/scfg/gcc.linux.debug/scfghelp.ixb
/sbbs/src/sbbs3/scfg/gcc.linux.debug/scfghelp.dat
/sbbs/src/sbbs3/scfg/gcc.linux.exe.debug/scfg
/sbbs/src/sbbs3/scfg/gcc.linux.exe.debug/scfghelp.ixb
/sbbs/src/sbbs3/scfg/gcc.linux.exe.debug/scfghelp.dat
(the paths will be different for FreeBSD or release builds)
C. Build the required Baja {tm} modules:
gmake
gmake -f Makefile.gnu
3. Prepare the "xtrn" directory:
......@@ -131,12 +128,28 @@ Note: These instructions assume you are already logged in as 'root'.
B. Build Synchronet Blackjack:
gmake -f Makefile.gnu
C. Change to this dircectory:
C. Create the platform sub-directories:
mkdir win32
mkdir linux (or freebsd)
D. Move the executables:
mv sbl.exe win32
mv sbl linux (or freebsd)
E. Change to this dircectory:
cd /sbbs/xtrn/sbl
D. Build Synchronet BBS List:
F. Build Synchronet BBS List:
gmake -f Makefile.gnu
G. Create the platform sub-directories:
mkdir win32
mkdir linux (or freebsd)
H. Move the executables:
mv sbj.exe win32
mv sbj linux (or freebsd)
4. Configure the BBS:
......@@ -192,7 +205,7 @@ Note: These instructions assume you are already logged in as 'root'.
Name Synchronet BBS List
Internal Code SBL
Start-up Directory ../xtrn/sbl
Command Line sbl%.
Command Line %?/sbl
Clean-up Command Line
Execution Cost None
Access Requirements
......@@ -210,7 +223,7 @@ Note: These instructions assume you are already logged in as 'root'.
Name Synchronet Blackjack!
Internal Code SBJ
Start-up Directory ../xtrn/sbj
Command Line sbj%. /l
Command Line %?/sbj /l
Clean-up Command Line
Execution Cost None
Access Requirements
......
// newslink.js
// Synchronet Newsgroup Link/Gateway Module
// Configuration file (in ctrl/newslink.cfg) format:
// ;this line is a comment
// server servername
// port TCP port number (defaults to 119)
// user username (optional)
// pass password (optional)
// area subboard (internal code) newsgroup
// ...
const VERSION="1.00 Beta"
printf("Synchronet NewsLink session started (v%s)", VERSION);
var tearline = format("--- Synchronet NewsLink v%s\r\n",VERSION);
var tagline = format(" * %s - %s - telnet://%s\r\n"
,system.name,system.location,system.inetaddr);
var antispam = format("remove-%s-this."
,random(50000).toString(36));
var cfg_fname = system.ctrl_dir + "newslink.cfg";
load("sbbsdefs.js");
var debug = false;
var reset_import_ptrs = false; // Reset import pointers, import all messages
var update_import_ptrs = false; // Update import pointers, don't import anything
var reset_export_ptrs = false; // Reset export pointers, export all messages
var update_export_ptrs = false; // Update export pointers, don't export anything
var email_addresses = true; // Include e-mail addresses in headers
// Parse arguments
for(i=0;i<argc;i++) {
if(argv[i].toLowerCase()=="-d") // debug
debug = true;
else if(argv[i].toLowerCase()=="-ri") // reset import pointers (import all)
reset_import_ptrs = true;
else if(argv[i].toLowerCase()=="-ui") // update import pointers (import none)
update_import_ptrs = true;
else if(argv[i].toLowerCase()=="-re") // reset export pointers (export all)
reset_export_ptrs = true;
else if(argv[i].toLowerCase()=="-ue") // update export pointers (export none)
update_export_ptrs = true;
else if(argv[i].toLowerCase()=="-ne") // no e-mail addresses
email_addresses = false;
else if(argv[i].toLowerCase()=="-nm") // no mangling of e-mail addresses
antispam = "";
else
cfg_fname = argv[i];
}
// Write a string to the server socket
function write(str)
{
socket.send(str);
}
function writeln(str)
{
if(debug)
printf("cmd: %s",str);
write(str + "\r\n");
}
function readln(str)
{
rsp = socket.readln();
if(debug)
printf("rsp: %s",rsp);
return(rsp);
}
var server;
var port=119;
var username;
var password;
area = new Array();
/******************************/
/* Read/Parse the Config File */
/******************************/
cfg_file = new File(cfg_fname);
if(!cfg_file.open("r")) {
printf("!Error %d opening %s",errno,cfg_fname);
delete cfg_file;
exit();
}
while(!cfg_file.eof) {
line = cfg_file.readln();
if(line==null || line[0] == ';' || !line.length)
continue;
str=line.split(/\s+/);
switch(str[0].toLowerCase()) {
case "server":
server=str[1];
break;
case "port":
port=Number(str[1]);
break;
case "user":
username=str[1];
break;
case "pass":
password=str[1];
break;
case "area":
area.push(str);
break;
default:
printf("!UNRECOGNIZED configuration keyword: %s",str[0]);
break;
}
}
delete cfg_file;
printf("server: %s",server);
if(debug) {
printf("username: %s",username);
printf("password: %s",password);
}
printf("%ld areas",area.length);
if(server==undefined || !server.length) {
printf("!No news server specified");
exit();
}
printf("Connecting to %s port %d ...",server,port);
socket = new Socket();
//socket.debug=true;
if(!socket.connect(server,port)) {
printf("!Error %d connecting to %s port %d"
,socket.last_error,server,port);
delete socket;
exit();
}
printf("Connected");
readln();
writeln("slave");
readln();
if(username!=undefined && username.length) {
printf("Authenticating...");
writeln(format("AUTHINFO USER %s",username));
readln();
if(password!=undefined && password.length) {
writeln(format("AUTHINFO PASS %s",password));
rsp = readln();
if(rsp==null || rsp[0]!='2') {
printf("!Authentication failure: %s", rsp);
delete socket;
exit();
}
}
printf("Authenticated");
}
/******************************/
/* Export and Import Messages */
/******************************/
var exported=0;
var imported=0;
printf("Scanning %lu message bases...",area.length);
for(i in area) {
if(!socket.is_connected) {
printf("Disconnected");
break;
}
// printf("%s",area[i].toString());
sub = area[i][1];
newsgroup = area[i][2];
printf("sub: %s, newsgroup: %s",sub,newsgroup);
msgbase = new MsgBase(sub);
if(msgbase == null) {
printf("!ERROR opening msgbase: %s",sub);
continue;
}
/*********************/
/* Read Pointer File */
/*********************/
export_ptr = 0;
import_ptr = 0;
ptr_fname = msgbase.file + ".snl";
ptr_file = new File(ptr_fname);
if(ptr_file.open("rb")) {
export_ptr = ptr_file.readBin();
printf("%s export ptr: %ld",sub,export_ptr);
import_ptr = ptr_file.readBin();
printf("%s import ptr: %ld",sub,import_ptr);
}
ptr_file.close();
if(reset_export_ptrs)
ptr = 0;
else if(update_export_ptrs)
ptr = msgbase.last_msg;
else
ptr = export_ptr;
if(ptr < msgbase.first_msg)
ptr = msgbase.first_msg;
else
ptr++;
/*************************/
/* EXPORT Local Messages */
/*************************/
for(;socket.is_connected && ptr<=msgbase.last_msg;ptr++) {
hdr = msgbase.get_msg_header(false,ptr);
if(hdr == null)
continue;
if(hdr.attr&MSG_DELETE) /* marked for deletion */
continue;
if(hdr.attr&MSG_MODERATED && !(hdr.attr&MSG_VALIDATED))
continue;
if(hdr.attr&MSG_PRIVATE)/* no private messages on NNTP */
continue;
if(hdr.from_net_type==NET_INTERNET) /* no dupe loop */
continue;
body = msgbase.get_msg_body(false, ptr
,true /* remove ctrl-a codes */
,true /* include tails */);
if(body == null) {
printf("!FAILED to read message number %ld",ptr);
continue;
}
body = ascii_str(body);
body += tearline;
body += tagline;
if(0)
writeln(format("IHAVE %s",hdr.id));
else
writeln("POST");
rsp = readln();
if(rsp==null || rsp[0]!='3') {
printf("!POST failure: %s",rsp);
break;
}
if(!email_addresses)
writeln(format("From: %s@%s",hdr.from,newsgroup));
else if(hdr.from.indexOf('@')!=-1)
writeln(format("From: %s%s",antispam,hdr.from));
else if(hdr.from_net_type && hdr.from_net_addr!=null) {
if(hdr.from_net_addr.indexOf('@')!=-1)
writeln(format("From: \"%s\" <%s%s>"
,hdr.from
,antispam,hdr.from_net_addr));
else
writeln(format("From: \"%s\" <%s%s@%s%s>"
,hdr.from
,antispam,hdr.from
,antispam,hdr.from_net_addr));
}
else if(hdr.from.indexOf(' ')>0)
writeln(format("From: \"%s\" <\"%s%s\"@%s%s>"
,hdr.from
,antispam,hdr.from
,antispam,system.inetaddr));
else
writeln(format("From: \"%s\" <%s%s@%s%s>"
,hdr.from
,antispam,hdr.from
,antispam,system.inetaddr));
writeln("To: " + hdr.to);
writeln("X-Comment-To: " + hdr.to);
writeln("Subject: " + hdr.subject);
writeln("Message-ID: " + hdr.id);
writeln("Date: " + hdr.date);
writeln("References: " + hdr.reply_id);
writeln("Newsgroups: " + newsgroup);
writeln("");
if(hdr.to.toLowerCase()!="all") {
writeln(" To: " + hdr.to);
}
write(body);
writeln(".");
rsp = readln();
if(rsp==null || rsp[0]!='2') {
printf("!POST failure: %s",rsp);
break;
}
printf("Exported message %lu to newsgroup: %s",ptr,newsgroup);
exported++;
}
if(ptr > msgbase.last_msg)
ptr = msgbase.last_msg;
export_ptr = ptr;
/***************************/
/* IMPORT Network Messages */
/***************************/
writeln(format("GROUP %s",newsgroup));
rsp = readln();
if(rsp==null || rsp[0]!='2') {
printf("!GROUP %s failure: %s",newsgroup,rsp);
delete ptr_file;
delete msgbase;
continue;
}
str = rsp.split(' ');
first_msg = Number(str[2]);
last_msg = Number(str[3]);
if(reset_import_ptrs)
ptr = 0;
else if(update_import_ptrs)
ptr = last_msg;
else
ptr = import_ptr;
printf("%s import ptr: %ld, last_msg: %ld",newsgroup,ptr,last_msg);
if(ptr < first_msg)
ptr = first_msg;
else {
if(ptr > last_msg)
ptr = last_msg;
ptr++;
}
for(;socket.is_connected && ptr<=last_msg;ptr++) {
writeln(format("ARTICLE %lu",ptr));
rsp = readln();
if(rsp==null || rsp[0]!='2') {
printf("!ARTICLE %lu failure: %s",ptr,rsp);
continue;
}
body=format("\1n\1b\1hFrom Newsgroup\1n\1b: \1h\1c%s\1n\r\n\r\n",newsgroup);
header=true;
var hdr=new Object();
while(socket.is_connected) {
line = socket.recvline(512 /*maxlen*/, 300 /*timeout*/);
if(line==null) {
printf("!TIMEOUT waiting for text line");
break;
}
//printf("msgtxt: %s",line);
if(line==".") {
// printf("End of message text");
break;
}
if(line=="" && header) {
header=false;
continue;
}
if(!header) { /* Body text, append to 'body' */
if(line.charAt(0)=='.')
line=line.slice(1); // Skip prepended dots
body += line;
body += "\r\n";
continue;
}
//printf(line);
/* Parse header lines */
if((sp=line.indexOf(':'))==-1)
continue;
data=line.slice(sp+1);
while(data.charAt(0)==' ') // skip prepended spaces
data=data.slice(1);
line=line.substr(0,sp);
while(line.charAt(0)==' ') // skip prepended spaces
line=line.slice(1);
switch(line.toLowerCase()) {
case "to":
case "apparently-to":
case "x-comment-to":
hdr.to=data;
break;
case "from":
hdr.from=data;
break;
case "date":
hdr.date=data;
break;
case "subject":
hdr.subject=data;
break;
case "message-id":
hdr.id=data;
break;
case "references":
hdr.reply_id=data;
break;
}
}
if(hdr.id.indexOf('@' + system.inetaddr)!=-1) // avoid dupe loop
continue;
if(system.trashcan("subject",hdr.subject)) {
printf("!BLOCKED subject: %s",hdr.subject);
var reason = format("Blocked subject (%s)",hdr.subject);
system.spamlog("NNTP",reason,hdr.from,server,hdr.to);
continue;
}
hdr.from_net_type=NET_INTERNET;
// hdr.from_net_addr=hdr.from;
body += tearline;
if(msgbase.save_msg(hdr,body)) {
printf("Message %lu imported into %s",ptr,sub);
imported++;
}
}
if(ptr > last_msg)
ptr = last_msg;
import_ptr = ptr;
/* Save Pointers */
if(!ptr_file.open("wb"))
printf("!ERROR %d creating/opening %s",errno,ptr_fname);
else {
ptr_file.writeBin(export_ptr);
ptr_file.writeBin(import_ptr);
ptr_file.close();
}
delete ptr_file;
delete msgbase;
}
writeln("quit");
readln();
delete socket;
printf("Synchronet NewsLink session complete (%lu exported, %lu imported)"
,exported, imported);
/* End of newslink.js */
: Battle Hymn of Republic |
t 2
s 5
v Mine \
f4 133
v eyes \
f4 160
v have \
f4 100
v seen \
f4 160
v the \
D4 100
v glor\
d4 160
v y \
f4 100
v of \
A4 160
v the \
c5 100
v com\
d5 160
v ing \
d5 100
v of \
d5 160
v the \
c5 100
v lord.\
A4 200
v
\ No newline at end of file
: Bouree |
t 2
b3 80
c4 80
d4 160
g3 80
F3 80
g3 160
g4 160
F4 160
e4 80
F4 80
d4 160
a3 80
b3 80
c4 160
F3 80
e3 80
F3 160
d4 160
b3 160
: Buffalo Gals |
s 5
c3 100
c3 100
c3 200
e3 200
g3 100
g3 100
a3 133
g3 200
g3 133
e3 200
r 200
g3 133
f3 200
f3 133
d3 200
r 200
a3 133
g3 200
g3 133
e3 200
: Camptown Races |
s 5
t 2
a3 100
a3 100
F3 100
a3 100
b3 100
a3 100
F3 200
F3 100
e3 300
F3 100
e3 200
r 15
a3 100
a3 100
F3 100
a3 100
b3 100
a3 100
F3 200
t 200
c5 2
p -.50
b4 2
p -.50
A4 1
p -.50
b4 1
p -.50
A4 1
p -.50
a4 1
p -.50
G4 2
p -.50
g4 2
p -.50
F4 2
p -.50
g4 1
p -.10
g4 1
p -.10
g4 1
p -.10
g4 1
p -.10
g4 1
p -.10
g4 1
p -.10
g4 1
: Now we're going to set-up and play a song
Visual The Entertainer
pitch 323.50 All commands can be abreviated with just one character
t 200
s 10
:r 10 Rest before we begin
:intro
o 6
d 1
e 1
c 1
o -1
a 2
b 1
g 1
r 1
d 1
e 1
c 1
o -1
a 2
b 1
g 1
r 1
d 1
e 1
c 1
o -1
a 2
b 1
a 1
G 1
g 2
r 2
g5 1
r 1
: begin
o 5
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
c 1
d 1
D 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
g3 1
r 1
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
r 1
a4 1
g4 1
F4 1
a4 1
c5 1
e5 2
d5 1
c5 1
b4 1
d5 1
r 1
g3 1
r 1
a3 1
r 1
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
c 1
d 1
D 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
g3 1
r 1
c 1
d 1
e 1
c 1
d 1
e 2
c 1
d 1
c 1
e 1
c 1
d 1
e 2
c 1
d 1
c 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
a3 1
r 1
: repeat
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
c 1
d 1
D 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
g3 1
r 1
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
r 1
a4 1
g4 1
F4 1
a4 1
c5 1
e5 2
d5 1
c5 1
b4 1
d5 1
r 1
g3 1
r 1
a3 1
r 1
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
c 1
d 1
D 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
g3 1
r 1
c 1
d 1
e 1
c 1
d 1
e 2
c 1
d 1
c 1
e 1
c 1
d 1
e 2
c 1
d 1
c 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
c3 1
: Example TONE (.TON) file
All lines starting with non-alphanumeric characters are ignored.
: We're going to set the timer count value (in milliseconds). The first word
of the line must begin with a 'T' (not case sensitive). Following the 'T'
word (or letter) must be some amount of white space (tabs or space) then
a number to use for the timer count value. The default timer count value
is 1 millisecond.
Time 200
: The colons you see at the beginning of the comment paragraphs are not
necessary. They are only used to visually separate comments from tone
command lines. A space, tab, or any other non-alphanumeric character would
work just as well.
: Now we're going to display some text on the monitor using the 'V' (visual)
command. The first word of the line must begin with a 'V' (not case
sensitive). Some amount of white space must follow the 'V' word (or letter)
then text to be displayed to the user. If you do not wish a new line to be
automatically displayed, append a backslash (\) to the end of the line.
Visual This is the beginning of our example TONE file.
Visual This text will be displayed on the same line as \
Visual this text.
: Now we're going to play some tones. Tones may be specified by note letter
(and optional octave number) or exact frequency (in Hz). We'll begin with
a natural 'a' (440Hz) for 1 second (1000 milliseconds). Tone lines have two
parameters, the note (or exact frequency) and duration (in time counts).
Since our time counter value is now 200, we will need a time count of 5 to
produce a 1 second duration (5 counts multiplied by 200 milliseconds equals
1 second.)
a 5
: The note is still playing right now and will continue to play until we make
another tone, give a rest command, or give a quit command.
: Notice that we used a lower case 'a'. Note letters ARE case sensitive. Lower
case notes are naturals and upper case notes are sharps.
: Now we're going to specify the same note by specifying the exact frequency
(in HZ) of 440, for the same duration.
440 5
: There will be no audible change caused by the above command because we were
already hearing the same frequency. What you will hear is a 2 second 'a',
unaware that we actually played two 1 second 'a's.
: To stop the note from sounding, we are now going to give a rest command.
Rest commands can be specified with a word starting with the letter 'R'
(not case sensitive) or by specifying a frequency of 0. Some amount of
white space must follow, then a duration (in time counts). The following
rest command is specifying 1 second of silence.
Rest 5
: To produce an automatic sound-off or pause between notes, we must specify
a stacato duration (in milliseconds). This helps the listener to distinguish
between notes played of the same frequency. If you do not specify a stacato
duration, the result is legato (smooth transition between notes).
: The stacato command must begin with the 'S' character (not case sensitive)
followed by white space then the duration (in milliseconds). The default
duration is 0 (disabled).
Stacato 10
: To play notes from octaves other than the default octave (4), you can either
change the current default octave (with the Octave command) or specify the
octave with the note. To play a low C for 1 second, we will use the
following command:
c1 5
: When we don't specify the octave number, the default octave is used. To
change the default octave number, we can use the following command:
Octave 3
Visual Now we will play a C major scale (octave 3):
c 2 Comments can follow any command (except Visual)
d 2
e 2
f 2
g 2
a 2
b 2
: To adjust the current default octave, we can use the plus (+) and minus
(-) symbols:
Octave +1
Visual Another C major scale (now in octave 4).
c 2
d 2
e 2
f 2
g 2
a 2
b 2
Visual Rest a little
Rest 5
: When specifying notes, the sounded frequency is based on a default pitch for
middle C. The default starts at 523.50Hz but can be adjusted with the Pitch
command. This is useful for created de-tuning or bend effects. The Pitch
command can be used to specify a default pitch or adjust the current default
pitch up (+) or down (-).
Visual Now for a pitch variation example.
: Lower timer count value and disable stacto for a smooth transition between
pitches
Time 40
Stacato 0
: Starting at a3 and ascend gradually.
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10 Kind of repetitive, huh?
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
a3 1
p +.10
: Now descend quickly
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
a3 1
p -1.0
: Now we're going to set-up and play a song
Visual The Entertainer
pitch 323.50 All commands can be abreviated with just one character
t 200
s 10
r 10 Rest before we begin
:intro
o 6
d 1
e 1
c 1
o -1
a 2
b 1
g 1
r 1
d 1
e 1
c 1
o -1
a 2
b 1
g 1
r 1
d 1
e 1
c 1
o -1
a 2
b 1
a 1
G 1
g 2
r 2
g5 1
r 1
: begin
o 5
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
c 1
d 1
D 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
g3 1
r 1
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
r 1
a4 1
g4 1
F4 1
a4 1
c5 1
e5 2
d5 1
c5 1
b4 1
d5 1
r 1
g3 1
r 1
a3 1
r 1
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
c 1
d 1
D 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
g3 1
r 1
c 1
d 1
e 1
c 1
d 1
e 2
c 1
d 1
c 1
e 1
c 1
d 1
e 2
c 1
d 1
c 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
a3 1
r 1
: repeat
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
c 1
d 1
D 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
g3 1
r 1
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
r 1
a4 1
g4 1
F4 1
a4 1
c5 1
e5 2
d5 1
c5 1
b4 1
d5 1
r 1
g3 1
r 1
a3 1
r 1
d4 1
D4 1
e4 1
c5 2
e4 1
c5 2
e4 1
c5 3
a3 1
r 1
g3 1
c 1
d 1
D 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
g3 1
r 1
c 1
d 1
e 1
c 1
d 1
e 2
c 1
d 1
c 1
e 1
c 1
d 1
e 2
c 1
d 1
c 1
e 1
c 1
d 1
e 2
b4 1
d 2
c 1
r 1
g3 1
r 1
c3 1
: Funeral March-Marionette |
t 2
s 10
a2 93
d3 93
r 70
d3 93
d3 93
C3 93
b2 93
C3 93
r 70
d3 93
e3 93
: Fur Elise |
t 2
s 5
e4 133
D4 133
e4 133
b3 133
d4 133
c4 133
a3 200
r 100
c3 133
e3 133
a3 133
b3 200
r 100
e3 133
G2 133
b3 133
c4 200
: Good-night, Ladies |
s 5
e4 420
c4 420
g3 140
c4 840
r 210
e4 420
c4 420
d4 140
d4 840
r 210
e4 420
c4 420
f4 140
f4 840
f4 140
e4 280
c4 140
d4 280
b3 140
c4 840
: Mexican Hat Dance |
d3 160
F3 160
r 120
d3 160
F3 160
r 120
d3 160
F3 320
r 240
d3 160
F3 160
G3 160
F3 160
f3 320
F3 160
G3 240
: Humoresque |
s 5
g2 210
a2 140
g2 210
a2 140
b2 210
d3 140
e3 210
d3 140
g3 210
F3 140
a3 210
g3 140
F3 210
a3 140
g3 210
e3 210
: Jeanie with Light Brown |
t 2
s 5
d4 200
c4 300
a3 100
A3 100
a3 100
g3 100
f3 100
a3 200
c3 100
d3 100
f3 300
: La Cucaracha |
s 10
d3 133
d3 133
d3 133
g3 400
b3 200
r 100
d3 133
d3 133
d3 133
g3 400
b3 200
r 200
g3 133
g3 133
F3 133
F3 133
e3 133
e3 133
d3 400
: Maple Leaf Rag |
t 2
s 2
b3 80
d4 80
g3 80
b3 80
d4 160
F3 80
d4 80
F3 80
a3 80
d4 240
r 80
b3 80
d4 80
g3 80
b3 80
d4 160
F3 80
d4 80
F3 80
a3 80
d4 240
: March - Nutcracker Suite |
s 5
t 2
d4 200
d4 70
d4 70
d4 70
e4 200
e4 200
F4 200
d4 200
e4 400
d4 200
d4 70
d4 70
d4 70
e4 200
e4 200
F4 200
d4 200
e4 266
: Mary had a little lamb
s 50
v Mar\
e4 500
v y \
d4 100
v had \
c4 300
v a \
d4 300
v lit\
e4 300
v tle \
e4 300
v lamb, \
e4 800
v lit\
d4 300
v tle \
d4 300
v lamb, \
d4 800
v lit\
e4 300
v tle \
g4 300
v lamb.\
g4 800
v
v Mar\
e4 500
v y \
d4 100
v had \
c4 300
v a \
d4 300
v lit\
e4 300
v tle \
e4 300
v lamb, \
e4 300
v her \
e4 300
v fleece \
d4 300
v was \
d4 300
v white \
e4 300
v as \
d4 300
v snow.\
c4 1000
v
: Comin' round the mountain|
t 2
s 5
d3 106
e3 106
g3 106
g3 106
g3 106
g3 106
e3 106
d3 106
b2 106
d3 106
g3 320
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment