| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754 |
- Listing:
- 1 (* Release 3.10 *)
- 2 (*-------------------------------------------------------------------------*
- 3 * *
- 4 * COMMUTIL.MOD - COMMS Toolkit utility functions *
- 5 * *
- 6 * COPYRIGHT (C) 1988..1992 Clarion Software Corporation. *
- 7 * All Rights Reserved *
- 8 * *
- 9 *--------------------------------------------------------------------------*)
- 10
- 11 IMPLEMENTATION MODULE CommUtil;
- 12 (*%F _OS2*)
- 13 IMPORT ComSetup,Filenames,FIO,FTSupport,IO,Kermit,Lib,MenuLib,MPRINTF,RS232,
- 14 ScriptProcessor,SPRINTF,Str,SYSTEM,Term,Timer,Window,WXModem,XModem,YModem;
- 15 FROM Window IMPORT Color;
- 16 FROM ScriptProcessor IMPORT ScriptStates;
- 17
- 18 CONST
- 19 BuffSize = 1024;
- 20 MaxHistory = 128;
- 21 Template = Window.WinDef(0,0,0,0,Yellow,Black,TRUE,FALSE,FALSE,TRUE,Window.SingleFrame,LightGray,Black);
- 22
- 23 TYPE
- 24 Addr = RECORD
- 25 CASE :BOOLEAN OF
- 26 TRUE : a : ADDRESS; |
- 27 FALSE : Offset,
- 28 Segment : CARDINAL; |
- 29 END;
- 30 END;
- 31
- 32 VAR
- 33 LastC,OldChar : CHAR;
- 34 Log,Prn : FIO.File;
- 35 Continue : PROC;
- 36 LastClock : Timer.ClockRec;
- 37 CRReceived : BOOLEAN;
- 38 BuffPtr,HistPtr : CARDINAL;
- 39 CBuffer : ARRAY[0..BuffSize-1] OF CHAR;
- 40 Buffer : ARRAY[0..260] OF CHAR;
- 41 History : ARRAY[0..MaxHistory] OF CHAR;
- 42
- 43 (*................................................*)
- 44
- 45 PROCEDURE Read(VAR c:CHAR);
- 46 BEGIN
- 47 IF ReadAgain THEN
- 48 c:=OldChar;
- 49 ReadAgain:=FALSE;
- 50 RETURN;
- 51 END;
- 52 FuncKeyTyped := NotRecognised;
- 53 c := IO.RdKey();
- 54 IF (c<>CHR(13)) AND ((c<' ') OR (c>'~')) THEN
- 55 IF c=0C THEN
- 56 c := IO.RdKey();
- 57 CASE ORD(c) OF
- 58 72 : FuncKeyTyped:=Cup; |
- 59 80 : FuncKeyTyped:=Cdown; |
- 60 75 : FuncKeyTyped:=Cleft; |
- 61 77 : FuncKeyTyped:=Cright; |
- 62 82 : FuncKeyTyped:=InsertKey; |
- 63 83 : FuncKeyTyped:=DeleteKey; |
- 64 15 : FuncKeyTyped:=BackTab; |
- 65 71 : FuncKeyTyped:=HomeKey; |
- 66 79 : FuncKeyTyped:=EndKey; |
- 67 73 : FuncKeyTyped:=PageUp; |
- 68 81 : FuncKeyTyped:=PageDown; |
- 69 59..68 : FuncKeyTyped:=FKey;
- 70 c:=CHR(ORD(c)-58); |
- 71 ELSE
- 72 FuncKeyTyped:=AltKey;
- 73 END;
- 74 ELSIF c=CHR(8) THEN
- 75 FuncKeyTyped := BackSpace;
- 76 ELSIF c=3C THEN
- 77 FuncKeyTyped := Etx;
- 78 ELSIF c=CHR(27) THEN
- 79 FuncKeyTyped := Escape;
- 80 ELSIF c=CHR(127) THEN
- 81 FuncKeyTyped := Del;
- 82 ELSIF c=CHR(9) THEN
- 83 FuncKeyTyped := Tab;
- 84 END;
- 85 END;
- 86 END Read;
- 87
- 88 (*........................................*)
- 89
- 90 PROCEDURE TwoDigits(c:CARDINAL);
- 91 BEGIN
- 92 IO.WrChar(CHR((c DIV 10)+48));
- 93 IO.WrChar(CHR((c MOD 10)+48));
- 94 END TwoDigits;
- 95
- 96 (*...............................................*)
- 97
- 98 PROCEDURE StatusLine(which:StatusFields);
- 99 VAR
- 100 Drive,Ext : ARRAY[0..3] OF CHAR;
- 101 Path : ARRAY[0..80] OF CHAR;
- 102 Name : ARRAY[0..12] OF CHAR;
- 103 BEGIN
- 104 Window.Use(StatW);
- 105 CASE which OF
- 106 logo : Window.GotoXY(1,1);
- 107 IO.WrStr(' JPI-Comms Toolkit 3.0 ³ ') |
- 108 carrier : Window.GotoXY(26,1);
- 109 IF RS232.CarrierDetect() THEN
- 110 IO.WrStr('DCD ³ ');
- 111 ELSE
- 112 IO.WrStr(' ³ ');
- 113 END; |
- 114 script : Name:='';
- 115 IF ScriptFile[0]<>0C THEN
- 116 IF Filenames.ParseFilename(ScriptFile,Drive,Path,Name,Ext) THEN
- 117 Drive:='';
- 118 Path:='';
- 119 Filenames.MakeFilename(Drive,Path,Name,Ext,Name);
- 120 END;
- 121 END;
- 122 Window.GotoXY(32,1);
- 123 MPRINTF.PrintF1('%-12s ³ ',Name); |
- 124 capture : Name:='';
- 125 Window.GotoXY(47,1);
- 126 IF CaptureFile[0]<>0C THEN
- 127 IF Filenames.ParseFilename(CaptureFile,Drive,Path,Name,Ext) THEN
- 128 Drive:='';
- 129 Path:='';
- 130 Filenames.MakeFilename(Drive,Path,Name,Ext,Name);
- 131 END;
- 132 END;
- 133 MPRINTF.PrintF1('%-12s ³ ',Name); |
- 134 emul : Window.GotoXY(62,1);
- 135 CASE Term.Emulation() OF
- 136 Term.EmVT100 : IO.WrStr('VT100 ³ ') |
- 137 Term.EmVT52 : IO.WrStr('VT52 ³ ') |
- 138 Term.EmANSI : IO.WrStr('ANSI ³ ') |
- 139 END; |
- 140 time : IF LastClock.Seconds<>Timer.Clock.Seconds THEN
- 141 Window.GotoXY(70,1);
- 142 TwoDigits(Timer.Clock.Hours);
- 143 IO.WrStr(':');
- 144 TwoDigits(Timer.Clock.Minutes);
- 145 IO.WrStr('.');
- 146 TwoDigits(Timer.Clock.Seconds);
- 147 END; |
- 148 END;
- 149 Window.Use(TermW);
- 150 END StatusLine;
- 151
- 152 (*................................................*)
- 153
- 154 PROCEDURE CheckHistory(VAR s:ARRAY OF CHAR):BOOLEAN;
- 155 VAR
- 156 hc,c : CHAR;
- 157 HistLnth,Lnth : CARDINAL;
- 158 BEGIN
- 159 Lnth := Str.Length(s);
- 160 HistLnth:=HistPtr;
- 161 IF (HistLnth<Lnth) OR (HistLnth=0) THEN
- 162 RETURN(FALSE);
- 163 END;
- 164 WHILE Lnth>0 DO
- 165 DEC(Lnth);
- 166 DEC(HistLnth);
- 167 IF CAP(s[Lnth])<>CAP(History[HistLnth]) THEN
- 168 RETURN(FALSE);
- 169 END;
- 170 END;
- 171 HistPtr := 0;
- 172 RETURN TRUE;
- 173 END CheckHistory;
- 174
- 175 (*.............................................*)
- 176
- 177 PROCEDURE GetHistoryString(VAR s:ARRAY OF CHAR):CARDINAL;
- 178 VAR
- 179 Lnth : CARDINAL;
- 180 BEGIN
- 181 IF HistPtr>10 THEN
- 182 Lnth:=10;
- 183 ELSE
- 184 Lnth:=HistPtr;
- 185 END;
- 186 Lib.Move(ADR(History[HistPtr-Lnth]),ADR(s),Lnth);
- 187 s[Lnth] := 0C;
- 188 HistPtr := 0;
- 189 CRReceived := FALSE;
- 190 RETURN Lnth;
- 191 END GetHistoryString;
- 192
- 193 (*.............................................*)
- 194
- 195 PROCEDURE StoreHistory(c:CHAR);
- 196 BEGIN
- 197 IF HistPtr<MaxHistory THEN
- 198 IF (c=CHR(13)) OR (c=CHR(10)) THEN
- 199 CRReceived := TRUE;
- 200 ELSIF c=0C THEN
- 201 CRReceived := FALSE;
- 202 HistPtr := 0;
- 203 ELSE
- 204 IF CRReceived THEN
- 205 HistPtr:=0;
- 206 END;
- 207 CRReceived := FALSE;
- 208 History[HistPtr] := c;
- 209 INC(HistPtr);
- 210 END;
- 211 IF (ScriptProcessor.ScriptState=Waiting) AND (CheckHistory(ScriptProcessor.WaitString)) THEN
- 212 ScriptProcessor.ScriptState := WaitSuccess;
- 213 END;
- 214 IF ScriptProcessor.WhenProcessing AND (ScriptProcessor.ScriptState=Running) AND CheckHistory(ScriptProcessor.WhenString) THEN
- 215 Lib.Move(ADR(ScriptProcessor.WhenAction),ADR(ScriptProcessor.TransmitString),81);
- 216 ScriptProcessor.TxPtr := 0;
- 217 ScriptProcessor.ScriptState := Transmitting;
- 218 END;
- 219 END;
- 220 END StoreHistory;
- 221
- 222 (*.............................................*)
- 223
- 224 PROCEDURE StoreChar(c:CHAR);
- 225 CONST
- 226 HalfBuffer = BuffSize DIV 2;
- 227 BEGIN
- 228 IF (c<>0C) AND (c<>CHR(26)) THEN
- 229 IF c=CHR(8) THEN
- 230 IF BuffPtr>0 THEN
- 231 DEC(BuffPtr);
- 232 END;
- 233 IF HistPtr>0 THEN
- 234 DEC(HistPtr);
- 235 END;
- 236 ELSE
- 237 IF (c=CHR(10)) AND (LastC<>CHR(13)) THEN
- 238 StoreChar(CHR(13));
- 239 END;
- 240 StoreHistory(c);
- 241 LastC := c;
- 242 CBuffer[BuffPtr] := c;
- 243 INC(BuffPtr);
- 244 IF BuffPtr=BuffSize THEN
- 245 IF LogMode=OpenLogging THEN
- 246 FIO.WrBin(Log,CBuffer,HalfBuffer);
- 247 END;
- 248 Lib.Move(ADR(CBuffer[HalfBuffer]),ADR(CBuffer),HalfBuffer);
- 249 BuffPtr := HalfBuffer;
- 250 END;
- 251 END;
- 252 END;
- 253 END StoreChar;
- 254
- 255 (*................................................*)
- 256
- 257 PROCEDURE FlushBuffer;
- 258 BEGIN
- 259 IF BuffPtr>0 THEN
- 260 IF LogMode=OpenLogging THEN
- 261 FIO.WrBin(Log,CBuffer,BuffPtr);
- 262 END;
- 263 BuffPtr := 0;
- 264 END;
- 265 END FlushBuffer;
- 266
- 267 (*................................................*)
- 268
- 269 PROCEDURE SetLogMode(Cmd:LogCommands);
- 270 BEGIN
- 271 CASE Cmd OF
- 272 OpenLogging : IF LogMode=CloseLogging THEN
- 273 Log := FIO.Open(CaptureFile);
- 274 IF FIO.IOresult()=0 THEN
- 275 FIO.Seek(Log,FIO.Size(Log))
- 276 ELSE
- 277 Log := FIO.Create(CaptureFile)
- 278 END;
- 279 FlushBuffer;
- 280 LogMode := OpenLogging;
- 281 StatusLine(capture);
- 282 END; |
- 283 CloseLogging : IF LogMode<>CloseLogging THEN
- 284 FlushBuffer;
- 285 FIO.Close(Log);
- 286 LogMode := CloseLogging;
- 287 CaptureFile := '';
- 288 StatusLine(capture);
- 289 END; |
- 290 SuspendLogging : IF LogMode=OpenLogging THEN
- 291 FlushBuffer;
- 292 LogMode:=Cmd;
- 293 END; |
- 294 ResumeLogging : IF LogMode=SuspendLogging THEN
- 295 FlushBuffer;
- 296 LogMode:=OpenLogging;
- 297 END; |
- 298 END;
- 299 END SetLogMode;
- 300
- 301 (*................................................*)
- 302
- 303 PROCEDURE Screen(Ch:CHAR);
- 304 VAR
- 305 i,oldx : CARDINAL;
- 306 BEGIN
- 307 oldx := Window.WhereX();
- 308 Ch := CHR(CARDINAL(BITSET(ORD(Ch))*BITSET(7FH)));
- 309 StoreChar(Ch);
- 310 IF Printing AND (Ch<>CHR(10)) THEN
- 311 FIO.WrChar(Prn,Ch);
- 312 END;
- 313 WrChar(Ch);
- 314 END Screen;
- 315
- 316 (*................................................*)
- 317
- 318 PROCEDURE Printer(OnOff:BOOLEAN);
- 319 BEGIN
- 320 IF OnOff THEN
- 321 IF NOT Printing THEN
- 322 Prn := FIO.Open('PRN:');
- 323 Printing:=TRUE;
- 324 END
- 325 ELSIF Printing THEN
- 326 FIO.Close(Prn);
- 327 Printing:=FALSE;
- 328 END;
- 329 END Printer;
- 330
- 331 (*................................................*)
- 332
- 333 PROCEDURE ErrorMessage(s:ARRAY OF CHAR);
- 334 CONST
- 335 EscapeMsg = ' - Press <Esc>';
- 336 ErrTemplate = Window.WinDef(0,0,0,0,White,Red,TRUE,FALSE,FALSE,TRUE,Window.SingleFrame,White,Red);
- 337 VAR
- 338 c : CHAR;
- 339 ErrWinDef : Window.WinDef;
- 340 ErrWin : Window.WinType;
- 341 x,y,Lnth : CARDINAL;
- 342 BEGIN
- 343 Lnth := Str.Length(s)+Str.Length(EscapeMsg)+4;
- 344 x := Window.WhereX();
- 345 y := Window.WhereY();
- 346 Window.ConvertCoords(Window.Used(),x,y,x,y);
- 347 IF x+Lnth>79 THEN
- 348 x:=80-Lnth;
- 349 END;
- 350 IF y+3>23 THEN
- 351 y:=21;
- 352 END;
- 353 ErrWinDef := ErrTemplate;
- 354 ErrWinDef.Foreground := Colors.ErrFore;
- 355 ErrWinDef.Background := Colors.ErrBack;
- 356 ErrWinDef.FrameFore := Colors.ErrFrFore;
- 357 ErrWinDef.FrameBack := Colors.ErrFrBack;
- 358 WITH ErrWinDef DO
- 359 X1:=x;
- 360 Y1:=y;
- 361 X2:=x+Lnth-1;
- 362 Y2:=y+2;
- 363 END;
- 364 ErrWin := Window.Open(ErrWinDef);
- 365 Window.GotoXY(2,1);
- 366 IO.WrStr(s);
- 367 IO.WrStr(EscapeMsg);
- 368 c := IO.RdKey();
- 369 Window.Close(ErrWin);
- 370 END ErrorMessage;
- 371
- 372 (*................................................*)
- 373
- 374 PROCEDURE SendString(s:ARRAY OF CHAR);
- 375 VAR
- 376 c : CHAR;
- 377 i,p,Lnth : CARDINAL;
- 378 BEGIN
- 379 i:=0;
- 380 p:=0;
- 381 Lnth:=Str.Length(s);
- 382 WHILE i<Lnth DO
- 383 c:=s[i];
- 384 INC(i);
- 385 IF c='^' THEN
- 386 IF i=Lnth THEN
- 387 ErrorMessage('Badly formed ^? char in string.');
- 388 RETURN;
- 389 END;
- 390 c:=s[i];
- 391 INC(i);
- 392 IF (c>='@') AND (c<='_') THEN
- 393 c:=CHR(ORD(c)-64);
- 394 END;
- 395 ELSIF c='|' THEN
- 396 c := CHR(13);
- 397 ELSIF c='~' THEN
- 398 IF p>0 THEN
- 399 RS232.SerialWrite(FTSupport.FBuff,p);
- 400 END;
- 401 p:=0FFFFH;
- 402 Lib.Delay(500);
- 403 END;
- 404 IF p=0FFFFH THEN
- 405 p:=0;
- 406 ELSE
- 407 FTSupport.FBuff[p]:=c;
- 408 INC(p);
- 409 END;
- 410 END;
- 411 IF p>0 THEN
- 412 RS232.SerialWrite(FTSupport.FBuff,p);
- 413 END;
- 414 END SendString;
- 415
- 416 (*............................................*)
- 417
- 418 PROCEDURE TransmitMacro(MacroNo:CARDINAL);
- 419 BEGIN
- 420 SendString(ComSetup.Setup.Macros[MacroNo]);
- 421 END TransmitMacro;
- 422
- 423 (*............................................*)
- 424
- 425 PROCEDURE SelectFile(MenuX,MenuY:CARDINAL; Title,Wild:ARRAY OF CHAR;VAR f:ARRAY OF CHAR):INTEGER;
- 426 TYPE
- 427 ExtName = ARRAY[0..3] OF CHAR;
- 428 VAR
- 429 Menu : MenuLib.MenuRec;
- 430 Result : INTEGER;
- 431 Cnt,Base,Choice,
- 432 MenuItems : INTEGER;
- 433 List : ARRAY[0..99] OF FIO.PathTail;
- 434 Ext : ARRAY[0..99] OF ExtName;
- 435 Temp : ARRAY[0..14] OF CHAR;
- 436
- 437 (*. . . . . . . . . . . . . . . . . . . . . . . . .*)
- 438
- 439 PROCEDURE SortList;
- 440 (* Ok, I know.. A horrible little bubblesort - good enough for this*)
- 441 (* job though.. *)
- 442 VAR
- 443 i,Max : CARDINAL;
- 444 Swapped : BOOLEAN;
- 445 Temp : FIO.PathTail;
- 446 BEGIN
- 447 Max:=Cnt-1;
- 448 Swapped:=TRUE;
- 449 WHILE (Max>0) AND (Swapped) DO
- 450 i:=0;
- 451 Swapped:=FALSE;
- 452 WHILE i<Max DO
- 453 IF Str.Compare(List[i],List[i+1])>0 THEN
- 454 Temp:=List[i];
- 455 List[i]:=List[i+1];
- 456 List[i+1]:=Temp;
- 457 Swapped := TRUE;
- 458 END;
- 459 INC(i);
- 460 END;
- 461 DEC(Max);
- 462 END;
- 463 END SortList;
- 464
- 465 (*. . . . . . . . . . . . . . . . . . . . . . . . .*)
- 466
- 467 PROCEDURE GetList(VAR Wild:ARRAY OF CHAR):CARDINAL;
- 468 VAR
- 469 Found,GotExt : BOOLEAN;
- 470 i,Lnth,ExtLnth : CARDINAL;
- 471 Entry : FIO.DirEntry;
- 472 c : CHAR;
- 473 BEGIN
- 474 Cnt := 0;
- 475 Found := FIO.ReadFirstEntry(Wild,FIO.FileAttr{},Entry);
- 476 WHILE Found DO
- 477 i:=0;
- 478 GotExt:=FALSE;
- 479 ExtLnth:=0;
- 480 List[Cnt] := Entry.Name;
- 481 Lnth := Str.Length(List[Cnt]);
- 482 WHILE i<Lnth DO
- 483 c := List[Cnt,i];
- 484 IF GotExt THEN
- 485 Ext[Cnt,ExtLnth]:=c;
- 486 INC(ExtLnth);
- 487 ELSE
- 488 IF (c='.') THEN
- 489 List[Cnt,i]:=0C;
- 490 GotExt:=TRUE;
- 491 END;
- 492 END;
- 493 INC(i);
- 494 END;
- 495 Ext[Cnt,ExtLnth] := 0C;
- 496 INC(Cnt);
- 497 Found := FIO.ReadNextEntry(Entry);
- 498 END;
- 499 IF Cnt>0 THEN
- 500 SortList;
- 501 END;
- 502 RETURN Cnt;
- 503 END GetList;
- 504
- 505 (*. . . . . . . . . . . . . . . . . . . . . . . . .*)
- 506
- 507 PROCEDURE FillMenu;
- 508 VAR
- 509 i : INTEGER;
- 510 BEGIN
- 511 Menu.NumUsed := 0;
- 512 i:=0;
- 513 WHILE (Base+i<Cnt) AND (i<MenuItems) DO
- 514 SPRINTF.SPrintF2(' %u - %-9s',i+1,List[Base+i],Temp);
- 515 MenuLib.AddOption(Menu,Temp);
- 516 INC(i);
- 517 END;
- 518 END FillMenu;
- 519
- 520 (*. . . . . . . . . . . . . . . . . . . . . . . . .*)
- 521
- 522 BEGIN (* SelectFile *)
- 523 Cnt := GetList(Wild);
- 524 IF Cnt>0 THEN
- 525 IF Cnt>8 THEN
- 526 MenuItems:=8;
- 527 ELSE
- 528 MenuItems:=Cnt;
- 529 END;
- 530 Base:=0;
- 531 MenuLib.InitMenu(Menu,Title,MenuX,MenuY,14);
- 532 Menu.EscapeOK := TRUE;
- 533 Menu.ExitOnChar := TRUE;
- 534 Menu.PageKeysOK := (Cnt>8);
- 535 FillMenu;
- 536 MenuLib.DispMenu(Menu);
- 537 LOOP
- 538 Choice := MenuLib.MenuDrive(Menu);
- 539 IF Choice>=0 THEN
- 540 Filenames.MakeFilename('','',List[Base+Choice],Ext[Base+Choice],f);
- 541 Result := Choice;
- 542 EXIT;
- 543 ELSIF (Choice=-2) THEN (* PageUp *)
- 544 IF (Base>0) THEN
- 545 IF Base>=8 THEN
- 546 DEC(Base,8);
- 547 ELSE
- 548 Base:=0;
- 549 END;
- 550 FillMenu;
- 551 MenuLib.RepaintMenu(Menu);
- 552 END;
- 553 ELSIF (Choice=-3) THEN (* PageDn *)
- 554 IF (Base+8<Cnt) THEN
- 555 INC(Base,8);
- 556 IF Base+8>Cnt THEN
- 557 Base:=Cnt-8;
- 558 END;
- 559 FillMenu;
- 560 MenuLib.RepaintMenu(Menu);
- 561 END;
- 562 ELSE
- 563 Result:=Choice; EXIT (* escape *)
- 564 END;
- 565 END;
- 566 MenuLib.KillMenu(Menu);
- 567 RETURN Result;
- 568 ELSE
- 569 RETURN -999; (* no files! *)
- 570 END;
- 571 END SelectFile;
- 572
- 573 (*................................................*)
- 574
- 575 PROCEDURE ReadLine(VAR s:ARRAY OF CHAR; Max:CARDINAL);
- 576 VAR
- 577 Ch : CHAR;
- 578 Showit,FirstTime : BOOLEAN;
- 579 cx,x,y,Lnth : CARDINAL;
- 580 Temps : ARRAY[0..90] OF CHAR;
- 581 BEGIN
- 582 Lib.Fill(ADR(Temps),SIZE(Temps),' ');
- 583 Lib.Move(ADR(s),ADR(Temps),Str.Length(s));
- 584 x:=Window.WhereX(); y:=Window.WhereY(); Lnth:=Str.Length(s);
- 585 cx:=0; Showit:=TRUE; FirstTime:=TRUE;
- 586 REPEAT
- 587 IF Showit THEN
- 588 Window.GotoXY(x,y); IO.WrStr(Temps);
- 589 Showit := FALSE;
- 590 END;
- 591 IF cx>Lnth THEN cx:=Lnth END;
- 592 Window.GotoXY(x+cx,y);
- 593 Read(Ch);
- 594 CASE FuncKeyTyped OF
- 595 NotRecognised : IF (((Ch=' ') AND SpacesOK) OR ((Ch>' ') AND (Ch<='~'))) AND (cx<Max) THEN
- 596 IF (FirstTime) AND (Lnth>0) THEN
- 597 Lib.Fill(ADR(Temps),SIZE(Temps),' ');
- 598 Lnth := 0;
- 599 Showit := TRUE;
- 600 END;
- 601 IF cx<Lnth THEN
- 602 Showit := TRUE;
- 603 Lib.Move(ADR(Temps[cx]),ADR(Temps[cx+1]),Max-cx-1)
- 604 ELSE
- 605 IO.WrChar(Ch)
- 606 END;
- 607 Lnth := Lnth + ORD(Lnth<Max);
- 608 Temps[cx] := Ch;
- 609 INC(cx);
- 610 END; |
- 611 Cleft : IF cx>0 THEN
- 612 DEC(cx);
- 613 END; |
- 614 Cright : IF cx<Lnth THEN
- 615 INC(cx);
- 616 END; |
- 617 HomeKey : cx:=0; |
- 618 EndKey : cx:=Lnth; |
- 619 Escape : SpacesOK:=FALSE;
- 620 RETURN; |
- 621 Del,DeleteKey : IF cx<Lnth THEN
- 622 Showit := TRUE;
- 623 Lib.Move(ADR(Temps[cx+1]),ADR(Temps[cx]),Max-cx-1);
- 624 Temps[Max-1] := ' ';
- 625 DEC(Lnth);
- 626 END; |
- 627 BackSpace : IF cx>0 THEN
- 628 Showit := TRUE;
- 629 DEC(cx);
- 630 Lib.Move(ADR(Temps[cx+1]),ADR(Temps[cx]),Max-cx-1);
- 631 Temps[Max-1] := ' ';
- 632 DEC(Lnth);
- 633 END; |
- 634 END; (* cases *)
- 635 FirstTime := FALSE;
- 636 UNTIL Ch = CHR(13);
- 637 Temps[Lnth] := 0C;
- 638 Lib.Move(ADR(Temps),ADR(s),Lnth+1);
- 639 SpacesOK := FALSE;
- 640 END ReadLine;
- 641
- 642 (*.........................................................*)
- 643
- 644 PROCEDURE PushBack(c:CHAR);
- 645 BEGIN
- 646 OldChar := c;
- 647 ReadAgain := TRUE;
- 648 END PushBack;
- 649
- 650 (*.........................................................*)
- 651
- 652 PROCEDURE ReadString(x,y:CARDINAL;Title,Prompt:ARRAY OF CHAR;VAR Result:ARRAY OF CHAR);
- 653 VAR
- 654 Def : Window.WinDef;
- 655 Win : Window.WinType;
- 656 BEGIN
- 657 Def := Template;
- 658 WITH Def DO
- 659 X1:=x;
- 660 Y1:=y;
- 661 X2:=X1+69;
- 662 Y2:=Y1+2;
- 663 Foreground := Colors.PromptFore;
- 664 Background := Colors.PromptBack;
- 665 FrameFore := Colors.PromptFrFore;
- 666 FrameBack := Colors.PromptFrBack;
- 667 END;
- 668 Win := Window.Open(Def);
- 669 IF Title[0]<>0C THEN
- 670 Window.SetTitle(Win,Title,Window.LeftUpperTitle);
- 671 END;
- 672 Window.TextColor(Colors.PromptFore);
- 673 Window.GotoXY(1,1);
- 674 IO.WrStr(Prompt);
- 675 Window.TextColor(Colors.PromptHigh);
- 676 ReadLine(Result,HIGH(Result)+1);
- 677 Window.Close(Win);
- 678 END ReadString;
- 679
- 680 (*........................................*)
- 681
- 682 PROCEDURE PrepareTransferMenu(VAR Menu:MenuLib.MenuRec; Download:BOOLEAN);
- 683 VAR
- 684 Title : ARRAY[0..20] OF CHAR;
- 685 BEGIN
- 686 IF Download THEN
- 687 Title := 'Download Menu';
- 688 ELSE
- 689 Title := 'Upload Menu';
- 690 END;
- 691 MenuLib.InitMenu(Menu,Title,1,1,18);
- 692 Menu.EscapeOK := TRUE;
- 693 Menu.ExitOnChar := TRUE;
- 694 IF NOT Download THEN
- 695 MenuLib.AddOption(Menu,' A - ASCII ');
- 696 END;
- 697 MenuLib.AddOption(Menu,' X - Xmodem ');
- 698 MenuLib.AddOption(Menu,' W - WXmodem ');
- 699 MenuLib.AddOption(Menu,' Y - Ymodem ');
- 700 MenuLib.AddOption(Menu,' B - Batch Ymodem ');
- 701 MenuLib.AddOption(Menu,' K - Kermit ');
- 702 IF Download THEN
- 703 MenuLib.AddOption(Menu,' G - Ymodem-g ');
- 704 END;
- 705 MenuLib.DispMenu(Menu);
- 706 END PrepareTransferMenu;
- 707
- 708 (*................................................*)
- 709
- 710 PROCEDURE DoUpload;
- 711 VAR
- 712 Selection : INTEGER;
- 713 Result : CARDINAL;
- 714 DoIt : BOOLEAN;
- 715 Menu : MenuLib.MenuRec;
- 716 BEGIN
- 717 PrepareTransferMenu(Menu,FALSE);
- 718 REPEAT
- 719 Selection := MenuLib.MenuDrive(Menu);
- 720 IF Selection<0 THEN
- 721 DoIt := TRUE
- 722 ELSE
- 723 TransferFile[0]:=0C;
- 724 ReadString(2,Selection+3,'',' File? ',TransferFile);
- 725 DoIt := TransferFile[0]<>0C;
- 726 END;
- 727 UNTIL DoIt;
- 728 MenuLib.KillMenu(Menu);
- 729 CASE Selection OF
- 730 -1 : (* escape *); |
- 731 0 : Result := FTSupport.ASCIISend(TransferFile); |
- 732 1 : Result := XModem.XModemSend(TransferFile); |
- 733 2 : Result := WXModem.WXModemSend(TransferFile); |
- 734 3 : Result := YModem.YModemSend(TransferFile); |
- 735 4 : Result := YModem.YModemBatchSend(TransferFile); |
- 736 5 : Result := Kermit.KermitSend(TransferFile); |
- 737 END;
- 738 END DoUpload;
- 739
- 740 (*................................................*)
- 741
- 742 PROCEDURE DoDownload;
- 743 VAR
- 744 Selection : INTEGER;
- 745 Result : CARDINAL;
- 746 DoIt : BOOLEAN;
- 747 Menu : MenuLib.MenuRec;
- 748 BEGIN
- 749 PrepareTransferMenu(Menu,TRUE);
- 750 REPEAT
- 751 Selection := MenuLib.MenuDrive(Menu);
- 752 IF Selection<0 THEN
- 753 DoIt := TRUE;
- 754 ELSE
- 755 DoIt := TRUE;
- 756 IF Selection<3 THEN
- 757 TransferFile[0]:=0C;
- 758 ReadString(2,Selection+3,'',' File? ',TransferFile);
- 759 DoIt := TransferFile[0]<>0C;
- 760 END;
- 761 END;
- 762 UNTIL DoIt;
- 763 MenuLib.KillMenu(Menu);
- 764 CASE Selection OF
- 765 -1 : ; |
- 766 0 : Result := XModem.XModemReceive(TransferFile); |
- 767 1 : Result := WXModem.WXModemReceive(TransferFile); |
- 768 2 : Result := YModem.YModemReceive(TransferFile); |
- 769 3 : Result := YModem.YModemBatchReceive() |
- 770 4 : Result := Kermit.KermitReceive(); |
- 771 5 : Result := YModem.YModemGReceive() |
- 772 END;
- 773 END DoDownload;
- 774
- 775 (*................................................*)
- 776
- 777 PROCEDURE InitUtil;
- 778 BEGIN
- 779 (* Default IO routines *)
- 780 WrChar := IO.WrChar;
- 781 ScriptFile:='';
- 782 CaptureFile:='';
- 783 LogMode := CloseLogging;
- 784 HistPtr := 0;
- 785 BuffPtr := 0;
- 786 Printing := FALSE;
- 787 CRReceived := FALSE;
- 788 LastClock.Seconds := 0FFFFH;
- 789 LastC:=0C;
- 790 END InitUtil;
- 791
- 792 (*............................................*)
- 793
- 794
- 795 PROCEDURE IsColor () : BOOLEAN ;
- 796 VAR
- 797 R : SYSTEM.Registers ;
- 798 BEGIN
- 799 R.AH := 15 ;
- 800 Lib.Intr(R,10H) ;
- 801 RETURN (R.AL <> 0)AND(R.AL<> 2)AND(R.AL <> 5)AND(R.AL <> 6)AND(R.AL <> 7) ;
- 802 END IsColor ;
- 803
- 804 CONST
- 805 ColorColorDef = ColorDef(LightGray,Black, (* TermFore/Back *)
- 806 White,Blue, (* StatFore/Back *)
- 807 White,Blue, (* GenFore/Back *)
- 808 White,Blue, (* GenFrFore/Back *)
- 809 LightCyan,Black, (* PromptFore/Back *)
- 810 Yellow, (* PromptHigh *)
- 811 LightGray,Black, (* PromptFrFore/Back *)
- 812 White,Red, (* ErrFore/Back *)
- 813 White,Red, (* ErrFrFore/Back *)
- 814 Yellow,Black, (* MacroFore/Back *)
- 815 LightGray,Black, (* MacroFrFore/Back *)
- 816 White,Blue, (* MacroHighFore/Back *)
- 817 LightCyan,Black, (* MacroLowFore/Back *)
- 818 LightCyan,Black, (* FTStatFore/Back *)
- 819 LightGray,Black, (* FTStatFrFore/Back *)
- 820 Yellow,Red, (* FTStatHigh/Bar *)
- 821 LightCyan,Black, (* MenuFore/Back *)
- 822 LightGray,Black, (* MenuFrFore/Back *)
- 823 Yellow,Black, (* MenuHighFore/Back *)
- 824 White,Blue, (* MenuSelFore/Back *)
- 825 Yellow,Blue); (* MenuHSelFore/Back *)
- 826 MonoColorDef = ColorDef(LightGray,Black, (* TermFore/Back *)
- 827 Black,LightGray, (* StatFore/Back *)
- 828 Black,LightGray, (* GenFore/Back *)
- 829 White,Blue, (* GenFrFore/Back *)
- 830 LightGray,Black, (* PromptFore/Back *)
- 831 White, (* PromptHigh *)
- 832 LightGray,Black, (* PromptFrFore/Back *)
- 833 White,Black, (* ErrFore/Back *)
- 834 White,Black, (* ErrFrFore/Back *)
- 835 White,Black, (* MacroFore/Back *)
- 836 LightGray,Black, (* MacroFrFore/Back *)
- 837 Blue,Black, (* MacroHighFore/Back *)
- 838 LightGray,Black, (* MacroLowFore/Back *)
- 839 LightGray,Black, (* FTStatFore/Back *)
- 840 LightGray,Black, (* FTStatFrFore/Back *)
- 841 Yellow,Red, (* FTStatHigh/Bar *)
- 842 White,Black, (* MenuFore/Back *)
- 843 LightGray,Black, (* MenuFrFore/Back *)
- 844 White,Black, (* MenuHighFore/Back *)
- 845 Blue,Black, (* MenuSelFore/Back *)
- 846 Blue,Black); (* MenuHSelFore/Back *)
- 847
- 848 (*............................................*)
- 849
- 850 PROCEDURE Alarm;
- 851 VAR
- 852 i : CARDINAL;
- 853 BEGIN
- 854 FOR i:=0 TO 7 DO
- 855 Lib.Sound(300);
- 856 Lib.Delay(50);
- 857 Lib.NoSound;
- 858 Lib.Delay(50);
- 859 Lib.Sound(300);
- 860 Lib.Delay(50);
- 861 Lib.NoSound;
- 862 Lib.Delay(300);
- 863 END;
- 864 END Alarm;
- 865
- 866 (*...............................................*)
- 867
- 868 BEGIN (* CommUtil *)
- 869 IF IsColor() THEN
- 870 Colors := ColorColorDef;
- 871 ELSE
- 872 Colors := MonoColorDef;
- 873 END;
- 874 WITH Colors DO
- 875 MenuLib.MenuColors.NormFore := MenuFore;
- 876 MenuLib.MenuColors.NormBack := MenuBack;
- 877 MenuLib.MenuColors.FrameFore := MenuFrFore;
- 878 MenuLib.MenuColors.FrameBack := MenuFrBack;
- 879 MenuLib.MenuColors.HighFore := MenuHighFore;
- 880 MenuLib.MenuColors.HighBack := MenuHighBack;
- 881 MenuLib.MenuColors.SelFore := MenuSelFore;
- 882 MenuLib.MenuColors.SelBack := MenuSelBack;
- 883 MenuLib.MenuColors.HSelFore := MenuHSelFore;
- 884 MenuLib.MenuColors.HSelBack := MenuHSelBack;
- 885 END;
- 886 SpacesOK := FALSE;
- 887 ReadAgain := FALSE;
- 888 END CommUtil.
- 889
- 890 (*%E*)
- 891 (*%T _OS2*)
- 892 (* OS/2 version *)
- 893 IMPORT ComSetup,Filenames,FIO,FTSupport,IO,Kermit,Lib,MenuLib,MPRINTF,
- 894 RS232,ScriptProcessor,SPRINTF,Str,SYSTEM,Term,Timer,Vio,Window,
- 895 WXModem,XModem,YModem;
- 896 FROM Window IMPORT Color;
- ***** ^ duplicate identifier
- 897 FROM ScriptProcessor IMPORT ScriptStates;
- ***** ^ duplicate identifier
- 898
- 899 CONST
- 900 BuffSize = 1024;
- 901 MaxHistory = 128;
- 902 Template = Window.WinDef(0,0,0,0,Yellow,Black,TRUE,FALSE,FALSE,TRUE,Window.SingleFrame,LightGray,Black);
- ***** ^ not supported yet
- ***** ^ not supported yet
- ***** ^ undeclared identifier
- ***** ^ undeclared identifier
- ***** ^ not supported yet
- ***** ^ not supported yet
- ***** ^ undeclared identifier
- ***** ^ undeclared identifier
- 903
- 904 TYPE
- 905 Addr = RECORD
- 906 CASE :BOOLEAN OF
- ***** ^ not supported yet
- ***** ^ 'POINTER' expected
- 907 TRUE : a : ADDRESS; |
- 908 FALSE : Offset,
- 909 Segment : CARDINAL; |
- 910 END;
- 911 END;
- 912
- 913 VAR
- 914 LastC,OldChar : CHAR;
- 915 Log,Prn : FIO.File;
- 916 Continue : PROC;
- 917 LastClock : Timer.ClockRec;
- 918 CRReceived : BOOLEAN;
- 919 BuffPtr,HistPtr : CARDINAL;
- 920 CBuffer : ARRAY[0..BuffSize-1] OF CHAR;
- 921 Buffer : ARRAY[0..260] OF CHAR;
- 922 History : ARRAY[0..MaxHistory] OF CHAR;
- 923
- 924 (*................................................*)
- 925
- 926 PROCEDURE Read(VAR c:CHAR);
- 927 BEGIN
- 928 IF ReadAgain THEN
- 929 c:=OldChar;
- 930 ReadAgain:=FALSE;
- 931 RETURN;
- 932 END;
- 933 FuncKeyTyped := NotRecognised;
- 934 c := IO.RdKey();
- 935 IF (c<>CHR(13)) AND ((c<' ') OR (c>'~')) THEN
- 936 IF c=0C THEN
- 937 c := IO.RdKey();
- 938 CASE ORD(c) OF
- 939 72 : FuncKeyTyped:=Cup; |
- 940 80 : FuncKeyTyped:=Cdown; |
- 941 75 : FuncKeyTyped:=Cleft; |
- 942 77 : FuncKeyTyped:=Cright; |
- 943 82 : FuncKeyTyped:=InsertKey; |
- 944 83 : FuncKeyTyped:=DeleteKey; |
- 945 15 : FuncKeyTyped:=BackTab; |
- 946 71 : FuncKeyTyped:=HomeKey; |
- 947 79 : FuncKeyTyped:=EndKey; |
- 948 73 : FuncKeyTyped:=PageUp; |
- 949 81 : FuncKeyTyped:=PageDown; |
- 950 59..68 : FuncKeyTyped:=FKey;
- 951 c := CHR(ORD(c)-58); |
- 952 ELSE
- 953 FuncKeyTyped:=AltKey;
- 954 END;
- 955 ELSIF c=CHR(8) THEN
- 956 FuncKeyTyped := BackSpace;
- 957 ELSIF c=3C THEN
- 958 FuncKeyTyped := Etx;
- 959 ELSIF c=CHR(27) THEN
- 960 FuncKeyTyped := Escape;
- 961 ELSIF c=CHR(127) THEN
- 962 FuncKeyTyped := Del;
- 963 ELSIF c=CHR(9) THEN
- 964 FuncKeyTyped := Tab;
- 965 END;
- 966 END;
- 967 END Read;
- 968
- 969 (*........................................*)
- 970
- 971 PROCEDURE TwoDigits(c:CARDINAL);
- 972 BEGIN
- 973 IO.WrChar(CHR((c DIV 10)+48));
- 974 IO.WrChar(CHR((c MOD 10)+48));
- 975 END TwoDigits;
- 976
- 977 (*...............................................*)
- 978
- 979 PROCEDURE StatusLine(which:StatusFields);
- 980 VAR
- 981 Drive,Ext : ARRAY[0..3] OF CHAR;
- 982 Path : ARRAY[0..80] OF CHAR;
- 983 Name : ARRAY[0..12] OF CHAR;
- 984 BEGIN
- 985 Window.Use(StatW);
- 986 CASE which OF
- 987 logo : Window.GotoXY(1,1);
- 988 IO.WrStr(' JPI-Comms Toolkit 3.0 ³ '); |
- 989 carrier : Window.GotoXY(26,1);
- 990 IF RS232.CarrierDetect() THEN
- 991 IO.WrStr('DCD ³ ');
- 992 ELSE
- 993 IO.WrStr(' ³ ');
- 994 END; |
- 995 script : Name:='';
- 996 IF ScriptFile[0]<>0C THEN
- 997 IF Filenames.ParseFilename(ScriptFile,Drive,Path,Name,Ext) THEN
- 998 Drive:='';
- 999 Path:='';
- 1000 Filenames.MakeFilename(Drive,Path,Name,Ext,Name);
- 1001 END;
- 1002 END;
- 1003 Window.GotoXY(32,1);
- 1004 MPRINTF.PrintF1('%-12s ³ ',Name); |
- 1005 capture : Name:='';
- 1006 Window.GotoXY(47,1);
- 1007 IF CaptureFile[0]<>0C THEN
- 1008 IF Filenames.ParseFilename(CaptureFile,Drive,Path,Name,Ext) THEN
- 1009 Drive:='';
- 1010 Path:='';
- 1011 Filenames.MakeFilename(Drive,Path,Name,Ext,Name);
- 1012 END;
- 1013 END;
- 1014 MPRINTF.PrintF1('%-12s ³ ',Name); |
- 1015 emul : Window.GotoXY(62,1);
- 1016 CASE Term.Emulation() OF
- 1017 Term.EmVT100 : IO.WrStr('VT100 ³ '); |
- 1018 Term.EmVT52 : IO.WrStr('VT52 ³ '); |
- 1019 Term.EmANSI : IO.WrStr('ANSI ³ '); |
- 1020 END; |
- 1021 time : IF LastClock.Seconds<>Timer.Clock.Seconds THEN
- 1022 Window.GotoXY(70,1);
- 1023 TwoDigits(Timer.Clock.Hours);
- 1024 IO.WrStr(':');
- 1025 TwoDigits(Timer.Clock.Minutes);
- 1026 IO.WrStr('.');
- 1027 TwoDigits(Timer.Clock.Seconds);
- 1028 END; |
- 1029 END;
- 1030 Window.Use(TermW);
- 1031 END StatusLine;
- 1032
- 1033 (*................................................*)
- 1034
- 1035 PROCEDURE CheckHistory(VAR s:ARRAY OF CHAR):BOOLEAN;
- 1036 VAR
- 1037 hc,c : CHAR;
- 1038 HistLnth,Lnth : CARDINAL;
- 1039 BEGIN
- 1040 Lnth := Str.Length(s);
- 1041 HistLnth:=HistPtr;
- 1042 IF (HistLnth<Lnth) OR (HistLnth=0) THEN
- 1043 RETURN(FALSE);
- 1044 END;
- 1045 WHILE Lnth>0 DO
- 1046 DEC(Lnth);
- 1047 DEC(HistLnth);
- 1048 IF CAP(s[Lnth])<>CAP(History[HistLnth]) THEN
- 1049 RETURN(FALSE);
- 1050 END;
- 1051 END;
- 1052 HistPtr := 0;
- 1053 RETURN TRUE;
- 1054 END CheckHistory;
- 1055
- 1056 (*.............................................*)
- 1057
- 1058 PROCEDURE GetHistoryString(VAR s:ARRAY OF CHAR):CARDINAL;
- 1059 VAR
- 1060 Lnth : CARDINAL;
- 1061 BEGIN
- 1062 IF HistPtr>10 THEN
- 1063 Lnth:=10;
- 1064 ELSE
- 1065 Lnth:=HistPtr;
- 1066 END;
- 1067 Lib.Move(ADR(History[HistPtr-Lnth]),ADR(s),Lnth);
- 1068 s[Lnth] := 0C;
- 1069 HistPtr := 0;
- 1070 CRReceived := FALSE;
- 1071 RETURN Lnth;
- 1072 END GetHistoryString;
- 1073
- 1074 (*.............................................*)
- 1075
- 1076 PROCEDURE StoreHistory(c:CHAR);
- 1077 BEGIN
- 1078 IF HistPtr<MaxHistory THEN
- 1079 IF (c=CHR(13)) OR (c=CHR(10)) THEN
- 1080 CRReceived := TRUE
- 1081 ELSIF c=0C THEN
- 1082 CRReceived := FALSE;
- 1083 HistPtr := 0
- 1084 ELSE
- 1085 IF CRReceived THEN
- 1086 HistPtr:=0;
- 1087 END;
- 1088 CRReceived := FALSE;
- 1089 History[HistPtr] := c;
- 1090 INC(HistPtr);
- 1091 END;
- 1092 IF (ScriptProcessor.ScriptState=Waiting) AND (CheckHistory(ScriptProcessor.WaitString)) THEN
- 1093 ScriptProcessor.ScriptState := WaitSuccess;
- 1094 END;
- 1095 IF ScriptProcessor.WhenProcessing AND (ScriptProcessor.ScriptState=Running) AND CheckHistory(ScriptProcessor.WhenString) THEN
- 1096 Lib.Move(ADR(ScriptProcessor.WhenAction),ADR(ScriptProcessor.TransmitString),81);
- 1097 ScriptProcessor.TxPtr := 0;
- 1098 ScriptProcessor.ScriptState := Transmitting;
- 1099 END;
- 1100 END;
- 1101 END StoreHistory;
- 1102
- 1103 (*.............................................*)
- 1104
- 1105 PROCEDURE StoreChar(c:CHAR);
- 1106 CONST
- 1107 HalfBuffer = BuffSize DIV 2;
- 1108 BEGIN
- 1109 IF (c<>0C) AND (c<>CHR(26)) THEN
- 1110 IF c=CHR(8) THEN
- 1111 IF BuffPtr>0 THEN
- 1112 DEC(BuffPtr);
- 1113 END;
- 1114 IF HistPtr>0 THEN
- 1115 DEC(HistPtr);
- 1116 END;
- 1117 ELSE
- 1118 IF (c=CHR(10)) AND (LastC<>CHR(13)) THEN
- 1119 StoreChar(CHR(13));
- 1120 END;
- 1121 StoreHistory(c);
- 1122 LastC := c;
- 1123 CBuffer[BuffPtr] := c;
- 1124 INC(BuffPtr);
- 1125 IF BuffPtr=BuffSize THEN
- 1126 IF LogMode=OpenLogging THEN
- 1127 FIO.WrBin(Log,CBuffer,HalfBuffer);
- 1128 END;
- 1129 Lib.Move(ADR(CBuffer[HalfBuffer]),ADR(CBuffer),HalfBuffer);
- 1130 BuffPtr := HalfBuffer;
- 1131 END;
- 1132 END;
- 1133 END;
- 1134 END StoreChar;
- 1135
- 1136 (*................................................*)
- 1137
- 1138 PROCEDURE FlushBuffer;
- 1139 BEGIN
- 1140 IF BuffPtr>0 THEN
- 1141 IF LogMode=OpenLogging THEN
- 1142 FIO.WrBin(Log,CBuffer,BuffPtr);
- 1143 END;
- 1144 BuffPtr := 0;
- 1145 END;
- 1146 END FlushBuffer;
- 1147
- 1148 (*................................................*)
- 1149
- 1150 PROCEDURE SetLogMode(Cmd:LogCommands);
- 1151 BEGIN
- 1152 CASE Cmd OF
- 1153 OpenLogging : IF LogMode=CloseLogging THEN
- 1154 Log := FIO.Open(CaptureFile);
- 1155 IF FIO.IOresult()=0 THEN
- 1156 FIO.Seek(Log,FIO.Size(Log))
- 1157 ELSE
- 1158 Log := FIO.Create(CaptureFile)
- 1159 END;
- 1160 FlushBuffer;
- 1161 LogMode := OpenLogging;
- 1162 StatusLine(capture);
- 1163 END; |
- 1164 CloseLogging : IF LogMode<>CloseLogging THEN
- 1165 FlushBuffer;
- 1166 FIO.Close(Log);
- 1167 LogMode := CloseLogging;
- 1168 CaptureFile := '';
- 1169 StatusLine(capture);
- 1170 END; |
- 1171 SuspendLogging : IF LogMode=OpenLogging THEN
- 1172 FlushBuffer;
- 1173 LogMode:=Cmd
- 1174 END; |
- 1175 ResumeLogging : IF LogMode=SuspendLogging THEN
- 1176 FlushBuffer;
- 1177 LogMode:=OpenLogging
- 1178 END; |
- 1179
- 1180 END;
- 1181 END SetLogMode;
- 1182
- 1183 (*................................................*)
- 1184
- 1185 PROCEDURE Screen(Ch:CHAR);
- 1186 VAR
- 1187 i,oldx : CARDINAL;
- 1188 BEGIN
- 1189 oldx := Window.WhereX();
- 1190 Ch := CHR(CARDINAL(BITSET(ORD(Ch))*BITSET(7FH)));
- 1191 StoreChar(Ch);
- 1192 IF Printing AND (Ch<>CHR(10)) THEN
- 1193 FIO.WrChar(Prn,Ch);
- 1194 END;
- 1195 WrChar(Ch);
- 1196 END Screen;
- 1197
- 1198 (*................................................*)
- 1199
- 1200 PROCEDURE Printer(OnOff:BOOLEAN);
- 1201 BEGIN
- 1202 IF OnOff THEN
- 1203 IF NOT Printing THEN
- 1204 Prn := FIO.Open('PRN:');
- 1205 Printing:=TRUE
- 1206 END
- 1207 ELSIF Printing THEN
- 1208 FIO.Close(Prn);
- 1209 Printing:=FALSE;
- 1210 END;
- 1211 END Printer;
- 1212
- 1213 (*................................................*)
- 1214
- 1215 PROCEDURE ErrorMessage(s:ARRAY OF CHAR);
- 1216 CONST
- 1217 EscapeMsg = ' - Press <Esc>';
- 1218 ErrTemplate = Window.WinDef(0,0,0,0,Window.White,Window.Red,TRUE,FALSE,FALSE,TRUE,Window.SingleFrame,Window.White,Window.Red);
- 1219 VAR
- 1220 c : CHAR;
- 1221 ErrWinDef : Window.WinDef;
- 1222 ErrWin : Window.WinType;
- 1223 x,y,Lnth : CARDINAL;
- 1224 BEGIN
- 1225 Lnth := Str.Length(s)+Str.Length(EscapeMsg)+4;
- 1226 x := Window.WhereX();
- 1227 y := Window.WhereY();
- 1228 Window.ConvertCoords(Window.Used(),x,y,x,y);
- 1229 IF x+Lnth>79 THEN
- 1230 x:=80-Lnth;
- 1231 END;
- 1232 IF y+3>23 THEN
- 1233 y:=21;
- 1234 END;
- 1235 ErrWinDef := ErrTemplate;
- 1236 ErrWinDef.Foreground := Colors.ErrFore;
- 1237 ErrWinDef.Background := Colors.ErrBack;
- 1238 ErrWinDef.FrameFore := Colors.ErrFrFore;
- 1239 ErrWinDef.FrameBack := Colors.ErrFrBack;
- 1240 WITH ErrWinDef DO
- 1241 X1:=x;
- 1242 Y1:=y;
- 1243 X2:=x+Lnth-1;
- 1244 Y2:=y+2;
- 1245 END;
- 1246 ErrWin := Window.Open(ErrWinDef);
- 1247 Window.GotoXY(2,1);
- 1248 IO.WrStr(s);
- 1249 IO.WrStr(EscapeMsg);
- 1250 c := IO.RdKey();
- 1251 Window.Close(ErrWin);
- 1252 END ErrorMessage;
- 1253
- 1254 (*................................................*)
- 1255
- 1256 PROCEDURE SendString(s:ARRAY OF CHAR);
- 1257 VAR
- 1258 c : CHAR;
- 1259 i,p,Lnth : CARDINAL;
- 1260 BEGIN
- 1261 i:=0;
- 1262 p:=0;
- 1263 Lnth:=Str.Length(s);
- 1264 WHILE i<Lnth DO
- 1265 c:=s[i];
- 1266 INC(i);
- 1267 IF c='^' THEN
- 1268 IF i=Lnth THEN
- 1269 ErrorMessage('Badly formed ^? char in string.');
- 1270 RETURN
- 1271 END;
- 1272 c:=s[i];
- 1273 INC(i);
- 1274 IF (c>='@') AND (c<='_') THEN
- 1275 c:=CHR(ORD(c)-64);
- 1276 END;
- 1277 ELSIF c='|' THEN
- 1278 c := CHR(13);
- 1279 ELSIF c='~' THEN
- 1280 IF p>0 THEN
- 1281 RS232.SerialWrite(FTSupport.FBuff,p);
- 1282 END;
- 1283 p:=0FFFFH;
- 1284 Lib.Delay(500);
- 1285 END;
- 1286 IF p=0FFFFH THEN
- 1287 p:=0
- 1288 ELSE
- 1289 FTSupport.FBuff[p]:=c; INC(p)
- 1290 END;
- 1291 END;
- 1292 IF p>0 THEN
- 1293 RS232.SerialWrite(FTSupport.FBuff,p);
- 1294 END;
- 1295 END SendString;
- 1296
- 1297 (*............................................*)
- 1298
- 1299 PROCEDURE TransmitMacro(MacroNo:CARDINAL);
- 1300 BEGIN
- 1301 SendString(ComSetup.Setup.Macros[MacroNo]);
- 1302 END TransmitMacro;
- 1303
- 1304 (*............................................*)
- 1305
- 1306 PROCEDURE SelectFile(MenuX,MenuY:CARDINAL; Title,Wild:ARRAY OF CHAR;VAR f:ARRAY OF CHAR):INTEGER;
- 1307 TYPE
- 1308 ExtName = ARRAY[0..3] OF CHAR;
- 1309 VAR
- 1310 Menu : MenuLib.MenuRec;
- 1311 Result : INTEGER;
- 1312 Cnt,Base,Choice,
- 1313 MenuItems : INTEGER;
- 1314 List : ARRAY[0..99] OF FIO.PathTail;
- 1315 Ext : ARRAY[0..99] OF ExtName;
- 1316 Temp : ARRAY[0..14] OF CHAR;
- 1317
- 1318 (*. . . . . . . . . . . . . . . . . . . . . . . . .*)
- 1319
- 1320 PROCEDURE SortList;
- 1321 (* Ok, I know.. A horrible little bubblesort - good enough for this job though.. *)
- 1322 VAR
- 1323 i,Max : CARDINAL;
- 1324 Swapped : BOOLEAN;
- 1325 Temp : FIO.PathTail;
- 1326 BEGIN
- 1327 Max:=Cnt-1;
- 1328 Swapped:=TRUE;
- 1329 WHILE (Max>0) AND (Swapped) DO
- 1330 i:=0;
- 1331 Swapped:=FALSE;
- 1332 WHILE i<Max DO
- 1333 IF Str.Compare(List[i],List[i+1])>0 THEN
- 1334 Temp:=List[i];
- 1335 List[i]:=List[i+1];
- 1336 List[i+1]:=Temp;
- 1337 Swapped := TRUE;
- 1338 END;
- 1339 INC(i);
- 1340 END;
- 1341 DEC(Max);
- 1342 END;
- 1343 END SortList;
- 1344
- 1345 (*. . . . . . . . . . . . . . . . . . . . . . . . .*)
- 1346
- 1347 PROCEDURE GetList(VAR Wild:ARRAY OF CHAR):CARDINAL;
- 1348 VAR
- 1349 Found,GotExt : BOOLEAN;
- 1350 i,Lnth,ExtLnth : CARDINAL;
- 1351 Entry : FIO.DirEntry;
- 1352 c : CHAR;
- 1353 BEGIN
- 1354 Cnt := 0;
- 1355 Found := FIO.ReadFirstEntry(Wild,FIO.FileAttr{},Entry);
- 1356 WHILE Found DO
- 1357 i:=0;
- 1358 GotExt:=FALSE;
- 1359 ExtLnth:=0;
- 1360 List[Cnt] := Entry.Name;
- 1361 Lnth := Str.Length(List[Cnt]);
- 1362 WHILE i<Lnth DO
- 1363 c := List[Cnt,i];
- 1364 IF GotExt THEN
- 1365 Ext[Cnt,ExtLnth]:=c;
- 1366 INC(ExtLnth);
- 1367 ELSE
- 1368 IF (c='.') THEN
- 1369 List[Cnt,i]:=0C; GotExt:=TRUE
- 1370 END;
- 1371 END;
- 1372 INC(i);
- 1373 END;
- 1374 Ext[Cnt,ExtLnth] := 0C;
- 1375 INC(Cnt);
- 1376 Found := FIO.ReadNextEntry(Entry);
- 1377 END;
- 1378 IF Cnt>0 THEN
- 1379 SortList;
- 1380 END;
- 1381 RETURN Cnt;
- 1382 END GetList;
- 1383
- 1384 (*. . . . . . . . . . . . . . . . . . . . . . . . .*)
- 1385
- 1386 PROCEDURE FillMenu;
- 1387 VAR
- 1388 i : INTEGER;
- 1389 BEGIN
- 1390 Menu.NumUsed := 0;
- 1391 i:=0;
- 1392 WHILE (Base+i<Cnt) AND (i<MenuItems) DO
- 1393 SPRINTF.SPrintF2(' %u - %-9s',i+1,List[Base+i],Temp);
- 1394 MenuLib.AddOption(Menu,Temp);
- 1395 INC(i);
- 1396 END;
- 1397 END FillMenu;
- 1398
- 1399 (*. . . . . . . . . . . . . . . . . . . . . . . . .*)
- 1400
- 1401 BEGIN (* SelectFile *)
- 1402 Cnt := GetList(Wild);
- 1403 IF Cnt>0 THEN
- 1404 IF Cnt>8 THEN
- 1405 MenuItems:=8;
- 1406 ELSE
- 1407 MenuItems:=Cnt;
- 1408 END;
- 1409 Base:=0;
- 1410 MenuLib.InitMenu(Menu,Title,MenuX,MenuY,14);
- 1411 Menu.EscapeOK := TRUE;
- 1412 Menu.ExitOnChar := TRUE;
- 1413 Menu.PageKeysOK := (Cnt>8);
- 1414 FillMenu;
- 1415 MenuLib.DispMenu(Menu);
- 1416 LOOP
- 1417 Choice := MenuLib.MenuDrive(Menu);
- 1418 IF Choice>=0 THEN
- 1419 Filenames.MakeFilename('','',List[Base+Choice],Ext[Base+Choice],f);
- 1420 Result := Choice;
- 1421 EXIT
- 1422 ELSIF (Choice=-2) THEN (* PageUp *)
- 1423 IF (Base>0) THEN
- 1424 IF Base>=8 THEN
- 1425 DEC(Base,8);
- 1426 ELSE
- 1427 Base:=0;
- 1428 END;
- 1429 FillMenu;
- 1430 MenuLib.RepaintMenu(Menu);
- 1431 END
- 1432 ELSIF (Choice=-3) THEN (* PageDn *)
- 1433 IF (Base+8<Cnt) THEN
- 1434 INC(Base,8);
- 1435 IF Base+8>Cnt THEN
- 1436 Base:=Cnt-8;
- 1437 END;
- 1438 FillMenu;
- 1439 MenuLib.RepaintMenu(Menu);
- 1440 END
- 1441 ELSE
- 1442 Result:=Choice;
- 1443 EXIT; (* escape *)
- 1444 END;
- 1445 END;
- 1446 MenuLib.KillMenu(Menu);
- 1447 RETURN Result
- 1448 ELSE
- 1449 RETURN -999 (* no files! *)
- 1450 END;
- 1451 END SelectFile;
- 1452
- 1453 (*................................................*)
- 1454
- 1455 PROCEDURE ReadLine(VAR s:ARRAY OF CHAR; Max:CARDINAL);
- 1456 VAR
- 1457 Ch : CHAR;
- 1458 Showit,FirstTime : BOOLEAN;
- 1459 cx,x,y,Lnth : CARDINAL;
- 1460 Temps : ARRAY[0..90] OF CHAR;
- 1461 BEGIN
- 1462 Lib.Fill(ADR(Temps),SIZE(Temps),' ');
- 1463 Lib.Move(ADR(s),ADR(Temps),Str.Length(s));
- 1464 x := Window.WhereX();
- 1465 y := Window.WhereY();
- 1466 Lnth:=Str.Length(s);
- 1467 cx:=0;
- 1468 Showit:=TRUE;
- 1469 FirstTime:=TRUE;
- 1470 REPEAT
- 1471 IF Showit THEN
- 1472 Window.GotoXY(x,y);
- 1473 IO.WrStr(Temps);
- 1474 Showit := FALSE;
- 1475 END;
- 1476 IF cx>Lnth THEN
- 1477 cx:=Lnth;
- 1478 END;
- 1479 Window.GotoXY(x+cx,y);
- 1480 Read(Ch);
- 1481 CASE FuncKeyTyped OF
- 1482 NotRecognised : IF (((Ch=' ') AND SpacesOK) OR ((Ch>' ') AND (Ch<='~'))) AND (cx<Max) THEN
- 1483 IF (FirstTime) AND (Lnth>0) THEN
- 1484 Lib.Fill(ADR(Temps),SIZE(Temps),' ');
- 1485 Lnth := 0;
- 1486 Showit := TRUE;
- 1487 END;
- 1488 IF cx<Lnth THEN
- 1489 Showit := TRUE;
- 1490 Lib.Move(ADR(Temps[cx]),ADR(Temps[cx+1]),Max-cx-1)
- 1491 ELSE
- 1492 IO.WrChar(Ch)
- 1493 END;
- 1494 Lnth := Lnth + ORD(Lnth<Max);
- 1495 Temps[cx] := Ch;
- 1496 INC(cx);
- 1497 END; |
- 1498 Cleft : IF cx>0 THEN
- 1499 DEC(cx);
- 1500 END; |
- 1501 Cright : IF cx<Lnth THEN
- 1502 INC(cx);
- 1503 END; |
- 1504 HomeKey : cx:=0; |
- 1505 EndKey : cx:=Lnth; |
- 1506 Escape : SpacesOK:=FALSE;
- 1507 RETURN; |
- 1508 Del,DeleteKey : IF cx<Lnth THEN
- 1509 Showit := TRUE;
- 1510 Lib.Move(ADR(Temps[cx+1]),ADR(Temps[cx]),Max-cx-1);
- 1511 Temps[Max-1] := ' ';
- 1512 DEC(Lnth);
- 1513 END; |
- 1514 BackSpace : IF cx>0 THEN
- 1515 Showit := TRUE;
- 1516 DEC(cx);
- 1517 Lib.Move(ADR(Temps[cx+1]),ADR(Temps[cx]),Max-cx-1);
- 1518 Temps[Max-1] := ' ';
- 1519 DEC(Lnth);
- 1520 END; |
- 1521 END; (*CASE*)
- 1522 FirstTime := FALSE;
- 1523 UNTIL Ch = CHR(13);
- 1524 Temps[Lnth] := 0C;
- 1525 Lib.Move(ADR(Temps),ADR(s),Lnth+1);
- 1526 SpacesOK := FALSE;
- 1527 END ReadLine;
- 1528
- 1529 (*.........................................................*)
- 1530
- 1531 PROCEDURE PushBack(c:CHAR);
- 1532 BEGIN
- 1533 OldChar := c;
- 1534 ReadAgain := TRUE;
- 1535 END PushBack;
- 1536
- 1537 (*.........................................................*)
- 1538
- 1539 PROCEDURE ReadString(x,y:CARDINAL; Title,Prompt:ARRAY OF CHAR;VAR Result:ARRAY OF CHAR);
- 1540 VAR
- 1541 Def : Window.WinDef;
- 1542 Win : Window.WinType;
- 1543 BEGIN
- 1544 Def := Template;
- 1545 WITH Def DO
- 1546 X1:=x;
- 1547 Y1:=y;
- 1548 X2:=X1+69;
- 1549 Y2:=Y1+2;
- 1550 Foreground := Colors.PromptFore;
- 1551 Background := Colors.PromptBack;
- 1552 FrameFore := Colors.PromptFrFore;
- 1553 FrameBack := Colors.PromptFrBack;
- 1554 END;
- 1555 Win := Window.Open(Def);
- 1556 IF Title[0]<>0C THEN
- 1557 Window.SetTitle(Win,Title,Window.LeftUpperTitle);
- 1558 END;
- 1559 Window.TextColor(Colors.PromptFore);
- 1560 Window.GotoXY(1,1); IO.WrStr(Prompt);
- 1561 Window.TextColor(Colors.PromptHigh);
- 1562 ReadLine(Result,HIGH(Result)+1);
- 1563 Window.Close(Win);
- 1564 END ReadString;
- 1565
- 1566 (*........................................*)
- 1567
- 1568 PROCEDURE PrepareTransferMenu(VAR Menu:MenuLib.MenuRec; Download:BOOLEAN);
- 1569 VAR
- 1570 Title : ARRAY[0..20] OF CHAR;
- 1571 BEGIN
- 1572 IF Download THEN
- 1573 Title := 'Download Menu'
- 1574 ELSE
- 1575 Title := 'Upload Menu'
- 1576 END;
- 1577 MenuLib.InitMenu(Menu,Title,1,1,18);
- 1578 Menu.EscapeOK := TRUE;
- 1579 Menu.ExitOnChar := TRUE;
- 1580 IF NOT Download THEN
- 1581 MenuLib.AddOption(Menu,' A - ASCII ');
- 1582 END;
- 1583 MenuLib.AddOption(Menu,' X - Xmodem ');
- 1584 MenuLib.AddOption(Menu,' W - WXmodem ');
- 1585 MenuLib.AddOption(Menu,' Y - Ymodem ');
- 1586 MenuLib.AddOption(Menu,' B - Batch Ymodem ');
- 1587 MenuLib.AddOption(Menu,' K - Kermit ');
- 1588 IF Download THEN
- 1589 MenuLib.AddOption(Menu,' G - Ymodem-g ');
- 1590 END;
- 1591 MenuLib.DispMenu(Menu);
- 1592 END PrepareTransferMenu;
- 1593
- 1594 (*................................................*)
- 1595
- 1596 PROCEDURE DoUpload;
- 1597 VAR
- 1598 Selection : INTEGER;
- 1599 Result : CARDINAL;
- 1600 DoIt : BOOLEAN;
- 1601 Menu : MenuLib.MenuRec;
- 1602 BEGIN
- 1603 PrepareTransferMenu(Menu,FALSE);
- 1604 REPEAT
- 1605 Selection := MenuLib.MenuDrive(Menu);
- 1606 IF Selection < 0 THEN
- 1607 DoIt := TRUE
- 1608 ELSE
- 1609 TransferFile[0]:=0C;
- 1610 ReadString(2,Selection+3,'',' File? ',TransferFile);
- 1611 DoIt := TransferFile[0] # 0C;
- 1612 END;
- 1613 UNTIL DoIt;
- 1614 MenuLib.KillMenu(Menu);
- 1615 CASE Selection OF
- 1616 -1 : (* escape *); |
- 1617 0 : Result := FTSupport.ASCIISend(TransferFile); |
- 1618 1 : Result := XModem.XModemSend(TransferFile); |
- 1619 2 : Result := WXModem.WXModemSend(TransferFile); |
- 1620 3 : Result := YModem.YModemSend(TransferFile); |
- 1621 4 : Result := YModem.YModemBatchSend(TransferFile); |
- 1622 5 : Result := Kermit.KermitSend(TransferFile); |
- 1623 END;
- 1624 END DoUpload;
- 1625
- 1626 (*................................................*)
- 1627
- 1628 PROCEDURE DoDownload;
- 1629 VAR
- 1630 Selection : INTEGER;
- 1631 Result : CARDINAL;
- 1632 DoIt : BOOLEAN;
- 1633 Menu : MenuLib.MenuRec;
- 1634 BEGIN
- 1635 PrepareTransferMenu(Menu,TRUE);
- 1636 REPEAT
- 1637 Selection := MenuLib.MenuDrive(Menu);
- 1638 IF Selection<0 THEN
- 1639 DoIt := TRUE
- 1640 ELSE
- 1641 DoIt := TRUE;
- 1642 IF Selection<3 THEN
- 1643 TransferFile[0]:=0C;
- 1644 ReadString(2,Selection+3,'',' File? ',TransferFile);
- 1645 DoIt := TransferFile[0]<>0C;
- 1646 END;
- 1647 END;
- 1648 UNTIL DoIt;
- 1649 MenuLib.KillMenu(Menu);
- 1650 CASE Selection OF
- 1651 -1 : ; |
- 1652 0 : Result := XModem.XModemReceive(TransferFile); |
- 1653 1 : Result := WXModem.WXModemReceive(TransferFile); |
- 1654 2 : Result := YModem.YModemReceive(TransferFile); |
- 1655 3 : Result := YModem.YModemBatchReceive() |
- 1656 4 : Result := Kermit.KermitReceive(); |
- 1657 5 : Result := YModem.YModemGReceive() |
- 1658 END;
- 1659 END DoDownload;
- 1660
- 1661 (*................................................*)
- 1662
- 1663 PROCEDURE InitUtil;
- 1664 BEGIN
- 1665 (* Default IO routines *)
- 1666 WrChar := IO.WrChar;
- 1667 ScriptFile:='';
- 1668 CaptureFile:='';
- 1669 LogMode := CloseLogging;
- 1670 HistPtr := 0;
- 1671 BuffPtr := 0;
- 1672 Printing := FALSE;
- 1673 CRReceived := FALSE;
- 1674 LastClock.Seconds := 0FFFFH;
- 1675 LastC:=0C;
- 1676 END InitUtil;
- 1677
- 1678 (*............................................*)
- 1679
- 1680 PROCEDURE IsColor () : BOOLEAN ;
- 1681 VAR
- 1682 m : Vio.MODEINFO;
- 1683 r : CARDINAL;
- 1684 BEGIN
- 1685 m.b := SIZE(m);
- 1686 r := Vio.GetMode(m,0);
- 1687 RETURN NOT (2 IN BITSET(m.type));
- 1688 END IsColor ;
- 1689
- 1690 CONST
- 1691 ColorColorDef = ColorDef(LightGray,Black,White,Blue,White,Blue,White,Blue,LightCyan,Black,Yellow,LightGray,Black,White,Red,
- 1692 White,Red,Yellow,Black,LightGray,Black,White,Blue,LightCyan,Black,LightCyan,Black,LightGray,Black,
- 1693 Yellow,Red,LightCyan,Black,LightGray,Black,Yellow,Black,White,Blue,Yellow,Blue);
- 1694 MonoColorDef = ColorDef(LightGray,Black,Black,LightGray,Black,LightGray,Black,LightGray,LightGray,Black,White,LightGray,
- 1695 Black,White,Black,White,Black,White,Black,LightGray,Black,Blue,Black,LightGray,Black,LightGray,
- 1696 Black,LightGray,Black,White,Black,LightGray,Black,LightGray,Black,White,Black,Blue,Black,Blue,Black);
- 1697
- 1698 (*...............................................*)
- 1699
- 1700 PROCEDURE Alarm;
- 1701 VAR
- 1702 i : CARDINAL;
- 1703 BEGIN
- 1704 FOR i:=0 TO 7 DO
- 1705 Lib.Speaker(300,50);
- 1706 Lib.Delay(50);
- 1707 Lib.Speaker(300,50);
- 1708 Lib.Delay(300);
- 1709 END;
- 1710 END Alarm;
- 1711
- 1712 (*...............................................*)
- 1713
- 1714 BEGIN (* CommUtil *)
- 1715 IF IsColor() THEN
- 1716 Colors := ColorColorDef
- 1717 ELSE
- 1718 Colors := MonoColorDef
- 1719 END;
- 1720 WITH Colors DO
- 1721 MenuLib.MenuColors.NormFore := MenuFore;
- 1722 MenuLib.MenuColors.NormBack := MenuBack;
- 1723 MenuLib.MenuColors.FrameFore := MenuFrFore;
- 1724 MenuLib.MenuColors.FrameBack := MenuFrBack;
- 1725 MenuLib.MenuColors.HighFore := MenuHighFore;
- 1726 MenuLib.MenuColors.HighBack := MenuHighBack;
- 1727 MenuLib.MenuColors.SelFore := MenuSelFore;
- 1728 MenuLib.MenuColors.SelBack := MenuSelBack;
- 1729 MenuLib.MenuColors.HSelFore := MenuHSelFore;
- 1730 MenuLib.MenuColors.HSelBack := MenuHSelBack;
- 1731 END;
- 1732 SpacesOK := FALSE;
- 1733 ReadAgain := FALSE;
- 1734 END CommUtil.
- 1735 (*%E*)
- 1736
- 12 errors
|