home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / hacking / phreak_utils_pc / bbp_init.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-04-01  |  20.7 KB  |  645 lines

  1. unit bbp_init;
  2.  
  3. interface
  4.  
  5. procedure init(project:string);
  6. procedure startup;
  7.  
  8. implementation
  9.  
  10. uses crt, video, bbp_vars, extras, pdial, bbunit, lscomm, grwins, ferror,
  11.      bbp_proc, mouseio, bbp_pom, {bbp_term,} bbp_bsli, optimer, grmenus,
  12.      editrout, dos, bbp_conv, sos;
  13.  
  14. procedure say(s:string);
  15. begin
  16.   if parameter('/DEBUG') then begin
  17.     writeln(s);
  18.     exit;
  19.   end;
  20.   gotoxy(1,23);
  21.   clreol;
  22.   gotoxy(40-(length(s) div 2),23);
  23.   write(s);
  24. end;
  25.  
  26. procedure loadconfig;
  27. var dumbset :bbp_vars.configtype;
  28. begin
  29.   with dumbset do begin
  30.     version:=version;                   { creator's version number           }
  31.     password:='';                       { default no password                }
  32.     firstonpage:=1;                     { for action mode number selection   }
  33.     curtrunk:=1;                        { reset all to default values       }
  34.     curdset:=1;                         { in action mode, dialset, trunk,    }
  35.     curnum:=1;                          { number etc.                        }
  36.     curcompany:=1;                      { default ccc company = 1            }
  37.     timesused:=0;                       { default times used = zero !        }
  38.     dialspeed:=1.00;                    { default dialspeed factor 1.00      }
  39.     gotblaster:=false;                  { default no sound blaster present   }
  40.     sbint:=$7;                          { default sb interrupt 7h            }
  41.     sbaddr:=$220;                       { default sb i/o adress 220h         }
  42.     curcard:='123-456-7890-1234';       { default card # for card talker     }
  43.     curcallto:='201-857-2666';          { default target # for card talker   }
  44.     switchback:=0;                      { default switchback = 0 (off)       }
  45.     flipkeypad:=TRUE;                   { default kepad flip = on            }
  46.     ccc_manually:=FALSE;                { default ccc automatic = on         }
  47.     modem:=FALSE;                       { default modem present = NO         }
  48.     modemport:=1;                       { default modem com port = 1         }
  49.     modemspeed:=38400;                  { default modem speed = 38400 bps    }
  50.     phonesystem:=FALSE;                 { default phone system = rotary      }
  51.     modeminit:='';                      { default modem init string = nuttin }
  52.     modemdatabits:=8;                   { default modem data bits = 8        }
  53.     modemparity:=0;                     { default modem parity = none        }
  54.     modemstopbits:=1;                   { default modem stop bits = 1        }
  55.     touchpad:=true;                     { default pad "touching" on !        }
  56.     commaperiod:=500;                   { default comma delay = 500 ms       }
  57.     cetdiff:=0;                         { default timezone = 0               }
  58.     activedtl:=1;                       { default DTL to be used --> off rec }
  59.   end;
  60.   if not sosexist(cfgfilename) then begin  { create new file here               }
  61.     sosopen;
  62.     sosfcreate(cfgfilename);
  63.     soswrite(@dumbset,sizeof(dumbset));
  64.     sosclose;
  65.   end;
  66.   if sosbfsize(cfgfilename)<>sizeof(configtype) then fatalerror('Incompatible config file ('+cfgfilename+').');
  67.   sosopen;                               { load configuration }
  68.   sosfopen(cfgfilename);
  69.   sosread(@config,sizeof(config));
  70.   sosclose;
  71.   config.password:=scrambled(config.password); { de-crypt password           }
  72. end;
  73.  
  74. procedure loaddialsets;
  75. var dumbset  :dialsettype;
  76.     dumbtone :tonetype2;
  77.     x        :byte;
  78. begin
  79.   with dumbtone do begin
  80.     one:=0;
  81.     two:=0;
  82.     three:=0;
  83.     mark:=0;
  84.     space:=0;
  85.   end;
  86.   with dumbset do begin
  87.     standard:=blankpbentry;
  88.     description:='Describe Dial Set here';
  89.     for x:=0 to 9 do tone[x]:=dumbtone;
  90.     kp1:=dumbtone;
  91.     kp2:=dumbtone;
  92.     st:=dumbtone;
  93.     c11:=dumbtone;
  94.     c12:=dumbtone;
  95.     kp2e:=dumbtone;
  96.     ste:=dumbtone;
  97.     eo:=dumbtone;
  98.     raute:=dumbtone;
  99.     stern:=dumbtone;
  100.   end;
  101.   if not sosexist(dsfilename) then begin
  102.     sosopen;
  103.     sosfcreate(dsfilename);
  104.     for x:=1 to maxdialsets do soswrite(@dumbset,sizeof(dumbset));
  105.     sosclose;
  106.   end;
  107.   if sosbfsize(dsfilename)<>sizeof(dialsettype)*maxdialsets then fatalerror('Incompatible dial set file ('+dsfilename+').');
  108.   sosopen;
  109.   sosfopen(dsfilename);
  110.   sosseek(sizeof(dialsettype)*(config.curdset-1));
  111.   sosread(@curds,sizeof(curds));
  112.   sosclose;
  113. end;
  114.  
  115. procedure loadtrunks;
  116. var dumbtone  :tonetype;
  117.     dumbtrunk :trunktype;
  118.     x         :byte;
  119. begin
  120.   with dumbtone do begin
  121.     one:=0;
  122.     two:=0;
  123.     three:=0;
  124.     len:=0;
  125.   end;
  126.   for x:=1 to 10 do dumbtrunk.tone[x]:=dumbtone;
  127.   for x:=1 to 10 do dumbtrunk.pause[x]:=0;
  128.   dumbtrunk.name:=blankpbentry;
  129.   dumbtrunk.description:='Describe trunk here';
  130.   if not sosexist(trunkfilename) then begin
  131.     sosopen;
  132.     sosfcreate(trunkfilename);
  133.     for x:=1 to maxtrunks do soswrite(@dumbtrunk,sizeof(dumbtrunk));
  134.     sosclose;
  135.   end;
  136.   if sosbfsize(trunkfilename)<>sizeof(trunktype)*maxtrunks then fatalerror('Incompatible trunk file ('+trunkfilename+').');
  137.   sosopen;
  138.   sosfopen(trunkfilename);
  139.   sosseek(sizeof(trunktype)*(config.curtrunk-1));
  140.   sosread(@curtrunk,sizeof(curtrunk));
  141.   sosclose;
  142. end;
  143.  
  144. procedure loadscan;
  145. var dumbrec:scantype;
  146.     x      :word;
  147. begin
  148.   with dumbrec do begin
  149.     scanstring:='X#,,X#';
  150.     quickmacro:=',,,,1111#,,1111#,,,**7';
  151.     digits:=4;
  152.     progress:=0;
  153.     ai:=true;
  154.     redialcount:=2;
  155.     redialprog:=0;
  156.     stripzeroes:=false;
  157.   end;
  158.   if not sosexist(scanfilename) then begin
  159.     say('Creating new scan file');
  160.     sosopen;
  161.     sosfcreate(scanfilename);
  162.     soswrite(@dumbrec,sizeof(dumbrec));
  163.     sosclose;
  164.   end;
  165.   if sosbfsize(scanfilename)<>sizeof(scantype) then fatalerror('Incompatible scan file ('+scanfilename+').');
  166.   sosopen;
  167.   sosfopen(scanfilename);
  168.   sosread(@curscan,sizeof(curscan));
  169.   sosclose;
  170. end;
  171.  
  172. procedure loadphonebook;
  173. var dumbrec, defrec, newrec :numberrec;
  174.     oldrec                  :oldnumberrec;
  175.     x                       :word;
  176.     s                       :string;
  177. begin
  178.   dumbrec.name:=scrambled(blankpbentry);
  179.   dumbrec.number:='';
  180.   defrec.name:=scrambled(pbk_defrec_name);
  181.   defrec.number:=scrambled(pbk_defrec_num);
  182.   if not sosexist(phonebookname) then begin
  183.     say('Creating new phone book');
  184.     sosopen;
  185.     sosfcreate(phonebookname);
  186.     soswrite(@defrec,sizeof(defrec));
  187.     for x:=1 to maxnums-1 do soswrite(@dumbrec,sizeof(dumbrec));
  188.     sosclose;
  189.   end;
  190.   {if sosbfsize(phonebookname)=oldpbooksize then begin
  191.     say('Old (BlueBEEP V0.07 or older) phone book detected');
  192.     say('Converting to new format');
  193.     assign(oldphonebook,phonebookname);
  194.     reset(oldphonebook);
  195.     assign(phonebook,tempfilename); DOLATER
  196.     rewrite(phonebook);
  197.     for x:=1 to maxnums do begin
  198.       read(oldphonebook,oldrec);
  199.       newrec.name:=oldrec.name;
  200.       s:=oldrec.number;
  201.       newrec.number:=s;
  202.       write(phonebook,newrec);
  203.     end;
  204.     close(oldphonebook);
  205.     close(phonebook);
  206.     erase(oldphonebook);
  207.     rename(phonebook,phonebookname);
  208.   end;}
  209.   say('Allocating memory');
  210.   for x:=1 to maxnums do new(numbers[x]);
  211.   say('Loading Phone Book');
  212.   if sosbfsize(phonebookname)<>sizeof(numberrec)*maxnums then
  213.     fatalerror('Incompatible phone book file ('+phonebookname+').');
  214.   sosopen;
  215.   sosfopen(phonebookname);
  216.   for x:=1 to maxnums do sosread(numbers[x],sizeof(numberrec));
  217.   sosclose;
  218.   say('Unscrambling phone book');
  219.   for x:=1 to maxnums do begin
  220.     numbers[x]^.number:=scrambled(numbers[x]^.number);
  221.     numbers[x]^.name:=scrambled(numbers[x]^.name);
  222.   end;
  223.   curnum:=numbers[config.curnum]^;
  224. end;
  225.  
  226. procedure loadredbox;
  227. var dumbrec:redboxtype;
  228. begin
  229.   with dumbrec do begin
  230.     acts1:=1700;                    { red box default values }
  231.     acts2:=2200;
  232.     ipts1:=1500;
  233.     ipts2:=2200;
  234.     nonacts:=2200;
  235.   end;
  236.   if not sosexist(redboxfilename) then begin
  237.     say('Creating new Red Box file');
  238.     sosopen;
  239.     sosfcreate(redboxfilename);
  240.     soswrite(@dumbrec,sizeof(dumbrec));
  241.     sosclose;
  242.   end;
  243.   if sosbfsize(redboxfilename)<>sizeof(redboxtype) then fatalerror('Incompatible red box file ('+redboxfilename+').');
  244.   sosopen;
  245.   sosfopen(redboxfilename);
  246.   sosread(@curredbox,sizeof(curredbox));
  247.   sosclose;
  248. end;
  249.  
  250. procedure loadfreqtest;
  251. var dumbrec :freqtesttype;
  252. begin
  253.   with dumbrec do begin
  254.     freq11:=0;                    { wipe out - these are the default   }
  255.     freq12:=0;                    { values if no .fqt file is found    }
  256.     freq13:=0;                    { and a new one has to be created    }
  257.     len1:=0;
  258.     del1:=0;
  259.     freq21:=0;
  260.     freq22:=0;
  261.     freq23:=0;
  262.     len2:=0;
  263.     stepsize:=5;
  264.     numbertotest:='';
  265.   end;
  266.   if not sosexist(freqtestfilename) then begin
  267.     say('Creating new freq test file');
  268.     sosopen;
  269.     sosfcreate(freqtestfilename);
  270.     soswrite(@dumbrec,sizeof(dumbrec));
  271.     sosclose;
  272.   end;
  273.   if sosbfsize(freqtestfilename)<>sizeof(freqtesttype) then
  274.     fatalerror('Incompatible freq tester file ('+freqtestfilename+').');
  275.   sosopen;
  276.   sosfopen(freqtestfilename);
  277.   sosread(@curfreqtest,sizeof(curfreqtest));
  278.   sosclose;
  279. end;
  280.  
  281. procedure loadpulsedial;
  282. var dumbrec :pulsedialtype;
  283. begin
  284.   with dumbrec do begin
  285.     waitfordt:=1000;
  286.     pulse_mark:=50;
  287.     pulse_space:=50;
  288.     pulse_interdig:=500;
  289.     portadress:=$378;
  290.     hookbit:=0;
  291.     playrecbit:=1;
  292.     phonebit:=2;
  293.     accesstime:=100;
  294.     hanguptime:=1000;
  295.   end;
  296.   if not sosexist(pulsedialfilename) then begin
  297.     say('Creating new pulse dialing file');
  298.     sosopen;
  299.     sosfcreate(pulsedialfilename);
  300.     soswrite(@dumbrec,sizeof(dumbrec));
  301.     sosclose;
  302.   end;
  303.   if sosbfsize(pulsedialfilename)<>sizeof(pulsedialtype) then
  304.     fatalerror('Incompatible pulse dialer file ('+pulsedialfilename+').');
  305.   sosopen;
  306.   sosfopen(pulsedialfilename);
  307.   sosread(@curpulsedial,sizeof(curpulsedial));
  308.   sosclose;
  309.   pdial.waitfordt:=curpulsedial.waitfordt;
  310.   pdial.pulse_mark:=curpulsedial.pulse_mark;
  311.   pdial.pulse_space:=curpulsedial.pulse_space;
  312.   pdial.pulse_interdig:=curpulsedial.pulse_interdig;
  313.   pdial.portadress:=curpulsedial.portadress;
  314.   pdial.hookbit:=curpulsedial.hookbit;
  315.   pdial.playrecbit:=curpulsedial.playrecbit;
  316.   pdial.phonebit:=curpulsedial.phonebit;
  317. end;
  318.  
  319. procedure loadccc;
  320. var dumbset  :ccc_companytype;
  321.     x        :byte;
  322. begin
  323.   with dumbset do begin
  324.     name:=blankpbentry;
  325.     number:='';
  326.     numberfirst:=false;
  327.     startseq:='';
  328.     endseq:='';
  329.     numdelay:=0;
  330.     comeuptime:=0;
  331.     recorddelay:=0;
  332.     samplerate:=8000;
  333.     sampletime:=0;
  334.   end;
  335.   if not sosexist(cccfilename) then begin
  336.     say('Creating new Card Checker data');
  337.     sosopen;
  338.     sosfcreate(cccfilename);
  339.     for x:=1 to maxcompanies do soswrite(@dumbset,sizeof(dumbset));
  340.     sosclose;
  341.   end;
  342.   if sosbfsize(cccfilename)<>sizeof(ccc_companytype)*maxcompanies then
  343.     fatalerror('Incompatible Calling Card Checker file ('+cccfilename+').');
  344.   sosopen;
  345.   sosfopen(cccfilename);
  346.   sosseek(sizeof(ccc_companytype)*(config.curcompany-1));
  347.   sosread(@curccc,sizeof(curccc));
  348.   sosclose;
  349. end;
  350.  
  351. procedure loadcolors;
  352. var dumbset  :colortype;
  353. begin
  354.   with dumbset do begin
  355.     normal               := blue;
  356.     high                 := lightblue;
  357.     high2                := white;
  358.     super_high           := white;
  359.     dark                 := darkgray;
  360.     error                := white;
  361.     error_reverse        := red*16+white;
  362.     reverse              := blue*16+white;
  363.     reverse_high         := blue*16+yellow;
  364.     special              := cyan;
  365.     special_high         := lightcyan;
  366.     special_dark         := darkgray;
  367.     special_reverse      := cyan*16+white;
  368.     special_reverse_high := cyan*16+yellow;
  369.     status               := blue*16+white;
  370.     status_high          := blue*16+yellow;
  371.     win_border_1         := lightcyan;
  372.     win_border_2         := lightblue;
  373.     win_border_3         := blue;
  374.     win_text             := lightblue;
  375.     win_text_high        := lightcyan;
  376.     win_hilight          := blue*16+white;
  377.     win_hilight_high     := blue*16+yellow;
  378.     win_item             := lightcyan;
  379.     win_arrows           := blue*16+lightblue;
  380.     win_fill             := blue;
  381.     win_error            := lightred;
  382.     win_title            := lightcyan;
  383.     win_background       := black;
  384.     knob_active          := blue*16+white;
  385.     knob_inactive        := lightblue;
  386.     shadow               := darkgray;
  387.     help_normal          := blue*16+white;
  388.     help_high            := blue*16+yellow;
  389.     help_border_1        := blue*16+lightblue;
  390.     help_border_2        := blue*16+lightblue;
  391.     help_border_3        := blue*16+lightblue;
  392.     help_title           := blue*16+lightred;
  393.     help_index           := cyan*16+black;
  394.     help_selected_index  := cyan*16+white;
  395.     inputfield           := cyan*16+white;
  396.     infoline             := blue*16+white;
  397.     infoline_high        := blue*16+yellow;
  398.     progressbar          := blue*16+white;
  399.     keypad_pressed       := blue*16+white;
  400.     keypad_released      := lightcyan;
  401.     titlebox             := blue*16;
  402.     titlebox_border      := blue*16+lightblue;
  403.     titlebox_high        := blue*16+white;
  404.     titlebox_inverse     := lightblue;
  405.     titlebox_title       := blue*16+yellow;
  406.     worldtime_ahead      := yellow;
  407.   end;
  408.   if not sosexist(colorfilename) then begin
  409.     say('Creating new color file');
  410.     sosopen;
  411.     sosfcreate(colorfilename);
  412.     soswrite(@dumbset,sizeof(dumbset));
  413.     sosclose;
  414.   end;
  415.   if sosbfsize(colorfilename)<>sizeof(colortype) then fatalerror('Incompatible color file ('+colorfilename+').');
  416.   sosopen;
  417.   sosfopen(colorfilename);
  418.   sosread(@colors,sizeof(colors));
  419.   sosclose;
  420. end;
  421.  
  422. procedure showvideo;
  423. begin
  424.   if parameter('/FORCEVMEMLO') then begin
  425.     {say('Video memory forced to $B000');}
  426.     vadr:=$B000;
  427.     exit;
  428.   end;
  429.   if parameter('/FORCEVMEMHI') then begin
  430.     {say('Video memory forced to $B800');}
  431.     vadr:=$B800;
  432.     exit;
  433.   end;
  434.   {say('Detected '+videocards[card]+' adapter w/');
  435.   if vcolor then write('color') else write('mono');
  436.   write(' scrn, video seg @ ');
  437.   if vadr=$B800 then write('$B800') else write('$B000');}
  438. end;
  439.  
  440. procedure loaddtl;
  441. var dumbset  :dtltype;
  442.     x        :byte;
  443. begin
  444.   with dumbset do begin
  445.     name:='OFF';
  446.     note:='Do not convert number at all';
  447.     local:='&1';            { Make dumb defaults                 }
  448.     global:='&1';
  449.     special:='&1';
  450.     autolocal:='';
  451.   end;
  452.   if not sosexist(dtlfilename) then begin
  453.     say('Creating new Dial Translation file');
  454.     sosopen;
  455.     sosfcreate(dtlfilename);
  456.     soswrite(@dumbset,sizeof(dumbset));
  457.     with dumbset do begin
  458.       name:='-Unused-';
  459.       note:='Describe translation here';
  460.       local:='';
  461.       global:='';
  462.       special:='';
  463.       autolocal:='';
  464.     end;
  465.     for x:=1 to maxdtlsets-1 do soswrite(@dumbset,sizeof(dumbset));
  466.     sosclose;
  467.   end;
  468.   if sosbfsize(dtlfilename)<>(maxdtlsets*sizeof(dtltype)) then
  469.     fatalerror('Incompatible Dial Translation file ('+dtlfilename+').');
  470.   sosopen;
  471.   sosfopen(dtlfilename);
  472.   sosseek(sizeof(dtltype)*(config.activedtl-1));
  473.   sosread(@curdtl,sizeof(curdtl));
  474.   sosclose;
  475. end;
  476.  
  477. procedure loadccodes;
  478. var x :word;
  479. begin
  480.   if not sosexist(ccodefilename) then
  481.     fatalerror('Country Code database ['+ccodefilename+'] not found! Recompile & add.');
  482.   ccodecnt:=round(sosbfsize(ccodefilename)/sizeof(ccodetype));
  483.   sosopen;
  484.   sosfopen(ccodefilename);
  485.   for x:=1 to ccodecnt do begin
  486.     new(ccodes[x]);
  487.     sosread(ccodes[x],sizeof(ccodetype));
  488.   end;
  489.   sosclose;
  490. end;
  491.  
  492. procedure initnumflags;
  493. var x:word;
  494. begin
  495.   for x:=1 to maxnums do numflags[x]:=false;
  496. end;
  497.  
  498. procedure init(project:string);
  499. begin
  500.   checkbreak:=false;
  501.   oldattr:=textattr;
  502.   showvideo;
  503.   new(dossave);
  504.   move(mem[vadr:0],dossave^,4000);
  505.   oldx:=wherex; oldy:=wherey;
  506.   colors.error:=white;                 { In case of error on initialisation,  }
  507.   colors.error_reverse:=red*16+white;  { show error messages in default color }
  508.   colors.infoline:=blue*16+white;      { set infoline default color           }
  509.   colors.inputfield:=yellow;
  510.   textattr:=cyan;
  511.   setcursorsize($32,$32);
  512.   writeln('Welcome to BlueBEEP v',version,' (C) 1993-1994 by Onkel Dittmeyer');
  513.   writeln;
  514.   writeln('Preinitialization in process!');
  515.   sos.masterfile:=fexpand(paramstr(0));
  516.   sos.masterindex:=exesize;
  517.   writeln('Executable file at ',sos.masterfile);
  518.   writeln('Overlay index at offset ',sos.masterindex);
  519.   if parameter('/?') then paraminfo;
  520.   if parameter('/PLAINDOC') then convertdocs;
  521.   if parameter('/CONVCC') then convertccodes;
  522.   if parameter('/ADD') then begin wildadd(sos.masterfile,paramstr(2)); halt; end;
  523.   if parameter('/DIR') then begin sosdir(sos.masterfile); halt; end;
  524.   clrscr;
  525.   if check_userid then begin
  526.     userid:=getenv('BBP_UID');
  527.     userpass:=uppercase(getenv('BBP_UPW'));
  528.     if userid='' then begin
  529.       writeln('You''re about loading up a NON-PUBLIC BETA RELEASE of ',project);
  530.       writeln;
  531.       writeln('A beta test key is required in order to start it up.');
  532.       writeln;
  533.       writeln('Your user ID was not found in the environment, please enter it now.');
  534.       writeln('Note: You can also put your ID into the environment by typing SET BBP_UID=<id>');
  535.       writeln('at the DOS prompt. For the password use SET BBP_UPW=<pw>.');
  536.       writeln;
  537.       write(' User ID: ');
  538.       userid:='';
  539.       edit(userid,40);
  540.       writeln;
  541.     end;
  542.     if userpass='' then begin
  543.       write('Password: ');
  544.       editpass(userpass,40);
  545.       writeln;
  546.     end;
  547.     recheck_id;
  548.   end;
  549.   for x:=24 downto 3 do begin
  550.     move(beeplogo[160*3],mem[vadr:x*160],4000-(x*160));
  551.     delayms(10);
  552.   end;
  553.   move(beeplogo,mem[vadr:0],4000);
  554.   bottominfo(' BlueBEEP is initializing, please hold...');
  555.   textattr:=lightcyan;
  556.   center(17,'BlueBEEP! v     ');
  557.   center(18,'Copyright (C) 1993-1994 by Onkel Dittmeyer');
  558.   center(19,'All Rights Are Lust!');
  559.   center(21,'Released: '+releasedate);
  560.   textattr:=lightcyan;
  561.   gotoxy(43,17);
  562.   write(version);
  563.   setcursorsize($6,$7);
  564.   say(project+' firing up on '+date+' at '+time(true));
  565.   say('Free heap memory '+stg(memavail)+', maxavail block '+stg(maxavail)+' bytes');
  566.   say('Initializing Sound Card');        soundinit;
  567.   say('Loading Configuration');          loadconfig;
  568.   say('Loading Dial Sets');              loaddialsets;
  569.   say('Loading Trunks');                 loadtrunks;
  570.   say('Initializing phonetags');         initnumflags;
  571.   loadphonebook;
  572.   say('Loading Scan');                   loadscan;
  573.   say('Loading Red Box');                loadredbox;
  574.   say('Loading Frequency Test');         loadfreqtest;
  575.   say('Loading Pulse Dialer');           loadpulsedial;
  576.   say('Loading Card Checker');           loadccc;
  577.   say('Loading Colors');                 loadcolors;
  578.   say('Loading Dial Translation'); loaddtl;
  579.   say('Loading Country Codes');          loadccodes;
  580.   if parameter('/NOMODEM') then begin
  581.     say('Modem FORCED off');
  582.     config.modem:=false;
  583.   end;
  584.   if config.modem then begin
  585.     say('Initializing Modem           ');
  586.     initmodem;
  587.   end;
  588.   if parameter('/NOMOUSE') then begin
  589.     say('Mouse FORCED off');
  590.     mousepresent:=false;
  591.   end else begin
  592.     say('Detecting Mouse');
  593.     mousepresent:=initmouse;
  594.     if mousepresent then mouseoff;
  595.   end;
  596.   if not(parameter('/NOMOUSE')) then
  597.     if mousepresent then say('Mouse driver detected')
  598.       else say('Mouse driver not detected');
  599.   say('Initialisation Complete at '+time(true));
  600.   if parameter('/DEBUG') then begin
  601.     write('Press [ENTER]...');
  602.     readln;
  603.   end;
  604.   if paramcount>0 then if config.password<>'' then begin
  605.     writeln;
  606.     writeln('Can''t use command line parameters when password protection');
  607.     writeln('is ON. Start BlueBEEP without parms and remove password lock.');
  608.     writeln;
  609.     halt(0);
  610.   end;
  611.   say('" Hire Onkel Dittmeyer " release - Check docs for details.');
  612.   bottominfo(' BlueBEEP is initializing, please hold... OKAY!');
  613. end;
  614.  
  615. procedure startup;
  616. begin
  617.   curpos:=1;
  618.   textattr:=yellow;
  619.   setcursorsize($32,$32);
  620.   if parameter('/A') then phreakout;
  621.   if parameter('/S') then scanmode;
  622.   if parameter('/R') then redboxit;
  623.   if parameter('/T') then cardtalker;
  624.   if parameter('/F') then freqtester;
  625.   if parameter('/C') then cardchecker;
  626.   {if parameter('/TERM') then tinyterm;}
  627.   if parameter('/EXEC') then loadscript(uppercase(paramstr(2)));
  628.   openbox(1,1,1,80,3,false,true,true);
  629.   ignbox(1);
  630.   if config.password<>'' then passwordcheck;
  631.   if mousepresent then mouserange(1,1,80,25);
  632.   item[1]:=' ~S~etup         ';
  633.   item[2]:=' ~T~ools         ';
  634.   item[3]:=' ~P~HREAK OUT!   ';
  635.   item[4]:=' ~I~nfo          ';
  636.   item[5]:=' ~Q~uit       ';
  637.   itemcount:=5;
  638.   skip:=false;
  639.   for x:=1 to 5 do begin
  640.     gotoxy(((x-1)*(80 div itemcount))+3,2);
  641.     iwrite(item[x],x=curpos);
  642.   end;
  643. end;
  644. end.
  645.