Home » Archimedes archive » Zipped Apps » Impression Publisher » !Publisher/!MailMerge/!RunImage
!Publisher/!MailMerge/!RunImage
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Zipped Apps » Impression Publisher |
Filename: | !Publisher/!MailMerge/!RunImage |
Read OK: | ✔ |
File size: | 753E bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
1REM > !RunImage 2 3ON ERROR ERROR EXT ERR,REPORT$+" at line "+STR$(ERL) 4 5PROCconsts 6hourglass_count%=0 7PROChourglass_on 8 9REM Find out what the currently selected country is. 10DIM countrybuff 64 11 12PROCreadopsys 13SYS "OS_Byte", 70, 127 TO ,country% 14SYS "OS_ServiceCall", , &43, 2, country% , countrybuff, 256 TO ,,,,, length% 15countrybuff?length%=13 16 17PROCmsg_initialise(appdir$+"."+$countrybuff) 18PROCtask_initialise(FNmsg_0("ID")) 19PROCicon_initialise 20PROCwin_initialise 21PROCerror_initialise 22PROCinitialise 23 24END=END+8096:REM give us 8K of floating memory 25heap_end%=HIMEM:REM where the memory now ends 26HIMEM=END+8096 27heap_start%=HIMEM:REM where the heap will start 28heap_size%=heap_end%-heap_start% 29SYS"OS_ReadMemMapInfo" TO heap_psize% 30 31IFheap_size%<>0 THEN 32 SYS"OS_Heap",0,heap_start%,,heap_size% 33ELSE 34 PROCheap_increase 35ENDIF 36 37PROChourglass_off 38ON ERROR PROCerror 39 40REPEAT 41 SYS "Wimp_Poll",task_mask%,task_buff% TO task_action% 42 SYS "Impulse_Decode",task_action%,task_buff%,,,,method_table%,task_handle% TO task_action%,,,,,token%,params%,object% 43 44 CASE task_action% OF 45 WHEN 0 : PROCnull 46 WHEN 2 : SYS"Wimp_OpenWindow",,task_buff% 47 WHEN 3 : IF printing% THEN 48 pending_close%=TRUE 49 ELSE 50 PROChost_shutdown 51 ENDIF 52 WHEN 6 : PROCmouse_click 53 WHEN 9 : PROCmenu_click 54 WHEN 17,18 : PROCreceive 55 WHEN Impulse_Command%, Impulse_Request%: 56 PROCcommand(token%,params%,object%) 57 WHEN Impulse_Reply%: 58 PROCreply(token%) 59 WHEN Impulse_SendData%: 60 PROCsend_data(token%,params%,object%) 61 ENDCASE 62 63UNTIL FALSE 64END 65 66 67 68DEF PROCinitialise 69SYS"Impulse_Initialise",0,task_handle%,FNmsg_0("ID"),-1 70PROCwin_load_create(appdir$+".Templates","main",1,main%) 71PROCicon_hide(main%,Icon_ToProc%) 72PROCicon_hide(main%,Icon_RecsProc%) 73PROCicon_hide(main%,Icon_PrintAll%) 74PROCicon_hide(main%,Icon_ToGo%) 75PROCicon_hide(main%,Icon_Done%) 76PROCicon_hide(main%,Icon_Print%) 77PROCicon_hide(main%,Icon_Next%) 78PROCicon_hide(main%,Icon_Edit%) 79PROCicon_hide(main%,Icon_StartMerge%) 80PROCicon_write(main%,Icon_CSV%,"") 81PROCicon_write(main%,Icon_document%,"") 82PROCicon_shade(main%,Icon_DispHead%) 83!win_buff%=main%:SYS"Wimp_GetWindowState",,win_buff% 84win_buff%!8=win_buff%!16 - Window_Small% 85SYS"Wimp_OpenWindow",,win_buff% 86 87DIM method_table% 64 88P%=method_table% 89[ OPT 0 90 EQUD 0 ; method structure format 91 EQUD 0 ; flags 92 EQUD T_GetField% ; token 93 EQUS "GetField"+CHR$0 ; method 94 EQUS CHR$0 ; syntax 95 ALIGN 96 97 98 EQUD 0 99 EQUD T_CloseDown% ; token 100 EQUS "CloseDown"+CHR$0 ; method 101 EQUS CHR$0 ; syntax 102 ALIGN 103] 104REM 105menu%=0 106merge%=FALSE 107printing%=FALSE 108dieplease%=FALSE : REM TRUE if Impression sends us a window closed message 109preserved_start_of_data_ptr%=0 110pending_close%=FALSE 111transmit%=FALSE 112transmit_count%=0 113transmit_block%=0 114 115gotprintreply%=FALSE 116PROCmerge_off 117ENDPROC 118 119 120 121 122DEF PROCnull 123LOCAL result% 124REM We need to wimp_poll between merge_next_record and PROCsend. 125IF ((printing%=TRUE) AND (gotprintreply%=TRUE)) THEN 126 gotprintreply%=FALSE 127 PROCsend("Print",T_Print%) 128ENDIF 129ENDPROC 130 131 132 133 134DEF PROChost_shutdown 135IF NOT dieplease% THEN PROCsend("MailDied",-1) 136 137PROCclose_csv_file 138WHILE hourglass_count% 139 PROChourglass_off 140ENDWHILE 141IFmerge% PROCmerge_off 142 143SYS"Impulse_CloseDown",task_handle% 144PROCtask_shutdown 145ENDPROC 146 147DEF PROCreceive 148CASE task_buff%!16 OF 149WHEN Message_Quit%: 150 PROChost_shutdown 151WHEN Message_DataSave%: 152 PROCdatasave 153WHEN Message_DataLoad%: 154 PROCdataload 155WHEN Message_PreQuit%: 156 PROCprequit 157WHEN Message_TaskCloseDown%: 158 IFdoc_file$<>"" AND task_buff%!4=doc_task% PROChost_shutdown 159WHEN Message_WindowClosed%: 160REM IFdoc_file$<>"" THEN PROChost_shutdown 161WHEN Message_MM_Document%: 162 IF doc_file$="" THEN PROCdoc_received 163ENDCASE 164ENDPROC 165 166 167DEF PROCmouse_click 168LOCAL menuptr%,maxx%,i%,p%,ix%,iy% 169IF task_buff%!8<>4 ENDPROC 170CASE task_buff%!16 OF 171 WHEN Icon_Headings%: 172 173 IF csv_file$<>"" THEN 174 IF FNicon_set(main%,Icon_Headings%) THEN 175 PROCcreate_csv_headings 176 rec_togo% += 1 177 ELSE 178 PROCget_csv_headings 179 rec_togo% -= 1 180 ENDIF 181 ENDIF 182 183 WHEN Icon_DispHead%: 184 IF menu% PROCheap_free("MENU",menu%) 185 menu%=FNheap_claim("MENU",28+csv_count%*24) 186 $menu%=FNmsg_0("MT") 187 menu%?12=7 188 menu%?13=2 189 menu%?14=7 190 menu%?15=0 191 menu%!20=44 192 menu%!24=0 193 menuptr%=menu%+28 194 maxx%=LEN(FNmsg_0("MT"))-3 195 p%=csv_headings% 196 FORi%=1 TO csv_count% 197 IFi%=csv_count% !menuptr%=&80 ELSE !menuptr%=0 198 menuptr%!4=-1 199 menuptr%!8=&07000121 200 menuptr%!12=p%+4 201 menuptr%!16=-1 202 menuptr%!20=LEN($(p%+4))+1 203 menuptr%+=24 204 IFLEN($(p%+4))>maxx% maxx%=LEN($(p%+4)) 205 p%=!p% 206 NEXT 207 menu%!16=(maxx%*8+6)*2 208 !task_buff%=main%:task_buff%!4=Icon_DispHead% 209 SYS"Wimp_GetIconState",,task_buff%:ix%=task_buff%!16:iy%=task_buff%!20 210 SYS"Wimp_GetWindowState",,task_buff% 211 display_menu_x% = task_buff%!20+task_buff%!4+ix%+2 212 display_menu_y% = task_buff%!24+task_buff%!16+iy%-2 213 SYS"Wimp_CreateMenu",,menu%,display_menu_x%,display_menu_y% 214 WHEN Icon_StartMerge%: 215 PROCtry_merge_on 216 WHEN Icon_Next%: 217 PROCmerge_next_record 218 WHEN Icon_Print%: 219 PROCsend("Print",T_Print%) 220 printing%=TRUE 221 PROCdisable_merging_buttons 222 WHEN Icon_Edit%: 223 PROCsend("ClearMerge",-1) 224 PROChost_shutdown 225ENDCASE 226ENDPROC 227 228 229DEFPROCmenu_click 230REM send the appropriate DDF for the selected field to the WP 231LOCAL c%,l%,f% 232f%=!task_buff% 233SYS"Wimp_GetCaretPosition",,task_buff%+20 234IFtask_buff%!20<>doc_window% ERROR task_ok%, FNmsg_0("OK5") 235l%=csv_headings% 236WHILE f% 237 l%=!l% 238 f%-=1 239ENDWHILE 240c%=OPENOUT"<Wimp$Scrap>" 241 242BPUT#c%,"{ merge "+CHR$Char_Quote%+":"+FNmsg_0("ID")+" GetField "+$(l%+4)+CHR$Char_Quote%+"}"; 243 244l%=EXT#c% 245CLOSE#c% 246SYS"OS_File",18,"<Wimp$Scrap>",DDF_Type% 247!task_buff%=60 248task_buff%!12=0 249task_buff%!16=3 250task_buff%!24=&4B535554:REM "TUSK" 251task_buff%!36=l% 252task_buff%!40=DDF_Type% 253$(task_buff%+44)="<Wimp$Scrap>"+CHR$0 254SYS"Wimp_SendMessage",17,task_buff%,doc_task% 255SYS"Wimp_GetPointerInfo",,task_buff% 256IF(task_buff%!8 AND 1) SYS"Wimp_CreateMenu",,menu%,display_menu_x%,display_menu_y% 257ENDPROC 258 259 260DEF PROCdataload 261REM receipt of a CSV file 262IFtask_buff%!40<>CSV_Type% OR doc_file$="" ENDPROC 263IFmerge% ERROR task_ok%,FNmsg_0("OK1") 264csv_file$=FNtask_rtoz(task_buff%+44) 265task_buff%!12=task_buff%!8 266task_buff%!16=4 267SYS"Wimp_SendMessage",17,task_buff%,task_buff%!4 268PROCicon_hide(main%,Icon_DropHere%) 269PROCicon_unhide(main%,Icon_StartMerge%) 270PROCicon_unshade(main%,Icon_DispHead%) 271csv_count%=FNdetermine_number_of_fields 272IF NOT FNicon_set(main%,Icon_Headings%) PROCget_csv_headings ELSE PROCcreate_csv_headings 273rec_togo%=FNdetermine_number_of_records 274PROCicon_write(main%,Icon_CSV%,FNleaf(csv_file$)) 275ENDPROC 276 277 278DEF PROCcopy_field(to%, RETURN last_field%, RETURN field_length%, fudge_spaces%) 279REM copies the next field from the open CSV file into memory, specified by to% 280REM which CAN be NULL. 281REM returns last_field=TRUE if the last field in the record 282REM returns field_length=the real length of the field 283LOCAL got_quote%, got_slash%, b%, finished% 284got_quote%=FALSE 285got_slash%=FALSE 286last_field%=FALSE 287field_length%=0 288finished%=FALSE 289REPEAT 290 b%=BGET#csv_file_handle% 291 292 CASE TRUE OF 293 294 WHEN b%=Char_Quote%: 295 got_quote%=NOT got_quote% 296 297 WHEN b%=Char_Slash%: 298 IF got_slash% THEN 299 PROCcopy_field_stuff_char(to%,ASC"\",field_length%) 300 got_slash%=FALSE 301 ELSE 302 got_slash%=TRUE 303 ENDIF 304 305 WHEN b%=Char_Space%: 306 IF fudge_spaces% THEN 307 PROCcopy_field_stuff_char(to%,Char_HardSpace%,field_length%) 308 ELSE 309 PROCcopy_field_stuff_char(to%,Char_Space%,field_length%) 310 ENDIF 311 312 WHEN b%=Char_Comma%: 313 IF got_quote% PROCcopy_field_stuff_char(to%,b%,field_length%) ELSE finished%=TRUE 314 315 WHEN b%=Char_LF% OR b%=Char_CR% OR EOF#csv_file_handle%: 316 last_field%=TRUE 317 finished%=TRUE 318 319 OTHERWISE: 320 IF got_slash% THEN 321 CASE b% OF 322 WHEN ASC"n": PROCcopy_field_stuff_char(to%,10,field_length%) 323 ENDCASE 324 got_slash%=FALSE 325 ELSE 326 PROCcopy_field_stuff_char(to%,b%,field_length%) 327 ENDIF 328 329 ENDCASE 330UNTIL finished% 331IF to% ?to%=13 332ENDPROC 333 334 335DEFPROCcopy_field_stuff_char(RETURN to%, char%, RETURN length%) 336length%+=1 337IFto% ?to%=char%:to%+=1 338ENDPROC 339 340 341DEF FNdetermine_number_of_fields 342LOCAL s$,count%,last_field%,dummy% 343PROCopen_csv_file 344IF csv_file_handle%=0 s$=csv_file$:csv_file$="":ERROR task_ok%,FNmsg_1("OK2",s$) 345REPEAT 346 PROCcopy_field(0,last_field%,dummy%,FALSE) 347 count%+=1 348UNTIL last_field% 349PROCclose_csv_file 350=count% 351 352 353 354DEF PROCget_csv_headings 355LOCAL s$,i%,last_node%,node%,dummy% 356WHILE csv_headings% 357 next%=!csv_headings% 358 PROCheap_free("CSVH",csv_headings%) 359 csv_headings%=next% 360ENDWHILE 361PROCopen_csv_file 362last_node%=0 363FOR i%=1 TO csv_count% 364 PROCcopy_field(task_buff%,dummy%,dummy%,TRUE) 365 s$=$task_buff% 366 IF s$="" s$=FNmsg_1("FI",STR$(i%)):REM if a null heading, create an arbitrary one 367 node%=FNheap_claim("CSVH",LEN(s$)+5) 368 !node%=0 369 $(node%+4)=s$ 370 IF last_node% !last_node%=node% ELSE csv_headings%=node% 371 last_node%=node% 372NEXT 373csv_file_ptr%=PTR#csv_file_handle% 374PROCclose_csv_file 375ENDPROC 376 377 378 379DEF PROCcreate_csv_headings 380LOCAL s$,i%,last%,node% 381WHILE csv_headings% 382 node%=!csv_headings% 383 PROCheap_free("CSVH",csv_headings%) 384 csv_headings%=node% 385ENDWHILE 386last%=0 387FOR i%=1 TO csv_count% 388 s$=FNmsg_1("FI",STR$(i%)) 389 node%=FNheap_claim("CSVH",LEN(s$)+5) 390 !node%=0 391 $(node%+4)=s$ 392 IF last% !last%=node% ELSE csv_headings%=node% 393 last%=node% 394NEXT 395csv_file_ptr%=0 396ENDPROC 397 398 399 400DEF FNdetermine_number_of_records 401LOCAL count%,b%,new_line% 402count%=0 403PROChourglass_on 404PROCopen_csv_file 405PTR#csv_file_handle%=csv_file_ptr% :REM put at field start 406new_line%=TRUE 407REPEAT 408 b%=BGET#csv_file_handle% 409 IF b%=Char_CR% OR b%=Char_LF% OR EOF#csv_file_handle% THEN 410 IF NOT new_line% THEN count%+=1 411 new_line%=TRUE 412 ELSE 413 new_line%=FALSE 414 ENDIF 415UNTIL EOF#csv_file_handle% 416PROCclose_csv_file 417PROChourglass_off 418=count% 419 420 421 422DEF PROCdoc_received 423LOCAL loop%, temp$ 424 425IF doc_file$="" THEN 426 doc_task%=task_buff%!4 427 doc_window%=task_buff%!20 428 doc_file$=FNleaf(FNtask_rtoz(task_buff%+24)) 429ENDIF 430IFdoc_task%=task_buff%!4 AND doc_window%=task_buff%!20 AND doc_file$=FNleaf(FNtask_rtoz(task_buff%+24)) THEN 431 task_buff%!12=task_buff%!8 432 SYS"Wimp_SendMessage",19,task_buff%,task_buff%!4 433 !win_buff%=main%:SYS"Wimp_GetWindowState",,win_buff% 434 win_buff%!28=-1:SYS"Wimp_OpenWindow",,win_buff% 435 PROCicon_write(main%,Icon_document%,doc_file$) 436ENDIF 437 438REM Attack string 439temp$="" 440FOR loop%=1 TO LEN(doc_file$) 441IF ASC(MID$(doc_file$, loop%,1))>32 THEN temp$+=MID$(doc_file$, loop%, 1) 442NEXT loop% 443doc_file$=temp$ 444ENDPROC 445 446 447 448DEF PROCdatasave 449LOCAL loop%, byte% 450 451REM receipt of CSV file directly from application 452 453IF task_buff%!40=CSV_Type% THEN 454 task_buff%!0=256 455 task_buff%!12=task_buff%!8 456 task_buff%!16=2 457 task_buff%!36=-1 458 459REM Convert terminated string to a string terminated by 13. 460loop%=44 461WHILE (task_buff%?loop%)>31 462 loop%+=1 463ENDWHILE 464task_buff%?loop%=13 465 466$(task_buff%+44)="<Wimp$ScrapDir>."+$(task_buff%+44) 467SYS"Wimp_SendMessage",17,task_buff%,task_buff%!4 468ENDIF 469ENDPROC 470 471 472DEF FNleaf(s$) 473LOCAL dotindex% 474dotindex%=0 475WHILE INSTR(s$,".",dotindex%+1) 476 dotindex%=INSTR(s$,".",dotindex%+1) 477ENDWHILE 478=MID$(s$,dotindex%+1) 479 480 481 482DEF PROCprequit 483IFmerge% THEN 484 REM ***** do some prompting regarding merge in progress 485ENDIF 486ENDPROC 487 488 489 490DEF PROCtry_merge_on 491REM try to display the first record 492merge%=TRUE 493preserved_start_of_data_ptr%=csv_file_ptr% 494PROCsend("Edit Off",-1) 495PROCmerge_next_record 496ENDPROC 497 498 499DEF PROCmerge_off 500REM stop merging and initialise everything 501LOCAL next% 502 503IF merge% PROCsend("Edit On",-1) 504merge%=FALSE 505csv_file$="" 506csv_file_handle%=0 507csv_count%=0 508csv_headings%=0 509csv_field_ptrs%=0 510csv_field_lens%=0 511csv_file_ptr%=0 512doc_file$="" 513doc_task%=0 514doc_window%=0 515field_count%=0 516rec_togo%=0 517rec_done%=0 518ENDPROC 519 520 521DEF PROCmerge_next_record 522IF rec_togo%<>0 THEN 523 PROChourglass_on 524 PROCnext_record 525 PROCsend("Merge",T_Merge%) 526 PROCdisable_merging_buttons 527ELSE 528 $(error_buff%+4)=FNmsg_0("OK6")+CHR$0 529 SYS"Wimp_ReportError",error_buff%,%10001,FNmsg_1("MS",FNmsg_0("ID")) 530 PROChost_shutdown 531ENDIF 532ENDPROC 533 534 535DEF PROCnext_record 536REM calculates pointers to each field, and the length of each field 537LOCAL len%,i%,dummy%,finished%,this_ptr% 538 539REM check all records have identical number of fields 540LOCAL numfields% 541numfields%=0 542PROCopen_csv_file 543IF csv_file_handle%=0 ERROR task_ok%,FNmsg_1("OK2",csv_file$) 544REM free up the memory occupied by any existing pointers 545WHILE csv_field_ptrs% 546 next%=!csv_field_ptrs% 547 PROCheap_free("CSVP",csv_field_ptrs%) 548 csv_field_ptrs%=next% 549ENDWHILE 550WHILE csv_field_lens% 551 next%=!csv_field_lens% 552 PROCheap_free("CSVL",csv_field_lens%) 553 csv_field_lens%=next% 554ENDWHILE 555PTR#csv_file_handle%=csv_file_ptr% 556i%=0 557REPEAT 558 i%+=1 559 REPEAT 560 this_ptr%=PTR#csv_file_handle% :REM pointer to real start of field 561 PROCcopy_field(0,dummy%,len%,FALSE) 562 finished%=TRUE 563 IF NOT EOF#csv_file_handle% AND i%=1 AND len%=0 AND dummy% THEN finished%=FALSE 564 UNTIL finished% 565 PROCadd_field_ptr(this_ptr%) 566 PROCadd_field_len(len%) 567UNTIL i%=csv_count% OR dummy% OR EOF#csv_file_handle% 568IF NOT dummy% PROCeol 569IF i%<csv_count% THEN 570 WHILE i%<csv_count% 571 i%+=1 572 PROCadd_field_ptr(0) 573 PROCadd_field_len(0) 574 ENDWHILE 575ENDIF 576csv_file_ptr%=PTR#csv_file_handle% 577PROCclose_csv_file 578ENDPROC 579 580 581DEF PROCeol 582LOCAL x 583x=0 584REPEAT 585 IF NOT EOF#csv_file_handle% THEN x=BGET#csv_file_handle% 586UNTIL x=Char_CR% OR x=Char_LF% OR EOF#csv_file_handle% 587ENDPROC 588 589 590 591DEF PROCadd_field_ptr(index%) 592LOCAL node%,last% 593node%=FNheap_claim("CSVP",8) 594node%!0=0 595node%!4=index% 596IF csv_field_ptrs%=0 THEN 597 csv_field_ptrs%=node% 598ELSE 599 last%=csv_field_ptrs% 600 WHILE !last% 601 last%=!last% 602 ENDWHILE 603 !last%=node% 604ENDIF 605ENDPROC 606 607 608 609DEFPROCadd_field_len(index%) 610LOCAL node%,last% 611node%=FNheap_claim("CSVL",8) 612node%!0=0 613node%!4=index% 614IF csv_field_lens%=0 THEN 615 csv_field_lens%=node% 616ELSE 617 last%=csv_field_lens% 618 WHILE !last% 619 last%=!last% 620 ENDWHILE 621 !last%=node% 622ENDIF 623ENDPROC 624 625 626 627DEF FNfield_ptr(index%) 628REM return the nth (starting at 0) ptr 629LOCAL node% 630node%=csv_field_ptrs% 631WHILE index% 632 REM this is safe 'cos its validated before calling 633 node%=!node%:IFnode%=0 ERROR task_fatal%,"Bad field ptr requested" 634 index%-=1 635ENDWHILE 636=node%!4 637 638 639 640DEF FNfield_len(index%) 641REM return the nth (starting at 0) length 642LOCAL node% 643node%=csv_field_lens% 644WHILE index% 645 REM this is safe 'cos its validated before calling 646 node%=!node%:IFnode%=0 ERROR task_fatal%,"Bad field len requested" 647 index%-=1 648ENDWHILE 649=node%!4 650 651 652 653DEF PROCsend(command$,replytoken%) 654LOCAL i%,m$ 655IF doc_file$="" THEN ENDPROC 656IF replytoken%<>-1 i%=Impulse_Request% ELSE i%=Impulse_Command% 657m$=":"+FNmsg_0("SV")+"."+doc_file$+" "+command$ 658SYS"Impulse_SendMessage",i%,m$,0,0,0,replytoken%,task_handle%,0 659ENDPROC 660 661 662DEFPROCdisable_merging_buttons 663PROCicon_shade(main%,Icon_PrintAll%) 664PROCicon_shade(main%,Icon_Print%) 665PROCicon_shade(main%,Icon_Next%) 666PROCicon_shade(main%,Icon_Edit%) 667ENDPROC 668 669 670DEFPROCenable_merging_buttons 671PROCicon_unshade(main%,Icon_PrintAll%) 672PROCicon_unshade(main%,Icon_Print%) 673PROCicon_unshade(main%,Icon_Next%) 674PROCicon_unshade(main%,Icon_Edit%) 675ENDPROC 676 677 678DEF PROCcommand(token%,params%,object%) 679CASE token% OF 680 WHEN T_GetField% 681 PROCget_field(params%,object%) 682 field_count%+=1 683 WHEN T_CloseDown% 684 dieplease% = TRUE 685 PROChost_shutdown 686ENDCASE 687ENDPROC 688 689 690DEF PROCget_field(params%,object%) 691REM params% points to the results of OS_ReadArgs 692LOCAL field_index%, field_name$, ptr%, finished% 693IF params%=-1 ENDPROC 694field_name$=FNtask_rtoz(params%) 695field_index%=0 696ptr%=csv_headings% 697finished%=FALSE 698REPEAT 699 field_index%+=1 700 IF $(ptr%+4)=field_name$ THEN 701 finished%=TRUE 702 ELSE 703 ptr%=!ptr% 704 IF ptr%=0 THEN finished%=TRUE:field_index%=-1 705 ENDIF 706 707REM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 708REM IF ptr%=0 ERROR task_fatal%, FNmsg_1("OK4",field_name$) 709 IF ptr%=0 THEN 710 $(error_buff%+4)=FNmsg_1("OK4", field_name$) 711 SYS "Wimp_ReportError",error_buff%,%10001,FNmsg_1("MS",FNmsg_0("ID")) 712 ENDIF 713REM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 714 715UNTIL finished% 716IF field_index%<1 OR field_index%>csv_count% THEN 717 PROCtrans_reply_block(0,0) 718ELSE 719 PROCtrans_reply_block(FNfield_ptr(field_index%-1),FNfield_len(field_index%-1)) 720ENDIF 721ENDPROC 722 723 724DEFPROCtrans_reply_block(ptr%,len%) 725LOCAL dummy% 726transmit%=TRUE 727transmit_ptr%=0 728IF transmit_block% PROCheap_free("BLCK",transmit_block%) 729transmit_block%=FNheap_claim("BLCK",len%+1) 730IF len%>0 THEN 731 PROCopen_csv_file 732 IF csv_file_handle%=0 transmit%=FALSE:ERROR task_ok%,FNmsg_2("OK2",csv_file$) 733 PTR#csv_file_handle%=ptr% 734 PROCcopy_field(transmit_block%,dummy%,len%,FALSE) 735 PROCclose_csv_file 736ELSE 737 $transmit_block%="" 738ENDIF 739transmit_top%=(len%+1+3)ANDNOT3 740transmit_size%=len% 741transmit_tag%=FNnext_transmit_tag 742SYS"Impulse_SendMessage",Impulse_Reply%,"Dummy text",-1,,,transmit_tag%,task_handle%,transmit_top%-transmit_ptr% 743ENDPROC 744 745 746DEFFNnext_transmit_tag 747transmit_count%+=1 748=transmit_count% 749 750 751DEFPROCsend_data(token%,buffer%,buffersize%) 752LOCAL size%,i% 753 754IFNOTtransmit% OR (token%<>transmit_tag%) ERROR task_ok%, FNmsg_0("OK3") 755size%=transmit_top%-transmit_ptr% 756IF size%<buffersize% OR size%=0 transmit%=FALSE 757IF size%>buffersize% size=buffersize% 758?(transmit_ptr%+transmit_block%+transmit_size%)=0 759SYS"Impulse_TransmitData",transmit_ptr%+transmit_block%,size%,,,,,task_handle% 760transmit_ptr%+=size% 761ENDPROC 762 763 764DEF PROCreply(token%) 765CASE token% OF 766 WHEN T_Print%: PROCreply_print 767 WHEN T_Merge%: PROCmerge_done 768ENDCASE 769ENDPROC 770 771 772DEF PROCmerge_done 773IFrec_done%=0 THEN 774 IFfield_count%=0 THEN 775 PROCsend("Edit On",-1) 776 csv_file_ptr%=preserved_start_of_data_ptr% 777 merge%=FALSE 778 ERROR task_ok%, FNmsg_0("OK7") 779 ENDIF 780 PROCicon_write(main%,Icon_ToGo%,STR$(rec_togo%)) 781 PROCicon_write(main%,Icon_Done%,"1") 782 PROCicon_unhide(main%,Icon_ToProc%) 783 PROCicon_unhide(main%,Icon_RecsProc%) 784 PROCicon_unhide(main%,Icon_PrintAll%) 785 PROCicon_unhide(main%,Icon_ToGo%) 786 PROCicon_unhide(main%,Icon_Done%) 787 PROCicon_unhide(main%,Icon_Print%) 788 PROCicon_unhide(main%,Icon_Next%) 789 PROCicon_unhide(main%,Icon_Edit%) 790 PROCicon_hide(main%,Icon_Headings%) 791 PROCicon_hide(main%,Icon_DispHead%) 792 PROCicon_hide(main%,Icon_StartMerge%) 793 !win_buff%=main%:SYS"Wimp_GetWindowState",,win_buff% 794 win_buff%!8=win_buff%!16 - Window_Big% 795 SYS"Wimp_OpenWindow",,win_buff% 796ENDIF 797PROCdone_record 798PROCenable_merging_buttons 799PROChourglass_off 800ENDPROC 801 802 803DEFPROCdone_record 804rec_togo%-=1 805rec_done%+=1 806PROCicon_write(main%,Icon_ToGo%,STR$(rec_togo%)) 807PROCicon_write(main%,Icon_Done%,STR$(rec_done%)) 808ENDPROC 809 810 811DEFPROCreply_print 812LOCAL command$ 813 command$=FNtask_rtoz(task_buff%+36) 814 CASE command$ OF 815 WHEN "PrintDone" : PROCprint_done 816 WHEN "PrintError": PROCprint_error 817 ENDCASE 818ENDPROC 819 820 821DEFPROCprint_error 822REM No printer driver was loaded if we get here. If we are doing a 823REM print all records, then we should stop the print here. 824 printing%=FALSE 825 gotprintreply%=FALSE 826 827 $(error_buff%+4)=FNmsg_0("OK9") 828 SYS "Wimp_ReportError", error_buff%, %10001, FNmsg_1("MS",FNmsg_0("ID")) 829 830 IFpending_close% THEN PROChost_shutdown 831 PROCenable_merging_buttons 832 PROCicon_unhide(main%, Icon_PrintAll%) 833 834ENDPROC 835 836 837DEFPROCprint_done 838REM Print went OK if we get here 839printing%=FALSE 840IFpending_close% THEN 841 PROChost_shutdown 842ELSE 843 IFFNicon_set(main%,Icon_PrintAll%) THEN 844 REM PROCdone_record 845 PROCmerge_next_record 846 847 REM !!!!!!!!!!!!!!!! 848 REM Now done after wimp_poll 849 REM PROCsend("Print",T_Print%) 850 851 REM Set reply variable TRUE 852 gotprintreply%=TRUE 853 REM !!!!!!!!!!!!!!!! 854 855 printing%=TRUE 856 ELSE 857 PROCenable_merging_buttons 858 ENDIF 859ENDIF 860ENDPROC 861 862REM Error library 863 864DEFPROCerror_initialise 865DIM error_buff% 256 866ENDPROC 867 868DEFPROCerror 869LOCAL r$,r% 870r$=REPORT$ 871IFERR=task_ok% OR ERR=task_fatal% THEN 872 r%=INSTR(r$,"in "+CHR$Char_Quote%) 873 IFr%<>0 r$=LEFT$(r$,r%-1) 874ENDIF 875CASE ERR OF 876WHEN task_ok%: PROCerror_box(r$,1) 877WHEN task_fatal%: PROCerror_box(r$,2) 878 OTHERWISE: PROCerror_box("Unexpected error :- "+r$+" ("+STR$(ERR)+"/"+STR$(ERL)+")",3) 879ENDCASE 880ENDPROC 881 882DEFPROCerror_box(r$,error_flag%) 883LOCAL r% 884SYS"Wimp_CreateMenu",,-1 885!error_buff%=ERR:$(error_buff%+4)=r$+CHR$0 886SYS"Wimp_ReportError",error_buff%,error_flag%,task_id$ TO ,r% 887IFr%=2 ON ERROR OFF:PROChost_shutdown:END 888ENDPROC 889: 890REM Heap library 891: 892DEFPROCheap_free(ident$,block%) 893LOCAL r0%,f% 894IFblock%<>0 THEN 895 block%-=4 896 REM PROCtrace_0("","PROCheap_free("+ident$+",&"+STR$~(block%)+")") 897 IF!block%<>FNheap_ident_num(ident$) ERROR task_ok%,"Corrupt "+ident$+" block not freed" 898 SYS"XOS_Heap",3,heap_start%,block% TO r0%;f% 899 IF(f% AND 1) ERROR task_fatal%,"Block "+ident$+": "+FNtask_rtoz(r0%+4) 900ENDIF 901ENDPROC 902: 903DEFFNheap_claim(ident$,size%) 904LOCAL p% 905REM need to add 4 extra bytes 'cos if the block needs 906REM extending then the first word gets trampled on 907size%+=4 908WHILE size%>=FNheap_freespace PROCheap_increase:ENDWHILE 909REM claim the block and store the ident 910SYS"OS_Heap",2,heap_start%,,size% TO ,,p% 911!p%=FNheap_ident_num(ident$) 912p%+=4 913=p% 914: 915DEFPROCheap_increase 916LOCAL slot% 917SYS"Wimp_SlotSize",-1,-1 TO slot% 918SYS"Wimp_SlotSize",slot%+heap_psize%,-1 919IFheap_size%=0 THEN 920 SYS"OS_Heap",0,heap_start%,,heap_psize% 921ELSE 922 SYS"OS_Heap",5,heap_start%,,heap_psize% 923ENDIF 924heap_size%+=heap_psize% 925ENDPROC 926: 927DEFFNheap_ident_num(v$) 928LOCAL i%,j% 929FORi%=0 TO 3 930 j%=j% OR ASC(MID$(v$,i%+1,1))<<(i%*8) 931NEXT 932=j% 933: 934DEFFNheap_freespace 935LOCAL f% 936IFheap_size%=0 THEN =0 937SYS"OS_Heap",1,heap_start% TO ,,f% 938=f% 939: 940REM Window library 941: 942DEFPROCwin_initialise 943DIM win_buff% 2048 944win_template$="" 945ENDPROC 946: 947DEFPROCwin_load_create(f$,n$,sprite_pool%,RETURN handle%) 948PROCwin_load(f$,n$,win_buff%,2048) 949win_buff%!64=sprite_pool% 950PROCwin_create(win_buff%,handle%) 951ENDPROC 952: 953DEFPROCwin_load(f$,n$,buf%,limit%) 954REM f$ - filename of template file 955REM n$ - name of template to load 956REM buf% - buffer which needs to be big enough to hold the window definition 957REM AND the indirected data, due to the way Wimp_LoadTemplate works. 958REM 959REM PROCwin_load will automatically dimension enough memory for 960REM the indirected data. 961LOCAL ws_buf% 962LOCAL size% 963LOCAL data% 964LOCAL found% 965LOCAL s%,f% 966IFf$<>"" THEN 967 PROCwin_sizes(f$,n$,size%,data%) 968ELSE 969 PROCwin_sizes(win_template$,n$,size%,data%) 970ENDIF 971IFlimit%<(size%+data%) ERROR task_ok%,"Buffer not big enough for '"+n$+"' - "+STR$(size%)+" + "+STR$(data%)+" bytes required" 972IFf$<>"" SYS"Wimp_OpenTemplate",,f$ 973IF data%<>0 THEN 974 DIM ws_buf% data% 975 SYS"XWimp_LoadTemplate",,buf%,ws_buf%,ws_buf%+data%,-1,n$,0 TO s%,,,,,,found%;f% 976ELSE 977 SYS"XWimp_LoadTemplate",,buf%,0,0,-1,n$,0 TO s%,,,,,,found%;f% 978ENDIF 979IFf$<>"" SYS"Wimp_CloseTemplate" 980IF(f%AND1) ERROR task_ok%,n$+": "+FNtask_rtoz(s%+4) 981IFfound%=0 ERROR task_ok%,"Template '"+n$+"' not found" 982ENDPROC 983: 984DEFPROCwin_create(buf%,RETURN handle%) 985REM buf% - buffer holding the window definition 986REM handle% - handle of the created window 987SYS"Wimp_CreateWindow",,buf% TO handle% 988ENDPROC 989: 990DEFPROCwin_sizes(f$,n$,RETURN size%,RETURN data%) 991LOCAL i% 992LOCAL file% 993LOCAL ptr% 994LOCAL offset% 995LOCAL type% 996LOCAL ident$ 997LOCAL num_icons% 998file%=OPENIN(f$) 999size%=0 1000data%=0 1001ptr%=16 1002REPEAT 1003 PTR#file%=ptr% 1004 offset%=FNwin_word(file%) 1005 IF offset%<>0 THEN 1006 PTR#file%=ptr%+8 1007 type%=FNwin_word(file%) 1008 ident$=FNwin_string(file%) 1009 ptr%+=24 1010 IFtype%=1 THEN 1011 IFident$=n$ THEN 1012 PTR#file%=offset%+84 1013 num_icons%=FNwin_word(file%) 1014 data%=FNwin_title(file%,offset%) 1015 IFnum_icons%<>0 data%+=FNwin_icon(file%,num_icons%,offset%) 1016 size%=88+(num_icons%*32) 1017 offset%=0:REM just to get out of the loop 1018 ENDIF 1019 ENDIF 1020 ENDIF 1021UNTIL offset%=0 1022CLOSE#file% 1023ENDPROC 1024: 1025DEFFNwin_word(h%) 1026=BGET#h%+(BGET#h% << 8)+(BGET#h% << 16)+(BGET#h% << 24) 1027: 1028DEFFNwin_string(h%) 1029LOCAL s$,c% 1030REPEAT 1031 c%=BGET#h% 1032 IFc%>31 s$+=CHR$(c%) 1033UNTIL c%<32 1034=s$ 1035: 1036DEFFNwin_title(file%,offset%) 1037LOCAL v% 1038PTR#file%=offset%+28 1039v%=FNwin_word(file%) 1040IF (v% AND 1<<31) THEN 1041 IF (v% AND 1<<26) THEN 1042 =FNwin_isd(file%,offset%+56,offset%+72,offset%) 1043 ENDIF 1044ELSE 1045 IF (v% AND 1) THEN 1046 =FNwin_isd(file%,offset%+56,offset%+72,offset%) 1047 ENDIF 1048ENDIF 1049=0 1050: 1051DEFFNwin_icon(file%,num%,offset%) 1052LOCAL i%,j% 1053j%=0 1054FORi%=0 TO num%-1 1055 j%+=FNwin_isd(file%,offset%+88+i%*32+16,offset%+88+i%*32+20,offset%) 1056NEXT 1057=j% 1058: 1059DEFFNwin_isd(file%,o1%,o2%,offset%) 1060LOCAL v%,ist%,size%,i% 1061PTR#file%=o1% 1062v%=FNwin_word(file%) 1063REM even if an icon is marked as deleted 1064REM it must be allowed for! 1065i%=(v% AND %100000000) 1066ist%=(v% AND 3) + (i% >> 6) 1067CASE ist% OF 1068WHEN 0: size%=0 1069WHEN 1: size%=0 1070WHEN 2: size%=0 1071WHEN 3: size%=0 1072WHEN 4: size%=0 1073WHEN 5,7: PTR#file%=o2%+4 1074 v%=FNwin_word(file%) 1075 IFv%=-1 THEN 1076 size%=0 1077 ELSE 1078 PTR#file%=offset%+v% 1079 size%=LEN(FNwin_string(file%))+1 1080 ENDIF 1081 PTR#file%=o2%+8 1082 size%+=FNwin_word(file%) 1083WHEN 6: PTR#file%=o2%+8 1084 size%=FNwin_word(file%) 1085ENDCASE 1086=size% 1087: 1088REM Icon library 1089: 1090DEFPROCicon_initialise 1091DIM icon_buffer% 256 1092ENDPROC 1093: 1094DEFPROCicon_hide(a%,b%) 1095!icon_buffer%=a% 1096icon_buffer%!4=b% 1097icon_buffer%!8=(1<<7)+(1<<23) 1098icon_buffer%!12=(1<<7)+(1<<23) 1099SYS"Wimp_SetIconState",,icon_buffer% 1100ENDPROC 1101: 1102DEFPROCicon_write(a%,b%,s$) 1103!icon_buffer%=a% 1104icon_buffer%!4=b% 1105SYS"Wimp_GetIconState",,icon_buffer% 1106IF(LEN(s$)+1)>icon_buffer%!36 THEN 1107 ERROR task_fatal%,"'"+s$+"' won't fit icon "+STR$(b%) 1108ENDIF 1109$(icon_buffer%!28)=s$ 1110icon_buffer%!8=0:icon_buffer%!12=0 1111SYS"Wimp_SetIconState",,icon_buffer% 1112ENDPROC 1113: 1114DEFPROCicon_shade(a%,b%) 1115!icon_buffer%=a% 1116icon_buffer%!4=b% 1117icon_buffer%!8=1<<22 1118icon_buffer%!12=1<<22 1119SYS"Wimp_SetIconState",,icon_buffer% 1120ENDPROC 1121: 1122DEFFNicon_set(a%,b%) 1123!icon_buffer%=a% 1124icon_buffer%!4=b% 1125SYS"Wimp_GetIconState",,icon_buffer% 1126=((icon_buffer%!24 AND (1<<21))<>0) 1127: 1128DEFPROCicon_unhide(a%,b%) 1129!icon_buffer%=a% 1130icon_buffer%!4=b% 1131icon_buffer%!8=0 1132icon_buffer%!12=1<<23 1133SYS"Wimp_SetIconState",,icon_buffer% 1134ENDPROC 1135: 1136DEFPROCicon_unshade(a%,b%) 1137!icon_buffer%=a% 1138icon_buffer%!4=b% 1139icon_buffer%!8=0 1140icon_buffer%!12=1<<22 1141SYS"Wimp_SetIconState",,icon_buffer% 1142ENDPROC 1143: 1144REM Task library 1145: 1146DEF PROCtask_initialise(n$) 1147task_id$=n$ 1148DIM task_buff% 256 1149IF RiscOS%>=300 THEN 1150 task_buff%!0=Message_MM_Document% 1151 task_buff%!4=Message_WindowClosed% 1152 task_buff%!8=Message_TaskCloseDown% 1153 task_buff%!12=Message_PreQuit% 1154 task_buff%!16=Message_RAMFetch% 1155 task_buff%!20=Message_DataLoad% 1156 task_buff%!24=Message_DataSave% 1157 task_buff%!28=Message_Impulse_1% 1158 task_buff%!32=Message_Impulse_2% 1159 task_buff%!36=Message_Quit% 1160 SYS"Wimp_Initialise",310,&4B534154,n$,task_buff%+36 TO wimp_version%,task_handle% 1161ELSE 1162 SYS "Wimp_Initialise",200,&4B534154,n$ TO wimp_version%,task_handle% 1163ENDIF 1164OSCLI("Set MailMerge$Running TRUE") 1165task_action%=0 1166 1167REM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1168REM task_mask%=1:REM no null events 1169 1170task_mask%=0 : REM I want my null events! 1171 1172REM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1173 1174task_ok%=254 1175 1176task_fatal%=253 1177ENDPROC 1178: 1179DEFPROCtask_shutdown 1180SYS"Wimp_CloseDown" 1181OSCLI("UnSet MailMerge$Running") 1182END 1183ENDPROC 1184: 1185DEFFNtask_rtoz(p%) 1186LOCAL p$ 1187WHILE ?p%<>0 1188 p$+=CHR$(?p%) 1189 p%+=1 1190ENDWHILE 1191=p$ 1192: 1193REM Message library 1194: 1195DEFPROCmsg_initialise(N$) 1196LOCAL c%,c$,i% 1197c%=OPENIN(N$) 1198IFc%=0 ERROR 0, "Cannot find messages file" 1199ms_tags%=0 1200PROChourglass_on 1201WHILE NOT(EOF#c%) 1202 c$=GET$#c% 1203 IFc$<>"" THEN 1204 IFLEFT$(c$,1)<>"#" THEN 1205 IFINSTR(c$,":")<>0 ms_tags%+=1 1206 ENDIF 1207 ENDIF 1208ENDWHILE 1209IFms_tags%<>0 THEN 1210 DIM ms_text$(ms_tags%-1),ms_tags$(ms_tags%-1) 1211 PTR#c%=0 1212 i%=0 1213 WHILE NOTEOF#c% 1214 c$=GET$#c% 1215 IFc$<>"" THEN 1216 IFLEFT$(c$,1)<>"#" THEN 1217 ms_tags$(i%)=LEFT$(c$,INSTR(c$,":")-1) 1218 ms_text$(i%)=MID$(c$,INSTR(c$,":")+1) 1219 i%+=1 1220 ENDIF 1221 ENDIF 1222 ENDWHILE 1223ENDIF 1224CLOSE#c% 1225PROChourglass_off 1226ENDPROC 1227: 1228DEFFNmsg_0(T$) 1229=FNmsg_4(T$,"","","","") 1230: 1231DEFFNmsg_1(T$,S$) 1232=FNmsg_4(T$,S$,"","","") 1233; 1234DEFFNmsg_2(T$,S0$,S1$) 1235=FNmsg_4(T$,S0$,S1$,"","") 1236: 1237DEFFNmsg_4(T$,S0$,S1$,S2$,S3$) 1238LOCAL i%,f% 1239IFms_tags%=0 THEN 1240 =T$ 1241ELSE 1242 FORi%=0 TO ms_tags%-1 1243 IFT$=ms_tags$(i%) THEN 1244 T$=ms_text$(i%) 1245 f%=INSTR(T$,"%0") 1246 IFf%<>0 T$=LEFT$(T$,f%-1)+S0$+MID$(T$,f%+2) 1247 f%=INSTR(T$,"%1") 1248 IFf%<>0 T$=LEFT$(T$,f%-1)+S1$+MID$(T$,f%+2) 1249 f%=INSTR(T$,"%2") 1250 IFf%<>0 T$=LEFT$(T$,f%-1)+S2$+MID$(T$,f%+2) 1251 f%=INSTR(T$,"%3") 1252 IFf%<>0 T$=LEFT$(T$,f%-1)+S3$+MID$(T$,f%+2) 1253 i%=ms_tags% 1254 ENDIF 1255 NEXT 1256ENDIF 1257=T$ 1258: 1259DEFPROChourglass_on 1260SYS"Hourglass_On" 1261hourglass_count%+=1 1262ENDPROC 1263: 1264DEFPROChourglass_off 1265SYS"Hourglass_Off" 1266hourglass_count%-=1 1267ENDPROC 1268: 1269DEFPROCopen_csv_file 1270IF csv_file$="" ENDPROC 1271csv_file_handle%=OPENIN(csv_file$) 1272ENDPROC 1273: 1274DEFPROCclose_csv_file 1275IFcsv_file_handle%=0 ENDPROC 1276CLOSE#csv_file_handle% 1277csv_file_handle%=0 1278ENDPROC 1279 1280 1281DEF PROCconsts 1282appdir$="<MailMerge$Dir>" 1283Icon_ToProc%=1 1284Icon_RecsProc%=2 1285Icon_Headings%=3 1286Icon_PrintAll%=4 1287Icon_CSV%=5 1288Icon_ToGo%=6 1289Icon_Done%=7 1290Icon_Print%=8 1291Icon_document%=10 1292Icon_Next%=11 1293Icon_Edit%=12 1294Icon_DispHead%=13 1295Icon_StartMerge%=14 1296Icon_DropHere%=15 1297 1298Window_Small%=236 1299Window_Big%=360 1300 1301T_GetField%=0 1302T_GetData%=1 1303T_GetTimeDate%=2 1304T_Print%=3 1305T_Merge%=4 1306T_CloseDown%=7 1307 1308Impulse_Command%=&200 1309Impulse_Request%=&201 1310Impulse_Reply%=&202 1311Impulse_SendData%=&203 1312Impulse_ReceiveData%=&204 1313Impulse_DeferredReply%=&205 1314 1315DDF_Type%=&D93 1316CSV_Type%=&DFE 1317 1318Message_Quit%=0 1319Message_DataSave%=1 1320Message_DataLoad%=3 1321Message_RAMFetch%=6 1322Message_PreQuit%=8 1323Message_TaskCloseDown%=&400C3 1324Message_WindowClosed%=&400CB 1325Message_Impulse_1%=&80E18 1326Message_Impulse_2%=&80E19 1327Message_MM_Document%=&82140 1328 1329Char_Space%=32 1330Char_Quote%=34 1331Char_Comma%=44 1332Char_LF%=10 1333Char_CR%=13 1334Char_Slash%=92 1335Char_HardSpace%=160 1336ENDPROC 1337 1338DEF PROCreadopsys 1339SYS "OS_Byte",129,0,255 TO ,RiscOS% 1340IF RiscOS%<163 THEN RiscOS%=200 ELSE RiscOS%=300 1341ENDPROC 1342
� > !RunImage !� � � � �,�$+" at line "+�(�) �consts hourglass_count%=0 �hourglass_on 6� Find out what the currently selected country is. � countrybuff 64 �readopsys %ș "OS_Byte", 70, 127 � ,country% Nș "OS_ServiceCall", , &43, 2, country% , countrybuff, 256 � ,,,,, length% countrybuff?length%=13 -�msg_initialise(appdir$+"."+$countrybuff) "�task_initialise(�msg_0("ID")) �icon_initialise �win_initialise �error_initialise �initialise ,�=�+8096:� give us 8K of floating memory +heap_end%=�:� where the memory now ends �=�+8096 -heap_start%=�:� where the heap will start $heap_size%=heap_end%-heap_start% 'ș"OS_ReadMemMapInfo" � heap_psize% �heap_size%<>0 � * ș"OS_Heap",0,heap_start%,,heap_size% !� " �heap_increase #� $ %�hourglass_off &� � �error ' (� )8 ș "Wimp_Poll",task_mask%,task_buff% � task_action% *x ș "Impulse_Decode",task_action%,task_buff%,,,,method_table%,task_handle% � task_action%,,,,,token%,params%,object% + , Ȏ task_action% � - � 0 : �null ., � 2 : ș"Wimp_OpenWindow",,task_buff% / � 3 : � printing% � 0" pending_close%=� 1 � 2 �host_shutdown 3 � 4 � 6 : �mouse_click 5 � 9 : �menu_click 6 � 17,18 : �receive 7, � Impulse_Command%, Impulse_Request%: 8) �command(token%,params%,object%) 9 � Impulse_Reply%: : �reply(token%) ; � Impulse_SendData%: <+ �send_data(token%,params%,object%) = � > ?� � @� A B C D� �initialise E9ș"Impulse_Initialise",0,task_handle%,�msg_0("ID"),-1 F9�win_load_create(appdir$+".Templates","main",1,main%) G"�icon_hide(main%,Icon_ToProc%) H$�icon_hide(main%,Icon_RecsProc%) I$�icon_hide(main%,Icon_PrintAll%) J �icon_hide(main%,Icon_ToGo%) K �icon_hide(main%,Icon_Done%) L!�icon_hide(main%,Icon_Print%) M �icon_hide(main%,Icon_Next%) N �icon_hide(main%,Icon_Edit%) O&�icon_hide(main%,Icon_StartMerge%) P#�icon_write(main%,Icon_CSV%,"") Q(�icon_write(main%,Icon_document%,"") R%�icon_shade(main%,Icon_DispHead%) S7!win_buff%=main%:ș"Wimp_GetWindowState",,win_buff% T,win_buff%!8=win_buff%!16 - Window_Small% U"ș"Wimp_OpenWindow",,win_buff% V W� method_table% 64 XP%=method_table% Y[ OPT 0 Z= EQUD 0 ; method structure format [+ EQUD 0 ; flags \% EQUD T_GetField% ; token ]) EQUS "GetField"+�0 ; method ^) EQUS �0 ; syntax _ ALIGN ` a b EQUD 0 c% EQUD T_CloseDown% ; token d) EQUS "CloseDown"+�0 ; method e) EQUS �0 ; syntax f ALIGN g] h� imenu%=0 jmerge%=� kprinting%=� lMdieplease%=� : � TRUE if Impression sends us a window closed message m"preserved_start_of_data_ptr%=0 npending_close%=� otransmit%=� ptransmit_count%=0 qtransmit_block%=0 r sgotprintreply%=� t�merge_off u� v w x y z� �null { � result% |B� We need to wimp_poll between merge_next_record and PROCsend. },� ((printing%=�) � (gotprintreply%=�)) � ~ gotprintreply%=� # �send("Print",T_Print%) �� �� � � � � �� �host_shutdown �)� � dieplease% � �send("MailDied",-1) � ��close_csv_file �ȕ hourglass_count% � �hourglass_off �� ��merge% �merge_off � �&ș"Impulse_CloseDown",task_handle% ��task_shutdown �� � �� �receive �Ȏ task_buff%!16 � �� Message_Quit%: � �host_shutdown �� Message_DataSave%: � �datasave �� Message_DataLoad%: � �dataload �� Message_PreQuit%: � �prequit �� Message_TaskCloseDown%: �< �doc_file$<>"" � task_buff%!4=doc_task% �host_shutdown �� Message_WindowClosed%: �-� IFdoc_file$<>"" THEN PROChost_shutdown �� Message_MM_Document%: �$ � doc_file$="" � �doc_received �� �� � � �� �mouse_click �"� menuptr%,maxx%,i%,p%,ix%,iy% �� task_buff%!8<>4 � �Ȏ task_buff%!16 � � � Icon_Headings%: � � � csv_file$<>"" � �- � �icon_set(main%,Icon_Headings%) � � �create_csv_headings � rec_togo% += 1 � � � �get_csv_headings � rec_togo% -= 1 � � � � � � � Icon_DispHead%: �( � menu% �heap_free("MENU",menu%) �2 menu%=�heap_claim("MENU",28+csv_count%*24) � $menu%=�msg_0("MT") � menu%?12=7 � menu%?13=2 � menu%?14=7 � menu%?15=0 � menu%!20=44 � menu%!24=0 � menuptr%=menu%+28 � maxx%=�(�msg_0("MT"))-3 � p%=csv_headings% � �i%=1 � csv_count% �4 �i%=csv_count% !menuptr%=&80 � !menuptr%=0 � menuptr%!4=-1 � menuptr%!8=&07000121 � menuptr%!12=p%+4 � menuptr%!16=-1 �" menuptr%!20=�($(p%+4))+1 � menuptr%+=24 �, �($(p%+4))>maxx% maxx%=�($(p%+4)) � p%=!p% � � � menu%!16=(maxx%*8+6)*2 �5 !task_buff%=main%:task_buff%!4=Icon_DispHead% �M ș"Wimp_GetIconState",,task_buff%:ix%=task_buff%!16:iy%=task_buff%!20 �+ ș"Wimp_GetWindowState",,task_buff% �: display_menu_x% = task_buff%!20+task_buff%!4+ix%+2 �; display_menu_y% = task_buff%!24+task_buff%!16+iy%-2 �B ș"Wimp_CreateMenu",,menu%,display_menu_x%,display_menu_y% � � Icon_StartMerge%: � �try_merge_on � � Icon_Next%: � �merge_next_record � � Icon_Print%: � �send("Print",T_Print%) � printing%=� � �disable_merging_buttons � � Icon_Edit%: � �send("ClearMerge",-1) � �host_shutdown �� �� � � ���menu_click �?� send the appropriate DDF for the selected field to the WP �� c%,l%,f% �f%=!task_buff% �,ș"Wimp_GetCaretPosition",,task_buff%+20 �9�task_buff%!20<>doc_window% � task_ok%, �msg_0("OK5") �l%=csv_headings% � ȕ f% � l%=!l% � f%-=1 �� �c%=�"<Wimp$Scrap>" � �X�#c%,"{ merge "+�Char_Quote%+":"+�msg_0("ID")+" GetField "+$(l%+4)+�Char_Quote%+"}"; � �l%=�#c% ��#c% �+ș"OS_File",18,"<Wimp$Scrap>",DDF_Type% �!task_buff%=60 �task_buff%!12=0 �task_buff%!16=3 �$task_buff%!24=&4B535554:� "TUSK" �task_buff%!36=l% �task_buff%!40=DDF_Type% �&$(task_buff%+44)="<Wimp$Scrap>"+�0 �0ș"Wimp_SendMessage",17,task_buff%,doc_task% �'ș"Wimp_GetPointerInfo",,task_buff% R�(task_buff%!8 � 1) ș"Wimp_CreateMenu",,menu%,display_menu_x%,display_menu_y% � � �dataload � receipt of a CSV file .�task_buff%!40<>CSV_Type% � doc_file$="" � $�merge% � task_ok%,�msg_0("OK1") 'csv_file$=�task_rtoz(task_buff%+44) task_buff%!12=task_buff%!8 task_buff%!16=4 3ș"Wimp_SendMessage",17,task_buff%,task_buff%!4 $�icon_hide(main%,Icon_DropHere%) (�icon_unhide(main%,Icon_StartMerge%) '�icon_unshade(main%,Icon_DispHead%) *csv_count%=�determine_number_of_fields P� � �icon_set(main%,Icon_Headings%) �get_csv_headings � �create_csv_headings *rec_togo%=�determine_number_of_records 1�icon_write(main%,Icon_CSV%,�leaf(csv_file$)) � E� �copy_field(to%, � last_field%, � field_length%, fudge_spaces%) P� copies the next field from the open CSV file into memory, specified by to% � which CAN be NULL. =� returns last_field=TRUE if the last field in the record 7� returns field_length=the real length of the field +� got_quote%, got_slash%, b%, finished% got_quote%=� got_slash%=� last_field%=� field_length%=0 finished%=� !� " b%=�#csv_file_handle% # $ Ȏ � � % & � b%=Char_Quote%: ' got_quote%=� got_quote% ( ) � b%=Char_Slash%: * � got_slash% � +5 �copy_field_stuff_char(to%,�"\",field_length%) , got_slash%=� - � . got_slash%=� / � 0 1 � b%=Char_Space%: 2 � fudge_spaces% � 3@ �copy_field_stuff_char(to%,Char_HardSpace%,field_length%) 4 � 5< �copy_field_stuff_char(to%,Char_Space%,field_length%) 6 � 7 8 � b%=Char_Comma%: 9M � got_quote% �copy_field_stuff_char(to%,b%,field_length%) � finished%=� : ;6 � b%=Char_LF% � b%=Char_CR% � �#csv_file_handle%: < last_field%=� = finished%=� > ? : @ � got_slash% � A Ȏ b% � B@ � �"n": �copy_field_stuff_char(to%,10,field_length%) C � D got_slash%=� E � F3 �copy_field_stuff_char(to%,b%,field_length%) G � H I � J� finished% K� to% ?to%=13 L� M N O4��copy_field_stuff_char(� to%, char%, � length%) Plength%+=1 Q�to% ?to%=char%:to%+=1 R� S T U!� �determine_number_of_fields V"� s$,count%,last_field%,dummy% W�open_csv_file XN� csv_file_handle%=0 s$=csv_file$:csv_file$="":� task_ok%,�msg_1("OK2",s$) Y� Z( �copy_field(0,last_field%,dummy%,�) [ count%+=1 \� last_field% ]�close_csv_file ^=count% _ ` a b� �get_csv_headings c#� s$,i%,last_node%,node%,dummy% dȕ csv_headings% e next%=!csv_headings% f% �heap_free("CSVH",csv_headings%) g csv_headings%=next% h� i�open_csv_file jlast_node%=0 k� i%=1 � csv_count% l, �copy_field(task_buff%,dummy%,dummy%,�) m s$=$task_buff% nO � s$="" s$=�msg_1("FI",�(i%)):� if a null heading, create an arbitrary one o& node%=�heap_claim("CSVH",�(s$)+5) p !node%=0 q $(node%+4)=s$ r9 � last_node% !last_node%=node% � csv_headings%=node% s last_node%=node% t� u$csv_file_ptr%=�#csv_file_handle% v�close_csv_file w� x y z {� �create_csv_headings |� s$,i%,last%,node% }ȕ csv_headings% ~ node%=!csv_headings% % �heap_free("CSVH",csv_headings%) � csv_headings%=node% �� �last%=0 �� i%=1 � csv_count% � s$=�msg_1("FI",�(i%)) �& node%=�heap_claim("CSVH",�(s$)+5) � !node%=0 � $(node%+4)=s$ �/ � last% !last%=node% � csv_headings%=node% � last%=node% �� �csv_file_ptr%=0 �� � � � �"� �determine_number_of_records �� count%,b%,new_line% �count%=0 ��hourglass_on ��open_csv_file �:�#csv_file_handle%=csv_file_ptr% :� put at field start �new_line%=� �� � b%=�#csv_file_handle% �7 � b%=Char_CR% � b%=Char_LF% � �#csv_file_handle% � � � � new_line% � count%+=1 � new_line%=� � � � new_line%=� � � �� �#csv_file_handle% ��close_csv_file ��hourglass_off �=count% � � � �� �doc_received �� loop%, temp$ � �� doc_file$="" � � doc_task%=task_buff%!4 � doc_window%=task_buff%!20 �/ doc_file$=�leaf(�task_rtoz(task_buff%+24)) �� �f�doc_task%=task_buff%!4 � doc_window%=task_buff%!20 � doc_file$=�leaf(�task_rtoz(task_buff%+24)) � � task_buff%!12=task_buff%!8 �4 ș"Wimp_SendMessage",19,task_buff%,task_buff%!4 �8 !win_buff%=main%:ș"Wimp_GetWindowState",,win_buff% �3 win_buff%!28=-1:ș"Wimp_OpenWindow",,win_buff% �0 �icon_write(main%,Icon_document%,doc_file$) �� � �� Attack string �temp$="" �� loop%=1 � �(doc_file$) �?� �(�doc_file$, loop%,1))>32 � temp$+=�doc_file$, loop%, 1) �� loop% �doc_file$=temp$ �� � � � �� �datasave �� loop%, byte% � �3� receipt of CSV file directly from application � �� task_buff%!40=CSV_Type% � � task_buff%!0=256 � task_buff%!12=task_buff%!8 � task_buff%!16=2 � task_buff%!36=-1 � �=� Convert terminated string to a string terminated by 13. �loop%=44 �ȕ (task_buff%?loop%)>31 � loop%+=1 �� �task_buff%?loop%=13 � �8$(task_buff%+44)="<Wimp$ScrapDir>."+$(task_buff%+44) �3ș"Wimp_SendMessage",17,task_buff%,task_buff%!4 �� �� � � �� �leaf(s$) �� dotindex% �dotindex%=0 �ȕ �s$,".",dotindex%+1) �$ dotindex%=�s$,".",dotindex%+1) �� �=�s$,dotindex%+1) � � � �� �prequit � �merge% � �: � ***** do some prompting regarding merge in progress �� �� � � � �� �try_merge_on �%� try to display the first record �merge%=� �.preserved_start_of_data_ptr%=csv_file_ptr% ��send("Edit Off",-1) ��merge_next_record �� � � �� �merge_off �,� stop merging and initialise everything �� next% � � � merge% �send("Edit On",-1) �merge%=� �csv_file$="" �csv_file_handle%=0 �csv_count%=0 �csv_headings%=0 �csv_field_ptrs%=0 �csv_field_lens%=0 �csv_file_ptr%=0 doc_file$="" doc_task%=0 doc_window%=0 field_count%=0 rec_togo%=0 rec_done%=0 � � �merge_next_record � rec_togo%<>0 � �hourglass_on �next_record �send("Merge",T_Merge%) �disable_merging_buttons � & $(error_buff%+4)=�msg_0("OK6")+�0 F ș"Wimp_ReportError",error_buff%,%10001,�msg_1("MS",�msg_0("ID")) �host_shutdown � � � �next_record E� calculates pointers to each field, and the length of each field (� len%,i%,dummy%,finished%,this_ptr% 7� check all records have identical number of fields � numfields% numfields%=0 �open_csv_file ;� csv_file_handle%=0 � task_ok%,�msg_1("OK2",csv_file$) :� free up the memory occupied by any existing pointers !ȕ csv_field_ptrs% " next%=!csv_field_ptrs% #' �heap_free("CSVP",csv_field_ptrs%) $ csv_field_ptrs%=next% %� &ȕ csv_field_lens% ' next%=!csv_field_lens% (' �heap_free("CSVL",csv_field_lens%) ) csv_field_lens%=next% *� +$�#csv_file_handle%=csv_file_ptr% ,i%=0 -� . i%+=1 / � 0I this_ptr%=�#csv_file_handle% :� pointer to real start of field 1$ �copy_field(0,dummy%,len%,�) 2 finished%=� 3E � � �#csv_file_handle% � i%=1 � len%=0 � dummy% � finished%=� 4 � finished% 5 �add_field_ptr(this_ptr%) 6 �add_field_len(len%) 71� i%=csv_count% � dummy% � �#csv_file_handle% 8� � dummy% �eol 9� i%<csv_count% � : ȕ i%<csv_count% ; i%+=1 < �add_field_ptr(0) = �add_field_len(0) > � ?� @$csv_file_ptr%=�#csv_file_handle% A�close_csv_file B� C D E � �eol F� x Gx=0 H� I2 � � �#csv_file_handle% � x=�#csv_file_handle% J2� x=Char_CR% � x=Char_LF% � �#csv_file_handle% K� L M N O� �add_field_ptr(index%) P� node%,last% Qnode%=�heap_claim("CSVP",8) R node%!0=0 Snode%!4=index% T� csv_field_ptrs%=0 � U csv_field_ptrs%=node% V� W last%=csv_field_ptrs% X ȕ !last% Y last%=!last% Z � [ !last%=node% \� ]� ^ _ ` a��add_field_len(index%) b� node%,last% cnode%=�heap_claim("CSVL",8) d node%!0=0 enode%!4=index% f� csv_field_lens%=0 � g csv_field_lens%=node% h� i last%=csv_field_lens% j ȕ !last% k last%=!last% l � m !last%=node% n� o� p q r s� �field_ptr(index%) t(� return the nth (starting at 0) ptr u� node% vnode%=csv_field_ptrs% w ȕ index% x5 � this is safe 'cos its validated before calling yB node%=!node%:�node%=0 � task_fatal%,"Bad field ptr requested" z index%-=1 {� |=node%!4 } ~ �� �field_len(index%) �+� return the nth (starting at 0) length �� node% �node%=csv_field_lens% � ȕ index% �5 � this is safe 'cos its validated before calling �B node%=!node%:�node%=0 � task_fatal%,"Bad field len requested" � index%-=1 �� �=node%!4 � � � �!� �send(command$,replytoken%) �� i%,m$ �� doc_file$="" � � �?� replytoken%<>-1 i%=Impulse_Request% � i%=Impulse_Command% �2m$=":"+�msg_0("SV")+"."+doc_file$+" "+command$ �Bș"Impulse_SendMessage",i%,m$,0,0,0,replytoken%,task_handle%,0 �� � � ���disable_merging_buttons �%�icon_shade(main%,Icon_PrintAll%) �"�icon_shade(main%,Icon_Print%) �!�icon_shade(main%,Icon_Next%) �!�icon_shade(main%,Icon_Edit%) �� � � ���enable_merging_buttons �'�icon_unshade(main%,Icon_PrintAll%) �$�icon_unshade(main%,Icon_Print%) �#�icon_unshade(main%,Icon_Next%) �#�icon_unshade(main%,Icon_Edit%) �� � � �&� �command(token%,params%,object%) �Ȏ token% � � � T_GetField% �% �get_field(params%,object%) � field_count%+=1 � � T_CloseDown% � dieplease% = � � �host_shutdown �� �� � � �!� �get_field(params%,object%) �2� params% points to the results of OS_ReadArgs �0� field_index%, field_name$, ptr%, finished% �� params%=-1 � �#field_name$=�task_rtoz(params%) �field_index%=0 �ptr%=csv_headings% �finished%=� �� � field_index%+=1 � � $(ptr%+4)=field_name$ � � finished%=� � � � ptr%=!ptr% �, � ptr%=0 � finished%=�:field_index%=-1 � � � �$� !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! �>� IF ptr%=0 ERROR task_fatal%, FNmsg_1("OK4",field_name$) � � ptr%=0 � �3 $(error_buff%+4)=�msg_1("OK4", field_name$) �J ș "Wimp_ReportError",error_buff%,%10001,�msg_1("MS",�msg_0("ID")) � � �%� !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! � �� finished% �0� field_index%<1 � field_index%>csv_count% � � �trans_reply_block(0,0) �� �O �trans_reply_block(�field_ptr(field_index%-1),�field_len(field_index%-1)) �� �� � � �"��trans_reply_block(ptr%,len%) �� dummy% �transmit%=� �transmit_ptr%=0 �8� transmit_block% �heap_free("BLCK",transmit_block%) �.transmit_block%=�heap_claim("BLCK",len%+1) �� len%>0 � � �open_csv_file �I � csv_file_handle%=0 transmit%=�:� task_ok%,�msg_2("OK2",csv_file$) � �#csv_file_handle%=ptr% �0 �copy_field(transmit_block%,dummy%,len%,�) � �close_csv_file �� � $transmit_block%="" �� �transmit_top%=(len%+1+3)��3 �transmit_size%=len% �$transmit_tag%=�next_transmit_tag �sș"Impulse_SendMessage",Impulse_Reply%,"Dummy text",-1,,,transmit_tag%,task_handle%,transmit_top%-transmit_ptr% �� � � �ݤnext_transmit_tag �transmit_count%+=1 �=transmit_count% � � �+��send_data(token%,buffer%,buffersize%) �� size%,i% � �C�transmit% � (token%<>transmit_tag%) � task_ok%, �msg_0("OK3") �%size%=transmit_top%-transmit_ptr% �-� size%<buffersize% � size%=0 transmit%=� �(� size%>buffersize% size=buffersize% �5?(transmit_ptr%+transmit_block%+transmit_size%)=0 �Qș"Impulse_TransmitData",transmit_ptr%+transmit_block%,size%,,,,,task_handle% �transmit_ptr%+=size% �� � � �� �reply(token%) �Ȏ token% � � � T_Print%: �reply_print � � T_Merge%: �merge_done � � � �merge_done �rec_done%=0 � �field_count%=0 � �send("Edit On",-1) 2 csv_file_ptr%=preserved_start_of_data_ptr% merge%=� ! � task_ok%, �msg_0("OK7") � 0 �icon_write(main%,Icon_ToGo%,�(rec_togo%)) ' �icon_write(main%,Icon_Done%,"1") & �icon_unhide(main%,Icon_ToProc%) ( �icon_unhide(main%,Icon_RecsProc%) ( �icon_unhide(main%,Icon_PrintAll%) $ �icon_unhide(main%,Icon_ToGo%) $ �icon_unhide(main%,Icon_Done%) % �icon_unhide(main%,Icon_Print%) $ �icon_unhide(main%,Icon_Next%) $ �icon_unhide(main%,Icon_Edit%) & �icon_hide(main%,Icon_Headings%) & �icon_hide(main%,Icon_DispHead%) ( �icon_hide(main%,Icon_StartMerge%) 9 !win_buff%=main%:ș"Wimp_GetWindowState",,win_buff% , win_buff%!8=win_buff%!16 - Window_Big% $ ș"Wimp_OpenWindow",,win_buff% � �done_record �enable_merging_buttons �hourglass_off � ! " #��done_record $rec_togo%-=1 %rec_done%+=1 &.�icon_write(main%,Icon_ToGo%,�(rec_togo%)) '.�icon_write(main%,Icon_Done%,�(rec_done%)) (� ) * +��reply_print ,� command$ -( command$=�task_rtoz(task_buff%+36) . Ȏ command$ � /# � "PrintDone" : �print_done 0$ � "PrintError": �print_error 1 � 2� 3 4 5��print_error 6E� No printer driver was loaded if we get here. If we are doing a 7<� print all records, then we should stop the print here. 8 printing%=� 9 gotprintreply%=� : ;$ $(error_buff%+4)=�msg_0("OK9") <K ș "Wimp_ReportError", error_buff%, %10001, �msg_1("MS",�msg_0("ID")) = >& �pending_close% � �host_shutdown ? �enable_merging_buttons @) �icon_unhide(main%, Icon_PrintAll%) A B� C D E��print_done F"� Print went OK if we get here Gprinting%=� H�pending_close% � I �host_shutdown J� K. �icon_set(main%,Icon_PrintAll%) � L% � PROCdone_record M& �merge_next_record N O& � !!!!!!!!!!!!!!!! P. � Now done after wimp_poll Q1 � PROCsend("Print",T_Print%) R S- � Set reply variable TRUE T$ gotprintreply%=� U& � !!!!!!!!!!!!!!!! V W printing%=� X � Y+ �enable_merging_buttons Z � [� \� ] ^� Error library _ `��error_initialise a� error_buff% 256 b� c d��error e� r$,r% f r$=�$ g!�=task_ok% � �=task_fatal% � h r%=�r$,"in "+�Char_Quote%) i �r%<>0 r$=�r$,r%-1) j� k Ȏ � � l#� task_ok%: �error_box(r$,1) m#� task_fatal%: �error_box(r$,2) nL : �error_box("Unexpected error :- "+r$+" ("+�(�)+"/"+�(�)+")",3) o� p� q r��error_box(r$,error_flag%) s� r% tș"Wimp_CreateMenu",,-1 u)!error_buff%=�:$(error_buff%+4)=r$+�0 v?ș"Wimp_ReportError",error_buff%,error_flag%,task_id$ � ,r% w �r%=2 � � �:�host_shutdown:� x� y: z� Heap library {: |��heap_free(ident$,block%) }� r0%,f% ~�block%<>0 � block%-=4 �E � PROCtrace_0("","PROCheap_free("+ident$+",&"+STR$~(block%)+")") �V �!block%<>�heap_ident_num(ident$) � task_ok%,"Corrupt "+ident$+" block not freed" �/ ș"XOS_Heap",3,heap_start%,block% � r0%;f% �C �(f% � 1) � task_fatal%,"Block "+ident$+": "+�task_rtoz(r0%+4) �� �� �: �ݤheap_claim(ident$,size%) �� p% �7� need to add 4 extra bytes 'cos if the block needs �4� extending then the first word gets trampled on �size%+=4 �.ȕ size%>=�heap_freespace �heap_increase:� �)� claim the block and store the ident �+ș"OS_Heap",2,heap_start%,,size% � ,,p% �!p%=�heap_ident_num(ident$) � p%+=4 �=p% �: ���heap_increase �� slot% �#ș"Wimp_SlotSize",-1,-1 � slot% �*ș"Wimp_SlotSize",slot%+heap_psize%,-1 ��heap_size%=0 � �+ ș"OS_Heap",0,heap_start%,,heap_psize% �� �+ ș"OS_Heap",5,heap_start%,,heap_psize% �� �heap_size%+=heap_psize% �� �: �ݤheap_ident_num(v$) �� i%,j% � �i%=0 � 3 �# j%=j% � �(�v$,i%+1,1))<<(i%*8) �� �=j% �: �ݤheap_freespace �� f% ��heap_size%=0 � =0 �$ș"OS_Heap",1,heap_start% � ,,f% �=f% �: �� Window library �: ���win_initialise �� win_buff% 2048 �win_template$="" �� �: �3��win_load_create(f$,n$,sprite_pool%,� handle%) �#�win_load(f$,n$,win_buff%,2048) �win_buff%!64=sprite_pool% �"�win_create(win_buff%,handle%) �� �: �!��win_load(f$,n$,buf%,limit%) �&� f$ - filename of template file �%� n$ - name of template to load �N� buf% - buffer which needs to be big enough to hold the window definition �M� AND the indirected data, due to the way Wimp_LoadTemplate works. �� �A� PROCwin_load will automatically dimension enough memory for �� the indirected data. � � ws_buf% �� size% �� data% �� found% �� s%,f% � �f$<>"" � �" �win_sizes(f$,n$,size%,data%) �� �- �win_sizes(win_template$,n$,size%,data%) �� �v�limit%<(size%+data%) � task_ok%,"Buffer not big enough for '"+n$+"' - "+�(size%)+" + "+�(data%)+" bytes required" �%�f$<>"" ș"Wimp_OpenTemplate",,f$ �� data%<>0 � � � ws_buf% data% �S ș"XWimp_LoadTemplate",,buf%,ws_buf%,ws_buf%+data%,-1,n$,0 � s%,,,,,,found%;f% �� �A ș"XWimp_LoadTemplate",,buf%,0,0,-1,n$,0 � s%,,,,,,found%;f% �� �"�f$<>"" ș"Wimp_CloseTemplate" �/�(f%�1) � task_ok%,n$+": "+�task_rtoz(s%+4) �6�found%=0 � task_ok%,"Template '"+n$+"' not found" �� �: � ��win_create(buf%,� handle%) �4� buf% - buffer holding the window definition �,� handle% - handle of the created window �)ș"Wimp_CreateWindow",,buf% � handle% �� �: �&��win_sizes(f$,n$,� size%,� data%) �� i% �� file% � � ptr% � � offset% �� type% �� ident$ �� num_icons% �file%=�(f$) �size%=0 �data%=0 �ptr%=16 �� � �#file%=ptr% � offset%=�win_word(file%) � � offset%<>0 � � �#file%=ptr%+8 � type%=�win_word(file%) � ident$=�win_string(file%) � ptr%+=24 � �type%=1 � � �ident$=n$ � � �#file%=offset%+84 �# num_icons%=�win_word(file%) �' data%=�win_title(file%,offset%) �A �num_icons%<>0 data%+=�win_icon(file%,num_icons%,offset%) � size%=88+(num_icons%*32) �/ offset%=0:� just to get out of the loop � � � � � � �� offset%=0 ��#file% �� : ݤwin_word(h%) /=�#h%+(�#h% << 8)+(�#h% << 16)+(�#h% << 24) : ݤwin_string(h%) � s$,c% � c%=�#h% �c%>31 s$+=�(c%) � c%<32 =s$ : ݤwin_title(file%,offset%) � v% �#file%=offset%+28 v%=�win_word(file%) � (v% � 1<<31) � � (v% � 1<<26) � 4 =�win_isd(file%,offset%+56,offset%+72,offset%) � � � (v% � 1) � 4 =�win_isd(file%,offset%+56,offset%+72,offset%) � � =0 : "ݤwin_icon(file%,num%,offset%) � i%,j% j%=0 �i%=0 � num%-1 H j%+=�win_isd(file%,offset%+88+i%*32+16,offset%+88+i%*32+20,offset%) � !=j% ": #$ݤwin_isd(file%,o1%,o2%,offset%) $� v%,ist%,size%,i% %�#file%=o1% &v%=�win_word(file%) '*� even if an icon is marked as deleted (� it must be allowed for! )i%=(v% � %100000000) *ist%=(v% � 3) + (i% >> 6) + Ȏ ist% � ,� 0: size%=0 -� 1: size%=0 .� 2: size%=0 /� 3: size%=0 0� 4: size%=0 1� 5,7: �#file%=o2%+4 2! v%=�win_word(file%) 3 �v%=-1 � 4 size%=0 5 � 6! �#file%=offset%+v% 7, size%=�(�win_string(file%))+1 8 � 9 �#file%=o2%+8 :% size%+=�win_word(file%) ;� 6: �#file%=o2%+8 <$ size%=�win_word(file%) =� > =size% ?: @� Icon library A: B��icon_initialise C� icon_buffer% 256 D� E: F��icon_hide(a%,b%) G!icon_buffer%=a% Hicon_buffer%!4=b% I!icon_buffer%!8=(1<<7)+(1<<23) J"icon_buffer%!12=(1<<7)+(1<<23) K'ș"Wimp_SetIconState",,icon_buffer% L� M: N��icon_write(a%,b%,s$) O!icon_buffer%=a% Picon_buffer%!4=b% Q'ș"Wimp_GetIconState",,icon_buffer% R �(�(s$)+1)>icon_buffer%!36 � S3 � task_fatal%,"'"+s$+"' won't fit icon "+�(b%) T� U$(icon_buffer%!28)=s$ V&icon_buffer%!8=0:icon_buffer%!12=0 W'ș"Wimp_SetIconState",,icon_buffer% X� Y: Z��icon_shade(a%,b%) [!icon_buffer%=a% \icon_buffer%!4=b% ]icon_buffer%!8=1<<22 ^icon_buffer%!12=1<<22 _'ș"Wimp_SetIconState",,icon_buffer% `� a: bݤicon_set(a%,b%) c!icon_buffer%=a% dicon_buffer%!4=b% e'ș"Wimp_GetIconState",,icon_buffer% f%=((icon_buffer%!24 � (1<<21))<>0) g: h��icon_unhide(a%,b%) i!icon_buffer%=a% jicon_buffer%!4=b% kicon_buffer%!8=0 licon_buffer%!12=1<<23 m'ș"Wimp_SetIconState",,icon_buffer% n� o: p��icon_unshade(a%,b%) q!icon_buffer%=a% ricon_buffer%!4=b% sicon_buffer%!8=0 ticon_buffer%!12=1<<22 u'ș"Wimp_SetIconState",,icon_buffer% v� w: x� Task library y: z� �task_initialise(n$) {task_id$=n$ |� task_buff% 256 }� RiscOS%>=300 � ~' task_buff%!0=Message_MM_Document% ( task_buff%!4=Message_WindowClosed% �) task_buff%!8=Message_TaskCloseDown% �$ task_buff%!12=Message_PreQuit% �% task_buff%!16=Message_RAMFetch% �% task_buff%!20=Message_DataLoad% �% task_buff%!24=Message_DataSave% �& task_buff%!28=Message_Impulse_1% �& task_buff%!32=Message_Impulse_2% �! task_buff%!36=Message_Quit% �U ș"Wimp_Initialise",310,&4B534154,n$,task_buff%+36 � wimp_version%,task_handle% �� �H ș "Wimp_Initialise",200,&4B534154,n$ � wimp_version%,task_handle% �� �#�("Set MailMerge$Running TRUE") �task_action%=0 � �*� !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! �%� task_mask%=1:REM no null events � �5task_mask%=0 : � I want my null events! � �*� !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! � �task_ok%=254 � �task_fatal%=253 �� �: ���task_shutdown �ș"Wimp_CloseDown" � �("UnSet MailMerge$Running") �� �� �: �ݤtask_rtoz(p%) �� p$ � ȕ ?p%<>0 � p$+=�(?p%) � p%+=1 �� �=p$ �: �� Message library �: ���msg_initialise(N$) �� c%,c$,i% �c%=�(N$) �*�c%=0 � 0, "Cannot find messages file" �ms_tags%=0 ��hourglass_on �ȕ �(�#c%) � c$=�#c% � �c$<>"" � � �c$,1)<>"#" � � �c$,":")<>0 ms_tags%+=1 � � � � �� ��ms_tags%<>0 � �0 � ms_text$(ms_tags%-1),ms_tags$(ms_tags%-1) � �#c%=0 � i%=0 � ȕ ��#c% � c$=�#c% � �c$<>"" � � �c$,1)<>"#" � �$ ms_tags$(i%)=�c$,�c$,":")-1) �$ ms_text$(i%)=�c$,�c$,":")+1) � i%+=1 � � � � � � �� ��#c% ��hourglass_off �� �: �ݤmsg_0(T$) �=�msg_4(T$,"","","","") �: �ݤmsg_1(T$,S$) �=�msg_4(T$,S$,"","","") �; �ݤmsg_2(T$,S0$,S1$) �=�msg_4(T$,S0$,S1$,"","") �: �ݤmsg_4(T$,S0$,S1$,S2$,S3$) �� i%,f% ��ms_tags%=0 � � =T$ �� � �i%=0 � ms_tags%-1 � �T$=ms_tags$(i%) � � T$=ms_text$(i%) � f%=�T$,"%0") �( �f%<>0 T$=�T$,f%-1)+S0$+�T$,f%+2) � f%=�T$,"%1") �( �f%<>0 T$=�T$,f%-1)+S1$+�T$,f%+2) � f%=�T$,"%2") �( �f%<>0 T$=�T$,f%-1)+S2$+�T$,f%+2) � f%=�T$,"%3") �( �f%<>0 T$=�T$,f%-1)+S3$+�T$,f%+2) � i%=ms_tags% � � � � �� �=T$ �: ���hourglass_on �ș"Hourglass_On" �hourglass_count%+=1 �� �: ���hourglass_off �ș"Hourglass_Off" �hourglass_count%-=1 �� �: ���open_csv_file �� csv_file$="" � �!csv_file_handle%=�(csv_file$) �� �: ���close_csv_file ��csv_file_handle%=0 � ��#csv_file_handle% �csv_file_handle%=0 �� � � �consts appdir$="<MailMerge$Dir>" Icon_ToProc%=1 Icon_RecsProc%=2 Icon_Headings%=3 Icon_PrintAll%=4 Icon_CSV%=5 Icon_ToGo%=6 Icon_Done%=7 Icon_Print%=8 Icon_document%=10 Icon_Next%=11 Icon_Edit%=12 Icon_DispHead%=13 Icon_StartMerge%=14 Icon_DropHere%=15 Window_Small%=236 Window_Big%=360 T_GetField%=0 T_GetData%=1 T_GetTimeDate%=2 T_Print%=3 T_Merge%=4 T_CloseDown%=7 Impulse_Command%=&200 Impulse_Request%=&201 Impulse_Reply%=&202 Impulse_SendData%=&203 Impulse_ReceiveData%=&204 !Impulse_DeferredReply%=&205 " #DDF_Type%=&D93 $CSV_Type%=&DFE % &Message_Quit%=0 'Message_DataSave%=1 (Message_DataLoad%=3 )Message_RAMFetch%=6 *Message_PreQuit%=8 +!Message_TaskCloseDown%=&400C3 , Message_WindowClosed%=&400CB -Message_Impulse_1%=&80E18 .Message_Impulse_2%=&80E19 /Message_MM_Document%=&82140 0 1Char_Space%=32 2Char_Quote%=34 3Char_Comma%=44 4Char_LF%=10 5Char_CR%=13 6Char_Slash%=92 7Char_HardSpace%=160 8� 9 :� �readopsys ;%ș "OS_Byte",129,0,255 � ,RiscOS% <-� RiscOS%<163 � RiscOS%=200 � RiscOS%=300 =� > �
00000000 0d 00 01 11 f4 20 3e 20 21 52 75 6e 49 6d 61 67 |..... > !RunImag| 00000010 65 0d 00 02 04 0d 00 03 21 ee 20 85 20 85 20 a2 |e.......!. . . .| 00000020 20 9f 2c f6 24 2b 22 20 61 74 20 6c 69 6e 65 20 | .,.$+" at line | 00000030 22 2b c3 28 9e 29 0d 00 04 04 0d 00 05 0b f2 63 |"+.(.).........c| 00000040 6f 6e 73 74 73 0d 00 06 16 68 6f 75 72 67 6c 61 |onsts....hourgla| 00000050 73 73 5f 63 6f 75 6e 74 25 3d 30 0d 00 07 11 f2 |ss_count%=0.....| 00000060 68 6f 75 72 67 6c 61 73 73 5f 6f 6e 0d 00 08 04 |hourglass_on....| 00000070 0d 00 09 36 f4 20 46 69 6e 64 20 6f 75 74 20 77 |...6. Find out w| 00000080 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 6c |hat the currentl| 00000090 79 20 73 65 6c 65 63 74 65 64 20 63 6f 75 6e 74 |y selected count| 000000a0 72 79 20 69 73 2e 0d 00 0a 14 de 20 63 6f 75 6e |ry is...... coun| 000000b0 74 72 79 62 75 66 66 20 36 34 0d 00 0b 04 0d 00 |trybuff 64......| 000000c0 0c 0e f2 72 65 61 64 6f 70 73 79 73 0d 00 0d 25 |...readopsys...%| 000000d0 c8 99 20 22 4f 53 5f 42 79 74 65 22 2c 20 37 30 |.. "OS_Byte", 70| 000000e0 2c 20 31 32 37 20 b8 20 2c 63 6f 75 6e 74 72 79 |, 127 . ,country| 000000f0 25 0d 00 0e 4e c8 99 20 22 4f 53 5f 53 65 72 76 |%...N.. "OS_Serv| 00000100 69 63 65 43 61 6c 6c 22 2c 20 2c 20 26 34 33 2c |iceCall", , &43,| 00000110 20 32 2c 20 63 6f 75 6e 74 72 79 25 20 2c 20 63 | 2, country% , c| 00000120 6f 75 6e 74 72 79 62 75 66 66 2c 20 32 35 36 20 |ountrybuff, 256 | 00000130 b8 20 2c 2c 2c 2c 2c 20 6c 65 6e 67 74 68 25 0d |. ,,,,, length%.| 00000140 00 0f 1a 63 6f 75 6e 74 72 79 62 75 66 66 3f 6c |...countrybuff?l| 00000150 65 6e 67 74 68 25 3d 31 33 0d 00 10 04 0d 00 11 |ength%=13.......| 00000160 2d f2 6d 73 67 5f 69 6e 69 74 69 61 6c 69 73 65 |-.msg_initialise| 00000170 28 61 70 70 64 69 72 24 2b 22 2e 22 2b 24 63 6f |(appdir$+"."+$co| 00000180 75 6e 74 72 79 62 75 66 66 29 0d 00 12 22 f2 74 |untrybuff)...".t| 00000190 61 73 6b 5f 69 6e 69 74 69 61 6c 69 73 65 28 a4 |ask_initialise(.| 000001a0 6d 73 67 5f 30 28 22 49 44 22 29 29 0d 00 13 14 |msg_0("ID"))....| 000001b0 f2 69 63 6f 6e 5f 69 6e 69 74 69 61 6c 69 73 65 |.icon_initialise| 000001c0 0d 00 14 13 f2 77 69 6e 5f 69 6e 69 74 69 61 6c |.....win_initial| 000001d0 69 73 65 0d 00 15 15 f2 65 72 72 6f 72 5f 69 6e |ise.....error_in| 000001e0 69 74 69 61 6c 69 73 65 0d 00 16 0f f2 69 6e 69 |itialise.....ini| 000001f0 74 69 61 6c 69 73 65 0d 00 17 04 0d 00 18 2c e0 |tialise.......,.| 00000200 3d e0 2b 38 30 39 36 3a f4 20 67 69 76 65 20 75 |=.+8096:. give u| 00000210 73 20 38 4b 20 6f 66 20 66 6c 6f 61 74 69 6e 67 |s 8K of floating| 00000220 20 6d 65 6d 6f 72 79 0d 00 19 2b 68 65 61 70 5f | memory...+heap_| 00000230 65 6e 64 25 3d 93 3a f4 20 77 68 65 72 65 20 74 |end%=.:. where t| 00000240 68 65 20 6d 65 6d 6f 72 79 20 6e 6f 77 20 65 6e |he memory now en| 00000250 64 73 0d 00 1a 0c d3 3d e0 2b 38 30 39 36 0d 00 |ds.....=.+8096..| 00000260 1b 2d 68 65 61 70 5f 73 74 61 72 74 25 3d 93 3a |.-heap_start%=.:| 00000270 f4 20 77 68 65 72 65 20 74 68 65 20 68 65 61 70 |. where the heap| 00000280 20 77 69 6c 6c 20 73 74 61 72 74 0d 00 1c 24 68 | will start...$h| 00000290 65 61 70 5f 73 69 7a 65 25 3d 68 65 61 70 5f 65 |eap_size%=heap_e| 000002a0 6e 64 25 2d 68 65 61 70 5f 73 74 61 72 74 25 0d |nd%-heap_start%.| 000002b0 00 1d 27 c8 99 22 4f 53 5f 52 65 61 64 4d 65 6d |..'.."OS_ReadMem| 000002c0 4d 61 70 49 6e 66 6f 22 20 b8 20 68 65 61 70 5f |MapInfo" . heap_| 000002d0 70 73 69 7a 65 25 0d 00 1e 04 0d 00 1f 14 e7 68 |psize%.........h| 000002e0 65 61 70 5f 73 69 7a 65 25 3c 3e 30 20 8c 0d 00 |eap_size%<>0 ...| 000002f0 20 2a 20 c8 99 22 4f 53 5f 48 65 61 70 22 2c 30 | * .."OS_Heap",0| 00000300 2c 68 65 61 70 5f 73 74 61 72 74 25 2c 2c 68 65 |,heap_start%,,he| 00000310 61 70 5f 73 69 7a 65 25 0d 00 21 05 cc 0d 00 22 |ap_size%..!...."| 00000320 13 20 f2 68 65 61 70 5f 69 6e 63 72 65 61 73 65 |. .heap_increase| 00000330 0d 00 23 05 cd 0d 00 24 04 0d 00 25 12 f2 68 6f |..#....$...%..ho| 00000340 75 72 67 6c 61 73 73 5f 6f 66 66 0d 00 26 0e ee |urglass_off..&..| 00000350 20 85 20 f2 65 72 72 6f 72 0d 00 27 04 0d 00 28 | . .error..'...(| 00000360 05 f5 0d 00 29 38 20 c8 99 20 22 57 69 6d 70 5f |....)8 .. "Wimp_| 00000370 50 6f 6c 6c 22 2c 74 61 73 6b 5f 6d 61 73 6b 25 |Poll",task_mask%| 00000380 2c 74 61 73 6b 5f 62 75 66 66 25 20 b8 20 74 61 |,task_buff% . ta| 00000390 73 6b 5f 61 63 74 69 6f 6e 25 0d 00 2a 78 20 c8 |sk_action%..*x .| 000003a0 99 20 22 49 6d 70 75 6c 73 65 5f 44 65 63 6f 64 |. "Impulse_Decod| 000003b0 65 22 2c 74 61 73 6b 5f 61 63 74 69 6f 6e 25 2c |e",task_action%,| 000003c0 74 61 73 6b 5f 62 75 66 66 25 2c 2c 2c 2c 6d 65 |task_buff%,,,,me| 000003d0 74 68 6f 64 5f 74 61 62 6c 65 25 2c 74 61 73 6b |thod_table%,task| 000003e0 5f 68 61 6e 64 6c 65 25 20 b8 20 74 61 73 6b 5f |_handle% . task_| 000003f0 61 63 74 69 6f 6e 25 2c 2c 2c 2c 2c 74 6f 6b 65 |action%,,,,,toke| 00000400 6e 25 2c 70 61 72 61 6d 73 25 2c 6f 62 6a 65 63 |n%,params%,objec| 00000410 74 25 0d 00 2b 04 0d 00 2c 16 20 c8 8e 20 74 61 |t%..+...,. .. ta| 00000420 73 6b 5f 61 63 74 69 6f 6e 25 20 ca 0d 00 2d 12 |sk_action% ...-.| 00000430 20 20 20 c9 20 30 20 3a 20 f2 6e 75 6c 6c 0d 00 | . 0 : .null..| 00000440 2e 2c 20 20 20 c9 20 32 20 3a 20 c8 99 22 57 69 |., . 2 : .."Wi| 00000450 6d 70 5f 4f 70 65 6e 57 69 6e 64 6f 77 22 2c 2c |mp_OpenWindow",,| 00000460 74 61 73 6b 5f 62 75 66 66 25 0d 00 2f 1a 20 20 |task_buff%../. | 00000470 20 c9 20 33 20 3a 20 e7 20 70 72 69 6e 74 69 6e | . 3 : . printin| 00000480 67 25 20 8c 0d 00 30 22 20 20 20 20 20 20 20 20 |g% ...0" | 00000490 20 20 20 20 20 20 70 65 6e 64 69 6e 67 5f 63 6c | pending_cl| 000004a0 6f 73 65 25 3d b9 0d 00 31 11 20 20 20 20 20 20 |ose%=...1. | 000004b0 20 20 20 20 20 20 cc 0d 00 32 20 20 20 20 20 20 | ...2 | 000004c0 20 20 20 20 20 20 20 20 20 f2 68 6f 73 74 5f 73 | .host_s| 000004d0 68 75 74 64 6f 77 6e 0d 00 33 11 20 20 20 20 20 |hutdown..3. | 000004e0 20 20 20 20 20 20 20 cd 0d 00 34 19 20 20 20 c9 | ...4. .| 000004f0 20 36 20 3a 20 f2 6d 6f 75 73 65 5f 63 6c 69 63 | 6 : .mouse_clic| 00000500 6b 0d 00 35 18 20 20 20 c9 20 39 20 3a 20 f2 6d |k..5. . 9 : .m| 00000510 65 6e 75 5f 63 6c 69 63 6b 0d 00 36 19 20 20 20 |enu_click..6. | 00000520 c9 20 31 37 2c 31 38 20 3a 20 f2 72 65 63 65 69 |. 17,18 : .recei| 00000530 76 65 0d 00 37 2c 20 20 20 c9 20 49 6d 70 75 6c |ve..7, . Impul| 00000540 73 65 5f 43 6f 6d 6d 61 6e 64 25 2c 20 49 6d 70 |se_Command%, Imp| 00000550 75 6c 73 65 5f 52 65 71 75 65 73 74 25 3a 0d 00 |ulse_Request%:..| 00000560 38 29 20 20 20 20 20 f2 63 6f 6d 6d 61 6e 64 28 |8) .command(| 00000570 74 6f 6b 65 6e 25 2c 70 61 72 61 6d 73 25 2c 6f |token%,params%,o| 00000580 62 6a 65 63 74 25 29 0d 00 39 18 20 20 20 c9 20 |bject%)..9. . | 00000590 49 6d 70 75 6c 73 65 5f 52 65 70 6c 79 25 3a 0d |Impulse_Reply%:.| 000005a0 00 3a 17 20 20 20 20 20 f2 72 65 70 6c 79 28 74 |.:. .reply(t| 000005b0 6f 6b 65 6e 25 29 0d 00 3b 1b 20 20 20 c9 20 49 |oken%)..;. . I| 000005c0 6d 70 75 6c 73 65 5f 53 65 6e 64 44 61 74 61 25 |mpulse_SendData%| 000005d0 3a 0d 00 3c 2b 20 20 20 20 20 f2 73 65 6e 64 5f |:..<+ .send_| 000005e0 64 61 74 61 28 74 6f 6b 65 6e 25 2c 70 61 72 61 |data(token%,para| 000005f0 6d 73 25 2c 6f 62 6a 65 63 74 25 29 0d 00 3d 06 |ms%,object%)..=.| 00000600 20 cb 0d 00 3e 04 0d 00 3f 07 fd 20 a3 0d 00 40 | ...>...?.. ...@| 00000610 05 e0 0d 00 41 04 0d 00 42 04 0d 00 43 04 0d 00 |....A...B...C...| 00000620 44 11 dd 20 f2 69 6e 69 74 69 61 6c 69 73 65 0d |D.. .initialise.| 00000630 00 45 39 c8 99 22 49 6d 70 75 6c 73 65 5f 49 6e |.E9.."Impulse_In| 00000640 69 74 69 61 6c 69 73 65 22 2c 30 2c 74 61 73 6b |itialise",0,task| 00000650 5f 68 61 6e 64 6c 65 25 2c a4 6d 73 67 5f 30 28 |_handle%,.msg_0(| 00000660 22 49 44 22 29 2c 2d 31 0d 00 46 39 f2 77 69 6e |"ID"),-1..F9.win| 00000670 5f 6c 6f 61 64 5f 63 72 65 61 74 65 28 61 70 70 |_load_create(app| 00000680 64 69 72 24 2b 22 2e 54 65 6d 70 6c 61 74 65 73 |dir$+".Templates| 00000690 22 2c 22 6d 61 69 6e 22 2c 31 2c 6d 61 69 6e 25 |","main",1,main%| 000006a0 29 0d 00 47 22 f2 69 63 6f 6e 5f 68 69 64 65 28 |)..G".icon_hide(| 000006b0 6d 61 69 6e 25 2c 49 63 6f 6e 5f 54 6f 50 72 6f |main%,Icon_ToPro| 000006c0 63 25 29 0d 00 48 24 f2 69 63 6f 6e 5f 68 69 64 |c%)..H$.icon_hid| 000006d0 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 52 65 63 |e(main%,Icon_Rec| 000006e0 73 50 72 6f 63 25 29 0d 00 49 24 f2 69 63 6f 6e |sProc%)..I$.icon| 000006f0 5f 68 69 64 65 28 6d 61 69 6e 25 2c 49 63 6f 6e |_hide(main%,Icon| 00000700 5f 50 72 69 6e 74 41 6c 6c 25 29 0d 00 4a 20 f2 |_PrintAll%)..J .| 00000710 69 63 6f 6e 5f 68 69 64 65 28 6d 61 69 6e 25 2c |icon_hide(main%,| 00000720 49 63 6f 6e 5f 54 6f 47 6f 25 29 0d 00 4b 20 f2 |Icon_ToGo%)..K .| 00000730 69 63 6f 6e 5f 68 69 64 65 28 6d 61 69 6e 25 2c |icon_hide(main%,| 00000740 49 63 6f 6e 5f 44 6f 6e 65 25 29 0d 00 4c 21 f2 |Icon_Done%)..L!.| 00000750 69 63 6f 6e 5f 68 69 64 65 28 6d 61 69 6e 25 2c |icon_hide(main%,| 00000760 49 63 6f 6e 5f 50 72 69 6e 74 25 29 0d 00 4d 20 |Icon_Print%)..M | 00000770 f2 69 63 6f 6e 5f 68 69 64 65 28 6d 61 69 6e 25 |.icon_hide(main%| 00000780 2c 49 63 6f 6e 5f 4e 65 78 74 25 29 0d 00 4e 20 |,Icon_Next%)..N | 00000790 f2 69 63 6f 6e 5f 68 69 64 65 28 6d 61 69 6e 25 |.icon_hide(main%| 000007a0 2c 49 63 6f 6e 5f 45 64 69 74 25 29 0d 00 4f 26 |,Icon_Edit%)..O&| 000007b0 f2 69 63 6f 6e 5f 68 69 64 65 28 6d 61 69 6e 25 |.icon_hide(main%| 000007c0 2c 49 63 6f 6e 5f 53 74 61 72 74 4d 65 72 67 65 |,Icon_StartMerge| 000007d0 25 29 0d 00 50 23 f2 69 63 6f 6e 5f 77 72 69 74 |%)..P#.icon_writ| 000007e0 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 43 53 56 |e(main%,Icon_CSV| 000007f0 25 2c 22 22 29 0d 00 51 28 f2 69 63 6f 6e 5f 77 |%,"")..Q(.icon_w| 00000800 72 69 74 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f |rite(main%,Icon_| 00000810 64 6f 63 75 6d 65 6e 74 25 2c 22 22 29 0d 00 52 |document%,"")..R| 00000820 25 f2 69 63 6f 6e 5f 73 68 61 64 65 28 6d 61 69 |%.icon_shade(mai| 00000830 6e 25 2c 49 63 6f 6e 5f 44 69 73 70 48 65 61 64 |n%,Icon_DispHead| 00000840 25 29 0d 00 53 37 21 77 69 6e 5f 62 75 66 66 25 |%)..S7!win_buff%| 00000850 3d 6d 61 69 6e 25 3a c8 99 22 57 69 6d 70 5f 47 |=main%:.."Wimp_G| 00000860 65 74 57 69 6e 64 6f 77 53 74 61 74 65 22 2c 2c |etWindowState",,| 00000870 77 69 6e 5f 62 75 66 66 25 0d 00 54 2c 77 69 6e |win_buff%..T,win| 00000880 5f 62 75 66 66 25 21 38 3d 77 69 6e 5f 62 75 66 |_buff%!8=win_buf| 00000890 66 25 21 31 36 20 2d 20 57 69 6e 64 6f 77 5f 53 |f%!16 - Window_S| 000008a0 6d 61 6c 6c 25 0d 00 55 22 c8 99 22 57 69 6d 70 |mall%..U".."Wimp| 000008b0 5f 4f 70 65 6e 57 69 6e 64 6f 77 22 2c 2c 77 69 |_OpenWindow",,wi| 000008c0 6e 5f 62 75 66 66 25 0d 00 56 04 0d 00 57 16 de |n_buff%..V...W..| 000008d0 20 6d 65 74 68 6f 64 5f 74 61 62 6c 65 25 20 36 | method_table% 6| 000008e0 34 0d 00 58 14 50 25 3d 6d 65 74 68 6f 64 5f 74 |4..X.P%=method_t| 000008f0 61 62 6c 65 25 0d 00 59 0b 5b 20 4f 50 54 20 30 |able%..Y.[ OPT 0| 00000900 0d 00 5a 3d 20 20 20 45 51 55 44 20 30 20 20 20 |..Z= EQUD 0 | 00000910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000920 20 20 20 20 3b 20 6d 65 74 68 6f 64 20 73 74 72 | ; method str| 00000930 75 63 74 75 72 65 20 66 6f 72 6d 61 74 0d 00 5b |ucture format..[| 00000940 2b 20 20 20 45 51 55 44 20 30 20 20 20 20 20 20 |+ EQUD 0 | 00000950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000960 20 3b 20 66 6c 61 67 73 0d 00 5c 25 20 20 20 45 | ; flags..\% E| 00000970 51 55 44 20 54 5f 47 65 74 46 69 65 6c 64 25 20 |QUD T_GetField% | 00000980 20 20 20 20 20 20 3b 20 74 6f 6b 65 6e 0d 00 5d | ; token..]| 00000990 29 20 20 20 45 51 55 53 20 22 47 65 74 46 69 65 |) EQUS "GetFie| 000009a0 6c 64 22 2b bd 30 20 20 20 20 20 20 20 20 3b 20 |ld"+.0 ; | 000009b0 6d 65 74 68 6f 64 0d 00 5e 29 20 20 20 45 51 55 |method..^) EQU| 000009c0 53 20 bd 30 20 20 20 20 20 20 20 20 20 20 20 20 |S .0 | 000009d0 20 20 20 20 20 20 20 3b 20 73 79 6e 74 61 78 0d | ; syntax.| 000009e0 00 5f 0c 20 20 20 41 4c 49 47 4e 0d 00 60 04 0d |._. ALIGN..`..| 000009f0 00 61 04 0d 00 62 0d 20 20 20 45 51 55 44 20 30 |.a...b. EQUD 0| 00000a00 0d 00 63 25 20 20 20 45 51 55 44 20 54 5f 43 6c |..c% EQUD T_Cl| 00000a10 6f 73 65 44 6f 77 6e 25 20 20 20 20 20 20 3b 20 |oseDown% ; | 00000a20 74 6f 6b 65 6e 0d 00 64 29 20 20 20 45 51 55 53 |token..d) EQUS| 00000a30 20 22 43 6c 6f 73 65 44 6f 77 6e 22 2b bd 30 20 | "CloseDown"+.0 | 00000a40 20 20 20 20 20 20 3b 20 6d 65 74 68 6f 64 0d 00 | ; method..| 00000a50 65 29 20 20 20 45 51 55 53 20 bd 30 20 20 20 20 |e) EQUS .0 | 00000a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00000a70 20 73 79 6e 74 61 78 0d 00 66 0c 20 20 20 41 4c | syntax..f. AL| 00000a80 49 47 4e 0d 00 67 05 5d 0d 00 68 05 f4 0d 00 69 |IGN..g.]..h....i| 00000a90 0b 6d 65 6e 75 25 3d 30 0d 00 6a 0c 6d 65 72 67 |.menu%=0..j.merg| 00000aa0 65 25 3d a3 0d 00 6b 0f 70 72 69 6e 74 69 6e 67 |e%=...k.printing| 00000ab0 25 3d a3 0d 00 6c 4d 64 69 65 70 6c 65 61 73 65 |%=...lMdieplease| 00000ac0 25 3d a3 20 20 20 20 20 20 3a 20 f4 20 54 52 55 |%=. : . TRU| 00000ad0 45 20 69 66 20 49 6d 70 72 65 73 73 69 6f 6e 20 |E if Impression | 00000ae0 73 65 6e 64 73 20 75 73 20 61 20 77 69 6e 64 6f |sends us a windo| 00000af0 77 20 63 6c 6f 73 65 64 20 6d 65 73 73 61 67 65 |w closed message| 00000b00 0d 00 6d 22 70 72 65 73 65 72 76 65 64 5f 73 74 |..m"preserved_st| 00000b10 61 72 74 5f 6f 66 5f 64 61 74 61 5f 70 74 72 25 |art_of_data_ptr%| 00000b20 3d 30 0d 00 6e 14 70 65 6e 64 69 6e 67 5f 63 6c |=0..n.pending_cl| 00000b30 6f 73 65 25 3d a3 0d 00 6f 0f 74 72 61 6e 73 6d |ose%=...o.transm| 00000b40 69 74 25 3d a3 0d 00 70 15 74 72 61 6e 73 6d 69 |it%=...p.transmi| 00000b50 74 5f 63 6f 75 6e 74 25 3d 30 0d 00 71 15 74 72 |t_count%=0..q.tr| 00000b60 61 6e 73 6d 69 74 5f 62 6c 6f 63 6b 25 3d 30 0d |ansmit_block%=0.| 00000b70 00 72 04 0d 00 73 14 67 6f 74 70 72 69 6e 74 72 |.r...s.gotprintr| 00000b80 65 70 6c 79 25 3d a3 0d 00 74 0e f2 6d 65 72 67 |eply%=...t..merg| 00000b90 65 5f 6f 66 66 0d 00 75 05 e1 0d 00 76 04 0d 00 |e_off..u....v...| 00000ba0 77 04 0d 00 78 04 0d 00 79 04 0d 00 7a 0b dd 20 |w...x...y...z.. | 00000bb0 f2 6e 75 6c 6c 0d 00 7b 0d ea 20 72 65 73 75 6c |.null..{.. resul| 00000bc0 74 25 0d 00 7c 42 f4 20 57 65 20 6e 65 65 64 20 |t%..|B. We need | 00000bd0 74 6f 20 77 69 6d 70 5f 70 6f 6c 6c 20 62 65 74 |to wimp_poll bet| 00000be0 77 65 65 6e 20 6d 65 72 67 65 5f 6e 65 78 74 5f |ween merge_next_| 00000bf0 72 65 63 6f 72 64 20 61 6e 64 20 50 52 4f 43 73 |record and PROCs| 00000c00 65 6e 64 2e 0d 00 7d 2c e7 20 28 28 70 72 69 6e |end...},. ((prin| 00000c10 74 69 6e 67 25 3d b9 29 20 80 20 28 67 6f 74 70 |ting%=.) . (gotp| 00000c20 72 69 6e 74 72 65 70 6c 79 25 3d b9 29 29 20 8c |rintreply%=.)) .| 00000c30 0d 00 7e 1c 20 20 20 20 20 20 20 20 67 6f 74 70 |..~. gotp| 00000c40 72 69 6e 74 72 65 70 6c 79 25 3d a3 0d 00 7f 23 |rintreply%=....#| 00000c50 20 20 20 20 20 20 20 20 f2 73 65 6e 64 28 22 50 | .send("P| 00000c60 72 69 6e 74 22 2c 54 5f 50 72 69 6e 74 25 29 0d |rint",T_Print%).| 00000c70 00 80 05 cd 0d 00 81 05 e1 0d 00 82 04 0d 00 83 |................| 00000c80 04 0d 00 84 04 0d 00 85 04 0d 00 86 14 dd 20 f2 |.............. .| 00000c90 68 6f 73 74 5f 73 68 75 74 64 6f 77 6e 0d 00 87 |host_shutdown...| 00000ca0 29 e7 20 ac 20 64 69 65 70 6c 65 61 73 65 25 20 |). . dieplease% | 00000cb0 8c 20 f2 73 65 6e 64 28 22 4d 61 69 6c 44 69 65 |. .send("MailDie| 00000cc0 64 22 2c 2d 31 29 0d 00 88 04 0d 00 89 13 f2 63 |d",-1).........c| 00000cd0 6c 6f 73 65 5f 63 73 76 5f 66 69 6c 65 0d 00 8a |lose_csv_file...| 00000ce0 17 c8 95 20 68 6f 75 72 67 6c 61 73 73 5f 63 6f |... hourglass_co| 00000cf0 75 6e 74 25 0d 00 8b 13 20 f2 68 6f 75 72 67 6c |unt%.... .hourgl| 00000d00 61 73 73 5f 6f 66 66 0d 00 8c 05 ce 0d 00 8d 16 |ass_off.........| 00000d10 e7 6d 65 72 67 65 25 20 f2 6d 65 72 67 65 5f 6f |.merge% .merge_o| 00000d20 66 66 0d 00 8e 04 0d 00 8f 26 c8 99 22 49 6d 70 |ff.......&.."Imp| 00000d30 75 6c 73 65 5f 43 6c 6f 73 65 44 6f 77 6e 22 2c |ulse_CloseDown",| 00000d40 74 61 73 6b 5f 68 61 6e 64 6c 65 25 0d 00 90 12 |task_handle%....| 00000d50 f2 74 61 73 6b 5f 73 68 75 74 64 6f 77 6e 0d 00 |.task_shutdown..| 00000d60 91 05 e1 0d 00 92 04 0d 00 93 0e dd 20 f2 72 65 |............ .re| 00000d70 63 65 69 76 65 0d 00 94 16 c8 8e 20 74 61 73 6b |ceive...... task| 00000d80 5f 62 75 66 66 25 21 31 36 20 ca 0d 00 95 14 c9 |_buff%!16 ......| 00000d90 20 4d 65 73 73 61 67 65 5f 51 75 69 74 25 3a 0d | Message_Quit%:.| 00000da0 00 96 14 20 20 f2 68 6f 73 74 5f 73 68 75 74 64 |... .host_shutd| 00000db0 6f 77 6e 0d 00 97 18 c9 20 4d 65 73 73 61 67 65 |own..... Message| 00000dc0 5f 44 61 74 61 53 61 76 65 25 3a 0d 00 98 0f 20 |_DataSave%:.... | 00000dd0 20 f2 64 61 74 61 73 61 76 65 0d 00 99 18 c9 20 | .datasave..... | 00000de0 4d 65 73 73 61 67 65 5f 44 61 74 61 4c 6f 61 64 |Message_DataLoad| 00000df0 25 3a 0d 00 9a 0f 20 20 f2 64 61 74 61 6c 6f 61 |%:.... .dataloa| 00000e00 64 0d 00 9b 17 c9 20 4d 65 73 73 61 67 65 5f 50 |d..... Message_P| 00000e10 72 65 51 75 69 74 25 3a 0d 00 9c 0e 20 20 f2 70 |reQuit%:.... .p| 00000e20 72 65 71 75 69 74 0d 00 9d 1d c9 20 4d 65 73 73 |requit..... Mess| 00000e30 61 67 65 5f 54 61 73 6b 43 6c 6f 73 65 44 6f 77 |age_TaskCloseDow| 00000e40 6e 25 3a 0d 00 9e 3c 20 20 e7 64 6f 63 5f 66 69 |n%:...< .doc_fi| 00000e50 6c 65 24 3c 3e 22 22 20 80 20 74 61 73 6b 5f 62 |le$<>"" . task_b| 00000e60 75 66 66 25 21 34 3d 64 6f 63 5f 74 61 73 6b 25 |uff%!4=doc_task%| 00000e70 20 f2 68 6f 73 74 5f 73 68 75 74 64 6f 77 6e 0d | .host_shutdown.| 00000e80 00 9f 1c c9 20 4d 65 73 73 61 67 65 5f 57 69 6e |.... Message_Win| 00000e90 64 6f 77 43 6c 6f 73 65 64 25 3a 0d 00 a0 2d f4 |dowClosed%:...-.| 00000ea0 20 20 49 46 64 6f 63 5f 66 69 6c 65 24 3c 3e 22 | IFdoc_file$<>"| 00000eb0 22 20 54 48 45 4e 20 50 52 4f 43 68 6f 73 74 5f |" THEN PROChost_| 00000ec0 73 68 75 74 64 6f 77 6e 0d 00 a1 1b c9 20 4d 65 |shutdown..... Me| 00000ed0 73 73 61 67 65 5f 4d 4d 5f 44 6f 63 75 6d 65 6e |ssage_MM_Documen| 00000ee0 74 25 3a 0d 00 a2 24 20 20 e7 20 64 6f 63 5f 66 |t%:...$ . doc_f| 00000ef0 69 6c 65 24 3d 22 22 20 8c 20 f2 64 6f 63 5f 72 |ile$="" . .doc_r| 00000f00 65 63 65 69 76 65 64 0d 00 a3 05 cb 0d 00 a4 05 |eceived.........| 00000f10 e1 0d 00 a5 04 0d 00 a6 04 0d 00 a7 12 dd 20 f2 |.............. .| 00000f20 6d 6f 75 73 65 5f 63 6c 69 63 6b 0d 00 a8 22 ea |mouse_click...".| 00000f30 20 6d 65 6e 75 70 74 72 25 2c 6d 61 78 78 25 2c | menuptr%,maxx%,| 00000f40 69 25 2c 70 25 2c 69 78 25 2c 69 79 25 0d 00 a9 |i%,p%,ix%,iy%...| 00000f50 17 e7 20 74 61 73 6b 5f 62 75 66 66 25 21 38 3c |.. task_buff%!8<| 00000f60 3e 34 20 e1 0d 00 aa 16 c8 8e 20 74 61 73 6b 5f |>4 ....... task_| 00000f70 62 75 66 66 25 21 31 36 20 ca 0d 00 ab 17 20 20 |buff%!16 ..... | 00000f80 c9 20 49 63 6f 6e 5f 48 65 61 64 69 6e 67 73 25 |. Icon_Headings%| 00000f90 3a 0d 00 ac 04 0d 00 ad 19 20 20 20 20 e7 20 63 |:........ . c| 00000fa0 73 76 5f 66 69 6c 65 24 3c 3e 22 22 20 8c 0d 00 |sv_file$<>"" ...| 00000fb0 ae 2d 20 20 20 20 20 20 e7 20 a4 69 63 6f 6e 5f |.- . .icon_| 00000fc0 73 65 74 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 48 |set(main%,Icon_H| 00000fd0 65 61 64 69 6e 67 73 25 29 20 8c 0d 00 af 20 20 |eadings%) .... | 00000fe0 20 20 20 20 20 20 20 f2 63 72 65 61 74 65 5f 63 | .create_c| 00000ff0 73 76 5f 68 65 61 64 69 6e 67 73 0d 00 b0 1a 20 |sv_headings.... | 00001000 20 20 20 20 20 20 20 72 65 63 5f 74 6f 67 6f 25 | rec_togo%| 00001010 20 2b 3d 20 31 0d 00 b1 0b 20 20 20 20 20 20 cc | += 1.... .| 00001020 0d 00 b2 1d 20 20 20 20 20 20 20 20 f2 67 65 74 |.... .get| 00001030 5f 63 73 76 5f 68 65 61 64 69 6e 67 73 0d 00 b3 |_csv_headings...| 00001040 1a 20 20 20 20 20 20 20 20 72 65 63 5f 74 6f 67 |. rec_tog| 00001050 6f 25 20 2d 3d 20 31 0d 00 b4 0b 20 20 20 20 20 |o% -= 1.... | 00001060 20 cd 0d 00 b5 09 20 20 20 20 cd 0d 00 b6 04 0d | ..... ......| 00001070 00 b7 17 20 20 c9 20 49 63 6f 6e 5f 44 69 73 70 |... . Icon_Disp| 00001080 48 65 61 64 25 3a 0d 00 b8 28 20 20 20 20 e7 20 |Head%:...( . | 00001090 6d 65 6e 75 25 20 f2 68 65 61 70 5f 66 72 65 65 |menu% .heap_free| 000010a0 28 22 4d 45 4e 55 22 2c 6d 65 6e 75 25 29 0d 00 |("MENU",menu%)..| 000010b0 b9 32 20 20 20 20 6d 65 6e 75 25 3d a4 68 65 61 |.2 menu%=.hea| 000010c0 70 5f 63 6c 61 69 6d 28 22 4d 45 4e 55 22 2c 32 |p_claim("MENU",2| 000010d0 38 2b 63 73 76 5f 63 6f 75 6e 74 25 2a 32 34 29 |8+csv_count%*24)| 000010e0 0d 00 ba 1b 20 20 20 20 24 6d 65 6e 75 25 3d a4 |.... $menu%=.| 000010f0 6d 73 67 5f 30 28 22 4d 54 22 29 0d 00 bb 12 20 |msg_0("MT").... | 00001100 20 20 20 6d 65 6e 75 25 3f 31 32 3d 37 0d 00 bc | menu%?12=7...| 00001110 12 20 20 20 20 6d 65 6e 75 25 3f 31 33 3d 32 0d |. menu%?13=2.| 00001120 00 bd 12 20 20 20 20 6d 65 6e 75 25 3f 31 34 3d |... menu%?14=| 00001130 37 0d 00 be 12 20 20 20 20 6d 65 6e 75 25 3f 31 |7.... menu%?1| 00001140 35 3d 30 0d 00 bf 13 20 20 20 20 6d 65 6e 75 25 |5=0.... menu%| 00001150 21 32 30 3d 34 34 0d 00 c0 12 20 20 20 20 6d 65 |!20=44.... me| 00001160 6e 75 25 21 32 34 3d 30 0d 00 c1 19 20 20 20 20 |nu%!24=0.... | 00001170 6d 65 6e 75 70 74 72 25 3d 6d 65 6e 75 25 2b 32 |menuptr%=menu%+2| 00001180 38 0d 00 c2 1f 20 20 20 20 6d 61 78 78 25 3d a9 |8.... maxx%=.| 00001190 28 a4 6d 73 67 5f 30 28 22 4d 54 22 29 29 2d 33 |(.msg_0("MT"))-3| 000011a0 0d 00 c3 18 20 20 20 20 70 25 3d 63 73 76 5f 68 |.... p%=csv_h| 000011b0 65 61 64 69 6e 67 73 25 0d 00 c4 1a 20 20 20 20 |eadings%.... | 000011c0 e3 69 25 3d 31 20 b8 20 63 73 76 5f 63 6f 75 6e |.i%=1 . csv_coun| 000011d0 74 25 0d 00 c5 34 20 20 20 20 20 20 e7 69 25 3d |t%...4 .i%=| 000011e0 63 73 76 5f 63 6f 75 6e 74 25 20 21 6d 65 6e 75 |csv_count% !menu| 000011f0 70 74 72 25 3d 26 38 30 20 8b 20 21 6d 65 6e 75 |ptr%=&80 . !menu| 00001200 70 74 72 25 3d 30 0d 00 c6 17 20 20 20 20 20 20 |ptr%=0.... | 00001210 6d 65 6e 75 70 74 72 25 21 34 3d 2d 31 0d 00 c7 |menuptr%!4=-1...| 00001220 1e 20 20 20 20 20 20 6d 65 6e 75 70 74 72 25 21 |. menuptr%!| 00001230 38 3d 26 30 37 30 30 30 31 32 31 0d 00 c8 1a 20 |8=&07000121.... | 00001240 20 20 20 20 20 6d 65 6e 75 70 74 72 25 21 31 32 | menuptr%!12| 00001250 3d 70 25 2b 34 0d 00 c9 18 20 20 20 20 20 20 6d |=p%+4.... m| 00001260 65 6e 75 70 74 72 25 21 31 36 3d 2d 31 0d 00 ca |enuptr%!16=-1...| 00001270 22 20 20 20 20 20 20 6d 65 6e 75 70 74 72 25 21 |" menuptr%!| 00001280 32 30 3d a9 28 24 28 70 25 2b 34 29 29 2b 31 0d |20=.($(p%+4))+1.| 00001290 00 cb 16 20 20 20 20 20 20 6d 65 6e 75 70 74 72 |... menuptr| 000012a0 25 2b 3d 32 34 0d 00 cc 2c 20 20 20 20 20 20 e7 |%+=24..., .| 000012b0 a9 28 24 28 70 25 2b 34 29 29 3e 6d 61 78 78 25 |.($(p%+4))>maxx%| 000012c0 20 6d 61 78 78 25 3d a9 28 24 28 70 25 2b 34 29 | maxx%=.($(p%+4)| 000012d0 29 0d 00 cd 10 20 20 20 20 20 20 70 25 3d 21 70 |).... p%=!p| 000012e0 25 0d 00 ce 09 20 20 20 20 ed 0d 00 cf 1e 20 20 |%.... ..... | 000012f0 20 20 6d 65 6e 75 25 21 31 36 3d 28 6d 61 78 78 | menu%!16=(maxx| 00001300 25 2a 38 2b 36 29 2a 32 0d 00 d0 35 20 20 20 20 |%*8+6)*2...5 | 00001310 21 74 61 73 6b 5f 62 75 66 66 25 3d 6d 61 69 6e |!task_buff%=main| 00001320 25 3a 74 61 73 6b 5f 62 75 66 66 25 21 34 3d 49 |%:task_buff%!4=I| 00001330 63 6f 6e 5f 44 69 73 70 48 65 61 64 25 0d 00 d1 |con_DispHead%...| 00001340 4d 20 20 20 20 c8 99 22 57 69 6d 70 5f 47 65 74 |M .."Wimp_Get| 00001350 49 63 6f 6e 53 74 61 74 65 22 2c 2c 74 61 73 6b |IconState",,task| 00001360 5f 62 75 66 66 25 3a 69 78 25 3d 74 61 73 6b 5f |_buff%:ix%=task_| 00001370 62 75 66 66 25 21 31 36 3a 69 79 25 3d 74 61 73 |buff%!16:iy%=tas| 00001380 6b 5f 62 75 66 66 25 21 32 30 0d 00 d2 2b 20 20 |k_buff%!20...+ | 00001390 20 20 c8 99 22 57 69 6d 70 5f 47 65 74 57 69 6e | .."Wimp_GetWin| 000013a0 64 6f 77 53 74 61 74 65 22 2c 2c 74 61 73 6b 5f |dowState",,task_| 000013b0 62 75 66 66 25 0d 00 d3 3a 20 20 20 20 64 69 73 |buff%...: dis| 000013c0 70 6c 61 79 5f 6d 65 6e 75 5f 78 25 20 3d 20 74 |play_menu_x% = t| 000013d0 61 73 6b 5f 62 75 66 66 25 21 32 30 2b 74 61 73 |ask_buff%!20+tas| 000013e0 6b 5f 62 75 66 66 25 21 34 2b 69 78 25 2b 32 0d |k_buff%!4+ix%+2.| 000013f0 00 d4 3b 20 20 20 20 64 69 73 70 6c 61 79 5f 6d |..; display_m| 00001400 65 6e 75 5f 79 25 20 3d 20 74 61 73 6b 5f 62 75 |enu_y% = task_bu| 00001410 66 66 25 21 32 34 2b 74 61 73 6b 5f 62 75 66 66 |ff%!24+task_buff| 00001420 25 21 31 36 2b 69 79 25 2d 32 0d 00 d5 42 20 20 |%!16+iy%-2...B | 00001430 20 20 c8 99 22 57 69 6d 70 5f 43 72 65 61 74 65 | .."Wimp_Create| 00001440 4d 65 6e 75 22 2c 2c 6d 65 6e 75 25 2c 64 69 73 |Menu",,menu%,dis| 00001450 70 6c 61 79 5f 6d 65 6e 75 5f 78 25 2c 64 69 73 |play_menu_x%,dis| 00001460 70 6c 61 79 5f 6d 65 6e 75 5f 79 25 0d 00 d6 19 |play_menu_y%....| 00001470 20 20 c9 20 49 63 6f 6e 5f 53 74 61 72 74 4d 65 | . Icon_StartMe| 00001480 72 67 65 25 3a 0d 00 d7 15 20 20 20 20 f2 74 72 |rge%:.... .tr| 00001490 79 5f 6d 65 72 67 65 5f 6f 6e 0d 00 d8 13 20 20 |y_merge_on.... | 000014a0 c9 20 49 63 6f 6e 5f 4e 65 78 74 25 3a 0d 00 d9 |. Icon_Next%:...| 000014b0 1a 20 20 20 20 f2 6d 65 72 67 65 5f 6e 65 78 74 |. .merge_next| 000014c0 5f 72 65 63 6f 72 64 0d 00 da 14 20 20 c9 20 49 |_record.... . I| 000014d0 63 6f 6e 5f 50 72 69 6e 74 25 3a 0d 00 db 1f 20 |con_Print%:.... | 000014e0 20 20 20 f2 73 65 6e 64 28 22 50 72 69 6e 74 22 | .send("Print"| 000014f0 2c 54 5f 50 72 69 6e 74 25 29 0d 00 dc 13 20 20 |,T_Print%).... | 00001500 20 20 70 72 69 6e 74 69 6e 67 25 3d b9 0d 00 dd | printing%=....| 00001510 20 20 20 20 20 f2 64 69 73 61 62 6c 65 5f 6d 65 | .disable_me| 00001520 72 67 69 6e 67 5f 62 75 74 74 6f 6e 73 0d 00 de |rging_buttons...| 00001530 13 20 20 c9 20 49 63 6f 6e 5f 45 64 69 74 25 3a |. . Icon_Edit%:| 00001540 0d 00 df 1e 20 20 20 20 f2 73 65 6e 64 28 22 43 |.... .send("C| 00001550 6c 65 61 72 4d 65 72 67 65 22 2c 2d 31 29 0d 00 |learMerge",-1)..| 00001560 e0 16 20 20 20 20 f2 68 6f 73 74 5f 73 68 75 74 |.. .host_shut| 00001570 64 6f 77 6e 0d 00 e1 05 cb 0d 00 e2 05 e1 0d 00 |down............| 00001580 e3 04 0d 00 e4 04 0d 00 e5 10 dd f2 6d 65 6e 75 |............menu| 00001590 5f 63 6c 69 63 6b 0d 00 e6 3f f4 20 73 65 6e 64 |_click...?. send| 000015a0 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 | the appropriate| 000015b0 20 44 44 46 20 66 6f 72 20 74 68 65 20 73 65 6c | DDF for the sel| 000015c0 65 63 74 65 64 20 66 69 65 6c 64 20 74 6f 20 74 |ected field to t| 000015d0 68 65 20 57 50 0d 00 e7 0e ea 20 63 25 2c 6c 25 |he WP..... c%,l%| 000015e0 2c 66 25 0d 00 e8 12 66 25 3d 21 74 61 73 6b 5f |,f%....f%=!task_| 000015f0 62 75 66 66 25 0d 00 e9 2c c8 99 22 57 69 6d 70 |buff%...,.."Wimp| 00001600 5f 47 65 74 43 61 72 65 74 50 6f 73 69 74 69 6f |_GetCaretPositio| 00001610 6e 22 2c 2c 74 61 73 6b 5f 62 75 66 66 25 2b 32 |n",,task_buff%+2| 00001620 30 0d 00 ea 39 e7 74 61 73 6b 5f 62 75 66 66 25 |0...9.task_buff%| 00001630 21 32 30 3c 3e 64 6f 63 5f 77 69 6e 64 6f 77 25 |!20<>doc_window%| 00001640 20 85 20 74 61 73 6b 5f 6f 6b 25 2c 20 a4 6d 73 | . task_ok%, .ms| 00001650 67 5f 30 28 22 4f 4b 35 22 29 0d 00 eb 14 6c 25 |g_0("OK5")....l%| 00001660 3d 63 73 76 5f 68 65 61 64 69 6e 67 73 25 0d 00 |=csv_headings%..| 00001670 ec 09 c8 95 20 66 25 0d 00 ed 0c 20 20 6c 25 3d |.... f%.... l%=| 00001680 21 6c 25 0d 00 ee 0b 20 20 66 25 2d 3d 31 0d 00 |!l%.... f%-=1..| 00001690 ef 05 ce 0d 00 f0 16 63 25 3d ae 22 3c 57 69 6d |.......c%=."<Wim| 000016a0 70 24 53 63 72 61 70 3e 22 0d 00 f1 04 0d 00 f2 |p$Scrap>".......| 000016b0 58 d5 23 63 25 2c 22 7b 20 6d 65 72 67 65 20 22 |X.#c%,"{ merge "| 000016c0 2b bd 43 68 61 72 5f 51 75 6f 74 65 25 2b 22 3a |+.Char_Quote%+":| 000016d0 22 2b a4 6d 73 67 5f 30 28 22 49 44 22 29 2b 22 |"+.msg_0("ID")+"| 000016e0 20 47 65 74 46 69 65 6c 64 20 22 2b 24 28 6c 25 | GetField "+$(l%| 000016f0 2b 34 29 2b bd 43 68 61 72 5f 51 75 6f 74 65 25 |+4)+.Char_Quote%| 00001700 2b 22 7d 22 3b 0d 00 f3 04 0d 00 f4 0b 6c 25 3d |+"}";........l%=| 00001710 a2 23 63 25 0d 00 f5 08 d9 23 63 25 0d 00 f6 2b |.#c%.....#c%...+| 00001720 c8 99 22 4f 53 5f 46 69 6c 65 22 2c 31 38 2c 22 |.."OS_File",18,"| 00001730 3c 57 69 6d 70 24 53 63 72 61 70 3e 22 2c 44 44 |<Wimp$Scrap>",DD| 00001740 46 5f 54 79 70 65 25 0d 00 f7 12 21 74 61 73 6b |F_Type%....!task| 00001750 5f 62 75 66 66 25 3d 36 30 0d 00 f8 13 74 61 73 |_buff%=60....tas| 00001760 6b 5f 62 75 66 66 25 21 31 32 3d 30 0d 00 f9 13 |k_buff%!12=0....| 00001770 74 61 73 6b 5f 62 75 66 66 25 21 31 36 3d 33 0d |task_buff%!16=3.| 00001780 00 fa 24 74 61 73 6b 5f 62 75 66 66 25 21 32 34 |..$task_buff%!24| 00001790 3d 26 34 42 35 33 35 35 35 34 3a f4 20 22 54 55 |=&4B535554:. "TU| 000017a0 53 4b 22 0d 00 fb 14 74 61 73 6b 5f 62 75 66 66 |SK"....task_buff| 000017b0 25 21 33 36 3d 6c 25 0d 00 fc 1b 74 61 73 6b 5f |%!36=l%....task_| 000017c0 62 75 66 66 25 21 34 30 3d 44 44 46 5f 54 79 70 |buff%!40=DDF_Typ| 000017d0 65 25 0d 00 fd 26 24 28 74 61 73 6b 5f 62 75 66 |e%...&$(task_buf| 000017e0 66 25 2b 34 34 29 3d 22 3c 57 69 6d 70 24 53 63 |f%+44)="<Wimp$Sc| 000017f0 72 61 70 3e 22 2b bd 30 0d 00 fe 30 c8 99 22 57 |rap>"+.0...0.."W| 00001800 69 6d 70 5f 53 65 6e 64 4d 65 73 73 61 67 65 22 |imp_SendMessage"| 00001810 2c 31 37 2c 74 61 73 6b 5f 62 75 66 66 25 2c 64 |,17,task_buff%,d| 00001820 6f 63 5f 74 61 73 6b 25 0d 00 ff 27 c8 99 22 57 |oc_task%...'.."W| 00001830 69 6d 70 5f 47 65 74 50 6f 69 6e 74 65 72 49 6e |imp_GetPointerIn| 00001840 66 6f 22 2c 2c 74 61 73 6b 5f 62 75 66 66 25 0d |fo",,task_buff%.| 00001850 01 00 52 e7 28 74 61 73 6b 5f 62 75 66 66 25 21 |..R.(task_buff%!| 00001860 38 20 80 20 31 29 20 c8 99 22 57 69 6d 70 5f 43 |8 . 1) .."Wimp_C| 00001870 72 65 61 74 65 4d 65 6e 75 22 2c 2c 6d 65 6e 75 |reateMenu",,menu| 00001880 25 2c 64 69 73 70 6c 61 79 5f 6d 65 6e 75 5f 78 |%,display_menu_x| 00001890 25 2c 64 69 73 70 6c 61 79 5f 6d 65 6e 75 5f 79 |%,display_menu_y| 000018a0 25 0d 01 01 05 e1 0d 01 02 04 0d 01 03 04 0d 01 |%...............| 000018b0 04 0f dd 20 f2 64 61 74 61 6c 6f 61 64 0d 01 05 |... .dataload...| 000018c0 1b f4 20 72 65 63 65 69 70 74 20 6f 66 20 61 20 |.. receipt of a | 000018d0 43 53 56 20 66 69 6c 65 0d 01 06 2e e7 74 61 73 |CSV file.....tas| 000018e0 6b 5f 62 75 66 66 25 21 34 30 3c 3e 43 53 56 5f |k_buff%!40<>CSV_| 000018f0 54 79 70 65 25 20 84 20 64 6f 63 5f 66 69 6c 65 |Type% . doc_file| 00001900 24 3d 22 22 20 e1 0d 01 07 24 e7 6d 65 72 67 65 |$="" ....$.merge| 00001910 25 20 85 20 74 61 73 6b 5f 6f 6b 25 2c a4 6d 73 |% . task_ok%,.ms| 00001920 67 5f 30 28 22 4f 4b 31 22 29 0d 01 08 27 63 73 |g_0("OK1")...'cs| 00001930 76 5f 66 69 6c 65 24 3d a4 74 61 73 6b 5f 72 74 |v_file$=.task_rt| 00001940 6f 7a 28 74 61 73 6b 5f 62 75 66 66 25 2b 34 34 |oz(task_buff%+44| 00001950 29 0d 01 09 1e 74 61 73 6b 5f 62 75 66 66 25 21 |)....task_buff%!| 00001960 31 32 3d 74 61 73 6b 5f 62 75 66 66 25 21 38 0d |12=task_buff%!8.| 00001970 01 0a 13 74 61 73 6b 5f 62 75 66 66 25 21 31 36 |...task_buff%!16| 00001980 3d 34 0d 01 0b 33 c8 99 22 57 69 6d 70 5f 53 65 |=4...3.."Wimp_Se| 00001990 6e 64 4d 65 73 73 61 67 65 22 2c 31 37 2c 74 61 |ndMessage",17,ta| 000019a0 73 6b 5f 62 75 66 66 25 2c 74 61 73 6b 5f 62 75 |sk_buff%,task_bu| 000019b0 66 66 25 21 34 0d 01 0c 24 f2 69 63 6f 6e 5f 68 |ff%!4...$.icon_h| 000019c0 69 64 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 44 |ide(main%,Icon_D| 000019d0 72 6f 70 48 65 72 65 25 29 0d 01 0d 28 f2 69 63 |ropHere%)...(.ic| 000019e0 6f 6e 5f 75 6e 68 69 64 65 28 6d 61 69 6e 25 2c |on_unhide(main%,| 000019f0 49 63 6f 6e 5f 53 74 61 72 74 4d 65 72 67 65 25 |Icon_StartMerge%| 00001a00 29 0d 01 0e 27 f2 69 63 6f 6e 5f 75 6e 73 68 61 |)...'.icon_unsha| 00001a10 64 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 44 69 |de(main%,Icon_Di| 00001a20 73 70 48 65 61 64 25 29 0d 01 0f 2a 63 73 76 5f |spHead%)...*csv_| 00001a30 63 6f 75 6e 74 25 3d a4 64 65 74 65 72 6d 69 6e |count%=.determin| 00001a40 65 5f 6e 75 6d 62 65 72 5f 6f 66 5f 66 69 65 6c |e_number_of_fiel| 00001a50 64 73 0d 01 10 50 e7 20 ac 20 a4 69 63 6f 6e 5f |ds...P. . .icon_| 00001a60 73 65 74 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 48 |set(main%,Icon_H| 00001a70 65 61 64 69 6e 67 73 25 29 20 f2 67 65 74 5f 63 |eadings%) .get_c| 00001a80 73 76 5f 68 65 61 64 69 6e 67 73 20 8b 20 f2 63 |sv_headings . .c| 00001a90 72 65 61 74 65 5f 63 73 76 5f 68 65 61 64 69 6e |reate_csv_headin| 00001aa0 67 73 0d 01 11 2a 72 65 63 5f 74 6f 67 6f 25 3d |gs...*rec_togo%=| 00001ab0 a4 64 65 74 65 72 6d 69 6e 65 5f 6e 75 6d 62 65 |.determine_numbe| 00001ac0 72 5f 6f 66 5f 72 65 63 6f 72 64 73 0d 01 12 31 |r_of_records...1| 00001ad0 f2 69 63 6f 6e 5f 77 72 69 74 65 28 6d 61 69 6e |.icon_write(main| 00001ae0 25 2c 49 63 6f 6e 5f 43 53 56 25 2c a4 6c 65 61 |%,Icon_CSV%,.lea| 00001af0 66 28 63 73 76 5f 66 69 6c 65 24 29 29 0d 01 13 |f(csv_file$))...| 00001b00 05 e1 0d 01 14 04 0d 01 15 04 0d 01 16 45 dd 20 |.............E. | 00001b10 f2 63 6f 70 79 5f 66 69 65 6c 64 28 74 6f 25 2c |.copy_field(to%,| 00001b20 20 f8 20 6c 61 73 74 5f 66 69 65 6c 64 25 2c 20 | . last_field%, | 00001b30 f8 20 66 69 65 6c 64 5f 6c 65 6e 67 74 68 25 2c |. field_length%,| 00001b40 20 66 75 64 67 65 5f 73 70 61 63 65 73 25 29 0d | fudge_spaces%).| 00001b50 01 17 50 f4 20 63 6f 70 69 65 73 20 74 68 65 20 |..P. copies the | 00001b60 6e 65 78 74 20 66 69 65 6c 64 20 66 72 6f 6d 20 |next field from | 00001b70 74 68 65 20 6f 70 65 6e 20 43 53 56 20 66 69 6c |the open CSV fil| 00001b80 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2c 20 73 |e into memory, s| 00001b90 70 65 63 69 66 69 65 64 20 62 79 20 74 6f 25 0d |pecified by to%.| 00001ba0 01 18 18 f4 20 77 68 69 63 68 20 43 41 4e 20 62 |.... which CAN b| 00001bb0 65 20 4e 55 4c 4c 2e 0d 01 19 3d f4 20 72 65 74 |e NULL....=. ret| 00001bc0 75 72 6e 73 20 6c 61 73 74 5f 66 69 65 6c 64 3d |urns last_field=| 00001bd0 54 52 55 45 20 69 66 20 74 68 65 20 6c 61 73 74 |TRUE if the last| 00001be0 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65 | field in the re| 00001bf0 63 6f 72 64 0d 01 1a 37 f4 20 72 65 74 75 72 6e |cord...7. return| 00001c00 73 20 66 69 65 6c 64 5f 6c 65 6e 67 74 68 3d 74 |s field_length=t| 00001c10 68 65 20 72 65 61 6c 20 6c 65 6e 67 74 68 20 6f |he real length o| 00001c20 66 20 74 68 65 20 66 69 65 6c 64 0d 01 1b 2b ea |f the field...+.| 00001c30 20 67 6f 74 5f 71 75 6f 74 65 25 2c 20 67 6f 74 | got_quote%, got| 00001c40 5f 73 6c 61 73 68 25 2c 20 62 25 2c 20 66 69 6e |_slash%, b%, fin| 00001c50 69 73 68 65 64 25 0d 01 1c 10 67 6f 74 5f 71 75 |ished%....got_qu| 00001c60 6f 74 65 25 3d a3 0d 01 1d 10 67 6f 74 5f 73 6c |ote%=.....got_sl| 00001c70 61 73 68 25 3d a3 0d 01 1e 11 6c 61 73 74 5f 66 |ash%=.....last_f| 00001c80 69 65 6c 64 25 3d a3 0d 01 1f 13 66 69 65 6c 64 |ield%=.....field| 00001c90 5f 6c 65 6e 67 74 68 25 3d 30 0d 01 20 0f 66 69 |_length%=0.. .fi| 00001ca0 6e 69 73 68 65 64 25 3d a3 0d 01 21 05 f5 0d 01 |nished%=...!....| 00001cb0 22 1a 20 62 25 3d 9a 23 63 73 76 5f 66 69 6c 65 |". b%=.#csv_file| 00001cc0 5f 68 61 6e 64 6c 65 25 0d 01 23 04 0d 01 24 0b |_handle%..#...$.| 00001cd0 20 c8 8e 20 b9 20 ca 0d 01 25 04 0d 01 26 16 20 | .. . ...%...&. | 00001ce0 c9 20 62 25 3d 43 68 61 72 5f 51 75 6f 74 65 25 |. b%=Char_Quote%| 00001cf0 3a 0d 01 27 1d 20 20 67 6f 74 5f 71 75 6f 74 65 |:..'. got_quote| 00001d00 25 3d ac 20 67 6f 74 5f 71 75 6f 74 65 25 0d 01 |%=. got_quote%..| 00001d10 28 04 0d 01 29 16 20 c9 20 62 25 3d 43 68 61 72 |(...). . b%=Char| 00001d20 5f 53 6c 61 73 68 25 3a 0d 01 2a 14 20 20 e7 20 |_Slash%:..*. . | 00001d30 67 6f 74 5f 73 6c 61 73 68 25 20 8c 0d 01 2b 35 |got_slash% ...+5| 00001d40 20 20 20 f2 63 6f 70 79 5f 66 69 65 6c 64 5f 73 | .copy_field_s| 00001d50 74 75 66 66 5f 63 68 61 72 28 74 6f 25 2c 97 22 |tuff_char(to%,."| 00001d60 5c 22 2c 66 69 65 6c 64 5f 6c 65 6e 67 74 68 25 |\",field_length%| 00001d70 29 0d 01 2c 13 20 20 20 67 6f 74 5f 73 6c 61 73 |)..,. got_slas| 00001d80 68 25 3d a3 0d 01 2d 07 20 20 cc 0d 01 2e 13 20 |h%=...-. ..... | 00001d90 20 20 67 6f 74 5f 73 6c 61 73 68 25 3d b9 0d 01 | got_slash%=...| 00001da0 2f 07 20 20 cd 0d 01 30 04 0d 01 31 16 20 c9 20 |/. ...0...1. . | 00001db0 62 25 3d 43 68 61 72 5f 53 70 61 63 65 25 3a 0d |b%=Char_Space%:.| 00001dc0 01 32 17 20 20 e7 20 66 75 64 67 65 5f 73 70 61 |.2. . fudge_spa| 00001dd0 63 65 73 25 20 8c 0d 01 33 40 20 20 20 f2 63 6f |ces% ...3@ .co| 00001de0 70 79 5f 66 69 65 6c 64 5f 73 74 75 66 66 5f 63 |py_field_stuff_c| 00001df0 68 61 72 28 74 6f 25 2c 43 68 61 72 5f 48 61 72 |har(to%,Char_Har| 00001e00 64 53 70 61 63 65 25 2c 66 69 65 6c 64 5f 6c 65 |dSpace%,field_le| 00001e10 6e 67 74 68 25 29 0d 01 34 07 20 20 cc 0d 01 35 |ngth%)..4. ...5| 00001e20 3c 20 20 20 f2 63 6f 70 79 5f 66 69 65 6c 64 5f |< .copy_field_| 00001e30 73 74 75 66 66 5f 63 68 61 72 28 74 6f 25 2c 43 |stuff_char(to%,C| 00001e40 68 61 72 5f 53 70 61 63 65 25 2c 66 69 65 6c 64 |har_Space%,field| 00001e50 5f 6c 65 6e 67 74 68 25 29 0d 01 36 07 20 20 cd |_length%)..6. .| 00001e60 0d 01 37 04 0d 01 38 16 20 c9 20 62 25 3d 43 68 |..7...8. . b%=Ch| 00001e70 61 72 5f 43 6f 6d 6d 61 25 3a 0d 01 39 4d 20 20 |ar_Comma%:..9M | 00001e80 e7 20 67 6f 74 5f 71 75 6f 74 65 25 20 f2 63 6f |. got_quote% .co| 00001e90 70 79 5f 66 69 65 6c 64 5f 73 74 75 66 66 5f 63 |py_field_stuff_c| 00001ea0 68 61 72 28 74 6f 25 2c 62 25 2c 66 69 65 6c 64 |har(to%,b%,field| 00001eb0 5f 6c 65 6e 67 74 68 25 29 20 8b 20 66 69 6e 69 |_length%) . fini| 00001ec0 73 68 65 64 25 3d b9 0d 01 3a 04 0d 01 3b 36 20 |shed%=...:...;6 | 00001ed0 c9 20 62 25 3d 43 68 61 72 5f 4c 46 25 20 84 20 |. b%=Char_LF% . | 00001ee0 62 25 3d 43 68 61 72 5f 43 52 25 20 84 20 c5 23 |b%=Char_CR% . .#| 00001ef0 63 73 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 |csv_file_handle%| 00001f00 3a 0d 01 3c 13 20 20 6c 61 73 74 5f 66 69 65 6c |:..<. last_fiel| 00001f10 64 25 3d b9 0d 01 3d 11 20 20 66 69 6e 69 73 68 |d%=...=. finish| 00001f20 65 64 25 3d b9 0d 01 3e 04 0d 01 3f 07 20 7f 3a |ed%=...>...?. .:| 00001f30 0d 01 40 14 20 20 e7 20 67 6f 74 5f 73 6c 61 73 |..@. . got_slas| 00001f40 68 25 20 8c 0d 01 41 0e 20 20 20 c8 8e 20 62 25 |h% ...A. .. b%| 00001f50 20 ca 0d 01 42 40 20 20 20 20 20 20 20 20 c9 20 | ...B@ . | 00001f60 97 22 6e 22 3a 20 f2 63 6f 70 79 5f 66 69 65 6c |."n": .copy_fiel| 00001f70 64 5f 73 74 75 66 66 5f 63 68 61 72 28 74 6f 25 |d_stuff_char(to%| 00001f80 2c 31 30 2c 66 69 65 6c 64 5f 6c 65 6e 67 74 68 |,10,field_length| 00001f90 25 29 0d 01 43 08 20 20 20 cb 0d 01 44 13 20 20 |%)..C. ...D. | 00001fa0 20 67 6f 74 5f 73 6c 61 73 68 25 3d a3 0d 01 45 | got_slash%=...E| 00001fb0 07 20 20 cc 0d 01 46 33 20 20 20 f2 63 6f 70 79 |. ...F3 .copy| 00001fc0 5f 66 69 65 6c 64 5f 73 74 75 66 66 5f 63 68 61 |_field_stuff_cha| 00001fd0 72 28 74 6f 25 2c 62 25 2c 66 69 65 6c 64 5f 6c |r(to%,b%,field_l| 00001fe0 65 6e 67 74 68 25 29 0d 01 47 07 20 20 cd 0d 01 |ength%)..G. ...| 00001ff0 48 04 0d 01 49 06 20 cb 0d 01 4a 0f fd 20 66 69 |H...I. ...J.. fi| 00002000 6e 69 73 68 65 64 25 0d 01 4b 11 e7 20 74 6f 25 |nished%..K.. to%| 00002010 20 3f 74 6f 25 3d 31 33 0d 01 4c 05 e1 0d 01 4d | ?to%=13..L....M| 00002020 04 0d 01 4e 04 0d 01 4f 34 dd f2 63 6f 70 79 5f |...N...O4..copy_| 00002030 66 69 65 6c 64 5f 73 74 75 66 66 5f 63 68 61 72 |field_stuff_char| 00002040 28 f8 20 74 6f 25 2c 20 63 68 61 72 25 2c 20 f8 |(. to%, char%, .| 00002050 20 6c 65 6e 67 74 68 25 29 0d 01 50 0e 6c 65 6e | length%)..P.len| 00002060 67 74 68 25 2b 3d 31 0d 01 51 1a e7 74 6f 25 20 |gth%+=1..Q..to% | 00002070 3f 74 6f 25 3d 63 68 61 72 25 3a 74 6f 25 2b 3d |?to%=char%:to%+=| 00002080 31 0d 01 52 05 e1 0d 01 53 04 0d 01 54 04 0d 01 |1..R....S...T...| 00002090 55 21 dd 20 a4 64 65 74 65 72 6d 69 6e 65 5f 6e |U!. .determine_n| 000020a0 75 6d 62 65 72 5f 6f 66 5f 66 69 65 6c 64 73 0d |umber_of_fields.| 000020b0 01 56 22 ea 20 73 24 2c 63 6f 75 6e 74 25 2c 6c |.V". s$,count%,l| 000020c0 61 73 74 5f 66 69 65 6c 64 25 2c 64 75 6d 6d 79 |ast_field%,dummy| 000020d0 25 0d 01 57 12 f2 6f 70 65 6e 5f 63 73 76 5f 66 |%..W..open_csv_f| 000020e0 69 6c 65 0d 01 58 4e e7 20 63 73 76 5f 66 69 6c |ile..XN. csv_fil| 000020f0 65 5f 68 61 6e 64 6c 65 25 3d 30 20 73 24 3d 63 |e_handle%=0 s$=c| 00002100 73 76 5f 66 69 6c 65 24 3a 63 73 76 5f 66 69 6c |sv_file$:csv_fil| 00002110 65 24 3d 22 22 3a 85 20 74 61 73 6b 5f 6f 6b 25 |e$="":. task_ok%| 00002120 2c a4 6d 73 67 5f 31 28 22 4f 4b 32 22 2c 73 24 |,.msg_1("OK2",s$| 00002130 29 0d 01 59 05 f5 0d 01 5a 28 20 f2 63 6f 70 79 |)..Y....Z( .copy| 00002140 5f 66 69 65 6c 64 28 30 2c 6c 61 73 74 5f 66 69 |_field(0,last_fi| 00002150 65 6c 64 25 2c 64 75 6d 6d 79 25 2c a3 29 0d 01 |eld%,dummy%,.)..| 00002160 5b 0e 20 63 6f 75 6e 74 25 2b 3d 31 0d 01 5c 11 |[. count%+=1..\.| 00002170 fd 20 6c 61 73 74 5f 66 69 65 6c 64 25 0d 01 5d |. last_field%..]| 00002180 13 f2 63 6c 6f 73 65 5f 63 73 76 5f 66 69 6c 65 |..close_csv_file| 00002190 0d 01 5e 0b 3d 63 6f 75 6e 74 25 0d 01 5f 04 0d |..^.=count%.._..| 000021a0 01 60 04 0d 01 61 04 0d 01 62 17 dd 20 f2 67 65 |.`...a...b.. .ge| 000021b0 74 5f 63 73 76 5f 68 65 61 64 69 6e 67 73 0d 01 |t_csv_headings..| 000021c0 63 23 ea 20 73 24 2c 69 25 2c 6c 61 73 74 5f 6e |c#. s$,i%,last_n| 000021d0 6f 64 65 25 2c 6e 6f 64 65 25 2c 64 75 6d 6d 79 |ode%,node%,dummy| 000021e0 25 0d 01 64 14 c8 95 20 63 73 76 5f 68 65 61 64 |%..d... csv_head| 000021f0 69 6e 67 73 25 0d 01 65 19 20 6e 65 78 74 25 3d |ings%..e. next%=| 00002200 21 63 73 76 5f 68 65 61 64 69 6e 67 73 25 0d 01 |!csv_headings%..| 00002210 66 25 20 f2 68 65 61 70 5f 66 72 65 65 28 22 43 |f% .heap_free("C| 00002220 53 56 48 22 2c 63 73 76 5f 68 65 61 64 69 6e 67 |SVH",csv_heading| 00002230 73 25 29 0d 01 67 18 20 63 73 76 5f 68 65 61 64 |s%)..g. csv_head| 00002240 69 6e 67 73 25 3d 6e 65 78 74 25 0d 01 68 05 ce |ings%=next%..h..| 00002250 0d 01 69 12 f2 6f 70 65 6e 5f 63 73 76 5f 66 69 |..i..open_csv_fi| 00002260 6c 65 0d 01 6a 10 6c 61 73 74 5f 6e 6f 64 65 25 |le..j.last_node%| 00002270 3d 30 0d 01 6b 17 e3 20 69 25 3d 31 20 b8 20 63 |=0..k.. i%=1 . c| 00002280 73 76 5f 63 6f 75 6e 74 25 0d 01 6c 2c 20 f2 63 |sv_count%..l, .c| 00002290 6f 70 79 5f 66 69 65 6c 64 28 74 61 73 6b 5f 62 |opy_field(task_b| 000022a0 75 66 66 25 2c 64 75 6d 6d 79 25 2c 64 75 6d 6d |uff%,dummy%,dumm| 000022b0 79 25 2c b9 29 0d 01 6d 13 20 73 24 3d 24 74 61 |y%,.)..m. s$=$ta| 000022c0 73 6b 5f 62 75 66 66 25 0d 01 6e 4f 20 e7 20 73 |sk_buff%..nO . s| 000022d0 24 3d 22 22 20 73 24 3d a4 6d 73 67 5f 31 28 22 |$="" s$=.msg_1("| 000022e0 46 49 22 2c c3 28 69 25 29 29 3a f4 20 69 66 20 |FI",.(i%)):. if | 000022f0 61 20 6e 75 6c 6c 20 68 65 61 64 69 6e 67 2c 20 |a null heading, | 00002300 63 72 65 61 74 65 20 61 6e 20 61 72 62 69 74 72 |create an arbitr| 00002310 61 72 79 20 6f 6e 65 0d 01 6f 26 20 6e 6f 64 65 |ary one..o& node| 00002320 25 3d a4 68 65 61 70 5f 63 6c 61 69 6d 28 22 43 |%=.heap_claim("C| 00002330 53 56 48 22 2c a9 28 73 24 29 2b 35 29 0d 01 70 |SVH",.(s$)+5)..p| 00002340 0d 20 21 6e 6f 64 65 25 3d 30 0d 01 71 12 20 24 |. !node%=0..q. $| 00002350 28 6e 6f 64 65 25 2b 34 29 3d 73 24 0d 01 72 39 |(node%+4)=s$..r9| 00002360 20 e7 20 6c 61 73 74 5f 6e 6f 64 65 25 20 21 6c | . last_node% !l| 00002370 61 73 74 5f 6e 6f 64 65 25 3d 6e 6f 64 65 25 20 |ast_node%=node% | 00002380 8b 20 63 73 76 5f 68 65 61 64 69 6e 67 73 25 3d |. csv_headings%=| 00002390 6e 6f 64 65 25 0d 01 73 15 20 6c 61 73 74 5f 6e |node%..s. last_n| 000023a0 6f 64 65 25 3d 6e 6f 64 65 25 0d 01 74 05 ed 0d |ode%=node%..t...| 000023b0 01 75 24 63 73 76 5f 66 69 6c 65 5f 70 74 72 25 |.u$csv_file_ptr%| 000023c0 3d 8f 23 63 73 76 5f 66 69 6c 65 5f 68 61 6e 64 |=.#csv_file_hand| 000023d0 6c 65 25 0d 01 76 13 f2 63 6c 6f 73 65 5f 63 73 |le%..v..close_cs| 000023e0 76 5f 66 69 6c 65 0d 01 77 05 e1 0d 01 78 04 0d |v_file..w....x..| 000023f0 01 79 04 0d 01 7a 04 0d 01 7b 1a dd 20 f2 63 72 |.y...z...{.. .cr| 00002400 65 61 74 65 5f 63 73 76 5f 68 65 61 64 69 6e 67 |eate_csv_heading| 00002410 73 0d 01 7c 17 ea 20 73 24 2c 69 25 2c 6c 61 73 |s..|.. s$,i%,las| 00002420 74 25 2c 6e 6f 64 65 25 0d 01 7d 14 c8 95 20 63 |t%,node%..}... c| 00002430 73 76 5f 68 65 61 64 69 6e 67 73 25 0d 01 7e 19 |sv_headings%..~.| 00002440 20 6e 6f 64 65 25 3d 21 63 73 76 5f 68 65 61 64 | node%=!csv_head| 00002450 69 6e 67 73 25 0d 01 7f 25 20 f2 68 65 61 70 5f |ings%...% .heap_| 00002460 66 72 65 65 28 22 43 53 56 48 22 2c 63 73 76 5f |free("CSVH",csv_| 00002470 68 65 61 64 69 6e 67 73 25 29 0d 01 80 18 20 63 |headings%).... c| 00002480 73 76 5f 68 65 61 64 69 6e 67 73 25 3d 6e 6f 64 |sv_headings%=nod| 00002490 65 25 0d 01 81 05 ce 0d 01 82 0b 6c 61 73 74 25 |e%.........last%| 000024a0 3d 30 0d 01 83 17 e3 20 69 25 3d 31 20 b8 20 63 |=0..... i%=1 . c| 000024b0 73 76 5f 63 6f 75 6e 74 25 0d 01 84 1a 20 73 24 |sv_count%.... s$| 000024c0 3d a4 6d 73 67 5f 31 28 22 46 49 22 2c c3 28 69 |=.msg_1("FI",.(i| 000024d0 25 29 29 0d 01 85 26 20 6e 6f 64 65 25 3d a4 68 |%))...& node%=.h| 000024e0 65 61 70 5f 63 6c 61 69 6d 28 22 43 53 56 48 22 |eap_claim("CSVH"| 000024f0 2c a9 28 73 24 29 2b 35 29 0d 01 86 0d 20 21 6e |,.(s$)+5).... !n| 00002500 6f 64 65 25 3d 30 0d 01 87 12 20 24 28 6e 6f 64 |ode%=0.... $(nod| 00002510 65 25 2b 34 29 3d 73 24 0d 01 88 2f 20 e7 20 6c |e%+4)=s$.../ . l| 00002520 61 73 74 25 20 21 6c 61 73 74 25 3d 6e 6f 64 65 |ast% !last%=node| 00002530 25 20 8b 20 63 73 76 5f 68 65 61 64 69 6e 67 73 |% . csv_headings| 00002540 25 3d 6e 6f 64 65 25 0d 01 89 10 20 6c 61 73 74 |%=node%.... last| 00002550 25 3d 6e 6f 64 65 25 0d 01 8a 05 ed 0d 01 8b 13 |%=node%.........| 00002560 63 73 76 5f 66 69 6c 65 5f 70 74 72 25 3d 30 0d |csv_file_ptr%=0.| 00002570 01 8c 05 e1 0d 01 8d 04 0d 01 8e 04 0d 01 8f 04 |................| 00002580 0d 01 90 22 dd 20 a4 64 65 74 65 72 6d 69 6e 65 |...". .determine| 00002590 5f 6e 75 6d 62 65 72 5f 6f 66 5f 72 65 63 6f 72 |_number_of_recor| 000025a0 64 73 0d 01 91 19 ea 20 63 6f 75 6e 74 25 2c 62 |ds..... count%,b| 000025b0 25 2c 6e 65 77 5f 6c 69 6e 65 25 0d 01 92 0c 63 |%,new_line%....c| 000025c0 6f 75 6e 74 25 3d 30 0d 01 93 11 f2 68 6f 75 72 |ount%=0.....hour| 000025d0 67 6c 61 73 73 5f 6f 6e 0d 01 94 12 f2 6f 70 65 |glass_on.....ope| 000025e0 6e 5f 63 73 76 5f 66 69 6c 65 0d 01 95 3a cf 23 |n_csv_file...:.#| 000025f0 63 73 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 |csv_file_handle%| 00002600 3d 63 73 76 5f 66 69 6c 65 5f 70 74 72 25 20 3a |=csv_file_ptr% :| 00002610 f4 20 70 75 74 20 61 74 20 66 69 65 6c 64 20 73 |. put at field s| 00002620 74 61 72 74 0d 01 96 0f 6e 65 77 5f 6c 69 6e 65 |tart....new_line| 00002630 25 3d b9 0d 01 97 05 f5 0d 01 98 1a 20 62 25 3d |%=.......... b%=| 00002640 9a 23 63 73 76 5f 66 69 6c 65 5f 68 61 6e 64 6c |.#csv_file_handl| 00002650 65 25 0d 01 99 37 20 e7 20 62 25 3d 43 68 61 72 |e%...7 . b%=Char| 00002660 5f 43 52 25 20 84 20 62 25 3d 43 68 61 72 5f 4c |_CR% . b%=Char_L| 00002670 46 25 20 84 20 c5 23 63 73 76 5f 66 69 6c 65 5f |F% . .#csv_file_| 00002680 68 61 6e 64 6c 65 25 20 8c 0d 01 9a 1f 20 20 e7 |handle% ..... .| 00002690 20 ac 20 6e 65 77 5f 6c 69 6e 65 25 20 8c 20 63 | . new_line% . c| 000026a0 6f 75 6e 74 25 2b 3d 31 0d 01 9b 11 20 20 6e 65 |ount%+=1.... ne| 000026b0 77 5f 6c 69 6e 65 25 3d b9 0d 01 9c 06 20 cc 0d |w_line%=..... ..| 000026c0 01 9d 11 20 20 6e 65 77 5f 6c 69 6e 65 25 3d a3 |... new_line%=.| 000026d0 0d 01 9e 06 20 cd 0d 01 9f 18 fd 20 c5 23 63 73 |.... ...... .#cs| 000026e0 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 0d 01 |v_file_handle%..| 000026f0 a0 13 f2 63 6c 6f 73 65 5f 63 73 76 5f 66 69 6c |...close_csv_fil| 00002700 65 0d 01 a1 12 f2 68 6f 75 72 67 6c 61 73 73 5f |e.....hourglass_| 00002710 6f 66 66 0d 01 a2 0b 3d 63 6f 75 6e 74 25 0d 01 |off....=count%..| 00002720 a3 04 0d 01 a4 04 0d 01 a5 04 0d 01 a6 13 dd 20 |............... | 00002730 f2 64 6f 63 5f 72 65 63 65 69 76 65 64 0d 01 a7 |.doc_received...| 00002740 12 ea 20 6c 6f 6f 70 25 2c 20 74 65 6d 70 24 0d |.. loop%, temp$.| 00002750 01 a8 04 0d 01 a9 14 e7 20 64 6f 63 5f 66 69 6c |........ doc_fil| 00002760 65 24 3d 22 22 20 8c 0d 01 aa 1b 20 64 6f 63 5f |e$="" ..... doc_| 00002770 74 61 73 6b 25 3d 74 61 73 6b 5f 62 75 66 66 25 |task%=task_buff%| 00002780 21 34 0d 01 ab 1e 20 64 6f 63 5f 77 69 6e 64 6f |!4.... doc_windo| 00002790 77 25 3d 74 61 73 6b 5f 62 75 66 66 25 21 32 30 |w%=task_buff%!20| 000027a0 0d 01 ac 2f 20 64 6f 63 5f 66 69 6c 65 24 3d a4 |.../ doc_file$=.| 000027b0 6c 65 61 66 28 a4 74 61 73 6b 5f 72 74 6f 7a 28 |leaf(.task_rtoz(| 000027c0 74 61 73 6b 5f 62 75 66 66 25 2b 32 34 29 29 0d |task_buff%+24)).| 000027d0 01 ad 05 cd 0d 01 ae 66 e7 64 6f 63 5f 74 61 73 |.......f.doc_tas| 000027e0 6b 25 3d 74 61 73 6b 5f 62 75 66 66 25 21 34 20 |k%=task_buff%!4 | 000027f0 80 20 64 6f 63 5f 77 69 6e 64 6f 77 25 3d 74 61 |. doc_window%=ta| 00002800 73 6b 5f 62 75 66 66 25 21 32 30 20 80 20 64 6f |sk_buff%!20 . do| 00002810 63 5f 66 69 6c 65 24 3d a4 6c 65 61 66 28 a4 74 |c_file$=.leaf(.t| 00002820 61 73 6b 5f 72 74 6f 7a 28 74 61 73 6b 5f 62 75 |ask_rtoz(task_bu| 00002830 66 66 25 2b 32 34 29 29 20 8c 0d 01 af 1f 20 74 |ff%+24)) ..... t| 00002840 61 73 6b 5f 62 75 66 66 25 21 31 32 3d 74 61 73 |ask_buff%!12=tas| 00002850 6b 5f 62 75 66 66 25 21 38 0d 01 b0 34 20 c8 99 |k_buff%!8...4 ..| 00002860 22 57 69 6d 70 5f 53 65 6e 64 4d 65 73 73 61 67 |"Wimp_SendMessag| 00002870 65 22 2c 31 39 2c 74 61 73 6b 5f 62 75 66 66 25 |e",19,task_buff%| 00002880 2c 74 61 73 6b 5f 62 75 66 66 25 21 34 0d 01 b1 |,task_buff%!4...| 00002890 38 20 21 77 69 6e 5f 62 75 66 66 25 3d 6d 61 69 |8 !win_buff%=mai| 000028a0 6e 25 3a c8 99 22 57 69 6d 70 5f 47 65 74 57 69 |n%:.."Wimp_GetWi| 000028b0 6e 64 6f 77 53 74 61 74 65 22 2c 2c 77 69 6e 5f |ndowState",,win_| 000028c0 62 75 66 66 25 0d 01 b2 33 20 77 69 6e 5f 62 75 |buff%...3 win_bu| 000028d0 66 66 25 21 32 38 3d 2d 31 3a c8 99 22 57 69 6d |ff%!28=-1:.."Wim| 000028e0 70 5f 4f 70 65 6e 57 69 6e 64 6f 77 22 2c 2c 77 |p_OpenWindow",,w| 000028f0 69 6e 5f 62 75 66 66 25 0d 01 b3 30 20 f2 69 63 |in_buff%...0 .ic| 00002900 6f 6e 5f 77 72 69 74 65 28 6d 61 69 6e 25 2c 49 |on_write(main%,I| 00002910 63 6f 6e 5f 64 6f 63 75 6d 65 6e 74 25 2c 64 6f |con_document%,do| 00002920 63 5f 66 69 6c 65 24 29 0d 01 b4 05 cd 0d 01 b5 |c_file$)........| 00002930 04 0d 01 b6 13 f4 20 41 74 74 61 63 6b 20 73 74 |...... Attack st| 00002940 72 69 6e 67 0d 01 b7 0c 74 65 6d 70 24 3d 22 22 |ring....temp$=""| 00002950 0d 01 b8 1c e3 20 6c 6f 6f 70 25 3d 31 20 b8 20 |..... loop%=1 . | 00002960 a9 28 64 6f 63 5f 66 69 6c 65 24 29 0d 01 b9 3f |.(doc_file$)...?| 00002970 e7 20 97 28 c1 64 6f 63 5f 66 69 6c 65 24 2c 20 |. .(.doc_file$, | 00002980 6c 6f 6f 70 25 2c 31 29 29 3e 33 32 20 8c 20 74 |loop%,1))>32 . t| 00002990 65 6d 70 24 2b 3d c1 64 6f 63 5f 66 69 6c 65 24 |emp$+=.doc_file$| 000029a0 2c 20 6c 6f 6f 70 25 2c 20 31 29 0d 01 ba 0b ed |, loop%, 1).....| 000029b0 20 6c 6f 6f 70 25 0d 01 bb 13 64 6f 63 5f 66 69 | loop%....doc_fi| 000029c0 6c 65 24 3d 74 65 6d 70 24 0d 01 bc 05 e1 0d 01 |le$=temp$.......| 000029d0 bd 04 0d 01 be 04 0d 01 bf 04 0d 01 c0 0f dd 20 |............... | 000029e0 f2 64 61 74 61 73 61 76 65 0d 01 c1 12 ea 20 6c |.datasave..... l| 000029f0 6f 6f 70 25 2c 20 62 79 74 65 25 0d 01 c2 04 0d |oop%, byte%.....| 00002a00 01 c3 33 f4 20 72 65 63 65 69 70 74 20 6f 66 20 |..3. receipt of | 00002a10 43 53 56 20 66 69 6c 65 20 64 69 72 65 63 74 6c |CSV file directl| 00002a20 79 20 66 72 6f 6d 20 61 70 70 6c 69 63 61 74 69 |y from applicati| 00002a30 6f 6e 0d 01 c4 04 0d 01 c5 1f e7 20 74 61 73 6b |on......... task| 00002a40 5f 62 75 66 66 25 21 34 30 3d 43 53 56 5f 54 79 |_buff%!40=CSV_Ty| 00002a50 70 65 25 20 8c 0d 01 c6 15 20 74 61 73 6b 5f 62 |pe% ..... task_b| 00002a60 75 66 66 25 21 30 3d 32 35 36 0d 01 c7 1f 20 74 |uff%!0=256.... t| 00002a70 61 73 6b 5f 62 75 66 66 25 21 31 32 3d 74 61 73 |ask_buff%!12=tas| 00002a80 6b 5f 62 75 66 66 25 21 38 0d 01 c8 14 20 74 61 |k_buff%!8.... ta| 00002a90 73 6b 5f 62 75 66 66 25 21 31 36 3d 32 0d 01 c9 |sk_buff%!16=2...| 00002aa0 15 20 74 61 73 6b 5f 62 75 66 66 25 21 33 36 3d |. task_buff%!36=| 00002ab0 2d 31 0d 01 ca 04 0d 01 cb 3d f4 20 43 6f 6e 76 |-1.......=. Conv| 00002ac0 65 72 74 20 74 65 72 6d 69 6e 61 74 65 64 20 73 |ert terminated s| 00002ad0 74 72 69 6e 67 20 74 6f 20 61 20 73 74 72 69 6e |tring to a strin| 00002ae0 67 20 74 65 72 6d 69 6e 61 74 65 64 20 62 79 20 |g terminated by | 00002af0 31 33 2e 0d 01 cc 0c 6c 6f 6f 70 25 3d 34 34 0d |13.....loop%=44.| 00002b00 01 cd 1c c8 95 20 28 74 61 73 6b 5f 62 75 66 66 |..... (task_buff| 00002b10 25 3f 6c 6f 6f 70 25 29 3e 33 31 0d 01 ce 12 20 |%?loop%)>31.... | 00002b20 20 20 20 20 20 6c 6f 6f 70 25 2b 3d 31 0d 01 cf | loop%+=1...| 00002b30 05 ce 0d 01 d0 17 74 61 73 6b 5f 62 75 66 66 25 |......task_buff%| 00002b40 3f 6c 6f 6f 70 25 3d 31 33 0d 01 d1 04 0d 01 d2 |?loop%=13.......| 00002b50 38 24 28 74 61 73 6b 5f 62 75 66 66 25 2b 34 34 |8$(task_buff%+44| 00002b60 29 3d 22 3c 57 69 6d 70 24 53 63 72 61 70 44 69 |)="<Wimp$ScrapDi| 00002b70 72 3e 2e 22 2b 24 28 74 61 73 6b 5f 62 75 66 66 |r>."+$(task_buff| 00002b80 25 2b 34 34 29 0d 01 d3 33 c8 99 22 57 69 6d 70 |%+44)...3.."Wimp| 00002b90 5f 53 65 6e 64 4d 65 73 73 61 67 65 22 2c 31 37 |_SendMessage",17| 00002ba0 2c 74 61 73 6b 5f 62 75 66 66 25 2c 74 61 73 6b |,task_buff%,task| 00002bb0 5f 62 75 66 66 25 21 34 0d 01 d4 05 cd 0d 01 d5 |_buff%!4........| 00002bc0 05 e1 0d 01 d6 04 0d 01 d7 04 0d 01 d8 0f dd 20 |............... | 00002bd0 a4 6c 65 61 66 28 73 24 29 0d 01 d9 0f ea 20 64 |.leaf(s$)..... d| 00002be0 6f 74 69 6e 64 65 78 25 0d 01 da 0f 64 6f 74 69 |otindex%....doti| 00002bf0 6e 64 65 78 25 3d 30 0d 01 db 1b c8 95 20 a7 73 |ndex%=0...... .s| 00002c00 24 2c 22 2e 22 2c 64 6f 74 69 6e 64 65 78 25 2b |$,".",dotindex%+| 00002c10 31 29 0d 01 dc 24 20 20 64 6f 74 69 6e 64 65 78 |1)...$ dotindex| 00002c20 25 3d a7 73 24 2c 22 2e 22 2c 64 6f 74 69 6e 64 |%=.s$,".",dotind| 00002c30 65 78 25 2b 31 29 0d 01 dd 05 ce 0d 01 de 15 3d |ex%+1).........=| 00002c40 c1 73 24 2c 64 6f 74 69 6e 64 65 78 25 2b 31 29 |.s$,dotindex%+1)| 00002c50 0d 01 df 04 0d 01 e0 04 0d 01 e1 04 0d 01 e2 0e |................| 00002c60 dd 20 f2 70 72 65 71 75 69 74 0d 01 e3 0d e7 6d |. .prequit.....m| 00002c70 65 72 67 65 25 20 8c 0d 01 e4 3a 20 f4 20 2a 2a |erge% ....: . **| 00002c80 2a 2a 2a 20 64 6f 20 73 6f 6d 65 20 70 72 6f 6d |*** do some prom| 00002c90 70 74 69 6e 67 20 72 65 67 61 72 64 69 6e 67 20 |pting regarding | 00002ca0 6d 65 72 67 65 20 69 6e 20 70 72 6f 67 72 65 73 |merge in progres| 00002cb0 73 0d 01 e5 05 cd 0d 01 e6 05 e1 0d 01 e7 04 0d |s...............| 00002cc0 01 e8 04 0d 01 e9 04 0d 01 ea 13 dd 20 f2 74 72 |............ .tr| 00002cd0 79 5f 6d 65 72 67 65 5f 6f 6e 0d 01 eb 25 f4 20 |y_merge_on...%. | 00002ce0 74 72 79 20 74 6f 20 64 69 73 70 6c 61 79 20 74 |try to display t| 00002cf0 68 65 20 66 69 72 73 74 20 72 65 63 6f 72 64 0d |he first record.| 00002d00 01 ec 0c 6d 65 72 67 65 25 3d b9 0d 01 ed 2e 70 |...merge%=.....p| 00002d10 72 65 73 65 72 76 65 64 5f 73 74 61 72 74 5f 6f |reserved_start_o| 00002d20 66 5f 64 61 74 61 5f 70 74 72 25 3d 63 73 76 5f |f_data_ptr%=csv_| 00002d30 66 69 6c 65 5f 70 74 72 25 0d 01 ee 18 f2 73 65 |file_ptr%.....se| 00002d40 6e 64 28 22 45 64 69 74 20 4f 66 66 22 2c 2d 31 |nd("Edit Off",-1| 00002d50 29 0d 01 ef 16 f2 6d 65 72 67 65 5f 6e 65 78 74 |).....merge_next| 00002d60 5f 72 65 63 6f 72 64 0d 01 f0 05 e1 0d 01 f1 04 |_record.........| 00002d70 0d 01 f2 04 0d 01 f3 10 dd 20 f2 6d 65 72 67 65 |......... .merge| 00002d80 5f 6f 66 66 0d 01 f4 2c f4 20 73 74 6f 70 20 6d |_off...,. stop m| 00002d90 65 72 67 69 6e 67 20 61 6e 64 20 69 6e 69 74 69 |erging and initi| 00002da0 61 6c 69 73 65 20 65 76 65 72 79 74 68 69 6e 67 |alise everything| 00002db0 0d 01 f5 0b ea 20 6e 65 78 74 25 0d 01 f6 04 0d |..... next%.....| 00002dc0 01 f7 20 e7 20 6d 65 72 67 65 25 20 f2 73 65 6e |.. . merge% .sen| 00002dd0 64 28 22 45 64 69 74 20 4f 6e 22 2c 2d 31 29 0d |d("Edit On",-1).| 00002de0 01 f8 0c 6d 65 72 67 65 25 3d a3 0d 01 f9 10 63 |...merge%=.....c| 00002df0 73 76 5f 66 69 6c 65 24 3d 22 22 0d 01 fa 16 63 |sv_file$=""....c| 00002e00 73 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 3d |sv_file_handle%=| 00002e10 30 0d 01 fb 10 63 73 76 5f 63 6f 75 6e 74 25 3d |0....csv_count%=| 00002e20 30 0d 01 fc 13 63 73 76 5f 68 65 61 64 69 6e 67 |0....csv_heading| 00002e30 73 25 3d 30 0d 01 fd 15 63 73 76 5f 66 69 65 6c |s%=0....csv_fiel| 00002e40 64 5f 70 74 72 73 25 3d 30 0d 01 fe 15 63 73 76 |d_ptrs%=0....csv| 00002e50 5f 66 69 65 6c 64 5f 6c 65 6e 73 25 3d 30 0d 01 |_field_lens%=0..| 00002e60 ff 13 63 73 76 5f 66 69 6c 65 5f 70 74 72 25 3d |..csv_file_ptr%=| 00002e70 30 0d 02 00 10 64 6f 63 5f 66 69 6c 65 24 3d 22 |0....doc_file$="| 00002e80 22 0d 02 01 0f 64 6f 63 5f 74 61 73 6b 25 3d 30 |"....doc_task%=0| 00002e90 0d 02 02 11 64 6f 63 5f 77 69 6e 64 6f 77 25 3d |....doc_window%=| 00002ea0 30 0d 02 03 12 66 69 65 6c 64 5f 63 6f 75 6e 74 |0....field_count| 00002eb0 25 3d 30 0d 02 04 0f 72 65 63 5f 74 6f 67 6f 25 |%=0....rec_togo%| 00002ec0 3d 30 0d 02 05 0f 72 65 63 5f 64 6f 6e 65 25 3d |=0....rec_done%=| 00002ed0 30 0d 02 06 05 e1 0d 02 07 04 0d 02 08 04 0d 02 |0...............| 00002ee0 09 18 dd 20 f2 6d 65 72 67 65 5f 6e 65 78 74 5f |... .merge_next_| 00002ef0 72 65 63 6f 72 64 0d 02 0a 14 e7 20 72 65 63 5f |record..... rec_| 00002f00 74 6f 67 6f 25 3c 3e 30 20 8c 0d 02 0b 12 20 f2 |togo%<>0 ..... .| 00002f10 68 6f 75 72 67 6c 61 73 73 5f 6f 6e 0d 02 0c 11 |hourglass_on....| 00002f20 20 f2 6e 65 78 74 5f 72 65 63 6f 72 64 0d 02 0d | .next_record...| 00002f30 1c 20 f2 73 65 6e 64 28 22 4d 65 72 67 65 22 2c |. .send("Merge",| 00002f40 54 5f 4d 65 72 67 65 25 29 0d 02 0e 1d 20 f2 64 |T_Merge%).... .d| 00002f50 69 73 61 62 6c 65 5f 6d 65 72 67 69 6e 67 5f 62 |isable_merging_b| 00002f60 75 74 74 6f 6e 73 0d 02 0f 05 cc 0d 02 10 26 20 |uttons........& | 00002f70 24 28 65 72 72 6f 72 5f 62 75 66 66 25 2b 34 29 |$(error_buff%+4)| 00002f80 3d a4 6d 73 67 5f 30 28 22 4f 4b 36 22 29 2b bd |=.msg_0("OK6")+.| 00002f90 30 0d 02 11 46 20 c8 99 22 57 69 6d 70 5f 52 65 |0...F .."Wimp_Re| 00002fa0 70 6f 72 74 45 72 72 6f 72 22 2c 65 72 72 6f 72 |portError",error| 00002fb0 5f 62 75 66 66 25 2c 25 31 30 30 30 31 2c a4 6d |_buff%,%10001,.m| 00002fc0 73 67 5f 31 28 22 4d 53 22 2c a4 6d 73 67 5f 30 |sg_1("MS",.msg_0| 00002fd0 28 22 49 44 22 29 29 0d 02 12 13 20 f2 68 6f 73 |("ID")).... .hos| 00002fe0 74 5f 73 68 75 74 64 6f 77 6e 0d 02 13 05 cd 0d |t_shutdown......| 00002ff0 02 14 05 e1 0d 02 15 04 0d 02 16 04 0d 02 17 12 |................| 00003000 dd 20 f2 6e 65 78 74 5f 72 65 63 6f 72 64 0d 02 |. .next_record..| 00003010 18 45 f4 20 63 61 6c 63 75 6c 61 74 65 73 20 70 |.E. calculates p| 00003020 6f 69 6e 74 65 72 73 20 74 6f 20 65 61 63 68 20 |ointers to each | 00003030 66 69 65 6c 64 2c 20 61 6e 64 20 74 68 65 20 6c |field, and the l| 00003040 65 6e 67 74 68 20 6f 66 20 65 61 63 68 20 66 69 |ength of each fi| 00003050 65 6c 64 0d 02 19 28 ea 20 6c 65 6e 25 2c 69 25 |eld...(. len%,i%| 00003060 2c 64 75 6d 6d 79 25 2c 66 69 6e 69 73 68 65 64 |,dummy%,finished| 00003070 25 2c 74 68 69 73 5f 70 74 72 25 0d 02 1a 04 0d |%,this_ptr%.....| 00003080 02 1b 37 f4 20 63 68 65 63 6b 20 61 6c 6c 20 72 |..7. check all r| 00003090 65 63 6f 72 64 73 20 68 61 76 65 20 69 64 65 6e |ecords have iden| 000030a0 74 69 63 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 |tical number of | 000030b0 66 69 65 6c 64 73 0d 02 1c 10 ea 20 6e 75 6d 66 |fields..... numf| 000030c0 69 65 6c 64 73 25 0d 02 1d 10 6e 75 6d 66 69 65 |ields%....numfie| 000030d0 6c 64 73 25 3d 30 0d 02 1e 12 f2 6f 70 65 6e 5f |lds%=0.....open_| 000030e0 63 73 76 5f 66 69 6c 65 0d 02 1f 3b e7 20 63 73 |csv_file...;. cs| 000030f0 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 3d 30 |v_file_handle%=0| 00003100 20 85 20 74 61 73 6b 5f 6f 6b 25 2c a4 6d 73 67 | . task_ok%,.msg| 00003110 5f 31 28 22 4f 4b 32 22 2c 63 73 76 5f 66 69 6c |_1("OK2",csv_fil| 00003120 65 24 29 0d 02 20 3a f4 20 66 72 65 65 20 75 70 |e$).. :. free up| 00003130 20 74 68 65 20 6d 65 6d 6f 72 79 20 6f 63 63 75 | the memory occu| 00003140 70 69 65 64 20 62 79 20 61 6e 79 20 65 78 69 73 |pied by any exis| 00003150 74 69 6e 67 20 70 6f 69 6e 74 65 72 73 0d 02 21 |ting pointers..!| 00003160 16 c8 95 20 63 73 76 5f 66 69 65 6c 64 5f 70 74 |... csv_field_pt| 00003170 72 73 25 0d 02 22 1b 20 6e 65 78 74 25 3d 21 63 |rs%..". next%=!c| 00003180 73 76 5f 66 69 65 6c 64 5f 70 74 72 73 25 0d 02 |sv_field_ptrs%..| 00003190 23 27 20 f2 68 65 61 70 5f 66 72 65 65 28 22 43 |#' .heap_free("C| 000031a0 53 56 50 22 2c 63 73 76 5f 66 69 65 6c 64 5f 70 |SVP",csv_field_p| 000031b0 74 72 73 25 29 0d 02 24 1a 20 63 73 76 5f 66 69 |trs%)..$. csv_fi| 000031c0 65 6c 64 5f 70 74 72 73 25 3d 6e 65 78 74 25 0d |eld_ptrs%=next%.| 000031d0 02 25 05 ce 0d 02 26 16 c8 95 20 63 73 76 5f 66 |.%....&... csv_f| 000031e0 69 65 6c 64 5f 6c 65 6e 73 25 0d 02 27 1b 20 6e |ield_lens%..'. n| 000031f0 65 78 74 25 3d 21 63 73 76 5f 66 69 65 6c 64 5f |ext%=!csv_field_| 00003200 6c 65 6e 73 25 0d 02 28 27 20 f2 68 65 61 70 5f |lens%..(' .heap_| 00003210 66 72 65 65 28 22 43 53 56 4c 22 2c 63 73 76 5f |free("CSVL",csv_| 00003220 66 69 65 6c 64 5f 6c 65 6e 73 25 29 0d 02 29 1a |field_lens%)..).| 00003230 20 63 73 76 5f 66 69 65 6c 64 5f 6c 65 6e 73 25 | csv_field_lens%| 00003240 3d 6e 65 78 74 25 0d 02 2a 05 ce 0d 02 2b 24 cf |=next%..*....+$.| 00003250 23 63 73 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 |#csv_file_handle| 00003260 25 3d 63 73 76 5f 66 69 6c 65 5f 70 74 72 25 0d |%=csv_file_ptr%.| 00003270 02 2c 08 69 25 3d 30 0d 02 2d 05 f5 0d 02 2e 0b |.,.i%=0..-......| 00003280 20 20 69 25 2b 3d 31 0d 02 2f 07 20 20 f5 0d 02 | i%+=1../. ...| 00003290 30 49 20 20 20 20 74 68 69 73 5f 70 74 72 25 3d |0I this_ptr%=| 000032a0 8f 23 63 73 76 5f 66 69 6c 65 5f 68 61 6e 64 6c |.#csv_file_handl| 000032b0 65 25 20 20 20 20 3a f4 20 70 6f 69 6e 74 65 72 |e% :. pointer| 000032c0 20 74 6f 20 72 65 61 6c 20 73 74 61 72 74 20 6f | to real start o| 000032d0 66 20 66 69 65 6c 64 0d 02 31 24 20 20 20 20 f2 |f field..1$ .| 000032e0 63 6f 70 79 5f 66 69 65 6c 64 28 30 2c 64 75 6d |copy_field(0,dum| 000032f0 6d 79 25 2c 6c 65 6e 25 2c a3 29 0d 02 32 13 20 |my%,len%,.)..2. | 00003300 20 20 20 66 69 6e 69 73 68 65 64 25 3d b9 0d 02 | finished%=...| 00003310 33 45 20 20 20 20 e7 20 ac 20 c5 23 63 73 76 5f |3E . . .#csv_| 00003320 66 69 6c 65 5f 68 61 6e 64 6c 65 25 20 80 20 69 |file_handle% . i| 00003330 25 3d 31 20 80 20 6c 65 6e 25 3d 30 20 80 20 64 |%=1 . len%=0 . d| 00003340 75 6d 6d 79 25 20 8c 20 66 69 6e 69 73 68 65 64 |ummy% . finished| 00003350 25 3d a3 0d 02 34 11 20 20 fd 20 66 69 6e 69 73 |%=...4. . finis| 00003360 68 65 64 25 0d 02 35 1f 20 20 f2 61 64 64 5f 66 |hed%..5. .add_f| 00003370 69 65 6c 64 5f 70 74 72 28 74 68 69 73 5f 70 74 |ield_ptr(this_pt| 00003380 72 25 29 0d 02 36 1a 20 20 f2 61 64 64 5f 66 69 |r%)..6. .add_fi| 00003390 65 6c 64 5f 6c 65 6e 28 6c 65 6e 25 29 0d 02 37 |eld_len(len%)..7| 000033a0 31 fd 20 69 25 3d 63 73 76 5f 63 6f 75 6e 74 25 |1. i%=csv_count%| 000033b0 20 84 20 64 75 6d 6d 79 25 20 84 20 c5 23 63 73 | . dummy% . .#cs| 000033c0 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 0d 02 |v_file_handle%..| 000033d0 38 13 e7 20 ac 20 64 75 6d 6d 79 25 20 f2 65 6f |8.. . dummy% .eo| 000033e0 6c 0d 02 39 15 e7 20 69 25 3c 63 73 76 5f 63 6f |l..9.. i%<csv_co| 000033f0 75 6e 74 25 20 8c 0d 02 3a 16 20 20 c8 95 20 69 |unt% ...:. .. i| 00003400 25 3c 63 73 76 5f 63 6f 75 6e 74 25 0d 02 3b 0c |%<csv_count%..;.| 00003410 20 20 20 69 25 2b 3d 31 0d 02 3c 18 20 20 20 f2 | i%+=1..<. .| 00003420 61 64 64 5f 66 69 65 6c 64 5f 70 74 72 28 30 29 |add_field_ptr(0)| 00003430 0d 02 3d 18 20 20 20 f2 61 64 64 5f 66 69 65 6c |..=. .add_fiel| 00003440 64 5f 6c 65 6e 28 30 29 0d 02 3e 07 20 20 ce 0d |d_len(0)..>. ..| 00003450 02 3f 05 cd 0d 02 40 24 63 73 76 5f 66 69 6c 65 |.?....@$csv_file| 00003460 5f 70 74 72 25 3d 8f 23 63 73 76 5f 66 69 6c 65 |_ptr%=.#csv_file| 00003470 5f 68 61 6e 64 6c 65 25 0d 02 41 13 f2 63 6c 6f |_handle%..A..clo| 00003480 73 65 5f 63 73 76 5f 66 69 6c 65 0d 02 42 05 e1 |se_csv_file..B..| 00003490 0d 02 43 04 0d 02 44 04 0d 02 45 0a dd 20 f2 65 |..C...D...E.. .e| 000034a0 6f 6c 0d 02 46 07 ea 20 78 0d 02 47 07 78 3d 30 |ol..F.. x..G.x=0| 000034b0 0d 02 48 05 f5 0d 02 49 32 20 e7 20 ac 20 c5 23 |..H....I2 . . .#| 000034c0 63 73 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 |csv_file_handle%| 000034d0 20 8c 20 78 3d 9a 23 63 73 76 5f 66 69 6c 65 5f | . x=.#csv_file_| 000034e0 68 61 6e 64 6c 65 25 0d 02 4a 32 fd 20 78 3d 43 |handle%..J2. x=C| 000034f0 68 61 72 5f 43 52 25 20 84 20 78 3d 43 68 61 72 |har_CR% . x=Char| 00003500 5f 4c 46 25 20 84 20 c5 23 63 73 76 5f 66 69 6c |_LF% . .#csv_fil| 00003510 65 5f 68 61 6e 64 6c 65 25 0d 02 4b 05 e1 0d 02 |e_handle%..K....| 00003520 4c 04 0d 02 4d 04 0d 02 4e 04 0d 02 4f 1c dd 20 |L...M...N...O.. | 00003530 f2 61 64 64 5f 66 69 65 6c 64 5f 70 74 72 28 69 |.add_field_ptr(i| 00003540 6e 64 65 78 25 29 0d 02 50 11 ea 20 6e 6f 64 65 |ndex%)..P.. node| 00003550 25 2c 6c 61 73 74 25 0d 02 51 1f 6e 6f 64 65 25 |%,last%..Q.node%| 00003560 3d a4 68 65 61 70 5f 63 6c 61 69 6d 28 22 43 53 |=.heap_claim("CS| 00003570 56 50 22 2c 38 29 0d 02 52 0d 6e 6f 64 65 25 21 |VP",8)..R.node%!| 00003580 30 3d 30 0d 02 53 12 6e 6f 64 65 25 21 34 3d 69 |0=0..S.node%!4=i| 00003590 6e 64 65 78 25 0d 02 54 19 e7 20 63 73 76 5f 66 |ndex%..T.. csv_f| 000035a0 69 65 6c 64 5f 70 74 72 73 25 3d 30 20 8c 0d 02 |ield_ptrs%=0 ...| 000035b0 55 1a 20 63 73 76 5f 66 69 65 6c 64 5f 70 74 72 |U. csv_field_ptr| 000035c0 73 25 3d 6e 6f 64 65 25 0d 02 56 05 cc 0d 02 57 |s%=node%..V....W| 000035d0 1a 20 6c 61 73 74 25 3d 63 73 76 5f 66 69 65 6c |. last%=csv_fiel| 000035e0 64 5f 70 74 72 73 25 0d 02 58 0e 20 c8 95 20 21 |d_ptrs%..X. .. !| 000035f0 6c 61 73 74 25 0d 02 59 12 20 20 6c 61 73 74 25 |last%..Y. last%| 00003600 3d 21 6c 61 73 74 25 0d 02 5a 06 20 ce 0d 02 5b |=!last%..Z. ...[| 00003610 11 20 21 6c 61 73 74 25 3d 6e 6f 64 65 25 0d 02 |. !last%=node%..| 00003620 5c 05 cd 0d 02 5d 05 e1 0d 02 5e 04 0d 02 5f 04 |\....]....^..._.| 00003630 0d 02 60 04 0d 02 61 1b dd f2 61 64 64 5f 66 69 |..`...a...add_fi| 00003640 65 6c 64 5f 6c 65 6e 28 69 6e 64 65 78 25 29 0d |eld_len(index%).| 00003650 02 62 11 ea 20 6e 6f 64 65 25 2c 6c 61 73 74 25 |.b.. node%,last%| 00003660 0d 02 63 1f 6e 6f 64 65 25 3d a4 68 65 61 70 5f |..c.node%=.heap_| 00003670 63 6c 61 69 6d 28 22 43 53 56 4c 22 2c 38 29 0d |claim("CSVL",8).| 00003680 02 64 0d 6e 6f 64 65 25 21 30 3d 30 0d 02 65 12 |.d.node%!0=0..e.| 00003690 6e 6f 64 65 25 21 34 3d 69 6e 64 65 78 25 0d 02 |node%!4=index%..| 000036a0 66 19 e7 20 63 73 76 5f 66 69 65 6c 64 5f 6c 65 |f.. csv_field_le| 000036b0 6e 73 25 3d 30 20 8c 0d 02 67 1a 20 63 73 76 5f |ns%=0 ...g. csv_| 000036c0 66 69 65 6c 64 5f 6c 65 6e 73 25 3d 6e 6f 64 65 |field_lens%=node| 000036d0 25 0d 02 68 05 cc 0d 02 69 1a 20 6c 61 73 74 25 |%..h....i. last%| 000036e0 3d 63 73 76 5f 66 69 65 6c 64 5f 6c 65 6e 73 25 |=csv_field_lens%| 000036f0 0d 02 6a 0e 20 c8 95 20 21 6c 61 73 74 25 0d 02 |..j. .. !last%..| 00003700 6b 12 20 20 6c 61 73 74 25 3d 21 6c 61 73 74 25 |k. last%=!last%| 00003710 0d 02 6c 06 20 ce 0d 02 6d 11 20 21 6c 61 73 74 |..l. ...m. !last| 00003720 25 3d 6e 6f 64 65 25 0d 02 6e 05 cd 0d 02 6f 05 |%=node%..n....o.| 00003730 e1 0d 02 70 04 0d 02 71 04 0d 02 72 04 0d 02 73 |...p...q...r...s| 00003740 18 dd 20 a4 66 69 65 6c 64 5f 70 74 72 28 69 6e |.. .field_ptr(in| 00003750 64 65 78 25 29 0d 02 74 28 f4 20 72 65 74 75 72 |dex%)..t(. retur| 00003760 6e 20 74 68 65 20 6e 74 68 20 28 73 74 61 72 74 |n the nth (start| 00003770 69 6e 67 20 61 74 20 30 29 20 70 74 72 0d 02 75 |ing at 0) ptr..u| 00003780 0b ea 20 6e 6f 64 65 25 0d 02 76 19 6e 6f 64 65 |.. node%..v.node| 00003790 25 3d 63 73 76 5f 66 69 65 6c 64 5f 70 74 72 73 |%=csv_field_ptrs| 000037a0 25 0d 02 77 0d c8 95 20 69 6e 64 65 78 25 0d 02 |%..w... index%..| 000037b0 78 35 20 f4 20 74 68 69 73 20 69 73 20 73 61 66 |x5 . this is saf| 000037c0 65 20 27 63 6f 73 20 69 74 73 20 76 61 6c 69 64 |e 'cos its valid| 000037d0 61 74 65 64 20 62 65 66 6f 72 65 20 63 61 6c 6c |ated before call| 000037e0 69 6e 67 0d 02 79 42 20 6e 6f 64 65 25 3d 21 6e |ing..yB node%=!n| 000037f0 6f 64 65 25 3a e7 6e 6f 64 65 25 3d 30 20 85 20 |ode%:.node%=0 . | 00003800 74 61 73 6b 5f 66 61 74 61 6c 25 2c 22 42 61 64 |task_fatal%,"Bad| 00003810 20 66 69 65 6c 64 20 70 74 72 20 72 65 71 75 65 | field ptr reque| 00003820 73 74 65 64 22 0d 02 7a 0e 20 69 6e 64 65 78 25 |sted"..z. index%| 00003830 2d 3d 31 0d 02 7b 05 ce 0d 02 7c 0c 3d 6e 6f 64 |-=1..{....|.=nod| 00003840 65 25 21 34 0d 02 7d 04 0d 02 7e 04 0d 02 7f 04 |e%!4..}...~.....| 00003850 0d 02 80 18 dd 20 a4 66 69 65 6c 64 5f 6c 65 6e |..... .field_len| 00003860 28 69 6e 64 65 78 25 29 0d 02 81 2b f4 20 72 65 |(index%)...+. re| 00003870 74 75 72 6e 20 74 68 65 20 6e 74 68 20 28 73 74 |turn the nth (st| 00003880 61 72 74 69 6e 67 20 61 74 20 30 29 20 6c 65 6e |arting at 0) len| 00003890 67 74 68 0d 02 82 0b ea 20 6e 6f 64 65 25 0d 02 |gth..... node%..| 000038a0 83 19 6e 6f 64 65 25 3d 63 73 76 5f 66 69 65 6c |..node%=csv_fiel| 000038b0 64 5f 6c 65 6e 73 25 0d 02 84 0d c8 95 20 69 6e |d_lens%...... in| 000038c0 64 65 78 25 0d 02 85 35 20 f4 20 74 68 69 73 20 |dex%...5 . this | 000038d0 69 73 20 73 61 66 65 20 27 63 6f 73 20 69 74 73 |is safe 'cos its| 000038e0 20 76 61 6c 69 64 61 74 65 64 20 62 65 66 6f 72 | validated befor| 000038f0 65 20 63 61 6c 6c 69 6e 67 0d 02 86 42 20 6e 6f |e calling...B no| 00003900 64 65 25 3d 21 6e 6f 64 65 25 3a e7 6e 6f 64 65 |de%=!node%:.node| 00003910 25 3d 30 20 85 20 74 61 73 6b 5f 66 61 74 61 6c |%=0 . task_fatal| 00003920 25 2c 22 42 61 64 20 66 69 65 6c 64 20 6c 65 6e |%,"Bad field len| 00003930 20 72 65 71 75 65 73 74 65 64 22 0d 02 87 0e 20 | requested".... | 00003940 69 6e 64 65 78 25 2d 3d 31 0d 02 88 05 ce 0d 02 |index%-=1.......| 00003950 89 0c 3d 6e 6f 64 65 25 21 34 0d 02 8a 04 0d 02 |..=node%!4......| 00003960 8b 04 0d 02 8c 04 0d 02 8d 21 dd 20 f2 73 65 6e |.........!. .sen| 00003970 64 28 63 6f 6d 6d 61 6e 64 24 2c 72 65 70 6c 79 |d(command$,reply| 00003980 74 6f 6b 65 6e 25 29 0d 02 8e 0b ea 20 69 25 2c |token%)..... i%,| 00003990 6d 24 0d 02 8f 16 e7 20 64 6f 63 5f 66 69 6c 65 |m$..... doc_file| 000039a0 24 3d 22 22 20 8c 20 e1 0d 02 90 3f e7 20 72 65 |$="" . ....?. re| 000039b0 70 6c 79 74 6f 6b 65 6e 25 3c 3e 2d 31 20 69 25 |plytoken%<>-1 i%| 000039c0 3d 49 6d 70 75 6c 73 65 5f 52 65 71 75 65 73 74 |=Impulse_Request| 000039d0 25 20 8b 20 69 25 3d 49 6d 70 75 6c 73 65 5f 43 |% . i%=Impulse_C| 000039e0 6f 6d 6d 61 6e 64 25 0d 02 91 32 6d 24 3d 22 3a |ommand%...2m$=":| 000039f0 22 2b a4 6d 73 67 5f 30 28 22 53 56 22 29 2b 22 |"+.msg_0("SV")+"| 00003a00 2e 22 2b 64 6f 63 5f 66 69 6c 65 24 2b 22 20 22 |."+doc_file$+" "| 00003a10 2b 63 6f 6d 6d 61 6e 64 24 0d 02 92 42 c8 99 22 |+command$...B.."| 00003a20 49 6d 70 75 6c 73 65 5f 53 65 6e 64 4d 65 73 73 |Impulse_SendMess| 00003a30 61 67 65 22 2c 69 25 2c 6d 24 2c 30 2c 30 2c 30 |age",i%,m$,0,0,0| 00003a40 2c 72 65 70 6c 79 74 6f 6b 65 6e 25 2c 74 61 73 |,replytoken%,tas| 00003a50 6b 5f 68 61 6e 64 6c 65 25 2c 30 0d 02 93 05 e1 |k_handle%,0.....| 00003a60 0d 02 94 04 0d 02 95 04 0d 02 96 1d dd f2 64 69 |..............di| 00003a70 73 61 62 6c 65 5f 6d 65 72 67 69 6e 67 5f 62 75 |sable_merging_bu| 00003a80 74 74 6f 6e 73 0d 02 97 25 f2 69 63 6f 6e 5f 73 |ttons...%.icon_s| 00003a90 68 61 64 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f |hade(main%,Icon_| 00003aa0 50 72 69 6e 74 41 6c 6c 25 29 0d 02 98 22 f2 69 |PrintAll%)...".i| 00003ab0 63 6f 6e 5f 73 68 61 64 65 28 6d 61 69 6e 25 2c |con_shade(main%,| 00003ac0 49 63 6f 6e 5f 50 72 69 6e 74 25 29 0d 02 99 21 |Icon_Print%)...!| 00003ad0 f2 69 63 6f 6e 5f 73 68 61 64 65 28 6d 61 69 6e |.icon_shade(main| 00003ae0 25 2c 49 63 6f 6e 5f 4e 65 78 74 25 29 0d 02 9a |%,Icon_Next%)...| 00003af0 21 f2 69 63 6f 6e 5f 73 68 61 64 65 28 6d 61 69 |!.icon_shade(mai| 00003b00 6e 25 2c 49 63 6f 6e 5f 45 64 69 74 25 29 0d 02 |n%,Icon_Edit%)..| 00003b10 9b 05 e1 0d 02 9c 04 0d 02 9d 04 0d 02 9e 1c dd |................| 00003b20 f2 65 6e 61 62 6c 65 5f 6d 65 72 67 69 6e 67 5f |.enable_merging_| 00003b30 62 75 74 74 6f 6e 73 0d 02 9f 27 f2 69 63 6f 6e |buttons...'.icon| 00003b40 5f 75 6e 73 68 61 64 65 28 6d 61 69 6e 25 2c 49 |_unshade(main%,I| 00003b50 63 6f 6e 5f 50 72 69 6e 74 41 6c 6c 25 29 0d 02 |con_PrintAll%)..| 00003b60 a0 24 f2 69 63 6f 6e 5f 75 6e 73 68 61 64 65 28 |.$.icon_unshade(| 00003b70 6d 61 69 6e 25 2c 49 63 6f 6e 5f 50 72 69 6e 74 |main%,Icon_Print| 00003b80 25 29 0d 02 a1 23 f2 69 63 6f 6e 5f 75 6e 73 68 |%)...#.icon_unsh| 00003b90 61 64 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 4e |ade(main%,Icon_N| 00003ba0 65 78 74 25 29 0d 02 a2 23 f2 69 63 6f 6e 5f 75 |ext%)...#.icon_u| 00003bb0 6e 73 68 61 64 65 28 6d 61 69 6e 25 2c 49 63 6f |nshade(main%,Ico| 00003bc0 6e 5f 45 64 69 74 25 29 0d 02 a3 05 e1 0d 02 a4 |n_Edit%)........| 00003bd0 04 0d 02 a5 04 0d 02 a6 26 dd 20 f2 63 6f 6d 6d |........&. .comm| 00003be0 61 6e 64 28 74 6f 6b 65 6e 25 2c 70 61 72 61 6d |and(token%,param| 00003bf0 73 25 2c 6f 62 6a 65 63 74 25 29 0d 02 a7 0f c8 |s%,object%).....| 00003c00 8e 20 74 6f 6b 65 6e 25 20 ca 0d 02 a8 13 20 20 |. token% ..... | 00003c10 c9 20 54 5f 47 65 74 46 69 65 6c 64 25 0d 02 a9 |. T_GetField%...| 00003c20 25 20 20 20 20 20 20 f2 67 65 74 5f 66 69 65 6c |% .get_fiel| 00003c30 64 28 70 61 72 61 6d 73 25 2c 6f 62 6a 65 63 74 |d(params%,object| 00003c40 25 29 0d 02 aa 19 20 20 20 20 20 20 66 69 65 6c |%).... fiel| 00003c50 64 5f 63 6f 75 6e 74 25 2b 3d 31 0d 02 ab 14 20 |d_count%+=1.... | 00003c60 20 c9 20 54 5f 43 6c 6f 73 65 44 6f 77 6e 25 0d | . T_CloseDown%.| 00003c70 02 ac 18 20 20 20 20 20 20 64 69 65 70 6c 65 61 |... dieplea| 00003c80 73 65 25 20 3d 20 b9 0d 02 ad 18 20 20 20 20 20 |se% = ..... | 00003c90 20 f2 68 6f 73 74 5f 73 68 75 74 64 6f 77 6e 0d | .host_shutdown.| 00003ca0 02 ae 05 cb 0d 02 af 05 e1 0d 02 b0 04 0d 02 b1 |................| 00003cb0 04 0d 02 b2 21 dd 20 f2 67 65 74 5f 66 69 65 6c |....!. .get_fiel| 00003cc0 64 28 70 61 72 61 6d 73 25 2c 6f 62 6a 65 63 74 |d(params%,object| 00003cd0 25 29 0d 02 b3 32 f4 20 70 61 72 61 6d 73 25 20 |%)...2. params% | 00003ce0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 65 |points to the re| 00003cf0 73 75 6c 74 73 20 6f 66 20 4f 53 5f 52 65 61 64 |sults of OS_Read| 00003d00 41 72 67 73 0d 02 b4 30 ea 20 66 69 65 6c 64 5f |Args...0. field_| 00003d10 69 6e 64 65 78 25 2c 20 66 69 65 6c 64 5f 6e 61 |index%, field_na| 00003d20 6d 65 24 2c 20 70 74 72 25 2c 20 66 69 6e 69 73 |me$, ptr%, finis| 00003d30 68 65 64 25 0d 02 b5 12 e7 20 70 61 72 61 6d 73 |hed%..... params| 00003d40 25 3d 2d 31 20 e1 0d 02 b6 23 66 69 65 6c 64 5f |%=-1 ....#field_| 00003d50 6e 61 6d 65 24 3d a4 74 61 73 6b 5f 72 74 6f 7a |name$=.task_rtoz| 00003d60 28 70 61 72 61 6d 73 25 29 0d 02 b7 12 66 69 65 |(params%)....fie| 00003d70 6c 64 5f 69 6e 64 65 78 25 3d 30 0d 02 b8 16 70 |ld_index%=0....p| 00003d80 74 72 25 3d 63 73 76 5f 68 65 61 64 69 6e 67 73 |tr%=csv_headings| 00003d90 25 0d 02 b9 0f 66 69 6e 69 73 68 65 64 25 3d a3 |%....finished%=.| 00003da0 0d 02 ba 05 f5 0d 02 bb 14 20 66 69 65 6c 64 5f |......... field_| 00003db0 69 6e 64 65 78 25 2b 3d 31 0d 02 bc 1e 20 e7 20 |index%+=1.... . | 00003dc0 24 28 70 74 72 25 2b 34 29 3d 66 69 65 6c 64 5f |$(ptr%+4)=field_| 00003dd0 6e 61 6d 65 24 20 8c 0d 02 bd 11 20 20 66 69 6e |name$ ..... fin| 00003de0 69 73 68 65 64 25 3d b9 0d 02 be 06 20 cc 0d 02 |ished%=..... ...| 00003df0 bf 10 20 20 70 74 72 25 3d 21 70 74 72 25 0d 02 |.. ptr%=!ptr%..| 00003e00 c0 2c 20 20 e7 20 70 74 72 25 3d 30 20 8c 20 66 |., . ptr%=0 . f| 00003e10 69 6e 69 73 68 65 64 25 3d b9 3a 66 69 65 6c 64 |inished%=.:field| 00003e20 5f 69 6e 64 65 78 25 3d 2d 31 0d 02 c1 06 20 cd |_index%=-1.... .| 00003e30 0d 02 c2 04 0d 02 c3 24 f4 20 21 21 21 21 21 21 |.......$. !!!!!!| 00003e40 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 |!!!!!!!!!!!!!!!!| 00003e50 21 21 21 21 21 21 21 21 0d 02 c4 3e f4 20 20 49 |!!!!!!!!...>. I| 00003e60 46 20 70 74 72 25 3d 30 20 45 52 52 4f 52 20 74 |F ptr%=0 ERROR t| 00003e70 61 73 6b 5f 66 61 74 61 6c 25 2c 20 46 4e 6d 73 |ask_fatal%, FNms| 00003e80 67 5f 31 28 22 4f 4b 34 22 2c 66 69 65 6c 64 5f |g_1("OK4",field_| 00003e90 6e 61 6d 65 24 29 0d 02 c5 10 20 20 e7 20 70 74 |name$).... . pt| 00003ea0 72 25 3d 30 20 8c 0d 02 c6 33 20 20 20 20 24 28 |r%=0 ....3 $(| 00003eb0 65 72 72 6f 72 5f 62 75 66 66 25 2b 34 29 3d a4 |error_buff%+4)=.| 00003ec0 6d 73 67 5f 31 28 22 4f 4b 34 22 2c 20 66 69 65 |msg_1("OK4", fie| 00003ed0 6c 64 5f 6e 61 6d 65 24 29 0d 02 c7 4a 20 20 20 |ld_name$)...J | 00003ee0 20 c8 99 20 22 57 69 6d 70 5f 52 65 70 6f 72 74 | .. "Wimp_Report| 00003ef0 45 72 72 6f 72 22 2c 65 72 72 6f 72 5f 62 75 66 |Error",error_buf| 00003f00 66 25 2c 25 31 30 30 30 31 2c a4 6d 73 67 5f 31 |f%,%10001,.msg_1| 00003f10 28 22 4d 53 22 2c a4 6d 73 67 5f 30 28 22 49 44 |("MS",.msg_0("ID| 00003f20 22 29 29 0d 02 c8 07 20 20 cd 0d 02 c9 25 f4 20 |")).... ....%. | 00003f30 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 |!!!!!!!!!!!!!!!!| 00003f40 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 0d |!!!!!!!!!!!!!!!.| 00003f50 02 ca 04 0d 02 cb 0f fd 20 66 69 6e 69 73 68 65 |........ finishe| 00003f60 64 25 0d 02 cc 30 e7 20 66 69 65 6c 64 5f 69 6e |d%...0. field_in| 00003f70 64 65 78 25 3c 31 20 84 20 66 69 65 6c 64 5f 69 |dex%<1 . field_i| 00003f80 6e 64 65 78 25 3e 63 73 76 5f 63 6f 75 6e 74 25 |ndex%>csv_count%| 00003f90 20 8c 0d 02 cd 1d 20 20 f2 74 72 61 6e 73 5f 72 | ..... .trans_r| 00003fa0 65 70 6c 79 5f 62 6c 6f 63 6b 28 30 2c 30 29 0d |eply_block(0,0).| 00003fb0 02 ce 05 cc 0d 02 cf 4f 20 20 f2 74 72 61 6e 73 |.......O .trans| 00003fc0 5f 72 65 70 6c 79 5f 62 6c 6f 63 6b 28 a4 66 69 |_reply_block(.fi| 00003fd0 65 6c 64 5f 70 74 72 28 66 69 65 6c 64 5f 69 6e |eld_ptr(field_in| 00003fe0 64 65 78 25 2d 31 29 2c a4 66 69 65 6c 64 5f 6c |dex%-1),.field_l| 00003ff0 65 6e 28 66 69 65 6c 64 5f 69 6e 64 65 78 25 2d |en(field_index%-| 00004000 31 29 29 0d 02 d0 05 cd 0d 02 d1 05 e1 0d 02 d2 |1)).............| 00004010 04 0d 02 d3 04 0d 02 d4 22 dd f2 74 72 61 6e 73 |........"..trans| 00004020 5f 72 65 70 6c 79 5f 62 6c 6f 63 6b 28 70 74 72 |_reply_block(ptr| 00004030 25 2c 6c 65 6e 25 29 0d 02 d5 0c ea 20 64 75 6d |%,len%)..... dum| 00004040 6d 79 25 0d 02 d6 0f 74 72 61 6e 73 6d 69 74 25 |my%....transmit%| 00004050 3d b9 0d 02 d7 13 74 72 61 6e 73 6d 69 74 5f 70 |=.....transmit_p| 00004060 74 72 25 3d 30 0d 02 d8 38 e7 20 74 72 61 6e 73 |tr%=0...8. trans| 00004070 6d 69 74 5f 62 6c 6f 63 6b 25 20 f2 68 65 61 70 |mit_block% .heap| 00004080 5f 66 72 65 65 28 22 42 4c 43 4b 22 2c 74 72 61 |_free("BLCK",tra| 00004090 6e 73 6d 69 74 5f 62 6c 6f 63 6b 25 29 0d 02 d9 |nsmit_block%)...| 000040a0 2e 74 72 61 6e 73 6d 69 74 5f 62 6c 6f 63 6b 25 |.transmit_block%| 000040b0 3d a4 68 65 61 70 5f 63 6c 61 69 6d 28 22 42 4c |=.heap_claim("BL| 000040c0 43 4b 22 2c 6c 65 6e 25 2b 31 29 0d 02 da 0e e7 |CK",len%+1).....| 000040d0 20 6c 65 6e 25 3e 30 20 8c 0d 02 db 14 20 20 f2 | len%>0 ..... .| 000040e0 6f 70 65 6e 5f 63 73 76 5f 66 69 6c 65 0d 02 dc |open_csv_file...| 000040f0 49 20 20 e7 20 63 73 76 5f 66 69 6c 65 5f 68 61 |I . csv_file_ha| 00004100 6e 64 6c 65 25 3d 30 20 74 72 61 6e 73 6d 69 74 |ndle%=0 transmit| 00004110 25 3d a3 3a 85 20 74 61 73 6b 5f 6f 6b 25 2c a4 |%=.:. task_ok%,.| 00004120 6d 73 67 5f 32 28 22 4f 4b 32 22 2c 63 73 76 5f |msg_2("OK2",csv_| 00004130 66 69 6c 65 24 29 0d 02 dd 1d 20 20 cf 23 63 73 |file$).... .#cs| 00004140 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 3d 70 |v_file_handle%=p| 00004150 74 72 25 0d 02 de 30 20 20 f2 63 6f 70 79 5f 66 |tr%...0 .copy_f| 00004160 69 65 6c 64 28 74 72 61 6e 73 6d 69 74 5f 62 6c |ield(transmit_bl| 00004170 6f 63 6b 25 2c 64 75 6d 6d 79 25 2c 6c 65 6e 25 |ock%,dummy%,len%| 00004180 2c a3 29 0d 02 df 15 20 20 f2 63 6c 6f 73 65 5f |,.).... .close_| 00004190 63 73 76 5f 66 69 6c 65 0d 02 e0 05 cc 0d 02 e1 |csv_file........| 000041a0 19 20 20 24 74 72 61 6e 73 6d 69 74 5f 62 6c 6f |. $transmit_blo| 000041b0 63 6b 25 3d 22 22 0d 02 e2 05 cd 0d 02 e3 1f 74 |ck%="".........t| 000041c0 72 61 6e 73 6d 69 74 5f 74 6f 70 25 3d 28 6c 65 |ransmit_top%=(le| 000041d0 6e 25 2b 31 2b 33 29 80 ac 33 0d 02 e4 17 74 72 |n%+1+3)..3....tr| 000041e0 61 6e 73 6d 69 74 5f 73 69 7a 65 25 3d 6c 65 6e |ansmit_size%=len| 000041f0 25 0d 02 e5 24 74 72 61 6e 73 6d 69 74 5f 74 61 |%...$transmit_ta| 00004200 67 25 3d a4 6e 65 78 74 5f 74 72 61 6e 73 6d 69 |g%=.next_transmi| 00004210 74 5f 74 61 67 0d 02 e6 73 c8 99 22 49 6d 70 75 |t_tag...s.."Impu| 00004220 6c 73 65 5f 53 65 6e 64 4d 65 73 73 61 67 65 22 |lse_SendMessage"| 00004230 2c 49 6d 70 75 6c 73 65 5f 52 65 70 6c 79 25 2c |,Impulse_Reply%,| 00004240 22 44 75 6d 6d 79 20 74 65 78 74 22 2c 2d 31 2c |"Dummy text",-1,| 00004250 2c 2c 74 72 61 6e 73 6d 69 74 5f 74 61 67 25 2c |,,transmit_tag%,| 00004260 74 61 73 6b 5f 68 61 6e 64 6c 65 25 2c 74 72 61 |task_handle%,tra| 00004270 6e 73 6d 69 74 5f 74 6f 70 25 2d 74 72 61 6e 73 |nsmit_top%-trans| 00004280 6d 69 74 5f 70 74 72 25 0d 02 e7 05 e1 0d 02 e8 |mit_ptr%........| 00004290 04 0d 02 e9 04 0d 02 ea 17 dd a4 6e 65 78 74 5f |...........next_| 000042a0 74 72 61 6e 73 6d 69 74 5f 74 61 67 0d 02 eb 16 |transmit_tag....| 000042b0 74 72 61 6e 73 6d 69 74 5f 63 6f 75 6e 74 25 2b |transmit_count%+| 000042c0 3d 31 0d 02 ec 14 3d 74 72 61 6e 73 6d 69 74 5f |=1....=transmit_| 000042d0 63 6f 75 6e 74 25 0d 02 ed 04 0d 02 ee 04 0d 02 |count%..........| 000042e0 ef 2b dd f2 73 65 6e 64 5f 64 61 74 61 28 74 6f |.+..send_data(to| 000042f0 6b 65 6e 25 2c 62 75 66 66 65 72 25 2c 62 75 66 |ken%,buffer%,buf| 00004300 66 65 72 73 69 7a 65 25 29 0d 02 f0 0e ea 20 73 |fersize%)..... s| 00004310 69 7a 65 25 2c 69 25 0d 02 f1 04 0d 02 f2 43 e7 |ize%,i%.......C.| 00004320 ac 74 72 61 6e 73 6d 69 74 25 20 84 20 28 74 6f |.transmit% . (to| 00004330 6b 65 6e 25 3c 3e 74 72 61 6e 73 6d 69 74 5f 74 |ken%<>transmit_t| 00004340 61 67 25 29 20 85 20 74 61 73 6b 5f 6f 6b 25 2c |ag%) . task_ok%,| 00004350 20 a4 6d 73 67 5f 30 28 22 4f 4b 33 22 29 0d 02 | .msg_0("OK3")..| 00004360 f3 25 73 69 7a 65 25 3d 74 72 61 6e 73 6d 69 74 |.%size%=transmit| 00004370 5f 74 6f 70 25 2d 74 72 61 6e 73 6d 69 74 5f 70 |_top%-transmit_p| 00004380 74 72 25 0d 02 f4 2d e7 20 73 69 7a 65 25 3c 62 |tr%...-. size%<b| 00004390 75 66 66 65 72 73 69 7a 65 25 20 84 20 73 69 7a |uffersize% . siz| 000043a0 65 25 3d 30 20 74 72 61 6e 73 6d 69 74 25 3d a3 |e%=0 transmit%=.| 000043b0 0d 02 f5 28 e7 20 73 69 7a 65 25 3e 62 75 66 66 |...(. size%>buff| 000043c0 65 72 73 69 7a 65 25 20 73 69 7a 65 3d 62 75 66 |ersize% size=buf| 000043d0 66 65 72 73 69 7a 65 25 0d 02 f6 35 3f 28 74 72 |fersize%...5?(tr| 000043e0 61 6e 73 6d 69 74 5f 70 74 72 25 2b 74 72 61 6e |ansmit_ptr%+tran| 000043f0 73 6d 69 74 5f 62 6c 6f 63 6b 25 2b 74 72 61 6e |smit_block%+tran| 00004400 73 6d 69 74 5f 73 69 7a 65 25 29 3d 30 0d 02 f7 |smit_size%)=0...| 00004410 51 c8 99 22 49 6d 70 75 6c 73 65 5f 54 72 61 6e |Q.."Impulse_Tran| 00004420 73 6d 69 74 44 61 74 61 22 2c 74 72 61 6e 73 6d |smitData",transm| 00004430 69 74 5f 70 74 72 25 2b 74 72 61 6e 73 6d 69 74 |it_ptr%+transmit| 00004440 5f 62 6c 6f 63 6b 25 2c 73 69 7a 65 25 2c 2c 2c |_block%,size%,,,| 00004450 2c 2c 74 61 73 6b 5f 68 61 6e 64 6c 65 25 0d 02 |,,task_handle%..| 00004460 f8 18 74 72 61 6e 73 6d 69 74 5f 70 74 72 25 2b |..transmit_ptr%+| 00004470 3d 73 69 7a 65 25 0d 02 f9 05 e1 0d 02 fa 04 0d |=size%..........| 00004480 02 fb 04 0d 02 fc 14 dd 20 f2 72 65 70 6c 79 28 |........ .reply(| 00004490 74 6f 6b 65 6e 25 29 0d 02 fd 0f c8 8e 20 74 6f |token%)...... to| 000044a0 6b 65 6e 25 20 ca 0d 02 fe 1e 20 20 c9 20 54 5f |ken% ..... . T_| 000044b0 50 72 69 6e 74 25 3a 20 f2 72 65 70 6c 79 5f 70 |Print%: .reply_p| 000044c0 72 69 6e 74 0d 02 ff 1d 20 20 c9 20 54 5f 4d 65 |rint.... . T_Me| 000044d0 72 67 65 25 3a 20 f2 6d 65 72 67 65 5f 64 6f 6e |rge%: .merge_don| 000044e0 65 0d 03 00 05 cb 0d 03 01 05 e1 0d 03 02 04 0d |e...............| 000044f0 03 03 04 0d 03 04 11 dd 20 f2 6d 65 72 67 65 5f |........ .merge_| 00004500 64 6f 6e 65 0d 03 05 12 e7 72 65 63 5f 64 6f 6e |done.....rec_don| 00004510 65 25 3d 30 20 8c 0d 03 06 17 20 20 e7 66 69 65 |e%=0 ..... .fie| 00004520 6c 64 5f 63 6f 75 6e 74 25 3d 30 20 8c 0d 03 07 |ld_count%=0 ....| 00004530 1b 20 20 20 20 f2 73 65 6e 64 28 22 45 64 69 74 |. .send("Edit| 00004540 20 4f 6e 22 2c 2d 31 29 0d 03 08 32 20 20 20 20 | On",-1)...2 | 00004550 63 73 76 5f 66 69 6c 65 5f 70 74 72 25 3d 70 72 |csv_file_ptr%=pr| 00004560 65 73 65 72 76 65 64 5f 73 74 61 72 74 5f 6f 66 |eserved_start_of| 00004570 5f 64 61 74 61 5f 70 74 72 25 0d 03 09 10 20 20 |_data_ptr%.... | 00004580 20 20 6d 65 72 67 65 25 3d a3 0d 03 0a 21 20 20 | merge%=....! | 00004590 20 20 85 20 74 61 73 6b 5f 6f 6b 25 2c 20 a4 6d | . task_ok%, .m| 000045a0 73 67 5f 30 28 22 4f 4b 37 22 29 0d 03 0b 07 20 |sg_0("OK7").... | 000045b0 20 cd 0d 03 0c 30 20 20 f2 69 63 6f 6e 5f 77 72 | ....0 .icon_wr| 000045c0 69 74 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 54 |ite(main%,Icon_T| 000045d0 6f 47 6f 25 2c c3 28 72 65 63 5f 74 6f 67 6f 25 |oGo%,.(rec_togo%| 000045e0 29 29 0d 03 0d 27 20 20 f2 69 63 6f 6e 5f 77 72 |))...' .icon_wr| 000045f0 69 74 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 44 |ite(main%,Icon_D| 00004600 6f 6e 65 25 2c 22 31 22 29 0d 03 0e 26 20 20 f2 |one%,"1")...& .| 00004610 69 63 6f 6e 5f 75 6e 68 69 64 65 28 6d 61 69 6e |icon_unhide(main| 00004620 25 2c 49 63 6f 6e 5f 54 6f 50 72 6f 63 25 29 0d |%,Icon_ToProc%).| 00004630 03 0f 28 20 20 f2 69 63 6f 6e 5f 75 6e 68 69 64 |..( .icon_unhid| 00004640 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 52 65 63 |e(main%,Icon_Rec| 00004650 73 50 72 6f 63 25 29 0d 03 10 28 20 20 f2 69 63 |sProc%)...( .ic| 00004660 6f 6e 5f 75 6e 68 69 64 65 28 6d 61 69 6e 25 2c |on_unhide(main%,| 00004670 49 63 6f 6e 5f 50 72 69 6e 74 41 6c 6c 25 29 0d |Icon_PrintAll%).| 00004680 03 11 24 20 20 f2 69 63 6f 6e 5f 75 6e 68 69 64 |..$ .icon_unhid| 00004690 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 54 6f 47 |e(main%,Icon_ToG| 000046a0 6f 25 29 0d 03 12 24 20 20 f2 69 63 6f 6e 5f 75 |o%)...$ .icon_u| 000046b0 6e 68 69 64 65 28 6d 61 69 6e 25 2c 49 63 6f 6e |nhide(main%,Icon| 000046c0 5f 44 6f 6e 65 25 29 0d 03 13 25 20 20 f2 69 63 |_Done%)...% .ic| 000046d0 6f 6e 5f 75 6e 68 69 64 65 28 6d 61 69 6e 25 2c |on_unhide(main%,| 000046e0 49 63 6f 6e 5f 50 72 69 6e 74 25 29 0d 03 14 24 |Icon_Print%)...$| 000046f0 20 20 f2 69 63 6f 6e 5f 75 6e 68 69 64 65 28 6d | .icon_unhide(m| 00004700 61 69 6e 25 2c 49 63 6f 6e 5f 4e 65 78 74 25 29 |ain%,Icon_Next%)| 00004710 0d 03 15 24 20 20 f2 69 63 6f 6e 5f 75 6e 68 69 |...$ .icon_unhi| 00004720 64 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 45 64 |de(main%,Icon_Ed| 00004730 69 74 25 29 0d 03 16 26 20 20 f2 69 63 6f 6e 5f |it%)...& .icon_| 00004740 68 69 64 65 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f |hide(main%,Icon_| 00004750 48 65 61 64 69 6e 67 73 25 29 0d 03 17 26 20 20 |Headings%)...& | 00004760 f2 69 63 6f 6e 5f 68 69 64 65 28 6d 61 69 6e 25 |.icon_hide(main%| 00004770 2c 49 63 6f 6e 5f 44 69 73 70 48 65 61 64 25 29 |,Icon_DispHead%)| 00004780 0d 03 18 28 20 20 f2 69 63 6f 6e 5f 68 69 64 65 |...( .icon_hide| 00004790 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 53 74 61 72 |(main%,Icon_Star| 000047a0 74 4d 65 72 67 65 25 29 0d 03 19 39 20 20 21 77 |tMerge%)...9 !w| 000047b0 69 6e 5f 62 75 66 66 25 3d 6d 61 69 6e 25 3a c8 |in_buff%=main%:.| 000047c0 99 22 57 69 6d 70 5f 47 65 74 57 69 6e 64 6f 77 |."Wimp_GetWindow| 000047d0 53 74 61 74 65 22 2c 2c 77 69 6e 5f 62 75 66 66 |State",,win_buff| 000047e0 25 0d 03 1a 2c 20 20 77 69 6e 5f 62 75 66 66 25 |%..., win_buff%| 000047f0 21 38 3d 77 69 6e 5f 62 75 66 66 25 21 31 36 20 |!8=win_buff%!16 | 00004800 2d 20 57 69 6e 64 6f 77 5f 42 69 67 25 0d 03 1b |- Window_Big%...| 00004810 24 20 20 c8 99 22 57 69 6d 70 5f 4f 70 65 6e 57 |$ .."Wimp_OpenW| 00004820 69 6e 64 6f 77 22 2c 2c 77 69 6e 5f 62 75 66 66 |indow",,win_buff| 00004830 25 0d 03 1c 05 cd 0d 03 1d 10 f2 64 6f 6e 65 5f |%..........done_| 00004840 72 65 63 6f 72 64 0d 03 1e 1b f2 65 6e 61 62 6c |record.....enabl| 00004850 65 5f 6d 65 72 67 69 6e 67 5f 62 75 74 74 6f 6e |e_merging_button| 00004860 73 0d 03 1f 12 f2 68 6f 75 72 67 6c 61 73 73 5f |s.....hourglass_| 00004870 6f 66 66 0d 03 20 05 e1 0d 03 21 04 0d 03 22 04 |off.. ....!...".| 00004880 0d 03 23 11 dd f2 64 6f 6e 65 5f 72 65 63 6f 72 |..#...done_recor| 00004890 64 0d 03 24 10 72 65 63 5f 74 6f 67 6f 25 2d 3d |d..$.rec_togo%-=| 000048a0 31 0d 03 25 10 72 65 63 5f 64 6f 6e 65 25 2b 3d |1..%.rec_done%+=| 000048b0 31 0d 03 26 2e f2 69 63 6f 6e 5f 77 72 69 74 65 |1..&..icon_write| 000048c0 28 6d 61 69 6e 25 2c 49 63 6f 6e 5f 54 6f 47 6f |(main%,Icon_ToGo| 000048d0 25 2c c3 28 72 65 63 5f 74 6f 67 6f 25 29 29 0d |%,.(rec_togo%)).| 000048e0 03 27 2e f2 69 63 6f 6e 5f 77 72 69 74 65 28 6d |.'..icon_write(m| 000048f0 61 69 6e 25 2c 49 63 6f 6e 5f 44 6f 6e 65 25 2c |ain%,Icon_Done%,| 00004900 c3 28 72 65 63 5f 64 6f 6e 65 25 29 29 0d 03 28 |.(rec_done%))..(| 00004910 05 e1 0d 03 29 04 0d 03 2a 04 0d 03 2b 11 dd f2 |....)...*...+...| 00004920 72 65 70 6c 79 5f 70 72 69 6e 74 0d 03 2c 0e ea |reply_print..,..| 00004930 20 63 6f 6d 6d 61 6e 64 24 0d 03 2d 28 20 20 63 | command$..-( c| 00004940 6f 6d 6d 61 6e 64 24 3d a4 74 61 73 6b 5f 72 74 |ommand$=.task_rt| 00004950 6f 7a 28 74 61 73 6b 5f 62 75 66 66 25 2b 33 36 |oz(task_buff%+36| 00004960 29 0d 03 2e 13 20 20 c8 8e 20 63 6f 6d 6d 61 6e |).... .. comman| 00004970 64 24 20 ca 0d 03 2f 23 20 20 20 20 c9 20 22 50 |d$ .../# . "P| 00004980 72 69 6e 74 44 6f 6e 65 22 20 3a 20 f2 70 72 69 |rintDone" : .pri| 00004990 6e 74 5f 64 6f 6e 65 0d 03 30 24 20 20 20 20 c9 |nt_done..0$ .| 000049a0 20 22 50 72 69 6e 74 45 72 72 6f 72 22 3a 20 f2 | "PrintError": .| 000049b0 70 72 69 6e 74 5f 65 72 72 6f 72 0d 03 31 07 20 |print_error..1. | 000049c0 20 cb 0d 03 32 05 e1 0d 03 33 04 0d 03 34 04 0d | ...2....3...4..| 000049d0 03 35 11 dd f2 70 72 69 6e 74 5f 65 72 72 6f 72 |.5...print_error| 000049e0 0d 03 36 45 f4 20 4e 6f 20 70 72 69 6e 74 65 72 |..6E. No printer| 000049f0 20 64 72 69 76 65 72 20 77 61 73 20 6c 6f 61 64 | driver was load| 00004a00 65 64 20 69 66 20 77 65 20 67 65 74 20 68 65 72 |ed if we get her| 00004a10 65 2e 20 20 49 66 20 77 65 20 61 72 65 20 64 6f |e. If we are do| 00004a20 69 6e 67 20 61 0d 03 37 3c f4 20 70 72 69 6e 74 |ing a..7<. print| 00004a30 20 61 6c 6c 20 72 65 63 6f 72 64 73 2c 20 74 68 | all records, th| 00004a40 65 6e 20 77 65 20 73 68 6f 75 6c 64 20 73 74 6f |en we should sto| 00004a50 70 20 74 68 65 20 70 72 69 6e 74 20 68 65 72 65 |p the print here| 00004a60 2e 0d 03 38 11 20 20 70 72 69 6e 74 69 6e 67 25 |...8. printing%| 00004a70 3d a3 0d 03 39 16 20 20 67 6f 74 70 72 69 6e 74 |=...9. gotprint| 00004a80 72 65 70 6c 79 25 3d a3 0d 03 3a 04 0d 03 3b 24 |reply%=...:...;$| 00004a90 20 20 24 28 65 72 72 6f 72 5f 62 75 66 66 25 2b | $(error_buff%+| 00004aa0 34 29 3d a4 6d 73 67 5f 30 28 22 4f 4b 39 22 29 |4)=.msg_0("OK9")| 00004ab0 0d 03 3c 4b 20 20 c8 99 20 22 57 69 6d 70 5f 52 |..<K .. "Wimp_R| 00004ac0 65 70 6f 72 74 45 72 72 6f 72 22 2c 20 65 72 72 |eportError", err| 00004ad0 6f 72 5f 62 75 66 66 25 2c 20 25 31 30 30 30 31 |or_buff%, %10001| 00004ae0 2c 20 a4 6d 73 67 5f 31 28 22 4d 53 22 2c a4 6d |, .msg_1("MS",.m| 00004af0 73 67 5f 30 28 22 49 44 22 29 29 0d 03 3d 04 0d |sg_0("ID"))..=..| 00004b00 03 3e 26 20 20 e7 70 65 6e 64 69 6e 67 5f 63 6c |.>& .pending_cl| 00004b10 6f 73 65 25 20 8c 20 f2 68 6f 73 74 5f 73 68 75 |ose% . .host_shu| 00004b20 74 64 6f 77 6e 0d 03 3f 1d 20 20 f2 65 6e 61 62 |tdown..?. .enab| 00004b30 6c 65 5f 6d 65 72 67 69 6e 67 5f 62 75 74 74 6f |le_merging_butto| 00004b40 6e 73 0d 03 40 29 20 20 f2 69 63 6f 6e 5f 75 6e |ns..@) .icon_un| 00004b50 68 69 64 65 28 6d 61 69 6e 25 2c 20 49 63 6f 6e |hide(main%, Icon| 00004b60 5f 50 72 69 6e 74 41 6c 6c 25 29 0d 03 41 04 0d |_PrintAll%)..A..| 00004b70 03 42 05 e1 0d 03 43 04 0d 03 44 04 0d 03 45 10 |.B....C...D...E.| 00004b80 dd f2 70 72 69 6e 74 5f 64 6f 6e 65 0d 03 46 22 |..print_done..F"| 00004b90 f4 20 50 72 69 6e 74 20 77 65 6e 74 20 4f 4b 20 |. Print went OK | 00004ba0 69 66 20 77 65 20 67 65 74 20 68 65 72 65 0d 03 |if we get here..| 00004bb0 47 0f 70 72 69 6e 74 69 6e 67 25 3d a3 0d 03 48 |G.printing%=...H| 00004bc0 15 e7 70 65 6e 64 69 6e 67 5f 63 6c 6f 73 65 25 |..pending_close%| 00004bd0 20 8c 0d 03 49 1a 20 20 20 20 20 20 20 20 f2 68 | ...I. .h| 00004be0 6f 73 74 5f 73 68 75 74 64 6f 77 6e 0d 03 4a 05 |ost_shutdown..J.| 00004bf0 cc 0d 03 4b 2e 20 20 20 20 20 20 20 20 e7 a4 69 |...K. ..i| 00004c00 63 6f 6e 5f 73 65 74 28 6d 61 69 6e 25 2c 49 63 |con_set(main%,Ic| 00004c10 6f 6e 5f 50 72 69 6e 74 41 6c 6c 25 29 20 8c 0d |on_PrintAll%) ..| 00004c20 03 4c 25 20 20 20 20 20 20 20 20 20 20 20 20 20 |.L% | 00004c30 20 20 20 f4 20 50 52 4f 43 64 6f 6e 65 5f 72 65 | . PROCdone_re| 00004c40 63 6f 72 64 0d 03 4d 26 20 20 20 20 20 20 20 20 |cord..M& | 00004c50 20 20 20 20 20 20 20 20 f2 6d 65 72 67 65 5f 6e | .merge_n| 00004c60 65 78 74 5f 72 65 63 6f 72 64 0d 03 4e 04 0d 03 |ext_record..N...| 00004c70 4f 26 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |O& | 00004c80 20 20 f4 20 21 21 21 21 21 21 21 21 21 21 21 21 | . !!!!!!!!!!!!| 00004c90 21 21 21 21 0d 03 50 2e 20 20 20 20 20 20 20 20 |!!!!..P. | 00004ca0 20 20 20 20 20 20 20 20 f4 20 4e 6f 77 20 64 6f | . Now do| 00004cb0 6e 65 20 61 66 74 65 72 20 77 69 6d 70 5f 70 6f |ne after wimp_po| 00004cc0 6c 6c 0d 03 51 31 20 20 20 20 20 20 20 20 20 20 |ll..Q1 | 00004cd0 20 20 20 20 20 20 f4 20 20 50 52 4f 43 73 65 6e | . PROCsen| 00004ce0 64 28 22 50 72 69 6e 74 22 2c 54 5f 50 72 69 6e |d("Print",T_Prin| 00004cf0 74 25 29 0d 03 52 0c 20 20 20 20 20 20 20 20 0d |t%)..R. .| 00004d00 03 53 2d 20 20 20 20 20 20 20 20 20 20 20 20 20 |.S- | 00004d10 20 20 20 f4 20 53 65 74 20 72 65 70 6c 79 20 76 | . Set reply v| 00004d20 61 72 69 61 62 6c 65 20 54 52 55 45 0d 03 54 24 |ariable TRUE..T$| 00004d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004d40 67 6f 74 70 72 69 6e 74 72 65 70 6c 79 25 3d b9 |gotprintreply%=.| 00004d50 0d 03 55 26 20 20 20 20 20 20 20 20 20 20 20 20 |..U& | 00004d60 20 20 20 20 f4 20 21 21 21 21 21 21 21 21 21 21 | . !!!!!!!!!!| 00004d70 21 21 21 21 21 21 0d 03 56 04 0d 03 57 1f 20 20 |!!!!!!..V...W. | 00004d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 | pr| 00004d90 69 6e 74 69 6e 67 25 3d b9 0d 03 58 0d 20 20 20 |inting%=...X. | 00004da0 20 20 20 20 20 cc 0d 03 59 2b 20 20 20 20 20 20 | ...Y+ | 00004db0 20 20 20 20 20 20 20 20 20 20 f2 65 6e 61 62 6c | .enabl| 00004dc0 65 5f 6d 65 72 67 69 6e 67 5f 62 75 74 74 6f 6e |e_merging_button| 00004dd0 73 0d 03 5a 0d 20 20 20 20 20 20 20 20 cd 0d 03 |s..Z. ...| 00004de0 5b 05 cd 0d 03 5c 05 e1 0d 03 5d 04 0d 03 5e 13 |[....\....]...^.| 00004df0 f4 20 45 72 72 6f 72 20 6c 69 62 72 61 72 79 0d |. Error library.| 00004e00 03 5f 04 0d 03 60 16 dd f2 65 72 72 6f 72 5f 69 |._...`...error_i| 00004e10 6e 69 74 69 61 6c 69 73 65 0d 03 61 15 de 20 65 |nitialise..a.. e| 00004e20 72 72 6f 72 5f 62 75 66 66 25 20 32 35 36 0d 03 |rror_buff% 256..| 00004e30 62 05 e1 0d 03 63 04 0d 03 64 0b dd f2 65 72 72 |b....c...d...err| 00004e40 6f 72 0d 03 65 0b ea 20 72 24 2c 72 25 0d 03 66 |or..e.. r$,r%..f| 00004e50 09 72 24 3d f6 24 0d 03 67 21 e7 9f 3d 74 61 73 |.r$=.$..g!..=tas| 00004e60 6b 5f 6f 6b 25 20 84 20 9f 3d 74 61 73 6b 5f 66 |k_ok% . .=task_f| 00004e70 61 74 61 6c 25 20 8c 0d 03 68 1f 20 72 25 3d a7 |atal% ...h. r%=.| 00004e80 72 24 2c 22 69 6e 20 22 2b bd 43 68 61 72 5f 51 |r$,"in "+.Char_Q| 00004e90 75 6f 74 65 25 29 0d 03 69 18 20 e7 72 25 3c 3e |uote%)..i. .r%<>| 00004ea0 30 20 72 24 3d c0 72 24 2c 72 25 2d 31 29 0d 03 |0 r$=.r$,r%-1)..| 00004eb0 6a 05 cd 0d 03 6b 0a c8 8e 20 9f 20 ca 0d 03 6c |j....k... . ...l| 00004ec0 23 c9 20 20 20 20 74 61 73 6b 5f 6f 6b 25 3a 20 |#. task_ok%: | 00004ed0 f2 65 72 72 6f 72 5f 62 6f 78 28 72 24 2c 31 29 |.error_box(r$,1)| 00004ee0 0d 03 6d 23 c9 20 74 61 73 6b 5f 66 61 74 61 6c |..m#. task_fatal| 00004ef0 25 3a 20 f2 65 72 72 6f 72 5f 62 6f 78 28 72 24 |%: .error_box(r$| 00004f00 2c 32 29 0d 03 6e 4c 20 20 20 20 20 20 20 7f 3a |,2)..nL .:| 00004f10 20 f2 65 72 72 6f 72 5f 62 6f 78 28 22 55 6e 65 | .error_box("Une| 00004f20 78 70 65 63 74 65 64 20 65 72 72 6f 72 20 3a 2d |xpected error :-| 00004f30 20 22 2b 72 24 2b 22 20 28 22 2b c3 28 9f 29 2b | "+r$+" ("+.(.)+| 00004f40 22 2f 22 2b c3 28 9e 29 2b 22 29 22 2c 33 29 0d |"/"+.(.)+")",3).| 00004f50 03 6f 05 cb 0d 03 70 05 e1 0d 03 71 04 0d 03 72 |.o....p....q...r| 00004f60 1f dd f2 65 72 72 6f 72 5f 62 6f 78 28 72 24 2c |...error_box(r$,| 00004f70 65 72 72 6f 72 5f 66 6c 61 67 25 29 0d 03 73 08 |error_flag%)..s.| 00004f80 ea 20 72 25 0d 03 74 1b c8 99 22 57 69 6d 70 5f |. r%..t..."Wimp_| 00004f90 43 72 65 61 74 65 4d 65 6e 75 22 2c 2c 2d 31 0d |CreateMenu",,-1.| 00004fa0 03 75 29 21 65 72 72 6f 72 5f 62 75 66 66 25 3d |.u)!error_buff%=| 00004fb0 9f 3a 24 28 65 72 72 6f 72 5f 62 75 66 66 25 2b |.:$(error_buff%+| 00004fc0 34 29 3d 72 24 2b bd 30 0d 03 76 3f c8 99 22 57 |4)=r$+.0..v?.."W| 00004fd0 69 6d 70 5f 52 65 70 6f 72 74 45 72 72 6f 72 22 |imp_ReportError"| 00004fe0 2c 65 72 72 6f 72 5f 62 75 66 66 25 2c 65 72 72 |,error_buff%,err| 00004ff0 6f 72 5f 66 6c 61 67 25 2c 74 61 73 6b 5f 69 64 |or_flag%,task_id| 00005000 24 20 b8 20 2c 72 25 0d 03 77 20 e7 72 25 3d 32 |$ . ,r%..w .r%=2| 00005010 20 ee 20 85 20 87 3a f2 68 6f 73 74 5f 73 68 75 | . . .:.host_shu| 00005020 74 64 6f 77 6e 3a e0 0d 03 78 05 e1 0d 03 79 05 |tdown:...x....y.| 00005030 3a 0d 03 7a 12 f4 20 48 65 61 70 20 6c 69 62 72 |:..z.. Heap libr| 00005040 61 72 79 0d 03 7b 05 3a 0d 03 7c 1e dd f2 68 65 |ary..{.:..|...he| 00005050 61 70 5f 66 72 65 65 28 69 64 65 6e 74 24 2c 62 |ap_free(ident$,b| 00005060 6c 6f 63 6b 25 29 0d 03 7d 0c ea 20 72 30 25 2c |lock%)..}.. r0%,| 00005070 66 25 0d 03 7e 10 e7 62 6c 6f 63 6b 25 3c 3e 30 |f%..~..block%<>0| 00005080 20 8c 0d 03 7f 0e 20 62 6c 6f 63 6b 25 2d 3d 34 | ..... block%-=4| 00005090 0d 03 80 45 20 f4 20 50 52 4f 43 74 72 61 63 65 |...E . PROCtrace| 000050a0 5f 30 28 22 22 2c 22 50 52 4f 43 68 65 61 70 5f |_0("","PROCheap_| 000050b0 66 72 65 65 28 22 2b 69 64 65 6e 74 24 2b 22 2c |free("+ident$+",| 000050c0 26 22 2b 53 54 52 24 7e 28 62 6c 6f 63 6b 25 29 |&"+STR$~(block%)| 000050d0 2b 22 29 22 29 0d 03 81 56 20 e7 21 62 6c 6f 63 |+")")...V .!bloc| 000050e0 6b 25 3c 3e a4 68 65 61 70 5f 69 64 65 6e 74 5f |k%<>.heap_ident_| 000050f0 6e 75 6d 28 69 64 65 6e 74 24 29 20 85 20 74 61 |num(ident$) . ta| 00005100 73 6b 5f 6f 6b 25 2c 22 43 6f 72 72 75 70 74 20 |sk_ok%,"Corrupt | 00005110 22 2b 69 64 65 6e 74 24 2b 22 20 62 6c 6f 63 6b |"+ident$+" block| 00005120 20 6e 6f 74 20 66 72 65 65 64 22 0d 03 82 2f 20 | not freed".../ | 00005130 c8 99 22 58 4f 53 5f 48 65 61 70 22 2c 33 2c 68 |.."XOS_Heap",3,h| 00005140 65 61 70 5f 73 74 61 72 74 25 2c 62 6c 6f 63 6b |eap_start%,block| 00005150 25 20 b8 20 72 30 25 3b 66 25 0d 03 83 43 20 e7 |% . r0%;f%...C .| 00005160 28 66 25 20 80 20 31 29 20 85 20 74 61 73 6b 5f |(f% . 1) . task_| 00005170 66 61 74 61 6c 25 2c 22 42 6c 6f 63 6b 20 22 2b |fatal%,"Block "+| 00005180 69 64 65 6e 74 24 2b 22 3a 20 22 2b a4 74 61 73 |ident$+": "+.tas| 00005190 6b 5f 72 74 6f 7a 28 72 30 25 2b 34 29 0d 03 84 |k_rtoz(r0%+4)...| 000051a0 05 cd 0d 03 85 05 e1 0d 03 86 05 3a 0d 03 87 1e |...........:....| 000051b0 dd a4 68 65 61 70 5f 63 6c 61 69 6d 28 69 64 65 |..heap_claim(ide| 000051c0 6e 74 24 2c 73 69 7a 65 25 29 0d 03 88 08 ea 20 |nt$,size%)..... | 000051d0 70 25 0d 03 89 37 f4 20 6e 65 65 64 20 74 6f 20 |p%...7. need to | 000051e0 61 64 64 20 34 20 65 78 74 72 61 20 62 79 74 65 |add 4 extra byte| 000051f0 73 20 27 63 6f 73 20 69 66 20 74 68 65 20 62 6c |s 'cos if the bl| 00005200 6f 63 6b 20 6e 65 65 64 73 0d 03 8a 34 f4 20 65 |ock needs...4. e| 00005210 78 74 65 6e 64 69 6e 67 20 74 68 65 6e 20 74 68 |xtending then th| 00005220 65 20 66 69 72 73 74 20 77 6f 72 64 20 67 65 74 |e first word get| 00005230 73 20 74 72 61 6d 70 6c 65 64 20 6f 6e 0d 03 8b |s trampled on...| 00005240 0c 73 69 7a 65 25 2b 3d 34 0d 03 8c 2e c8 95 20 |.size%+=4...... | 00005250 73 69 7a 65 25 3e 3d a4 68 65 61 70 5f 66 72 65 |size%>=.heap_fre| 00005260 65 73 70 61 63 65 20 f2 68 65 61 70 5f 69 6e 63 |espace .heap_inc| 00005270 72 65 61 73 65 3a ce 0d 03 8d 29 f4 20 63 6c 61 |rease:....). cla| 00005280 69 6d 20 74 68 65 20 62 6c 6f 63 6b 20 61 6e 64 |im the block and| 00005290 20 73 74 6f 72 65 20 74 68 65 20 69 64 65 6e 74 | store the ident| 000052a0 0d 03 8e 2b c8 99 22 4f 53 5f 48 65 61 70 22 2c |...+.."OS_Heap",| 000052b0 32 2c 68 65 61 70 5f 73 74 61 72 74 25 2c 2c 73 |2,heap_start%,,s| 000052c0 69 7a 65 25 20 b8 20 2c 2c 70 25 0d 03 8f 1f 21 |ize% . ,,p%....!| 000052d0 70 25 3d a4 68 65 61 70 5f 69 64 65 6e 74 5f 6e |p%=.heap_ident_n| 000052e0 75 6d 28 69 64 65 6e 74 24 29 0d 03 90 09 70 25 |um(ident$)....p%| 000052f0 2b 3d 34 0d 03 91 07 3d 70 25 0d 03 92 05 3a 0d |+=4....=p%....:.| 00005300 03 93 13 dd f2 68 65 61 70 5f 69 6e 63 72 65 61 |.....heap_increa| 00005310 73 65 0d 03 94 0b ea 20 73 6c 6f 74 25 0d 03 95 |se..... slot%...| 00005320 23 c8 99 22 57 69 6d 70 5f 53 6c 6f 74 53 69 7a |#.."Wimp_SlotSiz| 00005330 65 22 2c 2d 31 2c 2d 31 20 b8 20 73 6c 6f 74 25 |e",-1,-1 . slot%| 00005340 0d 03 96 2a c8 99 22 57 69 6d 70 5f 53 6c 6f 74 |...*.."Wimp_Slot| 00005350 53 69 7a 65 22 2c 73 6c 6f 74 25 2b 68 65 61 70 |Size",slot%+heap| 00005360 5f 70 73 69 7a 65 25 2c 2d 31 0d 03 97 13 e7 68 |_psize%,-1.....h| 00005370 65 61 70 5f 73 69 7a 65 25 3d 30 20 8c 0d 03 98 |eap_size%=0 ....| 00005380 2b 20 c8 99 22 4f 53 5f 48 65 61 70 22 2c 30 2c |+ .."OS_Heap",0,| 00005390 68 65 61 70 5f 73 74 61 72 74 25 2c 2c 68 65 61 |heap_start%,,hea| 000053a0 70 5f 70 73 69 7a 65 25 0d 03 99 05 cc 0d 03 9a |p_psize%........| 000053b0 2b 20 c8 99 22 4f 53 5f 48 65 61 70 22 2c 35 2c |+ .."OS_Heap",5,| 000053c0 68 65 61 70 5f 73 74 61 72 74 25 2c 2c 68 65 61 |heap_start%,,hea| 000053d0 70 5f 70 73 69 7a 65 25 0d 03 9b 05 cd 0d 03 9c |p_psize%........| 000053e0 1b 68 65 61 70 5f 73 69 7a 65 25 2b 3d 68 65 61 |.heap_size%+=hea| 000053f0 70 5f 70 73 69 7a 65 25 0d 03 9d 05 e1 0d 03 9e |p_psize%........| 00005400 05 3a 0d 03 9f 18 dd a4 68 65 61 70 5f 69 64 65 |.:......heap_ide| 00005410 6e 74 5f 6e 75 6d 28 76 24 29 0d 03 a0 0b ea 20 |nt_num(v$)..... | 00005420 69 25 2c 6a 25 0d 03 a1 0d e3 69 25 3d 30 20 b8 |i%,j%.....i%=0 .| 00005430 20 33 0d 03 a2 23 20 6a 25 3d 6a 25 20 84 20 97 | 3...# j%=j% . .| 00005440 28 c1 76 24 2c 69 25 2b 31 2c 31 29 29 3c 3c 28 |(.v$,i%+1,1))<<(| 00005450 69 25 2a 38 29 0d 03 a3 05 ed 0d 03 a4 07 3d 6a |i%*8).........=j| 00005460 25 0d 03 a5 05 3a 0d 03 a6 14 dd a4 68 65 61 70 |%....:......heap| 00005470 5f 66 72 65 65 73 70 61 63 65 0d 03 a7 08 ea 20 |_freespace..... | 00005480 66 25 0d 03 a8 16 e7 68 65 61 70 5f 73 69 7a 65 |f%.....heap_size| 00005490 25 3d 30 20 8c 20 3d 30 0d 03 a9 24 c8 99 22 4f |%=0 . =0...$.."O| 000054a0 53 5f 48 65 61 70 22 2c 31 2c 68 65 61 70 5f 73 |S_Heap",1,heap_s| 000054b0 74 61 72 74 25 20 b8 20 2c 2c 66 25 0d 03 aa 07 |tart% . ,,f%....| 000054c0 3d 66 25 0d 03 ab 05 3a 0d 03 ac 14 f4 20 57 69 |=f%....:..... Wi| 000054d0 6e 64 6f 77 20 6c 69 62 72 61 72 79 0d 03 ad 05 |ndow library....| 000054e0 3a 0d 03 ae 14 dd f2 77 69 6e 5f 69 6e 69 74 69 |:......win_initi| 000054f0 61 6c 69 73 65 0d 03 af 14 de 20 77 69 6e 5f 62 |alise..... win_b| 00005500 75 66 66 25 20 32 30 34 38 0d 03 b0 14 77 69 6e |uff% 2048....win| 00005510 5f 74 65 6d 70 6c 61 74 65 24 3d 22 22 0d 03 b1 |_template$=""...| 00005520 05 e1 0d 03 b2 05 3a 0d 03 b3 33 dd f2 77 69 6e |......:...3..win| 00005530 5f 6c 6f 61 64 5f 63 72 65 61 74 65 28 66 24 2c |_load_create(f$,| 00005540 6e 24 2c 73 70 72 69 74 65 5f 70 6f 6f 6c 25 2c |n$,sprite_pool%,| 00005550 f8 20 68 61 6e 64 6c 65 25 29 0d 03 b4 23 f2 77 |. handle%)...#.w| 00005560 69 6e 5f 6c 6f 61 64 28 66 24 2c 6e 24 2c 77 69 |in_load(f$,n$,wi| 00005570 6e 5f 62 75 66 66 25 2c 32 30 34 38 29 0d 03 b5 |n_buff%,2048)...| 00005580 1d 77 69 6e 5f 62 75 66 66 25 21 36 34 3d 73 70 |.win_buff%!64=sp| 00005590 72 69 74 65 5f 70 6f 6f 6c 25 0d 03 b6 22 f2 77 |rite_pool%...".w| 000055a0 69 6e 5f 63 72 65 61 74 65 28 77 69 6e 5f 62 75 |in_create(win_bu| 000055b0 66 66 25 2c 68 61 6e 64 6c 65 25 29 0d 03 b7 05 |ff%,handle%)....| 000055c0 e1 0d 03 b8 05 3a 0d 03 b9 21 dd f2 77 69 6e 5f |.....:...!..win_| 000055d0 6c 6f 61 64 28 66 24 2c 6e 24 2c 62 75 66 25 2c |load(f$,n$,buf%,| 000055e0 6c 69 6d 69 74 25 29 0d 03 ba 26 f4 20 20 20 66 |limit%)...&. f| 000055f0 24 20 2d 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 |$ - filename of | 00005600 74 65 6d 70 6c 61 74 65 20 66 69 6c 65 0d 03 bb |template file...| 00005610 25 f4 20 20 20 6e 24 20 2d 20 6e 61 6d 65 20 6f |%. n$ - name o| 00005620 66 20 74 65 6d 70 6c 61 74 65 20 74 6f 20 6c 6f |f template to lo| 00005630 61 64 0d 03 bc 4e f4 20 62 75 66 25 20 2d 20 62 |ad...N. buf% - b| 00005640 75 66 66 65 72 20 77 68 69 63 68 20 6e 65 65 64 |uffer which need| 00005650 73 20 74 6f 20 62 65 20 62 69 67 20 65 6e 6f 75 |s to be big enou| 00005660 67 68 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 77 |gh to hold the w| 00005670 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e |indow definition| 00005680 0d 03 bd 4d f4 20 20 20 20 20 20 20 20 41 4e 44 |...M. AND| 00005690 20 74 68 65 20 69 6e 64 69 72 65 63 74 65 64 20 | the indirected | 000056a0 64 61 74 61 2c 20 64 75 65 20 74 6f 20 74 68 65 |data, due to the| 000056b0 20 77 61 79 20 57 69 6d 70 5f 4c 6f 61 64 54 65 | way Wimp_LoadTe| 000056c0 6d 70 6c 61 74 65 20 77 6f 72 6b 73 2e 0d 03 be |mplate works....| 000056d0 05 f4 0d 03 bf 41 f4 20 50 52 4f 43 77 69 6e 5f |.....A. PROCwin_| 000056e0 6c 6f 61 64 20 77 69 6c 6c 20 61 75 74 6f 6d 61 |load will automa| 000056f0 74 69 63 61 6c 6c 79 20 64 69 6d 65 6e 73 69 6f |tically dimensio| 00005700 6e 20 65 6e 6f 75 67 68 20 6d 65 6d 6f 72 79 20 |n enough memory | 00005710 66 6f 72 0d 03 c0 1a f4 20 74 68 65 20 69 6e 64 |for..... the ind| 00005720 69 72 65 63 74 65 64 20 64 61 74 61 2e 0d 03 c1 |irected data....| 00005730 0d ea 20 77 73 5f 62 75 66 25 0d 03 c2 0b ea 20 |.. ws_buf%..... | 00005740 73 69 7a 65 25 0d 03 c3 0b ea 20 64 61 74 61 25 |size%..... data%| 00005750 0d 03 c4 0c ea 20 66 6f 75 6e 64 25 0d 03 c5 0b |..... found%....| 00005760 ea 20 73 25 2c 66 25 0d 03 c6 0d e7 66 24 3c 3e |. s%,f%.....f$<>| 00005770 22 22 20 8c 0d 03 c7 22 20 f2 77 69 6e 5f 73 69 |"" ...." .win_si| 00005780 7a 65 73 28 66 24 2c 6e 24 2c 73 69 7a 65 25 2c |zes(f$,n$,size%,| 00005790 64 61 74 61 25 29 0d 03 c8 05 cc 0d 03 c9 2d 20 |data%)........- | 000057a0 f2 77 69 6e 5f 73 69 7a 65 73 28 77 69 6e 5f 74 |.win_sizes(win_t| 000057b0 65 6d 70 6c 61 74 65 24 2c 6e 24 2c 73 69 7a 65 |emplate$,n$,size| 000057c0 25 2c 64 61 74 61 25 29 0d 03 ca 05 cd 0d 03 cb |%,data%)........| 000057d0 76 e7 6c 69 6d 69 74 25 3c 28 73 69 7a 65 25 2b |v.limit%<(size%+| 000057e0 64 61 74 61 25 29 20 85 20 74 61 73 6b 5f 6f 6b |data%) . task_ok| 000057f0 25 2c 22 42 75 66 66 65 72 20 6e 6f 74 20 62 69 |%,"Buffer not bi| 00005800 67 20 65 6e 6f 75 67 68 20 66 6f 72 20 27 22 2b |g enough for '"+| 00005810 6e 24 2b 22 27 20 2d 20 22 2b c3 28 73 69 7a 65 |n$+"' - "+.(size| 00005820 25 29 2b 22 20 2b 20 22 2b c3 28 64 61 74 61 25 |%)+" + "+.(data%| 00005830 29 2b 22 20 62 79 74 65 73 20 72 65 71 75 69 72 |)+" bytes requir| 00005840 65 64 22 0d 03 cc 25 e7 66 24 3c 3e 22 22 20 c8 |ed"...%.f$<>"" .| 00005850 99 22 57 69 6d 70 5f 4f 70 65 6e 54 65 6d 70 6c |."Wimp_OpenTempl| 00005860 61 74 65 22 2c 2c 66 24 0d 03 cd 10 e7 20 64 61 |ate",,f$..... da| 00005870 74 61 25 3c 3e 30 20 8c 0d 03 ce 14 20 de 20 77 |ta%<>0 ..... . w| 00005880 73 5f 62 75 66 25 20 64 61 74 61 25 0d 03 cf 53 |s_buf% data%...S| 00005890 20 c8 99 22 58 57 69 6d 70 5f 4c 6f 61 64 54 65 | .."XWimp_LoadTe| 000058a0 6d 70 6c 61 74 65 22 2c 2c 62 75 66 25 2c 77 73 |mplate",,buf%,ws| 000058b0 5f 62 75 66 25 2c 77 73 5f 62 75 66 25 2b 64 61 |_buf%,ws_buf%+da| 000058c0 74 61 25 2c 2d 31 2c 6e 24 2c 30 20 b8 20 73 25 |ta%,-1,n$,0 . s%| 000058d0 2c 2c 2c 2c 2c 2c 66 6f 75 6e 64 25 3b 66 25 0d |,,,,,,found%;f%.| 000058e0 03 d0 05 cc 0d 03 d1 41 20 c8 99 22 58 57 69 6d |.......A .."XWim| 000058f0 70 5f 4c 6f 61 64 54 65 6d 70 6c 61 74 65 22 2c |p_LoadTemplate",| 00005900 2c 62 75 66 25 2c 30 2c 30 2c 2d 31 2c 6e 24 2c |,buf%,0,0,-1,n$,| 00005910 30 20 b8 20 73 25 2c 2c 2c 2c 2c 2c 66 6f 75 6e |0 . s%,,,,,,foun| 00005920 64 25 3b 66 25 0d 03 d2 05 cd 0d 03 d3 22 e7 66 |d%;f%........".f| 00005930 24 3c 3e 22 22 20 c8 99 22 57 69 6d 70 5f 43 6c |$<>"" .."Wimp_Cl| 00005940 6f 73 65 54 65 6d 70 6c 61 74 65 22 0d 03 d4 2f |oseTemplate".../| 00005950 e7 28 66 25 80 31 29 20 85 20 74 61 73 6b 5f 6f |.(f%.1) . task_o| 00005960 6b 25 2c 6e 24 2b 22 3a 20 22 2b a4 74 61 73 6b |k%,n$+": "+.task| 00005970 5f 72 74 6f 7a 28 73 25 2b 34 29 0d 03 d5 36 e7 |_rtoz(s%+4)...6.| 00005980 66 6f 75 6e 64 25 3d 30 20 85 20 74 61 73 6b 5f |found%=0 . task_| 00005990 6f 6b 25 2c 22 54 65 6d 70 6c 61 74 65 20 27 22 |ok%,"Template '"| 000059a0 2b 6e 24 2b 22 27 20 6e 6f 74 20 66 6f 75 6e 64 |+n$+"' not found| 000059b0 22 0d 03 d6 05 e1 0d 03 d7 05 3a 0d 03 d8 20 dd |".........:... .| 000059c0 f2 77 69 6e 5f 63 72 65 61 74 65 28 62 75 66 25 |.win_create(buf%| 000059d0 2c f8 20 68 61 6e 64 6c 65 25 29 0d 03 d9 34 f4 |,. handle%)...4.| 000059e0 20 20 20 20 62 75 66 25 20 2d 20 62 75 66 66 65 | buf% - buffe| 000059f0 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 77 69 |r holding the wi| 00005a00 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 0d |ndow definition.| 00005a10 03 da 2c f4 20 68 61 6e 64 6c 65 25 20 2d 20 68 |..,. handle% - h| 00005a20 61 6e 64 6c 65 20 6f 66 20 74 68 65 20 63 72 65 |andle of the cre| 00005a30 61 74 65 64 20 77 69 6e 64 6f 77 0d 03 db 29 c8 |ated window...).| 00005a40 99 22 57 69 6d 70 5f 43 72 65 61 74 65 57 69 6e |."Wimp_CreateWin| 00005a50 64 6f 77 22 2c 2c 62 75 66 25 20 b8 20 68 61 6e |dow",,buf% . han| 00005a60 64 6c 65 25 0d 03 dc 05 e1 0d 03 dd 05 3a 0d 03 |dle%.........:..| 00005a70 de 26 dd f2 77 69 6e 5f 73 69 7a 65 73 28 66 24 |.&..win_sizes(f$| 00005a80 2c 6e 24 2c f8 20 73 69 7a 65 25 2c f8 20 64 61 |,n$,. size%,. da| 00005a90 74 61 25 29 0d 03 df 08 ea 20 69 25 0d 03 e0 0b |ta%)..... i%....| 00005aa0 ea 20 66 69 6c 65 25 0d 03 e1 0a ea 20 70 74 72 |. file%..... ptr| 00005ab0 25 0d 03 e2 0d ea 20 6f 66 66 73 65 74 25 0d 03 |%..... offset%..| 00005ac0 e3 0b ea 20 74 79 70 65 25 0d 03 e4 0c ea 20 69 |... type%..... i| 00005ad0 64 65 6e 74 24 0d 03 e5 10 ea 20 6e 75 6d 5f 69 |dent$..... num_i| 00005ae0 63 6f 6e 73 25 0d 03 e6 0f 66 69 6c 65 25 3d 8e |cons%....file%=.| 00005af0 28 66 24 29 0d 03 e7 0b 73 69 7a 65 25 3d 30 0d |(f$)....size%=0.| 00005b00 03 e8 0b 64 61 74 61 25 3d 30 0d 03 e9 0b 70 74 |...data%=0....pt| 00005b10 72 25 3d 31 36 0d 03 ea 05 f5 0d 03 eb 11 20 cf |r%=16......... .| 00005b20 23 66 69 6c 65 25 3d 70 74 72 25 0d 03 ec 1d 20 |#file%=ptr%.... | 00005b30 6f 66 66 73 65 74 25 3d a4 77 69 6e 5f 77 6f 72 |offset%=.win_wor| 00005b40 64 28 66 69 6c 65 25 29 0d 03 ed 13 20 e7 20 6f |d(file%).... . o| 00005b50 66 66 73 65 74 25 3c 3e 30 20 8c 0d 03 ee 14 20 |ffset%<>0 ..... | 00005b60 20 cf 23 66 69 6c 65 25 3d 70 74 72 25 2b 38 0d | .#file%=ptr%+8.| 00005b70 03 ef 1c 20 20 74 79 70 65 25 3d a4 77 69 6e 5f |... type%=.win_| 00005b80 77 6f 72 64 28 66 69 6c 65 25 29 0d 03 f0 1f 20 |word(file%).... | 00005b90 20 69 64 65 6e 74 24 3d a4 77 69 6e 5f 73 74 72 | ident$=.win_str| 00005ba0 69 6e 67 28 66 69 6c 65 25 29 0d 03 f1 0e 20 20 |ing(file%).... | 00005bb0 70 74 72 25 2b 3d 32 34 0d 03 f2 10 20 20 e7 74 |ptr%+=24.... .t| 00005bc0 79 70 65 25 3d 31 20 8c 0d 03 f3 13 20 20 20 e7 |ype%=1 ..... .| 00005bd0 69 64 65 6e 74 24 3d 6e 24 20 8c 0d 03 f4 1a 20 |ident$=n$ ..... | 00005be0 20 20 20 cf 23 66 69 6c 65 25 3d 6f 66 66 73 65 | .#file%=offse| 00005bf0 74 25 2b 38 34 0d 03 f5 23 20 20 20 20 6e 75 6d |t%+84...# num| 00005c00 5f 69 63 6f 6e 73 25 3d a4 77 69 6e 5f 77 6f 72 |_icons%=.win_wor| 00005c10 64 28 66 69 6c 65 25 29 0d 03 f6 27 20 20 20 20 |d(file%)...' | 00005c20 64 61 74 61 25 3d a4 77 69 6e 5f 74 69 74 6c 65 |data%=.win_title| 00005c30 28 66 69 6c 65 25 2c 6f 66 66 73 65 74 25 29 0d |(file%,offset%).| 00005c40 03 f7 41 20 20 20 20 e7 6e 75 6d 5f 69 63 6f 6e |..A .num_icon| 00005c50 73 25 3c 3e 30 20 64 61 74 61 25 2b 3d a4 77 69 |s%<>0 data%+=.wi| 00005c60 6e 5f 69 63 6f 6e 28 66 69 6c 65 25 2c 6e 75 6d |n_icon(file%,num| 00005c70 5f 69 63 6f 6e 73 25 2c 6f 66 66 73 65 74 25 29 |_icons%,offset%)| 00005c80 0d 03 f8 20 20 20 20 20 73 69 7a 65 25 3d 38 38 |... size%=88| 00005c90 2b 28 6e 75 6d 5f 69 63 6f 6e 73 25 2a 33 32 29 |+(num_icons%*32)| 00005ca0 0d 03 f9 2f 20 20 20 20 6f 66 66 73 65 74 25 3d |.../ offset%=| 00005cb0 30 3a f4 20 6a 75 73 74 20 74 6f 20 67 65 74 20 |0:. just to get | 00005cc0 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 0d |out of the loop.| 00005cd0 03 fa 08 20 20 20 cd 0d 03 fb 07 20 20 cd 0d 03 |... ..... ...| 00005ce0 fc 06 20 cd 0d 03 fd 0f fd 20 6f 66 66 73 65 74 |.. ...... offset| 00005cf0 25 3d 30 0d 03 fe 0b d9 23 66 69 6c 65 25 0d 03 |%=0.....#file%..| 00005d00 ff 05 e1 0d 04 00 05 3a 0d 04 01 12 dd a4 77 69 |.......:......wi| 00005d10 6e 5f 77 6f 72 64 28 68 25 29 0d 04 02 2f 3d 9a |n_word(h%).../=.| 00005d20 23 68 25 2b 28 9a 23 68 25 20 3c 3c 20 38 29 2b |#h%+(.#h% << 8)+| 00005d30 28 9a 23 68 25 20 3c 3c 20 31 36 29 2b 28 9a 23 |(.#h% << 16)+(.#| 00005d40 68 25 20 3c 3c 20 32 34 29 0d 04 03 05 3a 0d 04 |h% << 24)....:..| 00005d50 04 14 dd a4 77 69 6e 5f 73 74 72 69 6e 67 28 68 |....win_string(h| 00005d60 25 29 0d 04 05 0b ea 20 73 24 2c 63 25 0d 04 06 |%)..... s$,c%...| 00005d70 05 f5 0d 04 07 0c 20 63 25 3d 9a 23 68 25 0d 04 |...... c%=.#h%..| 00005d80 08 15 20 e7 63 25 3e 33 31 20 73 24 2b 3d bd 28 |.. .c%>31 s$+=.(| 00005d90 63 25 29 0d 04 09 0b fd 20 63 25 3c 33 32 0d 04 |c%)..... c%<32..| 00005da0 0a 07 3d 73 24 0d 04 0b 05 3a 0d 04 0c 1e dd a4 |..=s$....:......| 00005db0 77 69 6e 5f 74 69 74 6c 65 28 66 69 6c 65 25 2c |win_title(file%,| 00005dc0 6f 66 66 73 65 74 25 29 0d 04 0d 08 ea 20 76 25 |offset%)..... v%| 00005dd0 0d 04 0e 16 cf 23 66 69 6c 65 25 3d 6f 66 66 73 |.....#file%=offs| 00005de0 65 74 25 2b 32 38 0d 04 0f 17 76 25 3d a4 77 69 |et%+28....v%=.wi| 00005df0 6e 5f 77 6f 72 64 28 66 69 6c 65 25 29 0d 04 10 |n_word(file%)...| 00005e00 14 e7 20 28 76 25 20 80 20 31 3c 3c 33 31 29 20 |.. (v% . 1<<31) | 00005e10 8c 0d 04 11 15 20 e7 20 28 76 25 20 80 20 31 3c |..... . (v% . 1<| 00005e20 3c 32 36 29 20 8c 0d 04 12 34 20 20 3d a4 77 69 |<26) ....4 =.wi| 00005e30 6e 5f 69 73 64 28 66 69 6c 65 25 2c 6f 66 66 73 |n_isd(file%,offs| 00005e40 65 74 25 2b 35 36 2c 6f 66 66 73 65 74 25 2b 37 |et%+56,offset%+7| 00005e50 32 2c 6f 66 66 73 65 74 25 29 0d 04 13 06 20 cd |2,offset%).... .| 00005e60 0d 04 14 05 cc 0d 04 15 11 20 e7 20 28 76 25 20 |......... . (v% | 00005e70 80 20 31 29 20 8c 0d 04 16 34 20 20 3d a4 77 69 |. 1) ....4 =.wi| 00005e80 6e 5f 69 73 64 28 66 69 6c 65 25 2c 6f 66 66 73 |n_isd(file%,offs| 00005e90 65 74 25 2b 35 36 2c 6f 66 66 73 65 74 25 2b 37 |et%+56,offset%+7| 00005ea0 32 2c 6f 66 66 73 65 74 25 29 0d 04 17 06 20 cd |2,offset%).... .| 00005eb0 0d 04 18 05 cd 0d 04 19 06 3d 30 0d 04 1a 05 3a |.........=0....:| 00005ec0 0d 04 1b 22 dd a4 77 69 6e 5f 69 63 6f 6e 28 66 |..."..win_icon(f| 00005ed0 69 6c 65 25 2c 6e 75 6d 25 2c 6f 66 66 73 65 74 |ile%,num%,offset| 00005ee0 25 29 0d 04 1c 0b ea 20 69 25 2c 6a 25 0d 04 1d |%)..... i%,j%...| 00005ef0 08 6a 25 3d 30 0d 04 1e 12 e3 69 25 3d 30 20 b8 |.j%=0.....i%=0 .| 00005f00 20 6e 75 6d 25 2d 31 0d 04 1f 48 20 6a 25 2b 3d | num%-1...H j%+=| 00005f10 a4 77 69 6e 5f 69 73 64 28 66 69 6c 65 25 2c 6f |.win_isd(file%,o| 00005f20 66 66 73 65 74 25 2b 38 38 2b 69 25 2a 33 32 2b |ffset%+88+i%*32+| 00005f30 31 36 2c 6f 66 66 73 65 74 25 2b 38 38 2b 69 25 |16,offset%+88+i%| 00005f40 2a 33 32 2b 32 30 2c 6f 66 66 73 65 74 25 29 0d |*32+20,offset%).| 00005f50 04 20 05 ed 0d 04 21 07 3d 6a 25 0d 04 22 05 3a |. ....!.=j%..".:| 00005f60 0d 04 23 24 dd a4 77 69 6e 5f 69 73 64 28 66 69 |..#$..win_isd(fi| 00005f70 6c 65 25 2c 6f 31 25 2c 6f 32 25 2c 6f 66 66 73 |le%,o1%,o2%,offs| 00005f80 65 74 25 29 0d 04 24 16 ea 20 76 25 2c 69 73 74 |et%)..$.. v%,ist| 00005f90 25 2c 73 69 7a 65 25 2c 69 25 0d 04 25 0f cf 23 |%,size%,i%..%..#| 00005fa0 66 69 6c 65 25 3d 6f 31 25 0d 04 26 17 76 25 3d |file%=o1%..&.v%=| 00005fb0 a4 77 69 6e 5f 77 6f 72 64 28 66 69 6c 65 25 29 |.win_word(file%)| 00005fc0 0d 04 27 2a f4 20 65 76 65 6e 20 69 66 20 61 6e |..'*. even if an| 00005fd0 20 69 63 6f 6e 20 69 73 20 6d 61 72 6b 65 64 20 | icon is marked | 00005fe0 61 73 20 64 65 6c 65 74 65 64 0d 04 28 1d f4 20 |as deleted..(.. | 00005ff0 69 74 20 6d 75 73 74 20 62 65 20 61 6c 6c 6f 77 |it must be allow| 00006000 65 64 20 66 6f 72 21 0d 04 29 18 69 25 3d 28 76 |ed for!..).i%=(v| 00006010 25 20 80 20 25 31 30 30 30 30 30 30 30 30 29 0d |% . %100000000).| 00006020 04 2a 1d 69 73 74 25 3d 28 76 25 20 80 20 33 29 |.*.ist%=(v% . 3)| 00006030 20 2b 20 28 69 25 20 3e 3e 20 36 29 0d 04 2b 0d | + (i% >> 6)..+.| 00006040 c8 8e 20 69 73 74 25 20 ca 0d 04 2c 12 c9 20 20 |.. ist% ...,.. | 00006050 20 30 3a 20 73 69 7a 65 25 3d 30 0d 04 2d 12 c9 | 0: size%=0..-..| 00006060 20 20 20 31 3a 20 73 69 7a 65 25 3d 30 0d 04 2e | 1: size%=0...| 00006070 12 c9 20 20 20 32 3a 20 73 69 7a 65 25 3d 30 0d |.. 2: size%=0.| 00006080 04 2f 12 c9 20 20 20 33 3a 20 73 69 7a 65 25 3d |./.. 3: size%=| 00006090 30 0d 04 30 12 c9 20 20 20 34 3a 20 73 69 7a 65 |0..0.. 4: size| 000060a0 25 3d 30 0d 04 31 18 c9 20 35 2c 37 3a 20 cf 23 |%=0..1.. 5,7: .#| 000060b0 66 69 6c 65 25 3d 6f 32 25 2b 34 0d 04 32 21 20 |file%=o2%+4..2! | 000060c0 20 20 20 20 20 20 20 20 20 76 25 3d a4 77 69 6e | v%=.win| 000060d0 5f 77 6f 72 64 28 66 69 6c 65 25 29 0d 04 33 16 |_word(file%)..3.| 000060e0 20 20 20 20 20 20 20 20 20 20 e7 76 25 3d 2d 31 | .v%=-1| 000060f0 20 8c 0d 04 34 16 20 20 20 20 20 20 20 20 20 20 | ...4. | 00006100 20 73 69 7a 65 25 3d 30 0d 04 35 0f 20 20 20 20 | size%=0..5. | 00006110 20 20 20 20 20 20 cc 0d 04 36 21 20 20 20 20 20 | ...6! | 00006120 20 20 20 20 20 20 cf 23 66 69 6c 65 25 3d 6f 66 | .#file%=of| 00006130 66 73 65 74 25 2b 76 25 0d 04 37 2c 20 20 20 20 |fset%+v%..7, | 00006140 20 20 20 20 20 20 20 73 69 7a 65 25 3d a9 28 a4 | size%=.(.| 00006150 77 69 6e 5f 73 74 72 69 6e 67 28 66 69 6c 65 25 |win_string(file%| 00006160 29 29 2b 31 0d 04 38 0f 20 20 20 20 20 20 20 20 |))+1..8. | 00006170 20 20 cd 0d 04 39 1b 20 20 20 20 20 20 20 20 20 | ...9. | 00006180 20 cf 23 66 69 6c 65 25 3d 6f 32 25 2b 38 0d 04 | .#file%=o2%+8..| 00006190 3a 25 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 |:% size| 000061a0 25 2b 3d a4 77 69 6e 5f 77 6f 72 64 28 66 69 6c |%+=.win_word(fil| 000061b0 65 25 29 0d 04 3b 18 c9 20 20 20 36 3a 20 cf 23 |e%)..;.. 6: .#| 000061c0 66 69 6c 65 25 3d 6f 32 25 2b 38 0d 04 3c 24 20 |file%=o2%+8..<$ | 000061d0 20 20 20 20 20 20 20 20 20 73 69 7a 65 25 3d a4 | size%=.| 000061e0 77 69 6e 5f 77 6f 72 64 28 66 69 6c 65 25 29 0d |win_word(file%).| 000061f0 04 3d 05 cb 0d 04 3e 0a 3d 73 69 7a 65 25 0d 04 |.=....>.=size%..| 00006200 3f 05 3a 0d 04 40 12 f4 20 49 63 6f 6e 20 6c 69 |?.:..@.. Icon li| 00006210 62 72 61 72 79 0d 04 41 05 3a 0d 04 42 15 dd f2 |brary..A.:..B...| 00006220 69 63 6f 6e 5f 69 6e 69 74 69 61 6c 69 73 65 0d |icon_initialise.| 00006230 04 43 16 de 20 69 63 6f 6e 5f 62 75 66 66 65 72 |.C.. icon_buffer| 00006240 25 20 32 35 36 0d 04 44 05 e1 0d 04 45 05 3a 0d |% 256..D....E.:.| 00006250 04 46 16 dd f2 69 63 6f 6e 5f 68 69 64 65 28 61 |.F...icon_hide(a| 00006260 25 2c 62 25 29 0d 04 47 14 21 69 63 6f 6e 5f 62 |%,b%)..G.!icon_b| 00006270 75 66 66 65 72 25 3d 61 25 0d 04 48 15 69 63 6f |uffer%=a%..H.ico| 00006280 6e 5f 62 75 66 66 65 72 25 21 34 3d 62 25 0d 04 |n_buffer%!4=b%..| 00006290 49 21 69 63 6f 6e 5f 62 75 66 66 65 72 25 21 38 |I!icon_buffer%!8| 000062a0 3d 28 31 3c 3c 37 29 2b 28 31 3c 3c 32 33 29 0d |=(1<<7)+(1<<23).| 000062b0 04 4a 22 69 63 6f 6e 5f 62 75 66 66 65 72 25 21 |.J"icon_buffer%!| 000062c0 31 32 3d 28 31 3c 3c 37 29 2b 28 31 3c 3c 32 33 |12=(1<<7)+(1<<23| 000062d0 29 0d 04 4b 27 c8 99 22 57 69 6d 70 5f 53 65 74 |)..K'.."Wimp_Set| 000062e0 49 63 6f 6e 53 74 61 74 65 22 2c 2c 69 63 6f 6e |IconState",,icon| 000062f0 5f 62 75 66 66 65 72 25 0d 04 4c 05 e1 0d 04 4d |_buffer%..L....M| 00006300 05 3a 0d 04 4e 1a dd f2 69 63 6f 6e 5f 77 72 69 |.:..N...icon_wri| 00006310 74 65 28 61 25 2c 62 25 2c 73 24 29 0d 04 4f 14 |te(a%,b%,s$)..O.| 00006320 21 69 63 6f 6e 5f 62 75 66 66 65 72 25 3d 61 25 |!icon_buffer%=a%| 00006330 0d 04 50 15 69 63 6f 6e 5f 62 75 66 66 65 72 25 |..P.icon_buffer%| 00006340 21 34 3d 62 25 0d 04 51 27 c8 99 22 57 69 6d 70 |!4=b%..Q'.."Wimp| 00006350 5f 47 65 74 49 63 6f 6e 53 74 61 74 65 22 2c 2c |_GetIconState",,| 00006360 69 63 6f 6e 5f 62 75 66 66 65 72 25 0d 04 52 20 |icon_buffer%..R | 00006370 e7 28 a9 28 73 24 29 2b 31 29 3e 69 63 6f 6e 5f |.(.(s$)+1)>icon_| 00006380 62 75 66 66 65 72 25 21 33 36 20 8c 0d 04 53 33 |buffer%!36 ...S3| 00006390 20 85 20 74 61 73 6b 5f 66 61 74 61 6c 25 2c 22 | . task_fatal%,"| 000063a0 27 22 2b 73 24 2b 22 27 20 77 6f 6e 27 74 20 66 |'"+s$+"' won't f| 000063b0 69 74 20 69 63 6f 6e 20 22 2b c3 28 62 25 29 0d |it icon "+.(b%).| 000063c0 04 54 05 cd 0d 04 55 19 24 28 69 63 6f 6e 5f 62 |.T....U.$(icon_b| 000063d0 75 66 66 65 72 25 21 32 38 29 3d 73 24 0d 04 56 |uffer%!28)=s$..V| 000063e0 26 69 63 6f 6e 5f 62 75 66 66 65 72 25 21 38 3d |&icon_buffer%!8=| 000063f0 30 3a 69 63 6f 6e 5f 62 75 66 66 65 72 25 21 31 |0:icon_buffer%!1| 00006400 32 3d 30 0d 04 57 27 c8 99 22 57 69 6d 70 5f 53 |2=0..W'.."Wimp_S| 00006410 65 74 49 63 6f 6e 53 74 61 74 65 22 2c 2c 69 63 |etIconState",,ic| 00006420 6f 6e 5f 62 75 66 66 65 72 25 0d 04 58 05 e1 0d |on_buffer%..X...| 00006430 04 59 05 3a 0d 04 5a 17 dd f2 69 63 6f 6e 5f 73 |.Y.:..Z...icon_s| 00006440 68 61 64 65 28 61 25 2c 62 25 29 0d 04 5b 14 21 |hade(a%,b%)..[.!| 00006450 69 63 6f 6e 5f 62 75 66 66 65 72 25 3d 61 25 0d |icon_buffer%=a%.| 00006460 04 5c 15 69 63 6f 6e 5f 62 75 66 66 65 72 25 21 |.\.icon_buffer%!| 00006470 34 3d 62 25 0d 04 5d 18 69 63 6f 6e 5f 62 75 66 |4=b%..].icon_buf| 00006480 66 65 72 25 21 38 3d 31 3c 3c 32 32 0d 04 5e 19 |fer%!8=1<<22..^.| 00006490 69 63 6f 6e 5f 62 75 66 66 65 72 25 21 31 32 3d |icon_buffer%!12=| 000064a0 31 3c 3c 32 32 0d 04 5f 27 c8 99 22 57 69 6d 70 |1<<22.._'.."Wimp| 000064b0 5f 53 65 74 49 63 6f 6e 53 74 61 74 65 22 2c 2c |_SetIconState",,| 000064c0 69 63 6f 6e 5f 62 75 66 66 65 72 25 0d 04 60 05 |icon_buffer%..`.| 000064d0 e1 0d 04 61 05 3a 0d 04 62 15 dd a4 69 63 6f 6e |...a.:..b...icon| 000064e0 5f 73 65 74 28 61 25 2c 62 25 29 0d 04 63 14 21 |_set(a%,b%)..c.!| 000064f0 69 63 6f 6e 5f 62 75 66 66 65 72 25 3d 61 25 0d |icon_buffer%=a%.| 00006500 04 64 15 69 63 6f 6e 5f 62 75 66 66 65 72 25 21 |.d.icon_buffer%!| 00006510 34 3d 62 25 0d 04 65 27 c8 99 22 57 69 6d 70 5f |4=b%..e'.."Wimp_| 00006520 47 65 74 49 63 6f 6e 53 74 61 74 65 22 2c 2c 69 |GetIconState",,i| 00006530 63 6f 6e 5f 62 75 66 66 65 72 25 0d 04 66 25 3d |con_buffer%..f%=| 00006540 28 28 69 63 6f 6e 5f 62 75 66 66 65 72 25 21 32 |((icon_buffer%!2| 00006550 34 20 80 20 28 31 3c 3c 32 31 29 29 3c 3e 30 29 |4 . (1<<21))<>0)| 00006560 0d 04 67 05 3a 0d 04 68 18 dd f2 69 63 6f 6e 5f |..g.:..h...icon_| 00006570 75 6e 68 69 64 65 28 61 25 2c 62 25 29 0d 04 69 |unhide(a%,b%)..i| 00006580 14 21 69 63 6f 6e 5f 62 75 66 66 65 72 25 3d 61 |.!icon_buffer%=a| 00006590 25 0d 04 6a 15 69 63 6f 6e 5f 62 75 66 66 65 72 |%..j.icon_buffer| 000065a0 25 21 34 3d 62 25 0d 04 6b 14 69 63 6f 6e 5f 62 |%!4=b%..k.icon_b| 000065b0 75 66 66 65 72 25 21 38 3d 30 0d 04 6c 19 69 63 |uffer%!8=0..l.ic| 000065c0 6f 6e 5f 62 75 66 66 65 72 25 21 31 32 3d 31 3c |on_buffer%!12=1<| 000065d0 3c 32 33 0d 04 6d 27 c8 99 22 57 69 6d 70 5f 53 |<23..m'.."Wimp_S| 000065e0 65 74 49 63 6f 6e 53 74 61 74 65 22 2c 2c 69 63 |etIconState",,ic| 000065f0 6f 6e 5f 62 75 66 66 65 72 25 0d 04 6e 05 e1 0d |on_buffer%..n...| 00006600 04 6f 05 3a 0d 04 70 19 dd f2 69 63 6f 6e 5f 75 |.o.:..p...icon_u| 00006610 6e 73 68 61 64 65 28 61 25 2c 62 25 29 0d 04 71 |nshade(a%,b%)..q| 00006620 14 21 69 63 6f 6e 5f 62 75 66 66 65 72 25 3d 61 |.!icon_buffer%=a| 00006630 25 0d 04 72 15 69 63 6f 6e 5f 62 75 66 66 65 72 |%..r.icon_buffer| 00006640 25 21 34 3d 62 25 0d 04 73 14 69 63 6f 6e 5f 62 |%!4=b%..s.icon_b| 00006650 75 66 66 65 72 25 21 38 3d 30 0d 04 74 19 69 63 |uffer%!8=0..t.ic| 00006660 6f 6e 5f 62 75 66 66 65 72 25 21 31 32 3d 31 3c |on_buffer%!12=1<| 00006670 3c 32 32 0d 04 75 27 c8 99 22 57 69 6d 70 5f 53 |<22..u'.."Wimp_S| 00006680 65 74 49 63 6f 6e 53 74 61 74 65 22 2c 2c 69 63 |etIconState",,ic| 00006690 6f 6e 5f 62 75 66 66 65 72 25 0d 04 76 05 e1 0d |on_buffer%..v...| 000066a0 04 77 05 3a 0d 04 78 12 f4 20 54 61 73 6b 20 6c |.w.:..x.. Task l| 000066b0 69 62 72 61 72 79 0d 04 79 05 3a 0d 04 7a 1a dd |ibrary..y.:..z..| 000066c0 20 f2 74 61 73 6b 5f 69 6e 69 74 69 61 6c 69 73 | .task_initialis| 000066d0 65 28 6e 24 29 0d 04 7b 0f 74 61 73 6b 5f 69 64 |e(n$)..{.task_id| 000066e0 24 3d 6e 24 0d 04 7c 14 de 20 74 61 73 6b 5f 62 |$=n$..|.. task_b| 000066f0 75 66 66 25 20 32 35 36 0d 04 7d 14 e7 20 52 69 |uff% 256..}.. Ri| 00006700 73 63 4f 53 25 3e 3d 33 30 30 20 8c 0d 04 7e 27 |scOS%>=300 ...~'| 00006710 20 20 74 61 73 6b 5f 62 75 66 66 25 21 30 3d 4d | task_buff%!0=M| 00006720 65 73 73 61 67 65 5f 4d 4d 5f 44 6f 63 75 6d 65 |essage_MM_Docume| 00006730 6e 74 25 0d 04 7f 28 20 20 74 61 73 6b 5f 62 75 |nt%...( task_bu| 00006740 66 66 25 21 34 3d 4d 65 73 73 61 67 65 5f 57 69 |ff%!4=Message_Wi| 00006750 6e 64 6f 77 43 6c 6f 73 65 64 25 0d 04 80 29 20 |ndowClosed%...) | 00006760 20 74 61 73 6b 5f 62 75 66 66 25 21 38 3d 4d 65 | task_buff%!8=Me| 00006770 73 73 61 67 65 5f 54 61 73 6b 43 6c 6f 73 65 44 |ssage_TaskCloseD| 00006780 6f 77 6e 25 0d 04 81 24 20 20 74 61 73 6b 5f 62 |own%...$ task_b| 00006790 75 66 66 25 21 31 32 3d 4d 65 73 73 61 67 65 5f |uff%!12=Message_| 000067a0 50 72 65 51 75 69 74 25 0d 04 82 25 20 20 74 61 |PreQuit%...% ta| 000067b0 73 6b 5f 62 75 66 66 25 21 31 36 3d 4d 65 73 73 |sk_buff%!16=Mess| 000067c0 61 67 65 5f 52 41 4d 46 65 74 63 68 25 0d 04 83 |age_RAMFetch%...| 000067d0 25 20 20 74 61 73 6b 5f 62 75 66 66 25 21 32 30 |% task_buff%!20| 000067e0 3d 4d 65 73 73 61 67 65 5f 44 61 74 61 4c 6f 61 |=Message_DataLoa| 000067f0 64 25 0d 04 84 25 20 20 74 61 73 6b 5f 62 75 66 |d%...% task_buf| 00006800 66 25 21 32 34 3d 4d 65 73 73 61 67 65 5f 44 61 |f%!24=Message_Da| 00006810 74 61 53 61 76 65 25 0d 04 85 26 20 20 74 61 73 |taSave%...& tas| 00006820 6b 5f 62 75 66 66 25 21 32 38 3d 4d 65 73 73 61 |k_buff%!28=Messa| 00006830 67 65 5f 49 6d 70 75 6c 73 65 5f 31 25 0d 04 86 |ge_Impulse_1%...| 00006840 26 20 20 74 61 73 6b 5f 62 75 66 66 25 21 33 32 |& task_buff%!32| 00006850 3d 4d 65 73 73 61 67 65 5f 49 6d 70 75 6c 73 65 |=Message_Impulse| 00006860 5f 32 25 0d 04 87 21 20 20 74 61 73 6b 5f 62 75 |_2%...! task_bu| 00006870 66 66 25 21 33 36 3d 4d 65 73 73 61 67 65 5f 51 |ff%!36=Message_Q| 00006880 75 69 74 25 0d 04 88 55 20 20 c8 99 22 57 69 6d |uit%...U .."Wim| 00006890 70 5f 49 6e 69 74 69 61 6c 69 73 65 22 2c 33 31 |p_Initialise",31| 000068a0 30 2c 26 34 42 35 33 34 31 35 34 2c 6e 24 2c 74 |0,&4B534154,n$,t| 000068b0 61 73 6b 5f 62 75 66 66 25 2b 33 36 20 b8 20 77 |ask_buff%+36 . w| 000068c0 69 6d 70 5f 76 65 72 73 69 6f 6e 25 2c 74 61 73 |imp_version%,tas| 000068d0 6b 5f 68 61 6e 64 6c 65 25 0d 04 89 05 cc 0d 04 |k_handle%.......| 000068e0 8a 48 20 20 c8 99 20 22 57 69 6d 70 5f 49 6e 69 |.H .. "Wimp_Ini| 000068f0 74 69 61 6c 69 73 65 22 2c 32 30 30 2c 26 34 42 |tialise",200,&4B| 00006900 35 33 34 31 35 34 2c 6e 24 20 b8 20 77 69 6d 70 |534154,n$ . wimp| 00006910 5f 76 65 72 73 69 6f 6e 25 2c 74 61 73 6b 5f 68 |_version%,task_h| 00006920 61 6e 64 6c 65 25 0d 04 8b 05 cd 0d 04 8c 23 ff |andle%........#.| 00006930 28 22 53 65 74 20 4d 61 69 6c 4d 65 72 67 65 24 |("Set MailMerge$| 00006940 52 75 6e 6e 69 6e 67 20 54 52 55 45 22 29 0d 04 |Running TRUE")..| 00006950 8d 12 74 61 73 6b 5f 61 63 74 69 6f 6e 25 3d 30 |..task_action%=0| 00006960 0d 04 8e 04 0d 04 8f 2a f4 20 21 21 21 21 21 21 |.......*. !!!!!!| 00006970 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 |!!!!!!!!!!!!!!!!| 00006980 21 21 21 21 21 21 21 21 21 21 21 21 21 21 0d 04 |!!!!!!!!!!!!!!..| 00006990 90 25 f4 20 74 61 73 6b 5f 6d 61 73 6b 25 3d 31 |.%. task_mask%=1| 000069a0 3a 52 45 4d 20 6e 6f 20 6e 75 6c 6c 20 65 76 65 |:REM no null eve| 000069b0 6e 74 73 0d 04 91 04 0d 04 92 35 74 61 73 6b 5f |nts.......5task_| 000069c0 6d 61 73 6b 25 3d 30 20 20 20 20 20 20 20 20 20 |mask%=0 | 000069d0 20 20 3a 20 f4 20 49 20 77 61 6e 74 20 6d 79 20 | : . I want my | 000069e0 6e 75 6c 6c 20 65 76 65 6e 74 73 21 0d 04 93 04 |null events!....| 000069f0 0d 04 94 2a f4 20 21 21 21 21 21 21 21 21 21 21 |...*. !!!!!!!!!!| 00006a00 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 |!!!!!!!!!!!!!!!!| 00006a10 21 21 21 21 21 21 21 21 21 21 0d 04 95 04 0d 04 |!!!!!!!!!!......| 00006a20 96 10 74 61 73 6b 5f 6f 6b 25 3d 32 35 34 0d 04 |..task_ok%=254..| 00006a30 97 04 0d 04 98 13 74 61 73 6b 5f 66 61 74 61 6c |......task_fatal| 00006a40 25 3d 32 35 33 0d 04 99 05 e1 0d 04 9a 05 3a 0d |%=253.........:.| 00006a50 04 9b 13 dd f2 74 61 73 6b 5f 73 68 75 74 64 6f |.....task_shutdo| 00006a60 77 6e 0d 04 9c 16 c8 99 22 57 69 6d 70 5f 43 6c |wn......"Wimp_Cl| 00006a70 6f 73 65 44 6f 77 6e 22 0d 04 9d 20 ff 28 22 55 |oseDown"... .("U| 00006a80 6e 53 65 74 20 4d 61 69 6c 4d 65 72 67 65 24 52 |nSet MailMerge$R| 00006a90 75 6e 6e 69 6e 67 22 29 0d 04 9e 05 e0 0d 04 9f |unning")........| 00006aa0 05 e1 0d 04 a0 05 3a 0d 04 a1 13 dd a4 74 61 73 |......:......tas| 00006ab0 6b 5f 72 74 6f 7a 28 70 25 29 0d 04 a2 08 ea 20 |k_rtoz(p%)..... | 00006ac0 70 24 0d 04 a3 0d c8 95 20 3f 70 25 3c 3e 30 0d |p$...... ?p%<>0.| 00006ad0 04 a4 0f 20 70 24 2b 3d bd 28 3f 70 25 29 0d 04 |... p$+=.(?p%)..| 00006ae0 a5 0a 20 70 25 2b 3d 31 0d 04 a6 05 ce 0d 04 a7 |.. p%+=1........| 00006af0 07 3d 70 24 0d 04 a8 05 3a 0d 04 a9 15 f4 20 4d |.=p$....:..... M| 00006b00 65 73 73 61 67 65 20 6c 69 62 72 61 72 79 0d 04 |essage library..| 00006b10 aa 05 3a 0d 04 ab 18 dd f2 6d 73 67 5f 69 6e 69 |..:......msg_ini| 00006b20 74 69 61 6c 69 73 65 28 4e 24 29 0d 04 ac 0e ea |tialise(N$).....| 00006b30 20 63 25 2c 63 24 2c 69 25 0d 04 ad 0c 63 25 3d | c%,c$,i%....c%=| 00006b40 8e 28 4e 24 29 0d 04 ae 2a e7 63 25 3d 30 20 85 |.(N$)...*.c%=0 .| 00006b50 20 30 2c 20 22 43 61 6e 6e 6f 74 20 66 69 6e 64 | 0, "Cannot find| 00006b60 20 6d 65 73 73 61 67 65 73 20 66 69 6c 65 22 0d | messages file".| 00006b70 04 af 0e 6d 73 5f 74 61 67 73 25 3d 30 0d 04 b0 |...ms_tags%=0...| 00006b80 11 f2 68 6f 75 72 67 6c 61 73 73 5f 6f 6e 0d 04 |..hourglass_on..| 00006b90 b1 0e c8 95 20 ac 28 c5 23 63 25 29 0d 04 b2 0c |.... .(.#c%)....| 00006ba0 20 63 24 3d be 23 63 25 0d 04 b3 0e 20 e7 63 24 | c$=.#c%.... .c$| 00006bb0 3c 3e 22 22 20 8c 0d 04 b4 14 20 20 e7 c0 63 24 |<>"" ..... ..c$| 00006bc0 2c 31 29 3c 3e 22 23 22 20 8c 0d 04 b5 1f 20 20 |,1)<>"#" ..... | 00006bd0 20 e7 a7 63 24 2c 22 3a 22 29 3c 3e 30 20 6d 73 | ..c$,":")<>0 ms| 00006be0 5f 74 61 67 73 25 2b 3d 31 0d 04 b6 07 20 20 cd |_tags%+=1.... .| 00006bf0 0d 04 b7 06 20 cd 0d 04 b8 05 ce 0d 04 b9 12 e7 |.... ...........| 00006c00 6d 73 5f 74 61 67 73 25 3c 3e 30 20 8c 0d 04 ba |ms_tags%<>0 ....| 00006c10 30 20 de 20 6d 73 5f 74 65 78 74 24 28 6d 73 5f |0 . ms_text$(ms_| 00006c20 74 61 67 73 25 2d 31 29 2c 6d 73 5f 74 61 67 73 |tags%-1),ms_tags| 00006c30 24 28 6d 73 5f 74 61 67 73 25 2d 31 29 0d 04 bb |$(ms_tags%-1)...| 00006c40 0b 20 cf 23 63 25 3d 30 0d 04 bc 09 20 69 25 3d |. .#c%=0.... i%=| 00006c50 30 0d 04 bd 0d 20 c8 95 20 ac c5 23 63 25 0d 04 |0.... .. ..#c%..| 00006c60 be 0d 20 20 63 24 3d be 23 63 25 0d 04 bf 0f 20 |.. c$=.#c%.... | 00006c70 20 e7 63 24 3c 3e 22 22 20 8c 0d 04 c0 15 20 20 | .c$<>"" ..... | 00006c80 20 e7 c0 63 24 2c 31 29 3c 3e 22 23 22 20 8c 0d | ..c$,1)<>"#" ..| 00006c90 04 c1 24 20 20 20 20 6d 73 5f 74 61 67 73 24 28 |..$ ms_tags$(| 00006ca0 69 25 29 3d c0 63 24 2c a7 63 24 2c 22 3a 22 29 |i%)=.c$,.c$,":")| 00006cb0 2d 31 29 0d 04 c2 24 20 20 20 20 6d 73 5f 74 65 |-1)...$ ms_te| 00006cc0 78 74 24 28 69 25 29 3d c1 63 24 2c a7 63 24 2c |xt$(i%)=.c$,.c$,| 00006cd0 22 3a 22 29 2b 31 29 0d 04 c3 0d 20 20 20 20 69 |":")+1).... i| 00006ce0 25 2b 3d 31 0d 04 c4 08 20 20 20 cd 0d 04 c5 07 |%+=1.... .....| 00006cf0 20 20 cd 0d 04 c6 06 20 ce 0d 04 c7 05 cd 0d 04 | ..... ........| 00006d00 c8 08 d9 23 63 25 0d 04 c9 12 f2 68 6f 75 72 67 |...#c%.....hourg| 00006d10 6c 61 73 73 5f 6f 66 66 0d 04 ca 05 e1 0d 04 cb |lass_off........| 00006d20 05 3a 0d 04 cc 0f dd a4 6d 73 67 5f 30 28 54 24 |.:......msg_0(T$| 00006d30 29 0d 04 cd 1b 3d a4 6d 73 67 5f 34 28 54 24 2c |)....=.msg_4(T$,| 00006d40 22 22 2c 22 22 2c 22 22 2c 22 22 29 0d 04 ce 05 |"","","","")....| 00006d50 3a 0d 04 cf 12 dd a4 6d 73 67 5f 31 28 54 24 2c |:......msg_1(T$,| 00006d60 53 24 29 0d 04 d0 1b 3d a4 6d 73 67 5f 34 28 54 |S$)....=.msg_4(T| 00006d70 24 2c 53 24 2c 22 22 2c 22 22 2c 22 22 29 0d 04 |$,S$,"","","")..| 00006d80 d1 05 3b 0d 04 d2 17 dd a4 6d 73 67 5f 32 28 54 |..;......msg_2(T| 00006d90 24 2c 53 30 24 2c 53 31 24 29 0d 04 d3 1d 3d a4 |$,S0$,S1$)....=.| 00006da0 6d 73 67 5f 34 28 54 24 2c 53 30 24 2c 53 31 24 |msg_4(T$,S0$,S1$| 00006db0 2c 22 22 2c 22 22 29 0d 04 d4 05 3a 0d 04 d5 1f |,"","")....:....| 00006dc0 dd a4 6d 73 67 5f 34 28 54 24 2c 53 30 24 2c 53 |..msg_4(T$,S0$,S| 00006dd0 31 24 2c 53 32 24 2c 53 33 24 29 0d 04 d6 0b ea |1$,S2$,S3$).....| 00006de0 20 69 25 2c 66 25 0d 04 d7 11 e7 6d 73 5f 74 61 | i%,f%.....ms_ta| 00006df0 67 73 25 3d 30 20 8c 0d 04 d8 08 20 3d 54 24 0d |gs%=0 ..... =T$.| 00006e00 04 d9 05 cc 0d 04 da 17 20 e3 69 25 3d 30 20 b8 |........ .i%=0 .| 00006e10 20 6d 73 5f 74 61 67 73 25 2d 31 0d 04 db 18 20 | ms_tags%-1.... | 00006e20 20 e7 54 24 3d 6d 73 5f 74 61 67 73 24 28 69 25 | .T$=ms_tags$(i%| 00006e30 29 20 8c 0d 04 dc 16 20 20 20 54 24 3d 6d 73 5f |) ..... T$=ms_| 00006e40 74 65 78 74 24 28 69 25 29 0d 04 dd 13 20 20 20 |text$(i%).... | 00006e50 66 25 3d a7 54 24 2c 22 25 30 22 29 0d 04 de 28 |f%=.T$,"%0")...(| 00006e60 20 20 20 e7 66 25 3c 3e 30 20 54 24 3d c0 54 24 | .f%<>0 T$=.T$| 00006e70 2c 66 25 2d 31 29 2b 53 30 24 2b c1 54 24 2c 66 |,f%-1)+S0$+.T$,f| 00006e80 25 2b 32 29 0d 04 df 13 20 20 20 66 25 3d a7 54 |%+2).... f%=.T| 00006e90 24 2c 22 25 31 22 29 0d 04 e0 28 20 20 20 e7 66 |$,"%1")...( .f| 00006ea0 25 3c 3e 30 20 54 24 3d c0 54 24 2c 66 25 2d 31 |%<>0 T$=.T$,f%-1| 00006eb0 29 2b 53 31 24 2b c1 54 24 2c 66 25 2b 32 29 0d |)+S1$+.T$,f%+2).| 00006ec0 04 e1 13 20 20 20 66 25 3d a7 54 24 2c 22 25 32 |... f%=.T$,"%2| 00006ed0 22 29 0d 04 e2 28 20 20 20 e7 66 25 3c 3e 30 20 |")...( .f%<>0 | 00006ee0 54 24 3d c0 54 24 2c 66 25 2d 31 29 2b 53 32 24 |T$=.T$,f%-1)+S2$| 00006ef0 2b c1 54 24 2c 66 25 2b 32 29 0d 04 e3 13 20 20 |+.T$,f%+2).... | 00006f00 20 66 25 3d a7 54 24 2c 22 25 33 22 29 0d 04 e4 | f%=.T$,"%3")...| 00006f10 28 20 20 20 e7 66 25 3c 3e 30 20 54 24 3d c0 54 |( .f%<>0 T$=.T| 00006f20 24 2c 66 25 2d 31 29 2b 53 33 24 2b c1 54 24 2c |$,f%-1)+S3$+.T$,| 00006f30 66 25 2b 32 29 0d 04 e5 12 20 20 20 69 25 3d 6d |f%+2).... i%=m| 00006f40 73 5f 74 61 67 73 25 0d 04 e6 07 20 20 cd 0d 04 |s_tags%.... ...| 00006f50 e7 06 20 ed 0d 04 e8 05 cd 0d 04 e9 07 3d 54 24 |.. ..........=T$| 00006f60 0d 04 ea 05 3a 0d 04 eb 12 dd f2 68 6f 75 72 67 |....:......hourg| 00006f70 6c 61 73 73 5f 6f 6e 0d 04 ec 14 c8 99 22 48 6f |lass_on......"Ho| 00006f80 75 72 67 6c 61 73 73 5f 4f 6e 22 0d 04 ed 17 68 |urglass_On"....h| 00006f90 6f 75 72 67 6c 61 73 73 5f 63 6f 75 6e 74 25 2b |ourglass_count%+| 00006fa0 3d 31 0d 04 ee 05 e1 0d 04 ef 05 3a 0d 04 f0 13 |=1.........:....| 00006fb0 dd f2 68 6f 75 72 67 6c 61 73 73 5f 6f 66 66 0d |..hourglass_off.| 00006fc0 04 f1 15 c8 99 22 48 6f 75 72 67 6c 61 73 73 5f |....."Hourglass_| 00006fd0 4f 66 66 22 0d 04 f2 17 68 6f 75 72 67 6c 61 73 |Off"....hourglas| 00006fe0 73 5f 63 6f 75 6e 74 25 2d 3d 31 0d 04 f3 05 e1 |s_count%-=1.....| 00006ff0 0d 04 f4 05 3a 0d 04 f5 13 dd f2 6f 70 65 6e 5f |....:......open_| 00007000 63 73 76 5f 66 69 6c 65 0d 04 f6 14 e7 20 63 73 |csv_file..... cs| 00007010 76 5f 66 69 6c 65 24 3d 22 22 20 e1 0d 04 f7 21 |v_file$="" ....!| 00007020 63 73 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 |csv_file_handle%| 00007030 3d 8e 28 63 73 76 5f 66 69 6c 65 24 29 0d 04 f8 |=.(csv_file$)...| 00007040 05 e1 0d 04 f9 05 3a 0d 04 fa 14 dd f2 63 6c 6f |......:......clo| 00007050 73 65 5f 63 73 76 5f 66 69 6c 65 0d 04 fb 19 e7 |se_csv_file.....| 00007060 63 73 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 |csv_file_handle%| 00007070 3d 30 20 e1 0d 04 fc 16 d9 23 63 73 76 5f 66 69 |=0 ......#csv_fi| 00007080 6c 65 5f 68 61 6e 64 6c 65 25 0d 04 fd 16 63 73 |le_handle%....cs| 00007090 76 5f 66 69 6c 65 5f 68 61 6e 64 6c 65 25 3d 30 |v_file_handle%=0| 000070a0 0d 04 fe 05 e1 0d 04 ff 04 0d 05 00 04 0d 05 01 |................| 000070b0 0d dd 20 f2 63 6f 6e 73 74 73 0d 05 02 1d 61 70 |.. .consts....ap| 000070c0 70 64 69 72 24 3d 22 3c 4d 61 69 6c 4d 65 72 67 |pdir$="<MailMerg| 000070d0 65 24 44 69 72 3e 22 0d 05 03 12 49 63 6f 6e 5f |e$Dir>"....Icon_| 000070e0 54 6f 50 72 6f 63 25 3d 31 0d 05 04 14 49 63 6f |ToProc%=1....Ico| 000070f0 6e 5f 52 65 63 73 50 72 6f 63 25 3d 32 0d 05 05 |n_RecsProc%=2...| 00007100 14 49 63 6f 6e 5f 48 65 61 64 69 6e 67 73 25 3d |.Icon_Headings%=| 00007110 33 0d 05 06 14 49 63 6f 6e 5f 50 72 69 6e 74 41 |3....Icon_PrintA| 00007120 6c 6c 25 3d 34 0d 05 07 0f 49 63 6f 6e 5f 43 53 |ll%=4....Icon_CS| 00007130 56 25 3d 35 0d 05 08 10 49 63 6f 6e 5f 54 6f 47 |V%=5....Icon_ToG| 00007140 6f 25 3d 36 0d 05 09 10 49 63 6f 6e 5f 44 6f 6e |o%=6....Icon_Don| 00007150 65 25 3d 37 0d 05 0a 11 49 63 6f 6e 5f 50 72 69 |e%=7....Icon_Pri| 00007160 6e 74 25 3d 38 0d 05 0b 15 49 63 6f 6e 5f 64 6f |nt%=8....Icon_do| 00007170 63 75 6d 65 6e 74 25 3d 31 30 0d 05 0c 11 49 63 |cument%=10....Ic| 00007180 6f 6e 5f 4e 65 78 74 25 3d 31 31 0d 05 0d 11 49 |on_Next%=11....I| 00007190 63 6f 6e 5f 45 64 69 74 25 3d 31 32 0d 05 0e 15 |con_Edit%=12....| 000071a0 49 63 6f 6e 5f 44 69 73 70 48 65 61 64 25 3d 31 |Icon_DispHead%=1| 000071b0 33 0d 05 0f 17 49 63 6f 6e 5f 53 74 61 72 74 4d |3....Icon_StartM| 000071c0 65 72 67 65 25 3d 31 34 0d 05 10 15 49 63 6f 6e |erge%=14....Icon| 000071d0 5f 44 72 6f 70 48 65 72 65 25 3d 31 35 0d 05 11 |_DropHere%=15...| 000071e0 04 0d 05 12 15 57 69 6e 64 6f 77 5f 53 6d 61 6c |.....Window_Smal| 000071f0 6c 25 3d 32 33 36 0d 05 13 13 57 69 6e 64 6f 77 |l%=236....Window| 00007200 5f 42 69 67 25 3d 33 36 30 0d 05 14 04 0d 05 15 |_Big%=360.......| 00007210 11 54 5f 47 65 74 46 69 65 6c 64 25 3d 30 0d 05 |.T_GetField%=0..| 00007220 16 10 54 5f 47 65 74 44 61 74 61 25 3d 31 0d 05 |..T_GetData%=1..| 00007230 17 14 54 5f 47 65 74 54 69 6d 65 44 61 74 65 25 |..T_GetTimeDate%| 00007240 3d 32 0d 05 18 0e 54 5f 50 72 69 6e 74 25 3d 33 |=2....T_Print%=3| 00007250 0d 05 19 0e 54 5f 4d 65 72 67 65 25 3d 34 0d 05 |....T_Merge%=4..| 00007260 1a 12 54 5f 43 6c 6f 73 65 44 6f 77 6e 25 3d 37 |..T_CloseDown%=7| 00007270 0d 05 1b 04 0d 05 1c 19 49 6d 70 75 6c 73 65 5f |........Impulse_| 00007280 43 6f 6d 6d 61 6e 64 25 3d 26 32 30 30 0d 05 1d |Command%=&200...| 00007290 19 49 6d 70 75 6c 73 65 5f 52 65 71 75 65 73 74 |.Impulse_Request| 000072a0 25 3d 26 32 30 31 0d 05 1e 17 49 6d 70 75 6c 73 |%=&201....Impuls| 000072b0 65 5f 52 65 70 6c 79 25 3d 26 32 30 32 0d 05 1f |e_Reply%=&202...| 000072c0 1a 49 6d 70 75 6c 73 65 5f 53 65 6e 64 44 61 74 |.Impulse_SendDat| 000072d0 61 25 3d 26 32 30 33 0d 05 20 1d 49 6d 70 75 6c |a%=&203.. .Impul| 000072e0 73 65 5f 52 65 63 65 69 76 65 44 61 74 61 25 3d |se_ReceiveData%=| 000072f0 26 32 30 34 0d 05 21 1f 49 6d 70 75 6c 73 65 5f |&204..!.Impulse_| 00007300 44 65 66 65 72 72 65 64 52 65 70 6c 79 25 3d 26 |DeferredReply%=&| 00007310 32 30 35 0d 05 22 04 0d 05 23 12 44 44 46 5f 54 |205.."...#.DDF_T| 00007320 79 70 65 25 3d 26 44 39 33 0d 05 24 12 43 53 56 |ype%=&D93..$.CSV| 00007330 5f 54 79 70 65 25 3d 26 44 46 45 0d 05 25 04 0d |_Type%=&DFE..%..| 00007340 05 26 13 4d 65 73 73 61 67 65 5f 51 75 69 74 25 |.&.Message_Quit%| 00007350 3d 30 0d 05 27 17 4d 65 73 73 61 67 65 5f 44 61 |=0..'.Message_Da| 00007360 74 61 53 61 76 65 25 3d 31 0d 05 28 17 4d 65 73 |taSave%=1..(.Mes| 00007370 73 61 67 65 5f 44 61 74 61 4c 6f 61 64 25 3d 33 |sage_DataLoad%=3| 00007380 0d 05 29 17 4d 65 73 73 61 67 65 5f 52 41 4d 46 |..).Message_RAMF| 00007390 65 74 63 68 25 3d 36 0d 05 2a 16 4d 65 73 73 61 |etch%=6..*.Messa| 000073a0 67 65 5f 50 72 65 51 75 69 74 25 3d 38 0d 05 2b |ge_PreQuit%=8..+| 000073b0 21 4d 65 73 73 61 67 65 5f 54 61 73 6b 43 6c 6f |!Message_TaskClo| 000073c0 73 65 44 6f 77 6e 25 3d 26 34 30 30 43 33 0d 05 |seDown%=&400C3..| 000073d0 2c 20 4d 65 73 73 61 67 65 5f 57 69 6e 64 6f 77 |, Message_Window| 000073e0 43 6c 6f 73 65 64 25 3d 26 34 30 30 43 42 0d 05 |Closed%=&400CB..| 000073f0 2d 1d 4d 65 73 73 61 67 65 5f 49 6d 70 75 6c 73 |-.Message_Impuls| 00007400 65 5f 31 25 3d 26 38 30 45 31 38 0d 05 2e 1d 4d |e_1%=&80E18....M| 00007410 65 73 73 61 67 65 5f 49 6d 70 75 6c 73 65 5f 32 |essage_Impulse_2| 00007420 25 3d 26 38 30 45 31 39 0d 05 2f 1f 4d 65 73 73 |%=&80E19../.Mess| 00007430 61 67 65 5f 4d 4d 5f 44 6f 63 75 6d 65 6e 74 25 |age_MM_Document%| 00007440 3d 26 38 32 31 34 30 0d 05 30 04 0d 05 31 12 43 |=&82140..0...1.C| 00007450 68 61 72 5f 53 70 61 63 65 25 3d 33 32 0d 05 32 |har_Space%=32..2| 00007460 12 43 68 61 72 5f 51 75 6f 74 65 25 3d 33 34 0d |.Char_Quote%=34.| 00007470 05 33 12 43 68 61 72 5f 43 6f 6d 6d 61 25 3d 34 |.3.Char_Comma%=4| 00007480 34 0d 05 34 0f 43 68 61 72 5f 4c 46 25 3d 31 30 |4..4.Char_LF%=10| 00007490 0d 05 35 0f 43 68 61 72 5f 43 52 25 3d 31 33 0d |..5.Char_CR%=13.| 000074a0 05 36 12 43 68 61 72 5f 53 6c 61 73 68 25 3d 39 |.6.Char_Slash%=9| 000074b0 32 0d 05 37 17 43 68 61 72 5f 48 61 72 64 53 70 |2..7.Char_HardSp| 000074c0 61 63 65 25 3d 31 36 30 0d 05 38 05 e1 0d 05 39 |ace%=160..8....9| 000074d0 04 0d 05 3a 10 dd 20 f2 72 65 61 64 6f 70 73 79 |...:.. .readopsy| 000074e0 73 0d 05 3b 25 c8 99 20 22 4f 53 5f 42 79 74 65 |s..;%.. "OS_Byte| 000074f0 22 2c 31 32 39 2c 30 2c 32 35 35 20 b8 20 2c 52 |",129,0,255 . ,R| 00007500 69 73 63 4f 53 25 0d 05 3c 2d e7 20 52 69 73 63 |iscOS%..<-. Risc| 00007510 4f 53 25 3c 31 36 33 20 8c 20 52 69 73 63 4f 53 |OS%<163 . RiscOS| 00007520 25 3d 32 30 30 20 8b 20 52 69 73 63 4f 53 25 3d |%=200 . RiscOS%=| 00007530 33 30 30 0d 05 3d 05 e1 0d 05 3e 04 0d ff |300..=....>...| 0000753e