Home » Archimedes archive » Archimedes World » AW-1991-10.adf » October91 » !AWOct91/Goodies/CardBase/!cardbase/!RunImage

!AWOct91/Goodies/CardBase/!cardbase/!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 » Archimedes World » AW-1991-10.adf » October91
Filename: !AWOct91/Goodies/CardBase/!cardbase/!RunImage
Read OK:
File size: 101D4 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM    !runimage for CardBase
   15REM    Copyright Archimedes World 1991
   20REM    Started 2 July 1990
   30REM    Hours = 43
   40
   50REM    Version 0.01 14 September 1990
   60REM    Bug fix to avoid printer on message
   70
   80REM    Version 0.02 Started 4 March 1991
   90REM    Hours = 6.5
  100REM    Scroll on cursor movement, create warning message
  110REM    Line feed at end of printout, field and heading printout
  120REM    Bug fix on maximum file size, printer_on improved
  130REM    Version 0.3 Started 16th March 1991
  140REM    Hours = 3
  150REM    Give a correct error message when file can not be written and close
  160REM    down reasonably gracefully
  170REM    Holding down select causes the output to pause in screen output
  180REM    clicking select moves on to the next record
  190REM    Field substitution now improved
  200
  210REM    Version 0.31
  220REM    Icon toggles bug corrected
  230
  240
  250
  260ON ERROR CLS:VDU4:REPORT:PRINTERL:PRINT"Press a key":a=GET:VDU5:END
  270
  280PROCenvironment
  290PROCconstants
  300PROCcreate_variables
  310PROCsetup
  320PROCcreateicons
  330PROCread_virus
  340ON ERROR PROCerror
  350IF c$<>"" AND just_started% THEN just_started% = FALSE : PROCload(c$)
  360just_started% = FALSE
  370REPEAT
  380  PROCpoll(1)
  390UNTIL quit
  400  PROCclose_down_file
  410  SYS "Wimp_CloseDown"
  420END
  430
  440
  450DEF PROCcreate_variables
  460DIM message_block% 100
  470DIM name%(max_fields),type%(max_fields),width%(max_fields),dp%(max_fields),min%(max_fields),max%(max_fields),list%(max_fields)
  480DIM record_a$(max_fields), record_b$(max_fields), highest$(max_fields)
  490DIM sort_line$(12), sort_operator$(6)
  500DIM field_used%(max_fields)
  510DIM operator$(50)
  520DIM c_f_v$(max_fields)
  530DIM output_list$(6)
  540DIM filename% 20
  550DIM pathname% 200
  560DIM record_number% 13
  570DIM password% 13
  580DIM in_password% 13
  590DIM valid_name% 20
  600DIM valid_password% 20
  610DIM rec_number% 13
  620DIM valid_type% 20
  630DIM field_des% 2200
  640DIM valid_integer% 10
  650DIM output_list% 500
  660DIM search_list% 200
  670DIM output_icon%(6)
  680DIM sort_field% 300
  690DIM sort_icon%(12)
  700DIM valid_sort% 20
  710DIM display_data% (max_fields*300)
  720DIM display_icon%(max_fields*2 +2)
  730DIM output_display% 2000
  740DIM matches% 20
  750DIM output_rec% 20
  760DIM headings$(max_fields+5)
  770DIM date_stamp% 5
  780DIM create_date% 100
  790DIM f$(max_fields,6)
  800DIM block% 600
  810DIM block_2% 600
  820DIM block_3% 50
  830DIM taskid%4
  840$taskid%="TASK"
  850DIM q% &A00,buffer% &800,endbuf% -1
  860DIM menu 500
  870DIM indirect% 2200
  880DIM caret% 40
  890curbuf%=buffer%
  900
  910
  920$valid_name%="Aa-zA-Z0-9"
  930$valid_password% ="D*"
  940$valid_type% = "ADNTdnt"
  950$valid_integer% = "A0-9"
  960$valid_sort% = "AaADd"
  970 
  980 
  990$filename% = "DataFile"
 1000$pathname% = "DataFile"
 1010$password% = ""
 1020$in_password% = ""
 1030$rec_number% = "0"
 1040$search_list% = ""
 1050 
 1060loaded% = FALSE
 1070
 1080file%   = 0
 1090inhibit% = FALSE
 1100case_sens_icon% = 13
 1110cr_icon%        = 15
 1120tab_icon%       = 17
 1130headings_icon%  = 19
 1140output_file_handle% = 0
 1150just_started% = TRUE
 1160number_of_fields% = 1
 1170
 1180operator$(0)    = "AND"
 1190operator$(1)    = "OR"
 1200operator$(2)    = "NOT"
 1210operator$(3)    = "EOR"
 1220operator$(4)    = ">="
 1230operator$(5)    = "=>"
 1240operator$(6)    = "ALL"
 1250operator$(7)    = "FIELDLIST"
 1260 
 1270number_of_operators% = 7
 1280ENDPROC
 1290
 1300
 1310
 1320DEF PROCconstants
 1330  Wimp    = (1<<18) + (3<<6)
 1340  CreateW = Wimp+1
 1350  OpenW   = Wimp+5
 1360  CloseW  = Wimp+6
 1370  Poll%   = Wimp+7
 1380  RedrawW = Wimp+8
 1390  UpdateW = Wimp+9
 1400  GetR%   = Wimp+10
 1410  GetW    = Wimp+11
 1420  GetP    = Wimp+15
 1430  Drag    = Wimp+16
 1440  CrMenu  = Wimp+20
 1450  DcMenu  = Wimp+21
 1460  max_fields = 19
 1470  over_size  = 1.25
 1480  ALL        = TRUE
 1490ENDPROC
 1500
 1510
 1520
 1530
 1540
 1550
 1560DEF PROCpoll(mask%)
 1570  SYS Poll%,mask%,q% TO reason%
 1580  CASE reason% OF
 1590  WHEN 1 :PROCredraw_window(!q%)
 1600  WHEN 2 :SYS"Wimp_OpenWindow",,q%
 1610  WHEN 3 :PROCcloseawindow(!q%)
 1620  WHEN 6 :PROCbuttons(q%)
 1630  WHEN 7 : IF loaded% THEN
 1640              PROCstart_disk_list
 1650           ELSE
 1660              PROCnew_save
 1670           ENDIF
 1680  WHEN 8 :PROCkey(q%!24)
 1690  WHEN 9 : PROCmenu_select(!q%)
 1700  WHEN 17,18:PROCreceive(q%)
 1710  ENDCASE
 1720ENDPROC
 1730
 1740DEF PROCmenu_select(item%)
 1750CASE item% OF
 1760  WHEN 0 : PROCcreate
 1770  WHEN 1 : IF NOT inhibit% THEN PROCopen_window(display_window%)
 1780  WHEN 2 : IF NOT inhibit% THEN PROCopen_window(sort_window%)
 1790  WHEN 3 : IF NOT inhibit% THEN PROCopen_window(output_window%)
 1800  WHEN 4 : IF NOT inhibit% THEN PROCopen_window(fields_window%)
 1810  WHEN 5 : PROCclose_down_file
 1820  WHEN 7 : quit = TRUE
 1830ENDCASE
 1840ENDPROC
 1850
 1860
 1870
 1880DEF PROCbuttons(b)
 1890LOCAL window%, icon%, button%
 1900   window% = b!12
 1910  icon% = b!16
 1920  button% = b!8
 1930  IF virus_set% AND RND(20) = 1 THEN
 1940     PROCshow_virus
 1950  ELSE
 1960  CASE window% OF
 1970  WHEN -2   : IF button% =2  THEN PROCmenu(b)
 1980  WHEN newfile_window% : IF (button% AND &50) <> 0 THEN PROCstart_drag
 1990  WHEN display_window% : CASE icon% OF
 2000                            WHEN 2 : PROCstart
 2010                            WHEN 3 : PROCend_of_file
 2020                            WHEN 4 : PROCprevious_record
 2030                            WHEN 5 : PROCnext_record
 2040                            WHEN 6 : PROCdelete_record
 2050                         ENDCASE
 2060  WHEN output_window%  : CASE icon% OF
 2070                            WHEN 9  : PROCprinter
 2080                            WHEN 10 : PROCscreen
 2090                            WHEN 11 : PROCfile_output
 2100                         ENDCASE
 2110  WHEN save_window%    : CASE icon% OF
 2120                            WHEN 3  : PROCstart_output_drag
 2130                            WHEN 0  : PROCquick_save
 2140                         ENDCASE
 2150  WHEN screen_window%   : IF icon% = 1 THEN escape% = TRUE
 2160  WHEN sort_window%     : CASE icon% OF
 2170                            WHEN 3 : PROCsort
 2180                          ENDCASE
 2190  ENDCASE
 2200  ENDIF
 2210ENDPROC
 2220
 2230DEF FNread_icon_text(window%,icon%)
 2240!block% = window%
 2250block%!4 = icon%
 2260SYS "Wimp_GetIconState",,block%
 2270= $(block%!28)
 2280
 2290
 2300
 2310DEF PROCopen_window(handle%)
 2320 !block% = handle%
 2330 SYS"Wimp_GetWindowState",,block%
 2340 block%!28 = -1 : REM open on top
 2350 SYS OpenW ,,block%
 2360ENDPROC
 2370
 2380
 2390
 2400DEF PROCkey(k)
 2410LOCAL window%, icon%, new_pos%
 2420SYS "Wimp_ProcessKey",k
 2430IF k = 13  OR k = &18E OR k = &18F OR k = &19D OR k = &19E THEN
 2440   SYS"Wimp_GetCaretPosition",,caret%
 2450   window% = caret%!0
 2460   icon%   = caret%!4
 2470   new_pos% = icon%
 2480   CASE window% OF
 2490   WHEN newfile_window% : IF icon% = nf_1% THEN
 2500                             new_pos% = nf_2%
 2510                           ELSE
 2520                             new_pos% = nf_1%
 2530                           ENDIF
 2540                           PROCset_caret(newfile_window%,new_pos%)
 2550                           SYS"Wimp_ForceRedraw",fields_window%,0,-100,1000,0
 2560    WHEN output_window% : IF k = 13 OR k =&18E THEN
 2570                             IF icon% < output_icon%(6) THEN
 2580                               new_pos%=icon%+1
 2590                             ELSE
 2600                               new_pos% = output_icon%(0)
 2610                             ENDIF
 2620                           ELSE
 2630                             IF icon% > output_icon%(0) THEN
 2640                               new_pos%=icon%-1
 2650                             ELSE
 2660                               new_pos% = output_icon%(6)
 2670                             ENDIF
 2680                           ENDIF
 2690                           PROCset_caret(output_window%,new_pos%)
 2700
 2710    WHEN sort_window%    : IF k = 13  THEN
 2720                             IF icon% < sort_icon%(11) THEN
 2730                               new_pos%=icon%+1
 2740                             ELSE
 2750                               new_pos% = sort_icon%(0)
 2760                             ENDIF
 2770                             PROCset_caret(sort_window%,new_pos%)
 2780                           ENDIF
 2790                           IF k =&18F THEN
 2800                             IF icon% > sort_icon%(1) THEN
 2810                               new_pos%=icon%-2
 2820                             ELSE
 2830                               new_pos% = sort_icon%(11)
 2840                             ENDIF
 2850                             PROCset_caret(sort_window%,new_pos%)
 2860                           ENDIF
 2870                           IF k =&18E THEN
 2880                             IF icon% < sort_icon%(10) THEN
 2890                               new_pos%=icon%+2
 2900                             ELSE
 2910                               new_pos% = sort_icon%(0)
 2920                             ENDIF
 2930                             PROCset_caret(sort_window%,new_pos%)
 2940                           ENDIF
 2950    WHEN fields_window%   : IF k= 13 OR k= &19D THEN
 2960                             IF icon% < list%(max_fields) THEN
 2970                               new_pos%=icon%+1
 2980                              ELSE
 2990                               new_pos% = name%(0)
 3000                              ENDIF
 3010                              PROCset_caret(fields_window%,new_pos%)
 3020                            ENDIF
 3030                            IF k =&18F THEN
 3040                             IF icon% >= name%(1) THEN
 3050                               new_pos%=icon%-7
 3060                             PROCset_caret(fields_window%,new_pos%)
 3070                             ENDIF
 3080                           ENDIF
 3090                           IF k =&18E THEN
 3100                             IF icon% < name%(max_fields) THEN
 3110                               new_pos%=icon%+7
 3120                             PROCset_caret(fields_window%,new_pos%)
 3130                             ENDIF
 3140                           ENDIF
 3150                           IF k= &19C THEN
 3160                             IF icon% > name%(0) THEN
 3170                               new_pos%=icon%+1
 3180                              PROCset_caret(fields_window%,new_pos%)
 3190                            ENDIF
 3200                            ENDIF
 3210    WHEN display_window%   :IF k = 13 OR k =&18E THEN
 3220                             IF icon% <display_icon%(number_of_fields%-1)THEN
 3230                               new_pos%=icon%+2
 3240                             ELSE
 3250                               new_pos% = display_icon%(0)
 3260                               IF k = 13 THEN
 3270                                 PROCset_caret(display_window%,new_pos%)
 3280                                 PROCnext_record
 3290                               ENDIF
 3300                             ENDIF
 3310                           ELSE
 3320                             IF icon% > display_icon%(0) THEN
 3330                               new_pos%=icon%-2
 3340                             ELSE
 3350                               new_pos% = display_icon%(number_of_fields%-1)
 3360                             ENDIF
 3370                           ENDIF
 3380                           PROCset_caret(display_window%,new_pos%)
 3390    WHEN password_window% : IF k= 13 THEN PROCpassword
 3400    WHEN save_window%     : IF k=13 THEN PROCquick_save
 3410    ENDCASE
 3420ENDIF
 3430ENDPROC
 3440
 3450DEF PROCset_caret(window%,new_pos%)
 3460LOCAL minx%,maxx%,miny%,maxy%,new_scroll_x%,scroll_x%,new_scroll_y%,scroll_y%
 3470    !block_2% = window%
 3480    SYS"Wimp_GetWindowState",,block_2%
 3490    minx% =  block_2%!20
 3500    maxy% =  block_2%!24
 3510    maxx% =  block_2%!12 - block_2%!4 +  block_2%!20
 3520    miny% =  block_2%!8 - block_2%!16 +  block_2%!24
 3530    scroll_x% = block_2%!20
 3540    scroll_y% = block_2%!24
 3550    SYS"Wimp_SetCaretPosition",window%,new_pos%,,,-1,-1
 3560    SYS"Wimp_GetCaretPosition",,block_2%
 3570    caret_x% = block_2%!8
 3580    caret_y% = block_2%!12
 3590    new_scroll_x%= scroll_x%
 3600    new_scroll_y%= scroll_y%
 3610    IF caret_x%-64 < minx% THEN new_scroll_x% = caret_x%-50
 3620    IF caret_x%+64 > maxx% THEN new_scroll_x% = caret_x%-50
 3630    IF caret_y%-64 < miny% THEN new_scroll_y% = caret_y%+(maxy%-miny%)DIV2
 3640    IF caret_y%+64 > maxy% THEN new_scroll_y% = caret_y%+(maxy%-miny%)DIV2
 3650    IF (new_scroll_x%<> scroll_x%) OR (new_scroll_y%<> scroll_y%) THEN
 3660       !block_2% = window%
 3670       SYS"Wimp_GetWindowState",,block_2%
 3680       block_2%!20 = new_scroll_x%
 3690       block_2%!24 = new_scroll_y%
 3700       block_2%!28 = -1
 3710       SYS"Wimp_OpenWindow",,block_2%
 3720    ENDIF
 3730ENDPROC
 3740
 3750
 3760
 3770DEF PROCmenu(b)
 3780flag1% = &7000021
 3790flag2% = &7400021
 3800IF loaded% SWAP flag1%,flag2%
 3810$menu="CardBase"
 3820menu!12=&70207
 3830menu!16=156
 3840menu!20=40
 3850menu!24=0
 3860
 3870
 3880
 3890menu!28 = &00
 3900menu!32 = -1
 3910menu!36 =  flag1%
 3920$(menu+40) = "Create"
 3930
 3940menu!52 = &00
 3950menu!56 = -1
 3960menu!60 =  flag2%
 3970$(menu+64) = "Disp Edit"
 3980
 3990menu!76 = &00
 4000menu!80 = -1
 4010menu!84 = flag2%
 4020$(menu+88) = "Sort"
 4030
 4040 
 4050menu!100 = &00
 4060menu!104 = -1
 4070menu!108 = flag2%
 4080$(menu+112) = "Output"
 4090 
 4100menu!124 = &00
 4110menu!128 = -1
 4120menu!132 = flag2%
 4130$(menu+136) = "Fields"
 4140
 4150menu!148 = &00
 4160menu!152 = -1
 4170menu!156 = flag2%
 4180$(menu+160) = "Close"
 4190
 4200
 4210
 4220menu!172 = &00
 4230menu!176 = info_window%
 4240menu!180 = &7000021
 4250$(menu+184) = "Info"
 4260
 4270
 4280menu!196=&80
 4290menu!200= -1
 4300menu!204=&7000021
 4310$(menu+208)="Quit"
 4320
 4330SYS "Wimp_CreateMenu",,menu,!b-64,136
 4340ENDPROC
 4350
 4360
 4370
 4380DEF PROCcloseawindow(handle%)
 4390!block%=handle%
 4400 SYS"Wimp_CloseWindow",,block%
 4410IF handle% = output_window% THEN PROCcloseawindow(save_window%)
 4420  REM recursive bit
 4430ENDPROC
 4440
 4450DEF PROCreceive(q%)
 4460CASE q%!16 OF
 4470WHEN 0:PROCfinish:END
 4480WHEN 2: PROCdatasave(q%)
 4490WHEN 3,5 : IF q%!12 = 0 THEN PROCdataload(q%)
 4500ENDCASE
 4510ENDPROC
 4520 
 4530
 4540
 4550
 4560DEF PROCsetup
 4570SYS "Wimp_Initialise",200,!taskid%,"CardBase" TO version%
 4580SYS "Wimp_OpenTemplate",,"<CardBase$Dir>.Templates"
 4590SYS "Wimp_LoadTemplate",,q%,indirect%,indirect%+199,-1,"display",0
 4600SYS "Wimp_CreateWindow",,q% TO display_window%
 4610SYS "Wimp_LoadTemplate",,q%,indirect%+200,indirect%+399,-1,"fields",0
 4620SYS "Wimp_CreateWindow",,q% TO fields_window%
 4630SYS "Wimp_LoadTemplate",,q%,indirect%+400,indirect%+599,-1,"output",0
 4640SYS "Wimp_CreateWindow",,q% TO output_window%
 4650SYS "Wimp_LoadTemplate",,q%,indirect%+600,indirect%+799,-1,"proginfo",0
 4660SYS "Wimp_CreateWindow",,q% TO info_window%
 4670SYS "Wimp_LoadTemplate",,q%,indirect%+800,indirect%+999,-1,"sort",0
 4680SYS "Wimp_CreateWindow",,q% TO sort_window%
 4690SYS "Wimp_LoadTemplate",,q%,indirect%+1000,indirect%+1199,-1,"create",0
 4700SYS "Wimp_CreateWindow",,q% TO newfile_window%
 4710SYS "Wimp_LoadTemplate",,q%,indirect%+1200,indirect%+1399,-1,"password",0
 4720SYS "Wimp_CreateWindow",,q% TO password_window%
 4730SYS "Wimp_LoadTemplate",,q%,indirect%+1400,indirect%+1599,-1,"screen",0
 4740SYS "Wimp_CreateWindow",,q% TO screen_window%
 4750SYS "Wimp_LoadTemplate",,q%,indirect%+1600,indirect%+1850,-1,"save",0
 4760q%!64 = 1
 4770SYS "Wimp_CreateWindow",,q% TO save_window%
 4780SYS "Wimp_CloseTemplate"
 4790S%=OPENIN"<CardBase$Dir>.!Sprites"
 4800T%=EXT#S%+160
 4810CLOSE#S%
 4820DIM sprites% T%
 4830!sprites%=T%:sprites%!8=1
 4840SYS "OS_SpriteOp",&109,sprites%
 4850SYS "OS_SpriteOp",&10A,sprites%,"<CardBase$Dir>.!Sprites"
 4860iccalc%=FNiconbar
 4870quit = FALSE
 4880abort% = FALSE
 4890!q% = save_window%
 4900q%!4 = 2
 4910SYS"Wimp_GetIconState",,q%
 4920text_file_name% = q%!28
 4930$text_file_name% = "Output"
 4940ENDPROC
 4950
 4960
 4970 
 4980DEF FNiconbar
 4990!q%=-1
 5000q%!4=0
 5010q%!8=0
 5020q%!12=63
 5030q%!16=68
 5040q%!20=&2102
 5050spname$="!CardBase"
 5060DIM q%!24 (LENspname$+1)
 5070$(q%!24)=spname$
 5080q%!28=sprites%
 5090q%!32=LENspname$+1
 5100SYS "Wimp_CreateIcon",,q% TO ic%
 5110=ic%
 5120
 5130
 5140
 5150
 5160
 5170
 5180
 5190DEF PROCerror
 5200IF output_file_handle% > 0 THEN
 5210   CLOSE# output_file_handle%
 5220   output_file_handle%=0
 5230ENDIF
 5240abort% = FALSE
 5250CASE ERR OF
 5260  WHEN 17 : PROCerror_message("Escape pressed"):PROCquick_close
 5270  WHEN 67778 : PROCerror_message("The file you are attempting to load is already open. To cure this problem dismount the disc and try again")
 5280  WHEN 193   : IF FNcancel_message("The file can not be written to. Check the file/disk is not write protected and the disk is in the drive. OK to continue. Cancel to quit the program") = 2 THEN
 5290                PROCquick_close
 5300              ELSE
 5310                PROCemergency_close
 5320              ENDIF
 5330  WHEN 1196  :IF FNcancel_message("The file can not be found and data has been lost.  OK to continue. Cancel to quit the program") = 2 THEN
 5340                PROCquick_close
 5350              ELSE
 5360                PROCemergency_close
 5370              ENDIF
 5380  WHEN 222 : IF FNcancel_message("The file has been closed by another application or the disk dismounted. OK to continue. Cancel to quit the program") = 2             THEN
 5390                PROCquick_close
 5400             ELSE
 5410                PROCemergency_close
 5420             ENDIF
 5430  OTHERWISE
 5440    IF FNcancel_message(REPORT$+" (internal error) "+STR$(ERL)+" / " +STR$(ERR)+" OK to contine. Cancel to quit the program")= 2 THEN PROCquick_close
 5450ENDCASE
 5460ENDPROC
 5470
 5480
 5490
 5500
 5510
 5520
 5530DEF PROCerror_message(text$)
 5540SYS"Hourglass_Smash"
 5550SYS"Wimp_DragBox",,-1
 5560!block%=ERR
 5570$(block%+4)=text$
 5580SYS "Wimp_ReportError",block%,1,"!CardBase"
 5590ENDPROC
 5600
 5610
 5620DEF PROCmessage(text$)
 5630SYS"Hourglass_Smash"
 5640SYS"Wimp_DragBox",,-1
 5650!block%=ERR
 5660$(block%+4)=text$
 5670SYS "Wimp_ReportError",block%,17,"!CardBase"
 5680ENDPROC
 5690
 5700
 5710
 5720DEF FNcancel_message(text$)
 5730REM returns 0,1,2 for none, ok, cancel
 5740LOCAL r0,r1
 5750SYS"Hourglass_Smash"
 5760SYS"Wimp_DragBox",,-1
 5770!block%=ERR
 5780$(block%+4)=text$
 5790SYS "Wimp_ReportError",block%,23,"!CardBase" TO r0,r1
 5800=r1
 5810ENDPROC
 5820
 5830
 5840DEF PROCglass(o%)
 5850IF o% THEN
 5860  SYS"Hourglass_On"
 5870ELSE
 5880  SYS"Hourglass_Off"
 5890ENDIF
 5900ENDPROC
 5910
 5920
 5930DEF PROCfinish
 5940SYS "Wimp_CloseDown"
 5950ENDPROC
 5960
 5970
 5980
 5990
 6000DEF PROCredraw_window(handle%)
 6010!block% = handle%
 6020SYS"Wimp_RedrawWindow",,block% TO more%
 6030WHILE more%
 6040  SYS "Wimp_GetRectangle",,block% TO more%
 6050ENDWHILE
 6060ENDPROC
 6070
 6080 
 6090DEF FNicon(whandle%,ix%,iy%,iw%,ih%,flag%, text$, d1%, d2%, d3%)
 6100block%!0 = whandle%
 6110block%!4 = ix%
 6120block%!8 = iy%
 6130block%!12 = ix% + iw%
 6140block%!16 = iy% + ih%
 6150block%!20 = flag%
 6160IF d1% = 0 THEN
 6170 $(block%!24) = text$
 6180ELSE
 6190   block%!24 = d1%
 6200   block%!28 = d2%
 6210   block%!32 = d3%
 6220ENDIF
 6230SYS"Wimp_CreateIcon",,block% TO ihandle%
 6240=ihandle%
 6250
 6260
 6270
 6280 
 6290
 6300DEF PROCcreateicons
 6310REM windowhandle,minx,miny,length, height, flags, sprite,text, valid, length
 6320REM text, no background is &7000511
 6330REM text, with background is &7000135
 6340REM writable icon, validated, in box is &700F53D
 6350nf_1% = FNicon(newfile_window%,200,-54,200,48,&700F53D,"",filename%,valid_name%,12)
 6360nf_2% =FNicon(newfile_window%,200,-108,200,48,&700F53D,"",password%,valid_password%,12)
 6370pw% =FNicon(password_window%,400,-200,200,48,&700F53D,"",in_password%,valid_password%,12)
 6380d% =FNicon(display_window%,270,-62,200,48,&7000135,"",filename%,-1,12)
 6390d% =FNicon(fields_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
 6400d% =FNicon(output_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
 6410d% =FNicon(screen_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
 6420d% =FNicon(sort_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
 6430d% =FNicon(display_window%,700,-62,180,48,&7000135,"",rec_number%,-1,12)
 6440
 6450FOR a% = field_des% TO field_des% + 2196 STEP 4
 6460  !a% = &D0D0D0D    : REM SET THE AYYAY TO EMPTY
 6470NEXT
 6480
 6490FOR a% = 0 TO 496 STEP 4
 6500  output_list%!a% = &D0D0D0D
 6510NEXT
 6520
 6530FOR a% = 0 TO 296 STEP 4
 6540  sort_field%!a% = &D0D0D0D
 6550NEXT
 6560
 6570FOR a% = 0 TO 1996 STEP 4
 6580  output_display%!a% = &D0D0D0D
 6590NEXT
 6600
 6610FOR a% = 0 TO 196 STEP 4
 6620  search_list%!a% = &D0D0D0D
 6630NEXT
 6640
 6650FOR a% = 0 TO 1996 STEP 4
 6660  output_display%!a% = &D0D0D0D
 6670NEXT
 6680
 6690
 6700
 6710FOR row% = 0 TO max_fields
 6720name%(row%) = FNicon(fields_window%,50,-250-row%*60,200,48,&700F535,"",field_des%+100*row%,valid_name%,20)
 6730type%(row%) = FNicon(fields_window%,330,-250-row%*60,40,48,&700F535,"",field_des%+22+100*row%,valid_type%,2)
 6740width%(row%) = FNicon(fields_window%,470,-250-row%*60,80,48,&700F535,"",field_des%+26+100*row%,valid_integer%,3)
 6750dp%(row%) = FNicon(fields_window%,600,-250-row%*60,80,48,&700F535,"",field_des%+32+100*row%,valid_integer%,2)
 6760min%(row%) = FNicon(fields_window%,730,-250-row%*60,130,48,&700F535,"",field_des%+35+100*row%,-1,12)
 6770max%(row%) = FNicon(fields_window%,870,-250-row%*60,130,48,&700F535,"",field_des%+47+100*row%,-1,12)
 6780list%(row%) =FNicon(fields_window%,1010,-250-row%*60,250,48,&700F535,"",field_des%+60+100*row%,-1,38)
 6790NEXT
 6800 
 6810y% = -120
 6820FOR a% = 0 TO 5
 6830  output_icon%(a%) =  FNicon(output_window%,200,y%-60*a%,700,48,&700F535,"",output_list%+70*a%,-1,60)
 6840NEXT
 6850output_icon%(6) =FNicon(output_window%,280,-480,620,48,&700F535,"",search_list%,-1,200)
 6860 
 6870
 6880
 6890y% = -260
 6900FOR a% = 0 TO 10 STEP 2
 6910  sort_icon%(a%) =FNicon(sort_window%,20,y%-30*a%,300,48,&700F535,"",sort_field%+25*a%,-1,20)
 6920 sort_icon%(a%+1) =FNicon(sort_window%,450,y%-30*a%,50,48,&700F535,"",sort_field%+22+25*a%,valid_sort%,2)
 6930NEXT
 6940
 6950
 6960
 6970REM this is the output display dindow
 6980
 6990y% = -120
 7000FOR a% = 0 TO 5
 7010 d% =  FNicon(screen_window%,200,y%-60*a%,1200,48,&7000511,"",output_display%+300*a%,-1,250)
 7020NEXT
 7030d% =FNicon(screen_window%,620,-62,150,48,&7000135,"",output_rec%,-1,12)
 7040d% =FNicon(screen_window%,900,-62,150,48,&7000135,"",matches%,-1,12)
 7050 
 7060
 7070REM d% = FNicon(function%,16,-50,250,48,&7000511,"",t1%,-1,20)
 7080ENDPROC
 7090
 7100
 7110
 7120
 7130DEF PROCcreate
 7140PROCcount_fields
 7150IF number_of_fields% = 0 THEN
 7160  PROCempty_fields
 7170ELSE
 7180   PROCopen_window(newfile_window%)
 7190   PROCopen_window(fields_window%)
 7200   IF FNcancel_message("Field description is not empty. Click CANCEL and drag the file icon to a directory viewer to save it. To clear the current field window click on OK") =1 THEN
 7210     PROCempty_fields
 7220   ENDIF
 7230ENDIF
 7240ENDPROC
 7250
 7260DEF PROCempty_fields
 7270   FOR a% = field_des% TO field_des% + 2196 STEP 4
 7280     !a% = &D0D0D0D    : REM SET THE AYYAY TO EMPTY
 7290   NEXT
 7300   $filename% = "DataFile"
 7310   $pathname% = "DataFile"
 7320   $password% = ""
 7330   $rec_number% = "0"
 7340   $search_list% = ""
 7350   PROCcloseawindow(newfile_window%)
 7360   PROCcloseawindow(fields_window%)
 7370   PROCopen_window(newfile_window%)
 7380   PROCopen_window(fields_window%)
 7390   PROCset_caret(newfile_window%,nf_1%)
 7400ENDPROC
 7410
 7420DEF PROCextract_field_description
 7430LOCAL rec%,pos%
 7440FOR rec% = 0 TO max_fields
 7450  pos% = field_des%+rec%*100
 7460  f$(rec%,0) = $pos%
 7470  pos% = field_des%+rec%*100+22
 7480  f$(rec%,1) = $pos%
 7490  pos% = field_des%+rec%*100+26
 7500  f$(rec%,2) = $pos%
 7510  pos% = field_des%+rec%*100+32
 7520  f$(rec%,3) = $pos%
 7530  pos% = field_des%+rec%*100+35
 7540  f$(rec%,4) = $pos%
 7550  pos% = field_des%+rec%*100+47
 7560  f$(rec%,5) = $pos%
 7570  pos% = field_des%+rec%*100+60
 7580  f$(rec%,6) = $pos%
 7590  IF LEN f$(rec%,0) > 0 THEN
 7600      field_used%(rec%) = TRUE
 7610  ELSE
 7620      field_used%(rec%) = FALSE
 7630  ENDIF
 7640NEXT
 7650d=FNField_des_ok
 7660ENDPROC
 7670 
 7680
 7690DEF FNfield_name_ok
 7700LOCAL rec%, rec1%, rec2%, length%, field%
 7710ok=TRUE
 7720FOR rec% = 0 TO max_fields
 7730   length% = 0
 7740   FOR field% = 0 TO 6
 7750     length% = length% + LEN(f$(rec%,field%))
 7760   NEXT
 7770   IF length% > 0 AND LEN(f$(rec%,0))=0 THEN
 7780      ok = FALSE
 7790      PROCerror_message("Field number "+STR$(rec%+1)+" does not have a name")
 7800   ENDIF
 7810NEXT
 7820FOR rec1% = 0 TO max_fields-1
 7830   FOR rec2% = rec1%+1 TO max_fields
 7840     IF f$(rec1%,0) = f$(rec2%,0) AND LEN(f$(rec2%,0)) >0 THEN
 7850       ok = FALSE
 7860       PROCerror_message("There are two fields with the name "+f$(rec2%,0))
 7870     ENDIF
 7880   NEXT
 7890NEXT
 7900=ok
 7910 
 7920
 7930
 7940DEF FNfield_len_ok
 7950LOCAL rec%
 7960FOR rec% = 0 TO max_fields
 7970 IF LEN(f$(rec%,0))>0 THEN
 7980   IF VAL(f$(rec%,2))=0 THEN
 7990      PROCerror_message("Field '"+f$(rec%,0)+"' must have a width greater than zero")
 8000   ENDIF
 8010   IF (f$(rec%,1)="N" OR f$(rec%,1)="n") AND VAL(f$(rec%,2)) > 20 THEN
 8020      PROCerror_message("Field '"+f$(rec%,0)+"' is numeric so its width must not exceed 20")
 8030   ENDIF
 8040  ENDIF
 8050NEXT
 8060=TRUE
 8070
 8080
 8090DEF FNfield_type_ok
 8100LOCAL rec%, ok%
 8110ok% = TRUE
 8120FOR rec% = 0 TO max_fields
 8130   IF LEN(f$(rec%,0))>0 AND LEN(f$(rec%,1))=0 THEN
 8140      PROCerror_message("Field "+f$(rec%,0)+" does not have a type")
 8150      ok% = FALSE
 8160   ENDIF
 8170NEXT
 8180=ok%
 8190
 8200
 8210DEF FNfield_max_ok
 8220LOCAL rec%, ok%
 8230FOR rec% = 0 TO max_fields
 8240 IF LEN(f$(rec%,0))>0 AND (f$(rec%,1) ="N" OR f$(rec%,1) ="n") THEN
 8250  IF NOT FNnumeric(f$(rec%,4)) THEN
 8260    PROCerror_message("Field "+f$(rec%,0)+" does not have a numeric minimum")
 8270  ENDIF
 8280 ENDIF
 8290NEXT
 8300FOR rec% = 0 TO max_fields
 8310 IF LEN(f$(rec%,0))>0 AND (f$(rec%,1) ="N" OR f$(rec%,1) ="n") THEN
 8320  IF NOT FNnumeric(f$(rec%,5)) THEN
 8330    PROCerror_message("Field "+f$(rec%,0)+" does not have a numeric maximum")
 8340  ENDIF
 8350 ENDIF
 8360NEXT
 8370=ok%
 8380
 8390
 8400DEF FNfield_date_ok
 8410LOCAL rec%, ok%
 8420FOR rec% = 0 TO max_fields
 8430 IF LEN(f$(rec%,0))>0 AND (f$(rec%,1) ="D" OR f$(rec%,1) ="d")  THEN
 8440  IF NOT FNvalid_date(f$(rec%,4)) AND LEN(f$(rec%,4))>0  THEN
 8450    PROCerror_message("Field "+f$(rec%,0)+" does not have a correctly formed minimum date")
 8460  ENDIF
 8470 ENDIF
 8480NEXT
 8490FOR rec% = 0 TO max_fields
 8500 IF LEN(f$(rec%,0))>0 AND (f$(rec%,1) ="d" OR f$(rec%,1) ="D") THEN
 8510  IF NOT FNvalid_date(f$(rec%,5)) AND LEN(f$(rec%,5))>0 THEN
 8520    PROCerror_message("Field "+f$(rec%,0)+" does not have a correctly formed maximum date")
 8530  ENDIF
 8540 ENDIF
 8550NEXT
 8560=ok%
 8570
 8580
 8590
 8600
 8610DEF FNField_des_ok
 8620IF FNfield_name_ok AND FNfield_len_ok AND FNfield_type_ok AND FNfield_max_ok AND FNfield_date_ok    THEN
 8630  = TRUE
 8640ELSE
 8650  =FALSE
 8660ENDIF
 8670 
 8680
 8690DEF FNnumeric(text$)
 8700LOCAL i%, ok%
 8710ok%=TRUE
 8720IF LEN(text$) > 0 THEN
 8730  FOR i% = 1 TO LEN(text$)
 8740    c$ = MID$(text$,i%,1)
 8750    IF c$ <"." OR c$>"9" OR c$="/" THEN ok% = FALSE
 8760  NEXT
 8770ENDIF
 8780= ok%
 8790
 8800DEF FNvalid_date(date$)
 8810LOCAL ok%, day%, month%, year%
 8820ok% = TRUE               : REM allow zero null entries
 8830IF LEN(date$) >0 THEN
 8840IF LEN(date$) <>8 THEN
 8850 ok% = FALSE
 8860ELSE
 8870  day% = VAL(LEFT$(date$,2))
 8880  month% = VAL(MID$(date$,4,2))
 8890  year%  = VAL(MID$(date$,7,2))
 8900  IF year% MOD 4 = 0 THEN
 8910     days_in_feb% = 29
 8920  ELSE
 8930     days_in_feb% = 28
 8940  ENDIF
 8950  IF (day% > 31) OR (day% < 1) THEN ok% = FALSE
 8960  IF (month% >12) OR (month% < 1) THEN ok% = FALSE
 8970  CASE month% OF
 8980    WHEN 4,6,9,11 : IF day% > 30 THEN ok% = FALSE
 8990    WHEN 2        : IF day% > days_in_feb% THEN ok% = FALSE
 9000  ENDCASE
 9010ENDIF
 9020ENDIF
 9030=ok%
 9040
 9050
 9060DEF PROCstart_drag
 9070  LOCAL wex%,wey%
 9080  !block% = newfile_window%
 9090  SYS"Wimp_GetWindowState",,block%
 9100  wex% = block%!4 - block%!20
 9110  wey% = block%!16 - block%!24
 9120  block%!4 = 2 : REM icon handle for drag icon
 9130  SYS"Wimp_GetIconState",,block%
 9140  !block% = newfile_window%
 9150  block%!4 = 5
 9160  block%!8 = block%!8 +wex%
 9170  block%!12 = block%!12 +wey%
 9180  block%!16 = block%!16 +wex%
 9190  block%!20 = block%!20 +wey%
 9200  block%!24 = 0
 9210  block%!28 = 0
 9220  block%!32 = &7FFFFFFF
 9230  block%!36 = &7FFFFFFF
 9240  SYS"Wimp_DragBox",,block%
 9250ENDPROC
 9260
 9270DEF PROCcount_fields
 9280PROCextract_field_description
 9290number_of_fields% = 0
 9300FOR rec% = 0 TO max_fields
 9310  IF LEN(f$(rec%,0)) > 0 THEN
 9320     number_of_fields% +=1
 9330  ENDIF
 9340NEXT
 9350ENDPROC
 9360
 9370
 9380DEF PROCnew_save
 9390PROCcount_fields
 9400IF number_of_fields% = 0 THEN
 9410   PROCerror_message("There must be at least one field defined")
 9420ELSE
 9430SYS"Wimp_GetPointerInfo",,block%
 9440block%!20 = 64
 9450block%!32 = 0
 9460block%!36 = 1
 9470block%!40 = block%!12
 9480block%!44 = block%!16
 9490block%!48 = !block%
 9500block%!52 = block%!4
 9510block%!56 = 10000 : REM size of the file
 9520block%!60 = &778  : REM file type of the file
 9530$(block%+64) = $filename%
 9540?(block%+65+LEN($filename%)) = 0
 9550SYS"Wimp_SendMessage",17,block%+20,block%!12,block%!16
 9560ENDIF
 9570ENDPROC
 9580
 9590DEF FNget_name(P%)
 9600A$=""
 9610WHILE ?P%<>0 AND ?P%<> 13
 9620 A$ = A$+CHR$?P%:P%+=1
 9630ENDWHILE
 9640=A$
 9650
 9660
 9670DEF FNleaf(path$)
 9680WHILE INSTR(path$,".")
 9690path$=MID$(path$,INSTR(path$,".")+1)
 9700ENDWHILE
 9710=path$
 9720
 9730
 9740DEF PROCdatasave(b)
 9750IF loaded% THEN
 9760FOR i% = 0 TO 96 STEP 4
 9770  message_block%!i% = b!i%
 9780NEXT
 9790REM copy the message block since wimp poll currupts it!
 9800PROCproduce_output(FNget_name(message_block%+44))
 9810IF FNget_name(message_block%+44) <> "<Wimp$Scrap>" THEN
 9820  $text_file_name%  = FNget_name(message_block%+44)
 9830ENDIF
 9840message_block%!12=message_block%!8
 9850message_block%!16=3
 9860!message_block% = 64
 9870SYS"Wimp_SendMessage",17,message_block%,message_block%!20,message_block%!24
 9880
 9890ELSE
 9900PROCsaveit(FNget_name(b+44))
 9910$pathname% = FNget_name(b+44)
 9920$filename% = FNleaf($pathname%)
 9930b!12=b!8
 9940b!16=3
 9950!b = 64
 9960SYS"Wimp_SendMessage",17,b,b!20,b!24
 9970ENDIF
 9980ENDPROC
 9990
10000
10010
10020DEF PROCsaveit(name$)
10030REM This saves a file the first time
10040LOCAL  rec%
10050file% = OPENOUT(name$)
10060FOR a% = field_des% TO field_des% + 2196 STEP 4
10070  PRINT#file%,!a%
10080NEXT
10090c_f_v$() = ""
10100number_of_fields% = 0
10110number_of_records% = 1
10120record_size% = 0
10130FOR rec% = 0 TO max_fields
10140  record_size%=record_size%+VAL(f$(rec%,2))+2
10150  IF LEN(f$(rec%,0)) > 0 THEN
10160     number_of_fields% +=1
10170  ENDIF
10180NEXT
10190record_size%=20+record_size%*over_size
10200PRINT #file%,$password%
10210PRINT #file%, $filename%
10220PRINT #file%, number_of_records%
10230PRINT #file%, record_size%
10240PRINT #file%, number_of_fields%
10250PRINT #file%, 1 : REM record number
10260
10270FOR rec% = 0 TO max_fields
10280  PRINT #file%, field_used%(rec%)
10290NEXT
10300
10310FOR a% = output_list% TO output_list%+496 STEP 4
10320  PRINT #file%,!a%
10330NEXT
10340
10350FOR a% = search_list% TO search_list%+196 STEP 4
10360  PRINT #file%,!a%
10370NEXT
10380
10390FOR a% = sort_field% TO sort_field%+296 STEP 4
10400  PRINT #file%,!a%
10410NEXT
10420
10430
10440
10450
10460
10470PROCwrite_record(1)
10480CLOSE #file%
10490file% = 0
10500OSCLI("settype "+name$+" 778")
10510PROCcloseawindow(newfile_window%)
10520PROCcloseawindow(fields_window%)
10530loaded% = FALSE
10540PROCload(name$)
10550ENDPROC
10560
10570
10580
10590DEF PROCload(name$)
10600IF loaded% THEN
10610   PROCerror_message("The file '"+$filename%+"' is still open and must be closed before a new file can be loaded")
10620ELSE
10630  IF FNfull_access(name$) THEN
10640     PROCcloseawindow(newfile_window%)
10650     PROCcloseawindow(fields_window%)
10660     current_file_name$ = name$+CHR$0
10670     SYS"OS_File",5,name$,,,,,0 TO ,,r2%,r3%
10680     date_stamp%!0 = r3%
10690     date_stamp%?4 = r2% AND &FF
10700     SYS"OS_ConvertStandardDateAndTime",date_stamp%,create_date%,100
10710     create_date$=LEFT$($create_date%,20)
10720     file% = OPENUP(name$)
10730     FOR a% = field_des% TO field_des% + 2196 STEP 4
10740       INPUT#file%,!a%
10750     NEXT
10760     INPUT #file%,$password%
10770     INPUT #file%, $filename%
10780     INPUT #file%, number_of_records%
10790     INPUT #file%, record_size%
10800     INPUT #file%, number_of_fields%
10810     INPUT #file%, current_rec%
10820     FOR rec% = 0 TO max_fields
10830        INPUT #file%, field_used%(rec%)
10840     NEXT
10850     FOR a% = output_list% TO output_list%+496 STEP 4
10860       INPUT #file%,!a%
10870     NEXT
10880     FOR a% = search_list% TO search_list%+196 STEP 4
10890       INPUT #file%,!a%
10900     NEXT
10910     FOR a% = sort_field% TO sort_field%+296 STEP 4
10920       INPUT #file%,!a%
10930     NEXT
10940     PROCread_record(current_rec%)
10950     $rec_number% = STR$(current_rec%)
10960     loaded% = TRUE
10970     PROCextract_field_description
10980     PROCcreate_display_icons
10990     PROCpassword_check
11000     IF NOT inhibit% PROCopen_window(display_window%)
11010   ELSE
11020        PROCerror_message("This file can not be loaded since the file is locked or does not have read or write access")
11030
11040   ENDIF
11050ENDIF
11060ENDPROC
11070
11080
11090
11100
11110DEF PROCcreate_display_icons
11120REM change validation string to match the type definition
11130LOCAL d%, f%,l%,w%
11140FOR f% = 0 TO number_of_fields% -1
11150display_icon%(f%+number_of_fields%)=FNicon(display_window%,50,-300-f%*60,300,48,&7000511,"",field_des%+100*f%,-1,20)
11160l% = VAL(f$(f%,2))       : REM set length of box to a suitable value
11170w% = l%*16 +48
11180IF w%>400 THEN w%=400
11190display_icon%(f%) = FNicon(display_window%,400,-300-f%*60,w%,48,&700F535,"",display_data%+300*f%,-1,l%+1)
11200NEXT
11210ENDPROC
11220
11230DEF PROCdestroy_display_icons
11240FOR f% = 2*number_of_fields% -1 TO 0 STEP -1
11250  IF display_icon%(f%) > 0 THEN
11260    !block% = display_window%
11270    block%!4 = display_icon%(f%)
11280    SYS"Wimp_DeleteIcon",,block%
11290  ENDIF
11300NEXT
11310ENDPROC
11320
11330 
11340
11350DEF PROCenvironment
11360SYS "OS_GetEnv" TO c$
11370c$=RIGHT$(c$,LENc$-20)
11380WHILE  LEFT$(c$,1) <>" " AND LENc$ <>0
11390  c$=RIGHT$(c$,LENc$-1)
11400ENDWHILE
11410IF c$ = " " THEN c$ =""
11420ENDPROC
11430 
11440
11450
11460
11470DEF PROCackload(b)
11480b!12=b!8
11490b!16 = 4
11500!b = 64
11510SYS"Wimp_SendMessage",17,b,b!4
11520ENDPROC
11530
11540DEF PROCdataload(b)
11550IF b!40 = &778 THEN
11560  PROCload(FNget_name(b+44))
11570  PROCackload(b)
11580ENDIF
11590ENDPROC
11600
11610
11620
11630
11640
11650
11660DEF PROCextract_record_data
11670REM This takes the data from the icons and puts them into an array
11680LOCAL f%
11690FOR f% = 0 TO number_of_fields%-1
11700  p% =display_data%+f%*300
11710  c_f_v$(f%) = $p%
11720NEXT
11730ENDPROC
11740 
11750DEF PROCclear_record
11760LOCAL f%
11770FOR f% = 0 TO number_of_fields%-1
11780  p% =display_data%+f%*300
11790  $p% = ""
11800NEXT
11810ENDPROC
11820
11830
11840DEF FNdate(date$)
11850  =VAL(LEFT$(date$,2))+100*VAL(MID$(date$,4,2))+10000*VAL(RIGHT$(date$,2))
11860
11870
11880
11890DEF FNvalid_min(value$,type$,min$)
11900LOCAL ok%
11910ok% = TRUE
11920IF LEN min$ >0 AND LEN value$ > 0 THEN
11930CASE  type$ OF
11940  WHEN "t","T" : IF value$ < min$ THEN ok% = FALSE
11950  WHEN "N","n" : IF VAL(value$) < VAL(min$) THEN ok% = FALSE
11960  WHEN "D","d" : IF FNdate(value$) < FNdate(min$) THEN ok% = FALSE
11970ENDCASE
11980ENDIF
11990=ok%
12000
12010DEF FNvalid_max(value$,type$,max$)
12020LOCAL ok%
12030ok% = TRUE
12040IF LEN max$ >0 AND LEN value$ > 0 THEN
12050CASE  type$ OF
12060  WHEN "t","T" : IF value$ > max$ THEN ok% = FALSE
12070  WHEN "N","n" : IF VAL(value$) > VAL(max$) THEN ok% = FALSE
12080  WHEN "D","d" : IF FNdate(value$) > FNdate(max$) THEN ok% = FALSE
12090ENDCASE
12100ENDIF
12110=ok%
12120
12130DEF FNvalid_list(value$,type$,list$)
12140LOCAL ok%
12150ok% = TRUE
12160IF LEN list$ >0 THEN
12170  IF INSTR(list$,value$) = 0 THEN ok% = FALSE
12180ENDIF
12190=ok%
12200
12210
12220DEF FNvalid_record
12230ok% = TRUE
12240f% = -1
12250WHILE ok% AND f% < max_fields
12260  f%+=1
12270  IF field_used%(f%) THEN
12280     IF (f$(f%,1) ="d" OR f$(f%,1) ="D")AND NOT FNvalid_date(c_f_v$(f%)) THEN
12290       ok% = FALSE
12300       PROCerror_message("'"+f$(f%,0)+"' has an invalid date")
12310     ELSE
12320     IF NOT FNvalid_min(c_f_v$(f%),f$(f%,1),f$(f%,4)) THEN
12330       ok%=FALSE
12340       PROCerror_message("'"+f$(f%,0)+"' has a value which is too low" )
12350     ELSE
12360     IF NOT FNvalid_max(c_f_v$(f%),f$(f%,1),f$(f%,5)) THEN
12370       ok%=FALSE
12380       PROCerror_message("'"+f$(f%,0)+"' has a value which is too high" )
12390     ELSE
12400     IF NOT FNvalid_list(c_f_v$(f%),f$(f%,1),f$(f%,6)) THEN
12410       ok%=FALSE
12420     PROCerror_message("'"+f$(f%,0)+"' has a value which is not in the list")
12430     ELSE
12440       IF f$(f%,1) = "N" OR f$(f%,1)="n" AND VAL(f$(f%,3)) > 0 THEN
12450           A% = @%
12460           @% =&0102000A + VAL(f$(f%,3))*&100
12470           IF LENc_f_v$(f%) >0 THEN
12480             c_f_v$(f%) = STR$(VAL(c_f_v$(f%)))
12490           ENDIF
12500           @%=A%
12510           IF RIGHT$(c_f_v$(f%),1) ="." THEN
12520             c_f_v$(f%)= LEFT$(c_f_v$(f%))
12530           ENDIF
12540     ENDIF
12550    ENDIF
12560     ENDIF
12570  ENDIF
12580    ENDIF
12590     ENDIF
12600ENDWHILE
12610=ok%
12620
12630DEF FNrecord_space
12640LOCAL total%
12650total% = 0
12660FOR f% = 0 TO max_fields
12670  total% = total% + LENc_f_v$(f%)
12680NEXT
12690=total%
12700
12710
12720DEF PROCnext_record
12730PROCextract_record_data
12740IF FNvalid_record THEN
12750 IF NOT(FNrecord_space = 0 AND VAL($rec_number%) = number_of_records%) THEN
12760  PROCwrite_record(VAL($rec_number%))
12770  $rec_number% = STR$(VAL($rec_number%)+1)
12780  IF VAL($rec_number%) > number_of_records% THEN
12790     number_of_records%+=1
12800     PROCclear_record
12810  ELSE
12820     PROCread_record(VAL($rec_number%))
12830  ENDIF
12840 ENDIF
12850ENDIF
12860PROCupdate_display
12870ENDPROC
12880
12890DEF PROCprevious_record
12900PROCextract_record_data
12910IF FNvalid_record THEN
12920  PROCwrite_record(VAL($rec_number%))
12930  IF VAL($rec_number%) > 1 THEN
12940  $rec_number% = STR$(VAL($rec_number%)-1)
12950  PROCread_record(VAL($rec_number%))
12960  ELSE
12970    VDU7
12980  ENDIF
12990ENDIF
13000PROCupdate_display
13010ENDPROC
13020
13030DEF PROCstart
13040PROCextract_record_data
13050IF FNvalid_record THEN
13060  PROCwrite_record(VAL($rec_number%))
13070  IF VAL($rec_number%) > 1 THEN
13080  $rec_number% = STR$(1)
13090  PROCread_record(VAL($rec_number%))
13100  ELSE
13110    VDU7
13120  ENDIF
13130ENDIF
13140PROCupdate_display
13150ENDPROC
13160
13170
13180
13190
13200DEF PROCend_of_file
13210PROCextract_record_data
13220IF FNvalid_record THEN
13230  PROCwrite_record(VAL($rec_number%))
13240  IF VAL($rec_number%)  < number_of_records% THEN
13250  $rec_number% = STR$( number_of_records%)
13260  PROCread_record(VAL($rec_number%))
13270  ELSE
13280    VDU7
13290  ENDIF
13300ENDIF
13310PROCupdate_display
13320ENDPROC
13330
13340DEF PROCupdate_display
13350   SYS"Wimp_ForceRedraw",display_window%,0,-1000,1000,0
13360   SYS"Wimp_GetCaretPosition",,caret%
13370   window% = caret%!0
13380   icon%   = caret%!4
13390REM   PROCset_caret(window%,icon%)
13400ENDPROC
13410
13420
13430
13440DEF PROCread_record(position%)
13450LOCAL p%, pointer%, f%
13460c_f_v$() = ""
13470pointer% = 5000+position%*record_size%
13480PTR#file% = pointer%
13490bad_field% = FALSE
13500LOCAL ERROR
13510f% = 0
13520WHILE f% <(number_of_fields%  )  AND NOT bad_field%
13530  ON ERROR LOCAL bad_field% = TRUE
13540  IF NOT bad_field% THEN
13550    INPUT #file%, c_f_v$(f%)
13560    p% =display_data%+f%*300
13570    $p% =c_f_v$(f%)
13580    f% +=1
13590  ENDIF
13600ENDWHILE
13610RESTORE ERROR
13620ENDPROC
13630
13640
13650DEF PROCwrite_record(position%)
13660LOCAL p%, pointer%
13670pointer% = 5000+position%*record_size%
13680PTR#file% = pointer%
13690FOR f% = 0 TO number_of_fields%-1
13700 PRINT #file%, c_f_v$(f%)
13710NEXT
13720ENDPROC
13730 
13740
13750
13760DEF PROCemergency_close
13770    file% = 0
13780    loaded% = FALSE
13790    inhibit% = FALSE
13800    PROCcloseawindow(display_window%)
13810    PROCcloseawindow(sort_window%)
13820    PROCcloseawindow(output_window%)
13830    PROCcloseawindow(fields_window%)
13840    PROCcloseawindow(password_window%)
13850    PROCcloseawindow(screen_window%)
13860    PROCcloseawindow(save_window%)
13870    PROCdestroy_display_icons
13880    PROCempty_fields
13890    PROCcloseawindow(newfile_window%)
13900    PROCcloseawindow(fields_window%)
13910ENDPROC
13920 
13930
13940
13950DEF PROCclose_down_file
13960IF file% <> 0 THEN
13970  PTR#file% = 0
13980  number_of_fields% = 0
13990  FOR rec% = 0 TO max_fields
14000  IF LEN(f$(rec%,0)) > 0 THEN
14010     number_of_fields% +=1
14020  ENDIF
14030  NEXT
14040  IF FNfield_length_ok THEN
14050    FOR a% = field_des% TO field_des% + 2196 STEP 4
14060      PRINT#file%,!a%
14070    NEXT
14080    PRINT #file%,$password%
14090    PRINT #file%, $filename%
14100    PRINT #file%, number_of_records%
14110    PRINT #file%, record_size%
14120    PRINT #file%, number_of_fields%
14130    PRINT #file%, VAL($rec_number%)
14140    FOR rec% = 0 TO max_fields
14150      PRINT #file%, field_used%(rec%)
14160    NEXT
14170
14180    FOR a% = output_list% TO output_list%+496 STEP 4
14190        PRINT #file%,!a%
14200    NEXT
14210    FOR a% = search_list% TO search_list%+196 STEP 4
14220       PRINT #file%,!a%
14230    NEXT
14240    FOR a% = sort_field% TO sort_field%+296 STEP 4
14250       PRINT #file%,!a%
14260    NEXT
14270    PROCextract_record_data
14280    PROCwrite_record(VAL($rec_number%))
14290    CLOSE #file%
14300    file% = 0
14310    loaded% = FALSE
14320    inhibit% = FALSE
14330    PROCcloseawindow(display_window%)
14340    PROCcloseawindow(sort_window%)
14350    PROCcloseawindow(output_window%)
14360    PROCcloseawindow(fields_window%)
14370    PROCcloseawindow(password_window%)
14380    PROCcloseawindow(screen_window%)
14390    PROCcloseawindow(save_window%)
14400    PROCdestroy_display_icons
14410    PROCempty_fields
14420    PROCcloseawindow(newfile_window%)
14430    PROCcloseawindow(fields_window%)
14440  ELSE
14450    PROCerror_message("The field descriptor has been changed and is now too long. Either reduce the number of fields or reduce their length")
14460    quit% = FALSE
14470  ENDIF
14480ENDIF
14490ENDPROC
14500
14510
14520
14530
14540DEF FNfield_length_ok
14550PROCextract_field_description
14560total% = 0
14570control% = 0
14580FOR f% = 0 TO max_fields
14590   total% = total% + VAL(f$(f%,2))
14600   IF LEN(f$(f%,0)) > 0 THEN control%+=2
14610NEXT
14620IF total% > record_size% - control% THEN
14630=FALSE
14640ELSE
14650=TRUE
14660
14670
14680DEF PROCpassword_check
14690  IF $password% <> "" THEN
14700    $in_password% = ""
14710    PROCopen_window(password_window%)
14720    inhibit% = TRUE
14730  ENDIF
14740ENDPROC
14750
14760
14770
14780DEF PROCpassword
14790  PROCcloseawindow(password_window%)
14800  IF LEFT$($password%,4) = LEFT$($in_password%,4) THEN
14810    inhibit% = FALSE
14820    PROCopen_window(display_window%)
14830  ELSE
14840    PROCerror_message("Incorrect password. File closing")
14850    PROCclose_down_file
14860  ENDIF
14870ENDPROC
14880
14890
14900DEF FNupper(text$)
14910LOCAL result$,i%,c$
14920result$=""
14930FOR i% = 1 TO LENtext$
14940 c$=MID$(text$,i%,1)
14950 IF c$>="a" AND c$<="z" THEN c$=CHR$(ASC(c$)AND&DF)
14960 result$=result$+c$
14970NEXT
14980=result$
14990
15000DEF FNreplace(object$,target$,by$)
15010LOCAL start%, position%
15020start% = INSTR(object$,target$)
15030WHILE start%
15040position% = LEN(object$)-LEN(target$)-start%+1
15050object$ = LEFT$(object$,start%-1)+by$+RIGHT$(object$,position%)
15060start% = INSTR(object$,target$,start%+LEN(by$))
15070ENDWHILE
15080=object$
15090
15100DEF FNoutput_upper(text$)
15110LOCAL result$,i%,c$
15120quote% = FALSE
15130result$=""
15140FOR i% = 1 TO LENtext$
15150 c$=MID$(text$,i%,1)
15160 IF c$ = CHR$34 THEN quote% = NOT quote%
15170 IF c$="," THEN c$ = "+"
15180 IF c$=";" AND i% < LENtext$ AND i% > 1 THEN c$="+"+CHR$34+" "+CHR$34+"+"
15190   IF NOT quote% THEN
15200    IF c$>="a" AND c$<="z" THEN c$=CHR$(ASC(c$)AND&DF)
15210   ENDIF
15220 result$=result$+c$
15230NEXT
15240=result$
15250
15260
15270
15280
15290
15300DEF PROCcreate_field_output
15310LOCAL field%, i%
15320headings$() = ""
15330headings$(0)= "Field    Name                Type Width Decimals Minimum Maximum List"
15340FOR field% = 0 TO number_of_fields%
15350  headings$(field%+2)=FNpad(STR$(field%+1),9)+FNpad(f$(field%,0),20)+FNpad(f$(field%,1),5)+FNpad(f$(field%,2),7)+FNpad(f$(field%,3),9)+FNpad(f$(field%,4),8)+FNpad(f$(field%,5),8)+f$(field%,6)
15360NEXT
15370ENDPROC
15380
15390DEF FNpad(string$,length%)
15400string$+=STRING$(length%," ")
15410string$ = LEFT$(string$,length%)
15420=string$
15430
15440
15450
15460
15470
15480
15490DEF PROCinsert_date
15500LOCAL l$,r$,position%
15510position% = INSTR(search_string$,FNupper(f$(f%,0)))
15520WHILE position% > 0
15530  position% = position% + LEN f$(f%,0)
15540  WHILE (MID$(search_string$,position%,1) <"0" OR MID$(search_string$,position%,1) >"1") AND position% < LENsearch_string$
15550     position% = position% +1
15560  ENDWHILE
15570  search_string$ = LEFT$(search_string$,position%-1)+"FNdate("+CHR$34+MID$(search_string$,position%,8)+CHR$34+")"+RIGHT$(search_string$,LENsearch_string$-position%-8)
15580l$ = LEFT$(search_string$,position%)
15590r$ = RIGHT$(search_string$,LEN(search_string$)-position%)
15600l$= FNreplace(l$,FNupper(f$(f%,0)),"FNdate(c_f_v$("+STR$(f%)+"))")
15610search_string$ = l$ + r$
15620position% = INSTR(search_string$,FNupper(f$(f%,0)))
15630ENDWHILE
15640ENDPROC
15650
15660
15670
15680 
15690
15700DEF FNvalid_search_criteria
15710LOCAL total%, ok%, list%, d, FIELDLIST
15720ok% = TRUE
15730FIELDLIST = TRUE
15740IF LEN search_string$ = 0 THEN
15750   PROCerror_message("A search string must be entered. Use ALL to list all records")
15760ok%=FALSE
15770ENDIF
15780total% = 0
15790   FOR list% = 0 TO 5
15800     total% = total% + LEN (output_list$(list%))
15810   NEXT
15820IF total% = 0 THEN
15830ok%=FALSE
15840   PROCerror_message("At least one of the output lines must contain a field name.")
15850ENDIF
15860LOCAL ERROR
15870ON ERROR LOCAL ok% = FALSE :PROCerror_message("The search string contains a syntax error")
15880IF ok% THEN d=EVAL(search_string$)
15890RESTORE ERROR
15900=ok%
15910 
15920DEF PROCscreen
15930error% = FALSE
15940PROCextract_record_data
15950IF FNvalid_record THEN
15960  PROCwrite_record(VAL($rec_number%)) : REM save the latest record
15970  IF FNextract_output_list_ok THEN
15980  IF FNcreate_search_string_ok THEN
15990  IF FNvalid_search_criteria THEN
16000  FOR list% = 0 TO 5
16010    pointer% = output_display%+list%*300
16020    $pointer% = ""
16030  NEXT
16040  PROCopen_window(screen_window%)
16050  rec% = 1
16060  match% = 0
16070  $output_rec% = STR$rec%
16080  $matches% = STR$match%
16090  SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
16100  escape% = FALSE
16110  PROCpoll(0)
16120  WHILE rec% <= number_of_records% AND NOT escape%
16130    PROCread_record(rec%)
16140    IF NOT FNicon_set(output_window%,case_sens_icon%) THEN PROCconvert_record_case
16150    IF EVAL(search_string$) THEN
16160    PROCread_record(rec%) : REM because the case may be changed
16170    IF FNicon_set(output_window%,tab_icon%) THEN PROCtabulate
16180      match% +=1
16190      $output_rec% = STR$rec%
16200      $matches% = STR$match%
16210       FOR list% = 0 TO 5
16220        pointer% = output_display%+list%*300
16230        IF LEN(output_list$(list%)) >0 THEN
16240          PROCdo_list
16250        ELSE
16260          $pointer% = ""
16270         ENDIF
16280       NEXT
16290      SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
16300      REPEAT
16310        PROCglass(TRUE)
16320        MOUSE x,y,b
16330      UNTIL b = 0 OR b = 5
16340      PROCglass(FALSE)
16350    ELSE
16360      $output_rec% = STR$rec%
16370      SYS"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
16380    ENDIF
16390    rec% +=1
16400    PROCpoll(0)
16410
16420  ENDWHILE
16430  PROCread_record(VAL($rec_number%)) : REM reload the latest record
16440  IF NOT error% THEN
16450  IF escape%  THEN
16460      PROCmessage("Stop selected. Search incomplete. "+STR$(match%)+" matches have been found so far")
16470    ELSE
16480      PROCmessage("Search complete. "+STR$(match%)+" matches have been found")
16490  ENDIF
16500  ENDIF
16510  ENDIF
16520  PROCcloseawindow(screen_window%)
16530ENDIF
16540ENDIF
16550ENDIF
16560PROCcloseawindow(save_window%)
16570ENDPROC
16580
16590 
16600DEF PROCbuild_headings
16610LOCAL i%,pointer%, print_time$
16620  !date_stamp%= 3
16630  SYS"OS_Word",14,date_stamp%
16640  SYS"OS_ConvertStandardDateAndTime",date_stamp%,create_date%,100
16650  print_time$ =LEFT$($create_date%,20)
16660  headings$() = ""
16670  headings$(0)= "Cardbase Printout"
16680  headings$(2)= "Filename       :       "+$filename%
16690  headings$(3)= "Time created   :       "+create_date$
16700  headings$(4)= "Time printed   :       "+print_time$
16710  headings$(5)= "File size      :       "+STR$(number_of_records%)+" records"
16720  IF FNicon_set(output_window%,case_sens_icon%) THEN
16730    headings$(6) = "Case sensitive :       ON"
16740  ELSE
16750    headings$(6) = "Case sensitive :       OFF"
16760  ENDIF
16770  IF FNicon_set(output_window%,tab_icon%) THEN
16780    headings$(7) = "Tabulation     :       ON"
16790  ELSE
16800    headings$(7) = "Tabulation     :       OFF"
16810  ENDIF
16820  headings$(8) = "Search string  :       "+$search_list%
16830  FOR i% = 0 TO 5
16840    pointer% = output_list%+i%*70
16850    headings$(9+i%) = "Line x         :       "+$pointer%
16860    MID$(headings$(9+i%),6,1)= STR$(i%+1)
16870  NEXT
16880ENDPROC
16890
16900DEF PROCprinter
16910LOCAL i%
16920error% = FALSE
16930IF FNprinter_on THEN
16940   IF LEFT$($search_list%,9) ="fieldlist" THEN
16950     PROCwrite_field_list_to_printer
16960   ELSE
16970     PROCextract_record_data
16980     IF FNvalid_record THEN
16990       PROCwrite_record(VAL($rec_number%)) : REM save the latest record
17000       IF FNextract_output_list_ok THEN
17010       IF FNcreate_search_string_ok THEN
17020       IF FNvalid_search_criteria THEN
17030         FOR list% = 0 TO 5
17040           pointer% = output_display%+list%*300
17050           $pointer% = ""
17060         NEXT
17070         IF FNicon_set(output_window%,headings_icon%) THEN
17080           PROCbuild_headings
17090           FOR i% = 0 TO 15
17100             PROCprint(headings$(i%))
17110           NEXT
17120         ENDIF
17130         PROCopen_window(screen_window%)
17140         rec% = 1
17150         match% = 0
17160         $output_rec% = STR$rec%
17170         $matches% = STR$match%
17180         SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
17190         escape% = FALSE
17200         PROCpoll(0)
17210         WHILE rec% <= number_of_records% AND NOT escape%
17220           PROCread_record(rec%)
17230           IF NOT FNicon_set(output_window%,case_sens_icon%) THEN PROCconvert_record_case
17240           IF EVAL(search_string$) THEN
17250             PROCread_record(rec%) : REM because the case may be changed
17260             IF FNicon_set(output_window%,tab_icon%) THEN PROCtabulate
17270             match% +=1
17280             $output_rec% = STR$rec%
17290             $matches% = STR$match%
17300             FOR list% = 0 TO 5
17310               pointer% = output_display%+list%*300
17320               IF LEN(output_list$(list%)) >0 THEN
17330                 PROCdo_list
17340                 PROCprint($pointer%)
17350               ELSE
17360                 $pointer% = ""
17370               ENDIF
17380             NEXT
17390             SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
17400           ELSE
17410             $output_rec% = STR$rec%
17420             SYS"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
17430           ENDIF
17440           rec% +=1
17450           PROCpoll(0)
17460         ENDWHILE
17470         PROCread_record(VAL($rec_number%)) : REM reload the latest record
17480         IF NOT error% THEN
17490           IF escape%  THEN
17500             PROCmessage("Stop selected. Search incomplete. "+STR$(match%)+" matches have been found so far")
17510           ELSE
17520             PROCmessage("Search complete. "+STR$(match%)+" matches have been found")
17530           ENDIF
17540         ENDIF
17550         PROCcloseawindow(screen_window%)
17560       ENDIF
17570     ENDIF
17580    ENDIF
17590    ENDIF
17600   ENDIF
17610ENDIF
17620PROCcloseawindow(save_window%)
17630ENDPROC
17640
17650
17660
17670
17680DEF PROCdo_list
17690   LOCAL ERROR
17700   ON ERROR LOCAL error% =TRUE
17710   IF NOT error% THEN
17720       $pointer% = EVAL(output_list$(list%))
17730   ELSE
17740     PROCcloseawindow(screen_window%)
17750     PROCerror_message("Line "+STR$(list%+1)+" contains an unknown field name or a syntax error")
17760     escape% = TRUE
17770   ENDIF
17780   RESTORE ERROR
17790ENDPROC
17800
17810 
17820
17830
17840
17850DEF PROCfile_output
17860  PROCopen_window(save_window%)
17870  SYS"Wimp_SetCaretPosition",save_window%,2,,,-1,-1
17880ENDPROC
17890 
17900 
17910DEF PROCprint(text$)
17920LOCAL i%
17930VDU2
17940FOR i%= 1 TO LENtext$
17950  VDU1,ASC(MID$(text$,i%,1))
17960NEXT
17970VDU1,13,1,10
17980VDU3
17990ENDPROC
18000
18010
18020
18030DEF FNprinter_on
18040LOCAL ok%, cancelled%
18050cancelled% = FALSE
18060ok% = FALSE
18070REPEAT
18080   SYS"OS_Byte",21,3
18090   VDU 2,1,65,1,127,3
18100   SYS"OS_Byte",152,3 TO ;flags%
18110   flags% = flags% AND 2
18120   IF flags% <> 0 THEN
18130     ok%=TRUE
18140   ELSE
18150      IF FNcancel_message("Printer is not responding. Click on OK to try again. Click on cancel to abandon printing") = 2 THEN
18160        cancelled%=TRUE
18170      ENDIF
18180   ENDIF
18190UNTIL cancelled% OR ok%
18200=ok%
18210
18220
18230
18240
18250
18260
18270DEF PROCconvert_record_case
18280LOCAL f%
18290FOR f% = 0 TO number_of_fields%
18300  c_f_v$(f%) = FNupper(c_f_v$(f%))
18310NEXT
18320ENDPROC
18330
18340
18350DEF PROCstart_output_drag
18360  LOCAL wex%,wey%
18370  IF (button% AND &50) <> 0 THEN
18380  !block% = save_window%
18390  SYS"Wimp_GetWindowState",,block%
18400  wex% = block%!4 - block%!20
18410  wey% = block%!16 - block%!24
18420  block%!4 = 3 : REM icon handle for drag icon
18430  SYS"Wimp_GetIconState",,block%
18440  !block% = save_window%
18450  block%!4 = 5
18460  block%!8 = block%!8 +wex%
18470  block%!12 = block%!12 +wey%
18480  block%!16 = block%!16 +wex%
18490  block%!20 = block%!20 +wey%
18500  block%!24 = 0
18510  block%!28 = 0
18520  block%!32 = &7FFFFFFF
18530  block%!36 = &7FFFFFFF
18540  SYS"Wimp_DragBox",,block%
18550  ENDIF
18560ENDPROC
18570
18580
18590DEF PROCstart_disk_list
18600SYS"Wimp_GetPointerInfo",,block%
18610block%!20 = 64
18620block%!32 = 0
18630block%!36 = 1
18640block%!40 = block%!12
18650block%!44 = block%!16
18660block%!48 = !block%
18670block%!52 = block%!4
18680block%!56 = 10000 : REM size of the file
18690block%!60 = &FFF  : REM file type of the file
18700$(block%+64) = FNleaf($text_file_name%)
18710?(block%+65+LENFNleaf($text_file_name%)) = 0
18720SYS"Wimp_SendMessage",17,block%+20,block%!12,block%!16
18730ENDPROC
18740
18750
18760
18770DEF PROCproduce_output(filename$)
18780LOCAL i%
18790error% = FALSE
18800IF LEFT$($search_list%,9) ="fieldlist" THEN
18810  PROCcloseawindow(save_window%)
18820  PROCwrite_field_list_to_disc
18830ELSE
18840  PROCextract_record_data
18850  IF FNvalid_record AND FNoverwrite_ok(filename$) THEN
18860    PROCwrite_record(VAL($rec_number%)) : REM save the latest record
18870    IF FNextract_output_list_ok THEN
18880    IF FNcreate_search_string_ok THEN
18890    IF FNvalid_search_criteria THEN
18900      FOR list% = 0 TO 5
18910        pointer% = output_display%+list%*300
18920        $pointer% = ""
18930      NEXT
18940      output_file_handle% = OPENOUT(filename$)
18950      IF FNicon_set(output_window%,headings_icon%) THEN
18960        PROCbuild_headings
18970        FOR i% = 0 TO 15
18980          PROCprint_to_the_disk(headings$(i%))
18990        NEXT
19000      ENDIF
19010      PROCopen_window(screen_window%)
19020      rec% = 1
19030      match% = 0
19040      $output_rec% = STR$rec%
19050      $matches% = STR$match%
19060      SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
19070      escape% = FALSE
19080      PROCpoll(0)
19090      WHILE rec% <= number_of_records% AND NOT escape%
19100        PROCread_record(rec%)
19110        IF NOT FNicon_set(output_window%,case_sens_icon%) THEN PROCconvert_record_case
19120        IF EVAL(search_string$) THEN
19130          PROCread_record(rec%) : REM because the case may be changed
19140          IF FNicon_set(output_window%,tab_icon%) THEN PROCtabulate
19150          match% +=1
19160          $output_rec% = STR$rec%
19170          $matches% = STR$match%
19180          FOR list% = 0 TO 5
19190            pointer% = output_display%+list%*300
19200            IF LEN(output_list$(list%)) >0 THEN
19210              PROCdo_list
19220              PROCprint_to_the_disk($pointer%)
19230            ELSE
19240              $pointer% = ""
19250            ENDIF
19260          NEXT
19270          SYS"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
19280        ELSE
19290          $output_rec% = STR$rec%
19300          SYS"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
19310        ENDIF
19320        rec% +=1
19330        PROCpoll(0)
19340      ENDWHILE
19350      PROCread_record(VAL($rec_number%)) : REM reload the latest record
19360      IF NOT error% THEN
19370        IF escape%  THEN
19380          PROCmessage("Stop selected. Search incomplete. "+STR$(match%)+" matches have been found so far")
19390        ELSE
19400          PROCmessage("Search complete. "+STR$(match%)+" matches have been found")
19410        ENDIF
19420      ENDIF
19430      PROCcloseawindow(screen_window%)
19440      PROCcloseawindow(save_window%)
19450      CLOSE# output_file_handle%
19460      OSCLI("settype "+filename$+" text")
19470    ENDIF
19480    PROCcloseawindow(save_window%)
19490    ENDIF
19500   ENDIF
19510  ENDIF
19520ENDIF
19530ENDPROC
19540
19550
19560
19570DEF PROCwrite_field_list_to_disc
19580IF FNoverwrite_ok(filename$) THEN
19590  output_file_handle% = OPENOUT(filename$)
19600    PROCcreate_field_output
19610    FOR i% = 0 TO 15
19620       PROCprint_to_the_disk(headings$(i%))
19630    NEXT
19640  CLOSE# output_file_handle%
19650  OSCLI("settype "+filename$+" text")
19660ENDIF
19670ENDPROC
19680
19690
19700DEF PROCwrite_field_list_to_printer
19710    PROCcreate_field_output
19720    FOR i% = 0 TO 15
19730       PROCprint(headings$(i%))
19740    NEXT
19750ENDPROC
19760
19770
19780DEF PROCprint_to_the_disk(text$)
19790LOCAL i%
19800IF LENtext$ > 0 THEN
19810FOR i%= 1 TO LENtext$
19820  BPUT#output_file_handle%,ASC(MID$(text$,i%,1))
19830NEXT
19840ENDIF
19850  IF FNicon_set(output_window%,cr_icon%) THEN BPUT #output_file_handle%,13
19860  BPUT #output_file_handle%,10
19870ENDPROC
19880
19890
19900DEF PROCquick_save
19910  IF INSTR($text_file_name%,".") = 0 THEN
19920    PROCerror_message("To save, drag the icon to a directory viewer.")
19930  ELSE
19940    PROCproduce_output($text_file_name%)
19950  ENDIF
19960ENDPROC
19970
19980
19990
20000DEF FNoverwrite_ok(filename$)
20010LOCAL name$, type%
20020name$ = filename$ + CHR$0
20030SYS"OS_File",5,name$,,,,,0 TO type%
20040CASE type% OF
20050  WHEN 0 : = TRUE
20060  WHEN 1 : result% = FNcancel_message("A file of this name exists. Click on OK to replace it. Click on CANCEL to abort search")
20070           IF result% = 1 THEN
20080              = TRUE
20090           ELSE
20100              = FALSE
20110           ENDIF
20120  WHEN 2 : PROCerror_message("This is a directory name"):= FALSE
20130ENDCASE
20140
20150DEF FNfile_size
20160LOCAL r0,r1,r2
20170SYS"OS_Args",2,file% TO r0,r1,r2
20180=r2
20190
20200DEF PROCdelete_record
20210LOCAL present%
20220IF number_of_records% = 1 THEN
20230 PROCerror_message("The file contains only one record. This can not be deleted")
20240ELSE
20250  present% = VAL($rec_number%)
20260  IF present% = number_of_records% THEN
20270    number_of_records%=number_of_records%-1
20280    $rec_number% = STR$(number_of_records%)
20290    PROCread_record(VAL($rec_number%))
20300    PROCupdate_display
20310  ELSE
20320    proceed% = FALSE
20330    IF number_of_records% - present% < 500 THEN
20340       proceed% = TRUE
20350    ELSE
20360      IF FNcancel_message("This may take some time. Select OK to continue") = 1 THEN
20370       proceed% = TRUE
20380    ENDIF
20390    ENDIF
20400    IF proceed% THEN
20410    PROCglass(TRUE)
20420    total% = number_of_records% - present%
20430 
20440    done% = 0
20450    FOR i% = present% TO number_of_records% -1
20460       PROCread_record(i%+1)
20470       PROCwrite_record(i%)
20480       SYS"Hourglass_Percentage", done%/total% * 100
20490       done% +=1
20500    NEXT
20510    PROCglass(FALSE)
20520    number_of_records%=number_of_records%-1
20530    PROCread_record(present%)
20540    PROCupdate_display
20550    ENDIF
20560ENDIF
20570ENDIF
20580ENDPROC
20590
20600DEF PROCtabulate
20610LOCAL f%
20620FOR f% = 0 TO number_of_fields%
20630  c_f_v$(f%)=c_f_v$(f%)+STRING$(VALf$(f%,2)," ")
20640  c_f_v$(f%)=LEFT$( c_f_v$(f%),VALf$(f%,2))
20650NEXT
20660ENDPROC
20670 
20680
20690
20700DEF PROCsort
20710LOCAL memory%
20720memory_sort% = TRUE
20730IF FNextract_sort_condition THEN
20740  PROCextract_record_data
20750  PROCwrite_record(VAL($rec_number%))
20760  size% = FNfile_size + 5000
20770
20780  LOCAL ERROR
20790  ON ERROR LOCAL  memory_sort% = FALSE
20800  IF memory_sort% THEN
20810     SYS"OS_Module",6,,,size% TO r0,r1,memory%
20820     RESTORE ERROR
20830        PROCload_file_to_memory
20840
20850     PROCmemory_sort
20860
20870        PROCsave_file_from_memory
20880     SYS"OS_Module",7,,memory%
20890  ELSE
20900     RESTORE ERROR
20910     VDU7
20920     PROCdiscsort
20930  ENDIF
20940  PROCread_record(VAL($rec_number%))
20950  PROCupdate_display
20960ENDIF
20970ENDPROC
20980
20990
21000DEF PROCmemory_sort
21010PROCglass(TRUE)
21020max = number_of_records%
21030FOR current = 1 TO max-1
21040   PROCrecall_from_memory_a(current)
21050   highest = current               :REM record_b is highest so far
21060   PROCrecall_from_memory_b(current)
21070   FOR i = current +1 TO max
21080     PROCrecall_from_memory_a(i)
21090     IF FNcompare THEN
21100       highest = i
21110       PROCrecall_from_memory_b(highest)
21120     ENDIF
21130   NEXT
21140   PROCrecall_from_memory_a(current)
21150   PROCstore_in_memory_a(highest)
21160   PROCstore_in_memory_b(current)
21170   REM SWAP r(current),r(highest)
21180   SYS"Hourglass_Percentage", current/max * 100
21190   PROCpoll(0)
21200NEXT
21210PROCglass(FALSE)
21220ENDPROC
21230
21240
21250
21260DEF PROCdiscsort
21270max = number_of_records%
21280PROCglass(TRUE)
21290FOR current = 1 TO max-1
21300   PROCread_record_a(current)
21310   highest = current               :REM record_b is highest so far
21320   PROCread_record_b(current)
21330   FOR i = current +1 TO max
21340     PROCread_record_a(i)
21350     IF FNcompare THEN
21360       highest = i
21370       PROCread_record_b(highest)
21380     ENDIF
21390   NEXT
21400   PROCread_record_a(current)
21410   PROCwrite_record_a(highest)
21420   PROCwrite_record_b(current)
21430   REM SWAP r(current),r(highest)
21440   SYS"Hourglass_Percentage", current/max * 100
21450   PROCpoll(0)
21460NEXT
21470PROCglass(FALSE)
21480ENDPROC
21490
21500 
21510
21520
21530
21540 
21550
21560
21570
21580DEF PROCread_record_a(position%)
21590LOCAL  pointer%, f%
21600record_a$()=""
21610pointer% = 5000+position%*record_size%
21620PTR#file% = pointer%
21630bad_field% = FALSE
21640LOCAL ERROR
21650f% = 0
21660WHILE f% <(number_of_fields%  )  AND NOT bad_field%
21670  ON ERROR LOCAL bad_field% = TRUE
21680  IF NOT bad_field% THEN
21690    INPUT #file%, record_a$(f%)
21700    f% +=1
21710  ENDIF
21720ENDWHILE
21730RESTORE ERROR
21740ENDPROC
21750
21760
21770DEF PROCwrite_record_a(position%)
21780LOCAL pointer%
21790pointer% = 5000+position%*record_size%
21800PTR#file% = pointer%
21810FOR f% = 0 TO number_of_fields%-1
21820 PRINT #file%, record_a$(f%)
21830NEXT
21840ENDPROC
21850
21860DEF PROCread_record_b(position%)
21870LOCAL  pointer%, f%
21880record_b$() = ""
21890pointer% = 5000+position%*record_size%
21900PTR#file% = pointer%
21910bad_field% = FALSE
21920LOCAL ERROR
21930f% = 0
21940WHILE f% <(number_of_fields%  )  AND NOT bad_field%
21950  ON ERROR LOCAL bad_field% = TRUE
21960  IF NOT bad_field% THEN
21970    INPUT #file%, record_b$(f%)
21980    f% +=1
21990  ENDIF
22000ENDWHILE
22010RESTORE ERROR
22020ENDPROC
22030
22040
22050DEF PROCwrite_record_b(position%)
22060LOCAL pointer%
22070pointer% = 5000+position%*record_size%
22080PTR#file% = pointer%
22090FOR f% = 0 TO number_of_fields%-1
22100 PRINT #file%, record_b$(f%)
22110NEXT
22120ENDPROC
22130
22140
22150
22160DEF FNextract_sort_condition
22170LOCAL a%, left$, right$, f%
22180ok% = TRUE
22190FOR a% = 0 TO 5
22200  sort_line$(a%) = FNupper($(sort_field%+50*a%))
22210  pointer% = sort_field%+50*a%+22
22220  CASE $pointer% OF
22230   WHEN "A","a" :  sort_operator$(a%) = "<"
22240   WHEN "D","d" :  sort_operator$(a%) = ">"
22250   OTHERWISE
22260     sort_operator$(a%) = "TRUE"
22270   ENDCASE
22280   IF LEN sort_line$(a%) >0 THEN
22290     IF LEN $pointer% = 0 THEN
22300        PROCerror_message("Line "+STR$(a%+1)+" has a field name but the direction of the sort has not been specified.")
22310        ok% = FALSE
22320    ELSE
22330       f% = 0
22340       WHILE sort_line$(a%) <> FNupper(f$(f%,0)) AND f% < number_of_fields%
22350         f%+=1
22360       ENDWHILE
22370       IF sort_line$(a%) <> FNupper(f$(f%,0)) THEN
22380        PROCerror_message("Line "+STR$(a%+1)+" has a field called "+sort_line$(a%)+" this field does not exist")
22390        ok% = FALSE
22400       ENDIF
22410       left$ = sort_line$(a%)
22420       right$ = sort_line$(a%)
22430       CASE f$(f%,1) OF
22440       WHEN "D","d" : left$ = "FNdate(record_a$("+STR$f%+"))"
22450                      right$= "FNdate(record_b$("+STR$f%+"))"
22460       WHEN "N","n" : left$ = "VAL(record_a$("+STR$f%+"))"
22470                    : right$= "VAL(record_b$("+STR$f%+"))"
22480       WHEN "T","t" : IF FNicon_set(sort_window%,4) THEN
22490                         left$ = "record_a$("+STR$f%+")"
22500                         right$= "record_b$("+STR$f%+")"
22510                      ELSE
22520                         left$ = "FNupper(record_a$("+STR$f%+"))"
22530                         right$= "FNupper(record_b$("+STR$f%+"))"
22540                      ENDIF
22550       ENDCASE
22560       IF sort_operator$(a%) = "TRUE" THEN
22570         sort_line$(a%)="TRUE"
22580       ELSE
22590         sort_line$(a%) = left$+sort_operator$(a%)+right$
22600         sort_line$(a%+6) = left$+"="+right$
22610       ENDIF
22620    ENDIF
22630   ELSE
22640     sort_line$(a%)="TRUE"
22650     sort_line$(a%+6)="TRUE"
22660    ENDIF
22670NEXT
22680=ok%
22690 
22700
22710
22720DEF FNcompare
22730LOCAL result%
22740result% = FALSE
22750IF EVALsort_line$(0) THEN
22760  result% = TRUE
22770ELSE
22780  IF EVALsort_line$(6) THEN
22790 
22800    IF EVALsort_line$(1) THEN
22810      result% = TRUE
22820    ELSE
22830     IF EVALsort_line$(7) THEN
22840 
22850       IF EVALsort_line$(2) THEN
22860        result% = TRUE
22870       ELSE
22880        IF EVALsort_line$(8) THEN
22890 
22900          IF EVALsort_line$(3) THEN
22910            result% = TRUE
22920          ELSE
22930            IF EVALsort_line$(9) THEN
22940 
22950              IF EVALsort_line$(4) THEN
22960                result% = TRUE
22970              ELSE
22980                IF EVALsort_line$(10) THEN
22990 
23000                   IF EVALsort_line$(5) THEN
23010                     result% = TRUE
23020                   ELSE
23030                     IF EVALsort_line$(11) THEN
23040 
23050                   ENDIF
23060                  ENDIF
23070
23080                ENDIF
23090              ENDIF
23100
23110            ENDIF
23120          ENDIF
23130
23140       ENDIF
23150     ENDIF
23160
23170    ENDIF
23180  ENDIF
23190 
23200  ENDIF
23210ENDIF
23220=result%
23230
23240DEF PROCload_file_to_memory
23250FOR rec% = 1 TO number_of_records%
23260  PROCread_record_a(rec%)
23270  PROCstore_in_memory_a(rec%)
23280NEXT
23290ENDPROC
23300
23310DEF PROCsave_file_from_memory
23320FOR rec% = 1 TO number_of_records%
23330  PROCrecall_from_memory_a(rec%)
23340  PROCwrite_record_a(rec%)
23350NEXT
23360ENDPROC
23370
23380
23390DEF PROCstore_in_memory_a(rec%)
23400pointer% = rec%*record_size%+memory%
23410FOR f% = 0 TO number_of_fields% -1
23420   $pointer% = record_a$(f%)
23430    pointer% = pointer% + LENrecord_a$(f%)+1
23440NEXT
23450ENDPROC
23460
23470DEF PROCstore_in_memory_b(rec%)
23480pointer% = rec%*record_size%+memory%
23490FOR f% = 0 TO number_of_fields% -1
23500   $pointer% = record_b$(f%)
23510    pointer% = pointer% + LENrecord_b$(f%)+1
23520NEXT
23530ENDPROC
23540
23550
23560DEF PROCrecall_from_memory_a(rec%)
23570pointer% = rec%*record_size%+memory%
23580FOR f% = 0 TO number_of_fields% -1
23590   record_a$(f%) = $pointer%
23600    pointer% = pointer% + LENrecord_a$(f%)+1
23610NEXT
23620ENDPROC
23630
23640DEF PROCrecall_from_memory_b(rec%)
23650pointer% = rec%*record_size%+memory%
23660FOR f% = 0 TO number_of_fields% -1
23670   record_b$(f%) = $pointer%
23680    pointer% = pointer% + LENrecord_b$(f%)+1
23690NEXT
23700ENDPROC
23710
23720
23730DEF PROCread_virus
23740LOCAL f%
23750f% = OPENIN("<CardBase$Dir>.date")
23760IF f% > 0 THEN
23770  virus_set% = TRUE
23780  DIM virus$(12)
23790  count% = -1
23800  REPEAT
23810     count% +=1
23820     no_more% = FNread_virus_line
23830  UNTIL count% = 10 OR no_more%
23840  CLOSE #f%
23850  IF LEFT$(virus$(0),6) <> MID$(TIME$,5,6) THEN
23860     virus_set% = FALSE
23870  ELSE
23880    no_of_vir_mess% = 0
23890    FOR j% = 1 TO 10
23900     IF LENvirus$(j%) > 0 THEN no_of_vir_mess%+=1
23910    NEXT
23920     current_vir_mess% = 1
23930    IF no_of_vir_mess% = 0 THEN virus_set% = FALSE
23940  ENDIF
23950ELSE
23960  virus_set% = FALSE
23970ENDIF
23980ENDPROC
23990 
24000
24010DEF FNread_virus_line
24020  PROCget_a_line
24030  WHILE LEFT$(line$,1) ="|" AND NOT EOF#f%
24040     PROCget_a_line
24050  ENDWHILE
24060  virus$(count%) = line$
24070= EOF #f%
24080
24090
24100DEF PROCget_a_line
24110  line$ =""
24120  c% = BGET#f%
24130  WHILE c% <> 10
24140    line$ = line$+CHR$c%
24150    c% = BGET#f%
24160  ENDWHILE
24170ENDPROC
24180
24190 
24200
24210DEF PROCshow_virus
24220PROCmessage(virus$(current_vir_mess%))
24230current_vir_mess% +=1
24240IF current_vir_mess% > no_of_vir_mess% THEN
24250   current_vir_mess% =1
24260ENDIF
24270ENDPROC
24280
24290
24300
24310
24320DEF FNextract_output_list_ok
24330LOCAL error%, list%
24340list% = -1
24350WHILE list% < 5 AND NOT error%
24360  list% += 1
24370  pointer% = output_list% + list% * 70
24380  output_list$(list%) = $pointer%
24390  output_list$(list%) = FNoutput_upper(output_list$(list%))
24400  PROCoutput_string_convert(output_list$(list%),error%)
24410ENDWHILE
24420=NOT error%
24430
24440
24450
24460
24470
24480DEF FNcreate_search_string_ok
24490LOCAL search%, error%
24500  search% = TRUE
24510  search_string$ = $search_list%
24520  IF FNicon_set(output_window%,case_sens_icon%) THEN
24530     search_string$ =FNoutput_upper(search_string$)
24540  ELSE
24550     search_string$ =FNupper(search_string$)
24560  ENDIF
24570  PROCsearch_string_convert(search_string$,error%)
24580=NOT error%
24590
24600
24610DEF PROCoutput_string_convert(RETURN string$, RETURN error%)
24620LOCAL result$
24630result$ = ""
24640WHILE string$<>""
24650   PROCstrip_leading_space(string$)
24660   PROCoutput_next_element(item$,string$, error%)
24670   result$ = result$+item$+" "
24680ENDWHILE
24690string$ = result$
24700ENDPROC
24710
24720
24730
24740
24750DEF PROCoutput_next_element(RETURN item$, RETURN s$, RETURN error%)
24760item$ = ""
24770IF LEFT$(s$,1) = CHR$34 THEN
24780  item$= CHR$34
24790  REPEAT
24800    s$ = RIGHT$(s$,LEN(s$)-1)
24810    item$ += LEFT$(s$,1)
24820  UNTIL LEFT$(s$,1)=CHR$34 OR s$=""
24830  s$ = RIGHT$(s$,LEN(s$)-1)
24840  IF LENitem$ = 1 OR RIGHT$(item$,1)<> CHR$34 THEN
24850    error% = TRUE
24860    PROCerror_message("Output line "+STR$(list%+1)+" contains an unmatched quote")
24870  ENDIF
24880ELSE
24890   t$ = LEFT$(s$,1)
24900   IF INSTR(",;+",t$) >0 THEN
24910     item$ = t$
24920     s$ = RIGHT$(s$,LEN(s$)-1)
24930   ELSE
24940       t$ = LEFT$(s$,1)
24950       WHILE t$ <>"" AND INSTR(" ,;+"+CHR$34,t$)=0
24960            item$=item$ +t$
24970            s$ = RIGHT$(s$,LEN(s$)-1)
24980            t$ = LEFT$(s$,1)
24990       ENDWHILE
25000       REM do substitution here
25010       PROCoutput_substitute(item$, error%)
25020   ENDIF
25030ENDIF
25040ENDPROC
25050
25060
25070DEF PROCstrip_leading_space(RETURN s$)
25080WHILE LEFT$(s$,1) = " "
25090  s$ = RIGHT$(s$,LEN(s$)-1)
25100ENDWHILE
25110ENDPROC
25120
25130
25140
25150DEF PROCoutput_substitute(RETURN text$, RETURN error%)
25160LOCAL f%, found%
25170found% = FALSE
25180f% = -1
25190WHILE f% < number_of_fields% AND NOT found%
25200    f% +=1
25210    IF text$ = FNupper(f$(f%,0)) THEN
25220      found% = TRUE
25230      text$="c_f_v$("+STR$(f%)+")"
25240    ENDIF
25250ENDWHILE
25260IF NOT found% THEN
25270   PROCerror_message("The field "+text$+" used in the output line "+STR$(list%+1)+" does not exist")
25280   error% = TRUE
25290ENDIF
25300ENDPROC
25310
25320
25330DEF PROCsearch_string_convert(RETURN string$, RETURN error%)
25340LOCAL result$
25350error% = FALSE
25360result$ = ""
25370WHILE string$<>"" AND NOT error%
25380   PROCstrip_leading_space(string$)
25390   PROCsearch_next_element(item$,string$, error%)
25400   result$ = result$+item$+" "
25410ENDWHILE
25420string$ = result$
25430ENDPROC
25440
25450
25460
25470
25480DEF PROCsearch_next_element(RETURN item$, RETURN s$, RETURN error%)
25490error% = FALSE
25500item$ = ""
25510IF LEFT$(s$,1) = CHR$34 THEN
25520  item$= CHR$34
25530  REPEAT
25540    s$ = RIGHT$(s$,LEN(s$)-1)
25550    item$ += LEFT$(s$,1)
25560  UNTIL LEFT$(s$,1)=CHR$34 OR s$=""
25570  s$ = RIGHT$(s$,LEN(s$)-1)
25580  IF LENitem$ = 1 OR RIGHT$(item$,1)<> CHR$34 THEN
25590    error% = TRUE
25600    PROCerror_message("The search string contains an unmatched quote")
25610  ENDIF
25620ELSE
25630   t$ = LEFT$(s$,2)
25640   IF t$="<>" OR t$=">=" OR t$="<=" THEN
25650     item$ = t$
25660     s$ = RIGHT$(s$,LEN(s$)-2)
25670   ELSE
25680     t$ = LEFT$(s$,1)
25690     IF INSTR("=,;+-()/*><",t$) >0 THEN
25700       item$ = t$
25710       s$ = RIGHT$(s$,LEN(s$)-1)
25720     ELSE
25730       t$ = LEFT$(s$,1)
25740       IF t$ = "[" THEN
25750         WHILE t$ <>"" AND INSTR("]",t$)=0
25760            item$=item$ +t$
25770            s$ = RIGHT$(s$,LEN(s$)-1)
25780            t$ = LEFT$(s$,1)
25790          ENDWHILE
25800          s$ = RIGHT$(s$,LEN(s$)-1)
25810          item$ = MID$(item$,2,LEN(item$)-1)
25820          IF LEN item$ <> 8 OR t$ <>"]" THEN
25830            error% = TRUE
25840            PROCerror_message("The search string contains a date with an unmatched bracket. Dates must be enclosed within [] and contain 8 characters"+CHR$13+"eg [03 11 92]")
25850          ENDIF
25860          REM do date substitution here
25870          item$ = "FNdate("+CHR$34+item$+CHR$34+")"
25880       ELSE
25890          WHILE t$ <>"" AND INSTR(" ,;+=<>()*/"+CHR$34,t$)=0
25900            item$=item$ +t$
25910            s$ = RIGHT$(s$,LEN(s$)-1)
25920            t$ = LEFT$(s$,1)
25930          ENDWHILE
25940          REM do substitution here
25950          PROCsearch_substitute(item$,error%)
25960       ENDIF
25970     ENDIF
25980   ENDIF
25990ENDIF
26000ENDPROC
26010
26020
26030
26040
26050
26060DEF PROCsearch_substitute(RETURN text$, RETURN error%)
26070LOCAL f%, found%
26080found% = FALSE
26090f% = -1
26100WHILE f% < number_of_fields% AND NOT found%
26110    f% +=1
26120    IF text$ = FNupper(f$(f%,0)) THEN
26130      found% = TRUE
26140         IF FNupper(f$(f%,1)) = "T" THEN
26150            text$="c_f_v$("+STR$(f%)+")"
26160         ENDIF
26170         IF FNupper(f$(f%,1)) = "N" THEN
26180            text$="VALc_f_v$("+STR$(f%)+")"
26190         ENDIF
26200         IF FNupper(f$(f%,1)) = "D" THEN
26210            text$="FNdate(c_f_v$("+STR$(f%)+"))"
26220         ENDIF
26230    ENDIF
26240ENDWHILE
26250i% = -1
26260WHILE i% < number_of_operators% AND NOT found%
26270  i% +=1
26280  IF text$ = operator$(i%) THEN
26290     found% = TRUE
26300  ENDIF
26310ENDWHILE
26320IF NOT found% THEN
26330  found% = FNits_a_number(text$)
26340ENDIF
26350
26360IF NOT found% THEN
26370   error% = TRUE
26380   PROCerror_message("The field "+text$+" used in the search string does not exist")
26390ENDIF
26400ENDPROC
26410
26420DEF FNits_a_number(n$)
26430LOCAL ok%, i%
26440ok% = TRUE
26450FOR i% = 1 TO LENn$
26460  IF INSTR("0123456789-+.E", MID$(n$,i%,1)) = 0 THEN
26470     ok% = FALSE
26480  ENDIF
26490NEXT
26500=ok%
26510
26520DEFFNicon_set(window%,icon%)
26530!block_3%=window%
26540block_3%!4=icon%
26550SYS"Wimp_GetIconState",,block_3%
26560=((block_3%!24 AND 1<<21)<>0)
26570:
26580
26590DEF PROCquick_close
26600  SYS "Wimp_CloseDown"
26610ENDPROC
26620
26630
26640DEF FNfull_access(name$)
26650LOCAL state%, r5%
26660  SYS"OS_File",5,name$,,,,,0 TO ,,,,,r5%
26670  state% = r5% AND %1011
26680  = state% = 3
26690
26700
26710
26720REM dummy
26730
26740
26750dummy

�    !runimage for CardBase
(�    Copyright Archimedes World 1991
�    Started 2 July 1990
�    Hours = 43
(
2'�    Version 0.01 14 September 1990
<,�    Bug fix to avoid printer on message
F
P*�    Version 0.02 Started 4 March 1991
Z�    Hours = 6.5
d:�    Scroll on cursor movement, create warning message
nA�    Line feed at end of printout, field and heading printout
x:�    Bug fix on maximum file size, printer_on improved
�,�    Version 0.3 Started 16th March 1991
��    Hours = 3
�L�    Give a correct error message when file can not be written and close
�#�    down reasonably gracefully
�H�    Holding down select causes the output to pause in screen output
�4�    clicking select moves on to the next record
�(�    Field substitution now improved
�
��    Version 0.31
�#�    Icon toggles bug corrected
�
�
�
)� � �:�4:�:�:�"Press a key":a=�:�5:�

�environment
"�constants
,�create_variables
6
�setup
@�createicons
J�read_virus
T� � �error
^<� c$<>"" � just_started% � just_started% = � : �load(c$)
hjust_started% = �
r�
|  �poll(1)
�
� quit
�  �close_down_file
�  ș "Wimp_CloseDown"
��
�
�
�� �create_variables
�� message_block% 100
ր� name%(max_fields),type%(max_fields),width%(max_fields),dp%(max_fields),min%(max_fields),max%(max_fields),list%(max_fields)
�H� record_a$(max_fields), record_b$(max_fields), highest$(max_fields)
�'� sort_line$(12), sort_operator$(6)
�� field_used%(max_fields)
�� operator$(50)
� c_f_v$(max_fields)
� output_list$(6)
� filename% 20
&� pathname% 200
0� record_number% 13
:� password% 13
D� in_password% 13
N� valid_name% 20
X� valid_password% 20
b� rec_number% 13
l� valid_type% 20
v� field_des% 2200
�� valid_integer% 10
�� output_list% 500
�� search_list% 200
�� output_icon%(6)
�� sort_field% 300
�� sort_icon%(12)
�� valid_sort% 20
�$� display_data% (max_fields*300)
�$� display_icon%(max_fields*2 +2)
�� output_display% 2000
�� matches% 20
�� output_rec% 20
�� headings$(max_fields+5)
� date_stamp% 5
� create_date% 100
� f$(max_fields,6)
 � block% 600
*� block_2% 600
4� block_3% 50
>� taskid%4
H$taskid%="TASK"
R%� q% &A00,buffer% &800,endbuf% -1
\� menu 500
f� indirect% 2200
p� caret% 40
zcurbuf%=buffer%
�
�
�$valid_name%="Aa-zA-Z0-9"
�$valid_password% ="D*"
�$valid_type% = "ADNTdnt"
�$valid_integer% = "A0-9"
�$valid_sort% = "AaADd"
� 
� 
�$filename% = "DataFile"
�$pathname% = "DataFile"
�$password% = ""
�$in_password% = ""
$rec_number% = "0"
$search_list% = ""
 
$loaded% = �
.
8file%   = 0
Binhibit% = �
Lcase_sens_icon% = 13
Vcr_icon%        = 15
`tab_icon%       = 17
jheadings_icon%  = 19
toutput_file_handle% = 0
~just_started% = �
�number_of_fields% = 1
�
�operator$(0)    = "AND"
�operator$(1)    = "OR"
�operator$(2)    = "NOT"
�operator$(3)    = "EOR"
�operator$(4)    = ">="
�operator$(5)    = "=>"
�operator$(6)    = "ALL"
�!operator$(7)    = "FIELDLIST"
� 
�number_of_operators% = 7
�




(� �constants
2   Wimp    = (1<<18) + (3<<6)
<  CreateW = Wimp+1
F  OpenW   = Wimp+5
P  CloseW  = Wimp+6
Z  Poll%   = Wimp+7
d  RedrawW = Wimp+8
n  UpdateW = Wimp+9
x  GetR%   = Wimp+10
�  GetW    = Wimp+11
�  GetP    = Wimp+15
�  Drag    = Wimp+16
�  CrMenu  = Wimp+20
�  DcMenu  = Wimp+21
�  max_fields = 19
�  over_size  = 1.25
�  ALL        = �
��
�
�
�
�


� �poll(mask%)
"!  ș Poll%,mask%,q% � reason%
,  Ȏ reason% �
6  � 1 :�redraw_window(!q%)
@"  � 2 :ș"Wimp_OpenWindow",,q%
J  � 3 :�closeawindow(!q%)
T  � 6 :�buttons(q%)
^  � 7 : � loaded% �
h"              �start_disk_list
r           �
|              �new_save
�           �
�  � 8 :�key(q%!24)
�  � 9 : �menu_select(!q%)
�  � 17,18:�receive(q%)
�  �
��
�
�� �menu_select(item%)
�Ȏ item% �
�  � 0 : �create
�8  � 1 : � � inhibit% � �open_window(display_window%)
�5  � 2 : � � inhibit% � �open_window(sort_window%)
�7  � 3 : � � inhibit% � �open_window(output_window%)
7  � 4 : � � inhibit% � �open_window(fields_window%)
  � 5 : �close_down_file
  � 7 : quit = �
&�
0�
:
D
N
X� �buttons(b)
b� window%, icon%, button%
l   window% = b!12
v  icon% = b!16
�  button% = b!8
�   � virus_set% � �(20) = 1 �
�     �show_virus
�  �
�  Ȏ window% �
�'  � -2   : � button% =2  � �menu(b)
�>  � newfile_window% : � (button% � &50) <> 0 � �start_drag
�$  � display_window% : Ȏ icon% �
�,                            � 2 : �start
�2                            � 3 : �end_of_file
�6                            � 4 : �previous_record
�2                            � 5 : �next_record
�4                            � 6 : �delete_record
                         �
$  � output_window%  : Ȏ icon% �
/                            � 9  : �printer
 .                            � 10 : �screen
*3                            � 11 : �file_output
4                         �
>$  � save_window%    : Ȏ icon% �
H9                            � 3  : �start_output_drag
R2                            � 0  : �quick_save
\                         �
f4  � screen_window%   : � icon% = 1 � escape% = �
p%  � sort_window%     : Ȏ icon% �
z+                            � 3 : �sort
�                          �
�  �
�  �
��
�
�$� �read_icon_text(window%,icon%)
�!block% = window%
�block%!4 = icon%
�"ș "Wimp_GetIconState",,block%
�= $(block%!28)
�
�
�
	� �open_window(handle%)
	 !block% = handle%
	$ È™"Wimp_GetWindowState",,block%
	$# block%!28 = -1 : � open on top
	. È™ OpenW ,,block%
	8�
	B
	L
	V
	`
� �key(k)
	j� window%, icon%, new_pos%
	tÈ™ "Wimp_ProcessKey",k
	~;� k = 13  � k = &18E � k = &18F � k = &19D � k = &19E �
	�(   ș"Wimp_GetCaretPosition",,caret%
	�   window% = caret%!0
	�   icon%   = caret%!4
	�   new_pos% = icon%
	�   Ȏ window% �
	�,   � newfile_window% : � icon% = nf_1% �
	�1                             new_pos% = nf_2%
	�                            �
	�1                             new_pos% = nf_1%
	�                            �
	�C                           �set_caret(newfile_window%,new_pos%)
	�P                           ș"Wimp_ForceRedraw",fields_window%,0,-100,1000,0
/    � output_window% : � k = 13 � k =&18E �

<                             � icon% < output_icon%(6) �
3                               new_pos%=icon%+1
"                             �
(=                               new_pos% = output_icon%(0)
2"                             �
<                            �
F<                             � icon% > output_icon%(0) �
P3                               new_pos%=icon%-1
Z"                             �
d=                               new_pos% = output_icon%(6)
n"                             �
x                            �
�B                           �set_caret(output_window%,new_pos%)
�
�'    � sort_window%    : � k = 13  �
�;                             � icon% < sort_icon%(11) �
�3                               new_pos%=icon%+1
�"                             �
�;                               new_pos% = sort_icon%(0)
�"                             �
�B                             �set_caret(sort_window%,new_pos%)
�                            �
�*                           � k =&18F �
�:                             � icon% > sort_icon%(1) �
�3                               new_pos%=icon%-2
"                             �
<                               new_pos% = sort_icon%(11)
"                             �
"B                             �set_caret(sort_window%,new_pos%)
,                            �
6*                           � k =&18E �
@;                             � icon% < sort_icon%(10) �
J3                               new_pos%=icon%+2
T"                             �
^;                               new_pos% = sort_icon%(0)
h"                             �
rB                             �set_caret(sort_window%,new_pos%)
|                            �
�0    � fields_window%   : � k= 13 � k= &19D �
�>                             � icon% < list%(max_fields) �
�3                               new_pos%=icon%+1
�#                              �
�6                               new_pos% = name%(0)
�#                              �
�E                              �set_caret(fields_window%,new_pos%)
�!                            �
�+                            � k =&18F �
�6                             � icon% >= name%(1) �
�3                               new_pos%=icon%-7
�D                             �set_caret(fields_window%,new_pos%)
�"                             �
                            �
*                           � k =&18E �
>                             � icon% < name%(max_fields) �
&3                               new_pos%=icon%+7
0D                             �set_caret(fields_window%,new_pos%)
:"                             �
D                            �
N*                           � k= &19C �
X5                             � icon% > name%(0) �
b3                               new_pos%=icon%+1
lE                              �set_caret(fields_window%,new_pos%)
v!                            �
�!                            �
�1    � display_window%   :� k = 13 � k =&18E �
�M                             � icon% <display_icon%(number_of_fields%-1)�
�3                               new_pos%=icon%+2
�"                             �
�>                               new_pos% = display_icon%(0)
�-                               � k = 13 �
�I                                 �set_caret(display_window%,new_pos%)
�1                                 �next_record
�$                               �
�"                             �
�                            �
�=                             � icon% > display_icon%(0) �

3                               new_pos%=icon%-2

"                             �

P                               new_pos% = display_icon%(number_of_fields%-1)

 "                             �

*                            �

4C                           �set_caret(display_window%,new_pos%)

>0    � password_window% : � k= 13 � �password

H1    � save_window%     : � k=13 � �quick_save

R	    �

\�

f�

p

z"� �set_caret(window%,new_pos%)

�M� minx%,maxx%,miny%,maxy%,new_scroll_x%,scroll_x%,new_scroll_y%,scroll_y%

�    !block_2% = window%

�)    ș"Wimp_GetWindowState",,block_2%

�    minx% =  block_2%!20

�    maxy% =  block_2%!24

�8    maxx% =  block_2%!12 - block_2%!4 +  block_2%!20

�8    miny% =  block_2%!8 - block_2%!16 +  block_2%!24

�    scroll_x% = block_2%!20

�    scroll_y% = block_2%!24

�:    ș"Wimp_SetCaretPosition",window%,new_pos%,,,-1,-1

�+    ș"Wimp_GetCaretPosition",,block_2%

�    caret_x% = block_2%!8

�    caret_y% = block_2%!12
     new_scroll_x%= scroll_x%
     new_scroll_y%= scroll_y%
;    � caret_x%-64 < minx% � new_scroll_x% = caret_x%-50
$;    � caret_x%+64 > maxx% � new_scroll_x% = caret_x%-50
.H    � caret_y%-64 < miny% � new_scroll_y% = caret_y%+(maxy%-miny%)�2
8H    � caret_y%+64 > maxy% � new_scroll_y% = caret_y%+(maxy%-miny%)�2
BE    � (new_scroll_x%<> scroll_x%) � (new_scroll_y%<> scroll_y%) �
L       !block_2% = window%
V,       È™"Wimp_GetWindowState",,block_2%
`&       block_2%!20 = new_scroll_x%
j&       block_2%!24 = new_scroll_y%
t       block_2%!28 = -1
~(       È™"Wimp_OpenWindow",,block_2%
�	    �
��
�
�
�
�� �menu(b)
�flag1% = &7000021
�flag2% = &7400021
�� loaded% Ȕ flag1%,flag2%
�$menu="CardBase"
�menu!12=&70207
�menu!16=156
menu!20=40


menu!24=0


(
2menu!28 = &00
<menu!32 = -1
Fmenu!36 =  flag1%
P$(menu+40) = "Create"
Z
dmenu!52 = &00
nmenu!56 = -1
xmenu!60 =  flag2%
�$(menu+64) = "Disp Edit"
�
�menu!76 = &00
�menu!80 = -1
�menu!84 = flag2%
�$(menu+88) = "Sort"
�
� 
�menu!100 = &00
�menu!104 = -1
�menu!108 = flag2%
�$(menu+112) = "Output"
� 
menu!124 = &00
menu!128 = -1
menu!132 = flag2%
"$(menu+136) = "Fields"
,
6menu!148 = &00
@menu!152 = -1
Jmenu!156 = flag2%
T$(menu+160) = "Close"
^
h
r
|menu!172 = &00
�menu!176 = info_window%
�menu!180 = &7000021
�$(menu+184) = "Info"
�
�
�menu!196=&80
�menu!200= -1
�menu!204=&7000021
�$(menu+208)="Quit"
�
�(ș "Wimp_CreateMenu",,menu,!b-64,136
��
�


� �closeawindow(handle%)
&!block%=handle%
0! È™"Wimp_CloseWindow",,block%
:<� handle% = output_window% � �closeawindow(save_window%)
D  � recursive bit
N�
X
b� �receive(q%)
lȎ q%!16 �
v� 0:�finish:�
�� 2: �datasave(q%)
�'� 3,5 : � q%!12 = 0 � �dataload(q%)
��
��
� 
�
�
�
�� �setup
�;ș "Wimp_Initialise",200,!taskid%,"CardBase" � version%
�6ș "Wimp_OpenTemplate",,"<CardBase$Dir>.Templates"
�Eș "Wimp_LoadTemplate",,q%,indirect%,indirect%+199,-1,"display",0
�0ș "Wimp_CreateWindow",,q% � display_window%
HÈ™ "Wimp_LoadTemplate",,q%,indirect%+200,indirect%+399,-1,"fields",0
/ș "Wimp_CreateWindow",,q% � fields_window%
HÈ™ "Wimp_LoadTemplate",,q%,indirect%+400,indirect%+599,-1,"output",0
 /ș "Wimp_CreateWindow",,q% � output_window%
*JÈ™ "Wimp_LoadTemplate",,q%,indirect%+600,indirect%+799,-1,"proginfo",0
4-ș "Wimp_CreateWindow",,q% � info_window%
>FÈ™ "Wimp_LoadTemplate",,q%,indirect%+800,indirect%+999,-1,"sort",0
H-ș "Wimp_CreateWindow",,q% � sort_window%
RJÈ™ "Wimp_LoadTemplate",,q%,indirect%+1000,indirect%+1199,-1,"create",0
\0ș "Wimp_CreateWindow",,q% � newfile_window%
fLÈ™ "Wimp_LoadTemplate",,q%,indirect%+1200,indirect%+1399,-1,"password",0
p1ș "Wimp_CreateWindow",,q% � password_window%
zJÈ™ "Wimp_LoadTemplate",,q%,indirect%+1400,indirect%+1599,-1,"screen",0
�/ș "Wimp_CreateWindow",,q% � screen_window%
�Hș "Wimp_LoadTemplate",,q%,indirect%+1600,indirect%+1850,-1,"save",0
�
q%!64 = 1
�-ș "Wimp_CreateWindow",,q% � save_window%
�ș "Wimp_CloseTemplate"
�!S%=�"<CardBase$Dir>.!Sprites"
�T%=�#S%+160
��#S%
�� sprites% T%
�!sprites%=T%:sprites%!8=1
�"ș "OS_SpriteOp",&109,sprites%
�<ș "OS_SpriteOp",&10A,sprites%,"<CardBase$Dir>.!Sprites"
�iccalc%=�iconbar
quit = �
abort% = �
!q% = save_window%
$q%!4 = 2
.È™"Wimp_GetIconState",,q%
8text_file_name% = q%!28
B$text_file_name% = "Output"
L�
V
`
j 
t� �iconbar
~
!q%=-1
�
q%!4=0
�
q%!8=0
�q%!12=63
�q%!16=68
�q%!20=&2102
�spname$="!CardBase"
�� q%!24 (�spname$+1)
�$(q%!24)=spname$
�q%!28=sprites%
�q%!32=�spname$+1
�"ș "Wimp_CreateIcon",,q% � ic%
�=ic%





(
2
<
F� �error
P� output_file_handle% > 0 �
Z   �# output_file_handle%
d   output_file_handle%=0
n�
xabort% = �
�
Ȏ � �
�:  � 17 : �error_message("Escape pressed"):�quick_close
��  � 67778 : �error_message("The file you are attempting to load is already open. To cure this problem dismount the disc and try again")
��  � 193   : � �cancel_message("The file can not be written to. Check the file/disk is not write protected and the disk is in the drive. OK to continue. Cancel to quit the program") = 2 �
�                 �quick_close
�              �
�$                �emergency_close
�              �
҇  � 1196  :� �cancel_message("The file can not be found and data has been lost.  OK to continue. Cancel to quit the program") = 2 �
�                 �quick_close
�              �
�$                �emergency_close
�              �
�  � 222 : � �cancel_message("The file has been closed by another application or the disk dismounted. OK to continue. Cancel to quit the program") = 2             �
                 �quick_close
             �
"$                �emergency_close
,             �
6  
@�    � �cancel_message(�$+" (internal error) "+�(�)+" / " +�(�)+" OK to contine. Cancel to quit the program")= 2 � �quick_close
J�
T�
^
h
r
|
�
�
�� �error_message(text$)
�ș"Hourglass_Smash"
�ș"Wimp_DragBox",,-1
�
!block%=�
�$(block%+4)=text$
�.ș "Wimp_ReportError",block%,1,"!CardBase"
��
�
�
�� �message(text$)
�ș"Hourglass_Smash"
È™"Wimp_DragBox",,-1

!block%=�
$(block%+4)=text$
&/È™ "Wimp_ReportError",block%,17,"!CardBase"
0�
:
D
N
X� �cancel_message(text$)
b(� returns 0,1,2 for none, ok, cancel
l� r0,r1
vÈ™"Hourglass_Smash"
�ș"Wimp_DragBox",,-1
�
!block%=�
�$(block%+4)=text$
�7ș "Wimp_ReportError",block%,23,"!CardBase" � r0,r1
�=r1
��
�
�
�� �glass(o%)
�
� o% �
�  ș"Hourglass_On"
��
�  ș"Hourglass_Off"
�
�

 
*
� �finish
4È™ "Wimp_CloseDown"
>�
H
R
\
f
p� �redraw_window(handle%)
z!block% = handle%
�)ș"Wimp_RedrawWindow",,block% � more%
�ȕ more%
�,  ș "Wimp_GetRectangle",,block% � more%
��
��
�
� 
�A� �icon(whandle%,ix%,iy%,iw%,ih%,flag%, text$, d1%, d2%, d3%)
�block%!0 = whandle%
�block%!4 = ix%
�block%!8 = iy%
�block%!12 = ix% + iw%
�block%!16 = iy% + ih%
block%!20 = flag%
� d1% = 0 �
 $(block%!24) = text$
$�
.   block%!24 = d1%
8   block%!28 = d2%
B   block%!32 = d3%
L�
V*ș"Wimp_CreateIcon",,block% � ihandle%
`
=ihandle%
j
t
~
� 
�
�� �createicons
�N� windowhandle,minx,miny,length, height, flags, sprite,text, valid, length
�%� text, no background is &7000511
�'� text, with background is &7000135
�2� writable icon, validated, in box is &700F53D
�Vnf_1% = �icon(newfile_window%,200,-54,200,48,&700F53D,"",filename%,valid_name%,12)
�Znf_2% =�icon(newfile_window%,200,-108,200,48,&700F53D,"",password%,valid_password%,12)
�\pw% =�icon(password_window%,400,-200,200,48,&700F53D,"",in_password%,valid_password%,12)
�Id% =�icon(display_window%,270,-62,200,48,&7000135,"",filename%,-1,12)
�Hd% =�icon(fields_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
Hd% =�icon(output_window%,280,-62,200,48,&7000135,"",filename%,-1,12)

Hd% =�icon(screen_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
Fd% =�icon(sort_window%,280,-62,200,48,&7000135,"",filename%,-1,12)
Kd% =�icon(display_window%,700,-62,180,48,&7000135,"",rec_number%,-1,12)
(
2-� a% = field_des% � field_des% + 2196 � 4
<2  !a% = &D0D0D0D    : � SET THE AYYAY TO EMPTY
F�
P
Z� a% = 0 � 496 � 4
d   output_list%!a% = &D0D0D0D
n�
x
�� a% = 0 � 296 � 4
�  sort_field%!a% = &D0D0D0D
��
�
�� a% = 0 � 1996 � 4
�#  output_display%!a% = &D0D0D0D
��
�
�� a% = 0 � 196 � 4
�   search_list%!a% = &D0D0D0D
��
�
�� a% = 0 � 1996 � 4
#  output_display%!a% = &D0D0D0D
�

"
,
6� row% = 0 � max_fields
@mname%(row%) = �icon(fields_window%,50,-250-row%*60,200,48,&700F535,"",field_des%+100*row%,valid_name%,20)
Jotype%(row%) = �icon(fields_window%,330,-250-row%*60,40,48,&700F535,"",field_des%+22+100*row%,valid_type%,2)
Tswidth%(row%) = �icon(fields_window%,470,-250-row%*60,80,48,&700F535,"",field_des%+26+100*row%,valid_integer%,3)
^pdp%(row%) = �icon(fields_window%,600,-250-row%*60,80,48,&700F535,"",field_des%+32+100*row%,valid_integer%,2)
hgmin%(row%) = �icon(fields_window%,730,-250-row%*60,130,48,&700F535,"",field_des%+35+100*row%,-1,12)
rgmax%(row%) = �icon(fields_window%,870,-250-row%*60,130,48,&700F535,"",field_des%+47+100*row%,-1,12)
|hlist%(row%) =�icon(fields_window%,1010,-250-row%*60,250,48,&700F535,"",field_des%+60+100*row%,-1,38)
��
� 
�
y% = -120
�� a% = 0 � 5
�h  output_icon%(a%) =  �icon(output_window%,200,y%-60*a%,700,48,&700F535,"",output_list%+70*a%,-1,60)
��
�Zoutput_icon%(6) =�icon(output_window%,280,-480,620,48,&700F535,"",search_list%,-1,200)
� 
�
�
�
y% = -260
�� a% = 0 � 10 � 2
�`  sort_icon%(a%) =�icon(sort_window%,20,y%-30*a%,300,48,&700F535,"",sort_field%+25*a%,-1,20)
l sort_icon%(a%+1) =�icon(sort_window%,450,y%-30*a%,50,48,&700F535,"",sort_field%+22+25*a%,valid_sort%,2)
�

&
0
:'� this is the output display dindow
D
N
y% = -120
X� a% = 0 � 5
b_ d% =  �icon(screen_window%,200,y%-60*a%,1200,48,&7000511,"",output_display%+300*a%,-1,250)
l�
vJd% =�icon(screen_window%,620,-62,150,48,&7000135,"",output_rec%,-1,12)
�Gd% =�icon(screen_window%,900,-62,150,48,&7000135,"",matches%,-1,12)
� 
�
�@� d% = FNicon(function%,16,-50,250,48,&7000511,"",t1%,-1,20)
��
�
�
�
�
�
� �create
��count_fields
�� number_of_fields% = 0 �
�  �empty_fields
�
$   �open_window(newfile_window%)
#   �open_window(fields_window%)
 �   � �cancel_message("Field description is not empty. Click CANCEL and drag the file icon to a directory viewer to save it. To clear the current field window click on OK") =1 �
*     �empty_fields
4   �
>�
H�
R
\� �empty_fields
f0   � a% = field_des% � field_des% + 2196 � 4
p5     !a% = &D0D0D0D    : � SET THE AYYAY TO EMPTY
z   �
�   $filename% = "DataFile"
�   $pathname% = "DataFile"
�   $password% = ""
�   $rec_number% = "0"
�   $search_list% = ""
�%   �closeawindow(newfile_window%)
�$   �closeawindow(fields_window%)
�$   �open_window(newfile_window%)
�#   �open_window(fields_window%)
�(   �set_caret(newfile_window%,nf_1%)
��
�
� � �extract_field_description
� rec%,pos%
� rec% = 0 � max_fields
   pos% = field_des%+rec%*100
$  f$(rec%,0) = $pos%
.#  pos% = field_des%+rec%*100+22
8  f$(rec%,1) = $pos%
B#  pos% = field_des%+rec%*100+26
L  f$(rec%,2) = $pos%
V#  pos% = field_des%+rec%*100+32
`  f$(rec%,3) = $pos%
j#  pos% = field_des%+rec%*100+35
t  f$(rec%,4) = $pos%
~#  pos% = field_des%+rec%*100+47
�  f$(rec%,5) = $pos%
�#  pos% = field_des%+rec%*100+60
�  f$(rec%,6) = $pos%
�  � � f$(rec%,0) > 0 �
�      field_used%(rec%) = �
�  �
�      field_used%(rec%) = �
�  �
��
�d=�Field_des_ok
��
� 


� �field_name_ok
)� rec%, rec1%, rec2%, length%, field%
ok=�
(� rec% = 0 � max_fields
2   length% = 0
<   � field% = 0 � 6
F/     length% = length% + �(f$(rec%,field%))
P   �
Z(   � length% > 0 � �(f$(rec%,0))=0 �
d      ok = �
nK      �error_message("Field number "+�(rec%+1)+" does not have a name")
x   �
��
�� rec1% = 0 � max_fields-1
�%   � rec2% = rec1%+1 � max_fields
�:     � f$(rec1%,0) = f$(rec2%,0) � �(f$(rec2%,0)) >0 �
�       ok = �
�L       �error_message("There are two fields with the name "+f$(rec2%,0))
�
     �
�   �
��
�=ok
� 
�
�
� �field_len_ok

� rec%
� rec% = 0 � max_fields
" � �(f$(rec%,0))>0 �
,   � �(f$(rec%,2))=0 �
6V      �error_message("Field '"+f$(rec%,0)+"' must have a width greater than zero")
@   �
JA   � (f$(rec%,1)="N" � f$(rec%,1)="n") � �(f$(rec%,2)) > 20 �
T]      �error_message("Field '"+f$(rec%,0)+"' is numeric so its width must not exceed 20")
^   �
h  �
r�
|=�
�
�
�� �field_type_ok
�� rec%, ok%
�ok% = �
�� rec% = 0 � max_fields
�,   � �(f$(rec%,0))>0 � �(f$(rec%,1))=0 �
�E      �error_message("Field "+f$(rec%,0)+" does not have a type")
�      ok% = �
�   �
��
�=ok%
�
 
 � �field_max_ok
 � rec%, ok%
 &� rec% = 0 � max_fields
 0> � �(f$(rec%,0))>0 � (f$(rec%,1) ="N" � f$(rec%,1) ="n") �
 :   � � �numeric(f$(rec%,4)) �
 DN    �error_message("Field "+f$(rec%,0)+" does not have a numeric minimum")
 N  �
 X �
 b�
 l� rec% = 0 � max_fields
 v> � �(f$(rec%,0))>0 � (f$(rec%,1) ="N" � f$(rec%,1) ="n") �
 �   � � �numeric(f$(rec%,5)) �
 �N    �error_message("Field "+f$(rec%,0)+" does not have a numeric maximum")
 �  �
 � �
 ��
 �=ok%
 �
 �
 �� �field_date_ok
 �� rec%, ok%
 �� rec% = 0 � max_fields
 �? � �(f$(rec%,0))>0 � (f$(rec%,1) ="D" � f$(rec%,1) ="d")  �
 �6  � � �valid_date(f$(rec%,4)) � �(f$(rec%,4))>0  �
!\    �error_message("Field "+f$(rec%,0)+" does not have a correctly formed minimum date")
!  �
! �
! �
!*� rec% = 0 � max_fields
!4> � �(f$(rec%,0))>0 � (f$(rec%,1) ="d" � f$(rec%,1) ="D") �
!>5  � � �valid_date(f$(rec%,5)) � �(f$(rec%,5))>0 �
!H\    �error_message("Field "+f$(rec%,0)+" does not have a correctly formed maximum date")
!R  �
!\ �
!f�
!p=ok%
!z
!�
!�
!�
!�� �Field_des_ok
!�[� �field_name_ok � �field_len_ok � �field_type_ok � �field_max_ok � �field_date_ok    �
!�	  = �
!��
!�  =�
!��
!� 
!�
!�� �numeric(text$)
!�
� i%, ok%
"	ok%=�
"� �(text$) > 0 �
"  � i% = 1 � �(text$)
"$    c$ = �text$,i%,1)
".-    � c$ <"." � c$>"9" � c$="/" � ok% = �
"8  �
"B�
"L	= ok%
"V
"`� �valid_date(date$)
"j� ok%, day%, month%, year%
"t5ok% = �               : � allow zero null entries
"~� �(date$) >0 �
"�� �(date$) <>8 �
"� ok% = �
"��
"�  day% = �(�date$,2))
"�  month% = �(�date$,4,2))
"�  year%  = �(�date$,7,2))
"�  � year% � 4 = 0 �
"�     days_in_feb% = 29
"�  �
"�     days_in_feb% = 28
"�  �
"�*  � (day% > 31) � (day% < 1) � ok% = �
#-  � (month% >12) � (month% < 1) � ok% = �
#
  Ȏ month% �
#*    � 4,6,9,11 : � day% > 30 � ok% = �
#4    � 2        : � day% > days_in_feb% � ok% = �
#(  �
#2�
#<�
#F=ok%
#P
#Z
#d� �start_drag
#n  � wex%,wey%
#x  !block% = newfile_window%
#�%  ș"Wimp_GetWindowState",,block%
#�!  wex% = block%!4 - block%!20
#�"  wey% = block%!16 - block%!24
#�0  block%!4 = 2 : � icon handle for drag icon
#�#  ș"Wimp_GetIconState",,block%
#�  !block% = newfile_window%
#�  block%!4 = 5
#�  block%!8 = block%!8 +wex%
#�!  block%!12 = block%!12 +wey%
#�!  block%!16 = block%!16 +wex%
#�!  block%!20 = block%!20 +wey%
#�  block%!24 = 0
#�  block%!28 = 0
$  block%!32 = &7FFFFFFF
$  block%!36 = &7FFFFFFF
$  È™"Wimp_DragBox",,block%
$"�
$,
$6� �count_fields
$@�extract_field_description
$Jnumber_of_fields% = 0
$T� rec% = 0 � max_fields
$^  � �(f$(rec%,0)) > 0 �
$h     number_of_fields% +=1
$r  �
$|�
$��
$�
$�
$�� �new_save
$��count_fields
$�� number_of_fields% = 0 �
$�A   �error_message("There must be at least one field defined")
$��
$�#ș"Wimp_GetPointerInfo",,block%
$�block%!20 = 64
$�block%!32 = 0
$�block%!36 = 1
$�block%!40 = block%!12
%block%!44 = block%!16
%block%!48 = !block%
%block%!52 = block%!4
%&*block%!56 = 10000 : � size of the file
%0/block%!60 = &778  : � file type of the file
%:$(block%+64) = $filename%
%D"?(block%+65+�($filename%)) = 0
%N9È™"Wimp_SendMessage",17,block%+20,block%!12,block%!16
%X�
%b�
%l
%v� �get_name(P%)
%�	A$=""
%�ȕ ?P%<>0 � ?P%<> 13
%� A$ = A$+�?P%:P%+=1
%��
%�=A$
%�
%�
%�� �leaf(path$)
%�ȕ �path$,".")
%�path$=�path$,�path$,".")+1)
%��
%�
=path$
%�
&
&� �datasave(b)
&� loaded% �
& � i% = 0 � 96 � 4
&*  message_block%!i% = b!i%
&4�
&>9� copy the message block since wimp poll currupts it!
&H1�produce_output(�get_name(message_block%+44))
&R6� �get_name(message_block%+44) <> "<Wimp$Scrap>" �
&\6  $text_file_name%  = �get_name(message_block%+44)
&f�
&p&message_block%!12=message_block%!8
&zmessage_block%!16=3
&�!message_block% = 64
&�Nș"Wimp_SendMessage",17,message_block%,message_block%!20,message_block%!24
&�
&��
&��saveit(�get_name(b+44))
&� $pathname% = �get_name(b+44)
&�"$filename% = �leaf($pathname%)
&�b!12=b!8
&�
b!16=3
&�!b = 64
&�'ș"Wimp_SendMessage",17,b,b!20,b!24
&��
&��
'
'
'
'$� �saveit(name$)
'.&� This saves a file the first time
'8�  rec%
'Bfile% = �(name$)
'L-� a% = field_des% � field_des% + 2196 � 4
'V  �#file%,!a%
'`�
'jc_f_v$() = ""
'tnumber_of_fields% = 0
'~number_of_records% = 1
'�record_size% = 0
'�� rec% = 0 � max_fields
'�/  record_size%=record_size%+�(f$(rec%,2))+2
'�  � �(f$(rec%,0)) > 0 �
'�     number_of_fields% +=1
'�  �
'��
'�*record_size%=20+record_size%*over_size
'�� #file%,$password%
'�� #file%, $filename%
'� � #file%, number_of_records%
'�� #file%, record_size%
(� #file%, number_of_fields%
(
!� #file%, 1 : � record number
(
(� rec% = 0 � max_fields
((!  � #file%, field_used%(rec%)
(2�
(<
(F.� a% = output_list% � output_list%+496 � 4
(P  � #file%,!a%
(Z�
(d
(n.� a% = search_list% � search_list%+196 � 4
(x  � #file%,!a%
(��
(�
(�,� a% = sort_field% � sort_field%+296 � 4
(�  � #file%,!a%
(��
(�
(�
(�
(�
(�
(��write_record(1)
(�� #file%
(�
file% = 0
)�("settype "+name$+" 778")
)"�closeawindow(newfile_window%)
)!�closeawindow(fields_window%)
)"loaded% = �
),�load(name$)
)6�
)@
)J
)T
)^� �load(name$)
)h� loaded% �
)rs   �error_message("The file '"+$filename%+"' is still open and must be closed before a new file can be loaded")
)|�
)�  � �full_access(name$) �
)�'     �closeawindow(newfile_window%)
)�&     �closeawindow(fields_window%)
)�&     current_file_name$ = name$+�0
)�.     ș"OS_File",5,name$,,,,,0 � ,,r2%,r3%
)�     date_stamp%!0 = r3%
)�"     date_stamp%?4 = r2% � &FF
)�G     ș"OS_ConvertStandardDateAndTime",date_stamp%,create_date%,100
)�(     create_date$=�$create_date%,20)
)�     file% = �(name$)
)�2     � a% = field_des% � field_des% + 2196 � 4
)�       �#file%,!a%
)�
     �
*     � #file%,$password%
*     � #file%, $filename%
*%     � #file%, number_of_records%
*&     � #file%, record_size%
*0$     � #file%, number_of_fields%
*:     � #file%, current_rec%
*D      � rec% = 0 � max_fields
*N'        � #file%, field_used%(rec%)
*X
     �
*b3     � a% = output_list% � output_list%+496 � 4
*l       � #file%,!a%
*v
     �
*�3     � a% = search_list% � search_list%+196 � 4
*�       � #file%,!a%
*�
     �
*�1     � a% = sort_field% � sort_field%+296 � 4
*�       � #file%,!a%
*�
     �
*�#     �read_record(current_rec%)
*�'     $rec_number% = �(current_rec%)
*�     loaded% = �
*�#     �extract_field_description
*�     �create_display_icons
*�     �password_check
*�3     � � inhibit% �open_window(display_window%)
+   �
+x        �error_message("This file can not be loaded since the file is locked or does not have read or write access")
+
+    �
+*�
+4�
+>
+H
+R
+\
+f� �create_display_icons
+p;� change validation string to match the type definition
+z� d%, f%,l%,w%
+�#� f% = 0 � number_of_fields% -1
+�wdisplay_icon%(f%+number_of_fields%)=�icon(display_window%,50,-300-f%*60,300,48,&7000511,"",field_des%+100*f%,-1,20)
+�Dl% = �(f$(f%,2))       : � set length of box to a suitable value
+�w% = l%*16 +48
+�� w%>400 � w%=400
+�ldisplay_icon%(f%) = �icon(display_window%,400,-300-f%*60,w%,48,&700F535,"",display_data%+300*f%,-1,l%+1)
+��
+��
+�
+�� �destroy_display_icons
+�*� f% = 2*number_of_fields% -1 � 0 � -1
+�  � display_icon%(f%) > 0 �
+�!    !block% = display_window%
,$    block%!4 = display_icon%(f%)
,#    È™"Wimp_DeleteIcon",,block%
,  �
,$�
,.�
,8
,B 
,L
,V� �environment
,`ș "OS_GetEnv" � c$
,jc$=�c$,�c$-20)
,tȕ  �c$,1) <>" " � �c$ <>0
,~  c$=�c$,�c$-1)
,��
,�� c$ = " " � c$ =""
,��
,� 
,�
,�
,�
,�� �ackload(b)
,�b!12=b!8
,�b!16 = 4
,�!b = 64
,�!ș"Wimp_SendMessage",17,b,b!4
-�
-

-� �dataload(b)
-� b!40 = &778 �
-(  �load(�get_name(b+44))
-2  �ackload(b)
-<�
-F�
-P
-Z
-d
-n
-x
-�
-�� �extract_record_data
-�D� This takes the data from the icons and puts them into an array
-�� f%
-�"� f% = 0 � number_of_fields%-1
-�  p% =display_data%+f%*300
-�  c_f_v$(f%) = $p%
-��
-��
-� 
-�� �clear_record
-�� f%
-�"� f% = 0 � number_of_fields%-1
.  p% =display_data%+f%*300
.  $p% = ""
.�
."�
.,
.6
.@� �date(date$)
.J9  =�(�date$,2))+100*�(�date$,4,2))+10000*�(�date$,2))
.T
.^
.h
.r#� �valid_min(value$,type$,min$)
.|	� ok%
.�ok% = �
.� � � min$ >0 � � value$ > 0 �
.�Ȏ  type$ �
.�+  � "t","T" : � value$ < min$ � ok% = �
.�1  � "N","n" : � �(value$) < �(min$) � ok% = �
.�9  � "D","d" : � �date(value$) < �date(min$) � ok% = �
.��
.��
.�=ok%
.�
.�#� �valid_max(value$,type$,max$)
.�	� ok%
.�ok% = �
/ � � max$ >0 � � value$ > 0 �
/Ȏ  type$ �
/+  � "t","T" : � value$ > max$ � ok% = �
/&1  � "N","n" : � �(value$) > �(max$) � ok% = �
/09  � "D","d" : � �date(value$) > �date(max$) � ok% = �
/:�
/D�
/N=ok%
/X
/b%� �valid_list(value$,type$,list$)
/l	� ok%
/vok% = �
/�� � list$ >0 �
/�$  � �list$,value$) = 0 � ok% = �
/��
/�=ok%
/�
/�
/�� �valid_record
/�ok% = �
/�f% = -1
/�ȕ ok% � f% < max_fields
/�  f%+=1
/�  � field_used%(f%) �
/�G     � (f$(f%,1) ="d" � f$(f%,1) ="D")� � �valid_date(c_f_v$(f%)) �
0       ok% = �
0?       �error_message("'"+f$(f%,0)+"' has an invalid date")
0
     �
0 7     � � �valid_min(c_f_v$(f%),f$(f%,1),f$(f%,4)) �
0*       ok%=�
04I       �error_message("'"+f$(f%,0)+"' has a value which is too low" )
0>
     �
0H7     � � �valid_max(c_f_v$(f%),f$(f%,1),f$(f%,5)) �
0R       ok%=�
0\J       �error_message("'"+f$(f%,0)+"' has a value which is too high" )
0f
     �
0p8     � � �valid_list(c_f_v$(f%),f$(f%,1),f$(f%,6)) �
0z       ok%=�
0�N     �error_message("'"+f$(f%,0)+"' has a value which is not in the list")
0�
     �
0�>       � f$(f%,1) = "N" � f$(f%,1)="n" � �(f$(f%,3)) > 0 �
0�           A% = @%
0�/           @% =&0102000A + �(f$(f%,3))*&100
0�!           � �c_f_v$(f%) >0 �
0�.             c_f_v$(f%) = �(�(c_f_v$(f%)))
0�           �
0�           @%=A%
0�&           � �c_f_v$(f%),1) ="." �
0�)             c_f_v$(f%)= �c_f_v$(f%))
0�           �
0�
     �
1	    �
1
     �
1  �
1$	    �
1.
     �
18�
1B=ok%
1L
1V� �record_space
1`� total%
1jtotal% = 0
1t� f% = 0 � max_fields
1~#  total% = total% + �c_f_v$(f%)
1��
1�=total%
1�
1�
1�� �next_record
1��extract_record_data
1�� �valid_record �
1�D � �(�record_space = 0 � �($rec_number%) = number_of_records%) �
1�$  �write_record(�($rec_number%))
1�)  $rec_number% = �(�($rec_number%)+1)
1�.  � �($rec_number%) > number_of_records% �
1�     number_of_records%+=1
2     �clear_record
2
  �
2&     �read_record(�($rec_number%))
2  �
2( �
22�
2<�update_display
2F�
2P
2Z� �previous_record
2d�extract_record_data
2n� �valid_record �
2x$  �write_record(�($rec_number%))
2�  � �($rec_number%) > 1 �
2�)  $rec_number% = �(�($rec_number%)-1)
2�#  �read_record(�($rec_number%))
2�  �
2�
    �7
2�  �
2��
2��update_display
2��
2�
2�� �start
2��extract_record_data
2�� �valid_record �
3$  �write_record(�($rec_number%))
3  � �($rec_number%) > 1 �
3  $rec_number% = �(1)
3"#  �read_record(�($rec_number%))
3,  �
36
    �7
3@  �
3J�
3T�update_display
3^�
3h
3r
3|
3�
3�� �end_of_file
3��extract_record_data
3�� �valid_record �
3�$  �write_record(�($rec_number%))
3�/  � �($rec_number%)  < number_of_records% �
3�+  $rec_number% = �( number_of_records%)
3�#  �read_record(�($rec_number%))
3�  �
3�
    �7
3�  �
3��
3��update_display
4�
4
4� �update_display
4&:   È™"Wimp_ForceRedraw",display_window%,0,-1000,1000,0
40(   È™"Wimp_GetCaretPosition",,caret%
4:   window% = caret%!0
4D   icon%   = caret%!4
4N$�   PROCset_caret(window%,icon%)
4X�
4b
4l
4v
4�� �read_record(position%)
4�� p%, pointer%, f%
4�c_f_v$() = ""
4�*pointer% = 5000+position%*record_size%
4��#file% = pointer%
4�bad_field% = �
4�� �
4�
f% = 0
4�0ȕ f% <(number_of_fields%  )  � � bad_field%
4�  � � � bad_field% = �
4�  � � bad_field% �
4�    � #file%, c_f_v$(f%)
4�     p% =display_data%+f%*300
5    $p% =c_f_v$(f%)
5    f% +=1
5  �
5 �
5*� �
54�
5>
5H
5R� �write_record(position%)
5\� p%, pointer%
5f*pointer% = 5000+position%*record_size%
5p�#file% = pointer%
5z"� f% = 0 � number_of_fields%-1
5� � #file%, c_f_v$(f%)
5��
5��
5� 
5�
5�
5�� �emergency_close
5�    file% = 0
5�    loaded% = �
5�    inhibit% = �
5�&    �closeawindow(display_window%)
5�#    �closeawindow(sort_window%)
5�%    �closeawindow(output_window%)
6%    �closeawindow(fields_window%)
6'    �closeawindow(password_window%)
6%    �closeawindow(screen_window%)
6$#    �closeawindow(save_window%)
6.    �destroy_display_icons
68    �empty_fields
6B&    �closeawindow(newfile_window%)
6L%    �closeawindow(fields_window%)
6V�
6` 
6j
6t
6~� �close_down_file
6�� file% <> 0 �
6�  �#file% = 0
6�  number_of_fields% = 0
6�  � rec% = 0 � max_fields
6�  � �(f$(rec%,0)) > 0 �
6�     number_of_fields% +=1
6�  �
6�  �
6�  � �field_length_ok �
6�1    � a% = field_des% � field_des% + 2196 � 4
6�      �#file%,!a%
6�	    �
7    � #file%,$password%
7
    � #file%, $filename%
7$    � #file%, number_of_records%
7    � #file%, record_size%
7(#    � #file%, number_of_fields%
72!    � #file%, �($rec_number%)
7<    � rec% = 0 � max_fields
7F%      � #file%, field_used%(rec%)
7P	    �
7Z
7d2    � a% = output_list% � output_list%+496 � 4
7n        � #file%,!a%
7x	    �
7�2    � a% = search_list% � search_list%+196 � 4
7�       � #file%,!a%
7�	    �
7�0    � a% = sort_field% � sort_field%+296 � 4
7�       � #file%,!a%
7�	    �
7�    �extract_record_data
7�&    �write_record(�($rec_number%))
7�    � #file%
7�    file% = 0
7�    loaded% = �
7�    inhibit% = �
7�&    �closeawindow(display_window%)
8#    �closeawindow(sort_window%)
8%    �closeawindow(output_window%)
8%    �closeawindow(fields_window%)
8"'    �closeawindow(password_window%)
8,%    �closeawindow(screen_window%)
86#    �closeawindow(save_window%)
8@    �destroy_display_icons
8J    �empty_fields
8T&    �closeawindow(newfile_window%)
8^%    �closeawindow(fields_window%)
8h  �
8r�    �error_message("The field descriptor has been changed and is now too long. Either reduce the number of fields or reduce their length")
8|    quit% = �
8�  �
8��
8��
8�
8�
8�
8�
8�� �field_length_ok
8��extract_field_description
8�total% = 0
8�control% = 0
8�� f% = 0 � max_fields
8�$   total% = total% + �(f$(f%,2))
9&   � �(f$(f%,0)) > 0 � control%+=2
9�
9(� total% > record_size% - control% �
9&=�
90�
9:=�
9D
9N
9X� �password_check
9b  � $password% <> "" �
9l    $in_password% = ""
9v&    �open_window(password_window%)
9�    inhibit% = �
9�  �
9��
9�
9�
9�
9�� �password
9�%  �closeawindow(password_window%)
9�,  � �$password%,4) = �$in_password%,4) �
9�    inhibit% = �
9�%    �open_window(display_window%)
9�  �
9�:    �error_message("Incorrect password. File closing")
:    �close_down_file
:  �
:�
: 
:*
:4� �upper(text$)
:>� result$,i%,c$
:Hresult$=""
:R� i% = 1 � �text$
:\ c$=�text$,i%,1)
:f* � c$>="a" � c$<="z" � c$=�(�(c$)�&DF)
:p result$=result$+c$
:z�
:�=result$
:�
:�#� �replace(object$,target$,by$)
:�� start%, position%
:�start% = �object$,target$)
:�
È• start%
:�.position% = �(object$)-�(target$)-start%+1
:�8object$ = �object$,start%-1)+by$+�object$,position%)
:�,start% = �object$,target$,start%+�(by$))
:��
:�=object$
:�
:�� �output_upper(text$)
;� result$,i%,c$
;quote% = �
;result$=""
;$� i% = 1 � �text$
;. c$=�text$,i%,1)
;8# � c$ = �34 � quote% = � quote%
;B � c$="," � c$ = "+"
;L= � c$=";" � i% < �text$ � i% > 1 � c$="+"+�34+" "+�34+"+"
;V   � � quote% �
;`-    � c$>="a" � c$<="z" � c$=�(�(c$)�&DF)
;j   �
;t result$=result$+c$
;~�
;�=result$
;�
;�
;�
;�
;�
;�� �create_field_output
;�� field%, i%
;�headings$() = ""
;�Yheadings$(0)= "Field    Name                Type Width Decimals Minimum Maximum List"
;�$� field% = 0 � number_of_fields%
;��  headings$(field%+2)=�pad(�(field%+1),9)+�pad(f$(field%,0),20)+�pad(f$(field%,1),5)+�pad(f$(field%,2),7)+�pad(f$(field%,3),9)+�pad(f$(field%,4),8)+�pad(f$(field%,5),8)+f$(field%,6)
<�
<
�
<
<� �pad(string$,length%)
<(string$+=�length%," ")
<2string$ = �string$,length%)
<<=string$
<F
<P
<Z
<d
<n
<x
<�� �insert_date
<�� l$,r$,position%
<�1position% = �search_string$,�upper(f$(f%,0)))
<�ȕ position% > 0
<�(  position% = position% + � f$(f%,0)
<�n  ȕ (�search_string$,position%,1) <"0" � �search_string$,position%,1) >"1") � position% < �search_string$
<�!     position% = position% +1
<�  �
<ғ  search_string$ = �search_string$,position%-1)+"FNdate("+�34+�search_string$,position%,8)+�34+")"+�search_string$,�search_string$-position%-8)
<�#l$ = �search_string$,position%)
<�5r$ = �search_string$,�(search_string$)-position%)
<�Al$= �replace(l$,�upper(f$(f%,0)),"FNdate(c_f_v$("+�(f%)+"))")
<�search_string$ = l$ + r$
=1position% = �search_string$,�upper(f$(f%,0)))
=�
=�
="
=,
=6
=@ 
=J
=T� �valid_search_criteria
=^&� total%, ok%, list%, d, FIELDLIST
=hok% = �
=rFIELDLIST = �
=|� � search_string$ = 0 �
=�U   �error_message("A search string must be entered. Use ALL to list all records")
=�	ok%=�
=��
=�total% = 0
=�   � list% = 0 � 5
=�2     total% = total% + � (output_list$(list%))
=�   �
=�� total% = 0 �
=�	ok%=�
=�T   �error_message("At least one of the output lines must contain a field name.")
=��
=�� �
=�N� � � ok% = � :�error_message("The search string contains a syntax error")
>� ok% � d=�(search_string$)
>� �
>=ok%
>& 
>0
� �screen
>:error% = �
>D�extract_record_data
>N� �valid_record �
>X?  �write_record(�($rec_number%)) : � save the latest record
>b!  � �extract_output_list_ok �
>l"  � �create_search_string_ok �
>v   � �valid_search_criteria �
>�  � list% = 0 � 5
>�,    pointer% = output_display%+list%*300
>�    $pointer% = ""
>�  �
>�"  �open_window(screen_window%)
>�  rec% = 1
>�  match% = 0
>�  $output_rec% = �rec%
>�  $matches% = �match%
>�7  ș"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
>�  escape% = �
>�  �poll(0)
>�/  ȕ rec% <= number_of_records% � � escape%
?    �read_record(rec%)
?L    � � �icon_set(output_window%,case_sens_icon%) � �convert_record_case
?    � �(search_string$) �
? >    �read_record(rec%) : � because the case may be changed
?*9    � �icon_set(output_window%,tab_icon%) � �tabulate
?4      match% +=1
?>      $output_rec% = �rec%
?H      $matches% = �match%
?R       � list% = 0 � 5
?\0        pointer% = output_display%+list%*300
?f)        � �(output_list$(list%)) >0 �
?p          �do_list
?z
        �
?�          $pointer% = ""
?�         �
?�       �
?�;      ș"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
?�      �
?�        �glass(�)
?�        ȗ x,y,b
?�      � b = 0 � b = 5
?�      �glass(�)
?�	    �
?�      $output_rec% = �rec%
?�=      ș"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
?�	    �
@    rec% +=1
@    �poll(0)
@
@$  �
@.@  �read_record(�($rec_number%)) : � reload the latest record
@8  � � error% �
@B  � escape%  �
@Ld      �message("Stop selected. Search incomplete. "+�(match%)+" matches have been found so far")
@V	    �
@`L      �message("Search complete. "+�(match%)+" matches have been found")
@j  �
@t  �
@~  �
@�#  �closeawindow(screen_window%)
@��
@��
@��
@��closeawindow(save_window%)
@��
@�
@� 
@�� �build_headings
@�� i%,pointer%, print_time$
@�  !date_stamp%= 3
@�   ș"OS_Word",14,date_stamp%
AD  È™"OS_ConvertStandardDateAndTime",date_stamp%,create_date%,100
A
%  print_time$ =�$create_date%,20)
A  headings$() = ""
A'  headings$(0)= "Cardbase Printout"
A(8  headings$(2)= "Filename       :       "+$filename%
A2:  headings$(3)= "Time created   :       "+create_date$
A<9  headings$(4)= "Time printed   :       "+print_time$
AFN  headings$(5)= "File size      :       "+�(number_of_records%)+" records"
AP3  � �icon_set(output_window%,case_sens_icon%) �
AZ2    headings$(6) = "Case sensitive :       ON"
Ad  �
An3    headings$(6) = "Case sensitive :       OFF"
Ax  �
A�-  � �icon_set(output_window%,tab_icon%) �
A�2    headings$(7) = "Tabulation     :       ON"
A�  �
A�3    headings$(7) = "Tabulation     :       OFF"
A�  �
A�<  headings$(8) = "Search string  :       "+$search_list%
A�  � i% = 0 � 5
A�%    pointer% = output_list%+i%*70
A�=    headings$(9+i%) = "Line x         :       "+$pointer%
A�&    �headings$(9+i%),6,1)= �(i%+1)
A�  �
A��
A�
B� �printer
B� i%
Berror% = �
B"� �printer_on �
B,)   � �$search_list%,9) ="fieldlist" �
B6%     �write_field_list_to_printer
B@   �
BJ     �extract_record_data
BT     � �valid_record �
B^D       �write_record(�($rec_number%)) : � save the latest record
Bh&       � �extract_output_list_ok �
Br'       � �create_search_string_ok �
B|%       � �valid_search_criteria �
B�         � list% = 0 � 5
B�3           pointer% = output_display%+list%*300
B�           $pointer% = ""
B�         �
B�9         � �icon_set(output_window%,headings_icon%) �
B�           �build_headings
B�           � i% = 0 � 15
B�&             �print(headings$(i%))
B�           �
B�         �
B�)         �open_window(screen_window%)
B�         rec% = 1
B�         match% = 0
C!         $output_rec% = �rec%
C          $matches% = �match%
C>         È™"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
C&         escape% = �
C0         �poll(0)
C:6         ȕ rec% <= number_of_records% � � escape%
CD!           �read_record(rec%)
CNS           � � �icon_set(output_window%,case_sens_icon%) � �convert_record_case
CX$           � �(search_string$) �
CbG             �read_record(rec%) : � because the case may be changed
ClB             � �icon_set(output_window%,tab_icon%) � �tabulate
Cv             match% +=1
C�%             $output_rec% = �rec%
C�$             $matches% = �match%
C�              � list% = 0 � 5
C�7               pointer% = output_display%+list%*300
C�0               � �(output_list$(list%)) >0 �
C�                 �do_list
C�&                 �print($pointer%)
C�               �
C�#                 $pointer% = ""
C�               �
C�             �
C�B             ș"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
C�           �
D%             $output_rec% = �rec%
DD             È™"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
D           �
D            rec% +=1
D*           �poll(0)
D4         �
D>G         �read_record(�($rec_number%)) : � reload the latest record
DH         � � error% �
DR           � escape%  �
D\k             �message("Stop selected. Search incomplete. "+�(match%)+" matches have been found so far")
Df           �
DpS             �message("Search complete. "+�(match%)+" matches have been found")
Dz           �
D�         �
D�*         �closeawindow(screen_window%)
D�       �
D�
     �
D�	    �
D�	    �
D�   �
D��
D��closeawindow(save_window%)
D��
D�
D�
D�
E
E� �do_list
E
   � �
E$   � � � error% =�
E.   � � error% �
E8-       $pointer% = �(output_list$(list%))
EB   �
EL&     �closeawindow(screen_window%)
EV_     �error_message("Line "+�(list%+1)+" contains an unknown field name or a syntax error")
E`     escape% = �
Ej   �
Et
   � �
E~�
E�
E� 
E�
E�
E�
E�� �file_output
E�   �open_window(save_window%)
E�6  ș"Wimp_SetCaretPosition",save_window%,2,,,-1,-1
E��
E� 
E� 
E�� �print(text$)
F� i%
F
�2
F� i%= 1 � �text$
F  �1,�(�text$,i%,1))
F(�
F2�1,13,1,10
F<�3
FF�
FP
FZ
Fd
Fn� �printer_on
Fx� ok%, cancelled%
F�cancelled% = �
F�ok% = �
F��
F�   ș"OS_Byte",21,3
F�   � 2,1,65,1,127,3
F�"   ș"OS_Byte",152,3 � ;flags%
F�   flags% = flags% � 2
F�   � flags% <> 0 �
F�     ok%=�
F�   �
F�}      � �cancel_message("Printer is not responding. Click on OK to try again. Click on cancel to abandon printing") = 2 �
F�        cancelled%=�
F�      �
G   �
G� cancelled% � ok%
G=ok%
G"
G,
G6
G@
GJ
GT
G^� �convert_record_case
Gh� f%
Gr � f% = 0 � number_of_fields%
G|%  c_f_v$(f%) = �upper(c_f_v$(f%))
G��
G��
G�
G�
G�� �start_output_drag
G�  � wex%,wey%
G�  � (button% � &50) <> 0 �
G�  !block% = save_window%
G�%  ș"Wimp_GetWindowState",,block%
G�!  wex% = block%!4 - block%!20
G�"  wey% = block%!16 - block%!24
G�0  block%!4 = 3 : � icon handle for drag icon
G�#  ș"Wimp_GetIconState",,block%
H  !block% = save_window%
H  block%!4 = 5
H  block%!8 = block%!8 +wex%
H&!  block%!12 = block%!12 +wey%
H0!  block%!16 = block%!16 +wex%
H:!  block%!20 = block%!20 +wey%
HD  block%!24 = 0
HN  block%!28 = 0
HX  block%!32 = &7FFFFFFF
Hb  block%!36 = &7FFFFFFF
Hl  È™"Wimp_DragBox",,block%
Hv  �
H��
H�
H�
H�� �start_disk_list
H�#ș"Wimp_GetPointerInfo",,block%
H�block%!20 = 64
H�block%!32 = 0
H�block%!36 = 1
H�block%!40 = block%!12
H�block%!44 = block%!16
H�block%!48 = !block%
H�block%!52 = block%!4
H�*block%!56 = 10000 : � size of the file
I/block%!60 = &FFF  : � file type of the file
I*$(block%+64) = �leaf($text_file_name%)
I-?(block%+65+��leaf($text_file_name%)) = 0
I 9È™"Wimp_SendMessage",17,block%+20,block%!12,block%!16
I*�
I4
I>
IH
IR � �produce_output(filename$)
I\� i%
Iferror% = �
Ip&� �$search_list%,9) ="fieldlist" �
Iz!  �closeawindow(save_window%)
I�  �write_field_list_to_disc
I��
I�  �extract_record_data
I�2  � �valid_record � �overwrite_ok(filename$) �
I�A    �write_record(�($rec_number%)) : � save the latest record
I�#    � �extract_output_list_ok �
I�$    � �create_search_string_ok �
I�"    � �valid_search_criteria �
I�      � list% = 0 � 5
I�0        pointer% = output_display%+list%*300
I�        $pointer% = ""
I�      �
I�,      output_file_handle% = �(filename$)
J6      � �icon_set(output_window%,headings_icon%) �
J        �build_headings
J        � i% = 0 � 15
J$/          �print_to_the_disk(headings$(i%))
J.
        �
J8      �
JB&      �open_window(screen_window%)
JL      rec% = 1
JV      match% = 0
J`      $output_rec% = �rec%
Jj      $matches% = �match%
Jt;      È™"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
J~      escape% = �
J�      �poll(0)
J�3      ȕ rec% <= number_of_records% � � escape%
J�        �read_record(rec%)
J�P        � � �icon_set(output_window%,case_sens_icon%) � �convert_record_case
J�!        � �(search_string$) �
J�D          �read_record(rec%) : � because the case may be changed
J�?          � �icon_set(output_window%,tab_icon%) � �tabulate
J�          match% +=1
J�"          $output_rec% = �rec%
J�!          $matches% = �match%
J�          � list% = 0 � 5
J�4            pointer% = output_display%+list%*300
K-            � �(output_list$(list%)) >0 �
K
              �do_list
K/              �print_to_the_disk($pointer%)
K            �
K(               $pointer% = ""
K2            �
K<          �
KF?          È™"Wimp_ForceRedraw",screen_window%,0,-500,4000,0
KP
        �
KZ"          $output_rec% = �rec%
KdA          È™"Wimp_ForceRedraw",screen_window%,620,-62,770,-14
Kn
        �
Kx        rec% +=1
K�        �poll(0)
K�      �
K�D      �read_record(�($rec_number%)) : � reload the latest record
K�      � � error% �
K�        � escape%  �
K�h          �message("Stop selected. Search incomplete. "+�(match%)+" matches have been found so far")
K�
        �
K�P          �message("Search complete. "+�(match%)+" matches have been found")
K�
        �
K�      �
K�'      �closeawindow(screen_window%)
K�%      �closeawindow(save_window%)
K�       �# output_file_handle%
L)      �("settype "+filename$+" text")
L	    �
L#    �closeawindow(save_window%)
L"	    �
L,   �
L6  �
L@�
LJ�
LT
L^
Lh
Lr� �write_field_list_to_disc
L| � �overwrite_ok(filename$) �
L�(  output_file_handle% = �(filename$)
L�    �create_field_output
L�    � i% = 0 � 15
L�,       �print_to_the_disk(headings$(i%))
L�	    �
L�  �# output_file_handle%
L�%  �("settype "+filename$+" text")
L��
L��
L�
L�
L�"� �write_field_list_to_printer
L�    �create_field_output
M    � i% = 0 � 15
M        �print(headings$(i%))
M	    �
M&�
M0
M:
MD� �print_to_the_disk(text$)
MN� i%
MX� �text$ > 0 �
Mb� i%= 1 � �text$
Ml+  �#output_file_handle%,�(�text$,i%,1))
Mv�
M��
M�F  � �icon_set(output_window%,cr_icon%) � � #output_file_handle%,13
M�  � #output_file_handle%,10
M��
M�
M�
M�� �quick_save
M�$  � �$text_file_name%,".") = 0 �
M�G    �error_message("To save, drag the icon to a directory viewer.")
M�  �
M�)    �produce_output($text_file_name%)
M�  �
M��
N
N
N
N � �overwrite_ok(filename$)
N*� name$, type%
N4name$ = filename$ + �0
N>%ș"OS_File",5,name$,,,,,0 � type%
NHȎ type% �
NR  � 0 : = �
N\  � 1 : result% = �cancel_message("A file of this name exists. Click on OK to replace it. Click on CANCEL to abort search")
Nf           � result% = 1 �
Np              = �
Nz           �
N�              = �
N�           �
N�:  � 2 : �error_message("This is a directory name"):= �
N��
N�
N�� �file_size
N�� r0,r1,r2
N�"ș"OS_Args",2,file% � r0,r1,r2
N�=r2
N�
N�� �delete_record
N�� present%
N�� number_of_records% = 1 �
OQ �error_message("The file contains only one record. This can not be deleted")
O�
O   present% = �($rec_number%)
O$'  � present% = number_of_records% �
O./    number_of_records%=number_of_records%-1
O8,    $rec_number% = �(number_of_records%)
OB%    �read_record(�($rec_number%))
OL    �update_display
OV  �
O`    proceed% = �
Oj/    � number_of_records% - present% < 500 �
Ot       proceed% = �
O~	    �
O�S      � �cancel_message("This may take some time. Select OK to continue") = 1 �
O�       proceed% = �
O�	    �
O�	    �
O�    � proceed% �
O�    �glass(�)
O�.    total% = number_of_records% - present%
O� 
O�    done% = 0
O�/    � i% = present% � number_of_records% -1
O�       �read_record(i%+1)
O�       �write_record(i%)
P7       È™"Hourglass_Percentage", done%/total% * 100
P
       done% +=1
P	    �
P    �glass(�)
P(/    number_of_records%=number_of_records%-1
P2    �read_record(present%)
P<    �update_display
PF	    �
PP�
PZ�
Pd�
Pn
Px� �tabulate
P�� f%
P� � f% = 0 � number_of_fields%
P�+  c_f_v$(f%)=c_f_v$(f%)+Ļf$(f%,2)," ")
P�(  c_f_v$(f%)=� c_f_v$(f%),�f$(f%,2))
P��
P��
P� 
P�
P�
P�� �sort
P�
� memory%
P�memory_sort% = �
P�� �extract_sort_condition �
Q  �extract_record_data
Q$  �write_record(�($rec_number%))
Q  size% = �file_size + 5000
Q"
Q,	  � �
Q6  � � �  memory_sort% = �
Q@  � memory_sort% �
QJ0     ș"OS_Module",6,,,size% � r0,r1,memory%
QT     � �
Q^         �load_file_to_memory
Qh
Qr     �memory_sort
Q|
Q�"        �save_file_from_memory
Q�!     ș"OS_Module",7,,memory%
Q�  �
Q�     � �
Q�     �7
Q�     �discsort
Q�  �
Q�#  �read_record(�($rec_number%))
Q�  �update_display
Q��
Q��
Q�
Q�
R� �memory_sort
R
�glass(�)
Rmax = number_of_records%
R&� current = 1 � max-1
R0%   �recall_from_memory_a(current)
R:D   highest = current               :� record_b is highest so far
RD%   �recall_from_memory_b(current)
RN   � i = current +1 � max
RX!     �recall_from_memory_a(i)
Rb     � �compare �
Rl       highest = i
Rv)       �recall_from_memory_b(highest)
R�
     �
R�   �
R�%   �recall_from_memory_a(current)
R�"   �store_in_memory_a(highest)
R�"   �store_in_memory_b(current)
R�#   � SWAP r(current),r(highest)
R�2   ș"Hourglass_Percentage", current/max * 100
R�   �poll(0)
R��
R�
�glass(�)
R��
R�
R�
S
S� �discsort
Smax = number_of_records%
S 
�glass(�)
S*� current = 1 � max-1
S4   �read_record_a(current)
S>D   highest = current               :� record_b is highest so far
SH   �read_record_b(current)
SR   � i = current +1 � max
S\     �read_record_a(i)
Sf     � �compare �
Sp       highest = i
Sz"       �read_record_b(highest)
S�
     �
S�   �
S�   �read_record_a(current)
S�   �write_record_a(highest)
S�   �write_record_b(current)
S�#   � SWAP r(current),r(highest)
S�2   ș"Hourglass_Percentage", current/max * 100
S�   �poll(0)
S��
S�
�glass(�)
S��
S�
S� 
T
T
T
T$ 
T.
T8
TB
TL� �read_record_a(position%)
TV�  pointer%, f%
T`record_a$()=""
Tj*pointer% = 5000+position%*record_size%
Tt�#file% = pointer%
T~bad_field% = �
T�� �
T�
f% = 0
T�0ȕ f% <(number_of_fields%  )  � � bad_field%
T�  � � � bad_field% = �
T�  � � bad_field% �
T�    � #file%, record_a$(f%)
T�    f% +=1
T�  �
T��
T�� �
T��
T�
U
U
 � �write_record_a(position%)
U� pointer%
U*pointer% = 5000+position%*record_size%
U(�#file% = pointer%
U2"� f% = 0 � number_of_fields%-1
U< � #file%, record_a$(f%)
UF�
UP�
UZ
Ud� �read_record_b(position%)
Un�  pointer%, f%
Uxrecord_b$() = ""
U�*pointer% = 5000+position%*record_size%
U��#file% = pointer%
U�bad_field% = �
U�� �
U�
f% = 0
U�0ȕ f% <(number_of_fields%  )  � � bad_field%
U�  � � � bad_field% = �
U�  � � bad_field% �
U�    � #file%, record_b$(f%)
U�    f% +=1
U�  �
U��
U�� �
V�
V
V
V" � �write_record_b(position%)
V,� pointer%
V6*pointer% = 5000+position%*record_size%
V@�#file% = pointer%
VJ"� f% = 0 � number_of_fields%-1
VT � #file%, record_b$(f%)
V^�
Vh�
Vr
V|
V�
V�� �extract_sort_condition
V�� a%, left$, right$, f%
V�ok% = �
V�� a% = 0 � 5
V�3  sort_line$(a%) = �upper($(sort_field%+50*a%))
V�%  pointer% = sort_field%+50*a%+22
V�  Ȏ $pointer% �
V�,   � "A","a" :  sort_operator$(a%) = "<"
V�,   � "D","d" :  sort_operator$(a%) = ">"
V�   
V�$     sort_operator$(a%) = "TRUE"
V�   �
W   � � sort_line$(a%) >0 �
W     � � $pointer% = 0 �
Wu        �error_message("Line "+�(a%+1)+" has a field name but the direction of the sort has not been specified.")
W&        ok% = �
W0	    �
W:       f% = 0
WDI       ȕ sort_line$(a%) <> �upper(f$(f%,0)) � f% < number_of_fields%
WN         f%+=1
WX       �
Wb1       � sort_line$(a%) <> �upper(f$(f%,0)) �
Wln        �error_message("Line "+�(a%+1)+" has a field called "+sort_line$(a%)+" this field does not exist")
Wv        ok% = �
W�       �
W�!       left$ = sort_line$(a%)
W�"       right$ = sort_line$(a%)
W�       Ȏ f$(f%,1) �
W�;       � "D","d" : left$ = "FNdate(record_a$("+�f%+"))"
W�>                      right$= "FNdate(record_b$("+�f%+"))"
W�8       � "N","n" : left$ = "VAL(record_a$("+�f%+"))"
W�;                    : right$= "VAL(record_b$("+�f%+"))"
W�4       � "T","t" : � �icon_set(sort_window%,4) �
W�9                         left$ = "record_a$("+�f%+")"
W�9                         right$= "record_b$("+�f%+")"
W�                      �
W�B                         left$ = "FNupper(record_a$("+�f%+"))"
XB                         right$= "FNupper(record_b$("+�f%+"))"
X                      �
X       �
X *       � sort_operator$(a%) = "TRUE" �
X*"         sort_line$(a%)="TRUE"
X4       �
X>=         sort_line$(a%) = left$+sort_operator$(a%)+right$
XH0         sort_line$(a%+6) = left$+"="+right$
XR       �
X\	    �
Xf   �
Xp     sort_line$(a%)="TRUE"
Xz      sort_line$(a%+6)="TRUE"
X�	    �
X��
X�=ok%
X� 
X�
X�
X�� �compare
X�
� result%
X�result% = �
X�� �sort_line$(0) �
X�  result% = �
X��
X�  � �sort_line$(6) �
Y 
Y    � �sort_line$(1) �
Y      result% = �
Y$	    �
Y.     � �sort_line$(7) �
Y8 
YB       � �sort_line$(2) �
YL        result% = �
YV       �
Y`        � �sort_line$(8) �
Yj 
Yt           � �sort_line$(3) �
Y~            result% = �
Y�          �
Y�"            � �sort_line$(9) �
Y� 
Y�$              � �sort_line$(4) �
Y�                result% = �
Y�              �
Y�'                � �sort_line$(10) �
Y� 
Y�)                   � �sort_line$(5) �
Y�$                     result% = �
Y�                   �
Y�,                     � �sort_line$(11) �
Z 
Z
                   �
Z                  �
Z
Z(                �
Z2              �
Z<
ZF            �
ZP          �
ZZ
Zd       �
Zn
     �
Zx
Z�	    �
Z�  �
Z� 
Z�  �
Z��
Z�=result%
Z�
Z�� �load_file_to_memory
Z�#� rec% = 1 � number_of_records%
Z�  �read_record_a(rec%)
Z�  �store_in_memory_a(rec%)
Z��
Z��
[
[� �save_file_from_memory
[#� rec% = 1 � number_of_records%
["!  �recall_from_memory_a(rec%)
[,  �write_record_a(rec%)
[6�
[@�
[J
[T
[^� �store_in_memory_a(rec%)
[h(pointer% = rec%*record_size%+memory%
[r#� f% = 0 � number_of_fields% -1
[|    $pointer% = record_a$(f%)
[�.    pointer% = pointer% + �record_a$(f%)+1
[��
[��
[�
[�� �store_in_memory_b(rec%)
[�(pointer% = rec%*record_size%+memory%
[�#� f% = 0 � number_of_fields% -1
[�    $pointer% = record_b$(f%)
[�.    pointer% = pointer% + �record_b$(f%)+1
[��
[��
[�
[�
\!� �recall_from_memory_a(rec%)
\(pointer% = rec%*record_size%+memory%
\#� f% = 0 � number_of_fields% -1
\&    record_a$(f%) = $pointer%
\0.    pointer% = pointer% + �record_a$(f%)+1
\:�
\D�
\N
\X!� �recall_from_memory_b(rec%)
\b(pointer% = rec%*record_size%+memory%
\l#� f% = 0 � number_of_fields% -1
\v    record_b$(f%) = $pointer%
\�.    pointer% = pointer% + �record_b$(f%)+1
\��
\��
\�
\�
\�� �read_virus
\�� f%
\�!f% = �("<CardBase$Dir>.date")
\�� f% > 0 �
\�  virus_set% = �
\�  � virus$(12)
\�  count% = -1
\�  �
]     count% +=1
]$     no_more% = �read_virus_line
]  � count% = 10 � no_more%
]   � #f%
]*#  � �virus$(0),6) <> ��$,5,6) �
]4     virus_set% = �
]>  �
]H    no_of_vir_mess% = 0
]R    � j% = 1 � 10
]\/     � �virus$(j%) > 0 � no_of_vir_mess%+=1
]f	    �
]p     current_vir_mess% = 1
]z.    � no_of_vir_mess% = 0 � virus_set% = �
]�  �
]��
]�  virus_set% = �
]��
]��
]� 
]�
]�� �read_virus_line
]�  �get_a_line
]�   ȕ �line$,1) ="|" � � �#f%
]�     �get_a_line
]�  �
]�  virus$(count%) = line$
^= � #f%
^
^
^$� �get_a_line
^.  line$ =""
^8  c% = �#f%
^B  È• c% <> 10
^L    line$ = line$+�c%
^V    c% = �#f%
^`  �
^j�
^t
^~ 
^�
^�� �show_virus
^�'�message(virus$(current_vir_mess%))
^�current_vir_mess% +=1
^�+� current_vir_mess% > no_of_vir_mess% �
^�   current_vir_mess% =1
^��
^��
^�
^�
^�
^�
_� �extract_output_list_ok
_
� error%, list%
_list% = -1
_ȕ list% < 5 � � error%
_(  list% += 1
_2*  pointer% = output_list% + list% * 70
_<%  output_list$(list%) = $pointer%
_F>  output_list$(list%) = �output_upper(output_list$(list%))
_P8  �output_string_convert(output_list$(list%),error%)
_Z�
_d
=� error%
_n
_x
_�
_�
_�
_�� �create_search_string_ok
_�� search%, error%
_�  search% = �
_�$  search_string$ = $search_list%
_�3  � �icon_set(output_window%,case_sens_icon%) �
_�6     search_string$ =�output_upper(search_string$)
_�  �
_�/     search_string$ =�upper(search_string$)
_�  �
_�3  �search_string_convert(search_string$,error%)
`
=� error%
`
`
`"1� �output_string_convert(� string$, � error%)
`,
� result$
`6result$ = ""
`@È• string$<>""
`J$   �strip_leading_space(string$)
`T2   �output_next_element(item$,string$, error%)
`^"   result$ = result$+item$+" "
`h�
`rstring$ = result$
`|�
`�
`�
`�
`�
`�3� �output_next_element(� item$, � s$, � error%)
`�item$ = ""
`�� �s$,1) = �34 �
`�  item$= �34
`�  �
`�    s$ = �s$,�(s$)-1)
`�    item$ += �s$,1)
`�  � �s$,1)=�34 � s$=""
`�  s$ = �s$,�(s$)-1)
a&  � �item$ = 1 � �item$,1)<> �34 �
a    error% = �
aP    �error_message("Output line "+�(list%+1)+" contains an unmatched quote")
a&  �
a0�
a:   t$ = �s$,1)
aD   � �",;+",t$) >0 �
aN     item$ = t$
aX     s$ = �s$,�(s$)-1)
ab   �
al       t$ = �s$,1)
av)       ȕ t$ <>"" � �" ,;+"+�34,t$)=0
a�            item$=item$ +t$
a�!            s$ = �s$,�(s$)-1)
a�            t$ = �s$,1)
a�       �
a�!       � do substitution here
a�,       �output_substitute(item$, error%)
a�   �
a��
a��
a�
a�
a� � �strip_leading_space(� s$)
a�ȕ �s$,1) = " "
b  s$ = �s$,�(s$)-1)
b�
b�
b 
b*
b4
b>+� �output_substitute(� text$, � error%)
bH� f%, found%
bRfound% = �
b\f% = -1
bf(ȕ f% < number_of_fields% � � found%
bp    f% +=1
bz$    � text$ = �upper(f$(f%,0)) �
b�      found% = �
b�#      text$="c_f_v$("+�(f%)+")"
b�	    �
b��
b�� � found% �
b�b   �error_message("The field "+text$+" used in the output line "+�(list%+1)+" does not exist")
b�   error% = �
b��
b��
b�
b�
b�1� �search_string_convert(� string$, � error%)
b�
� result$
cerror% = �
cresult$ = ""
cȕ string$<>"" � � error%
c$$   �strip_leading_space(string$)
c.2   �search_next_element(item$,string$, error%)
c8"   result$ = result$+item$+" "
cB�
cLstring$ = result$
cV�
c`
cj
ct
c~
c�3� �search_next_element(� item$, � s$, � error%)
c�error% = �
c�item$ = ""
c�� �s$,1) = �34 �
c�  item$= �34
c�  �
c�    s$ = �s$,�(s$)-1)
c�    item$ += �s$,1)
c�  � �s$,1)=�34 � s$=""
c�  s$ = �s$,�(s$)-1)
c�&  � �item$ = 1 � �item$,1)<> �34 �
c�    error% = �
dG    �error_message("The search string contains an unmatched quote")
d
  �
d�
d   t$ = �s$,2)
d(&   � t$="<>" � t$=">=" � t$="<=" �
d2     item$ = t$
d<     s$ = �s$,�(s$)-2)
dF   �
dP     t$ = �s$,1)
dZ"     � �"=,;+-()/*><",t$) >0 �
dd       item$ = t$
dn       s$ = �s$,�(s$)-1)
dx
     �
d�       t$ = �s$,1)
d�       � t$ = "[" �
d�$         ȕ t$ <>"" � �"]",t$)=0
d�            item$=item$ +t$
d�!            s$ = �s$,�(s$)-1)
d�            t$ = �s$,1)
d�          �
d�          s$ = �s$,�(s$)-1)
d�*          item$ = �item$,2,�(item$)-1)
d�)          � � item$ <> 8 � t$ <>"]" �
d�            error% = �
d�            �error_message("The search string contains a date with an unmatched bracket. Dates must be enclosed within [] and contain 8 characters"+�13+"eg [03 11 92]")
d�          �
e)          � do date substitution here
e1          item$ = "FNdate("+�34+item$+�34+")"
e       �
e"3          ȕ t$ <>"" � �" ,;+=<>()*/"+�34,t$)=0
e,            item$=item$ +t$
e6!            s$ = �s$,�(s$)-1)
e@            t$ = �s$,1)
eJ          �
eT$          � do substitution here
e^.          �search_substitute(item$,error%)
eh       �
er
     �
e|   �
e��
e��
e�
e�
e�
e�
e�
e�+� �search_substitute(� text$, � error%)
e�� f%, found%
e�found% = �
e�f% = -1
e�(ȕ f% < number_of_fields% � � found%
e�    f% +=1
f$    � text$ = �upper(f$(f%,0)) �
f      found% = �
f'         � �upper(f$(f%,1)) = "T" �
f&)            text$="c_f_v$("+�(f%)+")"
f0         �
f:'         � �upper(f$(f%,1)) = "N" �
fD,            text$="VALc_f_v$("+�(f%)+")"
fN         �
fX'         � �upper(f$(f%,1)) = "D" �
fb1            text$="FNdate(c_f_v$("+�(f%)+"))"
fl         �
fv	    �
f��
f�i% = -1
f�+ȕ i% < number_of_operators% � � found%
f�  i% +=1
f�  � text$ = operator$(i%) �
f�     found% = �
f�  �
f��
f�� � found% �
f�#  found% = �its_a_number(text$)
f��
f�
f�� � found% �
g   error% = �
gU   �error_message("The field "+text$+" used in the search string does not exist")
g�
g �
g*
g4� �its_a_number(n$)
g>
� ok%, i%
gHok% = �
gR� i% = 1 � �n$
g\+  � �"0123456789-+.E", �n$,i%,1)) = 0 �
gf     ok% = �
gp  �
gz�
g�=ok%
g�
g�ݤicon_set(window%,icon%)
g�!block_3%=window%
g�block_3%!4=icon%
g�#ș"Wimp_GetIconState",,block_3%
g�=((block_3%!24 � 1<<21)<>0)
g�:
g�
g�� �quick_close
g�  ș "Wimp_CloseDown"
g��
g�
h
h� �full_access(name$)
h� state%, r5%
h$*  ș"OS_File",5,name$,,,,,0 � ,,,,,r5%
h.  state% = r5% � %1011
h8  = state% = 3
hB
hL
hV
h`� dummy
hj
ht
h~	dummy
�
00000000  0d 00 0a 1f f4 20 20 20  20 21 72 75 6e 69 6d 61  |.....    !runima|
00000010  67 65 20 66 6f 72 20 43  61 72 64 42 61 73 65 0d  |ge for CardBase.|
00000020  00 0f 28 f4 20 20 20 20  43 6f 70 79 72 69 67 68  |..(.    Copyrigh|
00000030  74 20 41 72 63 68 69 6d  65 64 65 73 20 57 6f 72  |t Archimedes Wor|
00000040  6c 64 20 31 39 39 31 0d  00 14 1c f4 20 20 20 20  |ld 1991.....    |
00000050  53 74 61 72 74 65 64 20  32 20 4a 75 6c 79 20 31  |Started 2 July 1|
00000060  39 39 30 0d 00 1e 13 f4  20 20 20 20 48 6f 75 72  |990.....    Hour|
00000070  73 20 3d 20 34 33 0d 00  28 04 0d 00 32 27 f4 20  |s = 43..(...2'. |
00000080  20 20 20 56 65 72 73 69  6f 6e 20 30 2e 30 31 20  |   Version 0.01 |
00000090  31 34 20 53 65 70 74 65  6d 62 65 72 20 31 39 39  |14 September 199|
000000a0  30 0d 00 3c 2c f4 20 20  20 20 42 75 67 20 66 69  |0..<,.    Bug fi|
000000b0  78 20 74 6f 20 61 76 6f  69 64 20 70 72 69 6e 74  |x to avoid print|
000000c0  65 72 20 6f 6e 20 6d 65  73 73 61 67 65 0d 00 46  |er on message..F|
000000d0  04 0d 00 50 2a f4 20 20  20 20 56 65 72 73 69 6f  |...P*.    Versio|
000000e0  6e 20 30 2e 30 32 20 53  74 61 72 74 65 64 20 34  |n 0.02 Started 4|
000000f0  20 4d 61 72 63 68 20 31  39 39 31 0d 00 5a 14 f4  | March 1991..Z..|
00000100  20 20 20 20 48 6f 75 72  73 20 3d 20 36 2e 35 0d  |    Hours = 6.5.|
00000110  00 64 3a f4 20 20 20 20  53 63 72 6f 6c 6c 20 6f  |.d:.    Scroll o|
00000120  6e 20 63 75 72 73 6f 72  20 6d 6f 76 65 6d 65 6e  |n cursor movemen|
00000130  74 2c 20 63 72 65 61 74  65 20 77 61 72 6e 69 6e  |t, create warnin|
00000140  67 20 6d 65 73 73 61 67  65 0d 00 6e 41 f4 20 20  |g message..nA.  |
00000150  20 20 4c 69 6e 65 20 66  65 65 64 20 61 74 20 65  |  Line feed at e|
00000160  6e 64 20 6f 66 20 70 72  69 6e 74 6f 75 74 2c 20  |nd of printout, |
00000170  66 69 65 6c 64 20 61 6e  64 20 68 65 61 64 69 6e  |field and headin|
00000180  67 20 70 72 69 6e 74 6f  75 74 0d 00 78 3a f4 20  |g printout..x:. |
00000190  20 20 20 42 75 67 20 66  69 78 20 6f 6e 20 6d 61  |   Bug fix on ma|
000001a0  78 69 6d 75 6d 20 66 69  6c 65 20 73 69 7a 65 2c  |ximum file size,|
000001b0  20 70 72 69 6e 74 65 72  5f 6f 6e 20 69 6d 70 72  | printer_on impr|
000001c0  6f 76 65 64 0d 00 82 2c  f4 20 20 20 20 56 65 72  |oved...,.    Ver|
000001d0  73 69 6f 6e 20 30 2e 33  20 53 74 61 72 74 65 64  |sion 0.3 Started|
000001e0  20 31 36 74 68 20 4d 61  72 63 68 20 31 39 39 31  | 16th March 1991|
000001f0  0d 00 8c 12 f4 20 20 20  20 48 6f 75 72 73 20 3d  |.....    Hours =|
00000200  20 33 0d 00 96 4c f4 20  20 20 20 47 69 76 65 20  | 3...L.    Give |
00000210  61 20 63 6f 72 72 65 63  74 20 65 72 72 6f 72 20  |a correct error |
00000220  6d 65 73 73 61 67 65 20  77 68 65 6e 20 66 69 6c  |message when fil|
00000230  65 20 63 61 6e 20 6e 6f  74 20 62 65 20 77 72 69  |e can not be wri|
00000240  74 74 65 6e 20 61 6e 64  20 63 6c 6f 73 65 0d 00  |tten and close..|
00000250  a0 23 f4 20 20 20 20 64  6f 77 6e 20 72 65 61 73  |.#.    down reas|
00000260  6f 6e 61 62 6c 79 20 67  72 61 63 65 66 75 6c 6c  |onably gracefull|
00000270  79 0d 00 aa 48 f4 20 20  20 20 48 6f 6c 64 69 6e  |y...H.    Holdin|
00000280  67 20 64 6f 77 6e 20 73  65 6c 65 63 74 20 63 61  |g down select ca|
00000290  75 73 65 73 20 74 68 65  20 6f 75 74 70 75 74 20  |uses the output |
000002a0  74 6f 20 70 61 75 73 65  20 69 6e 20 73 63 72 65  |to pause in scre|
000002b0  65 6e 20 6f 75 74 70 75  74 0d 00 b4 34 f4 20 20  |en output...4.  |
000002c0  20 20 63 6c 69 63 6b 69  6e 67 20 73 65 6c 65 63  |  clicking selec|
000002d0  74 20 6d 6f 76 65 73 20  6f 6e 20 74 6f 20 74 68  |t moves on to th|
000002e0  65 20 6e 65 78 74 20 72  65 63 6f 72 64 0d 00 be  |e next record...|
000002f0  28 f4 20 20 20 20 46 69  65 6c 64 20 73 75 62 73  |(.    Field subs|
00000300  74 69 74 75 74 69 6f 6e  20 6e 6f 77 20 69 6d 70  |titution now imp|
00000310  72 6f 76 65 64 0d 00 c8  04 0d 00 d2 15 f4 20 20  |roved.........  |
00000320  20 20 56 65 72 73 69 6f  6e 20 30 2e 33 31 0d 00  |  Version 0.31..|
00000330  dc 23 f4 20 20 20 20 49  63 6f 6e 20 74 6f 67 67  |.#.    Icon togg|
00000340  6c 65 73 20 62 75 67 20  63 6f 72 72 65 63 74 65  |les bug correcte|
00000350  64 0d 00 e6 04 0d 00 f0  04 0d 00 fa 04 0d 01 04  |d...............|
00000360  29 ee 20 85 20 db 3a ef  34 3a f6 3a f1 9e 3a f1  |). . .:.4:.:..:.|
00000370  22 50 72 65 73 73 20 61  20 6b 65 79 22 3a 61 3d  |"Press a key":a=|
00000380  a5 3a ef 35 3a e0 0d 01  0e 04 0d 01 18 10 f2 65  |.:.5:..........e|
00000390  6e 76 69 72 6f 6e 6d 65  6e 74 0d 01 22 0e f2 63  |nvironment.."..c|
000003a0  6f 6e 73 74 61 6e 74 73  0d 01 2c 15 f2 63 72 65  |onstants..,..cre|
000003b0  61 74 65 5f 76 61 72 69  61 62 6c 65 73 0d 01 36  |ate_variables..6|
000003c0  0a f2 73 65 74 75 70 0d  01 40 10 f2 63 72 65 61  |..setup..@..crea|
000003d0  74 65 69 63 6f 6e 73 0d  01 4a 0f f2 72 65 61 64  |teicons..J..read|
000003e0  5f 76 69 72 75 73 0d 01  54 0e ee 20 85 20 f2 65  |_virus..T.. . .e|
000003f0  72 72 6f 72 0d 01 5e 3c  e7 20 63 24 3c 3e 22 22  |rror..^<. c$<>""|
00000400  20 80 20 6a 75 73 74 5f  73 74 61 72 74 65 64 25  | . just_started%|
00000410  20 8c 20 6a 75 73 74 5f  73 74 61 72 74 65 64 25  | . just_started%|
00000420  20 3d 20 a3 20 3a 20 f2  6c 6f 61 64 28 63 24 29  | = . : .load(c$)|
00000430  0d 01 68 15 6a 75 73 74  5f 73 74 61 72 74 65 64  |..h.just_started|
00000440  25 20 3d 20 a3 0d 01 72  05 f5 0d 01 7c 0e 20 20  |% = ...r....|.  |
00000450  f2 70 6f 6c 6c 28 31 29  0d 01 86 0a fd 20 71 75  |.poll(1)..... qu|
00000460  69 74 0d 01 90 16 20 20  f2 63 6c 6f 73 65 5f 64  |it....  .close_d|
00000470  6f 77 6e 5f 66 69 6c 65  0d 01 9a 19 20 20 c8 99  |own_file....  ..|
00000480  20 22 57 69 6d 70 5f 43  6c 6f 73 65 44 6f 77 6e  | "Wimp_CloseDown|
00000490  22 0d 01 a4 05 e0 0d 01  ae 04 0d 01 b8 04 0d 01  |"...............|
000004a0  c2 17 dd 20 f2 63 72 65  61 74 65 5f 76 61 72 69  |... .create_vari|
000004b0  61 62 6c 65 73 0d 01 cc  18 de 20 6d 65 73 73 61  |ables..... messa|
000004c0  67 65 5f 62 6c 6f 63 6b  25 20 31 30 30 0d 01 d6  |ge_block% 100...|
000004d0  80 de 20 6e 61 6d 65 25  28 6d 61 78 5f 66 69 65  |.. name%(max_fie|
000004e0  6c 64 73 29 2c 74 79 70  65 25 28 6d 61 78 5f 66  |lds),type%(max_f|
000004f0  69 65 6c 64 73 29 2c 77  69 64 74 68 25 28 6d 61  |ields),width%(ma|
00000500  78 5f 66 69 65 6c 64 73  29 2c 64 70 25 28 6d 61  |x_fields),dp%(ma|
00000510  78 5f 66 69 65 6c 64 73  29 2c 6d 69 6e 25 28 6d  |x_fields),min%(m|
00000520  61 78 5f 66 69 65 6c 64  73 29 2c 6d 61 78 25 28  |ax_fields),max%(|
00000530  6d 61 78 5f 66 69 65 6c  64 73 29 2c 6c 69 73 74  |max_fields),list|
00000540  25 28 6d 61 78 5f 66 69  65 6c 64 73 29 0d 01 e0  |%(max_fields)...|
00000550  48 de 20 72 65 63 6f 72  64 5f 61 24 28 6d 61 78  |H. record_a$(max|
00000560  5f 66 69 65 6c 64 73 29  2c 20 72 65 63 6f 72 64  |_fields), record|
00000570  5f 62 24 28 6d 61 78 5f  66 69 65 6c 64 73 29 2c  |_b$(max_fields),|
00000580  20 68 69 67 68 65 73 74  24 28 6d 61 78 5f 66 69  | highest$(max_fi|
00000590  65 6c 64 73 29 0d 01 ea  27 de 20 73 6f 72 74 5f  |elds)...'. sort_|
000005a0  6c 69 6e 65 24 28 31 32  29 2c 20 73 6f 72 74 5f  |line$(12), sort_|
000005b0  6f 70 65 72 61 74 6f 72  24 28 36 29 0d 01 f4 1d  |operator$(6)....|
000005c0  de 20 66 69 65 6c 64 5f  75 73 65 64 25 28 6d 61  |. field_used%(ma|
000005d0  78 5f 66 69 65 6c 64 73  29 0d 01 fe 13 de 20 6f  |x_fields)..... o|
000005e0  70 65 72 61 74 6f 72 24  28 35 30 29 0d 02 08 18  |perator$(50)....|
000005f0  de 20 63 5f 66 5f 76 24  28 6d 61 78 5f 66 69 65  |. c_f_v$(max_fie|
00000600  6c 64 73 29 0d 02 12 15  de 20 6f 75 74 70 75 74  |lds)..... output|
00000610  5f 6c 69 73 74 24 28 36  29 0d 02 1c 12 de 20 66  |_list$(6)..... f|
00000620  69 6c 65 6e 61 6d 65 25  20 32 30 0d 02 26 13 de  |ilename% 20..&..|
00000630  20 70 61 74 68 6e 61 6d  65 25 20 32 30 30 0d 02  | pathname% 200..|
00000640  30 17 de 20 72 65 63 6f  72 64 5f 6e 75 6d 62 65  |0.. record_numbe|
00000650  72 25 20 31 33 0d 02 3a  12 de 20 70 61 73 73 77  |r% 13..:.. passw|
00000660  6f 72 64 25 20 31 33 0d  02 44 15 de 20 69 6e 5f  |ord% 13..D.. in_|
00000670  70 61 73 73 77 6f 72 64  25 20 31 33 0d 02 4e 14  |password% 13..N.|
00000680  de 20 76 61 6c 69 64 5f  6e 61 6d 65 25 20 32 30  |. valid_name% 20|
00000690  0d 02 58 18 de 20 76 61  6c 69 64 5f 70 61 73 73  |..X.. valid_pass|
000006a0  77 6f 72 64 25 20 32 30  0d 02 62 14 de 20 72 65  |word% 20..b.. re|
000006b0  63 5f 6e 75 6d 62 65 72  25 20 31 33 0d 02 6c 14  |c_number% 13..l.|
000006c0  de 20 76 61 6c 69 64 5f  74 79 70 65 25 20 32 30  |. valid_type% 20|
000006d0  0d 02 76 15 de 20 66 69  65 6c 64 5f 64 65 73 25  |..v.. field_des%|
000006e0  20 32 32 30 30 0d 02 80  17 de 20 76 61 6c 69 64  | 2200..... valid|
000006f0  5f 69 6e 74 65 67 65 72  25 20 31 30 0d 02 8a 16  |_integer% 10....|
00000700  de 20 6f 75 74 70 75 74  5f 6c 69 73 74 25 20 35  |. output_list% 5|
00000710  30 30 0d 02 94 16 de 20  73 65 61 72 63 68 5f 6c  |00..... search_l|
00000720  69 73 74 25 20 32 30 30  0d 02 9e 15 de 20 6f 75  |ist% 200..... ou|
00000730  74 70 75 74 5f 69 63 6f  6e 25 28 36 29 0d 02 a8  |tput_icon%(6)...|
00000740  15 de 20 73 6f 72 74 5f  66 69 65 6c 64 25 20 33  |.. sort_field% 3|
00000750  30 30 0d 02 b2 14 de 20  73 6f 72 74 5f 69 63 6f  |00..... sort_ico|
00000760  6e 25 28 31 32 29 0d 02  bc 14 de 20 76 61 6c 69  |n%(12)..... vali|
00000770  64 5f 73 6f 72 74 25 20  32 30 0d 02 c6 24 de 20  |d_sort% 20...$. |
00000780  64 69 73 70 6c 61 79 5f  64 61 74 61 25 20 28 6d  |display_data% (m|
00000790  61 78 5f 66 69 65 6c 64  73 2a 33 30 30 29 0d 02  |ax_fields*300)..|
000007a0  d0 24 de 20 64 69 73 70  6c 61 79 5f 69 63 6f 6e  |.$. display_icon|
000007b0  25 28 6d 61 78 5f 66 69  65 6c 64 73 2a 32 20 2b  |%(max_fields*2 +|
000007c0  32 29 0d 02 da 1a de 20  6f 75 74 70 75 74 5f 64  |2)..... output_d|
000007d0  69 73 70 6c 61 79 25 20  32 30 30 30 0d 02 e4 11  |isplay% 2000....|
000007e0  de 20 6d 61 74 63 68 65  73 25 20 32 30 0d 02 ee  |. matches% 20...|
000007f0  14 de 20 6f 75 74 70 75  74 5f 72 65 63 25 20 32  |.. output_rec% 2|
00000800  30 0d 02 f8 1d de 20 68  65 61 64 69 6e 67 73 24  |0..... headings$|
00000810  28 6d 61 78 5f 66 69 65  6c 64 73 2b 35 29 0d 03  |(max_fields+5)..|
00000820  02 13 de 20 64 61 74 65  5f 73 74 61 6d 70 25 20  |... date_stamp% |
00000830  35 0d 03 0c 16 de 20 63  72 65 61 74 65 5f 64 61  |5..... create_da|
00000840  74 65 25 20 31 30 30 0d  03 16 16 de 20 66 24 28  |te% 100..... f$(|
00000850  6d 61 78 5f 66 69 65 6c  64 73 2c 36 29 0d 03 20  |max_fields,6).. |
00000860  10 de 20 62 6c 6f 63 6b  25 20 36 30 30 0d 03 2a  |.. block% 600..*|
00000870  12 de 20 62 6c 6f 63 6b  5f 32 25 20 36 30 30 0d  |.. block_2% 600.|
00000880  03 34 11 de 20 62 6c 6f  63 6b 5f 33 25 20 35 30  |.4.. block_3% 50|
00000890  0d 03 3e 0e de 20 74 61  73 6b 69 64 25 34 0d 03  |..>.. taskid%4..|
000008a0  48 13 24 74 61 73 6b 69  64 25 3d 22 54 41 53 4b  |H.$taskid%="TASK|
000008b0  22 0d 03 52 25 de 20 71  25 20 26 41 30 30 2c 62  |"..R%. q% &A00,b|
000008c0  75 66 66 65 72 25 20 26  38 30 30 2c 65 6e 64 62  |uffer% &800,endb|
000008d0  75 66 25 20 2d 31 0d 03  5c 0e de 20 6d 65 6e 75  |uf% -1..\.. menu|
000008e0  20 35 30 30 0d 03 66 14  de 20 69 6e 64 69 72 65  | 500..f.. indire|
000008f0  63 74 25 20 32 32 30 30  0d 03 70 0f de 20 63 61  |ct% 2200..p.. ca|
00000900  72 65 74 25 20 34 30 0d  03 7a 13 63 75 72 62 75  |ret% 40..z.curbu|
00000910  66 25 3d 62 75 66 66 65  72 25 0d 03 84 04 0d 03  |f%=buffer%......|
00000920  8e 04 0d 03 98 1d 24 76  61 6c 69 64 5f 6e 61 6d  |......$valid_nam|
00000930  65 25 3d 22 41 61 2d 7a  41 2d 5a 30 2d 39 22 0d  |e%="Aa-zA-Z0-9".|
00000940  03 a2 1a 24 76 61 6c 69  64 5f 70 61 73 73 77 6f  |...$valid_passwo|
00000950  72 64 25 20 3d 22 44 2a  22 0d 03 ac 1c 24 76 61  |rd% ="D*"....$va|
00000960  6c 69 64 5f 74 79 70 65  25 20 3d 20 22 41 44 4e  |lid_type% = "ADN|
00000970  54 64 6e 74 22 0d 03 b6  1c 24 76 61 6c 69 64 5f  |Tdnt"....$valid_|
00000980  69 6e 74 65 67 65 72 25  20 3d 20 22 41 30 2d 39  |integer% = "A0-9|
00000990  22 0d 03 c0 1a 24 76 61  6c 69 64 5f 73 6f 72 74  |"....$valid_sort|
000009a0  25 20 3d 20 22 41 61 41  44 64 22 0d 03 ca 05 20  |% = "AaADd".... |
000009b0  0d 03 d4 05 20 0d 03 de  1b 24 66 69 6c 65 6e 61  |.... ....$filena|
000009c0  6d 65 25 20 3d 20 22 44  61 74 61 46 69 6c 65 22  |me% = "DataFile"|
000009d0  0d 03 e8 1b 24 70 61 74  68 6e 61 6d 65 25 20 3d  |....$pathname% =|
000009e0  20 22 44 61 74 61 46 69  6c 65 22 0d 03 f2 13 24  | "DataFile"....$|
000009f0  70 61 73 73 77 6f 72 64  25 20 3d 20 22 22 0d 03  |password% = ""..|
00000a00  fc 16 24 69 6e 5f 70 61  73 73 77 6f 72 64 25 20  |..$in_password% |
00000a10  3d 20 22 22 0d 04 06 16  24 72 65 63 5f 6e 75 6d  |= ""....$rec_num|
00000a20  62 65 72 25 20 3d 20 22  30 22 0d 04 10 16 24 73  |ber% = "0"....$s|
00000a30  65 61 72 63 68 5f 6c 69  73 74 25 20 3d 20 22 22  |earch_list% = ""|
00000a40  0d 04 1a 05 20 0d 04 24  0f 6c 6f 61 64 65 64 25  |.... ..$.loaded%|
00000a50  20 3d 20 a3 0d 04 2e 04  0d 04 38 0f 66 69 6c 65  | = .......8.file|
00000a60  25 20 20 20 3d 20 30 0d  04 42 10 69 6e 68 69 62  |%   = 0..B.inhib|
00000a70  69 74 25 20 3d 20 a3 0d  04 4c 18 63 61 73 65 5f  |it% = ...L.case_|
00000a80  73 65 6e 73 5f 69 63 6f  6e 25 20 3d 20 31 33 0d  |sens_icon% = 13.|
00000a90  04 56 18 63 72 5f 69 63  6f 6e 25 20 20 20 20 20  |.V.cr_icon%     |
00000aa0  20 20 20 3d 20 31 35 0d  04 60 18 74 61 62 5f 69  |   = 15..`.tab_i|
00000ab0  63 6f 6e 25 20 20 20 20  20 20 20 3d 20 31 37 0d  |con%       = 17.|
00000ac0  04 6a 18 68 65 61 64 69  6e 67 73 5f 69 63 6f 6e  |.j.headings_icon|
00000ad0  25 20 20 3d 20 31 39 0d  04 74 1b 6f 75 74 70 75  |%  = 19..t.outpu|
00000ae0  74 5f 66 69 6c 65 5f 68  61 6e 64 6c 65 25 20 3d  |t_file_handle% =|
00000af0  20 30 0d 04 7e 15 6a 75  73 74 5f 73 74 61 72 74  | 0..~.just_start|
00000b00  65 64 25 20 3d 20 b9 0d  04 88 19 6e 75 6d 62 65  |ed% = .....numbe|
00000b10  72 5f 6f 66 5f 66 69 65  6c 64 73 25 20 3d 20 31  |r_of_fields% = 1|
00000b20  0d 04 92 04 0d 04 9c 1b  6f 70 65 72 61 74 6f 72  |........operator|
00000b30  24 28 30 29 20 20 20 20  3d 20 22 41 4e 44 22 0d  |$(0)    = "AND".|
00000b40  04 a6 1a 6f 70 65 72 61  74 6f 72 24 28 31 29 20  |...operator$(1) |
00000b50  20 20 20 3d 20 22 4f 52  22 0d 04 b0 1b 6f 70 65  |   = "OR"....ope|
00000b60  72 61 74 6f 72 24 28 32  29 20 20 20 20 3d 20 22  |rator$(2)    = "|
00000b70  4e 4f 54 22 0d 04 ba 1b  6f 70 65 72 61 74 6f 72  |NOT"....operator|
00000b80  24 28 33 29 20 20 20 20  3d 20 22 45 4f 52 22 0d  |$(3)    = "EOR".|
00000b90  04 c4 1a 6f 70 65 72 61  74 6f 72 24 28 34 29 20  |...operator$(4) |
00000ba0  20 20 20 3d 20 22 3e 3d  22 0d 04 ce 1a 6f 70 65  |   = ">="....ope|
00000bb0  72 61 74 6f 72 24 28 35  29 20 20 20 20 3d 20 22  |rator$(5)    = "|
00000bc0  3d 3e 22 0d 04 d8 1b 6f  70 65 72 61 74 6f 72 24  |=>"....operator$|
00000bd0  28 36 29 20 20 20 20 3d  20 22 41 4c 4c 22 0d 04  |(6)    = "ALL"..|
00000be0  e2 21 6f 70 65 72 61 74  6f 72 24 28 37 29 20 20  |.!operator$(7)  |
00000bf0  20 20 3d 20 22 46 49 45  4c 44 4c 49 53 54 22 0d  |  = "FIELDLIST".|
00000c00  04 ec 05 20 0d 04 f6 1c  6e 75 6d 62 65 72 5f 6f  |... ....number_o|
00000c10  66 5f 6f 70 65 72 61 74  6f 72 73 25 20 3d 20 37  |f_operators% = 7|
00000c20  0d 05 00 05 e1 0d 05 0a  04 0d 05 14 04 0d 05 1e  |................|
00000c30  04 0d 05 28 10 dd 20 f2  63 6f 6e 73 74 61 6e 74  |...(.. .constant|
00000c40  73 0d 05 32 20 20 20 57  69 6d 70 20 20 20 20 3d  |s..2   Wimp    =|
00000c50  20 28 31 3c 3c 31 38 29  20 2b 20 28 33 3c 3c 36  | (1<<18) + (3<<6|
00000c60  29 0d 05 3c 16 20 20 43  72 65 61 74 65 57 20 3d  |)..<.  CreateW =|
00000c70  20 57 69 6d 70 2b 31 0d  05 46 16 20 20 4f 70 65  | Wimp+1..F.  Ope|
00000c80  6e 57 20 20 20 3d 20 57  69 6d 70 2b 35 0d 05 50  |nW   = Wimp+5..P|
00000c90  16 20 20 43 6c 6f 73 65  57 20 20 3d 20 57 69 6d  |.  CloseW  = Wim|
00000ca0  70 2b 36 0d 05 5a 16 20  20 50 6f 6c 6c 25 20 20  |p+6..Z.  Poll%  |
00000cb0  20 3d 20 57 69 6d 70 2b  37 0d 05 64 16 20 20 52  | = Wimp+7..d.  R|
00000cc0  65 64 72 61 77 57 20 3d  20 57 69 6d 70 2b 38 0d  |edrawW = Wimp+8.|
00000cd0  05 6e 16 20 20 55 70 64  61 74 65 57 20 3d 20 57  |.n.  UpdateW = W|
00000ce0  69 6d 70 2b 39 0d 05 78  17 20 20 47 65 74 52 25  |imp+9..x.  GetR%|
00000cf0  20 20 20 3d 20 57 69 6d  70 2b 31 30 0d 05 82 17  |   = Wimp+10....|
00000d00  20 20 47 65 74 57 20 20  20 20 3d 20 57 69 6d 70  |  GetW    = Wimp|
00000d10  2b 31 31 0d 05 8c 17 20  20 47 65 74 50 20 20 20  |+11....  GetP   |
00000d20  20 3d 20 57 69 6d 70 2b  31 35 0d 05 96 17 20 20  | = Wimp+15....  |
00000d30  44 72 61 67 20 20 20 20  3d 20 57 69 6d 70 2b 31  |Drag    = Wimp+1|
00000d40  36 0d 05 a0 17 20 20 43  72 4d 65 6e 75 20 20 3d  |6....  CrMenu  =|
00000d50  20 57 69 6d 70 2b 32 30  0d 05 aa 17 20 20 44 63  | Wimp+20....  Dc|
00000d60  4d 65 6e 75 20 20 3d 20  57 69 6d 70 2b 32 31 0d  |Menu  = Wimp+21.|
00000d70  05 b4 15 20 20 6d 61 78  5f 66 69 65 6c 64 73 20  |...  max_fields |
00000d80  3d 20 31 39 0d 05 be 17  20 20 6f 76 65 72 5f 73  |= 19....  over_s|
00000d90  69 7a 65 20 20 3d 20 31  2e 32 35 0d 05 c8 14 20  |ize  = 1.25.... |
00000da0  20 41 4c 4c 20 20 20 20  20 20 20 20 3d 20 b9 0d  | ALL        = ..|
00000db0  05 d2 05 e1 0d 05 dc 04  0d 05 e6 04 0d 05 f0 04  |................|
00000dc0  0d 05 fa 04 0d 06 04 04  0d 06 0e 04 0d 06 18 12  |................|
00000dd0  dd 20 f2 70 6f 6c 6c 28  6d 61 73 6b 25 29 0d 06  |. .poll(mask%)..|
00000de0  22 21 20 20 c8 99 20 50  6f 6c 6c 25 2c 6d 61 73  |"!  .. Poll%,mas|
00000df0  6b 25 2c 71 25 20 b8 20  72 65 61 73 6f 6e 25 0d  |k%,q% . reason%.|
00000e00  06 2c 12 20 20 c8 8e 20  72 65 61 73 6f 6e 25 20  |.,.  .. reason% |
00000e10  ca 0d 06 36 1e 20 20 c9  20 31 20 3a f2 72 65 64  |...6.  . 1 :.red|
00000e20  72 61 77 5f 77 69 6e 64  6f 77 28 21 71 25 29 0d  |raw_window(!q%).|
00000e30  06 40 22 20 20 c9 20 32  20 3a c8 99 22 57 69 6d  |.@"  . 2 :.."Wim|
00000e40  70 5f 4f 70 65 6e 57 69  6e 64 6f 77 22 2c 2c 71  |p_OpenWindow",,q|
00000e50  25 0d 06 4a 1d 20 20 c9  20 33 20 3a f2 63 6c 6f  |%..J.  . 3 :.clo|
00000e60  73 65 61 77 69 6e 64 6f  77 28 21 71 25 29 0d 06  |seawindow(!q%)..|
00000e70  54 17 20 20 c9 20 36 20  3a f2 62 75 74 74 6f 6e  |T.  . 6 :.button|
00000e80  73 28 71 25 29 0d 06 5e  17 20 20 c9 20 37 20 3a  |s(q%)..^.  . 7 :|
00000e90  20 e7 20 6c 6f 61 64 65  64 25 20 8c 0d 06 68 22  | . loaded% ...h"|
00000ea0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 f2 73  |              .s|
00000eb0  74 61 72 74 5f 64 69 73  6b 5f 6c 69 73 74 0d 06  |tart_disk_list..|
00000ec0  72 10 20 20 20 20 20 20  20 20 20 20 20 cc 0d 06  |r.           ...|
00000ed0  7c 1b 20 20 20 20 20 20  20 20 20 20 20 20 20 20  ||.              |
00000ee0  f2 6e 65 77 5f 73 61 76  65 0d 06 86 10 20 20 20  |.new_save....   |
00000ef0  20 20 20 20 20 20 20 20  cd 0d 06 90 16 20 20 c9  |        .....  .|
00000f00  20 38 20 3a f2 6b 65 79  28 71 25 21 32 34 29 0d  | 8 :.key(q%!24).|
00000f10  06 9a 1d 20 20 c9 20 39  20 3a 20 f2 6d 65 6e 75  |...  . 9 : .menu|
00000f20  5f 73 65 6c 65 63 74 28  21 71 25 29 0d 06 a4 1a  |_select(!q%)....|
00000f30  20 20 c9 20 31 37 2c 31  38 3a f2 72 65 63 65 69  |  . 17,18:.recei|
00000f40  76 65 28 71 25 29 0d 06  ae 07 20 20 cb 0d 06 b8  |ve(q%)....  ....|
00000f50  05 e1 0d 06 c2 04 0d 06  cc 19 dd 20 f2 6d 65 6e  |........... .men|
00000f60  75 5f 73 65 6c 65 63 74  28 69 74 65 6d 25 29 0d  |u_select(item%).|
00000f70  06 d6 0e c8 8e 20 69 74  65 6d 25 20 ca 0d 06 e0  |..... item% ....|
00000f80  13 20 20 c9 20 30 20 3a  20 f2 63 72 65 61 74 65  |.  . 0 : .create|
00000f90  0d 06 ea 38 20 20 c9 20  31 20 3a 20 e7 20 ac 20  |...8  . 1 : . . |
00000fa0  69 6e 68 69 62 69 74 25  20 8c 20 f2 6f 70 65 6e  |inhibit% . .open|
00000fb0  5f 77 69 6e 64 6f 77 28  64 69 73 70 6c 61 79 5f  |_window(display_|
00000fc0  77 69 6e 64 6f 77 25 29  0d 06 f4 35 20 20 c9 20  |window%)...5  . |
00000fd0  32 20 3a 20 e7 20 ac 20  69 6e 68 69 62 69 74 25  |2 : . . inhibit%|
00000fe0  20 8c 20 f2 6f 70 65 6e  5f 77 69 6e 64 6f 77 28  | . .open_window(|
00000ff0  73 6f 72 74 5f 77 69 6e  64 6f 77 25 29 0d 06 fe  |sort_window%)...|
00001000  37 20 20 c9 20 33 20 3a  20 e7 20 ac 20 69 6e 68  |7  . 3 : . . inh|
00001010  69 62 69 74 25 20 8c 20  f2 6f 70 65 6e 5f 77 69  |ibit% . .open_wi|
00001020  6e 64 6f 77 28 6f 75 74  70 75 74 5f 77 69 6e 64  |ndow(output_wind|
00001030  6f 77 25 29 0d 07 08 37  20 20 c9 20 34 20 3a 20  |ow%)...7  . 4 : |
00001040  e7 20 ac 20 69 6e 68 69  62 69 74 25 20 8c 20 f2  |. . inhibit% . .|
00001050  6f 70 65 6e 5f 77 69 6e  64 6f 77 28 66 69 65 6c  |open_window(fiel|
00001060  64 73 5f 77 69 6e 64 6f  77 25 29 0d 07 12 1c 20  |ds_window%).... |
00001070  20 c9 20 35 20 3a 20 f2  63 6c 6f 73 65 5f 64 6f  | . 5 : .close_do|
00001080  77 6e 5f 66 69 6c 65 0d  07 1c 14 20 20 c9 20 37  |wn_file....  . 7|
00001090  20 3a 20 71 75 69 74 20  3d 20 b9 0d 07 26 05 cb  | : quit = ...&..|
000010a0  0d 07 30 05 e1 0d 07 3a  04 0d 07 44 04 0d 07 4e  |..0....:...D...N|
000010b0  04 0d 07 58 11 dd 20 f2  62 75 74 74 6f 6e 73 28  |...X.. .buttons(|
000010c0  62 29 0d 07 62 1d ea 20  77 69 6e 64 6f 77 25 2c  |b)..b.. window%,|
000010d0  20 69 63 6f 6e 25 2c 20  62 75 74 74 6f 6e 25 0d  | icon%, button%.|
000010e0  07 6c 15 20 20 20 77 69  6e 64 6f 77 25 20 3d 20  |.l.   window% = |
000010f0  62 21 31 32 0d 07 76 12  20 20 69 63 6f 6e 25 20  |b!12..v.  icon% |
00001100  3d 20 62 21 31 36 0d 07  80 13 20 20 62 75 74 74  |= b!16....  butt|
00001110  6f 6e 25 20 3d 20 62 21  38 0d 07 8a 20 20 20 e7  |on% = b!8...   .|
00001120  20 76 69 72 75 73 5f 73  65 74 25 20 80 20 b3 28  | virus_set% . .(|
00001130  32 30 29 20 3d 20 31 20  8c 0d 07 94 14 20 20 20  |20) = 1 .....   |
00001140  20 20 f2 73 68 6f 77 5f  76 69 72 75 73 0d 07 9e  |  .show_virus...|
00001150  07 20 20 cc 0d 07 a8 12  20 20 c8 8e 20 77 69 6e  |.  .....  .. win|
00001160  64 6f 77 25 20 ca 0d 07  b2 27 20 20 c9 20 2d 32  |dow% ....'  . -2|
00001170  20 20 20 3a 20 e7 20 62  75 74 74 6f 6e 25 20 3d  |   : . button% =|
00001180  32 20 20 8c 20 f2 6d 65  6e 75 28 62 29 0d 07 bc  |2  . .menu(b)...|
00001190  3e 20 20 c9 20 6e 65 77  66 69 6c 65 5f 77 69 6e  |>  . newfile_win|
000011a0  64 6f 77 25 20 3a 20 e7  20 28 62 75 74 74 6f 6e  |dow% : . (button|
000011b0  25 20 80 20 26 35 30 29  20 3c 3e 20 30 20 8c 20  |% . &50) <> 0 . |
000011c0  f2 73 74 61 72 74 5f 64  72 61 67 0d 07 c6 24 20  |.start_drag...$ |
000011d0  20 c9 20 64 69 73 70 6c  61 79 5f 77 69 6e 64 6f  | . display_windo|
000011e0  77 25 20 3a 20 c8 8e 20  69 63 6f 6e 25 20 ca 0d  |w% : .. icon% ..|
000011f0  07 d0 2c 20 20 20 20 20  20 20 20 20 20 20 20 20  |..,             |
00001200  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 c9  |               .|
00001210  20 32 20 3a 20 f2 73 74  61 72 74 0d 07 da 32 20  | 2 : .start...2 |
00001220  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001230  20 20 20 20 20 20 20 20  20 20 20 c9 20 33 20 3a  |           . 3 :|
00001240  20 f2 65 6e 64 5f 6f 66  5f 66 69 6c 65 0d 07 e4  | .end_of_file...|
00001250  36 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |6               |
00001260  20 20 20 20 20 20 20 20  20 20 20 20 20 c9 20 34  |             . 4|
00001270  20 3a 20 f2 70 72 65 76  69 6f 75 73 5f 72 65 63  | : .previous_rec|
00001280  6f 72 64 0d 07 ee 32 20  20 20 20 20 20 20 20 20  |ord...2         |
00001290  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000012a0  20 20 20 c9 20 35 20 3a  20 f2 6e 65 78 74 5f 72  |   . 5 : .next_r|
000012b0  65 63 6f 72 64 0d 07 f8  34 20 20 20 20 20 20 20  |ecord...4       |
000012c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000012d0  20 20 20 20 20 c9 20 36  20 3a 20 f2 64 65 6c 65  |     . 6 : .dele|
000012e0  74 65 5f 72 65 63 6f 72  64 0d 08 02 1e 20 20 20  |te_record....   |
000012f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001300  20 20 20 20 20 20 cb 0d  08 0c 24 20 20 c9 20 6f  |      ....$  . o|
00001310  75 74 70 75 74 5f 77 69  6e 64 6f 77 25 20 20 3a  |utput_window%  :|
00001320  20 c8 8e 20 69 63 6f 6e  25 20 ca 0d 08 16 2f 20  | .. icon% ..../ |
00001330  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001340  20 20 20 20 20 20 20 20  20 20 20 c9 20 39 20 20  |           . 9  |
00001350  3a 20 f2 70 72 69 6e 74  65 72 0d 08 20 2e 20 20  |: .printer.. .  |
00001360  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001370  20 20 20 20 20 20 20 20  20 20 c9 20 31 30 20 3a  |          . 10 :|
00001380  20 f2 73 63 72 65 65 6e  0d 08 2a 33 20 20 20 20  | .screen..*3    |
00001390  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000013a0  20 20 20 20 20 20 20 20  c9 20 31 31 20 3a 20 f2  |        . 11 : .|
000013b0  66 69 6c 65 5f 6f 75 74  70 75 74 0d 08 34 1e 20  |file_output..4. |
000013c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000013d0  20 20 20 20 20 20 20 20  cb 0d 08 3e 24 20 20 c9  |        ...>$  .|
000013e0  20 73 61 76 65 5f 77 69  6e 64 6f 77 25 20 20 20  | save_window%   |
000013f0  20 3a 20 c8 8e 20 69 63  6f 6e 25 20 ca 0d 08 48  | : .. icon% ...H|
00001400  39 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |9               |
00001410  20 20 20 20 20 20 20 20  20 20 20 20 20 c9 20 33  |             . 3|
00001420  20 20 3a 20 f2 73 74 61  72 74 5f 6f 75 74 70 75  |  : .start_outpu|
00001430  74 5f 64 72 61 67 0d 08  52 32 20 20 20 20 20 20  |t_drag..R2      |
00001440  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001450  20 20 20 20 20 20 c9 20  30 20 20 3a 20 f2 71 75  |      . 0  : .qu|
00001460  69 63 6b 5f 73 61 76 65  0d 08 5c 1e 20 20 20 20  |ick_save..\.    |
00001470  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001480  20 20 20 20 20 cb 0d 08  66 34 20 20 c9 20 73 63  |     ...f4  . sc|
00001490  72 65 65 6e 5f 77 69 6e  64 6f 77 25 20 20 20 3a  |reen_window%   :|
000014a0  20 e7 20 69 63 6f 6e 25  20 3d 20 31 20 8c 20 65  | . icon% = 1 . e|
000014b0  73 63 61 70 65 25 20 3d  20 b9 0d 08 70 25 20 20  |scape% = ...p%  |
000014c0  c9 20 73 6f 72 74 5f 77  69 6e 64 6f 77 25 20 20  |. sort_window%  |
000014d0  20 20 20 3a 20 c8 8e 20  69 63 6f 6e 25 20 ca 0d  |   : .. icon% ..|
000014e0  08 7a 2b 20 20 20 20 20  20 20 20 20 20 20 20 20  |.z+             |
000014f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 c9  |               .|
00001500  20 33 20 3a 20 f2 73 6f  72 74 0d 08 84 1f 20 20  | 3 : .sort....  |
00001510  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001520  20 20 20 20 20 20 20 20  cb 0d 08 8e 07 20 20 cb  |        .....  .|
00001530  0d 08 98 07 20 20 cd 0d  08 a2 05 e1 0d 08 ac 04  |....  ..........|
00001540  0d 08 b6 24 dd 20 a4 72  65 61 64 5f 69 63 6f 6e  |...$. .read_icon|
00001550  5f 74 65 78 74 28 77 69  6e 64 6f 77 25 2c 69 63  |_text(window%,ic|
00001560  6f 6e 25 29 0d 08 c0 15  21 62 6c 6f 63 6b 25 20  |on%)....!block% |
00001570  3d 20 77 69 6e 64 6f 77  25 0d 08 ca 14 62 6c 6f  |= window%....blo|
00001580  63 6b 25 21 34 20 3d 20  69 63 6f 6e 25 0d 08 d4  |ck%!4 = icon%...|
00001590  22 c8 99 20 22 57 69 6d  70 5f 47 65 74 49 63 6f  |".. "Wimp_GetIco|
000015a0  6e 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 0d  |nState",,block%.|
000015b0  08 de 12 3d 20 24 28 62  6c 6f 63 6b 25 21 32 38  |...= $(block%!28|
000015c0  29 0d 08 e8 04 0d 08 f2  04 0d 08 fc 04 0d 09 06  |)...............|
000015d0  1b dd 20 f2 6f 70 65 6e  5f 77 69 6e 64 6f 77 28  |.. .open_window(|
000015e0  68 61 6e 64 6c 65 25 29  0d 09 10 16 20 21 62 6c  |handle%).... !bl|
000015f0  6f 63 6b 25 20 3d 20 68  61 6e 64 6c 65 25 0d 09  |ock% = handle%..|
00001600  1a 24 20 c8 99 22 57 69  6d 70 5f 47 65 74 57 69  |.$ .."Wimp_GetWi|
00001610  6e 64 6f 77 53 74 61 74  65 22 2c 2c 62 6c 6f 63  |ndowState",,bloc|
00001620  6b 25 0d 09 24 23 20 62  6c 6f 63 6b 25 21 32 38  |k%..$# block%!28|
00001630  20 3d 20 2d 31 20 3a 20  f4 20 6f 70 65 6e 20 6f  | = -1 : . open o|
00001640  6e 20 74 6f 70 0d 09 2e  16 20 c8 99 20 4f 70 65  |n top.... .. Ope|
00001650  6e 57 20 2c 2c 62 6c 6f  63 6b 25 0d 09 38 05 e1  |nW ,,block%..8..|
00001660  0d 09 42 04 0d 09 4c 04  0d 09 56 04 0d 09 60 0d  |..B...L...V...`.|
00001670  dd 20 f2 6b 65 79 28 6b  29 0d 09 6a 1e ea 20 77  |. .key(k)..j.. w|
00001680  69 6e 64 6f 77 25 2c 20  69 63 6f 6e 25 2c 20 6e  |indow%, icon%, n|
00001690  65 77 5f 70 6f 73 25 0d  09 74 1a c8 99 20 22 57  |ew_pos%..t... "W|
000016a0  69 6d 70 5f 50 72 6f 63  65 73 73 4b 65 79 22 2c  |imp_ProcessKey",|
000016b0  6b 0d 09 7e 3b e7 20 6b  20 3d 20 31 33 20 20 84  |k..~;. k = 13  .|
000016c0  20 6b 20 3d 20 26 31 38  45 20 84 20 6b 20 3d 20  | k = &18E . k = |
000016d0  26 31 38 46 20 84 20 6b  20 3d 20 26 31 39 44 20  |&18F . k = &19D |
000016e0  84 20 6b 20 3d 20 26 31  39 45 20 8c 0d 09 88 28  |. k = &19E ....(|
000016f0  20 20 20 c8 99 22 57 69  6d 70 5f 47 65 74 43 61  |   .."Wimp_GetCa|
00001700  72 65 74 50 6f 73 69 74  69 6f 6e 22 2c 2c 63 61  |retPosition",,ca|
00001710  72 65 74 25 0d 09 92 19  20 20 20 77 69 6e 64 6f  |ret%....   windo|
00001720  77 25 20 3d 20 63 61 72  65 74 25 21 30 0d 09 9c  |w% = caret%!0...|
00001730  19 20 20 20 69 63 6f 6e  25 20 20 20 3d 20 63 61  |.   icon%   = ca|
00001740  72 65 74 25 21 34 0d 09  a6 17 20 20 20 6e 65 77  |ret%!4....   new|
00001750  5f 70 6f 73 25 20 3d 20  69 63 6f 6e 25 0d 09 b0  |_pos% = icon%...|
00001760  13 20 20 20 c8 8e 20 77  69 6e 64 6f 77 25 20 ca  |.   .. window% .|
00001770  0d 09 ba 2c 20 20 20 c9  20 6e 65 77 66 69 6c 65  |...,   . newfile|
00001780  5f 77 69 6e 64 6f 77 25  20 3a 20 e7 20 69 63 6f  |_window% : . ico|
00001790  6e 25 20 3d 20 6e 66 5f  31 25 20 8c 0d 09 c4 31  |n% = nf_1% ....1|
000017a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000017b0  20 20 20 20 20 20 20 20  20 20 20 20 20 6e 65 77  |             new|
000017c0  5f 70 6f 73 25 20 3d 20  6e 66 5f 32 25 0d 09 ce  |_pos% = nf_2%...|
000017d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000017e0  20 20 20 20 20 20 20 20  20 20 20 20 cc 0d 09 d8  |            ....|
000017f0  31 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |1               |
00001800  20 20 20 20 20 20 20 20  20 20 20 20 20 20 6e 65  |              ne|
00001810  77 5f 70 6f 73 25 20 3d  20 6e 66 5f 31 25 0d 09  |w_pos% = nf_1%..|
00001820  e2 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00001830  20 20 20 20 20 20 20 20  20 20 20 20 20 cd 0d 09  |             ...|
00001840  ec 43 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.C              |
00001850  20 20 20 20 20 20 20 20  20 20 20 20 20 f2 73 65  |             .se|
00001860  74 5f 63 61 72 65 74 28  6e 65 77 66 69 6c 65 5f  |t_caret(newfile_|
00001870  77 69 6e 64 6f 77 25 2c  6e 65 77 5f 70 6f 73 25  |window%,new_pos%|
00001880  29 0d 09 f6 50 20 20 20  20 20 20 20 20 20 20 20  |)...P           |
00001890  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000018a0  c8 99 22 57 69 6d 70 5f  46 6f 72 63 65 52 65 64  |.."Wimp_ForceRed|
000018b0  72 61 77 22 2c 66 69 65  6c 64 73 5f 77 69 6e 64  |raw",fields_wind|
000018c0  6f 77 25 2c 30 2c 2d 31  30 30 2c 31 30 30 30 2c  |ow%,0,-100,1000,|
000018d0  30 0d 0a 00 2f 20 20 20  20 c9 20 6f 75 74 70 75  |0.../    . outpu|
000018e0  74 5f 77 69 6e 64 6f 77  25 20 3a 20 e7 20 6b 20  |t_window% : . k |
000018f0  3d 20 31 33 20 84 20 6b  20 3d 26 31 38 45 20 8c  |= 13 . k =&18E .|
00001900  0d 0a 0a 3c 20 20 20 20  20 20 20 20 20 20 20 20  |...<            |
00001910  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001920  20 e7 20 69 63 6f 6e 25  20 3c 20 6f 75 74 70 75  | . icon% < outpu|
00001930  74 5f 69 63 6f 6e 25 28  36 29 20 8c 0d 0a 14 33  |t_icon%(6) ....3|
00001940  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001950  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 6e  |               n|
00001960  65 77 5f 70 6f 73 25 3d  69 63 6f 6e 25 2b 31 0d  |ew_pos%=icon%+1.|
00001970  0a 1e 22 20 20 20 20 20  20 20 20 20 20 20 20 20  |.."             |
00001980  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001990  cc 0d 0a 28 3d 20 20 20  20 20 20 20 20 20 20 20  |...(=           |
000019a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000019b0  20 20 20 20 6e 65 77 5f  70 6f 73 25 20 3d 20 6f  |    new_pos% = o|
000019c0  75 74 70 75 74 5f 69 63  6f 6e 25 28 30 29 0d 0a  |utput_icon%(0)..|
000019d0  32 22 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |2"              |
000019e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cd  |               .|
000019f0  0d 0a 3c 20 20 20 20 20  20 20 20 20 20 20 20 20  |..<             |
00001a00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cc  |               .|
00001a10  0d 0a 46 3c 20 20 20 20  20 20 20 20 20 20 20 20  |..F<            |
00001a20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001a30  20 e7 20 69 63 6f 6e 25  20 3e 20 6f 75 74 70 75  | . icon% > outpu|
00001a40  74 5f 69 63 6f 6e 25 28  30 29 20 8c 0d 0a 50 33  |t_icon%(0) ...P3|
00001a50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001a60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 6e  |               n|
00001a70  65 77 5f 70 6f 73 25 3d  69 63 6f 6e 25 2d 31 0d  |ew_pos%=icon%-1.|
00001a80  0a 5a 22 20 20 20 20 20  20 20 20 20 20 20 20 20  |.Z"             |
00001a90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001aa0  cc 0d 0a 64 3d 20 20 20  20 20 20 20 20 20 20 20  |...d=           |
00001ab0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001ac0  20 20 20 20 6e 65 77 5f  70 6f 73 25 20 3d 20 6f  |    new_pos% = o|
00001ad0  75 74 70 75 74 5f 69 63  6f 6e 25 28 36 29 0d 0a  |utput_icon%(6)..|
00001ae0  6e 22 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |n"              |
00001af0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cd  |               .|
00001b00  0d 0a 78 20 20 20 20 20  20 20 20 20 20 20 20 20  |..x             |
00001b10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cd  |               .|
00001b20  0d 0a 82 42 20 20 20 20  20 20 20 20 20 20 20 20  |...B            |
00001b30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 f2  |               .|
00001b40  73 65 74 5f 63 61 72 65  74 28 6f 75 74 70 75 74  |set_caret(output|
00001b50  5f 77 69 6e 64 6f 77 25  2c 6e 65 77 5f 70 6f 73  |_window%,new_pos|
00001b60  25 29 0d 0a 8c 04 0d 0a  96 27 20 20 20 20 c9 20  |%).......'    . |
00001b70  73 6f 72 74 5f 77 69 6e  64 6f 77 25 20 20 20 20  |sort_window%    |
00001b80  3a 20 e7 20 6b 20 3d 20  31 33 20 20 8c 0d 0a a0  |: . k = 13  ....|
00001b90  3b 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |;               |
00001ba0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 e7 20  |              . |
00001bb0  69 63 6f 6e 25 20 3c 20  73 6f 72 74 5f 69 63 6f  |icon% < sort_ico|
00001bc0  6e 25 28 31 31 29 20 8c  0d 0a aa 33 20 20 20 20  |n%(11) ....3    |
00001bd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001be0  20 20 20 20 20 20 20 20  20 20 20 6e 65 77 5f 70  |           new_p|
00001bf0  6f 73 25 3d 69 63 6f 6e  25 2b 31 0d 0a b4 22 20  |os%=icon%+1..." |
00001c00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001c10  20 20 20 20 20 20 20 20  20 20 20 20 cc 0d 0a be  |            ....|
00001c20  3b 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |;               |
00001c30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001c40  6e 65 77 5f 70 6f 73 25  20 3d 20 73 6f 72 74 5f  |new_pos% = sort_|
00001c50  69 63 6f 6e 25 28 30 29  0d 0a c8 22 20 20 20 20  |icon%(0)..."    |
00001c60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001c70  20 20 20 20 20 20 20 20  20 cd 0d 0a d2 42 20 20  |         ....B  |
00001c80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001c90  20 20 20 20 20 20 20 20  20 20 20 f2 73 65 74 5f  |           .set_|
00001ca0  63 61 72 65 74 28 73 6f  72 74 5f 77 69 6e 64 6f  |caret(sort_windo|
00001cb0  77 25 2c 6e 65 77 5f 70  6f 73 25 29 0d 0a dc 20  |w%,new_pos%)... |
00001cc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001cd0  20 20 20 20 20 20 20 20  20 20 20 cd 0d 0a e6 2a  |           ....*|
00001ce0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001cf0  20 20 20 20 20 20 20 20  20 20 20 e7 20 6b 20 3d  |           . k =|
00001d00  26 31 38 46 20 8c 0d 0a  f0 3a 20 20 20 20 20 20  |&18F ....:      |
00001d10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001d20  20 20 20 20 20 20 20 e7  20 69 63 6f 6e 25 20 3e  |       . icon% >|
00001d30  20 73 6f 72 74 5f 69 63  6f 6e 25 28 31 29 20 8c  | sort_icon%(1) .|
00001d40  0d 0a fa 33 20 20 20 20  20 20 20 20 20 20 20 20  |...3            |
00001d50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001d60  20 20 20 6e 65 77 5f 70  6f 73 25 3d 69 63 6f 6e  |   new_pos%=icon|
00001d70  25 2d 32 0d 0b 04 22 20  20 20 20 20 20 20 20 20  |%-2..."         |
00001d80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001d90  20 20 20 20 cc 0d 0b 0e  3c 20 20 20 20 20 20 20  |    ....<       |
00001da0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001db0  20 20 20 20 20 20 20 20  6e 65 77 5f 70 6f 73 25  |        new_pos%|
00001dc0  20 3d 20 73 6f 72 74 5f  69 63 6f 6e 25 28 31 31  | = sort_icon%(11|
00001dd0  29 0d 0b 18 22 20 20 20  20 20 20 20 20 20 20 20  |)..."           |
00001de0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001df0  20 20 cd 0d 0b 22 42 20  20 20 20 20 20 20 20 20  |  ..."B         |
00001e00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001e10  20 20 20 20 f2 73 65 74  5f 63 61 72 65 74 28 73  |    .set_caret(s|
00001e20  6f 72 74 5f 77 69 6e 64  6f 77 25 2c 6e 65 77 5f  |ort_window%,new_|
00001e30  70 6f 73 25 29 0d 0b 2c  20 20 20 20 20 20 20 20  |pos%)..,        |
00001e40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001e50  20 20 20 20 cd 0d 0b 36  2a 20 20 20 20 20 20 20  |    ...6*       |
00001e60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001e70  20 20 20 20 e7 20 6b 20  3d 26 31 38 45 20 8c 0d  |    . k =&18E ..|
00001e80  0b 40 3b 20 20 20 20 20  20 20 20 20 20 20 20 20  |.@;             |
00001e90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001ea0  e7 20 69 63 6f 6e 25 20  3c 20 73 6f 72 74 5f 69  |. icon% < sort_i|
00001eb0  63 6f 6e 25 28 31 30 29  20 8c 0d 0b 4a 33 20 20  |con%(10) ...J3  |
00001ec0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001ed0  20 20 20 20 20 20 20 20  20 20 20 20 20 6e 65 77  |             new|
00001ee0  5f 70 6f 73 25 3d 69 63  6f 6e 25 2b 32 0d 0b 54  |_pos%=icon%+2..T|
00001ef0  22 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |"               |
00001f00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 cc 0d  |              ..|
00001f10  0b 5e 3b 20 20 20 20 20  20 20 20 20 20 20 20 20  |.^;             |
00001f20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001f30  20 20 6e 65 77 5f 70 6f  73 25 20 3d 20 73 6f 72  |  new_pos% = sor|
00001f40  74 5f 69 63 6f 6e 25 28  30 29 0d 0b 68 22 20 20  |t_icon%(0)..h"  |
00001f50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001f60  20 20 20 20 20 20 20 20  20 20 20 cd 0d 0b 72 42  |           ...rB|
00001f70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001f80  20 20 20 20 20 20 20 20  20 20 20 20 20 f2 73 65  |             .se|
00001f90  74 5f 63 61 72 65 74 28  73 6f 72 74 5f 77 69 6e  |t_caret(sort_win|
00001fa0  64 6f 77 25 2c 6e 65 77  5f 70 6f 73 25 29 0d 0b  |dow%,new_pos%)..|
00001fb0  7c 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  ||               |
00001fc0  20 20 20 20 20 20 20 20  20 20 20 20 20 cd 0d 0b  |             ...|
00001fd0  86 30 20 20 20 20 c9 20  66 69 65 6c 64 73 5f 77  |.0    . fields_w|
00001fe0  69 6e 64 6f 77 25 20 20  20 3a 20 e7 20 6b 3d 20  |indow%   : . k= |
00001ff0  31 33 20 84 20 6b 3d 20  26 31 39 44 20 8c 0d 0b  |13 . k= &19D ...|
00002000  90 3e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.>              |
00002010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 e7  |               .|
00002020  20 69 63 6f 6e 25 20 3c  20 6c 69 73 74 25 28 6d  | icon% < list%(m|
00002030  61 78 5f 66 69 65 6c 64  73 29 20 8c 0d 0b 9a 33  |ax_fields) ....3|
00002040  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002050  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 6e  |               n|
00002060  65 77 5f 70 6f 73 25 3d  69 63 6f 6e 25 2b 31 0d  |ew_pos%=icon%+1.|
00002070  0b a4 23 20 20 20 20 20  20 20 20 20 20 20 20 20  |..#             |
00002080  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002090  20 cc 0d 0b ae 36 20 20  20 20 20 20 20 20 20 20  | ....6          |
000020a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000020b0  20 20 20 20 20 6e 65 77  5f 70 6f 73 25 20 3d 20  |     new_pos% = |
000020c0  6e 61 6d 65 25 28 30 29  0d 0b b8 23 20 20 20 20  |name%(0)...#    |
000020d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000020e0  20 20 20 20 20 20 20 20  20 20 cd 0d 0b c2 45 20  |          ....E |
000020f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002100  20 20 20 20 20 20 20 20  20 20 20 20 20 f2 73 65  |             .se|
00002110  74 5f 63 61 72 65 74 28  66 69 65 6c 64 73 5f 77  |t_caret(fields_w|
00002120  69 6e 64 6f 77 25 2c 6e  65 77 5f 70 6f 73 25 29  |indow%,new_pos%)|
00002130  0d 0b cc 21 20 20 20 20  20 20 20 20 20 20 20 20  |...!            |
00002140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002150  cd 0d 0b d6 2b 20 20 20  20 20 20 20 20 20 20 20  |....+           |
00002160  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002170  20 e7 20 6b 20 3d 26 31  38 46 20 8c 0d 0b e0 36  | . k =&18F ....6|
00002180  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002190  20 20 20 20 20 20 20 20  20 20 20 20 20 e7 20 69  |             . i|
000021a0  63 6f 6e 25 20 3e 3d 20  6e 61 6d 65 25 28 31 29  |con% >= name%(1)|
000021b0  20 8c 0d 0b ea 33 20 20  20 20 20 20 20 20 20 20  | ....3          |
000021c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000021d0  20 20 20 20 20 6e 65 77  5f 70 6f 73 25 3d 69 63  |     new_pos%=ic|
000021e0  6f 6e 25 2d 37 0d 0b f4  44 20 20 20 20 20 20 20  |on%-7...D       |
000021f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002200  20 20 20 20 20 20 f2 73  65 74 5f 63 61 72 65 74  |      .set_caret|
00002210  28 66 69 65 6c 64 73 5f  77 69 6e 64 6f 77 25 2c  |(fields_window%,|
00002220  6e 65 77 5f 70 6f 73 25  29 0d 0b fe 22 20 20 20  |new_pos%)..."   |
00002230  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002240  20 20 20 20 20 20 20 20  20 20 cd 0d 0c 08 20 20  |          ....  |
00002250  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002260  20 20 20 20 20 20 20 20  20 20 cd 0d 0c 12 2a 20  |          ....* |
00002270  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002280  20 20 20 20 20 20 20 20  20 20 e7 20 6b 20 3d 26  |          . k =&|
00002290  31 38 45 20 8c 0d 0c 1c  3e 20 20 20 20 20 20 20  |18E ....>       |
000022a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000022b0  20 20 20 20 20 20 e7 20  69 63 6f 6e 25 20 3c 20  |      . icon% < |
000022c0  6e 61 6d 65 25 28 6d 61  78 5f 66 69 65 6c 64 73  |name%(max_fields|
000022d0  29 20 8c 0d 0c 26 33 20  20 20 20 20 20 20 20 20  |) ...&3         |
000022e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000022f0  20 20 20 20 20 20 6e 65  77 5f 70 6f 73 25 3d 69  |      new_pos%=i|
00002300  63 6f 6e 25 2b 37 0d 0c  30 44 20 20 20 20 20 20  |con%+7..0D      |
00002310  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002320  20 20 20 20 20 20 20 f2  73 65 74 5f 63 61 72 65  |       .set_care|
00002330  74 28 66 69 65 6c 64 73  5f 77 69 6e 64 6f 77 25  |t(fields_window%|
00002340  2c 6e 65 77 5f 70 6f 73  25 29 0d 0c 3a 22 20 20  |,new_pos%)..:"  |
00002350  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002360  20 20 20 20 20 20 20 20  20 20 20 cd 0d 0c 44 20  |           ...D |
00002370  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002380  20 20 20 20 20 20 20 20  20 20 20 cd 0d 0c 4e 2a  |           ...N*|
00002390  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000023a0  20 20 20 20 20 20 20 20  20 20 20 e7 20 6b 3d 20  |           . k= |
000023b0  26 31 39 43 20 8c 0d 0c  58 35 20 20 20 20 20 20  |&19C ...X5      |
000023c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000023d0  20 20 20 20 20 20 20 e7  20 69 63 6f 6e 25 20 3e  |       . icon% >|
000023e0  20 6e 61 6d 65 25 28 30  29 20 8c 0d 0c 62 33 20  | name%(0) ...b3 |
000023f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002400  20 20 20 20 20 20 20 20  20 20 20 20 20 20 6e 65  |              ne|
00002410  77 5f 70 6f 73 25 3d 69  63 6f 6e 25 2b 31 0d 0c  |w_pos%=icon%+1..|
00002420  6c 45 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |lE              |
00002430  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002440  f2 73 65 74 5f 63 61 72  65 74 28 66 69 65 6c 64  |.set_caret(field|
00002450  73 5f 77 69 6e 64 6f 77  25 2c 6e 65 77 5f 70 6f  |s_window%,new_po|
00002460  73 25 29 0d 0c 76 21 20  20 20 20 20 20 20 20 20  |s%)..v!         |
00002470  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002480  20 20 20 cd 0d 0c 80 21  20 20 20 20 20 20 20 20  |   ....!        |
00002490  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000024a0  20 20 20 20 cd 0d 0c 8a  31 20 20 20 20 c9 20 64  |    ....1    . d|
000024b0  69 73 70 6c 61 79 5f 77  69 6e 64 6f 77 25 20 20  |isplay_window%  |
000024c0  20 3a e7 20 6b 20 3d 20  31 33 20 84 20 6b 20 3d  | :. k = 13 . k =|
000024d0  26 31 38 45 20 8c 0d 0c  94 4d 20 20 20 20 20 20  |&18E ....M      |
000024e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000024f0  20 20 20 20 20 20 20 e7  20 69 63 6f 6e 25 20 3c  |       . icon% <|
00002500  64 69 73 70 6c 61 79 5f  69 63 6f 6e 25 28 6e 75  |display_icon%(nu|
00002510  6d 62 65 72 5f 6f 66 5f  66 69 65 6c 64 73 25 2d  |mber_of_fields%-|
00002520  31 29 8c 0d 0c 9e 33 20  20 20 20 20 20 20 20 20  |1)....3         |
00002530  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002540  20 20 20 20 20 20 6e 65  77 5f 70 6f 73 25 3d 69  |      new_pos%=i|
00002550  63 6f 6e 25 2b 32 0d 0c  a8 22 20 20 20 20 20 20  |con%+2..."      |
00002560  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002570  20 20 20 20 20 20 20 cc  0d 0c b2 3e 20 20 20 20  |       ....>    |
00002580  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002590  20 20 20 20 20 20 20 20  20 20 20 6e 65 77 5f 70  |           new_p|
000025a0  6f 73 25 20 3d 20 64 69  73 70 6c 61 79 5f 69 63  |os% = display_ic|
000025b0  6f 6e 25 28 30 29 0d 0c  bc 2d 20 20 20 20 20 20  |on%(0)...-      |
000025c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000025d0  20 20 20 20 20 20 20 20  20 e7 20 6b 20 3d 20 31  |         . k = 1|
000025e0  33 20 8c 0d 0c c6 49 20  20 20 20 20 20 20 20 20  |3 ....I         |
000025f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002600  20 20 20 20 20 20 20 20  f2 73 65 74 5f 63 61 72  |        .set_car|
00002610  65 74 28 64 69 73 70 6c  61 79 5f 77 69 6e 64 6f  |et(display_windo|
00002620  77 25 2c 6e 65 77 5f 70  6f 73 25 29 0d 0c d0 31  |w%,new_pos%)...1|
00002630  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00002650  20 f2 6e 65 78 74 5f 72  65 63 6f 72 64 0d 0c da  | .next_record...|
00002660  24 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |$               |
00002670  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002680  cd 0d 0c e4 22 20 20 20  20 20 20 20 20 20 20 20  |...."           |
00002690  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000026a0  20 20 cd 0d 0c ee 20 20  20 20 20 20 20 20 20 20  |  ....          |
000026b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000026c0  20 20 cc 0d 0c f8 3d 20  20 20 20 20 20 20 20 20  |  ....=         |
000026d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000026e0  20 20 20 20 e7 20 69 63  6f 6e 25 20 3e 20 64 69  |    . icon% > di|
000026f0  73 70 6c 61 79 5f 69 63  6f 6e 25 28 30 29 20 8c  |splay_icon%(0) .|
00002700  0d 0d 02 33 20 20 20 20  20 20 20 20 20 20 20 20  |...3            |
00002710  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002720  20 20 20 6e 65 77 5f 70  6f 73 25 3d 69 63 6f 6e  |   new_pos%=icon|
00002730  25 2d 32 0d 0d 0c 22 20  20 20 20 20 20 20 20 20  |%-2..."         |
00002740  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002750  20 20 20 20 cc 0d 0d 16  50 20 20 20 20 20 20 20  |    ....P       |
00002760  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002770  20 20 20 20 20 20 20 20  6e 65 77 5f 70 6f 73 25  |        new_pos%|
00002780  20 3d 20 64 69 73 70 6c  61 79 5f 69 63 6f 6e 25  | = display_icon%|
00002790  28 6e 75 6d 62 65 72 5f  6f 66 5f 66 69 65 6c 64  |(number_of_field|
000027a0  73 25 2d 31 29 0d 0d 20  22 20 20 20 20 20 20 20  |s%-1).. "       |
000027b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000027c0  20 20 20 20 20 20 cd 0d  0d 2a 20 20 20 20 20 20  |      ...*      |
000027d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000027e0  20 20 20 20 20 20 cd 0d  0d 34 43 20 20 20 20 20  |      ...4C     |
000027f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002800  20 20 20 20 20 20 f2 73  65 74 5f 63 61 72 65 74  |      .set_caret|
00002810  28 64 69 73 70 6c 61 79  5f 77 69 6e 64 6f 77 25  |(display_window%|
00002820  2c 6e 65 77 5f 70 6f 73  25 29 0d 0d 3e 30 20 20  |,new_pos%)..>0  |
00002830  20 20 c9 20 70 61 73 73  77 6f 72 64 5f 77 69 6e  |  . password_win|
00002840  64 6f 77 25 20 3a 20 e7  20 6b 3d 20 31 33 20 8c  |dow% : . k= 13 .|
00002850  20 f2 70 61 73 73 77 6f  72 64 0d 0d 48 31 20 20  | .password..H1  |
00002860  20 20 c9 20 73 61 76 65  5f 77 69 6e 64 6f 77 25  |  . save_window%|
00002870  20 20 20 20 20 3a 20 e7  20 6b 3d 31 33 20 8c 20  |     : . k=13 . |
00002880  f2 71 75 69 63 6b 5f 73  61 76 65 0d 0d 52 09 20  |.quick_save..R. |
00002890  20 20 20 cb 0d 0d 5c 05  cd 0d 0d 66 05 e1 0d 0d  |   ...\....f....|
000028a0  70 04 0d 0d 7a 22 dd 20  f2 73 65 74 5f 63 61 72  |p...z". .set_car|
000028b0  65 74 28 77 69 6e 64 6f  77 25 2c 6e 65 77 5f 70  |et(window%,new_p|
000028c0  6f 73 25 29 0d 0d 84 4d  ea 20 6d 69 6e 78 25 2c  |os%)...M. minx%,|
000028d0  6d 61 78 78 25 2c 6d 69  6e 79 25 2c 6d 61 78 79  |maxx%,miny%,maxy|
000028e0  25 2c 6e 65 77 5f 73 63  72 6f 6c 6c 5f 78 25 2c  |%,new_scroll_x%,|
000028f0  73 63 72 6f 6c 6c 5f 78  25 2c 6e 65 77 5f 73 63  |scroll_x%,new_sc|
00002900  72 6f 6c 6c 5f 79 25 2c  73 63 72 6f 6c 6c 5f 79  |roll_y%,scroll_y|
00002910  25 0d 0d 8e 1b 20 20 20  20 21 62 6c 6f 63 6b 5f  |%....    !block_|
00002920  32 25 20 3d 20 77 69 6e  64 6f 77 25 0d 0d 98 29  |2% = window%...)|
00002930  20 20 20 20 c8 99 22 57  69 6d 70 5f 47 65 74 57  |    .."Wimp_GetW|
00002940  69 6e 64 6f 77 53 74 61  74 65 22 2c 2c 62 6c 6f  |indowState",,blo|
00002950  63 6b 5f 32 25 0d 0d a2  1c 20 20 20 20 6d 69 6e  |ck_2%....    min|
00002960  78 25 20 3d 20 20 62 6c  6f 63 6b 5f 32 25 21 32  |x% =  block_2%!2|
00002970  30 0d 0d ac 1c 20 20 20  20 6d 61 78 79 25 20 3d  |0....    maxy% =|
00002980  20 20 62 6c 6f 63 6b 5f  32 25 21 32 34 0d 0d b6  |  block_2%!24...|
00002990  38 20 20 20 20 6d 61 78  78 25 20 3d 20 20 62 6c  |8    maxx% =  bl|
000029a0  6f 63 6b 5f 32 25 21 31  32 20 2d 20 62 6c 6f 63  |ock_2%!12 - bloc|
000029b0  6b 5f 32 25 21 34 20 2b  20 20 62 6c 6f 63 6b 5f  |k_2%!4 +  block_|
000029c0  32 25 21 32 30 0d 0d c0  38 20 20 20 20 6d 69 6e  |2%!20...8    min|
000029d0  79 25 20 3d 20 20 62 6c  6f 63 6b 5f 32 25 21 38  |y% =  block_2%!8|
000029e0  20 2d 20 62 6c 6f 63 6b  5f 32 25 21 31 36 20 2b  | - block_2%!16 +|
000029f0  20 20 62 6c 6f 63 6b 5f  32 25 21 32 34 0d 0d ca  |  block_2%!24...|
00002a00  1f 20 20 20 20 73 63 72  6f 6c 6c 5f 78 25 20 3d  |.    scroll_x% =|
00002a10  20 62 6c 6f 63 6b 5f 32  25 21 32 30 0d 0d d4 1f  | block_2%!20....|
00002a20  20 20 20 20 73 63 72 6f  6c 6c 5f 79 25 20 3d 20  |    scroll_y% = |
00002a30  62 6c 6f 63 6b 5f 32 25  21 32 34 0d 0d de 3a 20  |block_2%!24...: |
00002a40  20 20 20 c8 99 22 57 69  6d 70 5f 53 65 74 43 61  |   .."Wimp_SetCa|
00002a50  72 65 74 50 6f 73 69 74  69 6f 6e 22 2c 77 69 6e  |retPosition",win|
00002a60  64 6f 77 25 2c 6e 65 77  5f 70 6f 73 25 2c 2c 2c  |dow%,new_pos%,,,|
00002a70  2d 31 2c 2d 31 0d 0d e8  2b 20 20 20 20 c8 99 22  |-1,-1...+    .."|
00002a80  57 69 6d 70 5f 47 65 74  43 61 72 65 74 50 6f 73  |Wimp_GetCaretPos|
00002a90  69 74 69 6f 6e 22 2c 2c  62 6c 6f 63 6b 5f 32 25  |ition",,block_2%|
00002aa0  0d 0d f2 1d 20 20 20 20  63 61 72 65 74 5f 78 25  |....    caret_x%|
00002ab0  20 3d 20 62 6c 6f 63 6b  5f 32 25 21 38 0d 0d fc  | = block_2%!8...|
00002ac0  1e 20 20 20 20 63 61 72  65 74 5f 79 25 20 3d 20  |.    caret_y% = |
00002ad0  62 6c 6f 63 6b 5f 32 25  21 31 32 0d 0e 06 20 20  |block_2%!12...  |
00002ae0  20 20 20 6e 65 77 5f 73  63 72 6f 6c 6c 5f 78 25  |   new_scroll_x%|
00002af0  3d 20 73 63 72 6f 6c 6c  5f 78 25 0d 0e 10 20 20  |= scroll_x%...  |
00002b00  20 20 20 6e 65 77 5f 73  63 72 6f 6c 6c 5f 79 25  |   new_scroll_y%|
00002b10  3d 20 73 63 72 6f 6c 6c  5f 79 25 0d 0e 1a 3b 20  |= scroll_y%...; |
00002b20  20 20 20 e7 20 63 61 72  65 74 5f 78 25 2d 36 34  |   . caret_x%-64|
00002b30  20 3c 20 6d 69 6e 78 25  20 8c 20 6e 65 77 5f 73  | < minx% . new_s|
00002b40  63 72 6f 6c 6c 5f 78 25  20 3d 20 63 61 72 65 74  |croll_x% = caret|
00002b50  5f 78 25 2d 35 30 0d 0e  24 3b 20 20 20 20 e7 20  |_x%-50..$;    . |
00002b60  63 61 72 65 74 5f 78 25  2b 36 34 20 3e 20 6d 61  |caret_x%+64 > ma|
00002b70  78 78 25 20 8c 20 6e 65  77 5f 73 63 72 6f 6c 6c  |xx% . new_scroll|
00002b80  5f 78 25 20 3d 20 63 61  72 65 74 5f 78 25 2d 35  |_x% = caret_x%-5|
00002b90  30 0d 0e 2e 48 20 20 20  20 e7 20 63 61 72 65 74  |0...H    . caret|
00002ba0  5f 79 25 2d 36 34 20 3c  20 6d 69 6e 79 25 20 8c  |_y%-64 < miny% .|
00002bb0  20 6e 65 77 5f 73 63 72  6f 6c 6c 5f 79 25 20 3d  | new_scroll_y% =|
00002bc0  20 63 61 72 65 74 5f 79  25 2b 28 6d 61 78 79 25  | caret_y%+(maxy%|
00002bd0  2d 6d 69 6e 79 25 29 81  32 0d 0e 38 48 20 20 20  |-miny%).2..8H   |
00002be0  20 e7 20 63 61 72 65 74  5f 79 25 2b 36 34 20 3e  | . caret_y%+64 >|
00002bf0  20 6d 61 78 79 25 20 8c  20 6e 65 77 5f 73 63 72  | maxy% . new_scr|
00002c00  6f 6c 6c 5f 79 25 20 3d  20 63 61 72 65 74 5f 79  |oll_y% = caret_y|
00002c10  25 2b 28 6d 61 78 79 25  2d 6d 69 6e 79 25 29 81  |%+(maxy%-miny%).|
00002c20  32 0d 0e 42 45 20 20 20  20 e7 20 28 6e 65 77 5f  |2..BE    . (new_|
00002c30  73 63 72 6f 6c 6c 5f 78  25 3c 3e 20 73 63 72 6f  |scroll_x%<> scro|
00002c40  6c 6c 5f 78 25 29 20 84  20 28 6e 65 77 5f 73 63  |ll_x%) . (new_sc|
00002c50  72 6f 6c 6c 5f 79 25 3c  3e 20 73 63 72 6f 6c 6c  |roll_y%<> scroll|
00002c60  5f 79 25 29 20 8c 0d 0e  4c 1e 20 20 20 20 20 20  |_y%) ...L.      |
00002c70  20 21 62 6c 6f 63 6b 5f  32 25 20 3d 20 77 69 6e  | !block_2% = win|
00002c80  64 6f 77 25 0d 0e 56 2c  20 20 20 20 20 20 20 c8  |dow%..V,       .|
00002c90  99 22 57 69 6d 70 5f 47  65 74 57 69 6e 64 6f 77  |."Wimp_GetWindow|
00002ca0  53 74 61 74 65 22 2c 2c  62 6c 6f 63 6b 5f 32 25  |State",,block_2%|
00002cb0  0d 0e 60 26 20 20 20 20  20 20 20 62 6c 6f 63 6b  |..`&       block|
00002cc0  5f 32 25 21 32 30 20 3d  20 6e 65 77 5f 73 63 72  |_2%!20 = new_scr|
00002cd0  6f 6c 6c 5f 78 25 0d 0e  6a 26 20 20 20 20 20 20  |oll_x%..j&      |
00002ce0  20 62 6c 6f 63 6b 5f 32  25 21 32 34 20 3d 20 6e  | block_2%!24 = n|
00002cf0  65 77 5f 73 63 72 6f 6c  6c 5f 79 25 0d 0e 74 1b  |ew_scroll_y%..t.|
00002d00  20 20 20 20 20 20 20 62  6c 6f 63 6b 5f 32 25 21  |       block_2%!|
00002d10  32 38 20 3d 20 2d 31 0d  0e 7e 28 20 20 20 20 20  |28 = -1..~(     |
00002d20  20 20 c8 99 22 57 69 6d  70 5f 4f 70 65 6e 57 69  |  .."Wimp_OpenWi|
00002d30  6e 64 6f 77 22 2c 2c 62  6c 6f 63 6b 5f 32 25 0d  |ndow",,block_2%.|
00002d40  0e 88 09 20 20 20 20 cd  0d 0e 92 05 e1 0d 0e 9c  |...    .........|
00002d50  04 0d 0e a6 04 0d 0e b0  04 0d 0e ba 0e dd 20 f2  |.............. .|
00002d60  6d 65 6e 75 28 62 29 0d  0e c4 15 66 6c 61 67 31  |menu(b)....flag1|
00002d70  25 20 3d 20 26 37 30 30  30 30 32 31 0d 0e ce 15  |% = &7000021....|
00002d80  66 6c 61 67 32 25 20 3d  20 26 37 34 30 30 30 32  |flag2% = &740002|
00002d90  31 0d 0e d8 1e e7 20 6c  6f 61 64 65 64 25 20 c8  |1..... loaded% .|
00002da0  94 20 66 6c 61 67 31 25  2c 66 6c 61 67 32 25 0d  |. flag1%,flag2%.|
00002db0  0e e2 14 24 6d 65 6e 75  3d 22 43 61 72 64 42 61  |...$menu="CardBa|
00002dc0  73 65 22 0d 0e ec 12 6d  65 6e 75 21 31 32 3d 26  |se"....menu!12=&|
00002dd0  37 30 32 30 37 0d 0e f6  0f 6d 65 6e 75 21 31 36  |70207....menu!16|
00002de0  3d 31 35 36 0d 0f 00 0e  6d 65 6e 75 21 32 30 3d  |=156....menu!20=|
00002df0  34 30 0d 0f 0a 0d 6d 65  6e 75 21 32 34 3d 30 0d  |40....menu!24=0.|
00002e00  0f 14 04 0d 0f 1e 04 0d  0f 28 04 0d 0f 32 11 6d  |.........(...2.m|
00002e10  65 6e 75 21 32 38 20 3d  20 26 30 30 0d 0f 3c 10  |enu!28 = &00..<.|
00002e20  6d 65 6e 75 21 33 32 20  3d 20 2d 31 0d 0f 46 15  |menu!32 = -1..F.|
00002e30  6d 65 6e 75 21 33 36 20  3d 20 20 66 6c 61 67 31  |menu!36 =  flag1|
00002e40  25 0d 0f 50 19 24 28 6d  65 6e 75 2b 34 30 29 20  |%..P.$(menu+40) |
00002e50  3d 20 22 43 72 65 61 74  65 22 0d 0f 5a 04 0d 0f  |= "Create"..Z...|
00002e60  64 11 6d 65 6e 75 21 35  32 20 3d 20 26 30 30 0d  |d.menu!52 = &00.|
00002e70  0f 6e 10 6d 65 6e 75 21  35 36 20 3d 20 2d 31 0d  |.n.menu!56 = -1.|
00002e80  0f 78 15 6d 65 6e 75 21  36 30 20 3d 20 20 66 6c  |.x.menu!60 =  fl|
00002e90  61 67 32 25 0d 0f 82 1c  24 28 6d 65 6e 75 2b 36  |ag2%....$(menu+6|
00002ea0  34 29 20 3d 20 22 44 69  73 70 20 45 64 69 74 22  |4) = "Disp Edit"|
00002eb0  0d 0f 8c 04 0d 0f 96 11  6d 65 6e 75 21 37 36 20  |........menu!76 |
00002ec0  3d 20 26 30 30 0d 0f a0  10 6d 65 6e 75 21 38 30  |= &00....menu!80|
00002ed0  20 3d 20 2d 31 0d 0f aa  14 6d 65 6e 75 21 38 34  | = -1....menu!84|
00002ee0  20 3d 20 66 6c 61 67 32  25 0d 0f b4 17 24 28 6d  | = flag2%....$(m|
00002ef0  65 6e 75 2b 38 38 29 20  3d 20 22 53 6f 72 74 22  |enu+88) = "Sort"|
00002f00  0d 0f be 04 0d 0f c8 05  20 0d 0f d2 12 6d 65 6e  |........ ....men|
00002f10  75 21 31 30 30 20 3d 20  26 30 30 0d 0f dc 11 6d  |u!100 = &00....m|
00002f20  65 6e 75 21 31 30 34 20  3d 20 2d 31 0d 0f e6 15  |enu!104 = -1....|
00002f30  6d 65 6e 75 21 31 30 38  20 3d 20 66 6c 61 67 32  |menu!108 = flag2|
00002f40  25 0d 0f f0 1a 24 28 6d  65 6e 75 2b 31 31 32 29  |%....$(menu+112)|
00002f50  20 3d 20 22 4f 75 74 70  75 74 22 0d 0f fa 05 20  | = "Output".... |
00002f60  0d 10 04 12 6d 65 6e 75  21 31 32 34 20 3d 20 26  |....menu!124 = &|
00002f70  30 30 0d 10 0e 11 6d 65  6e 75 21 31 32 38 20 3d  |00....menu!128 =|
00002f80  20 2d 31 0d 10 18 15 6d  65 6e 75 21 31 33 32 20  | -1....menu!132 |
00002f90  3d 20 66 6c 61 67 32 25  0d 10 22 1a 24 28 6d 65  |= flag2%..".$(me|
00002fa0  6e 75 2b 31 33 36 29 20  3d 20 22 46 69 65 6c 64  |nu+136) = "Field|
00002fb0  73 22 0d 10 2c 04 0d 10  36 12 6d 65 6e 75 21 31  |s"..,...6.menu!1|
00002fc0  34 38 20 3d 20 26 30 30  0d 10 40 11 6d 65 6e 75  |48 = &00..@.menu|
00002fd0  21 31 35 32 20 3d 20 2d  31 0d 10 4a 15 6d 65 6e  |!152 = -1..J.men|
00002fe0  75 21 31 35 36 20 3d 20  66 6c 61 67 32 25 0d 10  |u!156 = flag2%..|
00002ff0  54 19 24 28 6d 65 6e 75  2b 31 36 30 29 20 3d 20  |T.$(menu+160) = |
00003000  22 43 6c 6f 73 65 22 0d  10 5e 04 0d 10 68 04 0d  |"Close"..^...h..|
00003010  10 72 04 0d 10 7c 12 6d  65 6e 75 21 31 37 32 20  |.r...|.menu!172 |
00003020  3d 20 26 30 30 0d 10 86  1b 6d 65 6e 75 21 31 37  |= &00....menu!17|
00003030  36 20 3d 20 69 6e 66 6f  5f 77 69 6e 64 6f 77 25  |6 = info_window%|
00003040  0d 10 90 17 6d 65 6e 75  21 31 38 30 20 3d 20 26  |....menu!180 = &|
00003050  37 30 30 30 30 32 31 0d  10 9a 18 24 28 6d 65 6e  |7000021....$(men|
00003060  75 2b 31 38 34 29 20 3d  20 22 49 6e 66 6f 22 0d  |u+184) = "Info".|
00003070  10 a4 04 0d 10 ae 04 0d  10 b8 10 6d 65 6e 75 21  |...........menu!|
00003080  31 39 36 3d 26 38 30 0d  10 c2 10 6d 65 6e 75 21  |196=&80....menu!|
00003090  32 30 30 3d 20 2d 31 0d  10 cc 15 6d 65 6e 75 21  |200= -1....menu!|
000030a0  32 30 34 3d 26 37 30 30  30 30 32 31 0d 10 d6 16  |204=&7000021....|
000030b0  24 28 6d 65 6e 75 2b 32  30 38 29 3d 22 51 75 69  |$(menu+208)="Qui|
000030c0  74 22 0d 10 e0 04 0d 10  ea 28 c8 99 20 22 57 69  |t".......(.. "Wi|
000030d0  6d 70 5f 43 72 65 61 74  65 4d 65 6e 75 22 2c 2c  |mp_CreateMenu",,|
000030e0  6d 65 6e 75 2c 21 62 2d  36 34 2c 31 33 36 0d 10  |menu,!b-64,136..|
000030f0  f4 05 e1 0d 10 fe 04 0d  11 08 04 0d 11 12 04 0d  |................|
00003100  11 1c 1c dd 20 f2 63 6c  6f 73 65 61 77 69 6e 64  |.... .closeawind|
00003110  6f 77 28 68 61 6e 64 6c  65 25 29 0d 11 26 13 21  |ow(handle%)..&.!|
00003120  62 6c 6f 63 6b 25 3d 68  61 6e 64 6c 65 25 0d 11  |block%=handle%..|
00003130  30 21 20 c8 99 22 57 69  6d 70 5f 43 6c 6f 73 65  |0! .."Wimp_Close|
00003140  57 69 6e 64 6f 77 22 2c  2c 62 6c 6f 63 6b 25 0d  |Window",,block%.|
00003150  11 3a 3c e7 20 68 61 6e  64 6c 65 25 20 3d 20 6f  |.:<. handle% = o|
00003160  75 74 70 75 74 5f 77 69  6e 64 6f 77 25 20 8c 20  |utput_window% . |
00003170  f2 63 6c 6f 73 65 61 77  69 6e 64 6f 77 28 73 61  |.closeawindow(sa|
00003180  76 65 5f 77 69 6e 64 6f  77 25 29 0d 11 44 15 20  |ve_window%)..D. |
00003190  20 f4 20 72 65 63 75 72  73 69 76 65 20 62 69 74  | . recursive bit|
000031a0  0d 11 4e 05 e1 0d 11 58  04 0d 11 62 12 dd 20 f2  |..N....X...b.. .|
000031b0  72 65 63 65 69 76 65 28  71 25 29 0d 11 6c 0e c8  |receive(q%)..l..|
000031c0  8e 20 71 25 21 31 36 20  ca 0d 11 76 11 c9 20 30  |. q%!16 ...v.. 0|
000031d0  3a f2 66 69 6e 69 73 68  3a e0 0d 11 80 16 c9 20  |:.finish:...... |
000031e0  32 3a 20 f2 64 61 74 61  73 61 76 65 28 71 25 29  |2: .datasave(q%)|
000031f0  0d 11 8a 27 c9 20 33 2c  35 20 3a 20 e7 20 71 25  |...'. 3,5 : . q%|
00003200  21 31 32 20 3d 20 30 20  8c 20 f2 64 61 74 61 6c  |!12 = 0 . .datal|
00003210  6f 61 64 28 71 25 29 0d  11 94 05 cb 0d 11 9e 05  |oad(q%).........|
00003220  e1 0d 11 a8 05 20 0d 11  b2 04 0d 11 bc 04 0d 11  |..... ..........|
00003230  c6 04 0d 11 d0 0c dd 20  f2 73 65 74 75 70 0d 11  |....... .setup..|
00003240  da 3b c8 99 20 22 57 69  6d 70 5f 49 6e 69 74 69  |.;.. "Wimp_Initi|
00003250  61 6c 69 73 65 22 2c 32  30 30 2c 21 74 61 73 6b  |alise",200,!task|
00003260  69 64 25 2c 22 43 61 72  64 42 61 73 65 22 20 b8  |id%,"CardBase" .|
00003270  20 76 65 72 73 69 6f 6e  25 0d 11 e4 36 c8 99 20  | version%...6.. |
00003280  22 57 69 6d 70 5f 4f 70  65 6e 54 65 6d 70 6c 61  |"Wimp_OpenTempla|
00003290  74 65 22 2c 2c 22 3c 43  61 72 64 42 61 73 65 24  |te",,"<CardBase$|
000032a0  44 69 72 3e 2e 54 65 6d  70 6c 61 74 65 73 22 0d  |Dir>.Templates".|
000032b0  11 ee 45 c8 99 20 22 57  69 6d 70 5f 4c 6f 61 64  |..E.. "Wimp_Load|
000032c0  54 65 6d 70 6c 61 74 65  22 2c 2c 71 25 2c 69 6e  |Template",,q%,in|
000032d0  64 69 72 65 63 74 25 2c  69 6e 64 69 72 65 63 74  |direct%,indirect|
000032e0  25 2b 31 39 39 2c 2d 31  2c 22 64 69 73 70 6c 61  |%+199,-1,"displa|
000032f0  79 22 2c 30 0d 11 f8 30  c8 99 20 22 57 69 6d 70  |y",0...0.. "Wimp|
00003300  5f 43 72 65 61 74 65 57  69 6e 64 6f 77 22 2c 2c  |_CreateWindow",,|
00003310  71 25 20 b8 20 64 69 73  70 6c 61 79 5f 77 69 6e  |q% . display_win|
00003320  64 6f 77 25 0d 12 02 48  c8 99 20 22 57 69 6d 70  |dow%...H.. "Wimp|
00003330  5f 4c 6f 61 64 54 65 6d  70 6c 61 74 65 22 2c 2c  |_LoadTemplate",,|
00003340  71 25 2c 69 6e 64 69 72  65 63 74 25 2b 32 30 30  |q%,indirect%+200|
00003350  2c 69 6e 64 69 72 65 63  74 25 2b 33 39 39 2c 2d  |,indirect%+399,-|
00003360  31 2c 22 66 69 65 6c 64  73 22 2c 30 0d 12 0c 2f  |1,"fields",0.../|
00003370  c8 99 20 22 57 69 6d 70  5f 43 72 65 61 74 65 57  |.. "Wimp_CreateW|
00003380  69 6e 64 6f 77 22 2c 2c  71 25 20 b8 20 66 69 65  |indow",,q% . fie|
00003390  6c 64 73 5f 77 69 6e 64  6f 77 25 0d 12 16 48 c8  |lds_window%...H.|
000033a0  99 20 22 57 69 6d 70 5f  4c 6f 61 64 54 65 6d 70  |. "Wimp_LoadTemp|
000033b0  6c 61 74 65 22 2c 2c 71  25 2c 69 6e 64 69 72 65  |late",,q%,indire|
000033c0  63 74 25 2b 34 30 30 2c  69 6e 64 69 72 65 63 74  |ct%+400,indirect|
000033d0  25 2b 35 39 39 2c 2d 31  2c 22 6f 75 74 70 75 74  |%+599,-1,"output|
000033e0  22 2c 30 0d 12 20 2f c8  99 20 22 57 69 6d 70 5f  |",0.. /.. "Wimp_|
000033f0  43 72 65 61 74 65 57 69  6e 64 6f 77 22 2c 2c 71  |CreateWindow",,q|
00003400  25 20 b8 20 6f 75 74 70  75 74 5f 77 69 6e 64 6f  |% . output_windo|
00003410  77 25 0d 12 2a 4a c8 99  20 22 57 69 6d 70 5f 4c  |w%..*J.. "Wimp_L|
00003420  6f 61 64 54 65 6d 70 6c  61 74 65 22 2c 2c 71 25  |oadTemplate",,q%|
00003430  2c 69 6e 64 69 72 65 63  74 25 2b 36 30 30 2c 69  |,indirect%+600,i|
00003440  6e 64 69 72 65 63 74 25  2b 37 39 39 2c 2d 31 2c  |ndirect%+799,-1,|
00003450  22 70 72 6f 67 69 6e 66  6f 22 2c 30 0d 12 34 2d  |"proginfo",0..4-|
00003460  c8 99 20 22 57 69 6d 70  5f 43 72 65 61 74 65 57  |.. "Wimp_CreateW|
00003470  69 6e 64 6f 77 22 2c 2c  71 25 20 b8 20 69 6e 66  |indow",,q% . inf|
00003480  6f 5f 77 69 6e 64 6f 77  25 0d 12 3e 46 c8 99 20  |o_window%..>F.. |
00003490  22 57 69 6d 70 5f 4c 6f  61 64 54 65 6d 70 6c 61  |"Wimp_LoadTempla|
000034a0  74 65 22 2c 2c 71 25 2c  69 6e 64 69 72 65 63 74  |te",,q%,indirect|
000034b0  25 2b 38 30 30 2c 69 6e  64 69 72 65 63 74 25 2b  |%+800,indirect%+|
000034c0  39 39 39 2c 2d 31 2c 22  73 6f 72 74 22 2c 30 0d  |999,-1,"sort",0.|
000034d0  12 48 2d c8 99 20 22 57  69 6d 70 5f 43 72 65 61  |.H-.. "Wimp_Crea|
000034e0  74 65 57 69 6e 64 6f 77  22 2c 2c 71 25 20 b8 20  |teWindow",,q% . |
000034f0  73 6f 72 74 5f 77 69 6e  64 6f 77 25 0d 12 52 4a  |sort_window%..RJ|
00003500  c8 99 20 22 57 69 6d 70  5f 4c 6f 61 64 54 65 6d  |.. "Wimp_LoadTem|
00003510  70 6c 61 74 65 22 2c 2c  71 25 2c 69 6e 64 69 72  |plate",,q%,indir|
00003520  65 63 74 25 2b 31 30 30  30 2c 69 6e 64 69 72 65  |ect%+1000,indire|
00003530  63 74 25 2b 31 31 39 39  2c 2d 31 2c 22 63 72 65  |ct%+1199,-1,"cre|
00003540  61 74 65 22 2c 30 0d 12  5c 30 c8 99 20 22 57 69  |ate",0..\0.. "Wi|
00003550  6d 70 5f 43 72 65 61 74  65 57 69 6e 64 6f 77 22  |mp_CreateWindow"|
00003560  2c 2c 71 25 20 b8 20 6e  65 77 66 69 6c 65 5f 77  |,,q% . newfile_w|
00003570  69 6e 64 6f 77 25 0d 12  66 4c c8 99 20 22 57 69  |indow%..fL.. "Wi|
00003580  6d 70 5f 4c 6f 61 64 54  65 6d 70 6c 61 74 65 22  |mp_LoadTemplate"|
00003590  2c 2c 71 25 2c 69 6e 64  69 72 65 63 74 25 2b 31  |,,q%,indirect%+1|
000035a0  32 30 30 2c 69 6e 64 69  72 65 63 74 25 2b 31 33  |200,indirect%+13|
000035b0  39 39 2c 2d 31 2c 22 70  61 73 73 77 6f 72 64 22  |99,-1,"password"|
000035c0  2c 30 0d 12 70 31 c8 99  20 22 57 69 6d 70 5f 43  |,0..p1.. "Wimp_C|
000035d0  72 65 61 74 65 57 69 6e  64 6f 77 22 2c 2c 71 25  |reateWindow",,q%|
000035e0  20 b8 20 70 61 73 73 77  6f 72 64 5f 77 69 6e 64  | . password_wind|
000035f0  6f 77 25 0d 12 7a 4a c8  99 20 22 57 69 6d 70 5f  |ow%..zJ.. "Wimp_|
00003600  4c 6f 61 64 54 65 6d 70  6c 61 74 65 22 2c 2c 71  |LoadTemplate",,q|
00003610  25 2c 69 6e 64 69 72 65  63 74 25 2b 31 34 30 30  |%,indirect%+1400|
00003620  2c 69 6e 64 69 72 65 63  74 25 2b 31 35 39 39 2c  |,indirect%+1599,|
00003630  2d 31 2c 22 73 63 72 65  65 6e 22 2c 30 0d 12 84  |-1,"screen",0...|
00003640  2f c8 99 20 22 57 69 6d  70 5f 43 72 65 61 74 65  |/.. "Wimp_Create|
00003650  57 69 6e 64 6f 77 22 2c  2c 71 25 20 b8 20 73 63  |Window",,q% . sc|
00003660  72 65 65 6e 5f 77 69 6e  64 6f 77 25 0d 12 8e 48  |reen_window%...H|
00003670  c8 99 20 22 57 69 6d 70  5f 4c 6f 61 64 54 65 6d  |.. "Wimp_LoadTem|
00003680  70 6c 61 74 65 22 2c 2c  71 25 2c 69 6e 64 69 72  |plate",,q%,indir|
00003690  65 63 74 25 2b 31 36 30  30 2c 69 6e 64 69 72 65  |ect%+1600,indire|
000036a0  63 74 25 2b 31 38 35 30  2c 2d 31 2c 22 73 61 76  |ct%+1850,-1,"sav|
000036b0  65 22 2c 30 0d 12 98 0d  71 25 21 36 34 20 3d 20  |e",0....q%!64 = |
000036c0  31 0d 12 a2 2d c8 99 20  22 57 69 6d 70 5f 43 72  |1...-.. "Wimp_Cr|
000036d0  65 61 74 65 57 69 6e 64  6f 77 22 2c 2c 71 25 20  |eateWindow",,q% |
000036e0  b8 20 73 61 76 65 5f 77  69 6e 64 6f 77 25 0d 12  |. save_window%..|
000036f0  ac 1b c8 99 20 22 57 69  6d 70 5f 43 6c 6f 73 65  |.... "Wimp_Close|
00003700  54 65 6d 70 6c 61 74 65  22 0d 12 b6 21 53 25 3d  |Template"...!S%=|
00003710  8e 22 3c 43 61 72 64 42  61 73 65 24 44 69 72 3e  |."<CardBase$Dir>|
00003720  2e 21 53 70 72 69 74 65  73 22 0d 12 c0 0f 54 25  |.!Sprites"....T%|
00003730  3d a2 23 53 25 2b 31 36  30 0d 12 ca 08 d9 23 53  |=.#S%+160.....#S|
00003740  25 0d 12 d4 11 de 20 73  70 72 69 74 65 73 25 20  |%..... sprites% |
00003750  54 25 0d 12 de 1d 21 73  70 72 69 74 65 73 25 3d  |T%....!sprites%=|
00003760  54 25 3a 73 70 72 69 74  65 73 25 21 38 3d 31 0d  |T%:sprites%!8=1.|
00003770  12 e8 22 c8 99 20 22 4f  53 5f 53 70 72 69 74 65  |..".. "OS_Sprite|
00003780  4f 70 22 2c 26 31 30 39  2c 73 70 72 69 74 65 73  |Op",&109,sprites|
00003790  25 0d 12 f2 3c c8 99 20  22 4f 53 5f 53 70 72 69  |%...<.. "OS_Spri|
000037a0  74 65 4f 70 22 2c 26 31  30 41 2c 73 70 72 69 74  |teOp",&10A,sprit|
000037b0  65 73 25 2c 22 3c 43 61  72 64 42 61 73 65 24 44  |es%,"<CardBase$D|
000037c0  69 72 3e 2e 21 53 70 72  69 74 65 73 22 0d 12 fc  |ir>.!Sprites"...|
000037d0  14 69 63 63 61 6c 63 25  3d a4 69 63 6f 6e 62 61  |.iccalc%=.iconba|
000037e0  72 0d 13 06 0c 71 75 69  74 20 3d 20 a3 0d 13 10  |r....quit = ....|
000037f0  0e 61 62 6f 72 74 25 20  3d 20 a3 0d 13 1a 16 21  |.abort% = .....!|
00003800  71 25 20 3d 20 73 61 76  65 5f 77 69 6e 64 6f 77  |q% = save_window|
00003810  25 0d 13 24 0c 71 25 21  34 20 3d 20 32 0d 13 2e  |%..$.q%!4 = 2...|
00003820  1d c8 99 22 57 69 6d 70  5f 47 65 74 49 63 6f 6e  |..."Wimp_GetIcon|
00003830  53 74 61 74 65 22 2c 2c  71 25 0d 13 38 1b 74 65  |State",,q%..8.te|
00003840  78 74 5f 66 69 6c 65 5f  6e 61 6d 65 25 20 3d 20  |xt_file_name% = |
00003850  71 25 21 32 38 0d 13 42  1f 24 74 65 78 74 5f 66  |q%!28..B.$text_f|
00003860  69 6c 65 5f 6e 61 6d 65  25 20 3d 20 22 4f 75 74  |ile_name% = "Out|
00003870  70 75 74 22 0d 13 4c 05  e1 0d 13 56 04 0d 13 60  |put"..L....V...`|
00003880  04 0d 13 6a 05 20 0d 13  74 0e dd 20 a4 69 63 6f  |...j. ..t.. .ico|
00003890  6e 62 61 72 0d 13 7e 0a  21 71 25 3d 2d 31 0d 13  |nbar..~.!q%=-1..|
000038a0  88 0a 71 25 21 34 3d 30  0d 13 92 0a 71 25 21 38  |..q%!4=0....q%!8|
000038b0  3d 30 0d 13 9c 0c 71 25  21 31 32 3d 36 33 0d 13  |=0....q%!12=63..|
000038c0  a6 0c 71 25 21 31 36 3d  36 38 0d 13 b0 0f 71 25  |..q%!16=68....q%|
000038d0  21 32 30 3d 26 32 31 30  32 0d 13 ba 17 73 70 6e  |!20=&2102....spn|
000038e0  61 6d 65 24 3d 22 21 43  61 72 64 42 61 73 65 22  |ame$="!CardBase"|
000038f0  0d 13 c4 18 de 20 71 25  21 32 34 20 28 a9 73 70  |..... q%!24 (.sp|
00003900  6e 61 6d 65 24 2b 31 29  0d 13 ce 14 24 28 71 25  |name$+1)....$(q%|
00003910  21 32 34 29 3d 73 70 6e  61 6d 65 24 0d 13 d8 12  |!24)=spname$....|
00003920  71 25 21 32 38 3d 73 70  72 69 74 65 73 25 0d 13  |q%!28=sprites%..|
00003930  e2 14 71 25 21 33 32 3d  a9 73 70 6e 61 6d 65 24  |..q%!32=.spname$|
00003940  2b 31 0d 13 ec 22 c8 99  20 22 57 69 6d 70 5f 43  |+1...".. "Wimp_C|
00003950  72 65 61 74 65 49 63 6f  6e 22 2c 2c 71 25 20 b8  |reateIcon",,q% .|
00003960  20 69 63 25 0d 13 f6 08  3d 69 63 25 0d 14 00 04  | ic%....=ic%....|
00003970  0d 14 0a 04 0d 14 14 04  0d 14 1e 04 0d 14 28 04  |..............(.|
00003980  0d 14 32 04 0d 14 3c 04  0d 14 46 0c dd 20 f2 65  |..2...<...F.. .e|
00003990  72 72 6f 72 0d 14 50 1f  e7 20 6f 75 74 70 75 74  |rror..P.. output|
000039a0  5f 66 69 6c 65 5f 68 61  6e 64 6c 65 25 20 3e 20  |_file_handle% > |
000039b0  30 20 8c 0d 14 5a 1d 20  20 20 d9 23 20 6f 75 74  |0 ...Z.   .# out|
000039c0  70 75 74 5f 66 69 6c 65  5f 68 61 6e 64 6c 65 25  |put_file_handle%|
000039d0  0d 14 64 1c 20 20 20 6f  75 74 70 75 74 5f 66 69  |..d.   output_fi|
000039e0  6c 65 5f 68 61 6e 64 6c  65 25 3d 30 0d 14 6e 05  |le_handle%=0..n.|
000039f0  cd 0d 14 78 0e 61 62 6f  72 74 25 20 3d 20 a3 0d  |...x.abort% = ..|
00003a00  14 82 0a c8 8e 20 9f 20  ca 0d 14 8c 3a 20 20 c9  |..... . ....:  .|
00003a10  20 31 37 20 3a 20 f2 65  72 72 6f 72 5f 6d 65 73  | 17 : .error_mes|
00003a20  73 61 67 65 28 22 45 73  63 61 70 65 20 70 72 65  |sage("Escape pre|
00003a30  73 73 65 64 22 29 3a f2  71 75 69 63 6b 5f 63 6c  |ssed"):.quick_cl|
00003a40  6f 73 65 0d 14 96 8b 20  20 c9 20 36 37 37 37 38  |ose....  . 67778|
00003a50  20 3a 20 f2 65 72 72 6f  72 5f 6d 65 73 73 61 67  | : .error_messag|
00003a60  65 28 22 54 68 65 20 66  69 6c 65 20 79 6f 75 20  |e("The file you |
00003a70  61 72 65 20 61 74 74 65  6d 70 74 69 6e 67 20 74  |are attempting t|
00003a80  6f 20 6c 6f 61 64 20 69  73 20 61 6c 72 65 61 64  |o load is alread|
00003a90  79 20 6f 70 65 6e 2e 20  54 6f 20 63 75 72 65 20  |y open. To cure |
00003aa0  74 68 69 73 20 70 72 6f  62 6c 65 6d 20 64 69 73  |this problem dis|
00003ab0  6d 6f 75 6e 74 20 74 68  65 20 64 69 73 63 20 61  |mount the disc a|
00003ac0  6e 64 20 74 72 79 20 61  67 61 69 6e 22 29 0d 14  |nd try again")..|
00003ad0  a0 be 20 20 c9 20 31 39  33 20 20 20 3a 20 e7 20  |..  . 193   : . |
00003ae0  a4 63 61 6e 63 65 6c 5f  6d 65 73 73 61 67 65 28  |.cancel_message(|
00003af0  22 54 68 65 20 66 69 6c  65 20 63 61 6e 20 6e 6f  |"The file can no|
00003b00  74 20 62 65 20 77 72 69  74 74 65 6e 20 74 6f 2e  |t be written to.|
00003b10  20 43 68 65 63 6b 20 74  68 65 20 66 69 6c 65 2f  | Check the file/|
00003b20  64 69 73 6b 20 69 73 20  6e 6f 74 20 77 72 69 74  |disk is not writ|
00003b30  65 20 70 72 6f 74 65 63  74 65 64 20 61 6e 64 20  |e protected and |
00003b40  74 68 65 20 64 69 73 6b  20 69 73 20 69 6e 20 74  |the disk is in t|
00003b50  68 65 20 64 72 69 76 65  2e 20 4f 4b 20 74 6f 20  |he drive. OK to |
00003b60  63 6f 6e 74 69 6e 75 65  2e 20 43 61 6e 63 65 6c  |continue. Cancel|
00003b70  20 74 6f 20 71 75 69 74  20 74 68 65 20 70 72 6f  | to quit the pro|
00003b80  67 72 61 6d 22 29 20 3d  20 32 20 8c 0d 14 aa 20  |gram") = 2 .... |
00003b90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003ba0  f2 71 75 69 63 6b 5f 63  6c 6f 73 65 0d 14 b4 13  |.quick_close....|
00003bb0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 cc 0d  |              ..|
00003bc0  14 be 24 20 20 20 20 20  20 20 20 20 20 20 20 20  |..$             |
00003bd0  20 20 20 f2 65 6d 65 72  67 65 6e 63 79 5f 63 6c  |   .emergency_cl|
00003be0  6f 73 65 0d 14 c8 13 20  20 20 20 20 20 20 20 20  |ose....         |
00003bf0  20 20 20 20 20 cd 0d 14  d2 87 20 20 c9 20 31 31  |     .....  . 11|
00003c00  39 36 20 20 3a e7 20 a4  63 61 6e 63 65 6c 5f 6d  |96  :. .cancel_m|
00003c10  65 73 73 61 67 65 28 22  54 68 65 20 66 69 6c 65  |essage("The file|
00003c20  20 63 61 6e 20 6e 6f 74  20 62 65 20 66 6f 75 6e  | can not be foun|
00003c30  64 20 61 6e 64 20 64 61  74 61 20 68 61 73 20 62  |d and data has b|
00003c40  65 65 6e 20 6c 6f 73 74  2e 20 20 4f 4b 20 74 6f  |een lost.  OK to|
00003c50  20 63 6f 6e 74 69 6e 75  65 2e 20 43 61 6e 63 65  | continue. Cance|
00003c60  6c 20 74 6f 20 71 75 69  74 20 74 68 65 20 70 72  |l to quit the pr|
00003c70  6f 67 72 61 6d 22 29 20  3d 20 32 20 8c 0d 14 dc  |ogram") = 2 ....|
00003c80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003c90  20 f2 71 75 69 63 6b 5f  63 6c 6f 73 65 0d 14 e6  | .quick_close...|
00003ca0  13 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cc  |.              .|
00003cb0  0d 14 f0 24 20 20 20 20  20 20 20 20 20 20 20 20  |...$            |
00003cc0  20 20 20 20 f2 65 6d 65  72 67 65 6e 63 79 5f 63  |    .emergency_c|
00003cd0  6c 6f 73 65 0d 14 fa 13  20 20 20 20 20 20 20 20  |lose....        |
00003ce0  20 20 20 20 20 20 cd 0d  15 04 a7 20 20 c9 20 32  |      .....  . 2|
00003cf0  32 32 20 3a 20 e7 20 a4  63 61 6e 63 65 6c 5f 6d  |22 : . .cancel_m|
00003d00  65 73 73 61 67 65 28 22  54 68 65 20 66 69 6c 65  |essage("The file|
00003d10  20 68 61 73 20 62 65 65  6e 20 63 6c 6f 73 65 64  | has been closed|
00003d20  20 62 79 20 61 6e 6f 74  68 65 72 20 61 70 70 6c  | by another appl|
00003d30  69 63 61 74 69 6f 6e 20  6f 72 20 74 68 65 20 64  |ication or the d|
00003d40  69 73 6b 20 64 69 73 6d  6f 75 6e 74 65 64 2e 20  |isk dismounted. |
00003d50  4f 4b 20 74 6f 20 63 6f  6e 74 69 6e 75 65 2e 20  |OK to continue. |
00003d60  43 61 6e 63 65 6c 20 74  6f 20 71 75 69 74 20 74  |Cancel to quit t|
00003d70  68 65 20 70 72 6f 67 72  61 6d 22 29 20 3d 20 32  |he program") = 2|
00003d80  20 20 20 20 20 20 20 20  20 20 20 20 20 8c 0d 15  |             ...|
00003d90  0e 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00003da0  20 20 f2 71 75 69 63 6b  5f 63 6c 6f 73 65 0d 15  |  .quick_close..|
00003db0  18 12 20 20 20 20 20 20  20 20 20 20 20 20 20 cc  |..             .|
00003dc0  0d 15 22 24 20 20 20 20  20 20 20 20 20 20 20 20  |.."$            |
00003dd0  20 20 20 20 f2 65 6d 65  72 67 65 6e 63 79 5f 63  |    .emergency_c|
00003de0  6c 6f 73 65 0d 15 2c 12  20 20 20 20 20 20 20 20  |lose..,.        |
00003df0  20 20 20 20 20 cd 0d 15  36 07 20 20 7f 0d 15 40  |     ...6.  ...@|
00003e00  82 20 20 20 20 e7 20 a4  63 61 6e 63 65 6c 5f 6d  |.    . .cancel_m|
00003e10  65 73 73 61 67 65 28 f6  24 2b 22 20 28 69 6e 74  |essage(.$+" (int|
00003e20  65 72 6e 61 6c 20 65 72  72 6f 72 29 20 22 2b c3  |ernal error) "+.|
00003e30  28 9e 29 2b 22 20 2f 20  22 20 2b c3 28 9f 29 2b  |(.)+" / " +.(.)+|
00003e40  22 20 4f 4b 20 74 6f 20  63 6f 6e 74 69 6e 65 2e  |" OK to contine.|
00003e50  20 43 61 6e 63 65 6c 20  74 6f 20 71 75 69 74 20  | Cancel to quit |
00003e60  74 68 65 20 70 72 6f 67  72 61 6d 22 29 3d 20 32  |the program")= 2|
00003e70  20 8c 20 f2 71 75 69 63  6b 5f 63 6c 6f 73 65 0d  | . .quick_close.|
00003e80  15 4a 05 cb 0d 15 54 05  e1 0d 15 5e 04 0d 15 68  |.J....T....^...h|
00003e90  04 0d 15 72 04 0d 15 7c  04 0d 15 86 04 0d 15 90  |...r...|........|
00003ea0  04 0d 15 9a 1b dd 20 f2  65 72 72 6f 72 5f 6d 65  |...... .error_me|
00003eb0  73 73 61 67 65 28 74 65  78 74 24 29 0d 15 a4 17  |ssage(text$)....|
00003ec0  c8 99 22 48 6f 75 72 67  6c 61 73 73 5f 53 6d 61  |.."Hourglass_Sma|
00003ed0  73 68 22 0d 15 ae 18 c8  99 22 57 69 6d 70 5f 44  |sh"......"Wimp_D|
00003ee0  72 61 67 42 6f 78 22 2c  2c 2d 31 0d 15 b8 0d 21  |ragBox",,-1....!|
00003ef0  62 6c 6f 63 6b 25 3d 9f  0d 15 c2 15 24 28 62 6c  |block%=.....$(bl|
00003f00  6f 63 6b 25 2b 34 29 3d  74 65 78 74 24 0d 15 cc  |ock%+4)=text$...|
00003f10  2e c8 99 20 22 57 69 6d  70 5f 52 65 70 6f 72 74  |... "Wimp_Report|
00003f20  45 72 72 6f 72 22 2c 62  6c 6f 63 6b 25 2c 31 2c  |Error",block%,1,|
00003f30  22 21 43 61 72 64 42 61  73 65 22 0d 15 d6 05 e1  |"!CardBase".....|
00003f40  0d 15 e0 04 0d 15 ea 04  0d 15 f4 15 dd 20 f2 6d  |............. .m|
00003f50  65 73 73 61 67 65 28 74  65 78 74 24 29 0d 15 fe  |essage(text$)...|
00003f60  17 c8 99 22 48 6f 75 72  67 6c 61 73 73 5f 53 6d  |..."Hourglass_Sm|
00003f70  61 73 68 22 0d 16 08 18  c8 99 22 57 69 6d 70 5f  |ash"......"Wimp_|
00003f80  44 72 61 67 42 6f 78 22  2c 2c 2d 31 0d 16 12 0d  |DragBox",,-1....|
00003f90  21 62 6c 6f 63 6b 25 3d  9f 0d 16 1c 15 24 28 62  |!block%=.....$(b|
00003fa0  6c 6f 63 6b 25 2b 34 29  3d 74 65 78 74 24 0d 16  |lock%+4)=text$..|
00003fb0  26 2f c8 99 20 22 57 69  6d 70 5f 52 65 70 6f 72  |&/.. "Wimp_Repor|
00003fc0  74 45 72 72 6f 72 22 2c  62 6c 6f 63 6b 25 2c 31  |tError",block%,1|
00003fd0  37 2c 22 21 43 61 72 64  42 61 73 65 22 0d 16 30  |7,"!CardBase"..0|
00003fe0  05 e1 0d 16 3a 04 0d 16  44 04 0d 16 4e 04 0d 16  |....:...D...N...|
00003ff0  58 1c dd 20 a4 63 61 6e  63 65 6c 5f 6d 65 73 73  |X.. .cancel_mess|
00004000  61 67 65 28 74 65 78 74  24 29 0d 16 62 28 f4 20  |age(text$)..b(. |
00004010  72 65 74 75 72 6e 73 20  30 2c 31 2c 32 20 66 6f  |returns 0,1,2 fo|
00004020  72 20 6e 6f 6e 65 2c 20  6f 6b 2c 20 63 61 6e 63  |r none, ok, canc|
00004030  65 6c 0d 16 6c 0b ea 20  72 30 2c 72 31 0d 16 76  |el..l.. r0,r1..v|
00004040  17 c8 99 22 48 6f 75 72  67 6c 61 73 73 5f 53 6d  |..."Hourglass_Sm|
00004050  61 73 68 22 0d 16 80 18  c8 99 22 57 69 6d 70 5f  |ash"......"Wimp_|
00004060  44 72 61 67 42 6f 78 22  2c 2c 2d 31 0d 16 8a 0d  |DragBox",,-1....|
00004070  21 62 6c 6f 63 6b 25 3d  9f 0d 16 94 15 24 28 62  |!block%=.....$(b|
00004080  6c 6f 63 6b 25 2b 34 29  3d 74 65 78 74 24 0d 16  |lock%+4)=text$..|
00004090  9e 37 c8 99 20 22 57 69  6d 70 5f 52 65 70 6f 72  |.7.. "Wimp_Repor|
000040a0  74 45 72 72 6f 72 22 2c  62 6c 6f 63 6b 25 2c 32  |tError",block%,2|
000040b0  33 2c 22 21 43 61 72 64  42 61 73 65 22 20 b8 20  |3,"!CardBase" . |
000040c0  72 30 2c 72 31 0d 16 a8  07 3d 72 31 0d 16 b2 05  |r0,r1....=r1....|
000040d0  e1 0d 16 bc 04 0d 16 c6  04 0d 16 d0 10 dd 20 f2  |.............. .|
000040e0  67 6c 61 73 73 28 6f 25  29 0d 16 da 0a e7 20 6f  |glass(o%)..... o|
000040f0  25 20 8c 0d 16 e4 16 20  20 c8 99 22 48 6f 75 72  |% .....  .."Hour|
00004100  67 6c 61 73 73 5f 4f 6e  22 0d 16 ee 05 cc 0d 16  |glass_On".......|
00004110  f8 17 20 20 c8 99 22 48  6f 75 72 67 6c 61 73 73  |..  .."Hourglass|
00004120  5f 4f 66 66 22 0d 17 02  05 cd 0d 17 0c 05 e1 0d  |_Off"...........|
00004130  17 16 04 0d 17 20 04 0d  17 2a 0d dd 20 f2 66 69  |..... ...*.. .fi|
00004140  6e 69 73 68 0d 17 34 17  c8 99 20 22 57 69 6d 70  |nish..4... "Wimp|
00004150  5f 43 6c 6f 73 65 44 6f  77 6e 22 0d 17 3e 05 e1  |_CloseDown"..>..|
00004160  0d 17 48 04 0d 17 52 04  0d 17 5c 04 0d 17 66 04  |..H...R...\...f.|
00004170  0d 17 70 1d dd 20 f2 72  65 64 72 61 77 5f 77 69  |..p.. .redraw_wi|
00004180  6e 64 6f 77 28 68 61 6e  64 6c 65 25 29 0d 17 7a  |ndow(handle%)..z|
00004190  15 21 62 6c 6f 63 6b 25  20 3d 20 68 61 6e 64 6c  |.!block% = handl|
000041a0  65 25 0d 17 84 29 c8 99  22 57 69 6d 70 5f 52 65  |e%...).."Wimp_Re|
000041b0  64 72 61 77 57 69 6e 64  6f 77 22 2c 2c 62 6c 6f  |drawWindow",,blo|
000041c0  63 6b 25 20 b8 20 6d 6f  72 65 25 0d 17 8e 0c c8  |ck% . more%.....|
000041d0  95 20 6d 6f 72 65 25 0d  17 98 2c 20 20 c8 99 20  |. more%...,  .. |
000041e0  22 57 69 6d 70 5f 47 65  74 52 65 63 74 61 6e 67  |"Wimp_GetRectang|
000041f0  6c 65 22 2c 2c 62 6c 6f  63 6b 25 20 b8 20 6d 6f  |le",,block% . mo|
00004200  72 65 25 0d 17 a2 05 ce  0d 17 ac 05 e1 0d 17 b6  |re%.............|
00004210  04 0d 17 c0 05 20 0d 17  ca 41 dd 20 a4 69 63 6f  |..... ...A. .ico|
00004220  6e 28 77 68 61 6e 64 6c  65 25 2c 69 78 25 2c 69  |n(whandle%,ix%,i|
00004230  79 25 2c 69 77 25 2c 69  68 25 2c 66 6c 61 67 25  |y%,iw%,ih%,flag%|
00004240  2c 20 74 65 78 74 24 2c  20 64 31 25 2c 20 64 32  |, text$, d1%, d2|
00004250  25 2c 20 64 33 25 29 0d  17 d4 17 62 6c 6f 63 6b  |%, d3%)....block|
00004260  25 21 30 20 3d 20 77 68  61 6e 64 6c 65 25 0d 17  |%!0 = whandle%..|
00004270  de 12 62 6c 6f 63 6b 25  21 34 20 3d 20 69 78 25  |..block%!4 = ix%|
00004280  0d 17 e8 12 62 6c 6f 63  6b 25 21 38 20 3d 20 69  |....block%!8 = i|
00004290  79 25 0d 17 f2 19 62 6c  6f 63 6b 25 21 31 32 20  |y%....block%!12 |
000042a0  3d 20 69 78 25 20 2b 20  69 77 25 0d 17 fc 19 62  |= ix% + iw%....b|
000042b0  6c 6f 63 6b 25 21 31 36  20 3d 20 69 79 25 20 2b  |lock%!16 = iy% +|
000042c0  20 69 68 25 0d 18 06 15  62 6c 6f 63 6b 25 21 32  | ih%....block%!2|
000042d0  30 20 3d 20 66 6c 61 67  25 0d 18 10 0f e7 20 64  |0 = flag%..... d|
000042e0  31 25 20 3d 20 30 20 8c  0d 18 1a 19 20 24 28 62  |1% = 0 ..... $(b|
000042f0  6c 6f 63 6b 25 21 32 34  29 20 3d 20 74 65 78 74  |lock%!24) = text|
00004300  24 0d 18 24 05 cc 0d 18  2e 16 20 20 20 62 6c 6f  |$..$......   blo|
00004310  63 6b 25 21 32 34 20 3d  20 64 31 25 0d 18 38 16  |ck%!24 = d1%..8.|
00004320  20 20 20 62 6c 6f 63 6b  25 21 32 38 20 3d 20 64  |   block%!28 = d|
00004330  32 25 0d 18 42 16 20 20  20 62 6c 6f 63 6b 25 21  |2%..B.   block%!|
00004340  33 32 20 3d 20 64 33 25  0d 18 4c 05 cd 0d 18 56  |32 = d3%..L....V|
00004350  2a c8 99 22 57 69 6d 70  5f 43 72 65 61 74 65 49  |*.."Wimp_CreateI|
00004360  63 6f 6e 22 2c 2c 62 6c  6f 63 6b 25 20 b8 20 69  |con",,block% . i|
00004370  68 61 6e 64 6c 65 25 0d  18 60 0d 3d 69 68 61 6e  |handle%..`.=ihan|
00004380  64 6c 65 25 0d 18 6a 04  0d 18 74 04 0d 18 7e 04  |dle%..j...t...~.|
00004390  0d 18 88 05 20 0d 18 92  04 0d 18 9c 12 dd 20 f2  |.... ......... .|
000043a0  63 72 65 61 74 65 69 63  6f 6e 73 0d 18 a6 4e f4  |createicons...N.|
000043b0  20 77 69 6e 64 6f 77 68  61 6e 64 6c 65 2c 6d 69  | windowhandle,mi|
000043c0  6e 78 2c 6d 69 6e 79 2c  6c 65 6e 67 74 68 2c 20  |nx,miny,length, |
000043d0  68 65 69 67 68 74 2c 20  66 6c 61 67 73 2c 20 73  |height, flags, s|
000043e0  70 72 69 74 65 2c 74 65  78 74 2c 20 76 61 6c 69  |prite,text, vali|
000043f0  64 2c 20 6c 65 6e 67 74  68 0d 18 b0 25 f4 20 74  |d, length...%. t|
00004400  65 78 74 2c 20 6e 6f 20  62 61 63 6b 67 72 6f 75  |ext, no backgrou|
00004410  6e 64 20 69 73 20 26 37  30 30 30 35 31 31 0d 18  |nd is &7000511..|
00004420  ba 27 f4 20 74 65 78 74  2c 20 77 69 74 68 20 62  |.'. text, with b|
00004430  61 63 6b 67 72 6f 75 6e  64 20 69 73 20 26 37 30  |ackground is &70|
00004440  30 30 31 33 35 0d 18 c4  32 f4 20 77 72 69 74 61  |00135...2. writa|
00004450  62 6c 65 20 69 63 6f 6e  2c 20 76 61 6c 69 64 61  |ble icon, valida|
00004460  74 65 64 2c 20 69 6e 20  62 6f 78 20 69 73 20 26  |ted, in box is &|
00004470  37 30 30 46 35 33 44 0d  18 ce 56 6e 66 5f 31 25  |700F53D...Vnf_1%|
00004480  20 3d 20 a4 69 63 6f 6e  28 6e 65 77 66 69 6c 65  | = .icon(newfile|
00004490  5f 77 69 6e 64 6f 77 25  2c 32 30 30 2c 2d 35 34  |_window%,200,-54|
000044a0  2c 32 30 30 2c 34 38 2c  26 37 30 30 46 35 33 44  |,200,48,&700F53D|
000044b0  2c 22 22 2c 66 69 6c 65  6e 61 6d 65 25 2c 76 61  |,"",filename%,va|
000044c0  6c 69 64 5f 6e 61 6d 65  25 2c 31 32 29 0d 18 d8  |lid_name%,12)...|
000044d0  5a 6e 66 5f 32 25 20 3d  a4 69 63 6f 6e 28 6e 65  |Znf_2% =.icon(ne|
000044e0  77 66 69 6c 65 5f 77 69  6e 64 6f 77 25 2c 32 30  |wfile_window%,20|
000044f0  30 2c 2d 31 30 38 2c 32  30 30 2c 34 38 2c 26 37  |0,-108,200,48,&7|
00004500  30 30 46 35 33 44 2c 22  22 2c 70 61 73 73 77 6f  |00F53D,"",passwo|
00004510  72 64 25 2c 76 61 6c 69  64 5f 70 61 73 73 77 6f  |rd%,valid_passwo|
00004520  72 64 25 2c 31 32 29 0d  18 e2 5c 70 77 25 20 3d  |rd%,12)...\pw% =|
00004530  a4 69 63 6f 6e 28 70 61  73 73 77 6f 72 64 5f 77  |.icon(password_w|
00004540  69 6e 64 6f 77 25 2c 34  30 30 2c 2d 32 30 30 2c  |indow%,400,-200,|
00004550  32 30 30 2c 34 38 2c 26  37 30 30 46 35 33 44 2c  |200,48,&700F53D,|
00004560  22 22 2c 69 6e 5f 70 61  73 73 77 6f 72 64 25 2c  |"",in_password%,|
00004570  76 61 6c 69 64 5f 70 61  73 73 77 6f 72 64 25 2c  |valid_password%,|
00004580  31 32 29 0d 18 ec 49 64  25 20 3d a4 69 63 6f 6e  |12)...Id% =.icon|
00004590  28 64 69 73 70 6c 61 79  5f 77 69 6e 64 6f 77 25  |(display_window%|
000045a0  2c 32 37 30 2c 2d 36 32  2c 32 30 30 2c 34 38 2c  |,270,-62,200,48,|
000045b0  26 37 30 30 30 31 33 35  2c 22 22 2c 66 69 6c 65  |&7000135,"",file|
000045c0  6e 61 6d 65 25 2c 2d 31  2c 31 32 29 0d 18 f6 48  |name%,-1,12)...H|
000045d0  64 25 20 3d a4 69 63 6f  6e 28 66 69 65 6c 64 73  |d% =.icon(fields|
000045e0  5f 77 69 6e 64 6f 77 25  2c 32 38 30 2c 2d 36 32  |_window%,280,-62|
000045f0  2c 32 30 30 2c 34 38 2c  26 37 30 30 30 31 33 35  |,200,48,&7000135|
00004600  2c 22 22 2c 66 69 6c 65  6e 61 6d 65 25 2c 2d 31  |,"",filename%,-1|
00004610  2c 31 32 29 0d 19 00 48  64 25 20 3d a4 69 63 6f  |,12)...Hd% =.ico|
00004620  6e 28 6f 75 74 70 75 74  5f 77 69 6e 64 6f 77 25  |n(output_window%|
00004630  2c 32 38 30 2c 2d 36 32  2c 32 30 30 2c 34 38 2c  |,280,-62,200,48,|
00004640  26 37 30 30 30 31 33 35  2c 22 22 2c 66 69 6c 65  |&7000135,"",file|
00004650  6e 61 6d 65 25 2c 2d 31  2c 31 32 29 0d 19 0a 48  |name%,-1,12)...H|
00004660  64 25 20 3d a4 69 63 6f  6e 28 73 63 72 65 65 6e  |d% =.icon(screen|
00004670  5f 77 69 6e 64 6f 77 25  2c 32 38 30 2c 2d 36 32  |_window%,280,-62|
00004680  2c 32 30 30 2c 34 38 2c  26 37 30 30 30 31 33 35  |,200,48,&7000135|
00004690  2c 22 22 2c 66 69 6c 65  6e 61 6d 65 25 2c 2d 31  |,"",filename%,-1|
000046a0  2c 31 32 29 0d 19 14 46  64 25 20 3d a4 69 63 6f  |,12)...Fd% =.ico|
000046b0  6e 28 73 6f 72 74 5f 77  69 6e 64 6f 77 25 2c 32  |n(sort_window%,2|
000046c0  38 30 2c 2d 36 32 2c 32  30 30 2c 34 38 2c 26 37  |80,-62,200,48,&7|
000046d0  30 30 30 31 33 35 2c 22  22 2c 66 69 6c 65 6e 61  |000135,"",filena|
000046e0  6d 65 25 2c 2d 31 2c 31  32 29 0d 19 1e 4b 64 25  |me%,-1,12)...Kd%|
000046f0  20 3d a4 69 63 6f 6e 28  64 69 73 70 6c 61 79 5f  | =.icon(display_|
00004700  77 69 6e 64 6f 77 25 2c  37 30 30 2c 2d 36 32 2c  |window%,700,-62,|
00004710  31 38 30 2c 34 38 2c 26  37 30 30 30 31 33 35 2c  |180,48,&7000135,|
00004720  22 22 2c 72 65 63 5f 6e  75 6d 62 65 72 25 2c 2d  |"",rec_number%,-|
00004730  31 2c 31 32 29 0d 19 28  04 0d 19 32 2d e3 20 61  |1,12)..(...2-. a|
00004740  25 20 3d 20 66 69 65 6c  64 5f 64 65 73 25 20 b8  |% = field_des% .|
00004750  20 66 69 65 6c 64 5f 64  65 73 25 20 2b 20 32 31  | field_des% + 21|
00004760  39 36 20 88 20 34 0d 19  3c 32 20 20 21 61 25 20  |96 . 4..<2  !a% |
00004770  3d 20 26 44 30 44 30 44  30 44 20 20 20 20 3a 20  |= &D0D0D0D    : |
00004780  f4 20 53 45 54 20 54 48  45 20 41 59 59 41 59 20  |. SET THE AYYAY |
00004790  54 4f 20 45 4d 50 54 59  0d 19 46 05 ed 0d 19 50  |TO EMPTY..F....P|
000047a0  04 0d 19 5a 16 e3 20 61  25 20 3d 20 30 20 b8 20  |...Z.. a% = 0 . |
000047b0  34 39 36 20 88 20 34 0d  19 64 20 20 20 6f 75 74  |496 . 4..d   out|
000047c0  70 75 74 5f 6c 69 73 74  25 21 61 25 20 3d 20 26  |put_list%!a% = &|
000047d0  44 30 44 30 44 30 44 0d  19 6e 05 ed 0d 19 78 04  |D0D0D0D..n....x.|
000047e0  0d 19 82 16 e3 20 61 25  20 3d 20 30 20 b8 20 32  |..... a% = 0 . 2|
000047f0  39 36 20 88 20 34 0d 19  8c 1f 20 20 73 6f 72 74  |96 . 4....  sort|
00004800  5f 66 69 65 6c 64 25 21  61 25 20 3d 20 26 44 30  |_field%!a% = &D0|
00004810  44 30 44 30 44 0d 19 96  05 ed 0d 19 a0 04 0d 19  |D0D0D...........|
00004820  aa 17 e3 20 61 25 20 3d  20 30 20 b8 20 31 39 39  |... a% = 0 . 199|
00004830  36 20 88 20 34 0d 19 b4  23 20 20 6f 75 74 70 75  |6 . 4...#  outpu|
00004840  74 5f 64 69 73 70 6c 61  79 25 21 61 25 20 3d 20  |t_display%!a% = |
00004850  26 44 30 44 30 44 30 44  0d 19 be 05 ed 0d 19 c8  |&D0D0D0D........|
00004860  04 0d 19 d2 16 e3 20 61  25 20 3d 20 30 20 b8 20  |...... a% = 0 . |
00004870  31 39 36 20 88 20 34 0d  19 dc 20 20 20 73 65 61  |196 . 4...   sea|
00004880  72 63 68 5f 6c 69 73 74  25 21 61 25 20 3d 20 26  |rch_list%!a% = &|
00004890  44 30 44 30 44 30 44 0d  19 e6 05 ed 0d 19 f0 04  |D0D0D0D.........|
000048a0  0d 19 fa 17 e3 20 61 25  20 3d 20 30 20 b8 20 31  |..... a% = 0 . 1|
000048b0  39 39 36 20 88 20 34 0d  1a 04 23 20 20 6f 75 74  |996 . 4...#  out|
000048c0  70 75 74 5f 64 69 73 70  6c 61 79 25 21 61 25 20  |put_display%!a% |
000048d0  3d 20 26 44 30 44 30 44  30 44 0d 1a 0e 05 ed 0d  |= &D0D0D0D......|
000048e0  1a 18 04 0d 1a 22 04 0d  1a 2c 04 0d 1a 36 1b e3  |....."...,...6..|
000048f0  20 72 6f 77 25 20 3d 20  30 20 b8 20 6d 61 78 5f  | row% = 0 . max_|
00004900  66 69 65 6c 64 73 0d 1a  40 6d 6e 61 6d 65 25 28  |fields..@mname%(|
00004910  72 6f 77 25 29 20 3d 20  a4 69 63 6f 6e 28 66 69  |row%) = .icon(fi|
00004920  65 6c 64 73 5f 77 69 6e  64 6f 77 25 2c 35 30 2c  |elds_window%,50,|
00004930  2d 32 35 30 2d 72 6f 77  25 2a 36 30 2c 32 30 30  |-250-row%*60,200|
00004940  2c 34 38 2c 26 37 30 30  46 35 33 35 2c 22 22 2c  |,48,&700F535,"",|
00004950  66 69 65 6c 64 5f 64 65  73 25 2b 31 30 30 2a 72  |field_des%+100*r|
00004960  6f 77 25 2c 76 61 6c 69  64 5f 6e 61 6d 65 25 2c  |ow%,valid_name%,|
00004970  32 30 29 0d 1a 4a 6f 74  79 70 65 25 28 72 6f 77  |20)..Jotype%(row|
00004980  25 29 20 3d 20 a4 69 63  6f 6e 28 66 69 65 6c 64  |%) = .icon(field|
00004990  73 5f 77 69 6e 64 6f 77  25 2c 33 33 30 2c 2d 32  |s_window%,330,-2|
000049a0  35 30 2d 72 6f 77 25 2a  36 30 2c 34 30 2c 34 38  |50-row%*60,40,48|
000049b0  2c 26 37 30 30 46 35 33  35 2c 22 22 2c 66 69 65  |,&700F535,"",fie|
000049c0  6c 64 5f 64 65 73 25 2b  32 32 2b 31 30 30 2a 72  |ld_des%+22+100*r|
000049d0  6f 77 25 2c 76 61 6c 69  64 5f 74 79 70 65 25 2c  |ow%,valid_type%,|
000049e0  32 29 0d 1a 54 73 77 69  64 74 68 25 28 72 6f 77  |2)..Tswidth%(row|
000049f0  25 29 20 3d 20 a4 69 63  6f 6e 28 66 69 65 6c 64  |%) = .icon(field|
00004a00  73 5f 77 69 6e 64 6f 77  25 2c 34 37 30 2c 2d 32  |s_window%,470,-2|
00004a10  35 30 2d 72 6f 77 25 2a  36 30 2c 38 30 2c 34 38  |50-row%*60,80,48|
00004a20  2c 26 37 30 30 46 35 33  35 2c 22 22 2c 66 69 65  |,&700F535,"",fie|
00004a30  6c 64 5f 64 65 73 25 2b  32 36 2b 31 30 30 2a 72  |ld_des%+26+100*r|
00004a40  6f 77 25 2c 76 61 6c 69  64 5f 69 6e 74 65 67 65  |ow%,valid_intege|
00004a50  72 25 2c 33 29 0d 1a 5e  70 64 70 25 28 72 6f 77  |r%,3)..^pdp%(row|
00004a60  25 29 20 3d 20 a4 69 63  6f 6e 28 66 69 65 6c 64  |%) = .icon(field|
00004a70  73 5f 77 69 6e 64 6f 77  25 2c 36 30 30 2c 2d 32  |s_window%,600,-2|
00004a80  35 30 2d 72 6f 77 25 2a  36 30 2c 38 30 2c 34 38  |50-row%*60,80,48|
00004a90  2c 26 37 30 30 46 35 33  35 2c 22 22 2c 66 69 65  |,&700F535,"",fie|
00004aa0  6c 64 5f 64 65 73 25 2b  33 32 2b 31 30 30 2a 72  |ld_des%+32+100*r|
00004ab0  6f 77 25 2c 76 61 6c 69  64 5f 69 6e 74 65 67 65  |ow%,valid_intege|
00004ac0  72 25 2c 32 29 0d 1a 68  67 6d 69 6e 25 28 72 6f  |r%,2)..hgmin%(ro|
00004ad0  77 25 29 20 3d 20 a4 69  63 6f 6e 28 66 69 65 6c  |w%) = .icon(fiel|
00004ae0  64 73 5f 77 69 6e 64 6f  77 25 2c 37 33 30 2c 2d  |ds_window%,730,-|
00004af0  32 35 30 2d 72 6f 77 25  2a 36 30 2c 31 33 30 2c  |250-row%*60,130,|
00004b00  34 38 2c 26 37 30 30 46  35 33 35 2c 22 22 2c 66  |48,&700F535,"",f|
00004b10  69 65 6c 64 5f 64 65 73  25 2b 33 35 2b 31 30 30  |ield_des%+35+100|
00004b20  2a 72 6f 77 25 2c 2d 31  2c 31 32 29 0d 1a 72 67  |*row%,-1,12)..rg|
00004b30  6d 61 78 25 28 72 6f 77  25 29 20 3d 20 a4 69 63  |max%(row%) = .ic|
00004b40  6f 6e 28 66 69 65 6c 64  73 5f 77 69 6e 64 6f 77  |on(fields_window|
00004b50  25 2c 38 37 30 2c 2d 32  35 30 2d 72 6f 77 25 2a  |%,870,-250-row%*|
00004b60  36 30 2c 31 33 30 2c 34  38 2c 26 37 30 30 46 35  |60,130,48,&700F5|
00004b70  33 35 2c 22 22 2c 66 69  65 6c 64 5f 64 65 73 25  |35,"",field_des%|
00004b80  2b 34 37 2b 31 30 30 2a  72 6f 77 25 2c 2d 31 2c  |+47+100*row%,-1,|
00004b90  31 32 29 0d 1a 7c 68 6c  69 73 74 25 28 72 6f 77  |12)..|hlist%(row|
00004ba0  25 29 20 3d a4 69 63 6f  6e 28 66 69 65 6c 64 73  |%) =.icon(fields|
00004bb0  5f 77 69 6e 64 6f 77 25  2c 31 30 31 30 2c 2d 32  |_window%,1010,-2|
00004bc0  35 30 2d 72 6f 77 25 2a  36 30 2c 32 35 30 2c 34  |50-row%*60,250,4|
00004bd0  38 2c 26 37 30 30 46 35  33 35 2c 22 22 2c 66 69  |8,&700F535,"",fi|
00004be0  65 6c 64 5f 64 65 73 25  2b 36 30 2b 31 30 30 2a  |eld_des%+60+100*|
00004bf0  72 6f 77 25 2c 2d 31 2c  33 38 29 0d 1a 86 05 ed  |row%,-1,38).....|
00004c00  0d 1a 90 05 20 0d 1a 9a  0d 79 25 20 3d 20 2d 31  |.... ....y% = -1|
00004c10  32 30 0d 1a a4 10 e3 20  61 25 20 3d 20 30 20 b8  |20..... a% = 0 .|
00004c20  20 35 0d 1a ae 68 20 20  6f 75 74 70 75 74 5f 69  | 5...h  output_i|
00004c30  63 6f 6e 25 28 61 25 29  20 3d 20 20 a4 69 63 6f  |con%(a%) =  .ico|
00004c40  6e 28 6f 75 74 70 75 74  5f 77 69 6e 64 6f 77 25  |n(output_window%|
00004c50  2c 32 30 30 2c 79 25 2d  36 30 2a 61 25 2c 37 30  |,200,y%-60*a%,70|
00004c60  30 2c 34 38 2c 26 37 30  30 46 35 33 35 2c 22 22  |0,48,&700F535,""|
00004c70  2c 6f 75 74 70 75 74 5f  6c 69 73 74 25 2b 37 30  |,output_list%+70|
00004c80  2a 61 25 2c 2d 31 2c 36  30 29 0d 1a b8 05 ed 0d  |*a%,-1,60)......|
00004c90  1a c2 5a 6f 75 74 70 75  74 5f 69 63 6f 6e 25 28  |..Zoutput_icon%(|
00004ca0  36 29 20 3d a4 69 63 6f  6e 28 6f 75 74 70 75 74  |6) =.icon(output|
00004cb0  5f 77 69 6e 64 6f 77 25  2c 32 38 30 2c 2d 34 38  |_window%,280,-48|
00004cc0  30 2c 36 32 30 2c 34 38  2c 26 37 30 30 46 35 33  |0,620,48,&700F53|
00004cd0  35 2c 22 22 2c 73 65 61  72 63 68 5f 6c 69 73 74  |5,"",search_list|
00004ce0  25 2c 2d 31 2c 32 30 30  29 0d 1a cc 05 20 0d 1a  |%,-1,200).... ..|
00004cf0  d6 04 0d 1a e0 04 0d 1a  ea 0d 79 25 20 3d 20 2d  |..........y% = -|
00004d00  32 36 30 0d 1a f4 15 e3  20 61 25 20 3d 20 30 20  |260..... a% = 0 |
00004d10  b8 20 31 30 20 88 20 32  0d 1a fe 60 20 20 73 6f  |. 10 . 2...`  so|
00004d20  72 74 5f 69 63 6f 6e 25  28 61 25 29 20 3d a4 69  |rt_icon%(a%) =.i|
00004d30  63 6f 6e 28 73 6f 72 74  5f 77 69 6e 64 6f 77 25  |con(sort_window%|
00004d40  2c 32 30 2c 79 25 2d 33  30 2a 61 25 2c 33 30 30  |,20,y%-30*a%,300|
00004d50  2c 34 38 2c 26 37 30 30  46 35 33 35 2c 22 22 2c  |,48,&700F535,"",|
00004d60  73 6f 72 74 5f 66 69 65  6c 64 25 2b 32 35 2a 61  |sort_field%+25*a|
00004d70  25 2c 2d 31 2c 32 30 29  0d 1b 08 6c 20 73 6f 72  |%,-1,20)...l sor|
00004d80  74 5f 69 63 6f 6e 25 28  61 25 2b 31 29 20 3d a4  |t_icon%(a%+1) =.|
00004d90  69 63 6f 6e 28 73 6f 72  74 5f 77 69 6e 64 6f 77  |icon(sort_window|
00004da0  25 2c 34 35 30 2c 79 25  2d 33 30 2a 61 25 2c 35  |%,450,y%-30*a%,5|
00004db0  30 2c 34 38 2c 26 37 30  30 46 35 33 35 2c 22 22  |0,48,&700F535,""|
00004dc0  2c 73 6f 72 74 5f 66 69  65 6c 64 25 2b 32 32 2b  |,sort_field%+22+|
00004dd0  32 35 2a 61 25 2c 76 61  6c 69 64 5f 73 6f 72 74  |25*a%,valid_sort|
00004de0  25 2c 32 29 0d 1b 12 05  ed 0d 1b 1c 04 0d 1b 26  |%,2)...........&|
00004df0  04 0d 1b 30 04 0d 1b 3a  27 f4 20 74 68 69 73 20  |...0...:'. this |
00004e00  69 73 20 74 68 65 20 6f  75 74 70 75 74 20 64 69  |is the output di|
00004e10  73 70 6c 61 79 20 64 69  6e 64 6f 77 0d 1b 44 04  |splay dindow..D.|
00004e20  0d 1b 4e 0d 79 25 20 3d  20 2d 31 32 30 0d 1b 58  |..N.y% = -120..X|
00004e30  10 e3 20 61 25 20 3d 20  30 20 b8 20 35 0d 1b 62  |.. a% = 0 . 5..b|
00004e40  5f 20 64 25 20 3d 20 20  a4 69 63 6f 6e 28 73 63  |_ d% =  .icon(sc|
00004e50  72 65 65 6e 5f 77 69 6e  64 6f 77 25 2c 32 30 30  |reen_window%,200|
00004e60  2c 79 25 2d 36 30 2a 61  25 2c 31 32 30 30 2c 34  |,y%-60*a%,1200,4|
00004e70  38 2c 26 37 30 30 30 35  31 31 2c 22 22 2c 6f 75  |8,&7000511,"",ou|
00004e80  74 70 75 74 5f 64 69 73  70 6c 61 79 25 2b 33 30  |tput_display%+30|
00004e90  30 2a 61 25 2c 2d 31 2c  32 35 30 29 0d 1b 6c 05  |0*a%,-1,250)..l.|
00004ea0  ed 0d 1b 76 4a 64 25 20  3d a4 69 63 6f 6e 28 73  |...vJd% =.icon(s|
00004eb0  63 72 65 65 6e 5f 77 69  6e 64 6f 77 25 2c 36 32  |creen_window%,62|
00004ec0  30 2c 2d 36 32 2c 31 35  30 2c 34 38 2c 26 37 30  |0,-62,150,48,&70|
00004ed0  30 30 31 33 35 2c 22 22  2c 6f 75 74 70 75 74 5f  |00135,"",output_|
00004ee0  72 65 63 25 2c 2d 31 2c  31 32 29 0d 1b 80 47 64  |rec%,-1,12)...Gd|
00004ef0  25 20 3d a4 69 63 6f 6e  28 73 63 72 65 65 6e 5f  |% =.icon(screen_|
00004f00  77 69 6e 64 6f 77 25 2c  39 30 30 2c 2d 36 32 2c  |window%,900,-62,|
00004f10  31 35 30 2c 34 38 2c 26  37 30 30 30 31 33 35 2c  |150,48,&7000135,|
00004f20  22 22 2c 6d 61 74 63 68  65 73 25 2c 2d 31 2c 31  |"",matches%,-1,1|
00004f30  32 29 0d 1b 8a 05 20 0d  1b 94 04 0d 1b 9e 40 f4  |2).... .......@.|
00004f40  20 64 25 20 3d 20 46 4e  69 63 6f 6e 28 66 75 6e  | d% = FNicon(fun|
00004f50  63 74 69 6f 6e 25 2c 31  36 2c 2d 35 30 2c 32 35  |ction%,16,-50,25|
00004f60  30 2c 34 38 2c 26 37 30  30 30 35 31 31 2c 22 22  |0,48,&7000511,""|
00004f70  2c 74 31 25 2c 2d 31 2c  32 30 29 0d 1b a8 05 e1  |,t1%,-1,20).....|
00004f80  0d 1b b2 04 0d 1b bc 04  0d 1b c6 04 0d 1b d0 04  |................|
00004f90  0d 1b da 0d dd 20 f2 63  72 65 61 74 65 0d 1b e4  |..... .create...|
00004fa0  11 f2 63 6f 75 6e 74 5f  66 69 65 6c 64 73 0d 1b  |..count_fields..|
00004fb0  ee 1d e7 20 6e 75 6d 62  65 72 5f 6f 66 5f 66 69  |... number_of_fi|
00004fc0  65 6c 64 73 25 20 3d 20  30 20 8c 0d 1b f8 13 20  |elds% = 0 ..... |
00004fd0  20 f2 65 6d 70 74 79 5f  66 69 65 6c 64 73 0d 1c  | .empty_fields..|
00004fe0  02 05 cc 0d 1c 0c 24 20  20 20 f2 6f 70 65 6e 5f  |......$   .open_|
00004ff0  77 69 6e 64 6f 77 28 6e  65 77 66 69 6c 65 5f 77  |window(newfile_w|
00005000  69 6e 64 6f 77 25 29 0d  1c 16 23 20 20 20 f2 6f  |indow%)...#   .o|
00005010  70 65 6e 5f 77 69 6e 64  6f 77 28 66 69 65 6c 64  |pen_window(field|
00005020  73 5f 77 69 6e 64 6f 77  25 29 0d 1c 20 b4 20 20  |s_window%).. .  |
00005030  20 e7 20 a4 63 61 6e 63  65 6c 5f 6d 65 73 73 61  | . .cancel_messa|
00005040  67 65 28 22 46 69 65 6c  64 20 64 65 73 63 72 69  |ge("Field descri|
00005050  70 74 69 6f 6e 20 69 73  20 6e 6f 74 20 65 6d 70  |ption is not emp|
00005060  74 79 2e 20 43 6c 69 63  6b 20 43 41 4e 43 45 4c  |ty. Click CANCEL|
00005070  20 61 6e 64 20 64 72 61  67 20 74 68 65 20 66 69  | and drag the fi|
00005080  6c 65 20 69 63 6f 6e 20  74 6f 20 61 20 64 69 72  |le icon to a dir|
00005090  65 63 74 6f 72 79 20 76  69 65 77 65 72 20 74 6f  |ectory viewer to|
000050a0  20 73 61 76 65 20 69 74  2e 20 54 6f 20 63 6c 65  | save it. To cle|
000050b0  61 72 20 74 68 65 20 63  75 72 72 65 6e 74 20 66  |ar the current f|
000050c0  69 65 6c 64 20 77 69 6e  64 6f 77 20 63 6c 69 63  |ield window clic|
000050d0  6b 20 6f 6e 20 4f 4b 22  29 20 3d 31 20 8c 0d 1c  |k on OK") =1 ...|
000050e0  2a 16 20 20 20 20 20 f2  65 6d 70 74 79 5f 66 69  |*.     .empty_fi|
000050f0  65 6c 64 73 0d 1c 34 08  20 20 20 cd 0d 1c 3e 05  |elds..4.   ...>.|
00005100  cd 0d 1c 48 05 e1 0d 1c  52 04 0d 1c 5c 13 dd 20  |...H....R...\.. |
00005110  f2 65 6d 70 74 79 5f 66  69 65 6c 64 73 0d 1c 66  |.empty_fields..f|
00005120  30 20 20 20 e3 20 61 25  20 3d 20 66 69 65 6c 64  |0   . a% = field|
00005130  5f 64 65 73 25 20 b8 20  66 69 65 6c 64 5f 64 65  |_des% . field_de|
00005140  73 25 20 2b 20 32 31 39  36 20 88 20 34 0d 1c 70  |s% + 2196 . 4..p|
00005150  35 20 20 20 20 20 21 61  25 20 3d 20 26 44 30 44  |5     !a% = &D0D|
00005160  30 44 30 44 20 20 20 20  3a 20 f4 20 53 45 54 20  |0D0D    : . SET |
00005170  54 48 45 20 41 59 59 41  59 20 54 4f 20 45 4d 50  |THE AYYAY TO EMP|
00005180  54 59 0d 1c 7a 08 20 20  20 ed 0d 1c 84 1e 20 20  |TY..z.   .....  |
00005190  20 24 66 69 6c 65 6e 61  6d 65 25 20 3d 20 22 44  | $filename% = "D|
000051a0  61 74 61 46 69 6c 65 22  0d 1c 8e 1e 20 20 20 24  |ataFile"....   $|
000051b0  70 61 74 68 6e 61 6d 65  25 20 3d 20 22 44 61 74  |pathname% = "Dat|
000051c0  61 46 69 6c 65 22 0d 1c  98 16 20 20 20 24 70 61  |aFile"....   $pa|
000051d0  73 73 77 6f 72 64 25 20  3d 20 22 22 0d 1c a2 19  |ssword% = ""....|
000051e0  20 20 20 24 72 65 63 5f  6e 75 6d 62 65 72 25 20  |   $rec_number% |
000051f0  3d 20 22 30 22 0d 1c ac  19 20 20 20 24 73 65 61  |= "0"....   $sea|
00005200  72 63 68 5f 6c 69 73 74  25 20 3d 20 22 22 0d 1c  |rch_list% = ""..|
00005210  b6 25 20 20 20 f2 63 6c  6f 73 65 61 77 69 6e 64  |.%   .closeawind|
00005220  6f 77 28 6e 65 77 66 69  6c 65 5f 77 69 6e 64 6f  |ow(newfile_windo|
00005230  77 25 29 0d 1c c0 24 20  20 20 f2 63 6c 6f 73 65  |w%)...$   .close|
00005240  61 77 69 6e 64 6f 77 28  66 69 65 6c 64 73 5f 77  |awindow(fields_w|
00005250  69 6e 64 6f 77 25 29 0d  1c ca 24 20 20 20 f2 6f  |indow%)...$   .o|
00005260  70 65 6e 5f 77 69 6e 64  6f 77 28 6e 65 77 66 69  |pen_window(newfi|
00005270  6c 65 5f 77 69 6e 64 6f  77 25 29 0d 1c d4 23 20  |le_window%)...# |
00005280  20 20 f2 6f 70 65 6e 5f  77 69 6e 64 6f 77 28 66  |  .open_window(f|
00005290  69 65 6c 64 73 5f 77 69  6e 64 6f 77 25 29 0d 1c  |ields_window%)..|
000052a0  de 28 20 20 20 f2 73 65  74 5f 63 61 72 65 74 28  |.(   .set_caret(|
000052b0  6e 65 77 66 69 6c 65 5f  77 69 6e 64 6f 77 25 2c  |newfile_window%,|
000052c0  6e 66 5f 31 25 29 0d 1c  e8 05 e1 0d 1c f2 04 0d  |nf_1%)..........|
000052d0  1c fc 20 dd 20 f2 65 78  74 72 61 63 74 5f 66 69  |.. . .extract_fi|
000052e0  65 6c 64 5f 64 65 73 63  72 69 70 74 69 6f 6e 0d  |eld_description.|
000052f0  1d 06 0f ea 20 72 65 63  25 2c 70 6f 73 25 0d 1d  |.... rec%,pos%..|
00005300  10 1b e3 20 72 65 63 25  20 3d 20 30 20 b8 20 6d  |... rec% = 0 . m|
00005310  61 78 5f 66 69 65 6c 64  73 0d 1d 1a 20 20 20 70  |ax_fields...   p|
00005320  6f 73 25 20 3d 20 66 69  65 6c 64 5f 64 65 73 25  |os% = field_des%|
00005330  2b 72 65 63 25 2a 31 30  30 0d 1d 24 18 20 20 66  |+rec%*100..$.  f|
00005340  24 28 72 65 63 25 2c 30  29 20 3d 20 24 70 6f 73  |$(rec%,0) = $pos|
00005350  25 0d 1d 2e 23 20 20 70  6f 73 25 20 3d 20 66 69  |%...#  pos% = fi|
00005360  65 6c 64 5f 64 65 73 25  2b 72 65 63 25 2a 31 30  |eld_des%+rec%*10|
00005370  30 2b 32 32 0d 1d 38 18  20 20 66 24 28 72 65 63  |0+22..8.  f$(rec|
00005380  25 2c 31 29 20 3d 20 24  70 6f 73 25 0d 1d 42 23  |%,1) = $pos%..B#|
00005390  20 20 70 6f 73 25 20 3d  20 66 69 65 6c 64 5f 64  |  pos% = field_d|
000053a0  65 73 25 2b 72 65 63 25  2a 31 30 30 2b 32 36 0d  |es%+rec%*100+26.|
000053b0  1d 4c 18 20 20 66 24 28  72 65 63 25 2c 32 29 20  |.L.  f$(rec%,2) |
000053c0  3d 20 24 70 6f 73 25 0d  1d 56 23 20 20 70 6f 73  |= $pos%..V#  pos|
000053d0  25 20 3d 20 66 69 65 6c  64 5f 64 65 73 25 2b 72  |% = field_des%+r|
000053e0  65 63 25 2a 31 30 30 2b  33 32 0d 1d 60 18 20 20  |ec%*100+32..`.  |
000053f0  66 24 28 72 65 63 25 2c  33 29 20 3d 20 24 70 6f  |f$(rec%,3) = $po|
00005400  73 25 0d 1d 6a 23 20 20  70 6f 73 25 20 3d 20 66  |s%..j#  pos% = f|
00005410  69 65 6c 64 5f 64 65 73  25 2b 72 65 63 25 2a 31  |ield_des%+rec%*1|
00005420  30 30 2b 33 35 0d 1d 74  18 20 20 66 24 28 72 65  |00+35..t.  f$(re|
00005430  63 25 2c 34 29 20 3d 20  24 70 6f 73 25 0d 1d 7e  |c%,4) = $pos%..~|
00005440  23 20 20 70 6f 73 25 20  3d 20 66 69 65 6c 64 5f  |#  pos% = field_|
00005450  64 65 73 25 2b 72 65 63  25 2a 31 30 30 2b 34 37  |des%+rec%*100+47|
00005460  0d 1d 88 18 20 20 66 24  28 72 65 63 25 2c 35 29  |....  f$(rec%,5)|
00005470  20 3d 20 24 70 6f 73 25  0d 1d 92 23 20 20 70 6f  | = $pos%...#  po|
00005480  73 25 20 3d 20 66 69 65  6c 64 5f 64 65 73 25 2b  |s% = field_des%+|
00005490  72 65 63 25 2a 31 30 30  2b 36 30 0d 1d 9c 18 20  |rec%*100+60.... |
000054a0  20 66 24 28 72 65 63 25  2c 36 29 20 3d 20 24 70  | f$(rec%,6) = $p|
000054b0  6f 73 25 0d 1d a6 1a 20  20 e7 20 a9 20 66 24 28  |os%....  . . f$(|
000054c0  72 65 63 25 2c 30 29 20  3e 20 30 20 8c 0d 1d b0  |rec%,0) > 0 ....|
000054d0  1f 20 20 20 20 20 20 66  69 65 6c 64 5f 75 73 65  |.      field_use|
000054e0  64 25 28 72 65 63 25 29  20 3d 20 b9 0d 1d ba 07  |d%(rec%) = .....|
000054f0  20 20 cc 0d 1d c4 1f 20  20 20 20 20 20 66 69 65  |  .....      fie|
00005500  6c 64 5f 75 73 65 64 25  28 72 65 63 25 29 20 3d  |ld_used%(rec%) =|
00005510  20 a3 0d 1d ce 07 20 20  cd 0d 1d d8 05 ed 0d 1d  | .....  ........|
00005520  e2 13 64 3d a4 46 69 65  6c 64 5f 64 65 73 5f 6f  |..d=.Field_des_o|
00005530  6b 0d 1d ec 05 e1 0d 1d  f6 05 20 0d 1e 00 04 0d  |k......... .....|
00005540  1e 0a 14 dd 20 a4 66 69  65 6c 64 5f 6e 61 6d 65  |.... .field_name|
00005550  5f 6f 6b 0d 1e 14 29 ea  20 72 65 63 25 2c 20 72  |_ok...). rec%, r|
00005560  65 63 31 25 2c 20 72 65  63 32 25 2c 20 6c 65 6e  |ec1%, rec2%, len|
00005570  67 74 68 25 2c 20 66 69  65 6c 64 25 0d 1e 1e 08  |gth%, field%....|
00005580  6f 6b 3d b9 0d 1e 28 1b  e3 20 72 65 63 25 20 3d  |ok=...(.. rec% =|
00005590  20 30 20 b8 20 6d 61 78  5f 66 69 65 6c 64 73 0d  | 0 . max_fields.|
000055a0  1e 32 12 20 20 20 6c 65  6e 67 74 68 25 20 3d 20  |.2.   length% = |
000055b0  30 0d 1e 3c 17 20 20 20  e3 20 66 69 65 6c 64 25  |0..<.   . field%|
000055c0  20 3d 20 30 20 b8 20 36  0d 1e 46 2f 20 20 20 20  | = 0 . 6..F/    |
000055d0  20 6c 65 6e 67 74 68 25  20 3d 20 6c 65 6e 67 74  | length% = lengt|
000055e0  68 25 20 2b 20 a9 28 66  24 28 72 65 63 25 2c 66  |h% + .(f$(rec%,f|
000055f0  69 65 6c 64 25 29 29 0d  1e 50 08 20 20 20 ed 0d  |ield%))..P.   ..|
00005600  1e 5a 28 20 20 20 e7 20  6c 65 6e 67 74 68 25 20  |.Z(   . length% |
00005610  3e 20 30 20 80 20 a9 28  66 24 28 72 65 63 25 2c  |> 0 . .(f$(rec%,|
00005620  30 29 29 3d 30 20 8c 0d  1e 64 10 20 20 20 20 20  |0))=0 ...d.     |
00005630  20 6f 6b 20 3d 20 a3 0d  1e 6e 4b 20 20 20 20 20  | ok = ...nK     |
00005640  20 f2 65 72 72 6f 72 5f  6d 65 73 73 61 67 65 28  | .error_message(|
00005650  22 46 69 65 6c 64 20 6e  75 6d 62 65 72 20 22 2b  |"Field number "+|
00005660  c3 28 72 65 63 25 2b 31  29 2b 22 20 64 6f 65 73  |.(rec%+1)+" does|
00005670  20 6e 6f 74 20 68 61 76  65 20 61 20 6e 61 6d 65  | not have a name|
00005680  22 29 0d 1e 78 08 20 20  20 cd 0d 1e 82 05 ed 0d  |")..x.   .......|
00005690  1e 8c 1e e3 20 72 65 63  31 25 20 3d 20 30 20 b8  |.... rec1% = 0 .|
000056a0  20 6d 61 78 5f 66 69 65  6c 64 73 2d 31 0d 1e 96  | max_fields-1...|
000056b0  25 20 20 20 e3 20 72 65  63 32 25 20 3d 20 72 65  |%   . rec2% = re|
000056c0  63 31 25 2b 31 20 b8 20  6d 61 78 5f 66 69 65 6c  |c1%+1 . max_fiel|
000056d0  64 73 0d 1e a0 3a 20 20  20 20 20 e7 20 66 24 28  |ds...:     . f$(|
000056e0  72 65 63 31 25 2c 30 29  20 3d 20 66 24 28 72 65  |rec1%,0) = f$(re|
000056f0  63 32 25 2c 30 29 20 80  20 a9 28 66 24 28 72 65  |c2%,0) . .(f$(re|
00005700  63 32 25 2c 30 29 29 20  3e 30 20 8c 0d 1e aa 11  |c2%,0)) >0 .....|
00005710  20 20 20 20 20 20 20 6f  6b 20 3d 20 a3 0d 1e b4  |       ok = ....|
00005720  4c 20 20 20 20 20 20 20  f2 65 72 72 6f 72 5f 6d  |L       .error_m|
00005730  65 73 73 61 67 65 28 22  54 68 65 72 65 20 61 72  |essage("There ar|
00005740  65 20 74 77 6f 20 66 69  65 6c 64 73 20 77 69 74  |e two fields wit|
00005750  68 20 74 68 65 20 6e 61  6d 65 20 22 2b 66 24 28  |h the name "+f$(|
00005760  72 65 63 32 25 2c 30 29  29 0d 1e be 0a 20 20 20  |rec2%,0))....   |
00005770  20 20 cd 0d 1e c8 08 20  20 20 ed 0d 1e d2 05 ed  |  .....   ......|
00005780  0d 1e dc 07 3d 6f 6b 0d  1e e6 05 20 0d 1e f0 04  |....=ok.... ....|
00005790  0d 1e fa 04 0d 1f 04 13  dd 20 a4 66 69 65 6c 64  |......... .field|
000057a0  5f 6c 65 6e 5f 6f 6b 0d  1f 0e 0a ea 20 72 65 63  |_len_ok..... rec|
000057b0  25 0d 1f 18 1b e3 20 72  65 63 25 20 3d 20 30 20  |%..... rec% = 0 |
000057c0  b8 20 6d 61 78 5f 66 69  65 6c 64 73 0d 1f 22 18  |. max_fields..".|
000057d0  20 e7 20 a9 28 66 24 28  72 65 63 25 2c 30 29 29  | . .(f$(rec%,0))|
000057e0  3e 30 20 8c 0d 1f 2c 1a  20 20 20 e7 20 bb 28 66  |>0 ...,.   . .(f|
000057f0  24 28 72 65 63 25 2c 32  29 29 3d 30 20 8c 0d 1f  |$(rec%,2))=0 ...|
00005800  36 56 20 20 20 20 20 20  f2 65 72 72 6f 72 5f 6d  |6V      .error_m|
00005810  65 73 73 61 67 65 28 22  46 69 65 6c 64 20 27 22  |essage("Field '"|
00005820  2b 66 24 28 72 65 63 25  2c 30 29 2b 22 27 20 6d  |+f$(rec%,0)+"' m|
00005830  75 73 74 20 68 61 76 65  20 61 20 77 69 64 74 68  |ust have a width|
00005840  20 67 72 65 61 74 65 72  20 74 68 61 6e 20 7a 65  | greater than ze|
00005850  72 6f 22 29 0d 1f 40 08  20 20 20 cd 0d 1f 4a 41  |ro")..@.   ...JA|
00005860  20 20 20 e7 20 28 66 24  28 72 65 63 25 2c 31 29  |   . (f$(rec%,1)|
00005870  3d 22 4e 22 20 84 20 66  24 28 72 65 63 25 2c 31  |="N" . f$(rec%,1|
00005880  29 3d 22 6e 22 29 20 80  20 bb 28 66 24 28 72 65  |)="n") . .(f$(re|
00005890  63 25 2c 32 29 29 20 3e  20 32 30 20 8c 0d 1f 54  |c%,2)) > 20 ...T|
000058a0  5d 20 20 20 20 20 20 f2  65 72 72 6f 72 5f 6d 65  |]      .error_me|
000058b0  73 73 61 67 65 28 22 46  69 65 6c 64 20 27 22 2b  |ssage("Field '"+|
000058c0  66 24 28 72 65 63 25 2c  30 29 2b 22 27 20 69 73  |f$(rec%,0)+"' is|
000058d0  20 6e 75 6d 65 72 69 63  20 73 6f 20 69 74 73 20  | numeric so its |
000058e0  77 69 64 74 68 20 6d 75  73 74 20 6e 6f 74 20 65  |width must not e|
000058f0  78 63 65 65 64 20 32 30  22 29 0d 1f 5e 08 20 20  |xceed 20")..^.  |
00005900  20 cd 0d 1f 68 07 20 20  cd 0d 1f 72 05 ed 0d 1f  | ...h.  ...r....|
00005910  7c 06 3d b9 0d 1f 86 04  0d 1f 90 04 0d 1f 9a 14  ||.=.............|
00005920  dd 20 a4 66 69 65 6c 64  5f 74 79 70 65 5f 6f 6b  |. .field_type_ok|
00005930  0d 1f a4 0f ea 20 72 65  63 25 2c 20 6f 6b 25 0d  |..... rec%, ok%.|
00005940  1f ae 0b 6f 6b 25 20 3d  20 b9 0d 1f b8 1b e3 20  |...ok% = ...... |
00005950  72 65 63 25 20 3d 20 30  20 b8 20 6d 61 78 5f 66  |rec% = 0 . max_f|
00005960  69 65 6c 64 73 0d 1f c2  2c 20 20 20 e7 20 a9 28  |ields...,   . .(|
00005970  66 24 28 72 65 63 25 2c  30 29 29 3e 30 20 80 20  |f$(rec%,0))>0 . |
00005980  a9 28 66 24 28 72 65 63  25 2c 31 29 29 3d 30 20  |.(f$(rec%,1))=0 |
00005990  8c 0d 1f cc 45 20 20 20  20 20 20 f2 65 72 72 6f  |....E      .erro|
000059a0  72 5f 6d 65 73 73 61 67  65 28 22 46 69 65 6c 64  |r_message("Field|
000059b0  20 22 2b 66 24 28 72 65  63 25 2c 30 29 2b 22 20  | "+f$(rec%,0)+" |
000059c0  64 6f 65 73 20 6e 6f 74  20 68 61 76 65 20 61 20  |does not have a |
000059d0  74 79 70 65 22 29 0d 1f  d6 11 20 20 20 20 20 20  |type")....      |
000059e0  6f 6b 25 20 3d 20 a3 0d  1f e0 08 20 20 20 cd 0d  |ok% = .....   ..|
000059f0  1f ea 05 ed 0d 1f f4 08  3d 6f 6b 25 0d 1f fe 04  |........=ok%....|
00005a00  0d 20 08 04 0d 20 12 13  dd 20 a4 66 69 65 6c 64  |. ... ... .field|
00005a10  5f 6d 61 78 5f 6f 6b 0d  20 1c 0f ea 20 72 65 63  |_max_ok. ... rec|
00005a20  25 2c 20 6f 6b 25 0d 20  26 1b e3 20 72 65 63 25  |%, ok%. &.. rec%|
00005a30  20 3d 20 30 20 b8 20 6d  61 78 5f 66 69 65 6c 64  | = 0 . max_field|
00005a40  73 0d 20 30 3e 20 e7 20  a9 28 66 24 28 72 65 63  |s. 0> . .(f$(rec|
00005a50  25 2c 30 29 29 3e 30 20  80 20 28 66 24 28 72 65  |%,0))>0 . (f$(re|
00005a60  63 25 2c 31 29 20 3d 22  4e 22 20 84 20 66 24 28  |c%,1) ="N" . f$(|
00005a70  72 65 63 25 2c 31 29 20  3d 22 6e 22 29 20 8c 0d  |rec%,1) ="n") ..|
00005a80  20 3a 20 20 20 e7 20 ac  20 a4 6e 75 6d 65 72 69  | :   . . .numeri|
00005a90  63 28 66 24 28 72 65 63  25 2c 34 29 29 20 8c 0d  |c(f$(rec%,4)) ..|
00005aa0  20 44 4e 20 20 20 20 f2  65 72 72 6f 72 5f 6d 65  | DN    .error_me|
00005ab0  73 73 61 67 65 28 22 46  69 65 6c 64 20 22 2b 66  |ssage("Field "+f|
00005ac0  24 28 72 65 63 25 2c 30  29 2b 22 20 64 6f 65 73  |$(rec%,0)+" does|
00005ad0  20 6e 6f 74 20 68 61 76  65 20 61 20 6e 75 6d 65  | not have a nume|
00005ae0  72 69 63 20 6d 69 6e 69  6d 75 6d 22 29 0d 20 4e  |ric minimum"). N|
00005af0  07 20 20 cd 0d 20 58 06  20 cd 0d 20 62 05 ed 0d  |.  .. X. .. b...|
00005b00  20 6c 1b e3 20 72 65 63  25 20 3d 20 30 20 b8 20  | l.. rec% = 0 . |
00005b10  6d 61 78 5f 66 69 65 6c  64 73 0d 20 76 3e 20 e7  |max_fields. v> .|
00005b20  20 a9 28 66 24 28 72 65  63 25 2c 30 29 29 3e 30  | .(f$(rec%,0))>0|
00005b30  20 80 20 28 66 24 28 72  65 63 25 2c 31 29 20 3d  | . (f$(rec%,1) =|
00005b40  22 4e 22 20 84 20 66 24  28 72 65 63 25 2c 31 29  |"N" . f$(rec%,1)|
00005b50  20 3d 22 6e 22 29 20 8c  0d 20 80 20 20 20 e7 20  | ="n") .. .   . |
00005b60  ac 20 a4 6e 75 6d 65 72  69 63 28 66 24 28 72 65  |. .numeric(f$(re|
00005b70  63 25 2c 35 29 29 20 8c  0d 20 8a 4e 20 20 20 20  |c%,5)) .. .N    |
00005b80  f2 65 72 72 6f 72 5f 6d  65 73 73 61 67 65 28 22  |.error_message("|
00005b90  46 69 65 6c 64 20 22 2b  66 24 28 72 65 63 25 2c  |Field "+f$(rec%,|
00005ba0  30 29 2b 22 20 64 6f 65  73 20 6e 6f 74 20 68 61  |0)+" does not ha|
00005bb0  76 65 20 61 20 6e 75 6d  65 72 69 63 20 6d 61 78  |ve a numeric max|
00005bc0  69 6d 75 6d 22 29 0d 20  94 07 20 20 cd 0d 20 9e  |imum"). ..  .. .|
00005bd0  06 20 cd 0d 20 a8 05 ed  0d 20 b2 08 3d 6f 6b 25  |. .. .... ..=ok%|
00005be0  0d 20 bc 04 0d 20 c6 04  0d 20 d0 14 dd 20 a4 66  |. ... ... ... .f|
00005bf0  69 65 6c 64 5f 64 61 74  65 5f 6f 6b 0d 20 da 0f  |ield_date_ok. ..|
00005c00  ea 20 72 65 63 25 2c 20  6f 6b 25 0d 20 e4 1b e3  |. rec%, ok%. ...|
00005c10  20 72 65 63 25 20 3d 20  30 20 b8 20 6d 61 78 5f  | rec% = 0 . max_|
00005c20  66 69 65 6c 64 73 0d 20  ee 3f 20 e7 20 a9 28 66  |fields. .? . .(f|
00005c30  24 28 72 65 63 25 2c 30  29 29 3e 30 20 80 20 28  |$(rec%,0))>0 . (|
00005c40  66 24 28 72 65 63 25 2c  31 29 20 3d 22 44 22 20  |f$(rec%,1) ="D" |
00005c50  84 20 66 24 28 72 65 63  25 2c 31 29 20 3d 22 64  |. f$(rec%,1) ="d|
00005c60  22 29 20 20 8c 0d 20 f8  36 20 20 e7 20 ac 20 a4  |")  .. .6  . . .|
00005c70  76 61 6c 69 64 5f 64 61  74 65 28 66 24 28 72 65  |valid_date(f$(re|
00005c80  63 25 2c 34 29 29 20 80  20 a9 28 66 24 28 72 65  |c%,4)) . .(f$(re|
00005c90  63 25 2c 34 29 29 3e 30  20 20 8c 0d 21 02 5c 20  |c%,4))>0  ..!.\ |
00005ca0  20 20 20 f2 65 72 72 6f  72 5f 6d 65 73 73 61 67  |   .error_messag|
00005cb0  65 28 22 46 69 65 6c 64  20 22 2b 66 24 28 72 65  |e("Field "+f$(re|
00005cc0  63 25 2c 30 29 2b 22 20  64 6f 65 73 20 6e 6f 74  |c%,0)+" does not|
00005cd0  20 68 61 76 65 20 61 20  63 6f 72 72 65 63 74 6c  | have a correctl|
00005ce0  79 20 66 6f 72 6d 65 64  20 6d 69 6e 69 6d 75 6d  |y formed minimum|
00005cf0  20 64 61 74 65 22 29 0d  21 0c 07 20 20 cd 0d 21  | date").!..  ..!|
00005d00  16 06 20 cd 0d 21 20 05  ed 0d 21 2a 1b e3 20 72  |.. ..! ...!*.. r|
00005d10  65 63 25 20 3d 20 30 20  b8 20 6d 61 78 5f 66 69  |ec% = 0 . max_fi|
00005d20  65 6c 64 73 0d 21 34 3e  20 e7 20 a9 28 66 24 28  |elds.!4> . .(f$(|
00005d30  72 65 63 25 2c 30 29 29  3e 30 20 80 20 28 66 24  |rec%,0))>0 . (f$|
00005d40  28 72 65 63 25 2c 31 29  20 3d 22 64 22 20 84 20  |(rec%,1) ="d" . |
00005d50  66 24 28 72 65 63 25 2c  31 29 20 3d 22 44 22 29  |f$(rec%,1) ="D")|
00005d60  20 8c 0d 21 3e 35 20 20  e7 20 ac 20 a4 76 61 6c  | ..!>5  . . .val|
00005d70  69 64 5f 64 61 74 65 28  66 24 28 72 65 63 25 2c  |id_date(f$(rec%,|
00005d80  35 29 29 20 80 20 a9 28  66 24 28 72 65 63 25 2c  |5)) . .(f$(rec%,|
00005d90  35 29 29 3e 30 20 8c 0d  21 48 5c 20 20 20 20 f2  |5))>0 ..!H\    .|
00005da0  65 72 72 6f 72 5f 6d 65  73 73 61 67 65 28 22 46  |error_message("F|
00005db0  69 65 6c 64 20 22 2b 66  24 28 72 65 63 25 2c 30  |ield "+f$(rec%,0|
00005dc0  29 2b 22 20 64 6f 65 73  20 6e 6f 74 20 68 61 76  |)+" does not hav|
00005dd0  65 20 61 20 63 6f 72 72  65 63 74 6c 79 20 66 6f  |e a correctly fo|
00005de0  72 6d 65 64 20 6d 61 78  69 6d 75 6d 20 64 61 74  |rmed maximum dat|
00005df0  65 22 29 0d 21 52 07 20  20 cd 0d 21 5c 06 20 cd  |e").!R.  ..!\. .|
00005e00  0d 21 66 05 ed 0d 21 70  08 3d 6f 6b 25 0d 21 7a  |.!f...!p.=ok%.!z|
00005e10  04 0d 21 84 04 0d 21 8e  04 0d 21 98 04 0d 21 a2  |..!...!...!...!.|
00005e20  13 dd 20 a4 46 69 65 6c  64 5f 64 65 73 5f 6f 6b  |.. .Field_des_ok|
00005e30  0d 21 ac 5b e7 20 a4 66  69 65 6c 64 5f 6e 61 6d  |.!.[. .field_nam|
00005e40  65 5f 6f 6b 20 80 20 a4  66 69 65 6c 64 5f 6c 65  |e_ok . .field_le|
00005e50  6e 5f 6f 6b 20 80 20 a4  66 69 65 6c 64 5f 74 79  |n_ok . .field_ty|
00005e60  70 65 5f 6f 6b 20 80 20  a4 66 69 65 6c 64 5f 6d  |pe_ok . .field_m|
00005e70  61 78 5f 6f 6b 20 80 20  a4 66 69 65 6c 64 5f 64  |ax_ok . .field_d|
00005e80  61 74 65 5f 6f 6b 20 20  20 20 8c 0d 21 b6 09 20  |ate_ok    ..!.. |
00005e90  20 3d 20 b9 0d 21 c0 05  cc 0d 21 ca 08 20 20 3d  | = ..!....!..  =|
00005ea0  a3 0d 21 d4 05 cd 0d 21  de 05 20 0d 21 e8 04 0d  |..!....!.. .!...|
00005eb0  21 f2 15 dd 20 a4 6e 75  6d 65 72 69 63 28 74 65  |!... .numeric(te|
00005ec0  78 74 24 29 0d 21 fc 0d  ea 20 69 25 2c 20 6f 6b  |xt$).!... i%, ok|
00005ed0  25 0d 22 06 09 6f 6b 25  3d b9 0d 22 10 14 e7 20  |%."..ok%=.."... |
00005ee0  a9 28 74 65 78 74 24 29  20 3e 20 30 20 8c 0d 22  |.(text$) > 0 .."|
00005ef0  1a 19 20 20 e3 20 69 25  20 3d 20 31 20 b8 20 a9  |..  . i% = 1 . .|
00005f00  28 74 65 78 74 24 29 0d  22 24 19 20 20 20 20 63  |(text$)."$.    c|
00005f10  24 20 3d 20 c1 74 65 78  74 24 2c 69 25 2c 31 29  |$ = .text$,i%,1)|
00005f20  0d 22 2e 2d 20 20 20 20  e7 20 63 24 20 3c 22 2e  |.".-    . c$ <".|
00005f30  22 20 84 20 63 24 3e 22  39 22 20 84 20 63 24 3d  |" . c$>"9" . c$=|
00005f40  22 2f 22 20 8c 20 6f 6b  25 20 3d 20 a3 0d 22 38  |"/" . ok% = .."8|
00005f50  07 20 20 ed 0d 22 42 05  cd 0d 22 4c 09 3d 20 6f  |.  .."B..."L.= o|
00005f60  6b 25 0d 22 56 04 0d 22  60 18 dd 20 a4 76 61 6c  |k%."V.."`.. .val|
00005f70  69 64 5f 64 61 74 65 28  64 61 74 65 24 29 0d 22  |id_date(date$)."|
00005f80  6a 1e ea 20 6f 6b 25 2c  20 64 61 79 25 2c 20 6d  |j.. ok%, day%, m|
00005f90  6f 6e 74 68 25 2c 20 79  65 61 72 25 0d 22 74 35  |onth%, year%."t5|
00005fa0  6f 6b 25 20 3d 20 b9 20  20 20 20 20 20 20 20 20  |ok% = .         |
00005fb0  20 20 20 20 20 20 3a 20  f4 20 61 6c 6c 6f 77 20  |      : . allow |
00005fc0  7a 65 72 6f 20 6e 75 6c  6c 20 65 6e 74 72 69 65  |zero null entrie|
00005fd0  73 0d 22 7e 13 e7 20 a9  28 64 61 74 65 24 29 20  |s."~.. .(date$) |
00005fe0  3e 30 20 8c 0d 22 88 14  e7 20 a9 28 64 61 74 65  |>0 .."... .(date|
00005ff0  24 29 20 3c 3e 38 20 8c  0d 22 92 0c 20 6f 6b 25  |$) <>8 ..".. ok%|
00006000  20 3d 20 a3 0d 22 9c 05  cc 0d 22 a6 19 20 20 64  | = .."...."..  d|
00006010  61 79 25 20 3d 20 bb 28  c0 64 61 74 65 24 2c 32  |ay% = .(.date$,2|
00006020  29 29 0d 22 b0 1d 20 20  6d 6f 6e 74 68 25 20 3d  |))."..  month% =|
00006030  20 bb 28 c1 64 61 74 65  24 2c 34 2c 32 29 29 0d  | .(.date$,4,2)).|
00006040  22 ba 1d 20 20 79 65 61  72 25 20 20 3d 20 bb 28  |"..  year%  = .(|
00006050  c1 64 61 74 65 24 2c 37  2c 32 29 29 0d 22 c4 17  |.date$,7,2))."..|
00006060  20 20 e7 20 79 65 61 72  25 20 83 20 34 20 3d 20  |  . year% . 4 = |
00006070  30 20 8c 0d 22 ce 1a 20  20 20 20 20 64 61 79 73  |0 .."..     days|
00006080  5f 69 6e 5f 66 65 62 25  20 3d 20 32 39 0d 22 d8  |_in_feb% = 29.".|
00006090  07 20 20 cc 0d 22 e2 1a  20 20 20 20 20 64 61 79  |.  .."..     day|
000060a0  73 5f 69 6e 5f 66 65 62  25 20 3d 20 32 38 0d 22  |s_in_feb% = 28."|
000060b0  ec 07 20 20 cd 0d 22 f6  2a 20 20 e7 20 28 64 61  |..  ..".*  . (da|
000060c0  79 25 20 3e 20 33 31 29  20 84 20 28 64 61 79 25  |y% > 31) . (day%|
000060d0  20 3c 20 31 29 20 8c 20  6f 6b 25 20 3d 20 a3 0d  | < 1) . ok% = ..|
000060e0  23 00 2d 20 20 e7 20 28  6d 6f 6e 74 68 25 20 3e  |#.-  . (month% >|
000060f0  31 32 29 20 84 20 28 6d  6f 6e 74 68 25 20 3c 20  |12) . (month% < |
00006100  31 29 20 8c 20 6f 6b 25  20 3d 20 a3 0d 23 0a 11  |1) . ok% = ..#..|
00006110  20 20 c8 8e 20 6d 6f 6e  74 68 25 20 ca 0d 23 14  |  .. month% ..#.|
00006120  2a 20 20 20 20 c9 20 34  2c 36 2c 39 2c 31 31 20  |*    . 4,6,9,11 |
00006130  3a 20 e7 20 64 61 79 25  20 3e 20 33 30 20 8c 20  |: . day% > 30 . |
00006140  6f 6b 25 20 3d 20 a3 0d  23 1e 34 20 20 20 20 c9  |ok% = ..#.4    .|
00006150  20 32 20 20 20 20 20 20  20 20 3a 20 e7 20 64 61  | 2        : . da|
00006160  79 25 20 3e 20 64 61 79  73 5f 69 6e 5f 66 65 62  |y% > days_in_feb|
00006170  25 20 8c 20 6f 6b 25 20  3d 20 a3 0d 23 28 07 20  |% . ok% = ..#(. |
00006180  20 cb 0d 23 32 05 cd 0d  23 3c 05 cd 0d 23 46 08  | ..#2...#<...#F.|
00006190  3d 6f 6b 25 0d 23 50 04  0d 23 5a 04 0d 23 64 11  |=ok%.#P..#Z..#d.|
000061a0  dd 20 f2 73 74 61 72 74  5f 64 72 61 67 0d 23 6e  |. .start_drag.#n|
000061b0  11 20 20 ea 20 77 65 78  25 2c 77 65 79 25 0d 23  |.  . wex%,wey%.#|
000061c0  78 1f 20 20 21 62 6c 6f  63 6b 25 20 3d 20 6e 65  |x.  !block% = ne|
000061d0  77 66 69 6c 65 5f 77 69  6e 64 6f 77 25 0d 23 82  |wfile_window%.#.|
000061e0  25 20 20 c8 99 22 57 69  6d 70 5f 47 65 74 57 69  |%  .."Wimp_GetWi|
000061f0  6e 64 6f 77 53 74 61 74  65 22 2c 2c 62 6c 6f 63  |ndowState",,bloc|
00006200  6b 25 0d 23 8c 21 20 20  77 65 78 25 20 3d 20 62  |k%.#.!  wex% = b|
00006210  6c 6f 63 6b 25 21 34 20  2d 20 62 6c 6f 63 6b 25  |lock%!4 - block%|
00006220  21 32 30 0d 23 96 22 20  20 77 65 79 25 20 3d 20  |!20.#."  wey% = |
00006230  62 6c 6f 63 6b 25 21 31  36 20 2d 20 62 6c 6f 63  |block%!16 - bloc|
00006240  6b 25 21 32 34 0d 23 a0  30 20 20 62 6c 6f 63 6b  |k%!24.#.0  block|
00006250  25 21 34 20 3d 20 32 20  3a 20 f4 20 69 63 6f 6e  |%!4 = 2 : . icon|
00006260  20 68 61 6e 64 6c 65 20  66 6f 72 20 64 72 61 67  | handle for drag|
00006270  20 69 63 6f 6e 0d 23 aa  23 20 20 c8 99 22 57 69  | icon.#.#  .."Wi|
00006280  6d 70 5f 47 65 74 49 63  6f 6e 53 74 61 74 65 22  |mp_GetIconState"|
00006290  2c 2c 62 6c 6f 63 6b 25  0d 23 b4 1f 20 20 21 62  |,,block%.#..  !b|
000062a0  6c 6f 63 6b 25 20 3d 20  6e 65 77 66 69 6c 65 5f  |lock% = newfile_|
000062b0  77 69 6e 64 6f 77 25 0d  23 be 12 20 20 62 6c 6f  |window%.#..  blo|
000062c0  63 6b 25 21 34 20 3d 20  35 0d 23 c8 1f 20 20 62  |ck%!4 = 5.#..  b|
000062d0  6c 6f 63 6b 25 21 38 20  3d 20 62 6c 6f 63 6b 25  |lock%!8 = block%|
000062e0  21 38 20 2b 77 65 78 25  0d 23 d2 21 20 20 62 6c  |!8 +wex%.#.!  bl|
000062f0  6f 63 6b 25 21 31 32 20  3d 20 62 6c 6f 63 6b 25  |ock%!12 = block%|
00006300  21 31 32 20 2b 77 65 79  25 0d 23 dc 21 20 20 62  |!12 +wey%.#.!  b|
00006310  6c 6f 63 6b 25 21 31 36  20 3d 20 62 6c 6f 63 6b  |lock%!16 = block|
00006320  25 21 31 36 20 2b 77 65  78 25 0d 23 e6 21 20 20  |%!16 +wex%.#.!  |
00006330  62 6c 6f 63 6b 25 21 32  30 20 3d 20 62 6c 6f 63  |block%!20 = bloc|
00006340  6b 25 21 32 30 20 2b 77  65 79 25 0d 23 f0 13 20  |k%!20 +wey%.#.. |
00006350  20 62 6c 6f 63 6b 25 21  32 34 20 3d 20 30 0d 23  | block%!24 = 0.#|
00006360  fa 13 20 20 62 6c 6f 63  6b 25 21 32 38 20 3d 20  |..  block%!28 = |
00006370  30 0d 24 04 1b 20 20 62  6c 6f 63 6b 25 21 33 32  |0.$..  block%!32|
00006380  20 3d 20 26 37 46 46 46  46 46 46 46 0d 24 0e 1b  | = &7FFFFFFF.$..|
00006390  20 20 62 6c 6f 63 6b 25  21 33 36 20 3d 20 26 37  |  block%!36 = &7|
000063a0  46 46 46 46 46 46 46 0d  24 18 1e 20 20 c8 99 22  |FFFFFFF.$..  .."|
000063b0  57 69 6d 70 5f 44 72 61  67 42 6f 78 22 2c 2c 62  |Wimp_DragBox",,b|
000063c0  6c 6f 63 6b 25 0d 24 22  05 e1 0d 24 2c 04 0d 24  |lock%.$"...$,..$|
000063d0  36 13 dd 20 f2 63 6f 75  6e 74 5f 66 69 65 6c 64  |6.. .count_field|
000063e0  73 0d 24 40 1e f2 65 78  74 72 61 63 74 5f 66 69  |s.$@..extract_fi|
000063f0  65 6c 64 5f 64 65 73 63  72 69 70 74 69 6f 6e 0d  |eld_description.|
00006400  24 4a 19 6e 75 6d 62 65  72 5f 6f 66 5f 66 69 65  |$J.number_of_fie|
00006410  6c 64 73 25 20 3d 20 30  0d 24 54 1b e3 20 72 65  |lds% = 0.$T.. re|
00006420  63 25 20 3d 20 30 20 b8  20 6d 61 78 5f 66 69 65  |c% = 0 . max_fie|
00006430  6c 64 73 0d 24 5e 1b 20  20 e7 20 a9 28 66 24 28  |lds.$^.  . .(f$(|
00006440  72 65 63 25 2c 30 29 29  20 3e 20 30 20 8c 0d 24  |rec%,0)) > 0 ..$|
00006450  68 1e 20 20 20 20 20 6e  75 6d 62 65 72 5f 6f 66  |h.     number_of|
00006460  5f 66 69 65 6c 64 73 25  20 2b 3d 31 0d 24 72 07  |_fields% +=1.$r.|
00006470  20 20 cd 0d 24 7c 05 ed  0d 24 86 05 e1 0d 24 90  |  ..$|...$....$.|
00006480  04 0d 24 9a 04 0d 24 a4  0f dd 20 f2 6e 65 77 5f  |..$...$... .new_|
00006490  73 61 76 65 0d 24 ae 11  f2 63 6f 75 6e 74 5f 66  |save.$...count_f|
000064a0  69 65 6c 64 73 0d 24 b8  1d e7 20 6e 75 6d 62 65  |ields.$... numbe|
000064b0  72 5f 6f 66 5f 66 69 65  6c 64 73 25 20 3d 20 30  |r_of_fields% = 0|
000064c0  20 8c 0d 24 c2 41 20 20  20 f2 65 72 72 6f 72 5f  | ..$.A   .error_|
000064d0  6d 65 73 73 61 67 65 28  22 54 68 65 72 65 20 6d  |message("There m|
000064e0  75 73 74 20 62 65 20 61  74 20 6c 65 61 73 74 20  |ust be at least |
000064f0  6f 6e 65 20 66 69 65 6c  64 20 64 65 66 69 6e 65  |one field define|
00006500  64 22 29 0d 24 cc 05 cc  0d 24 d6 23 c8 99 22 57  |d").$....$.#.."W|
00006510  69 6d 70 5f 47 65 74 50  6f 69 6e 74 65 72 49 6e  |imp_GetPointerIn|
00006520  66 6f 22 2c 2c 62 6c 6f  63 6b 25 0d 24 e0 12 62  |fo",,block%.$..b|
00006530  6c 6f 63 6b 25 21 32 30  20 3d 20 36 34 0d 24 ea  |lock%!20 = 64.$.|
00006540  11 62 6c 6f 63 6b 25 21  33 32 20 3d 20 30 0d 24  |.block%!32 = 0.$|
00006550  f4 11 62 6c 6f 63 6b 25  21 33 36 20 3d 20 31 0d  |..block%!36 = 1.|
00006560  24 fe 19 62 6c 6f 63 6b  25 21 34 30 20 3d 20 62  |$..block%!40 = b|
00006570  6c 6f 63 6b 25 21 31 32  0d 25 08 19 62 6c 6f 63  |lock%!12.%..bloc|
00006580  6b 25 21 34 34 20 3d 20  62 6c 6f 63 6b 25 21 31  |k%!44 = block%!1|
00006590  36 0d 25 12 17 62 6c 6f  63 6b 25 21 34 38 20 3d  |6.%..block%!48 =|
000065a0  20 21 62 6c 6f 63 6b 25  0d 25 1c 18 62 6c 6f 63  | !block%.%..bloc|
000065b0  6b 25 21 35 32 20 3d 20  62 6c 6f 63 6b 25 21 34  |k%!52 = block%!4|
000065c0  0d 25 26 2a 62 6c 6f 63  6b 25 21 35 36 20 3d 20  |.%&*block%!56 = |
000065d0  31 30 30 30 30 20 3a 20  f4 20 73 69 7a 65 20 6f  |10000 : . size o|
000065e0  66 20 74 68 65 20 66 69  6c 65 0d 25 30 2f 62 6c  |f the file.%0/bl|
000065f0  6f 63 6b 25 21 36 30 20  3d 20 26 37 37 38 20 20  |ock%!60 = &778  |
00006600  3a 20 f4 20 66 69 6c 65  20 74 79 70 65 20 6f 66  |: . file type of|
00006610  20 74 68 65 20 66 69 6c  65 0d 25 3a 1d 24 28 62  | the file.%:.$(b|
00006620  6c 6f 63 6b 25 2b 36 34  29 20 3d 20 24 66 69 6c  |lock%+64) = $fil|
00006630  65 6e 61 6d 65 25 0d 25  44 22 3f 28 62 6c 6f 63  |ename%.%D"?(bloc|
00006640  6b 25 2b 36 35 2b a9 28  24 66 69 6c 65 6e 61 6d  |k%+65+.($filenam|
00006650  65 25 29 29 20 3d 20 30  0d 25 4e 39 c8 99 22 57  |e%)) = 0.%N9.."W|
00006660  69 6d 70 5f 53 65 6e 64  4d 65 73 73 61 67 65 22  |imp_SendMessage"|
00006670  2c 31 37 2c 62 6c 6f 63  6b 25 2b 32 30 2c 62 6c  |,17,block%+20,bl|
00006680  6f 63 6b 25 21 31 32 2c  62 6c 6f 63 6b 25 21 31  |ock%!12,block%!1|
00006690  36 0d 25 58 05 cd 0d 25  62 05 e1 0d 25 6c 04 0d  |6.%X...%b...%l..|
000066a0  25 76 13 dd 20 a4 67 65  74 5f 6e 61 6d 65 28 50  |%v.. .get_name(P|
000066b0  25 29 0d 25 80 09 41 24  3d 22 22 0d 25 8a 18 c8  |%).%..A$="".%...|
000066c0  95 20 3f 50 25 3c 3e 30  20 80 20 3f 50 25 3c 3e  |. ?P%<>0 . ?P%<>|
000066d0  20 31 33 0d 25 94 17 20  41 24 20 3d 20 41 24 2b  | 13.%.. A$ = A$+|
000066e0  bd 3f 50 25 3a 50 25 2b  3d 31 0d 25 9e 05 ce 0d  |.?P%:P%+=1.%....|
000066f0  25 a8 07 3d 41 24 0d 25  b2 04 0d 25 bc 04 0d 25  |%..=A$.%...%...%|
00006700  c6 12 dd 20 a4 6c 65 61  66 28 70 61 74 68 24 29  |... .leaf(path$)|
00006710  0d 25 d0 12 c8 95 20 a7  70 61 74 68 24 2c 22 2e  |.%.... .path$,".|
00006720  22 29 0d 25 da 1f 70 61  74 68 24 3d c1 70 61 74  |").%..path$=.pat|
00006730  68 24 2c a7 70 61 74 68  24 2c 22 2e 22 29 2b 31  |h$,.path$,".")+1|
00006740  29 0d 25 e4 05 ce 0d 25  ee 0a 3d 70 61 74 68 24  |).%....%..=path$|
00006750  0d 25 f8 04 0d 26 02 04  0d 26 0c 12 dd 20 f2 64  |.%...&...&... .d|
00006760  61 74 61 73 61 76 65 28  62 29 0d 26 16 0f e7 20  |atasave(b).&... |
00006770  6c 6f 61 64 65 64 25 20  8c 0d 26 20 15 e3 20 69  |loaded% ..& .. i|
00006780  25 20 3d 20 30 20 b8 20  39 36 20 88 20 34 0d 26  |% = 0 . 96 . 4.&|
00006790  2a 1e 20 20 6d 65 73 73  61 67 65 5f 62 6c 6f 63  |*.  message_bloc|
000067a0  6b 25 21 69 25 20 3d 20  62 21 69 25 0d 26 34 05  |k%!i% = b!i%.&4.|
000067b0  ed 0d 26 3e 39 f4 20 63  6f 70 79 20 74 68 65 20  |..&>9. copy the |
000067c0  6d 65 73 73 61 67 65 20  62 6c 6f 63 6b 20 73 69  |message block si|
000067d0  6e 63 65 20 77 69 6d 70  20 70 6f 6c 6c 20 63 75  |nce wimp poll cu|
000067e0  72 72 75 70 74 73 20 69  74 21 0d 26 48 31 f2 70  |rrupts it!.&H1.p|
000067f0  72 6f 64 75 63 65 5f 6f  75 74 70 75 74 28 a4 67  |roduce_output(.g|
00006800  65 74 5f 6e 61 6d 65 28  6d 65 73 73 61 67 65 5f  |et_name(message_|
00006810  62 6c 6f 63 6b 25 2b 34  34 29 29 0d 26 52 36 e7  |block%+44)).&R6.|
00006820  20 a4 67 65 74 5f 6e 61  6d 65 28 6d 65 73 73 61  | .get_name(messa|
00006830  67 65 5f 62 6c 6f 63 6b  25 2b 34 34 29 20 3c 3e  |ge_block%+44) <>|
00006840  20 22 3c 57 69 6d 70 24  53 63 72 61 70 3e 22 20  | "<Wimp$Scrap>" |
00006850  8c 0d 26 5c 36 20 20 24  74 65 78 74 5f 66 69 6c  |..&\6  $text_fil|
00006860  65 5f 6e 61 6d 65 25 20  20 3d 20 a4 67 65 74 5f  |e_name%  = .get_|
00006870  6e 61 6d 65 28 6d 65 73  73 61 67 65 5f 62 6c 6f  |name(message_blo|
00006880  63 6b 25 2b 34 34 29 0d  26 66 05 cd 0d 26 70 26  |ck%+44).&f...&p&|
00006890  6d 65 73 73 61 67 65 5f  62 6c 6f 63 6b 25 21 31  |message_block%!1|
000068a0  32 3d 6d 65 73 73 61 67  65 5f 62 6c 6f 63 6b 25  |2=message_block%|
000068b0  21 38 0d 26 7a 17 6d 65  73 73 61 67 65 5f 62 6c  |!8.&z.message_bl|
000068c0  6f 63 6b 25 21 31 36 3d  33 0d 26 84 18 21 6d 65  |ock%!16=3.&..!me|
000068d0  73 73 61 67 65 5f 62 6c  6f 63 6b 25 20 3d 20 36  |ssage_block% = 6|
000068e0  34 0d 26 8e 4e c8 99 22  57 69 6d 70 5f 53 65 6e  |4.&.N.."Wimp_Sen|
000068f0  64 4d 65 73 73 61 67 65  22 2c 31 37 2c 6d 65 73  |dMessage",17,mes|
00006900  73 61 67 65 5f 62 6c 6f  63 6b 25 2c 6d 65 73 73  |sage_block%,mess|
00006910  61 67 65 5f 62 6c 6f 63  6b 25 21 32 30 2c 6d 65  |age_block%!20,me|
00006920  73 73 61 67 65 5f 62 6c  6f 63 6b 25 21 32 34 0d  |ssage_block%!24.|
00006930  26 98 04 0d 26 a2 05 cc  0d 26 ac 1c f2 73 61 76  |&...&....&...sav|
00006940  65 69 74 28 a4 67 65 74  5f 6e 61 6d 65 28 62 2b  |eit(.get_name(b+|
00006950  34 34 29 29 0d 26 b6 20  24 70 61 74 68 6e 61 6d  |44)).&. $pathnam|
00006960  65 25 20 3d 20 a4 67 65  74 5f 6e 61 6d 65 28 62  |e% = .get_name(b|
00006970  2b 34 34 29 0d 26 c0 22  24 66 69 6c 65 6e 61 6d  |+44).&."$filenam|
00006980  65 25 20 3d 20 a4 6c 65  61 66 28 24 70 61 74 68  |e% = .leaf($path|
00006990  6e 61 6d 65 25 29 0d 26  ca 0c 62 21 31 32 3d 62  |name%).&..b!12=b|
000069a0  21 38 0d 26 d4 0a 62 21  31 36 3d 33 0d 26 de 0b  |!8.&..b!16=3.&..|
000069b0  21 62 20 3d 20 36 34 0d  26 e8 27 c8 99 22 57 69  |!b = 64.&.'.."Wi|
000069c0  6d 70 5f 53 65 6e 64 4d  65 73 73 61 67 65 22 2c  |mp_SendMessage",|
000069d0  31 37 2c 62 2c 62 21 32  30 2c 62 21 32 34 0d 26  |17,b,b!20,b!24.&|
000069e0  f2 05 cd 0d 26 fc 05 e1  0d 27 06 04 0d 27 10 04  |....&....'...'..|
000069f0  0d 27 1a 04 0d 27 24 14  dd 20 f2 73 61 76 65 69  |.'...'$.. .savei|
00006a00  74 28 6e 61 6d 65 24 29  0d 27 2e 26 f4 20 54 68  |t(name$).'.&. Th|
00006a10  69 73 20 73 61 76 65 73  20 61 20 66 69 6c 65 20  |is saves a file |
00006a20  74 68 65 20 66 69 72 73  74 20 74 69 6d 65 0d 27  |the first time.'|
00006a30  38 0b ea 20 20 72 65 63  25 0d 27 42 14 66 69 6c  |8..  rec%.'B.fil|
00006a40  65 25 20 3d 20 ae 28 6e  61 6d 65 24 29 0d 27 4c  |e% = .(name$).'L|
00006a50  2d e3 20 61 25 20 3d 20  66 69 65 6c 64 5f 64 65  |-. a% = field_de|
00006a60  73 25 20 b8 20 66 69 65  6c 64 5f 64 65 73 25 20  |s% . field_des% |
00006a70  2b 20 32 31 39 36 20 88  20 34 0d 27 56 11 20 20  |+ 2196 . 4.'V.  |
00006a80  f1 23 66 69 6c 65 25 2c  21 61 25 0d 27 60 05 ed  |.#file%,!a%.'`..|
00006a90  0d 27 6a 11 63 5f 66 5f  76 24 28 29 20 3d 20 22  |.'j.c_f_v$() = "|
00006aa0  22 0d 27 74 19 6e 75 6d  62 65 72 5f 6f 66 5f 66  |".'t.number_of_f|
00006ab0  69 65 6c 64 73 25 20 3d  20 30 0d 27 7e 1a 6e 75  |ields% = 0.'~.nu|
00006ac0  6d 62 65 72 5f 6f 66 5f  72 65 63 6f 72 64 73 25  |mber_of_records%|
00006ad0  20 3d 20 31 0d 27 88 14  72 65 63 6f 72 64 5f 73  | = 1.'..record_s|
00006ae0  69 7a 65 25 20 3d 20 30  0d 27 92 1b e3 20 72 65  |ize% = 0.'... re|
00006af0  63 25 20 3d 20 30 20 b8  20 6d 61 78 5f 66 69 65  |c% = 0 . max_fie|
00006b00  6c 64 73 0d 27 9c 2f 20  20 72 65 63 6f 72 64 5f  |lds.'./  record_|
00006b10  73 69 7a 65 25 3d 72 65  63 6f 72 64 5f 73 69 7a  |size%=record_siz|
00006b20  65 25 2b bb 28 66 24 28  72 65 63 25 2c 32 29 29  |e%+.(f$(rec%,2))|
00006b30  2b 32 0d 27 a6 1b 20 20  e7 20 a9 28 66 24 28 72  |+2.'..  . .(f$(r|
00006b40  65 63 25 2c 30 29 29 20  3e 20 30 20 8c 0d 27 b0  |ec%,0)) > 0 ..'.|
00006b50  1e 20 20 20 20 20 6e 75  6d 62 65 72 5f 6f 66 5f  |.     number_of_|
00006b60  66 69 65 6c 64 73 25 20  2b 3d 31 0d 27 ba 07 20  |fields% +=1.'.. |
00006b70  20 cd 0d 27 c4 05 ed 0d  27 ce 2a 72 65 63 6f 72  | ..'....'.*recor|
00006b80  64 5f 73 69 7a 65 25 3d  32 30 2b 72 65 63 6f 72  |d_size%=20+recor|
00006b90  64 5f 73 69 7a 65 25 2a  6f 76 65 72 5f 73 69 7a  |d_size%*over_siz|
00006ba0  65 0d 27 d8 17 f1 20 23  66 69 6c 65 25 2c 24 70  |e.'... #file%,$p|
00006bb0  61 73 73 77 6f 72 64 25  0d 27 e2 18 f1 20 23 66  |assword%.'... #f|
00006bc0  69 6c 65 25 2c 20 24 66  69 6c 65 6e 61 6d 65 25  |ile%, $filename%|
00006bd0  0d 27 ec 20 f1 20 23 66  69 6c 65 25 2c 20 6e 75  |.'. . #file%, nu|
00006be0  6d 62 65 72 5f 6f 66 5f  72 65 63 6f 72 64 73 25  |mber_of_records%|
00006bf0  0d 27 f6 1a f1 20 23 66  69 6c 65 25 2c 20 72 65  |.'... #file%, re|
00006c00  63 6f 72 64 5f 73 69 7a  65 25 0d 28 00 1f f1 20  |cord_size%.(... |
00006c10  23 66 69 6c 65 25 2c 20  6e 75 6d 62 65 72 5f 6f  |#file%, number_o|
00006c20  66 5f 66 69 65 6c 64 73  25 0d 28 0a 21 f1 20 23  |f_fields%.(.!. #|
00006c30  66 69 6c 65 25 2c 20 31  20 3a 20 f4 20 72 65 63  |file%, 1 : . rec|
00006c40  6f 72 64 20 6e 75 6d 62  65 72 0d 28 14 04 0d 28  |ord number.(...(|
00006c50  1e 1b e3 20 72 65 63 25  20 3d 20 30 20 b8 20 6d  |... rec% = 0 . m|
00006c60  61 78 5f 66 69 65 6c 64  73 0d 28 28 21 20 20 f1  |ax_fields.((!  .|
00006c70  20 23 66 69 6c 65 25 2c  20 66 69 65 6c 64 5f 75  | #file%, field_u|
00006c80  73 65 64 25 28 72 65 63  25 29 0d 28 32 05 ed 0d  |sed%(rec%).(2...|
00006c90  28 3c 04 0d 28 46 2e e3  20 61 25 20 3d 20 6f 75  |(<..(F.. a% = ou|
00006ca0  74 70 75 74 5f 6c 69 73  74 25 20 b8 20 6f 75 74  |tput_list% . out|
00006cb0  70 75 74 5f 6c 69 73 74  25 2b 34 39 36 20 88 20  |put_list%+496 . |
00006cc0  34 0d 28 50 12 20 20 f1  20 23 66 69 6c 65 25 2c  |4.(P.  . #file%,|
00006cd0  21 61 25 0d 28 5a 05 ed  0d 28 64 04 0d 28 6e 2e  |!a%.(Z...(d..(n.|
00006ce0  e3 20 61 25 20 3d 20 73  65 61 72 63 68 5f 6c 69  |. a% = search_li|
00006cf0  73 74 25 20 b8 20 73 65  61 72 63 68 5f 6c 69 73  |st% . search_lis|
00006d00  74 25 2b 31 39 36 20 88  20 34 0d 28 78 12 20 20  |t%+196 . 4.(x.  |
00006d10  f1 20 23 66 69 6c 65 25  2c 21 61 25 0d 28 82 05  |. #file%,!a%.(..|
00006d20  ed 0d 28 8c 04 0d 28 96  2c e3 20 61 25 20 3d 20  |..(...(.,. a% = |
00006d30  73 6f 72 74 5f 66 69 65  6c 64 25 20 b8 20 73 6f  |sort_field% . so|
00006d40  72 74 5f 66 69 65 6c 64  25 2b 32 39 36 20 88 20  |rt_field%+296 . |
00006d50  34 0d 28 a0 12 20 20 f1  20 23 66 69 6c 65 25 2c  |4.(..  . #file%,|
00006d60  21 61 25 0d 28 aa 05 ed  0d 28 b4 04 0d 28 be 04  |!a%.(....(...(..|
00006d70  0d 28 c8 04 0d 28 d2 04  0d 28 dc 04 0d 28 e6 14  |.(...(...(...(..|
00006d80  f2 77 72 69 74 65 5f 72  65 63 6f 72 64 28 31 29  |.write_record(1)|
00006d90  0d 28 f0 0c d9 20 23 66  69 6c 65 25 0d 28 fa 0d  |.(... #file%.(..|
00006da0  66 69 6c 65 25 20 3d 20  30 0d 29 04 1e ff 28 22  |file% = 0.)...("|
00006db0  73 65 74 74 79 70 65 20  22 2b 6e 61 6d 65 24 2b  |settype "+name$+|
00006dc0  22 20 37 37 38 22 29 0d  29 0e 22 f2 63 6c 6f 73  |" 778").).".clos|
00006dd0  65 61 77 69 6e 64 6f 77  28 6e 65 77 66 69 6c 65  |eawindow(newfile|
00006de0  5f 77 69 6e 64 6f 77 25  29 0d 29 18 21 f2 63 6c  |_window%).).!.cl|
00006df0  6f 73 65 61 77 69 6e 64  6f 77 28 66 69 65 6c 64  |oseawindow(field|
00006e00  73 5f 77 69 6e 64 6f 77  25 29 0d 29 22 0f 6c 6f  |s_window%).)".lo|
00006e10  61 64 65 64 25 20 3d 20  a3 0d 29 2c 10 f2 6c 6f  |aded% = ..),..lo|
00006e20  61 64 28 6e 61 6d 65 24  29 0d 29 36 05 e1 0d 29  |ad(name$).)6...)|
00006e30  40 04 0d 29 4a 04 0d 29  54 04 0d 29 5e 12 dd 20  |@..)J..)T..)^.. |
00006e40  f2 6c 6f 61 64 28 6e 61  6d 65 24 29 0d 29 68 0f  |.load(name$).)h.|
00006e50  e7 20 6c 6f 61 64 65 64  25 20 8c 0d 29 72 73 20  |. loaded% ..)rs |
00006e60  20 20 f2 65 72 72 6f 72  5f 6d 65 73 73 61 67 65  |  .error_message|
00006e70  28 22 54 68 65 20 66 69  6c 65 20 27 22 2b 24 66  |("The file '"+$f|
00006e80  69 6c 65 6e 61 6d 65 25  2b 22 27 20 69 73 20 73  |ilename%+"' is s|
00006e90  74 69 6c 6c 20 6f 70 65  6e 20 61 6e 64 20 6d 75  |till open and mu|
00006ea0  73 74 20 62 65 20 63 6c  6f 73 65 64 20 62 65 66  |st be closed bef|
00006eb0  6f 72 65 20 61 20 6e 65  77 20 66 69 6c 65 20 63  |ore a new file c|
00006ec0  61 6e 20 62 65 20 6c 6f  61 64 65 64 22 29 0d 29  |an be loaded").)|
00006ed0  7c 05 cc 0d 29 86 1d 20  20 e7 20 a4 66 75 6c 6c  ||...)..  . .full|
00006ee0  5f 61 63 63 65 73 73 28  6e 61 6d 65 24 29 20 8c  |_access(name$) .|
00006ef0  0d 29 90 27 20 20 20 20  20 f2 63 6c 6f 73 65 61  |.).'     .closea|
00006f00  77 69 6e 64 6f 77 28 6e  65 77 66 69 6c 65 5f 77  |window(newfile_w|
00006f10  69 6e 64 6f 77 25 29 0d  29 9a 26 20 20 20 20 20  |indow%).).&     |
00006f20  f2 63 6c 6f 73 65 61 77  69 6e 64 6f 77 28 66 69  |.closeawindow(fi|
00006f30  65 6c 64 73 5f 77 69 6e  64 6f 77 25 29 0d 29 a4  |elds_window%).).|
00006f40  26 20 20 20 20 20 63 75  72 72 65 6e 74 5f 66 69  |&     current_fi|
00006f50  6c 65 5f 6e 61 6d 65 24  20 3d 20 6e 61 6d 65 24  |le_name$ = name$|
00006f60  2b bd 30 0d 29 ae 2e 20  20 20 20 20 c8 99 22 4f  |+.0.)..     .."O|
00006f70  53 5f 46 69 6c 65 22 2c  35 2c 6e 61 6d 65 24 2c  |S_File",5,name$,|
00006f80  2c 2c 2c 2c 30 20 b8 20  2c 2c 72 32 25 2c 72 33  |,,,,0 . ,,r2%,r3|
00006f90  25 0d 29 b8 1c 20 20 20  20 20 64 61 74 65 5f 73  |%.)..     date_s|
00006fa0  74 61 6d 70 25 21 30 20  3d 20 72 33 25 0d 29 c2  |tamp%!0 = r3%.).|
00006fb0  22 20 20 20 20 20 64 61  74 65 5f 73 74 61 6d 70  |"     date_stamp|
00006fc0  25 3f 34 20 3d 20 72 32  25 20 80 20 26 46 46 0d  |%?4 = r2% . &FF.|
00006fd0  29 cc 47 20 20 20 20 20  c8 99 22 4f 53 5f 43 6f  |).G     .."OS_Co|
00006fe0  6e 76 65 72 74 53 74 61  6e 64 61 72 64 44 61 74  |nvertStandardDat|
00006ff0  65 41 6e 64 54 69 6d 65  22 2c 64 61 74 65 5f 73  |eAndTime",date_s|
00007000  74 61 6d 70 25 2c 63 72  65 61 74 65 5f 64 61 74  |tamp%,create_dat|
00007010  65 25 2c 31 30 30 0d 29  d6 28 20 20 20 20 20 63  |e%,100.).(     c|
00007020  72 65 61 74 65 5f 64 61  74 65 24 3d c0 24 63 72  |reate_date$=.$cr|
00007030  65 61 74 65 5f 64 61 74  65 25 2c 32 30 29 0d 29  |eate_date%,20).)|
00007040  e0 19 20 20 20 20 20 66  69 6c 65 25 20 3d 20 ad  |..     file% = .|
00007050  28 6e 61 6d 65 24 29 0d  29 ea 32 20 20 20 20 20  |(name$).).2     |
00007060  e3 20 61 25 20 3d 20 66  69 65 6c 64 5f 64 65 73  |. a% = field_des|
00007070  25 20 b8 20 66 69 65 6c  64 5f 64 65 73 25 20 2b  |% . field_des% +|
00007080  20 32 31 39 36 20 88 20  34 0d 29 f4 16 20 20 20  | 2196 . 4.)..   |
00007090  20 20 20 20 e8 23 66 69  6c 65 25 2c 21 61 25 0d  |    .#file%,!a%.|
000070a0  29 fe 0a 20 20 20 20 20  ed 0d 2a 08 1c 20 20 20  |)..     ..*..   |
000070b0  20 20 e8 20 23 66 69 6c  65 25 2c 24 70 61 73 73  |  . #file%,$pass|
000070c0  77 6f 72 64 25 0d 2a 12  1d 20 20 20 20 20 e8 20  |word%.*..     . |
000070d0  23 66 69 6c 65 25 2c 20  24 66 69 6c 65 6e 61 6d  |#file%, $filenam|
000070e0  65 25 0d 2a 1c 25 20 20  20 20 20 e8 20 23 66 69  |e%.*.%     . #fi|
000070f0  6c 65 25 2c 20 6e 75 6d  62 65 72 5f 6f 66 5f 72  |le%, number_of_r|
00007100  65 63 6f 72 64 73 25 0d  2a 26 1f 20 20 20 20 20  |ecords%.*&.     |
00007110  e8 20 23 66 69 6c 65 25  2c 20 72 65 63 6f 72 64  |. #file%, record|
00007120  5f 73 69 7a 65 25 0d 2a  30 24 20 20 20 20 20 e8  |_size%.*0$     .|
00007130  20 23 66 69 6c 65 25 2c  20 6e 75 6d 62 65 72 5f  | #file%, number_|
00007140  6f 66 5f 66 69 65 6c 64  73 25 0d 2a 3a 1f 20 20  |of_fields%.*:.  |
00007150  20 20 20 e8 20 23 66 69  6c 65 25 2c 20 63 75 72  |   . #file%, cur|
00007160  72 65 6e 74 5f 72 65 63  25 0d 2a 44 20 20 20 20  |rent_rec%.*D    |
00007170  20 20 e3 20 72 65 63 25  20 3d 20 30 20 b8 20 6d  |  . rec% = 0 . m|
00007180  61 78 5f 66 69 65 6c 64  73 0d 2a 4e 27 20 20 20  |ax_fields.*N'   |
00007190  20 20 20 20 20 e8 20 23  66 69 6c 65 25 2c 20 66  |     . #file%, f|
000071a0  69 65 6c 64 5f 75 73 65  64 25 28 72 65 63 25 29  |ield_used%(rec%)|
000071b0  0d 2a 58 0a 20 20 20 20  20 ed 0d 2a 62 33 20 20  |.*X.     ..*b3  |
000071c0  20 20 20 e3 20 61 25 20  3d 20 6f 75 74 70 75 74  |   . a% = output|
000071d0  5f 6c 69 73 74 25 20 b8  20 6f 75 74 70 75 74 5f  |_list% . output_|
000071e0  6c 69 73 74 25 2b 34 39  36 20 88 20 34 0d 2a 6c  |list%+496 . 4.*l|
000071f0  17 20 20 20 20 20 20 20  e8 20 23 66 69 6c 65 25  |.       . #file%|
00007200  2c 21 61 25 0d 2a 76 0a  20 20 20 20 20 ed 0d 2a  |,!a%.*v.     ..*|
00007210  80 33 20 20 20 20 20 e3  20 61 25 20 3d 20 73 65  |.3     . a% = se|
00007220  61 72 63 68 5f 6c 69 73  74 25 20 b8 20 73 65 61  |arch_list% . sea|
00007230  72 63 68 5f 6c 69 73 74  25 2b 31 39 36 20 88 20  |rch_list%+196 . |
00007240  34 0d 2a 8a 17 20 20 20  20 20 20 20 e8 20 23 66  |4.*..       . #f|
00007250  69 6c 65 25 2c 21 61 25  0d 2a 94 0a 20 20 20 20  |ile%,!a%.*..    |
00007260  20 ed 0d 2a 9e 31 20 20  20 20 20 e3 20 61 25 20  | ..*.1     . a% |
00007270  3d 20 73 6f 72 74 5f 66  69 65 6c 64 25 20 b8 20  |= sort_field% . |
00007280  73 6f 72 74 5f 66 69 65  6c 64 25 2b 32 39 36 20  |sort_field%+296 |
00007290  88 20 34 0d 2a a8 17 20  20 20 20 20 20 20 e8 20  |. 4.*..       . |
000072a0  23 66 69 6c 65 25 2c 21  61 25 0d 2a b2 0a 20 20  |#file%,!a%.*..  |
000072b0  20 20 20 ed 0d 2a bc 23  20 20 20 20 20 f2 72 65  |   ..*.#     .re|
000072c0  61 64 5f 72 65 63 6f 72  64 28 63 75 72 72 65 6e  |ad_record(curren|
000072d0  74 5f 72 65 63 25 29 0d  2a c6 27 20 20 20 20 20  |t_rec%).*.'     |
000072e0  24 72 65 63 5f 6e 75 6d  62 65 72 25 20 3d 20 c3  |$rec_number% = .|
000072f0  28 63 75 72 72 65 6e 74  5f 72 65 63 25 29 0d 2a  |(current_rec%).*|
00007300  d0 14 20 20 20 20 20 6c  6f 61 64 65 64 25 20 3d  |..     loaded% =|
00007310  20 b9 0d 2a da 23 20 20  20 20 20 f2 65 78 74 72  | ..*.#     .extr|
00007320  61 63 74 5f 66 69 65 6c  64 5f 64 65 73 63 72 69  |act_field_descri|
00007330  70 74 69 6f 6e 0d 2a e4  1e 20 20 20 20 20 f2 63  |ption.*..     .c|
00007340  72 65 61 74 65 5f 64 69  73 70 6c 61 79 5f 69 63  |reate_display_ic|
00007350  6f 6e 73 0d 2a ee 18 20  20 20 20 20 f2 70 61 73  |ons.*..     .pas|
00007360  73 77 6f 72 64 5f 63 68  65 63 6b 0d 2a f8 33 20  |sword_check.*.3 |
00007370  20 20 20 20 e7 20 ac 20  69 6e 68 69 62 69 74 25  |    . . inhibit%|
00007380  20 f2 6f 70 65 6e 5f 77  69 6e 64 6f 77 28 64 69  | .open_window(di|
00007390  73 70 6c 61 79 5f 77 69  6e 64 6f 77 25 29 0d 2b  |splay_window%).+|
000073a0  02 08 20 20 20 cc 0d 2b  0c 78 20 20 20 20 20 20  |..   ..+.x      |
000073b0  20 20 f2 65 72 72 6f 72  5f 6d 65 73 73 61 67 65  |  .error_message|
000073c0  28 22 54 68 69 73 20 66  69 6c 65 20 63 61 6e 20  |("This file can |
000073d0  6e 6f 74 20 62 65 20 6c  6f 61 64 65 64 20 73 69  |not be loaded si|
000073e0  6e 63 65 20 74 68 65 20  66 69 6c 65 20 69 73 20  |nce the file is |
000073f0  6c 6f 63 6b 65 64 20 6f  72 20 64 6f 65 73 20 6e  |locked or does n|
00007400  6f 74 20 68 61 76 65 20  72 65 61 64 20 6f 72 20  |ot have read or |
00007410  77 72 69 74 65 20 61 63  63 65 73 73 22 29 0d 2b  |write access").+|
00007420  16 04 0d 2b 20 08 20 20  20 cd 0d 2b 2a 05 cd 0d  |...+ .   ..+*...|
00007430  2b 34 05 e1 0d 2b 3e 04  0d 2b 48 04 0d 2b 52 04  |+4...+>..+H..+R.|
00007440  0d 2b 5c 04 0d 2b 66 1b  dd 20 f2 63 72 65 61 74  |.+\..+f.. .creat|
00007450  65 5f 64 69 73 70 6c 61  79 5f 69 63 6f 6e 73 0d  |e_display_icons.|
00007460  2b 70 3b f4 20 63 68 61  6e 67 65 20 76 61 6c 69  |+p;. change vali|
00007470  64 61 74 69 6f 6e 20 73  74 72 69 6e 67 20 74 6f  |dation string to|
00007480  20 6d 61 74 63 68 20 74  68 65 20 74 79 70 65 20  | match the type |
00007490  64 65 66 69 6e 69 74 69  6f 6e 0d 2b 7a 12 ea 20  |definition.+z.. |
000074a0  64 25 2c 20 66 25 2c 6c  25 2c 77 25 0d 2b 84 23  |d%, f%,l%,w%.+.#|
000074b0  e3 20 66 25 20 3d 20 30  20 b8 20 6e 75 6d 62 65  |. f% = 0 . numbe|
000074c0  72 5f 6f 66 5f 66 69 65  6c 64 73 25 20 2d 31 0d  |r_of_fields% -1.|
000074d0  2b 8e 77 64 69 73 70 6c  61 79 5f 69 63 6f 6e 25  |+.wdisplay_icon%|
000074e0  28 66 25 2b 6e 75 6d 62  65 72 5f 6f 66 5f 66 69  |(f%+number_of_fi|
000074f0  65 6c 64 73 25 29 3d a4  69 63 6f 6e 28 64 69 73  |elds%)=.icon(dis|
00007500  70 6c 61 79 5f 77 69 6e  64 6f 77 25 2c 35 30 2c  |play_window%,50,|
00007510  2d 33 30 30 2d 66 25 2a  36 30 2c 33 30 30 2c 34  |-300-f%*60,300,4|
00007520  38 2c 26 37 30 30 30 35  31 31 2c 22 22 2c 66 69  |8,&7000511,"",fi|
00007530  65 6c 64 5f 64 65 73 25  2b 31 30 30 2a 66 25 2c  |eld_des%+100*f%,|
00007540  2d 31 2c 32 30 29 0d 2b  98 44 6c 25 20 3d 20 bb  |-1,20).+.Dl% = .|
00007550  28 66 24 28 66 25 2c 32  29 29 20 20 20 20 20 20  |(f$(f%,2))      |
00007560  20 3a 20 f4 20 73 65 74  20 6c 65 6e 67 74 68 20  | : . set length |
00007570  6f 66 20 62 6f 78 20 74  6f 20 61 20 73 75 69 74  |of box to a suit|
00007580  61 62 6c 65 20 76 61 6c  75 65 0d 2b a2 12 77 25  |able value.+..w%|
00007590  20 3d 20 6c 25 2a 31 36  20 2b 34 38 0d 2b ac 15  | = l%*16 +48.+..|
000075a0  e7 20 77 25 3e 34 30 30  20 8c 20 77 25 3d 34 30  |. w%>400 . w%=40|
000075b0  30 0d 2b b6 6c 64 69 73  70 6c 61 79 5f 69 63 6f  |0.+.ldisplay_ico|
000075c0  6e 25 28 66 25 29 20 3d  20 a4 69 63 6f 6e 28 64  |n%(f%) = .icon(d|
000075d0  69 73 70 6c 61 79 5f 77  69 6e 64 6f 77 25 2c 34  |isplay_window%,4|
000075e0  30 30 2c 2d 33 30 30 2d  66 25 2a 36 30 2c 77 25  |00,-300-f%*60,w%|
000075f0  2c 34 38 2c 26 37 30 30  46 35 33 35 2c 22 22 2c  |,48,&700F535,"",|
00007600  64 69 73 70 6c 61 79 5f  64 61 74 61 25 2b 33 30  |display_data%+30|
00007610  30 2a 66 25 2c 2d 31 2c  6c 25 2b 31 29 0d 2b c0  |0*f%,-1,l%+1).+.|
00007620  05 ed 0d 2b ca 05 e1 0d  2b d4 04 0d 2b de 1c dd  |...+....+...+...|
00007630  20 f2 64 65 73 74 72 6f  79 5f 64 69 73 70 6c 61  | .destroy_displa|
00007640  79 5f 69 63 6f 6e 73 0d  2b e8 2a e3 20 66 25 20  |y_icons.+.*. f% |
00007650  3d 20 32 2a 6e 75 6d 62  65 72 5f 6f 66 5f 66 69  |= 2*number_of_fi|
00007660  65 6c 64 73 25 20 2d 31  20 b8 20 30 20 88 20 2d  |elds% -1 . 0 . -|
00007670  31 0d 2b f2 1f 20 20 e7  20 64 69 73 70 6c 61 79  |1.+..  . display|
00007680  5f 69 63 6f 6e 25 28 66  25 29 20 3e 20 30 20 8c  |_icon%(f%) > 0 .|
00007690  0d 2b fc 21 20 20 20 20  21 62 6c 6f 63 6b 25 20  |.+.!    !block% |
000076a0  3d 20 64 69 73 70 6c 61  79 5f 77 69 6e 64 6f 77  |= display_window|
000076b0  25 0d 2c 06 24 20 20 20  20 62 6c 6f 63 6b 25 21  |%.,.$    block%!|
000076c0  34 20 3d 20 64 69 73 70  6c 61 79 5f 69 63 6f 6e  |4 = display_icon|
000076d0  25 28 66 25 29 0d 2c 10  23 20 20 20 20 c8 99 22  |%(f%).,.#    .."|
000076e0  57 69 6d 70 5f 44 65 6c  65 74 65 49 63 6f 6e 22  |Wimp_DeleteIcon"|
000076f0  2c 2c 62 6c 6f 63 6b 25  0d 2c 1a 07 20 20 cd 0d  |,,block%.,..  ..|
00007700  2c 24 05 ed 0d 2c 2e 05  e1 0d 2c 38 04 0d 2c 42  |,$...,....,8..,B|
00007710  05 20 0d 2c 4c 04 0d 2c  56 12 dd 20 f2 65 6e 76  |. .,L..,V.. .env|
00007720  69 72 6f 6e 6d 65 6e 74  0d 2c 60 17 c8 99 20 22  |ironment.,`... "|
00007730  4f 53 5f 47 65 74 45 6e  76 22 20 b8 20 63 24 0d  |OS_GetEnv" . c$.|
00007740  2c 6a 12 63 24 3d c2 63  24 2c a9 63 24 2d 32 30  |,j.c$=.c$,.c$-20|
00007750  29 0d 2c 74 1e c8 95 20  20 c0 63 24 2c 31 29 20  |).,t...  .c$,1) |
00007760  3c 3e 22 20 22 20 80 20  a9 63 24 20 3c 3e 30 0d  |<>" " . .c$ <>0.|
00007770  2c 7e 13 20 20 63 24 3d  c2 63 24 2c a9 63 24 2d  |,~.  c$=.c$,.c$-|
00007780  31 29 0d 2c 88 05 ce 0d  2c 92 17 e7 20 63 24 20  |1).,....,... c$ |
00007790  3d 20 22 20 22 20 8c 20  63 24 20 3d 22 22 0d 2c  |= " " . c$ ="".,|
000077a0  9c 05 e1 0d 2c a6 05 20  0d 2c b0 04 0d 2c ba 04  |....,.. .,...,..|
000077b0  0d 2c c4 04 0d 2c ce 11  dd 20 f2 61 63 6b 6c 6f  |.,...,... .acklo|
000077c0  61 64 28 62 29 0d 2c d8  0c 62 21 31 32 3d 62 21  |ad(b).,..b!12=b!|
000077d0  38 0d 2c e2 0c 62 21 31  36 20 3d 20 34 0d 2c ec  |8.,..b!16 = 4.,.|
000077e0  0b 21 62 20 3d 20 36 34  0d 2c f6 21 c8 99 22 57  |.!b = 64.,.!.."W|
000077f0  69 6d 70 5f 53 65 6e 64  4d 65 73 73 61 67 65 22  |imp_SendMessage"|
00007800  2c 31 37 2c 62 2c 62 21  34 0d 2d 00 05 e1 0d 2d  |,17,b,b!4.-....-|
00007810  0a 04 0d 2d 14 12 dd 20  f2 64 61 74 61 6c 6f 61  |...-... .dataloa|
00007820  64 28 62 29 0d 2d 1e 13  e7 20 62 21 34 30 20 3d  |d(b).-... b!40 =|
00007830  20 26 37 37 38 20 8c 0d  2d 28 1c 20 20 f2 6c 6f  | &778 ..-(.  .lo|
00007840  61 64 28 a4 67 65 74 5f  6e 61 6d 65 28 62 2b 34  |ad(.get_name(b+4|
00007850  34 29 29 0d 2d 32 11 20  20 f2 61 63 6b 6c 6f 61  |4)).-2.  .ackloa|
00007860  64 28 62 29 0d 2d 3c 05  cd 0d 2d 46 05 e1 0d 2d  |d(b).-<...-F...-|
00007870  50 04 0d 2d 5a 04 0d 2d  64 04 0d 2d 6e 04 0d 2d  |P..-Z..-d..-n..-|
00007880  78 04 0d 2d 82 04 0d 2d  8c 1a dd 20 f2 65 78 74  |x..-...-... .ext|
00007890  72 61 63 74 5f 72 65 63  6f 72 64 5f 64 61 74 61  |ract_record_data|
000078a0  0d 2d 96 44 f4 20 54 68  69 73 20 74 61 6b 65 73  |.-.D. This takes|
000078b0  20 74 68 65 20 64 61 74  61 20 66 72 6f 6d 20 74  | the data from t|
000078c0  68 65 20 69 63 6f 6e 73  20 61 6e 64 20 70 75 74  |he icons and put|
000078d0  73 20 74 68 65 6d 20 69  6e 74 6f 20 61 6e 20 61  |s them into an a|
000078e0  72 72 61 79 0d 2d a0 08  ea 20 66 25 0d 2d aa 22  |rray.-... f%.-."|
000078f0  e3 20 66 25 20 3d 20 30  20 b8 20 6e 75 6d 62 65  |. f% = 0 . numbe|
00007900  72 5f 6f 66 5f 66 69 65  6c 64 73 25 2d 31 0d 2d  |r_of_fields%-1.-|
00007910  b4 1e 20 20 70 25 20 3d  64 69 73 70 6c 61 79 5f  |..  p% =display_|
00007920  64 61 74 61 25 2b 66 25  2a 33 30 30 0d 2d be 16  |data%+f%*300.-..|
00007930  20 20 63 5f 66 5f 76 24  28 66 25 29 20 3d 20 24  |  c_f_v$(f%) = $|
00007940  70 25 0d 2d c8 05 ed 0d  2d d2 05 e1 0d 2d dc 05  |p%.-....-....-..|
00007950  20 0d 2d e6 13 dd 20 f2  63 6c 65 61 72 5f 72 65  | .-... .clear_re|
00007960  63 6f 72 64 0d 2d f0 08  ea 20 66 25 0d 2d fa 22  |cord.-... f%.-."|
00007970  e3 20 66 25 20 3d 20 30  20 b8 20 6e 75 6d 62 65  |. f% = 0 . numbe|
00007980  72 5f 6f 66 5f 66 69 65  6c 64 73 25 2d 31 0d 2e  |r_of_fields%-1..|
00007990  04 1e 20 20 70 25 20 3d  64 69 73 70 6c 61 79 5f  |..  p% =display_|
000079a0  64 61 74 61 25 2b 66 25  2a 33 30 30 0d 2e 0e 0e  |data%+f%*300....|
000079b0  20 20 24 70 25 20 3d 20  22 22 0d 2e 18 05 ed 0d  |  $p% = ""......|
000079c0  2e 22 05 e1 0d 2e 2c 04  0d 2e 36 04 0d 2e 40 12  |."....,...6...@.|
000079d0  dd 20 a4 64 61 74 65 28  64 61 74 65 24 29 0d 2e  |. .date(date$)..|
000079e0  4a 39 20 20 3d bb 28 c0  64 61 74 65 24 2c 32 29  |J9  =.(.date$,2)|
000079f0  29 2b 31 30 30 2a bb 28  c1 64 61 74 65 24 2c 34  |)+100*.(.date$,4|
00007a00  2c 32 29 29 2b 31 30 30  30 30 2a bb 28 c2 64 61  |,2))+10000*.(.da|
00007a10  74 65 24 2c 32 29 29 0d  2e 54 04 0d 2e 5e 04 0d  |te$,2))..T...^..|
00007a20  2e 68 04 0d 2e 72 23 dd  20 a4 76 61 6c 69 64 5f  |.h...r#. .valid_|
00007a30  6d 69 6e 28 76 61 6c 75  65 24 2c 74 79 70 65 24  |min(value$,type$|
00007a40  2c 6d 69 6e 24 29 0d 2e  7c 09 ea 20 6f 6b 25 0d  |,min$)..|.. ok%.|
00007a50  2e 86 0b 6f 6b 25 20 3d  20 b9 0d 2e 90 20 e7 20  |...ok% = .... . |
00007a60  a9 20 6d 69 6e 24 20 3e  30 20 80 20 a9 20 76 61  |. min$ >0 . . va|
00007a70  6c 75 65 24 20 3e 20 30  20 8c 0d 2e 9a 0f c8 8e  |lue$ > 0 .......|
00007a80  20 20 74 79 70 65 24 20  ca 0d 2e a4 2b 20 20 c9  |  type$ ....+  .|
00007a90  20 22 74 22 2c 22 54 22  20 3a 20 e7 20 76 61 6c  | "t","T" : . val|
00007aa0  75 65 24 20 3c 20 6d 69  6e 24 20 8c 20 6f 6b 25  |ue$ < min$ . ok%|
00007ab0  20 3d 20 a3 0d 2e ae 31  20 20 c9 20 22 4e 22 2c  | = ....1  . "N",|
00007ac0  22 6e 22 20 3a 20 e7 20  bb 28 76 61 6c 75 65 24  |"n" : . .(value$|
00007ad0  29 20 3c 20 bb 28 6d 69  6e 24 29 20 8c 20 6f 6b  |) < .(min$) . ok|
00007ae0  25 20 3d 20 a3 0d 2e b8  39 20 20 c9 20 22 44 22  |% = ....9  . "D"|
00007af0  2c 22 64 22 20 3a 20 e7  20 a4 64 61 74 65 28 76  |,"d" : . .date(v|
00007b00  61 6c 75 65 24 29 20 3c  20 a4 64 61 74 65 28 6d  |alue$) < .date(m|
00007b10  69 6e 24 29 20 8c 20 6f  6b 25 20 3d 20 a3 0d 2e  |in$) . ok% = ...|
00007b20  c2 05 cb 0d 2e cc 05 cd  0d 2e d6 08 3d 6f 6b 25  |............=ok%|
00007b30  0d 2e e0 04 0d 2e ea 23  dd 20 a4 76 61 6c 69 64  |.......#. .valid|
00007b40  5f 6d 61 78 28 76 61 6c  75 65 24 2c 74 79 70 65  |_max(value$,type|
00007b50  24 2c 6d 61 78 24 29 0d  2e f4 09 ea 20 6f 6b 25  |$,max$)..... ok%|
00007b60  0d 2e fe 0b 6f 6b 25 20  3d 20 b9 0d 2f 08 20 e7  |....ok% = ../. .|
00007b70  20 a9 20 6d 61 78 24 20  3e 30 20 80 20 a9 20 76  | . max$ >0 . . v|
00007b80  61 6c 75 65 24 20 3e 20  30 20 8c 0d 2f 12 0f c8  |alue$ > 0 ../...|
00007b90  8e 20 20 74 79 70 65 24  20 ca 0d 2f 1c 2b 20 20  |.  type$ ../.+  |
00007ba0  c9 20 22 74 22 2c 22 54  22 20 3a 20 e7 20 76 61  |. "t","T" : . va|
00007bb0  6c 75 65 24 20 3e 20 6d  61 78 24 20 8c 20 6f 6b  |lue$ > max$ . ok|
00007bc0  25 20 3d 20 a3 0d 2f 26  31 20 20 c9 20 22 4e 22  |% = ../&1  . "N"|
00007bd0  2c 22 6e 22 20 3a 20 e7  20 bb 28 76 61 6c 75 65  |,"n" : . .(value|
00007be0  24 29 20 3e 20 bb 28 6d  61 78 24 29 20 8c 20 6f  |$) > .(max$) . o|
00007bf0  6b 25 20 3d 20 a3 0d 2f  30 39 20 20 c9 20 22 44  |k% = ../09  . "D|
00007c00  22 2c 22 64 22 20 3a 20  e7 20 a4 64 61 74 65 28  |","d" : . .date(|
00007c10  76 61 6c 75 65 24 29 20  3e 20 a4 64 61 74 65 28  |value$) > .date(|
00007c20  6d 61 78 24 29 20 8c 20  6f 6b 25 20 3d 20 a3 0d  |max$) . ok% = ..|
00007c30  2f 3a 05 cb 0d 2f 44 05  cd 0d 2f 4e 08 3d 6f 6b  |/:.../D.../N.=ok|
00007c40  25 0d 2f 58 04 0d 2f 62  25 dd 20 a4 76 61 6c 69  |%./X../b%. .vali|
00007c50  64 5f 6c 69 73 74 28 76  61 6c 75 65 24 2c 74 79  |d_list(value$,ty|
00007c60  70 65 24 2c 6c 69 73 74  24 29 0d 2f 6c 09 ea 20  |pe$,list$)./l.. |
00007c70  6f 6b 25 0d 2f 76 0b 6f  6b 25 20 3d 20 b9 0d 2f  |ok%./v.ok% = ../|
00007c80  80 12 e7 20 a9 20 6c 69  73 74 24 20 3e 30 20 8c  |... . list$ >0 .|
00007c90  0d 2f 8a 24 20 20 e7 20  a7 6c 69 73 74 24 2c 76  |./.$  . .list$,v|
00007ca0  61 6c 75 65 24 29 20 3d  20 30 20 8c 20 6f 6b 25  |alue$) = 0 . ok%|
00007cb0  20 3d 20 a3 0d 2f 94 05  cd 0d 2f 9e 08 3d 6f 6b  | = ../..../..=ok|
00007cc0  25 0d 2f a8 04 0d 2f b2  04 0d 2f bc 13 dd 20 a4  |%./.../.../... .|
00007cd0  76 61 6c 69 64 5f 72 65  63 6f 72 64 0d 2f c6 0b  |valid_record./..|
00007ce0  6f 6b 25 20 3d 20 b9 0d  2f d0 0b 66 25 20 3d 20  |ok% = ../..f% = |
00007cf0  2d 31 0d 2f da 1c c8 95  20 6f 6b 25 20 80 20 66  |-1./.... ok% . f|
00007d00  25 20 3c 20 6d 61 78 5f  66 69 65 6c 64 73 0d 2f  |% < max_fields./|
00007d10  e4 0b 20 20 66 25 2b 3d  31 0d 2f ee 19 20 20 e7  |..  f%+=1./..  .|
00007d20  20 66 69 65 6c 64 5f 75  73 65 64 25 28 66 25 29  | field_used%(f%)|
00007d30  20 8c 0d 2f f8 47 20 20  20 20 20 e7 20 28 66 24  | ../.G     . (f$|
00007d40  28 66 25 2c 31 29 20 3d  22 64 22 20 84 20 66 24  |(f%,1) ="d" . f$|
00007d50  28 66 25 2c 31 29 20 3d  22 44 22 29 80 20 ac 20  |(f%,1) ="D"). . |
00007d60  a4 76 61 6c 69 64 5f 64  61 74 65 28 63 5f 66 5f  |.valid_date(c_f_|
00007d70  76 24 28 66 25 29 29 20  8c 0d 30 02 12 20 20 20  |v$(f%)) ..0..   |
00007d80  20 20 20 20 6f 6b 25 20  3d 20 a3 0d 30 0c 3f 20  |    ok% = ..0.? |
00007d90  20 20 20 20 20 20 f2 65  72 72 6f 72 5f 6d 65 73  |      .error_mes|
00007da0  73 61 67 65 28 22 27 22  2b 66 24 28 66 25 2c 30  |sage("'"+f$(f%,0|
00007db0  29 2b 22 27 20 68 61 73  20 61 6e 20 69 6e 76 61  |)+"' has an inva|
00007dc0  6c 69 64 20 64 61 74 65  22 29 0d 30 16 0a 20 20  |lid date").0..  |
00007dd0  20 20 20 cc 0d 30 20 37  20 20 20 20 20 e7 20 ac  |   ..0 7     . .|
00007de0  20 a4 76 61 6c 69 64 5f  6d 69 6e 28 63 5f 66 5f  | .valid_min(c_f_|
00007df0  76 24 28 66 25 29 2c 66  24 28 66 25 2c 31 29 2c  |v$(f%),f$(f%,1),|
00007e00  66 24 28 66 25 2c 34 29  29 20 8c 0d 30 2a 10 20  |f$(f%,4)) ..0*. |
00007e10  20 20 20 20 20 20 6f 6b  25 3d a3 0d 30 34 49 20  |      ok%=..04I |
00007e20  20 20 20 20 20 20 f2 65  72 72 6f 72 5f 6d 65 73  |      .error_mes|
00007e30  73 61 67 65 28 22 27 22  2b 66 24 28 66 25 2c 30  |sage("'"+f$(f%,0|
00007e40  29 2b 22 27 20 68 61 73  20 61 20 76 61 6c 75 65  |)+"' has a value|
00007e50  20 77 68 69 63 68 20 69  73 20 74 6f 6f 20 6c 6f  | which is too lo|
00007e60  77 22 20 29 0d 30 3e 0a  20 20 20 20 20 cc 0d 30  |w" ).0>.     ..0|
00007e70  48 37 20 20 20 20 20 e7  20 ac 20 a4 76 61 6c 69  |H7     . . .vali|
00007e80  64 5f 6d 61 78 28 63 5f  66 5f 76 24 28 66 25 29  |d_max(c_f_v$(f%)|
00007e90  2c 66 24 28 66 25 2c 31  29 2c 66 24 28 66 25 2c  |,f$(f%,1),f$(f%,|
00007ea0  35 29 29 20 8c 0d 30 52  10 20 20 20 20 20 20 20  |5)) ..0R.       |
00007eb0  6f 6b 25 3d a3 0d 30 5c  4a 20 20 20 20 20 20 20  |ok%=..0\J       |
00007ec0  f2 65 72 72 6f 72 5f 6d  65 73 73 61 67 65 28 22  |.error_message("|
00007ed0  27 22 2b 66 24 28 66 25  2c 30 29 2b 22 27 20 68  |'"+f$(f%,0)+"' h|
00007ee0  61 73 20 61 20 76 61 6c  75 65 20 77 68 69 63 68  |as a value which|
00007ef0  20 69 73 20 74 6f 6f 20  68 69 67 68 22 20 29 0d  | is too high" ).|
00007f00  30 66 0a 20 20 20 20 20  cc 0d 30 70 38 20 20 20  |0f.     ..0p8   |
00007f10  20 20 e7 20 ac 20 a4 76  61 6c 69 64 5f 6c 69 73  |  . . .valid_lis|
00007f20  74 28 63 5f 66 5f 76 24  28 66 25 29 2c 66 24 28  |t(c_f_v$(f%),f$(|
00007f30  66 25 2c 31 29 2c 66 24  28 66 25 2c 36 29 29 20  |f%,1),f$(f%,6)) |
00007f40  8c 0d 30 7a 10 20 20 20  20 20 20 20 6f 6b 25 3d  |..0z.       ok%=|
00007f50  a3 0d 30 84 4e 20 20 20  20 20 f2 65 72 72 6f 72  |..0.N     .error|
00007f60  5f 6d 65 73 73 61 67 65  28 22 27 22 2b 66 24 28  |_message("'"+f$(|
00007f70  66 25 2c 30 29 2b 22 27  20 68 61 73 20 61 20 76  |f%,0)+"' has a v|
00007f80  61 6c 75 65 20 77 68 69  63 68 20 69 73 20 6e 6f  |alue which is no|
00007f90  74 20 69 6e 20 74 68 65  20 6c 69 73 74 22 29 0d  |t in the list").|
00007fa0  30 8e 0a 20 20 20 20 20  cc 0d 30 98 3e 20 20 20  |0..     ..0.>   |
00007fb0  20 20 20 20 e7 20 66 24  28 66 25 2c 31 29 20 3d  |    . f$(f%,1) =|
00007fc0  20 22 4e 22 20 84 20 66  24 28 66 25 2c 31 29 3d  | "N" . f$(f%,1)=|
00007fd0  22 6e 22 20 80 20 bb 28  66 24 28 66 25 2c 33 29  |"n" . .(f$(f%,3)|
00007fe0  29 20 3e 20 30 20 8c 0d  30 a2 16 20 20 20 20 20  |) > 0 ..0..     |
00007ff0  20 20 20 20 20 20 41 25  20 3d 20 40 25 0d 30 ac  |      A% = @%.0.|
00008000  2f 20 20 20 20 20 20 20  20 20 20 20 40 25 20 3d  |/           @% =|
00008010  26 30 31 30 32 30 30 30  41 20 2b 20 bb 28 66 24  |&0102000A + .(f$|
00008020  28 66 25 2c 33 29 29 2a  26 31 30 30 0d 30 b6 21  |(f%,3))*&100.0.!|
00008030  20 20 20 20 20 20 20 20  20 20 20 e7 20 a9 63 5f  |           . .c_|
00008040  66 5f 76 24 28 66 25 29  20 3e 30 20 8c 0d 30 c0  |f_v$(f%) >0 ..0.|
00008050  2e 20 20 20 20 20 20 20  20 20 20 20 20 20 63 5f  |.             c_|
00008060  66 5f 76 24 28 66 25 29  20 3d 20 c3 28 bb 28 63  |f_v$(f%) = .(.(c|
00008070  5f 66 5f 76 24 28 66 25  29 29 29 0d 30 ca 10 20  |_f_v$(f%))).0.. |
00008080  20 20 20 20 20 20 20 20  20 20 cd 0d 30 d4 14 20  |          ..0.. |
00008090  20 20 20 20 20 20 20 20  20 20 40 25 3d 41 25 0d  |          @%=A%.|
000080a0  30 de 26 20 20 20 20 20  20 20 20 20 20 20 e7 20  |0.&           . |
000080b0  c2 63 5f 66 5f 76 24 28  66 25 29 2c 31 29 20 3d  |.c_f_v$(f%),1) =|
000080c0  22 2e 22 20 8c 0d 30 e8  29 20 20 20 20 20 20 20  |"." ..0.)       |
000080d0  20 20 20 20 20 20 63 5f  66 5f 76 24 28 66 25 29  |      c_f_v$(f%)|
000080e0  3d 20 c0 63 5f 66 5f 76  24 28 66 25 29 29 0d 30  |= .c_f_v$(f%)).0|
000080f0  f2 10 20 20 20 20 20 20  20 20 20 20 20 cd 0d 30  |..           ..0|
00008100  fc 0a 20 20 20 20 20 cd  0d 31 06 09 20 20 20 20  |..     ..1..    |
00008110  cd 0d 31 10 0a 20 20 20  20 20 cd 0d 31 1a 07 20  |..1..     ..1.. |
00008120  20 cd 0d 31 24 09 20 20  20 20 cd 0d 31 2e 0a 20  | ..1$.    ..1.. |
00008130  20 20 20 20 cd 0d 31 38  05 ce 0d 31 42 08 3d 6f  |    ..18...1B.=o|
00008140  6b 25 0d 31 4c 04 0d 31  56 13 dd 20 a4 72 65 63  |k%.1L..1V.. .rec|
00008150  6f 72 64 5f 73 70 61 63  65 0d 31 60 0c ea 20 74  |ord_space.1`.. t|
00008160  6f 74 61 6c 25 0d 31 6a  0e 74 6f 74 61 6c 25 20  |otal%.1j.total% |
00008170  3d 20 30 0d 31 74 19 e3  20 66 25 20 3d 20 30 20  |= 0.1t.. f% = 0 |
00008180  b8 20 6d 61 78 5f 66 69  65 6c 64 73 0d 31 7e 23  |. max_fields.1~#|
00008190  20 20 74 6f 74 61 6c 25  20 3d 20 74 6f 74 61 6c  |  total% = total|
000081a0  25 20 2b 20 a9 63 5f 66  5f 76 24 28 66 25 29 0d  |% + .c_f_v$(f%).|
000081b0  31 88 05 ed 0d 31 92 0b  3d 74 6f 74 61 6c 25 0d  |1....1..=total%.|
000081c0  31 9c 04 0d 31 a6 04 0d  31 b0 12 dd 20 f2 6e 65  |1...1...1... .ne|
000081d0  78 74 5f 72 65 63 6f 72  64 0d 31 ba 18 f2 65 78  |xt_record.1...ex|
000081e0  74 72 61 63 74 5f 72 65  63 6f 72 64 5f 64 61 74  |tract_record_dat|
000081f0  61 0d 31 c4 15 e7 20 a4  76 61 6c 69 64 5f 72 65  |a.1... .valid_re|
00008200  63 6f 72 64 20 8c 0d 31  ce 44 20 e7 20 ac 28 a4  |cord ..1.D . .(.|
00008210  72 65 63 6f 72 64 5f 73  70 61 63 65 20 3d 20 30  |record_space = 0|
00008220  20 80 20 bb 28 24 72 65  63 5f 6e 75 6d 62 65 72  | . .($rec_number|
00008230  25 29 20 3d 20 6e 75 6d  62 65 72 5f 6f 66 5f 72  |%) = number_of_r|
00008240  65 63 6f 72 64 73 25 29  20 8c 0d 31 d8 24 20 20  |ecords%) ..1.$  |
00008250  f2 77 72 69 74 65 5f 72  65 63 6f 72 64 28 bb 28  |.write_record(.(|
00008260  24 72 65 63 5f 6e 75 6d  62 65 72 25 29 29 0d 31  |$rec_number%)).1|
00008270  e2 29 20 20 24 72 65 63  5f 6e 75 6d 62 65 72 25  |.)  $rec_number%|
00008280  20 3d 20 c3 28 bb 28 24  72 65 63 5f 6e 75 6d 62  | = .(.($rec_numb|
00008290  65 72 25 29 2b 31 29 0d  31 ec 2e 20 20 e7 20 bb  |er%)+1).1..  . .|
000082a0  28 24 72 65 63 5f 6e 75  6d 62 65 72 25 29 20 3e  |($rec_number%) >|
000082b0  20 6e 75 6d 62 65 72 5f  6f 66 5f 72 65 63 6f 72  | number_of_recor|
000082c0  64 73 25 20 8c 0d 31 f6  1e 20 20 20 20 20 6e 75  |ds% ..1..     nu|
000082d0  6d 62 65 72 5f 6f 66 5f  72 65 63 6f 72 64 73 25  |mber_of_records%|
000082e0  2b 3d 31 0d 32 00 16 20  20 20 20 20 f2 63 6c 65  |+=1.2..     .cle|
000082f0  61 72 5f 72 65 63 6f 72  64 0d 32 0a 07 20 20 cc  |ar_record.2..  .|
00008300  0d 32 14 26 20 20 20 20  20 f2 72 65 61 64 5f 72  |.2.&     .read_r|
00008310  65 63 6f 72 64 28 bb 28  24 72 65 63 5f 6e 75 6d  |ecord(.($rec_num|
00008320  62 65 72 25 29 29 0d 32  1e 07 20 20 cd 0d 32 28  |ber%)).2..  ..2(|
00008330  06 20 cd 0d 32 32 05 cd  0d 32 3c 13 f2 75 70 64  |. ..22...2<..upd|
00008340  61 74 65 5f 64 69 73 70  6c 61 79 0d 32 46 05 e1  |ate_display.2F..|
00008350  0d 32 50 04 0d 32 5a 16  dd 20 f2 70 72 65 76 69  |.2P..2Z.. .previ|
00008360  6f 75 73 5f 72 65 63 6f  72 64 0d 32 64 18 f2 65  |ous_record.2d..e|
00008370  78 74 72 61 63 74 5f 72  65 63 6f 72 64 5f 64 61  |xtract_record_da|
00008380  74 61 0d 32 6e 15 e7 20  a4 76 61 6c 69 64 5f 72  |ta.2n.. .valid_r|
00008390  65 63 6f 72 64 20 8c 0d  32 78 24 20 20 f2 77 72  |ecord ..2x$  .wr|
000083a0  69 74 65 5f 72 65 63 6f  72 64 28 bb 28 24 72 65  |ite_record(.($re|
000083b0  63 5f 6e 75 6d 62 65 72  25 29 29 0d 32 82 1d 20  |c_number%)).2.. |
000083c0  20 e7 20 bb 28 24 72 65  63 5f 6e 75 6d 62 65 72  | . .($rec_number|
000083d0  25 29 20 3e 20 31 20 8c  0d 32 8c 29 20 20 24 72  |%) > 1 ..2.)  $r|
000083e0  65 63 5f 6e 75 6d 62 65  72 25 20 3d 20 c3 28 bb  |ec_number% = .(.|
000083f0  28 24 72 65 63 5f 6e 75  6d 62 65 72 25 29 2d 31  |($rec_number%)-1|
00008400  29 0d 32 96 23 20 20 f2  72 65 61 64 5f 72 65 63  |).2.#  .read_rec|
00008410  6f 72 64 28 bb 28 24 72  65 63 5f 6e 75 6d 62 65  |ord(.($rec_numbe|
00008420  72 25 29 29 0d 32 a0 07  20 20 cc 0d 32 aa 0a 20  |r%)).2..  ..2.. |
00008430  20 20 20 ef 37 0d 32 b4  07 20 20 cd 0d 32 be 05  |   .7.2..  ..2..|
00008440  cd 0d 32 c8 13 f2 75 70  64 61 74 65 5f 64 69 73  |..2...update_dis|
00008450  70 6c 61 79 0d 32 d2 05  e1 0d 32 dc 04 0d 32 e6  |play.2....2...2.|
00008460  0c dd 20 f2 73 74 61 72  74 0d 32 f0 18 f2 65 78  |.. .start.2...ex|
00008470  74 72 61 63 74 5f 72 65  63 6f 72 64 5f 64 61 74  |tract_record_dat|
00008480  61 0d 32 fa 15 e7 20 a4  76 61 6c 69 64 5f 72 65  |a.2... .valid_re|
00008490  63 6f 72 64 20 8c 0d 33  04 24 20 20 f2 77 72 69  |cord ..3.$  .wri|
000084a0  74 65 5f 72 65 63 6f 72  64 28 bb 28 24 72 65 63  |te_record(.($rec|
000084b0  5f 6e 75 6d 62 65 72 25  29 29 0d 33 0e 1d 20 20  |_number%)).3..  |
000084c0  e7 20 bb 28 24 72 65 63  5f 6e 75 6d 62 65 72 25  |. .($rec_number%|
000084d0  29 20 3e 20 31 20 8c 0d  33 18 19 20 20 24 72 65  |) > 1 ..3..  $re|
000084e0  63 5f 6e 75 6d 62 65 72  25 20 3d 20 c3 28 31 29  |c_number% = .(1)|
000084f0  0d 33 22 23 20 20 f2 72  65 61 64 5f 72 65 63 6f  |.3"#  .read_reco|
00008500  72 64 28 bb 28 24 72 65  63 5f 6e 75 6d 62 65 72  |rd(.($rec_number|
00008510  25 29 29 0d 33 2c 07 20  20 cc 0d 33 36 0a 20 20  |%)).3,.  ..36.  |
00008520  20 20 ef 37 0d 33 40 07  20 20 cd 0d 33 4a 05 cd  |  .7.3@.  ..3J..|
00008530  0d 33 54 13 f2 75 70 64  61 74 65 5f 64 69 73 70  |.3T..update_disp|
00008540  6c 61 79 0d 33 5e 05 e1  0d 33 68 04 0d 33 72 04  |lay.3^...3h..3r.|
00008550  0d 33 7c 04 0d 33 86 04  0d 33 90 12 dd 20 f2 65  |.3|..3...3... .e|
00008560  6e 64 5f 6f 66 5f 66 69  6c 65 0d 33 9a 18 f2 65  |nd_of_file.3...e|
00008570  78 74 72 61 63 74 5f 72  65 63 6f 72 64 5f 64 61  |xtract_record_da|
00008580  74 61 0d 33 a4 15 e7 20  a4 76 61 6c 69 64 5f 72  |ta.3... .valid_r|
00008590  65 63 6f 72 64 20 8c 0d  33 ae 24 20 20 f2 77 72  |ecord ..3.$  .wr|
000085a0  69 74 65 5f 72 65 63 6f  72 64 28 bb 28 24 72 65  |ite_record(.($re|
000085b0  63 5f 6e 75 6d 62 65 72  25 29 29 0d 33 b8 2f 20  |c_number%)).3./ |
000085c0  20 e7 20 bb 28 24 72 65  63 5f 6e 75 6d 62 65 72  | . .($rec_number|
000085d0  25 29 20 20 3c 20 6e 75  6d 62 65 72 5f 6f 66 5f  |%)  < number_of_|
000085e0  72 65 63 6f 72 64 73 25  20 8c 0d 33 c2 2b 20 20  |records% ..3.+  |
000085f0  24 72 65 63 5f 6e 75 6d  62 65 72 25 20 3d 20 c3  |$rec_number% = .|
00008600  28 20 6e 75 6d 62 65 72  5f 6f 66 5f 72 65 63 6f  |( number_of_reco|
00008610  72 64 73 25 29 0d 33 cc  23 20 20 f2 72 65 61 64  |rds%).3.#  .read|
00008620  5f 72 65 63 6f 72 64 28  bb 28 24 72 65 63 5f 6e  |_record(.($rec_n|
00008630  75 6d 62 65 72 25 29 29  0d 33 d6 07 20 20 cc 0d  |umber%)).3..  ..|
00008640  33 e0 0a 20 20 20 20 ef  37 0d 33 ea 07 20 20 cd  |3..    .7.3..  .|
00008650  0d 33 f4 05 cd 0d 33 fe  13 f2 75 70 64 61 74 65  |.3....3...update|
00008660  5f 64 69 73 70 6c 61 79  0d 34 08 05 e1 0d 34 12  |_display.4....4.|
00008670  04 0d 34 1c 15 dd 20 f2  75 70 64 61 74 65 5f 64  |..4... .update_d|
00008680  69 73 70 6c 61 79 0d 34  26 3a 20 20 20 c8 99 22  |isplay.4&:   .."|
00008690  57 69 6d 70 5f 46 6f 72  63 65 52 65 64 72 61 77  |Wimp_ForceRedraw|
000086a0  22 2c 64 69 73 70 6c 61  79 5f 77 69 6e 64 6f 77  |",display_window|
000086b0  25 2c 30 2c 2d 31 30 30  30 2c 31 30 30 30 2c 30  |%,0,-1000,1000,0|
000086c0  0d 34 30 28 20 20 20 c8  99 22 57 69 6d 70 5f 47  |.40(   .."Wimp_G|
000086d0  65 74 43 61 72 65 74 50  6f 73 69 74 69 6f 6e 22  |etCaretPosition"|
000086e0  2c 2c 63 61 72 65 74 25  0d 34 3a 19 20 20 20 77  |,,caret%.4:.   w|
000086f0  69 6e 64 6f 77 25 20 3d  20 63 61 72 65 74 25 21  |indow% = caret%!|
00008700  30 0d 34 44 19 20 20 20  69 63 6f 6e 25 20 20 20  |0.4D.   icon%   |
00008710  3d 20 63 61 72 65 74 25  21 34 0d 34 4e 24 f4 20  |= caret%!4.4N$. |
00008720  20 20 50 52 4f 43 73 65  74 5f 63 61 72 65 74 28  |  PROCset_caret(|
00008730  77 69 6e 64 6f 77 25 2c  69 63 6f 6e 25 29 0d 34  |window%,icon%).4|
00008740  58 05 e1 0d 34 62 04 0d  34 6c 04 0d 34 76 04 0d  |X...4b..4l..4v..|
00008750  34 80 1d dd 20 f2 72 65  61 64 5f 72 65 63 6f 72  |4... .read_recor|
00008760  64 28 70 6f 73 69 74 69  6f 6e 25 29 0d 34 8a 16  |d(position%).4..|
00008770  ea 20 70 25 2c 20 70 6f  69 6e 74 65 72 25 2c 20  |. p%, pointer%, |
00008780  66 25 0d 34 94 11 63 5f  66 5f 76 24 28 29 20 3d  |f%.4..c_f_v$() =|
00008790  20 22 22 0d 34 9e 2a 70  6f 69 6e 74 65 72 25 20  | "".4.*pointer% |
000087a0  3d 20 35 30 30 30 2b 70  6f 73 69 74 69 6f 6e 25  |= 5000+position%|
000087b0  2a 72 65 63 6f 72 64 5f  73 69 7a 65 25 0d 34 a8  |*record_size%.4.|
000087c0  16 cf 23 66 69 6c 65 25  20 3d 20 70 6f 69 6e 74  |..#file% = point|
000087d0  65 72 25 0d 34 b2 12 62  61 64 5f 66 69 65 6c 64  |er%.4..bad_field|
000087e0  25 20 3d 20 a3 0d 34 bc  07 ea 20 85 0d 34 c6 0a  |% = ..4... ..4..|
000087f0  66 25 20 3d 20 30 0d 34  d0 30 c8 95 20 66 25 20  |f% = 0.4.0.. f% |
00008800  3c 28 6e 75 6d 62 65 72  5f 6f 66 5f 66 69 65 6c  |<(number_of_fiel|
00008810  64 73 25 20 20 29 20 20  80 20 ac 20 62 61 64 5f  |ds%  )  . . bad_|
00008820  66 69 65 6c 64 25 0d 34  da 1a 20 20 ee 20 85 20  |field%.4..  . . |
00008830  ea 20 62 61 64 5f 66 69  65 6c 64 25 20 3d 20 b9  |. bad_field% = .|
00008840  0d 34 e4 16 20 20 e7 20  ac 20 62 61 64 5f 66 69  |.4..  . . bad_fi|
00008850  65 6c 64 25 20 8c 0d 34  ee 1c 20 20 20 20 e8 20  |eld% ..4..    . |
00008860  23 66 69 6c 65 25 2c 20  63 5f 66 5f 76 24 28 66  |#file%, c_f_v$(f|
00008870  25 29 0d 34 f8 20 20 20  20 20 70 25 20 3d 64 69  |%).4.     p% =di|
00008880  73 70 6c 61 79 5f 64 61  74 61 25 2b 66 25 2a 33  |splay_data%+f%*3|
00008890  30 30 0d 35 02 17 20 20  20 20 24 70 25 20 3d 63  |00.5..    $p% =c|
000088a0  5f 66 5f 76 24 28 66 25  29 0d 35 0c 0e 20 20 20  |_f_v$(f%).5..   |
000088b0  20 66 25 20 2b 3d 31 0d  35 16 07 20 20 cd 0d 35  | f% +=1.5..  ..5|
000088c0  20 05 ce 0d 35 2a 07 f7  20 85 0d 35 34 05 e1 0d  | ...5*.. ..54...|
000088d0  35 3e 04 0d 35 48 04 0d  35 52 1e dd 20 f2 77 72  |5>..5H..5R.. .wr|
000088e0  69 74 65 5f 72 65 63 6f  72 64 28 70 6f 73 69 74  |ite_record(posit|
000088f0  69 6f 6e 25 29 0d 35 5c  12 ea 20 70 25 2c 20 70  |ion%).5\.. p%, p|
00008900  6f 69 6e 74 65 72 25 0d  35 66 2a 70 6f 69 6e 74  |ointer%.5f*point|
00008910  65 72 25 20 3d 20 35 30  30 30 2b 70 6f 73 69 74  |er% = 5000+posit|
00008920  69 6f 6e 25 2a 72 65 63  6f 72 64 5f 73 69 7a 65  |ion%*record_size|
00008930  25 0d 35 70 16 cf 23 66  69 6c 65 25 20 3d 20 70  |%.5p..#file% = p|
00008940  6f 69 6e 74 65 72 25 0d  35 7a 22 e3 20 66 25 20  |ointer%.5z". f% |
00008950  3d 20 30 20 b8 20 6e 75  6d 62 65 72 5f 6f 66 5f  |= 0 . number_of_|
00008960  66 69 65 6c 64 73 25 2d  31 0d 35 84 19 20 f1 20  |fields%-1.5.. . |
00008970  23 66 69 6c 65 25 2c 20  63 5f 66 5f 76 24 28 66  |#file%, c_f_v$(f|
00008980  25 29 0d 35 8e 05 ed 0d  35 98 05 e1 0d 35 a2 05  |%).5....5....5..|
00008990  20 0d 35 ac 04 0d 35 b6  04 0d 35 c0 16 dd 20 f2  | .5...5...5... .|
000089a0  65 6d 65 72 67 65 6e 63  79 5f 63 6c 6f 73 65 0d  |emergency_close.|
000089b0  35 ca 11 20 20 20 20 66  69 6c 65 25 20 3d 20 30  |5..    file% = 0|
000089c0  0d 35 d4 13 20 20 20 20  6c 6f 61 64 65 64 25 20  |.5..    loaded% |
000089d0  3d 20 a3 0d 35 de 14 20  20 20 20 69 6e 68 69 62  |= ..5..    inhib|
000089e0  69 74 25 20 3d 20 a3 0d  35 e8 26 20 20 20 20 f2  |it% = ..5.&    .|
000089f0  63 6c 6f 73 65 61 77 69  6e 64 6f 77 28 64 69 73  |closeawindow(dis|
00008a00  70 6c 61 79 5f 77 69 6e  64 6f 77 25 29 0d 35 f2  |play_window%).5.|
00008a10  23 20 20 20 20 f2 63 6c  6f 73 65 61 77 69 6e 64  |#    .closeawind|
00008a20  6f 77 28 73 6f 72 74 5f  77 69 6e 64 6f 77 25 29  |ow(sort_window%)|
00008a30  0d 35 fc 25 20 20 20 20  f2 63 6c 6f 73 65 61 77  |.5.%    .closeaw|
00008a40  69 6e 64 6f 77 28 6f 75  74 70 75 74 5f 77 69 6e  |indow(output_win|
00008a50  64 6f 77 25 29 0d 36 06  25 20 20 20 20 f2 63 6c  |dow%).6.%    .cl|
00008a60  6f 73 65 61 77 69 6e 64  6f 77 28 66 69 65 6c 64  |oseawindow(field|
00008a70  73 5f 77 69 6e 64 6f 77  25 29 0d 36 10 27 20 20  |s_window%).6.'  |
00008a80  20 20 f2 63 6c 6f 73 65  61 77 69 6e 64 6f 77 28  |  .closeawindow(|
00008a90  70 61 73 73 77 6f 72 64  5f 77 69 6e 64 6f 77 25  |password_window%|
00008aa0  29 0d 36 1a 25 20 20 20  20 f2 63 6c 6f 73 65 61  |).6.%    .closea|
00008ab0  77 69 6e 64 6f 77 28 73  63 72 65 65 6e 5f 77 69  |window(screen_wi|
00008ac0  6e 64 6f 77 25 29 0d 36  24 23 20 20 20 20 f2 63  |ndow%).6$#    .c|
00008ad0  6c 6f 73 65 61 77 69 6e  64 6f 77 28 73 61 76 65  |loseawindow(save|
00008ae0  5f 77 69 6e 64 6f 77 25  29 0d 36 2e 1e 20 20 20  |_window%).6..   |
00008af0  20 f2 64 65 73 74 72 6f  79 5f 64 69 73 70 6c 61  | .destroy_displa|
00008b00  79 5f 69 63 6f 6e 73 0d  36 38 15 20 20 20 20 f2  |y_icons.68.    .|
00008b10  65 6d 70 74 79 5f 66 69  65 6c 64 73 0d 36 42 26  |empty_fields.6B&|
00008b20  20 20 20 20 f2 63 6c 6f  73 65 61 77 69 6e 64 6f  |    .closeawindo|
00008b30  77 28 6e 65 77 66 69 6c  65 5f 77 69 6e 64 6f 77  |w(newfile_window|
00008b40  25 29 0d 36 4c 25 20 20  20 20 f2 63 6c 6f 73 65  |%).6L%    .close|
00008b50  61 77 69 6e 64 6f 77 28  66 69 65 6c 64 73 5f 77  |awindow(fields_w|
00008b60  69 6e 64 6f 77 25 29 0d  36 56 05 e1 0d 36 60 05  |indow%).6V...6`.|
00008b70  20 0d 36 6a 04 0d 36 74  04 0d 36 7e 16 dd 20 f2  | .6j..6t..6~.. .|
00008b80  63 6c 6f 73 65 5f 64 6f  77 6e 5f 66 69 6c 65 0d  |close_down_file.|
00008b90  36 88 12 e7 20 66 69 6c  65 25 20 3c 3e 20 30 20  |6... file% <> 0 |
00008ba0  8c 0d 36 92 11 20 20 cf  23 66 69 6c 65 25 20 3d  |..6..  .#file% =|
00008bb0  20 30 0d 36 9c 1b 20 20  6e 75 6d 62 65 72 5f 6f  | 0.6..  number_o|
00008bc0  66 5f 66 69 65 6c 64 73  25 20 3d 20 30 0d 36 a6  |f_fields% = 0.6.|
00008bd0  1d 20 20 e3 20 72 65 63  25 20 3d 20 30 20 b8 20  |.  . rec% = 0 . |
00008be0  6d 61 78 5f 66 69 65 6c  64 73 0d 36 b0 1b 20 20  |max_fields.6..  |
00008bf0  e7 20 a9 28 66 24 28 72  65 63 25 2c 30 29 29 20  |. .(f$(rec%,0)) |
00008c00  3e 20 30 20 8c 0d 36 ba  1e 20 20 20 20 20 6e 75  |> 0 ..6..     nu|
00008c10  6d 62 65 72 5f 6f 66 5f  66 69 65 6c 64 73 25 20  |mber_of_fields% |
00008c20  2b 3d 31 0d 36 c4 07 20  20 cd 0d 36 ce 07 20 20  |+=1.6..  ..6..  |
00008c30  ed 0d 36 d8 1a 20 20 e7  20 a4 66 69 65 6c 64 5f  |..6..  . .field_|
00008c40  6c 65 6e 67 74 68 5f 6f  6b 20 8c 0d 36 e2 31 20  |length_ok ..6.1 |
00008c50  20 20 20 e3 20 61 25 20  3d 20 66 69 65 6c 64 5f  |   . a% = field_|
00008c60  64 65 73 25 20 b8 20 66  69 65 6c 64 5f 64 65 73  |des% . field_des|
00008c70  25 20 2b 20 32 31 39 36  20 88 20 34 0d 36 ec 15  |% + 2196 . 4.6..|
00008c80  20 20 20 20 20 20 f1 23  66 69 6c 65 25 2c 21 61  |      .#file%,!a|
00008c90  25 0d 36 f6 09 20 20 20  20 ed 0d 37 00 1b 20 20  |%.6..    ..7..  |
00008ca0  20 20 f1 20 23 66 69 6c  65 25 2c 24 70 61 73 73  |  . #file%,$pass|
00008cb0  77 6f 72 64 25 0d 37 0a  1c 20 20 20 20 f1 20 23  |word%.7..    . #|
00008cc0  66 69 6c 65 25 2c 20 24  66 69 6c 65 6e 61 6d 65  |file%, $filename|
00008cd0  25 0d 37 14 24 20 20 20  20 f1 20 23 66 69 6c 65  |%.7.$    . #file|
00008ce0  25 2c 20 6e 75 6d 62 65  72 5f 6f 66 5f 72 65 63  |%, number_of_rec|
00008cf0  6f 72 64 73 25 0d 37 1e  1e 20 20 20 20 f1 20 23  |ords%.7..    . #|
00008d00  66 69 6c 65 25 2c 20 72  65 63 6f 72 64 5f 73 69  |file%, record_si|
00008d10  7a 65 25 0d 37 28 23 20  20 20 20 f1 20 23 66 69  |ze%.7(#    . #fi|
00008d20  6c 65 25 2c 20 6e 75 6d  62 65 72 5f 6f 66 5f 66  |le%, number_of_f|
00008d30  69 65 6c 64 73 25 0d 37  32 21 20 20 20 20 f1 20  |ields%.72!    . |
00008d40  23 66 69 6c 65 25 2c 20  bb 28 24 72 65 63 5f 6e  |#file%, .($rec_n|
00008d50  75 6d 62 65 72 25 29 0d  37 3c 1f 20 20 20 20 e3  |umber%).7<.    .|
00008d60  20 72 65 63 25 20 3d 20  30 20 b8 20 6d 61 78 5f  | rec% = 0 . max_|
00008d70  66 69 65 6c 64 73 0d 37  46 25 20 20 20 20 20 20  |fields.7F%      |
00008d80  f1 20 23 66 69 6c 65 25  2c 20 66 69 65 6c 64 5f  |. #file%, field_|
00008d90  75 73 65 64 25 28 72 65  63 25 29 0d 37 50 09 20  |used%(rec%).7P. |
00008da0  20 20 20 ed 0d 37 5a 04  0d 37 64 32 20 20 20 20  |   ..7Z..7d2    |
00008db0  e3 20 61 25 20 3d 20 6f  75 74 70 75 74 5f 6c 69  |. a% = output_li|
00008dc0  73 74 25 20 b8 20 6f 75  74 70 75 74 5f 6c 69 73  |st% . output_lis|
00008dd0  74 25 2b 34 39 36 20 88  20 34 0d 37 6e 18 20 20  |t%+496 . 4.7n.  |
00008de0  20 20 20 20 20 20 f1 20  23 66 69 6c 65 25 2c 21  |      . #file%,!|
00008df0  61 25 0d 37 78 09 20 20  20 20 ed 0d 37 82 32 20  |a%.7x.    ..7.2 |
00008e00  20 20 20 e3 20 61 25 20  3d 20 73 65 61 72 63 68  |   . a% = search|
00008e10  5f 6c 69 73 74 25 20 b8  20 73 65 61 72 63 68 5f  |_list% . search_|
00008e20  6c 69 73 74 25 2b 31 39  36 20 88 20 34 0d 37 8c  |list%+196 . 4.7.|
00008e30  17 20 20 20 20 20 20 20  f1 20 23 66 69 6c 65 25  |.       . #file%|
00008e40  2c 21 61 25 0d 37 96 09  20 20 20 20 ed 0d 37 a0  |,!a%.7..    ..7.|
00008e50  30 20 20 20 20 e3 20 61  25 20 3d 20 73 6f 72 74  |0    . a% = sort|
00008e60  5f 66 69 65 6c 64 25 20  b8 20 73 6f 72 74 5f 66  |_field% . sort_f|
00008e70  69 65 6c 64 25 2b 32 39  36 20 88 20 34 0d 37 aa  |ield%+296 . 4.7.|
00008e80  17 20 20 20 20 20 20 20  f1 20 23 66 69 6c 65 25  |.       . #file%|
00008e90  2c 21 61 25 0d 37 b4 09  20 20 20 20 ed 0d 37 be  |,!a%.7..    ..7.|
00008ea0  1c 20 20 20 20 f2 65 78  74 72 61 63 74 5f 72 65  |.    .extract_re|
00008eb0  63 6f 72 64 5f 64 61 74  61 0d 37 c8 26 20 20 20  |cord_data.7.&   |
00008ec0  20 f2 77 72 69 74 65 5f  72 65 63 6f 72 64 28 bb  | .write_record(.|
00008ed0  28 24 72 65 63 5f 6e 75  6d 62 65 72 25 29 29 0d  |($rec_number%)).|
00008ee0  37 d2 10 20 20 20 20 d9  20 23 66 69 6c 65 25 0d  |7..    . #file%.|
00008ef0  37 dc 11 20 20 20 20 66  69 6c 65 25 20 3d 20 30  |7..    file% = 0|
00008f00  0d 37 e6 13 20 20 20 20  6c 6f 61 64 65 64 25 20  |.7..    loaded% |
00008f10  3d 20 a3 0d 37 f0 14 20  20 20 20 69 6e 68 69 62  |= ..7..    inhib|
00008f20  69 74 25 20 3d 20 a3 0d  37 fa 26 20 20 20 20 f2  |it% = ..7.&    .|
00008f30  63 6c 6f 73 65 61 77 69  6e 64 6f 77 28 64 69 73  |closeawindow(dis|
00008f40  70 6c 61 79 5f 77 69 6e  64 6f 77 25 29 0d 38 04  |play_window%).8.|
00008f50  23 20 20 20 20 f2 63 6c  6f 73 65 61 77 69 6e 64  |#    .closeawind|
00008f60  6f 77 28 73 6f 72 74 5f  77 69 6e 64 6f 77 25 29  |ow(sort_window%)|
00008f70  0d 38 0e 25 20 20 20 20  f2 63 6c 6f 73 65 61 77  |.8.%    .closeaw|
00008f80  69 6e 64 6f 77 28 6f 75  74 70 75 74 5f 77 69 6e  |indow(output_win|
00008f90  64 6f 77 25 29 0d 38 18  25 20 20 20 20 f2 63 6c  |dow%).8.%    .cl|
00008fa0  6f 73 65 61 77 69 6e 64  6f 77 28 66 69 65 6c 64  |oseawindow(field|
00008fb0  73 5f 77 69 6e 64 6f 77  25 29 0d 38 22 27 20 20  |s_window%).8"'  |
00008fc0  20 20 f2 63 6c 6f 73 65  61 77 69 6e 64 6f 77 28  |  .closeawindow(|
00008fd0  70 61 73 73 77 6f 72 64  5f 77 69 6e 64 6f 77 25  |password_window%|
00008fe0  29 0d 38 2c 25 20 20 20  20 f2 63 6c 6f 73 65 61  |).8,%    .closea|
00008ff0  77 69 6e 64 6f 77 28 73  63 72 65 65 6e 5f 77 69  |window(screen_wi|
00009000  6e 64 6f 77 25 29 0d 38  36 23 20 20 20 20 f2 63  |ndow%).86#    .c|
00009010  6c 6f 73 65 61 77 69 6e  64 6f 77 28 73 61 76 65  |loseawindow(save|
00009020  5f 77 69 6e 64 6f 77 25  29 0d 38 40 1e 20 20 20  |_window%).8@.   |
00009030  20 f2 64 65 73 74 72 6f  79 5f 64 69 73 70 6c 61  | .destroy_displa|
00009040  79 5f 69 63 6f 6e 73 0d  38 4a 15 20 20 20 20 f2  |y_icons.8J.    .|
00009050  65 6d 70 74 79 5f 66 69  65 6c 64 73 0d 38 54 26  |empty_fields.8T&|
00009060  20 20 20 20 f2 63 6c 6f  73 65 61 77 69 6e 64 6f  |    .closeawindo|
00009070  77 28 6e 65 77 66 69 6c  65 5f 77 69 6e 64 6f 77  |w(newfile_window|
00009080  25 29 0d 38 5e 25 20 20  20 20 f2 63 6c 6f 73 65  |%).8^%    .close|
00009090  61 77 69 6e 64 6f 77 28  66 69 65 6c 64 73 5f 77  |awindow(fields_w|
000090a0  69 6e 64 6f 77 25 29 0d  38 68 07 20 20 cc 0d 38  |indow%).8h.  ..8|
000090b0  72 8e 20 20 20 20 f2 65  72 72 6f 72 5f 6d 65 73  |r.    .error_mes|
000090c0  73 61 67 65 28 22 54 68  65 20 66 69 65 6c 64 20  |sage("The field |
000090d0  64 65 73 63 72 69 70 74  6f 72 20 68 61 73 20 62  |descriptor has b|
000090e0  65 65 6e 20 63 68 61 6e  67 65 64 20 61 6e 64 20  |een changed and |
000090f0  69 73 20 6e 6f 77 20 74  6f 6f 20 6c 6f 6e 67 2e  |is now too long.|
00009100  20 45 69 74 68 65 72 20  72 65 64 75 63 65 20 74  | Either reduce t|
00009110  68 65 20 6e 75 6d 62 65  72 20 6f 66 20 66 69 65  |he number of fie|
00009120  6c 64 73 20 6f 72 20 72  65 64 75 63 65 20 74 68  |lds or reduce th|
00009130  65 69 72 20 6c 65 6e 67  74 68 22 29 0d 38 7c 11  |eir length").8|.|
00009140  20 20 20 20 71 75 69 74  25 20 3d 20 a3 0d 38 86  |    quit% = ..8.|
00009150  07 20 20 cd 0d 38 90 05  cd 0d 38 9a 05 e1 0d 38  |.  ..8....8....8|
00009160  a4 04 0d 38 ae 04 0d 38  b8 04 0d 38 c2 04 0d 38  |...8...8...8...8|
00009170  cc 16 dd 20 a4 66 69 65  6c 64 5f 6c 65 6e 67 74  |... .field_lengt|
00009180  68 5f 6f 6b 0d 38 d6 1e  f2 65 78 74 72 61 63 74  |h_ok.8...extract|
00009190  5f 66 69 65 6c 64 5f 64  65 73 63 72 69 70 74 69  |_field_descripti|
000091a0  6f 6e 0d 38 e0 0e 74 6f  74 61 6c 25 20 3d 20 30  |on.8..total% = 0|
000091b0  0d 38 ea 10 63 6f 6e 74  72 6f 6c 25 20 3d 20 30  |.8..control% = 0|
000091c0  0d 38 f4 19 e3 20 66 25  20 3d 20 30 20 b8 20 6d  |.8... f% = 0 . m|
000091d0  61 78 5f 66 69 65 6c 64  73 0d 38 fe 24 20 20 20  |ax_fields.8.$   |
000091e0  74 6f 74 61 6c 25 20 3d  20 74 6f 74 61 6c 25 20  |total% = total% |
000091f0  2b 20 bb 28 66 24 28 66  25 2c 32 29 29 0d 39 08  |+ .(f$(f%,2)).9.|
00009200  26 20 20 20 e7 20 a9 28  66 24 28 66 25 2c 30 29  |&   . .(f$(f%,0)|
00009210  29 20 3e 20 30 20 8c 20  63 6f 6e 74 72 6f 6c 25  |) > 0 . control%|
00009220  2b 3d 32 0d 39 12 05 ed  0d 39 1c 28 e7 20 74 6f  |+=2.9....9.(. to|
00009230  74 61 6c 25 20 3e 20 72  65 63 6f 72 64 5f 73 69  |tal% > record_si|
00009240  7a 65 25 20 2d 20 63 6f  6e 74 72 6f 6c 25 20 8c  |ze% - control% .|
00009250  0d 39 26 06 3d a3 0d 39  30 05 cc 0d 39 3a 06 3d  |.9&.=..90...9:.=|
00009260  b9 0d 39 44 04 0d 39 4e  04 0d 39 58 15 dd 20 f2  |..9D..9N..9X.. .|
00009270  70 61 73 73 77 6f 72 64  5f 63 68 65 63 6b 0d 39  |password_check.9|
00009280  62 1a 20 20 e7 20 24 70  61 73 73 77 6f 72 64 25  |b.  . $password%|
00009290  20 3c 3e 20 22 22 20 8c  0d 39 6c 1a 20 20 20 20  | <> "" ..9l.    |
000092a0  24 69 6e 5f 70 61 73 73  77 6f 72 64 25 20 3d 20  |$in_password% = |
000092b0  22 22 0d 39 76 26 20 20  20 20 f2 6f 70 65 6e 5f  |"".9v&    .open_|
000092c0  77 69 6e 64 6f 77 28 70  61 73 73 77 6f 72 64 5f  |window(password_|
000092d0  77 69 6e 64 6f 77 25 29  0d 39 80 14 20 20 20 20  |window%).9..    |
000092e0  69 6e 68 69 62 69 74 25  20 3d 20 b9 0d 39 8a 07  |inhibit% = ..9..|
000092f0  20 20 cd 0d 39 94 05 e1  0d 39 9e 04 0d 39 a8 04  |  ..9....9...9..|
00009300  0d 39 b2 04 0d 39 bc 0f  dd 20 f2 70 61 73 73 77  |.9...9... .passw|
00009310  6f 72 64 0d 39 c6 25 20  20 f2 63 6c 6f 73 65 61  |ord.9.%  .closea|
00009320  77 69 6e 64 6f 77 28 70  61 73 73 77 6f 72 64 5f  |window(password_|
00009330  77 69 6e 64 6f 77 25 29  0d 39 d0 2c 20 20 e7 20  |window%).9.,  . |
00009340  c0 24 70 61 73 73 77 6f  72 64 25 2c 34 29 20 3d  |.$password%,4) =|
00009350  20 c0 24 69 6e 5f 70 61  73 73 77 6f 72 64 25 2c  | .$in_password%,|
00009360  34 29 20 8c 0d 39 da 14  20 20 20 20 69 6e 68 69  |4) ..9..    inhi|
00009370  62 69 74 25 20 3d 20 a3  0d 39 e4 25 20 20 20 20  |bit% = ..9.%    |
00009380  f2 6f 70 65 6e 5f 77 69  6e 64 6f 77 28 64 69 73  |.open_window(dis|
00009390  70 6c 61 79 5f 77 69 6e  64 6f 77 25 29 0d 39 ee  |play_window%).9.|
000093a0  07 20 20 cc 0d 39 f8 3a  20 20 20 20 f2 65 72 72  |.  ..9.:    .err|
000093b0  6f 72 5f 6d 65 73 73 61  67 65 28 22 49 6e 63 6f  |or_message("Inco|
000093c0  72 72 65 63 74 20 70 61  73 73 77 6f 72 64 2e 20  |rrect password. |
000093d0  46 69 6c 65 20 63 6c 6f  73 69 6e 67 22 29 0d 3a  |File closing").:|
000093e0  02 18 20 20 20 20 f2 63  6c 6f 73 65 5f 64 6f 77  |..    .close_dow|
000093f0  6e 5f 66 69 6c 65 0d 3a  0c 07 20 20 cd 0d 3a 16  |n_file.:..  ..:.|
00009400  05 e1 0d 3a 20 04 0d 3a  2a 04 0d 3a 34 13 dd 20  |...: ..:*..:4.. |
00009410  a4 75 70 70 65 72 28 74  65 78 74 24 29 0d 3a 3e  |.upper(text$).:>|
00009420  13 ea 20 72 65 73 75 6c  74 24 2c 69 25 2c 63 24  |.. result$,i%,c$|
00009430  0d 3a 48 0e 72 65 73 75  6c 74 24 3d 22 22 0d 3a  |.:H.result$="".:|
00009440  52 15 e3 20 69 25 20 3d  20 31 20 b8 20 a9 74 65  |R.. i% = 1 . .te|
00009450  78 74 24 0d 3a 5c 14 20  63 24 3d c1 74 65 78 74  |xt$.:\. c$=.text|
00009460  24 2c 69 25 2c 31 29 0d  3a 66 2a 20 e7 20 63 24  |$,i%,1).:f* . c$|
00009470  3e 3d 22 61 22 20 80 20  63 24 3c 3d 22 7a 22 20  |>="a" . c$<="z" |
00009480  8c 20 63 24 3d bd 28 97  28 63 24 29 80 26 44 46  |. c$=.(.(c$).&DF|
00009490  29 0d 3a 70 17 20 72 65  73 75 6c 74 24 3d 72 65  |).:p. result$=re|
000094a0  73 75 6c 74 24 2b 63 24  0d 3a 7a 05 ed 0d 3a 84  |sult$+c$.:z...:.|
000094b0  0c 3d 72 65 73 75 6c 74  24 0d 3a 8e 04 0d 3a 98  |.=result$.:...:.|
000094c0  23 dd 20 a4 72 65 70 6c  61 63 65 28 6f 62 6a 65  |#. .replace(obje|
000094d0  63 74 24 2c 74 61 72 67  65 74 24 2c 62 79 24 29  |ct$,target$,by$)|
000094e0  0d 3a a2 17 ea 20 73 74  61 72 74 25 2c 20 70 6f  |.:... start%, po|
000094f0  73 69 74 69 6f 6e 25 0d  3a ac 1e 73 74 61 72 74  |sition%.:..start|
00009500  25 20 3d 20 a7 6f 62 6a  65 63 74 24 2c 74 61 72  |% = .object$,tar|
00009510  67 65 74 24 29 0d 3a b6  0d c8 95 20 73 74 61 72  |get$).:.... star|
00009520  74 25 0d 3a c0 2e 70 6f  73 69 74 69 6f 6e 25 20  |t%.:..position% |
00009530  3d 20 a9 28 6f 62 6a 65  63 74 24 29 2d a9 28 74  |= .(object$)-.(t|
00009540  61 72 67 65 74 24 29 2d  73 74 61 72 74 25 2b 31  |arget$)-start%+1|
00009550  0d 3a ca 38 6f 62 6a 65  63 74 24 20 3d 20 c0 6f  |.:.8object$ = .o|
00009560  62 6a 65 63 74 24 2c 73  74 61 72 74 25 2d 31 29  |bject$,start%-1)|
00009570  2b 62 79 24 2b c2 6f 62  6a 65 63 74 24 2c 70 6f  |+by$+.object$,po|
00009580  73 69 74 69 6f 6e 25 29  0d 3a d4 2c 73 74 61 72  |sition%).:.,star|
00009590  74 25 20 3d 20 a7 6f 62  6a 65 63 74 24 2c 74 61  |t% = .object$,ta|
000095a0  72 67 65 74 24 2c 73 74  61 72 74 25 2b a9 28 62  |rget$,start%+.(b|
000095b0  79 24 29 29 0d 3a de 05  ce 0d 3a e8 0c 3d 6f 62  |y$)).:....:..=ob|
000095c0  6a 65 63 74 24 0d 3a f2  04 0d 3a fc 1a dd 20 a4  |ject$.:...:... .|
000095d0  6f 75 74 70 75 74 5f 75  70 70 65 72 28 74 65 78  |output_upper(tex|
000095e0  74 24 29 0d 3b 06 13 ea  20 72 65 73 75 6c 74 24  |t$).;... result$|
000095f0  2c 69 25 2c 63 24 0d 3b  10 0e 71 75 6f 74 65 25  |,i%,c$.;..quote%|
00009600  20 3d 20 a3 0d 3b 1a 0e  72 65 73 75 6c 74 24 3d  | = ..;..result$=|
00009610  22 22 0d 3b 24 15 e3 20  69 25 20 3d 20 31 20 b8  |"".;$.. i% = 1 .|
00009620  20 a9 74 65 78 74 24 0d  3b 2e 14 20 63 24 3d c1  | .text$.;.. c$=.|
00009630  74 65 78 74 24 2c 69 25  2c 31 29 0d 3b 38 23 20  |text$,i%,1).;8# |
00009640  e7 20 63 24 20 3d 20 bd  33 34 20 8c 20 71 75 6f  |. c$ = .34 . quo|
00009650  74 65 25 20 3d 20 ac 20  71 75 6f 74 65 25 0d 3b  |te% = . quote%.;|
00009660  42 18 20 e7 20 63 24 3d  22 2c 22 20 8c 20 63 24  |B. . c$="," . c$|
00009670  20 3d 20 22 2b 22 0d 3b  4c 3d 20 e7 20 63 24 3d  | = "+".;L= . c$=|
00009680  22 3b 22 20 80 20 69 25  20 3c 20 a9 74 65 78 74  |";" . i% < .text|
00009690  24 20 80 20 69 25 20 3e  20 31 20 8c 20 63 24 3d  |$ . i% > 1 . c$=|
000096a0  22 2b 22 2b bd 33 34 2b  22 20 22 2b bd 33 34 2b  |"+"+.34+" "+.34+|
000096b0  22 2b 22 0d 3b 56 13 20  20 20 e7 20 ac 20 71 75  |"+".;V.   . . qu|
000096c0  6f 74 65 25 20 8c 0d 3b  60 2d 20 20 20 20 e7 20  |ote% ..;`-    . |
000096d0  63 24 3e 3d 22 61 22 20  80 20 63 24 3c 3d 22 7a  |c$>="a" . c$<="z|
000096e0  22 20 8c 20 63 24 3d bd  28 97 28 63 24 29 80 26  |" . c$=.(.(c$).&|
000096f0  44 46 29 0d 3b 6a 08 20  20 20 cd 0d 3b 74 17 20  |DF).;j.   ..;t. |
00009700  72 65 73 75 6c 74 24 3d  72 65 73 75 6c 74 24 2b  |result$=result$+|
00009710  63 24 0d 3b 7e 05 ed 0d  3b 88 0c 3d 72 65 73 75  |c$.;~...;..=resu|
00009720  6c 74 24 0d 3b 92 04 0d  3b 9c 04 0d 3b a6 04 0d  |lt$.;...;...;...|
00009730  3b b0 04 0d 3b ba 04 0d  3b c4 1a dd 20 f2 63 72  |;...;...;... .cr|
00009740  65 61 74 65 5f 66 69 65  6c 64 5f 6f 75 74 70 75  |eate_field_outpu|
00009750  74 0d 3b ce 10 ea 20 66  69 65 6c 64 25 2c 20 69  |t.;... field%, i|
00009760  25 0d 3b d8 14 68 65 61  64 69 6e 67 73 24 28 29  |%.;..headings$()|
00009770  20 3d 20 22 22 0d 3b e2  59 68 65 61 64 69 6e 67  | = "".;.Yheading|
00009780  73 24 28 30 29 3d 20 22  46 69 65 6c 64 20 20 20  |s$(0)= "Field   |
00009790  20 4e 61 6d 65 20 20 20  20 20 20 20 20 20 20 20  | Name           |
000097a0  20 20 20 20 20 54 79 70  65 20 57 69 64 74 68 20  |     Type Width |
000097b0  44 65 63 69 6d 61 6c 73  20 4d 69 6e 69 6d 75 6d  |Decimals Minimum|
000097c0  20 4d 61 78 69 6d 75 6d  20 4c 69 73 74 22 0d 3b  | Maximum List".;|
000097d0  ec 24 e3 20 66 69 65 6c  64 25 20 3d 20 30 20 b8  |.$. field% = 0 .|
000097e0  20 6e 75 6d 62 65 72 5f  6f 66 5f 66 69 65 6c 64  | number_of_field|
000097f0  73 25 0d 3b f6 b9 20 20  68 65 61 64 69 6e 67 73  |s%.;..  headings|
00009800  24 28 66 69 65 6c 64 25  2b 32 29 3d a4 70 61 64  |$(field%+2)=.pad|
00009810  28 c3 28 66 69 65 6c 64  25 2b 31 29 2c 39 29 2b  |(.(field%+1),9)+|
00009820  a4 70 61 64 28 66 24 28  66 69 65 6c 64 25 2c 30  |.pad(f$(field%,0|
00009830  29 2c 32 30 29 2b a4 70  61 64 28 66 24 28 66 69  |),20)+.pad(f$(fi|
00009840  65 6c 64 25 2c 31 29 2c  35 29 2b a4 70 61 64 28  |eld%,1),5)+.pad(|
00009850  66 24 28 66 69 65 6c 64  25 2c 32 29 2c 37 29 2b  |f$(field%,2),7)+|
00009860  a4 70 61 64 28 66 24 28  66 69 65 6c 64 25 2c 33  |.pad(f$(field%,3|
00009870  29 2c 39 29 2b a4 70 61  64 28 66 24 28 66 69 65  |),9)+.pad(f$(fie|
00009880  6c 64 25 2c 34 29 2c 38  29 2b a4 70 61 64 28 66  |ld%,4),8)+.pad(f|
00009890  24 28 66 69 65 6c 64 25  2c 35 29 2c 38 29 2b 66  |$(field%,5),8)+f|
000098a0  24 28 66 69 65 6c 64 25  2c 36 29 0d 3c 00 05 ed  |$(field%,6).<...|
000098b0  0d 3c 0a 05 e1 0d 3c 14  04 0d 3c 1e 1b dd 20 a4  |.<....<...<... .|
000098c0  70 61 64 28 73 74 72 69  6e 67 24 2c 6c 65 6e 67  |pad(string$,leng|
000098d0  74 68 25 29 0d 3c 28 1a  73 74 72 69 6e 67 24 2b  |th%).<(.string$+|
000098e0  3d c4 6c 65 6e 67 74 68  25 2c 22 20 22 29 0d 3c  |=.length%," ").<|
000098f0  32 1f 73 74 72 69 6e 67  24 20 3d 20 c0 73 74 72  |2.string$ = .str|
00009900  69 6e 67 24 2c 6c 65 6e  67 74 68 25 29 0d 3c 3c  |ing$,length%).<<|
00009910  0c 3d 73 74 72 69 6e 67  24 0d 3c 46 04 0d 3c 50  |.=string$.<F..<P|
00009920  04 0d 3c 5a 04 0d 3c 64  04 0d 3c 6e 04 0d 3c 78  |..<Z..<d..<n..<x|
00009930  04 0d 3c 82 12 dd 20 f2  69 6e 73 65 72 74 5f 64  |..<... .insert_d|
00009940  61 74 65 0d 3c 8c 15 ea  20 6c 24 2c 72 24 2c 70  |ate.<... l$,r$,p|
00009950  6f 73 69 74 69 6f 6e 25  0d 3c 96 31 70 6f 73 69  |osition%.<.1posi|
00009960  74 69 6f 6e 25 20 3d 20  a7 73 65 61 72 63 68 5f  |tion% = .search_|
00009970  73 74 72 69 6e 67 24 2c  a4 75 70 70 65 72 28 66  |string$,.upper(f|
00009980  24 28 66 25 2c 30 29 29  29 0d 3c a0 14 c8 95 20  |$(f%,0))).<.... |
00009990  70 6f 73 69 74 69 6f 6e  25 20 3e 20 30 0d 3c aa  |position% > 0.<.|
000099a0  28 20 20 70 6f 73 69 74  69 6f 6e 25 20 3d 20 70  |(  position% = p|
000099b0  6f 73 69 74 69 6f 6e 25  20 2b 20 a9 20 66 24 28  |osition% + . f$(|
000099c0  66 25 2c 30 29 0d 3c b4  6e 20 20 c8 95 20 28 c1  |f%,0).<.n  .. (.|
000099d0  73 65 61 72 63 68 5f 73  74 72 69 6e 67 24 2c 70  |search_string$,p|
000099e0  6f 73 69 74 69 6f 6e 25  2c 31 29 20 3c 22 30 22  |osition%,1) <"0"|
000099f0  20 84 20 c1 73 65 61 72  63 68 5f 73 74 72 69 6e  | . .search_strin|
00009a00  67 24 2c 70 6f 73 69 74  69 6f 6e 25 2c 31 29 20  |g$,position%,1) |
00009a10  3e 22 31 22 29 20 80 20  70 6f 73 69 74 69 6f 6e  |>"1") . position|
00009a20  25 20 3c 20 a9 73 65 61  72 63 68 5f 73 74 72 69  |% < .search_stri|
00009a30  6e 67 24 0d 3c be 21 20  20 20 20 20 70 6f 73 69  |ng$.<.!     posi|
00009a40  74 69 6f 6e 25 20 3d 20  70 6f 73 69 74 69 6f 6e  |tion% = position|
00009a50  25 20 2b 31 0d 3c c8 07  20 20 ce 0d 3c d2 93 20  |% +1.<..  ..<.. |
00009a60  20 73 65 61 72 63 68 5f  73 74 72 69 6e 67 24 20  | search_string$ |
00009a70  3d 20 c0 73 65 61 72 63  68 5f 73 74 72 69 6e 67  |= .search_string|
00009a80  24 2c 70 6f 73 69 74 69  6f 6e 25 2d 31 29 2b 22  |$,position%-1)+"|
00009a90  46 4e 64 61 74 65 28 22  2b bd 33 34 2b c1 73 65  |FNdate("+.34+.se|
00009aa0  61 72 63 68 5f 73 74 72  69 6e 67 24 2c 70 6f 73  |arch_string$,pos|
00009ab0  69 74 69 6f 6e 25 2c 38  29 2b bd 33 34 2b 22 29  |ition%,8)+.34+")|
00009ac0  22 2b c2 73 65 61 72 63  68 5f 73 74 72 69 6e 67  |"+.search_string|
00009ad0  24 2c a9 73 65 61 72 63  68 5f 73 74 72 69 6e 67  |$,.search_string|
00009ae0  24 2d 70 6f 73 69 74 69  6f 6e 25 2d 38 29 0d 3c  |$-position%-8).<|
00009af0  dc 23 6c 24 20 3d 20 c0  73 65 61 72 63 68 5f 73  |.#l$ = .search_s|
00009b00  74 72 69 6e 67 24 2c 70  6f 73 69 74 69 6f 6e 25  |tring$,position%|
00009b10  29 0d 3c e6 35 72 24 20  3d 20 c2 73 65 61 72 63  |).<.5r$ = .searc|
00009b20  68 5f 73 74 72 69 6e 67  24 2c a9 28 73 65 61 72  |h_string$,.(sear|
00009b30  63 68 5f 73 74 72 69 6e  67 24 29 2d 70 6f 73 69  |ch_string$)-posi|
00009b40  74 69 6f 6e 25 29 0d 3c  f0 41 6c 24 3d 20 a4 72  |tion%).<.Al$= .r|
00009b50  65 70 6c 61 63 65 28 6c  24 2c a4 75 70 70 65 72  |eplace(l$,.upper|
00009b60  28 66 24 28 66 25 2c 30  29 29 2c 22 46 4e 64 61  |(f$(f%,0)),"FNda|
00009b70  74 65 28 63 5f 66 5f 76  24 28 22 2b c3 28 66 25  |te(c_f_v$("+.(f%|
00009b80  29 2b 22 29 29 22 29 0d  3c fa 1c 73 65 61 72 63  |)+"))").<..searc|
00009b90  68 5f 73 74 72 69 6e 67  24 20 3d 20 6c 24 20 2b  |h_string$ = l$ +|
00009ba0  20 72 24 0d 3d 04 31 70  6f 73 69 74 69 6f 6e 25  | r$.=.1position%|
00009bb0  20 3d 20 a7 73 65 61 72  63 68 5f 73 74 72 69 6e  | = .search_strin|
00009bc0  67 24 2c a4 75 70 70 65  72 28 66 24 28 66 25 2c  |g$,.upper(f$(f%,|
00009bd0  30 29 29 29 0d 3d 0e 05  ce 0d 3d 18 05 e1 0d 3d  |0))).=....=....=|
00009be0  22 04 0d 3d 2c 04 0d 3d  36 04 0d 3d 40 05 20 0d  |"..=,..=6..=@. .|
00009bf0  3d 4a 04 0d 3d 54 1c dd  20 a4 76 61 6c 69 64 5f  |=J..=T.. .valid_|
00009c00  73 65 61 72 63 68 5f 63  72 69 74 65 72 69 61 0d  |search_criteria.|
00009c10  3d 5e 26 ea 20 74 6f 74  61 6c 25 2c 20 6f 6b 25  |=^&. total%, ok%|
00009c20  2c 20 6c 69 73 74 25 2c  20 64 2c 20 46 49 45 4c  |, list%, d, FIEL|
00009c30  44 4c 49 53 54 0d 3d 68  0b 6f 6b 25 20 3d 20 b9  |DLIST.=h.ok% = .|
00009c40  0d 3d 72 11 46 49 45 4c  44 4c 49 53 54 20 3d 20  |.=r.FIELDLIST = |
00009c50  b9 0d 3d 7c 1c e7 20 a9  20 73 65 61 72 63 68 5f  |..=|.. . search_|
00009c60  73 74 72 69 6e 67 24 20  3d 20 30 20 8c 0d 3d 86  |string$ = 0 ..=.|
00009c70  55 20 20 20 f2 65 72 72  6f 72 5f 6d 65 73 73 61  |U   .error_messa|
00009c80  67 65 28 22 41 20 73 65  61 72 63 68 20 73 74 72  |ge("A search str|
00009c90  69 6e 67 20 6d 75 73 74  20 62 65 20 65 6e 74 65  |ing must be ente|
00009ca0  72 65 64 2e 20 55 73 65  20 41 4c 4c 20 74 6f 20  |red. Use ALL to |
00009cb0  6c 69 73 74 20 61 6c 6c  20 72 65 63 6f 72 64 73  |list all records|
00009cc0  22 29 0d 3d 90 09 6f 6b  25 3d a3 0d 3d 9a 05 cd  |").=..ok%=..=...|
00009cd0  0d 3d a4 0e 74 6f 74 61  6c 25 20 3d 20 30 0d 3d  |.=..total% = 0.=|
00009ce0  ae 16 20 20 20 e3 20 6c  69 73 74 25 20 3d 20 30  |..   . list% = 0|
00009cf0  20 b8 20 35 0d 3d b8 32  20 20 20 20 20 74 6f 74  | . 5.=.2     tot|
00009d00  61 6c 25 20 3d 20 74 6f  74 61 6c 25 20 2b 20 a9  |al% = total% + .|
00009d10  20 28 6f 75 74 70 75 74  5f 6c 69 73 74 24 28 6c  | (output_list$(l|
00009d20  69 73 74 25 29 29 0d 3d  c2 08 20 20 20 ed 0d 3d  |ist%)).=..   ..=|
00009d30  cc 12 e7 20 74 6f 74 61  6c 25 20 3d 20 30 20 8c  |... total% = 0 .|
00009d40  0d 3d d6 09 6f 6b 25 3d  a3 0d 3d e0 54 20 20 20  |.=..ok%=..=.T   |
00009d50  f2 65 72 72 6f 72 5f 6d  65 73 73 61 67 65 28 22  |.error_message("|
00009d60  41 74 20 6c 65 61 73 74  20 6f 6e 65 20 6f 66 20  |At least one of |
00009d70  74 68 65 20 6f 75 74 70  75 74 20 6c 69 6e 65 73  |the output lines|
00009d80  20 6d 75 73 74 20 63 6f  6e 74 61 69 6e 20 61 20  | must contain a |
00009d90  66 69 65 6c 64 20 6e 61  6d 65 2e 22 29 0d 3d ea  |field name.").=.|
00009da0  05 cd 0d 3d f4 07 ea 20  85 0d 3d fe 4e ee 20 85  |...=... ..=.N. .|
00009db0  20 ea 20 6f 6b 25 20 3d  20 a3 20 3a f2 65 72 72  | . ok% = . :.err|
00009dc0  6f 72 5f 6d 65 73 73 61  67 65 28 22 54 68 65 20  |or_message("The |
00009dd0  73 65 61 72 63 68 20 73  74 72 69 6e 67 20 63 6f  |search string co|
00009de0  6e 74 61 69 6e 73 20 61  20 73 79 6e 74 61 78 20  |ntains a syntax |
00009df0  65 72 72 6f 72 22 29 0d  3e 08 1f e7 20 6f 6b 25  |error").>... ok%|
00009e00  20 8c 20 64 3d a0 28 73  65 61 72 63 68 5f 73 74  | . d=.(search_st|
00009e10  72 69 6e 67 24 29 0d 3e  12 07 f7 20 85 0d 3e 1c  |ring$).>... ..>.|
00009e20  08 3d 6f 6b 25 0d 3e 26  05 20 0d 3e 30 0d dd 20  |.=ok%.>&. .>0.. |
00009e30  f2 73 63 72 65 65 6e 0d  3e 3a 0e 65 72 72 6f 72  |.screen.>:.error|
00009e40  25 20 3d 20 a3 0d 3e 44  18 f2 65 78 74 72 61 63  |% = ..>D..extrac|
00009e50  74 5f 72 65 63 6f 72 64  5f 64 61 74 61 0d 3e 4e  |t_record_data.>N|
00009e60  15 e7 20 a4 76 61 6c 69  64 5f 72 65 63 6f 72 64  |.. .valid_record|
00009e70  20 8c 0d 3e 58 3f 20 20  f2 77 72 69 74 65 5f 72  | ..>X?  .write_r|
00009e80  65 63 6f 72 64 28 bb 28  24 72 65 63 5f 6e 75 6d  |ecord(.($rec_num|
00009e90  62 65 72 25 29 29 20 3a  20 f4 20 73 61 76 65 20  |ber%)) : . save |
00009ea0  74 68 65 20 6c 61 74 65  73 74 20 72 65 63 6f 72  |the latest recor|
00009eb0  64 0d 3e 62 21 20 20 e7  20 a4 65 78 74 72 61 63  |d.>b!  . .extrac|
00009ec0  74 5f 6f 75 74 70 75 74  5f 6c 69 73 74 5f 6f 6b  |t_output_list_ok|
00009ed0  20 8c 0d 3e 6c 22 20 20  e7 20 a4 63 72 65 61 74  | ..>l"  . .creat|
00009ee0  65 5f 73 65 61 72 63 68  5f 73 74 72 69 6e 67 5f  |e_search_string_|
00009ef0  6f 6b 20 8c 0d 3e 76 20  20 20 e7 20 a4 76 61 6c  |ok ..>v   . .val|
00009f00  69 64 5f 73 65 61 72 63  68 5f 63 72 69 74 65 72  |id_search_criter|
00009f10  69 61 20 8c 0d 3e 80 15  20 20 e3 20 6c 69 73 74  |ia ..>..  . list|
00009f20  25 20 3d 20 30 20 b8 20  35 0d 3e 8a 2c 20 20 20  |% = 0 . 5.>.,   |
00009f30  20 70 6f 69 6e 74 65 72  25 20 3d 20 6f 75 74 70  | pointer% = outp|
00009f40  75 74 5f 64 69 73 70 6c  61 79 25 2b 6c 69 73 74  |ut_display%+list|
00009f50  25 2a 33 30 30 0d 3e 94  16 20 20 20 20 24 70 6f  |%*300.>..    $po|
00009f60  69 6e 74 65 72 25 20 3d  20 22 22 0d 3e 9e 07 20  |inter% = "".>.. |
00009f70  20 ed 0d 3e a8 22 20 20  f2 6f 70 65 6e 5f 77 69  | ..>."  .open_wi|
00009f80  6e 64 6f 77 28 73 63 72  65 65 6e 5f 77 69 6e 64  |ndow(screen_wind|
00009f90  6f 77 25 29 0d 3e b2 0e  20 20 72 65 63 25 20 3d  |ow%).>..  rec% =|
00009fa0  20 31 0d 3e bc 10 20 20  6d 61 74 63 68 25 20 3d  | 1.>..  match% =|
00009fb0  20 30 0d 3e c6 1a 20 20  24 6f 75 74 70 75 74 5f  | 0.>..  $output_|
00009fc0  72 65 63 25 20 3d 20 c3  72 65 63 25 0d 3e d0 19  |rec% = .rec%.>..|
00009fd0  20 20 24 6d 61 74 63 68  65 73 25 20 3d 20 c3 6d  |  $matches% = .m|
00009fe0  61 74 63 68 25 0d 3e da  37 20 20 c8 99 22 57 69  |atch%.>.7  .."Wi|
00009ff0  6d 70 5f 46 6f 72 63 65  52 65 64 72 61 77 22 2c  |mp_ForceRedraw",|
0000a000  73 63 72 65 65 6e 5f 77  69 6e 64 6f 77 25 2c 30  |screen_window%,0|
0000a010  2c 2d 35 30 30 2c 34 30  30 30 2c 30 0d 3e e4 11  |,-500,4000,0.>..|
0000a020  20 20 65 73 63 61 70 65  25 20 3d 20 a3 0d 3e ee  |  escape% = ..>.|
0000a030  0e 20 20 f2 70 6f 6c 6c  28 30 29 0d 3e f8 2f 20  |.  .poll(0).>./ |
0000a040  20 c8 95 20 72 65 63 25  20 3c 3d 20 6e 75 6d 62  | .. rec% <= numb|
0000a050  65 72 5f 6f 66 5f 72 65  63 6f 72 64 73 25 20 80  |er_of_records% .|
0000a060  20 ac 20 65 73 63 61 70  65 25 0d 3f 02 1a 20 20  | . escape%.?..  |
0000a070  20 20 f2 72 65 61 64 5f  72 65 63 6f 72 64 28 72  |  .read_record(r|
0000a080  65 63 25 29 0d 3f 0c 4c  20 20 20 20 e7 20 ac 20  |ec%).?.L    . . |
0000a090  a4 69 63 6f 6e 5f 73 65  74 28 6f 75 74 70 75 74  |.icon_set(output|
0000a0a0  5f 77 69 6e 64 6f 77 25  2c 63 61 73 65 5f 73 65  |_window%,case_se|
0000a0b0  6e 73 5f 69 63 6f 6e 25  29 20 8c 20 f2 63 6f 6e  |ns_icon%) . .con|
0000a0c0  76 65 72 74 5f 72 65 63  6f 72 64 5f 63 61 73 65  |vert_record_case|
0000a0d0  0d 3f 16 1d 20 20 20 20  e7 20 a0 28 73 65 61 72  |.?..    . .(sear|
0000a0e0  63 68 5f 73 74 72 69 6e  67 24 29 20 8c 0d 3f 20  |ch_string$) ..? |
0000a0f0  3e 20 20 20 20 f2 72 65  61 64 5f 72 65 63 6f 72  |>    .read_recor|
0000a100  64 28 72 65 63 25 29 20  3a 20 f4 20 62 65 63 61  |d(rec%) : . beca|
0000a110  75 73 65 20 74 68 65 20  63 61 73 65 20 6d 61 79  |use the case may|
0000a120  20 62 65 20 63 68 61 6e  67 65 64 0d 3f 2a 39 20  | be changed.?*9 |
0000a130  20 20 20 e7 20 a4 69 63  6f 6e 5f 73 65 74 28 6f  |   . .icon_set(o|
0000a140  75 74 70 75 74 5f 77 69  6e 64 6f 77 25 2c 74 61  |utput_window%,ta|
0000a150  62 5f 69 63 6f 6e 25 29  20 8c 20 f2 74 61 62 75  |b_icon%) . .tabu|
0000a160  6c 61 74 65 0d 3f 34 14  20 20 20 20 20 20 6d 61  |late.?4.      ma|
0000a170  74 63 68 25 20 2b 3d 31  0d 3f 3e 1e 20 20 20 20  |tch% +=1.?>.    |
0000a180  20 20 24 6f 75 74 70 75  74 5f 72 65 63 25 20 3d  |  $output_rec% =|
0000a190  20 c3 72 65 63 25 0d 3f  48 1d 20 20 20 20 20 20  | .rec%.?H.      |
0000a1a0  24 6d 61 74 63 68 65 73  25 20 3d 20 c3 6d 61 74  |$matches% = .mat|
0000a1b0  63 68 25 0d 3f 52 1a 20  20 20 20 20 20 20 e3 20  |ch%.?R.       . |
0000a1c0  6c 69 73 74 25 20 3d 20  30 20 b8 20 35 0d 3f 5c  |list% = 0 . 5.?\|
0000a1d0  30 20 20 20 20 20 20 20  20 70 6f 69 6e 74 65 72  |0        pointer|
0000a1e0  25 20 3d 20 6f 75 74 70  75 74 5f 64 69 73 70 6c  |% = output_displ|
0000a1f0  61 79 25 2b 6c 69 73 74  25 2a 33 30 30 0d 3f 66  |ay%+list%*300.?f|
0000a200  29 20 20 20 20 20 20 20  20 e7 20 a9 28 6f 75 74  |)        . .(out|
0000a210  70 75 74 5f 6c 69 73 74  24 28 6c 69 73 74 25 29  |put_list$(list%)|
0000a220  29 20 3e 30 20 8c 0d 3f  70 16 20 20 20 20 20 20  |) >0 ..?p.      |
0000a230  20 20 20 20 f2 64 6f 5f  6c 69 73 74 0d 3f 7a 0d  |    .do_list.?z.|
0000a240  20 20 20 20 20 20 20 20  cc 0d 3f 84 1c 20 20 20  |        ..?..   |
0000a250  20 20 20 20 20 20 20 24  70 6f 69 6e 74 65 72 25  |       $pointer%|
0000a260  20 3d 20 22 22 0d 3f 8e  0e 20 20 20 20 20 20 20  | = "".?..       |
0000a270  20 20 cd 0d 3f 98 0c 20  20 20 20 20 20 20 ed 0d  |  ..?..       ..|
0000a280  3f a2 3b 20 20 20 20 20  20 c8 99 22 57 69 6d 70  |?.;      .."Wimp|
0000a290  5f 46 6f 72 63 65 52 65  64 72 61 77 22 2c 73 63  |_ForceRedraw",sc|
0000a2a0  72 65 65 6e 5f 77 69 6e  64 6f 77 25 2c 30 2c 2d  |reen_window%,0,-|
0000a2b0  35 30 30 2c 34 30 30 30  2c 30 0d 3f ac 0b 20 20  |500,4000,0.?..  |
0000a2c0  20 20 20 20 f5 0d 3f b6  15 20 20 20 20 20 20 20  |    ..?..       |
0000a2d0  20 f2 67 6c 61 73 73 28  b9 29 0d 3f c0 14 20 20  | .glass(.).?..  |
0000a2e0  20 20 20 20 20 20 c8 97  20 78 2c 79 2c 62 0d 3f  |      .. x,y,b.?|
0000a2f0  ca 19 20 20 20 20 20 20  fd 20 62 20 3d 20 30 20  |..      . b = 0 |
0000a300  84 20 62 20 3d 20 35 0d  3f d4 13 20 20 20 20 20  |. b = 5.?..     |
0000a310  20 f2 67 6c 61 73 73 28  a3 29 0d 3f de 09 20 20  | .glass(.).?..  |
0000a320  20 20 cc 0d 3f e8 1e 20  20 20 20 20 20 24 6f 75  |  ..?..      $ou|
0000a330  74 70 75 74 5f 72 65 63  25 20 3d 20 c3 72 65 63  |tput_rec% = .rec|
0000a340  25 0d 3f f2 3d 20 20 20  20 20 20 c8 99 22 57 69  |%.?.=      .."Wi|
0000a350  6d 70 5f 46 6f 72 63 65  52 65 64 72 61 77 22 2c  |mp_ForceRedraw",|
0000a360  73 63 72 65 65 6e 5f 77  69 6e 64 6f 77 25 2c 36  |screen_window%,6|
0000a370  32 30 2c 2d 36 32 2c 37  37 30 2c 2d 31 34 0d 3f  |20,-62,770,-14.?|
0000a380  fc 09 20 20 20 20 cd 0d  40 06 10 20 20 20 20 72  |..    ..@..    r|
0000a390  65 63 25 20 2b 3d 31 0d  40 10 10 20 20 20 20 f2  |ec% +=1.@..    .|
0000a3a0  70 6f 6c 6c 28 30 29 0d  40 1a 04 0d 40 24 07 20  |poll(0).@...@$. |
0000a3b0  20 ce 0d 40 2e 40 20 20  f2 72 65 61 64 5f 72 65  | ..@.@  .read_re|
0000a3c0  63 6f 72 64 28 bb 28 24  72 65 63 5f 6e 75 6d 62  |cord(.($rec_numb|
0000a3d0  65 72 25 29 29 20 3a 20  f4 20 72 65 6c 6f 61 64  |er%)) : . reload|
0000a3e0  20 74 68 65 20 6c 61 74  65 73 74 20 72 65 63 6f  | the latest reco|
0000a3f0  72 64 0d 40 38 12 20 20  e7 20 ac 20 65 72 72 6f  |rd.@8.  . . erro|
0000a400  72 25 20 8c 0d 40 42 12  20 20 e7 20 65 73 63 61  |r% ..@B.  . esca|
0000a410  70 65 25 20 20 8c 0d 40  4c 64 20 20 20 20 20 20  |pe%  ..@Ld      |
0000a420  f2 6d 65 73 73 61 67 65  28 22 53 74 6f 70 20 73  |.message("Stop s|
0000a430  65 6c 65 63 74 65 64 2e  20 53 65 61 72 63 68 20  |elected. Search |
0000a440  69 6e 63 6f 6d 70 6c 65  74 65 2e 20 22 2b c3 28  |incomplete. "+.(|
0000a450  6d 61 74 63 68 25 29 2b  22 20 6d 61 74 63 68 65  |match%)+" matche|
0000a460  73 20 68 61 76 65 20 62  65 65 6e 20 66 6f 75 6e  |s have been foun|
0000a470  64 20 73 6f 20 66 61 72  22 29 0d 40 56 09 20 20  |d so far").@V.  |
0000a480  20 20 cc 0d 40 60 4c 20  20 20 20 20 20 f2 6d 65  |  ..@`L      .me|
0000a490  73 73 61 67 65 28 22 53  65 61 72 63 68 20 63 6f  |ssage("Search co|
0000a4a0  6d 70 6c 65 74 65 2e 20  22 2b c3 28 6d 61 74 63  |mplete. "+.(matc|
0000a4b0  68 25 29 2b 22 20 6d 61  74 63 68 65 73 20 68 61  |h%)+" matches ha|
0000a4c0  76 65 20 62 65 65 6e 20  66 6f 75 6e 64 22 29 0d  |ve been found").|
0000a4d0  40 6a 07 20 20 cd 0d 40  74 07 20 20 cd 0d 40 7e  |@j.  ..@t.  ..@~|
0000a4e0  07 20 20 cd 0d 40 88 23  20 20 f2 63 6c 6f 73 65  |.  ..@.#  .close|
0000a4f0  61 77 69 6e 64 6f 77 28  73 63 72 65 65 6e 5f 77  |awindow(screen_w|
0000a500  69 6e 64 6f 77 25 29 0d  40 92 05 cd 0d 40 9c 05  |indow%).@....@..|
0000a510  cd 0d 40 a6 05 cd 0d 40  b0 1f f2 63 6c 6f 73 65  |..@....@...close|
0000a520  61 77 69 6e 64 6f 77 28  73 61 76 65 5f 77 69 6e  |awindow(save_win|
0000a530  64 6f 77 25 29 0d 40 ba  05 e1 0d 40 c4 04 0d 40  |dow%).@....@...@|
0000a540  ce 05 20 0d 40 d8 15 dd  20 f2 62 75 69 6c 64 5f  |.. .@... .build_|
0000a550  68 65 61 64 69 6e 67 73  0d 40 e2 1e ea 20 69 25  |headings.@... i%|
0000a560  2c 70 6f 69 6e 74 65 72  25 2c 20 70 72 69 6e 74  |,pointer%, print|
0000a570  5f 74 69 6d 65 24 0d 40  ec 15 20 20 21 64 61 74  |_time$.@..  !dat|
0000a580  65 5f 73 74 61 6d 70 25  3d 20 33 0d 40 f6 20 20  |e_stamp%= 3.@.  |
0000a590  20 c8 99 22 4f 53 5f 57  6f 72 64 22 2c 31 34 2c  | .."OS_Word",14,|
0000a5a0  64 61 74 65 5f 73 74 61  6d 70 25 0d 41 00 44 20  |date_stamp%.A.D |
0000a5b0  20 c8 99 22 4f 53 5f 43  6f 6e 76 65 72 74 53 74  | .."OS_ConvertSt|
0000a5c0  61 6e 64 61 72 64 44 61  74 65 41 6e 64 54 69 6d  |andardDateAndTim|
0000a5d0  65 22 2c 64 61 74 65 5f  73 74 61 6d 70 25 2c 63  |e",date_stamp%,c|
0000a5e0  72 65 61 74 65 5f 64 61  74 65 25 2c 31 30 30 0d  |reate_date%,100.|
0000a5f0  41 0a 25 20 20 70 72 69  6e 74 5f 74 69 6d 65 24  |A.%  print_time$|
0000a600  20 3d c0 24 63 72 65 61  74 65 5f 64 61 74 65 25  | =.$create_date%|
0000a610  2c 32 30 29 0d 41 14 16  20 20 68 65 61 64 69 6e  |,20).A..  headin|
0000a620  67 73 24 28 29 20 3d 20  22 22 0d 41 1e 27 20 20  |gs$() = "".A.'  |
0000a630  68 65 61 64 69 6e 67 73  24 28 30 29 3d 20 22 43  |headings$(0)= "C|
0000a640  61 72 64 62 61 73 65 20  50 72 69 6e 74 6f 75 74  |ardbase Printout|
0000a650  22 0d 41 28 38 20 20 68  65 61 64 69 6e 67 73 24  |".A(8  headings$|
0000a660  28 32 29 3d 20 22 46 69  6c 65 6e 61 6d 65 20 20  |(2)= "Filename  |
0000a670  20 20 20 20 20 3a 20 20  20 20 20 20 20 22 2b 24  |     :       "+$|
0000a680  66 69 6c 65 6e 61 6d 65  25 0d 41 32 3a 20 20 68  |filename%.A2:  h|
0000a690  65 61 64 69 6e 67 73 24  28 33 29 3d 20 22 54 69  |eadings$(3)= "Ti|
0000a6a0  6d 65 20 63 72 65 61 74  65 64 20 20 20 3a 20 20  |me created   :  |
0000a6b0  20 20 20 20 20 22 2b 63  72 65 61 74 65 5f 64 61  |     "+create_da|
0000a6c0  74 65 24 0d 41 3c 39 20  20 68 65 61 64 69 6e 67  |te$.A<9  heading|
0000a6d0  73 24 28 34 29 3d 20 22  54 69 6d 65 20 70 72 69  |s$(4)= "Time pri|
0000a6e0  6e 74 65 64 20 20 20 3a  20 20 20 20 20 20 20 22  |nted   :       "|
0000a6f0  2b 70 72 69 6e 74 5f 74  69 6d 65 24 0d 41 46 4e  |+print_time$.AFN|
0000a700  20 20 68 65 61 64 69 6e  67 73 24 28 35 29 3d 20  |  headings$(5)= |
0000a710  22 46 69 6c 65 20 73 69  7a 65 20 20 20 20 20 20  |"File size      |
0000a720  3a 20 20 20 20 20 20 20  22 2b c3 28 6e 75 6d 62  |:       "+.(numb|
0000a730  65 72 5f 6f 66 5f 72 65  63 6f 72 64 73 25 29 2b  |er_of_records%)+|
0000a740  22 20 72 65 63 6f 72 64  73 22 0d 41 50 33 20 20  |" records".AP3  |
0000a750  e7 20 a4 69 63 6f 6e 5f  73 65 74 28 6f 75 74 70  |. .icon_set(outp|
0000a760  75 74 5f 77 69 6e 64 6f  77 25 2c 63 61 73 65 5f  |ut_window%,case_|
0000a770  73 65 6e 73 5f 69 63 6f  6e 25 29 20 8c 0d 41 5a  |sens_icon%) ..AZ|
0000a780  32 20 20 20 20 68 65 61  64 69 6e 67 73 24 28 36  |2    headings$(6|
0000a790  29 20 3d 20 22 43 61 73  65 20 73 65 6e 73 69 74  |) = "Case sensit|
0000a7a0  69 76 65 20 3a 20 20 20  20 20 20 20 4f 4e 22 0d  |ive :       ON".|
0000a7b0  41 64 07 20 20 cc 0d 41  6e 33 20 20 20 20 68 65  |Ad.  ..An3    he|
0000a7c0  61 64 69 6e 67 73 24 28  36 29 20 3d 20 22 43 61  |adings$(6) = "Ca|
0000a7d0  73 65 20 73 65 6e 73 69  74 69 76 65 20 3a 20 20  |se sensitive :  |
0000a7e0  20 20 20 20 20 4f 46 46  22 0d 41 78 07 20 20 cd  |     OFF".Ax.  .|
0000a7f0  0d 41 82 2d 20 20 e7 20  a4 69 63 6f 6e 5f 73 65  |.A.-  . .icon_se|
0000a800  74 28 6f 75 74 70 75 74  5f 77 69 6e 64 6f 77 25  |t(output_window%|
0000a810  2c 74 61 62 5f 69 63 6f  6e 25 29 20 8c 0d 41 8c  |,tab_icon%) ..A.|
0000a820  32 20 20 20 20 68 65 61  64 69 6e 67 73 24 28 37  |2    headings$(7|
0000a830  29 20 3d 20 22 54 61 62  75 6c 61 74 69 6f 6e 20  |) = "Tabulation |
0000a840  20 20 20 20 3a 20 20 20  20 20 20 20 4f 4e 22 0d  |    :       ON".|
0000a850  41 96 07 20 20 cc 0d 41  a0 33 20 20 20 20 68 65  |A..  ..A.3    he|
0000a860  61 64 69 6e 67 73 24 28  37 29 20 3d 20 22 54 61  |adings$(7) = "Ta|
0000a870  62 75 6c 61 74 69 6f 6e  20 20 20 20 20 3a 20 20  |bulation     :  |
0000a880  20 20 20 20 20 4f 46 46  22 0d 41 aa 07 20 20 cd  |     OFF".A..  .|
0000a890  0d 41 b4 3c 20 20 68 65  61 64 69 6e 67 73 24 28  |.A.<  headings$(|
0000a8a0  38 29 20 3d 20 22 53 65  61 72 63 68 20 73 74 72  |8) = "Search str|
0000a8b0  69 6e 67 20 20 3a 20 20  20 20 20 20 20 22 2b 24  |ing  :       "+$|
0000a8c0  73 65 61 72 63 68 5f 6c  69 73 74 25 0d 41 be 12  |search_list%.A..|
0000a8d0  20 20 e3 20 69 25 20 3d  20 30 20 b8 20 35 0d 41  |  . i% = 0 . 5.A|
0000a8e0  c8 25 20 20 20 20 70 6f  69 6e 74 65 72 25 20 3d  |.%    pointer% =|
0000a8f0  20 6f 75 74 70 75 74 5f  6c 69 73 74 25 2b 69 25  | output_list%+i%|
0000a900  2a 37 30 0d 41 d2 3d 20  20 20 20 68 65 61 64 69  |*70.A.=    headi|
0000a910  6e 67 73 24 28 39 2b 69  25 29 20 3d 20 22 4c 69  |ngs$(9+i%) = "Li|
0000a920  6e 65 20 78 20 20 20 20  20 20 20 20 20 3a 20 20  |ne x         :  |
0000a930  20 20 20 20 20 22 2b 24  70 6f 69 6e 74 65 72 25  |     "+$pointer%|
0000a940  0d 41 dc 26 20 20 20 20  c1 68 65 61 64 69 6e 67  |.A.&    .heading|
0000a950  73 24 28 39 2b 69 25 29  2c 36 2c 31 29 3d 20 c3  |s$(9+i%),6,1)= .|
0000a960  28 69 25 2b 31 29 0d 41  e6 07 20 20 ed 0d 41 f0  |(i%+1).A..  ..A.|
0000a970  05 e1 0d 41 fa 04 0d 42  04 0e dd 20 f2 70 72 69  |...A...B... .pri|
0000a980  6e 74 65 72 0d 42 0e 08  ea 20 69 25 0d 42 18 0e  |nter.B... i%.B..|
0000a990  65 72 72 6f 72 25 20 3d  20 a3 0d 42 22 13 e7 20  |error% = ..B".. |
0000a9a0  a4 70 72 69 6e 74 65 72  5f 6f 6e 20 8c 0d 42 2c  |.printer_on ..B,|
0000a9b0  29 20 20 20 e7 20 c0 24  73 65 61 72 63 68 5f 6c  |)   . .$search_l|
0000a9c0  69 73 74 25 2c 39 29 20  3d 22 66 69 65 6c 64 6c  |ist%,9) ="fieldl|
0000a9d0  69 73 74 22 20 8c 0d 42  36 25 20 20 20 20 20 f2  |ist" ..B6%     .|
0000a9e0  77 72 69 74 65 5f 66 69  65 6c 64 5f 6c 69 73 74  |write_field_list|
0000a9f0  5f 74 6f 5f 70 72 69 6e  74 65 72 0d 42 40 08 20  |_to_printer.B@. |
0000aa00  20 20 cc 0d 42 4a 1d 20  20 20 20 20 f2 65 78 74  |  ..BJ.     .ext|
0000aa10  72 61 63 74 5f 72 65 63  6f 72 64 5f 64 61 74 61  |ract_record_data|
0000aa20  0d 42 54 1a 20 20 20 20  20 e7 20 a4 76 61 6c 69  |.BT.     . .vali|
0000aa30  64 5f 72 65 63 6f 72 64  20 8c 0d 42 5e 44 20 20  |d_record ..B^D  |
0000aa40  20 20 20 20 20 f2 77 72  69 74 65 5f 72 65 63 6f  |     .write_reco|
0000aa50  72 64 28 bb 28 24 72 65  63 5f 6e 75 6d 62 65 72  |rd(.($rec_number|
0000aa60  25 29 29 20 3a 20 f4 20  73 61 76 65 20 74 68 65  |%)) : . save the|
0000aa70  20 6c 61 74 65 73 74 20  72 65 63 6f 72 64 0d 42  | latest record.B|
0000aa80  68 26 20 20 20 20 20 20  20 e7 20 a4 65 78 74 72  |h&       . .extr|
0000aa90  61 63 74 5f 6f 75 74 70  75 74 5f 6c 69 73 74 5f  |act_output_list_|
0000aaa0  6f 6b 20 8c 0d 42 72 27  20 20 20 20 20 20 20 e7  |ok ..Br'       .|
0000aab0  20 a4 63 72 65 61 74 65  5f 73 65 61 72 63 68 5f  | .create_search_|
0000aac0  73 74 72 69 6e 67 5f 6f  6b 20 8c 0d 42 7c 25 20  |string_ok ..B|% |
0000aad0  20 20 20 20 20 20 e7 20  a4 76 61 6c 69 64 5f 73  |      . .valid_s|
0000aae0  65 61 72 63 68 5f 63 72  69 74 65 72 69 61 20 8c  |earch_criteria .|
0000aaf0  0d 42 86 1c 20 20 20 20  20 20 20 20 20 e3 20 6c  |.B..         . l|
0000ab00  69 73 74 25 20 3d 20 30  20 b8 20 35 0d 42 90 33  |ist% = 0 . 5.B.3|
0000ab10  20 20 20 20 20 20 20 20  20 20 20 70 6f 69 6e 74  |           point|
0000ab20  65 72 25 20 3d 20 6f 75  74 70 75 74 5f 64 69 73  |er% = output_dis|
0000ab30  70 6c 61 79 25 2b 6c 69  73 74 25 2a 33 30 30 0d  |play%+list%*300.|
0000ab40  42 9a 1d 20 20 20 20 20  20 20 20 20 20 20 24 70  |B..           $p|
0000ab50  6f 69 6e 74 65 72 25 20  3d 20 22 22 0d 42 a4 0e  |ointer% = "".B..|
0000ab60  20 20 20 20 20 20 20 20  20 ed 0d 42 ae 39 20 20  |         ..B.9  |
0000ab70  20 20 20 20 20 20 20 e7  20 a4 69 63 6f 6e 5f 73  |       . .icon_s|
0000ab80  65 74 28 6f 75 74 70 75  74 5f 77 69 6e 64 6f 77  |et(output_window|
0000ab90  25 2c 68 65 61 64 69 6e  67 73 5f 69 63 6f 6e 25  |%,headings_icon%|
0000aba0  29 20 8c 0d 42 b8 1e 20  20 20 20 20 20 20 20 20  |) ..B..         |
0000abb0  20 20 f2 62 75 69 6c 64  5f 68 65 61 64 69 6e 67  |  .build_heading|
0000abc0  73 0d 42 c2 1c 20 20 20  20 20 20 20 20 20 20 20  |s.B..           |
0000abd0  e3 20 69 25 20 3d 20 30  20 b8 20 31 35 0d 42 cc  |. i% = 0 . 15.B.|
0000abe0  26 20 20 20 20 20 20 20  20 20 20 20 20 20 f2 70  |&             .p|
0000abf0  72 69 6e 74 28 68 65 61  64 69 6e 67 73 24 28 69  |rint(headings$(i|
0000ac00  25 29 29 0d 42 d6 10 20  20 20 20 20 20 20 20 20  |%)).B..         |
0000ac10  20 20 ed 0d 42 e0 0e 20  20 20 20 20 20 20 20 20  |  ..B..         |
0000ac20  cd 0d 42 ea 29 20 20 20  20 20 20 20 20 20 f2 6f  |..B.)         .o|
0000ac30  70 65 6e 5f 77 69 6e 64  6f 77 28 73 63 72 65 65  |pen_window(scree|
0000ac40  6e 5f 77 69 6e 64 6f 77  25 29 0d 42 f4 15 20 20  |n_window%).B..  |
0000ac50  20 20 20 20 20 20 20 72  65 63 25 20 3d 20 31 0d  |       rec% = 1.|
0000ac60  42 fe 17 20 20 20 20 20  20 20 20 20 6d 61 74 63  |B..         matc|
0000ac70  68 25 20 3d 20 30 0d 43  08 21 20 20 20 20 20 20  |h% = 0.C.!      |
0000ac80  20 20 20 24 6f 75 74 70  75 74 5f 72 65 63 25 20  |   $output_rec% |
0000ac90  3d 20 c3 72 65 63 25 0d  43 12 20 20 20 20 20 20  |= .rec%.C.      |
0000aca0  20 20 20 20 24 6d 61 74  63 68 65 73 25 20 3d 20  |    $matches% = |
0000acb0  c3 6d 61 74 63 68 25 0d  43 1c 3e 20 20 20 20 20  |.match%.C.>     |
0000acc0  20 20 20 20 c8 99 22 57  69 6d 70 5f 46 6f 72 63  |    .."Wimp_Forc|
0000acd0  65 52 65 64 72 61 77 22  2c 73 63 72 65 65 6e 5f  |eRedraw",screen_|
0000ace0  77 69 6e 64 6f 77 25 2c  30 2c 2d 35 30 30 2c 34  |window%,0,-500,4|
0000acf0  30 30 30 2c 30 0d 43 26  18 20 20 20 20 20 20 20  |000,0.C&.       |
0000ad00  20 20 65 73 63 61 70 65  25 20 3d 20 a3 0d 43 30  |  escape% = ..C0|
0000ad10  15 20 20 20 20 20 20 20  20 20 f2 70 6f 6c 6c 28  |.         .poll(|
0000ad20  30 29 0d 43 3a 36 20 20  20 20 20 20 20 20 20 c8  |0).C:6         .|
0000ad30  95 20 72 65 63 25 20 3c  3d 20 6e 75 6d 62 65 72  |. rec% <= number|
0000ad40  5f 6f 66 5f 72 65 63 6f  72 64 73 25 20 80 20 ac  |_of_records% . .|
0000ad50  20 65 73 63 61 70 65 25  0d 43 44 21 20 20 20 20  | escape%.CD!    |
0000ad60  20 20 20 20 20 20 20 f2  72 65 61 64 5f 72 65 63  |       .read_rec|
0000ad70  6f 72 64 28 72 65 63 25  29 0d 43 4e 53 20 20 20  |ord(rec%).CNS   |
0000ad80  20 20 20 20 20 20 20 20  e7 20 ac 20 a4 69 63 6f  |        . . .ico|
0000ad90  6e 5f 73 65 74 28 6f 75  74 70 75 74 5f 77 69 6e  |n_set(output_win|
0000ada0  64 6f 77 25 2c 63 61 73  65 5f 73 65 6e 73 5f 69  |dow%,case_sens_i|
0000adb0  63 6f 6e 25 29 20 8c 20  f2 63 6f 6e 76 65 72 74  |con%) . .convert|
0000adc0  5f 72 65 63 6f 72 64 5f  63 61 73 65 0d 43 58 24  |_record_case.CX$|
0000add0  20 20 20 20 20 20 20 20  20 20 20 e7 20 a0 28 73  |           . .(s|
0000ade0  65 61 72 63 68 5f 73 74  72 69 6e 67 24 29 20 8c  |earch_string$) .|
0000adf0  0d 43 62 47 20 20 20 20  20 20 20 20 20 20 20 20  |.CbG            |
0000ae00  20 f2 72 65 61 64 5f 72  65 63 6f 72 64 28 72 65  | .read_record(re|
0000ae10  63 25 29 20 3a 20 f4 20  62 65 63 61 75 73 65 20  |c%) : . because |
0000ae20  74 68 65 20 63 61 73 65  20 6d 61 79 20 62 65 20  |the case may be |
0000ae30  63 68 61 6e 67 65 64 0d  43 6c 42 20 20 20 20 20  |changed.ClB     |
0000ae40  20 20 20 20 20 20 20 20  e7 20 a4 69 63 6f 6e 5f  |        . .icon_|
0000ae50  73 65 74 28 6f 75 74 70  75 74 5f 77 69 6e 64 6f  |set(output_windo|
0000ae60  77 25 2c 74 61 62 5f 69  63 6f 6e 25 29 20 8c 20  |w%,tab_icon%) . |
0000ae70  f2 74 61 62 75 6c 61 74  65 0d 43 76 1b 20 20 20  |.tabulate.Cv.   |
0000ae80  20 20 20 20 20 20 20 20  20 20 6d 61 74 63 68 25  |          match%|
0000ae90  20 2b 3d 31 0d 43 80 25  20 20 20 20 20 20 20 20  | +=1.C.%        |
0000aea0  20 20 20 20 20 24 6f 75  74 70 75 74 5f 72 65 63  |     $output_rec|
0000aeb0  25 20 3d 20 c3 72 65 63  25 0d 43 8a 24 20 20 20  |% = .rec%.C.$   |
0000aec0  20 20 20 20 20 20 20 20  20 20 24 6d 61 74 63 68  |          $match|
0000aed0  65 73 25 20 3d 20 c3 6d  61 74 63 68 25 0d 43 94  |es% = .match%.C.|
0000aee0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 e3 20  |              . |
0000aef0  6c 69 73 74 25 20 3d 20  30 20 b8 20 35 0d 43 9e  |list% = 0 . 5.C.|
0000af00  37 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |7               |
0000af10  70 6f 69 6e 74 65 72 25  20 3d 20 6f 75 74 70 75  |pointer% = outpu|
0000af20  74 5f 64 69 73 70 6c 61  79 25 2b 6c 69 73 74 25  |t_display%+list%|
0000af30  2a 33 30 30 0d 43 a8 30  20 20 20 20 20 20 20 20  |*300.C.0        |
0000af40  20 20 20 20 20 20 20 e7  20 a9 28 6f 75 74 70 75  |       . .(outpu|
0000af50  74 5f 6c 69 73 74 24 28  6c 69 73 74 25 29 29 20  |t_list$(list%)) |
0000af60  3e 30 20 8c 0d 43 b2 1d  20 20 20 20 20 20 20 20  |>0 ..C..        |
0000af70  20 20 20 20 20 20 20 20  20 f2 64 6f 5f 6c 69 73  |         .do_lis|
0000af80  74 0d 43 bc 26 20 20 20  20 20 20 20 20 20 20 20  |t.C.&           |
0000af90  20 20 20 20 20 20 f2 70  72 69 6e 74 28 24 70 6f  |      .print($po|
0000afa0  69 6e 74 65 72 25 29 0d  43 c6 14 20 20 20 20 20  |inter%).C..     |
0000afb0  20 20 20 20 20 20 20 20  20 20 cc 0d 43 d0 23 20  |          ..C.# |
0000afc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000afd0  24 70 6f 69 6e 74 65 72  25 20 3d 20 22 22 0d 43  |$pointer% = "".C|
0000afe0  da 14 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |..              |
0000aff0  20 cd 0d 43 e4 12 20 20  20 20 20 20 20 20 20 20  | ..C..          |
0000b000  20 20 20 ed 0d 43 ee 42  20 20 20 20 20 20 20 20  |   ..C.B        |
0000b010  20 20 20 20 20 c8 99 22  57 69 6d 70 5f 46 6f 72  |     .."Wimp_For|
0000b020  63 65 52 65 64 72 61 77  22 2c 73 63 72 65 65 6e  |ceRedraw",screen|
0000b030  5f 77 69 6e 64 6f 77 25  2c 30 2c 2d 35 30 30 2c  |_window%,0,-500,|
0000b040  34 30 30 30 2c 30 0d 43  f8 10 20 20 20 20 20 20  |4000,0.C..      |
0000b050  20 20 20 20 20 cc 0d 44  02 25 20 20 20 20 20 20  |     ..D.%      |
0000b060  20 20 20 20 20 20 20 24  6f 75 74 70 75 74 5f 72  |       $output_r|
0000b070  65 63 25 20 3d 20 c3 72  65 63 25 0d 44 0c 44 20  |ec% = .rec%.D.D |
0000b080  20 20 20 20 20 20 20 20  20 20 20 20 c8 99 22 57  |            .."W|
0000b090  69 6d 70 5f 46 6f 72 63  65 52 65 64 72 61 77 22  |imp_ForceRedraw"|
0000b0a0  2c 73 63 72 65 65 6e 5f  77 69 6e 64 6f 77 25 2c  |,screen_window%,|
0000b0b0  36 32 30 2c 2d 36 32 2c  37 37 30 2c 2d 31 34 0d  |620,-62,770,-14.|
0000b0c0  44 16 10 20 20 20 20 20  20 20 20 20 20 20 cd 0d  |D..           ..|
0000b0d0  44 20 17 20 20 20 20 20  20 20 20 20 20 20 72 65  |D .           re|
0000b0e0  63 25 20 2b 3d 31 0d 44  2a 17 20 20 20 20 20 20  |c% +=1.D*.      |
0000b0f0  20 20 20 20 20 f2 70 6f  6c 6c 28 30 29 0d 44 34  |     .poll(0).D4|
0000b100  0e 20 20 20 20 20 20 20  20 20 ce 0d 44 3e 47 20  |.         ..D>G |
0000b110  20 20 20 20 20 20 20 20  f2 72 65 61 64 5f 72 65  |        .read_re|
0000b120  63 6f 72 64 28 bb 28 24  72 65 63 5f 6e 75 6d 62  |cord(.($rec_numb|
0000b130  65 72 25 29 29 20 3a 20  f4 20 72 65 6c 6f 61 64  |er%)) : . reload|
0000b140  20 74 68 65 20 6c 61 74  65 73 74 20 72 65 63 6f  | the latest reco|
0000b150  72 64 0d 44 48 19 20 20  20 20 20 20 20 20 20 e7  |rd.DH.         .|
0000b160  20 ac 20 65 72 72 6f 72  25 20 8c 0d 44 52 1b 20  | . error% ..DR. |
0000b170  20 20 20 20 20 20 20 20  20 20 e7 20 65 73 63 61  |          . esca|
0000b180  70 65 25 20 20 8c 0d 44  5c 6b 20 20 20 20 20 20  |pe%  ..D\k      |
0000b190  20 20 20 20 20 20 20 f2  6d 65 73 73 61 67 65 28  |       .message(|
0000b1a0  22 53 74 6f 70 20 73 65  6c 65 63 74 65 64 2e 20  |"Stop selected. |
0000b1b0  53 65 61 72 63 68 20 69  6e 63 6f 6d 70 6c 65 74  |Search incomplet|
0000b1c0  65 2e 20 22 2b c3 28 6d  61 74 63 68 25 29 2b 22  |e. "+.(match%)+"|
0000b1d0  20 6d 61 74 63 68 65 73  20 68 61 76 65 20 62 65  | matches have be|
0000b1e0  65 6e 20 66 6f 75 6e 64  20 73 6f 20 66 61 72 22  |en found so far"|
0000b1f0  29 0d 44 66 10 20 20 20  20 20 20 20 20 20 20 20  |).Df.           |
0000b200  cc 0d 44 70 53 20 20 20  20 20 20 20 20 20 20 20  |..DpS           |
0000b210  20 20 f2 6d 65 73 73 61  67 65 28 22 53 65 61 72  |  .message("Sear|
0000b220  63 68 20 63 6f 6d 70 6c  65 74 65 2e 20 22 2b c3  |ch complete. "+.|
0000b230  28 6d 61 74 63 68 25 29  2b 22 20 6d 61 74 63 68  |(match%)+" match|
0000b240  65 73 20 68 61 76 65 20  62 65 65 6e 20 66 6f 75  |es have been fou|
0000b250  6e 64 22 29 0d 44 7a 10  20 20 20 20 20 20 20 20  |nd").Dz.        |
0000b260  20 20 20 cd 0d 44 84 0e  20 20 20 20 20 20 20 20  |   ..D..        |
0000b270  20 cd 0d 44 8e 2a 20 20  20 20 20 20 20 20 20 f2  | ..D.*         .|
0000b280  63 6c 6f 73 65 61 77 69  6e 64 6f 77 28 73 63 72  |closeawindow(scr|
0000b290  65 65 6e 5f 77 69 6e 64  6f 77 25 29 0d 44 98 0c  |een_window%).D..|
0000b2a0  20 20 20 20 20 20 20 cd  0d 44 a2 0a 20 20 20 20  |       ..D..    |
0000b2b0  20 cd 0d 44 ac 09 20 20  20 20 cd 0d 44 b6 09 20  | ..D..    ..D.. |
0000b2c0  20 20 20 cd 0d 44 c0 08  20 20 20 cd 0d 44 ca 05  |   ..D..   ..D..|
0000b2d0  cd 0d 44 d4 1f f2 63 6c  6f 73 65 61 77 69 6e 64  |..D...closeawind|
0000b2e0  6f 77 28 73 61 76 65 5f  77 69 6e 64 6f 77 25 29  |ow(save_window%)|
0000b2f0  0d 44 de 05 e1 0d 44 e8  04 0d 44 f2 04 0d 44 fc  |.D....D...D...D.|
0000b300  04 0d 45 06 04 0d 45 10  0e dd 20 f2 64 6f 5f 6c  |..E...E... .do_l|
0000b310  69 73 74 0d 45 1a 0a 20  20 20 ea 20 85 0d 45 24  |ist.E..   . ..E$|
0000b320  16 20 20 20 ee 20 85 20  ea 20 65 72 72 6f 72 25  |.   . . . error%|
0000b330  20 3d b9 0d 45 2e 13 20  20 20 e7 20 ac 20 65 72  | =..E..   . . er|
0000b340  72 6f 72 25 20 8c 0d 45  38 2d 20 20 20 20 20 20  |ror% ..E8-      |
0000b350  20 24 70 6f 69 6e 74 65  72 25 20 3d 20 a0 28 6f  | $pointer% = .(o|
0000b360  75 74 70 75 74 5f 6c 69  73 74 24 28 6c 69 73 74  |utput_list$(list|
0000b370  25 29 29 0d 45 42 08 20  20 20 cc 0d 45 4c 26 20  |%)).EB.   ..EL& |
0000b380  20 20 20 20 f2 63 6c 6f  73 65 61 77 69 6e 64 6f  |    .closeawindo|
0000b390  77 28 73 63 72 65 65 6e  5f 77 69 6e 64 6f 77 25  |w(screen_window%|
0000b3a0  29 0d 45 56 5f 20 20 20  20 20 f2 65 72 72 6f 72  |).EV_     .error|
0000b3b0  5f 6d 65 73 73 61 67 65  28 22 4c 69 6e 65 20 22  |_message("Line "|
0000b3c0  2b c3 28 6c 69 73 74 25  2b 31 29 2b 22 20 63 6f  |+.(list%+1)+" co|
0000b3d0  6e 74 61 69 6e 73 20 61  6e 20 75 6e 6b 6e 6f 77  |ntains an unknow|
0000b3e0  6e 20 66 69 65 6c 64 20  6e 61 6d 65 20 6f 72 20  |n field name or |
0000b3f0  61 20 73 79 6e 74 61 78  20 65 72 72 6f 72 22 29  |a syntax error")|
0000b400  0d 45 60 14 20 20 20 20  20 65 73 63 61 70 65 25  |.E`.     escape%|
0000b410  20 3d 20 b9 0d 45 6a 08  20 20 20 cd 0d 45 74 0a  | = ..Ej.   ..Et.|
0000b420  20 20 20 f7 20 85 0d 45  7e 05 e1 0d 45 88 04 0d  |   . ..E~...E...|
0000b430  45 92 05 20 0d 45 9c 04  0d 45 a6 04 0d 45 b0 04  |E.. .E...E...E..|
0000b440  0d 45 ba 12 dd 20 f2 66  69 6c 65 5f 6f 75 74 70  |.E... .file_outp|
0000b450  75 74 0d 45 c4 20 20 20  f2 6f 70 65 6e 5f 77 69  |ut.E.   .open_wi|
0000b460  6e 64 6f 77 28 73 61 76  65 5f 77 69 6e 64 6f 77  |ndow(save_window|
0000b470  25 29 0d 45 ce 36 20 20  c8 99 22 57 69 6d 70 5f  |%).E.6  .."Wimp_|
0000b480  53 65 74 43 61 72 65 74  50 6f 73 69 74 69 6f 6e  |SetCaretPosition|
0000b490  22 2c 73 61 76 65 5f 77  69 6e 64 6f 77 25 2c 32  |",save_window%,2|
0000b4a0  2c 2c 2c 2d 31 2c 2d 31  0d 45 d8 05 e1 0d 45 e2  |,,,-1,-1.E....E.|
0000b4b0  05 20 0d 45 ec 05 20 0d  45 f6 13 dd 20 f2 70 72  |. .E.. .E... .pr|
0000b4c0  69 6e 74 28 74 65 78 74  24 29 0d 46 00 08 ea 20  |int(text$).F... |
0000b4d0  69 25 0d 46 0a 06 ef 32  0d 46 14 14 e3 20 69 25  |i%.F...2.F... i%|
0000b4e0  3d 20 31 20 b8 20 a9 74  65 78 74 24 0d 46 1e 18  |= 1 . .text$.F..|
0000b4f0  20 20 ef 31 2c 97 28 c1  74 65 78 74 24 2c 69 25  |  .1,.(.text$,i%|
0000b500  2c 31 29 29 0d 46 28 05  ed 0d 46 32 0e ef 31 2c  |,1)).F(...F2..1,|
0000b510  31 33 2c 31 2c 31 30 0d  46 3c 06 ef 33 0d 46 46  |13,1,10.F<..3.FF|
0000b520  05 e1 0d 46 50 04 0d 46  5a 04 0d 46 64 04 0d 46  |...FP..FZ..Fd..F|
0000b530  6e 11 dd 20 a4 70 72 69  6e 74 65 72 5f 6f 6e 0d  |n.. .printer_on.|
0000b540  46 78 15 ea 20 6f 6b 25  2c 20 63 61 6e 63 65 6c  |Fx.. ok%, cancel|
0000b550  6c 65 64 25 0d 46 82 12  63 61 6e 63 65 6c 6c 65  |led%.F..cancelle|
0000b560  64 25 20 3d 20 a3 0d 46  8c 0b 6f 6b 25 20 3d 20  |d% = ..F..ok% = |
0000b570  a3 0d 46 96 05 f5 0d 46  a0 17 20 20 20 c8 99 22  |..F....F..   .."|
0000b580  4f 53 5f 42 79 74 65 22  2c 32 31 2c 33 0d 46 aa  |OS_Byte",21,3.F.|
0000b590  17 20 20 20 ef 20 32 2c  31 2c 36 35 2c 31 2c 31  |.   . 2,1,65,1,1|
0000b5a0  32 37 2c 33 0d 46 b4 22  20 20 20 c8 99 22 4f 53  |27,3.F."   .."OS|
0000b5b0  5f 42 79 74 65 22 2c 31  35 32 2c 33 20 b8 20 3b  |_Byte",152,3 . ;|
0000b5c0  66 6c 61 67 73 25 0d 46  be 1a 20 20 20 66 6c 61  |flags%.F..   fla|
0000b5d0  67 73 25 20 3d 20 66 6c  61 67 73 25 20 80 20 32  |gs% = flags% . 2|
0000b5e0  0d 46 c8 16 20 20 20 e7  20 66 6c 61 67 73 25 20  |.F..   . flags% |
0000b5f0  3c 3e 20 30 20 8c 0d 46  d2 0e 20 20 20 20 20 6f  |<> 0 ..F..     o|
0000b600  6b 25 3d b9 0d 46 dc 08  20 20 20 cc 0d 46 e6 7d  |k%=..F..   ..F.}|
0000b610  20 20 20 20 20 20 e7 20  a4 63 61 6e 63 65 6c 5f  |      . .cancel_|
0000b620  6d 65 73 73 61 67 65 28  22 50 72 69 6e 74 65 72  |message("Printer|
0000b630  20 69 73 20 6e 6f 74 20  72 65 73 70 6f 6e 64 69  | is not respondi|
0000b640  6e 67 2e 20 43 6c 69 63  6b 20 6f 6e 20 4f 4b 20  |ng. Click on OK |
0000b650  74 6f 20 74 72 79 20 61  67 61 69 6e 2e 20 43 6c  |to try again. Cl|
0000b660  69 63 6b 20 6f 6e 20 63  61 6e 63 65 6c 20 74 6f  |ick on cancel to|
0000b670  20 61 62 61 6e 64 6f 6e  20 70 72 69 6e 74 69 6e  | abandon printin|
0000b680  67 22 29 20 3d 20 32 20  8c 0d 46 f0 18 20 20 20  |g") = 2 ..F..   |
0000b690  20 20 20 20 20 63 61 6e  63 65 6c 6c 65 64 25 3d  |     cancelled%=|
0000b6a0  b9 0d 46 fa 0b 20 20 20  20 20 20 cd 0d 47 04 08  |..F..      ..G..|
0000b6b0  20 20 20 cd 0d 47 0e 16  fd 20 63 61 6e 63 65 6c  |   ..G... cancel|
0000b6c0  6c 65 64 25 20 84 20 6f  6b 25 0d 47 18 08 3d 6f  |led% . ok%.G..=o|
0000b6d0  6b 25 0d 47 22 04 0d 47  2c 04 0d 47 36 04 0d 47  |k%.G"..G,..G6..G|
0000b6e0  40 04 0d 47 4a 04 0d 47  54 04 0d 47 5e 1a dd 20  |@..GJ..GT..G^.. |
0000b6f0  f2 63 6f 6e 76 65 72 74  5f 72 65 63 6f 72 64 5f  |.convert_record_|
0000b700  63 61 73 65 0d 47 68 08  ea 20 66 25 0d 47 72 20  |case.Gh.. f%.Gr |
0000b710  e3 20 66 25 20 3d 20 30  20 b8 20 6e 75 6d 62 65  |. f% = 0 . numbe|
0000b720  72 5f 6f 66 5f 66 69 65  6c 64 73 25 0d 47 7c 25  |r_of_fields%.G|%|
0000b730  20 20 63 5f 66 5f 76 24  28 66 25 29 20 3d 20 a4  |  c_f_v$(f%) = .|
0000b740  75 70 70 65 72 28 63 5f  66 5f 76 24 28 66 25 29  |upper(c_f_v$(f%)|
0000b750  29 0d 47 86 05 ed 0d 47  90 05 e1 0d 47 9a 04 0d  |).G....G....G...|
0000b760  47 a4 04 0d 47 ae 18 dd  20 f2 73 74 61 72 74 5f  |G...G... .start_|
0000b770  6f 75 74 70 75 74 5f 64  72 61 67 0d 47 b8 11 20  |output_drag.G.. |
0000b780  20 ea 20 77 65 78 25 2c  77 65 79 25 0d 47 c2 1e  | . wex%,wey%.G..|
0000b790  20 20 e7 20 28 62 75 74  74 6f 6e 25 20 80 20 26  |  . (button% . &|
0000b7a0  35 30 29 20 3c 3e 20 30  20 8c 0d 47 cc 1c 20 20  |50) <> 0 ..G..  |
0000b7b0  21 62 6c 6f 63 6b 25 20  3d 20 73 61 76 65 5f 77  |!block% = save_w|
0000b7c0  69 6e 64 6f 77 25 0d 47  d6 25 20 20 c8 99 22 57  |indow%.G.%  .."W|
0000b7d0  69 6d 70 5f 47 65 74 57  69 6e 64 6f 77 53 74 61  |imp_GetWindowSta|
0000b7e0  74 65 22 2c 2c 62 6c 6f  63 6b 25 0d 47 e0 21 20  |te",,block%.G.! |
0000b7f0  20 77 65 78 25 20 3d 20  62 6c 6f 63 6b 25 21 34  | wex% = block%!4|
0000b800  20 2d 20 62 6c 6f 63 6b  25 21 32 30 0d 47 ea 22  | - block%!20.G."|
0000b810  20 20 77 65 79 25 20 3d  20 62 6c 6f 63 6b 25 21  |  wey% = block%!|
0000b820  31 36 20 2d 20 62 6c 6f  63 6b 25 21 32 34 0d 47  |16 - block%!24.G|
0000b830  f4 30 20 20 62 6c 6f 63  6b 25 21 34 20 3d 20 33  |.0  block%!4 = 3|
0000b840  20 3a 20 f4 20 69 63 6f  6e 20 68 61 6e 64 6c 65  | : . icon handle|
0000b850  20 66 6f 72 20 64 72 61  67 20 69 63 6f 6e 0d 47  | for drag icon.G|
0000b860  fe 23 20 20 c8 99 22 57  69 6d 70 5f 47 65 74 49  |.#  .."Wimp_GetI|
0000b870  63 6f 6e 53 74 61 74 65  22 2c 2c 62 6c 6f 63 6b  |conState",,block|
0000b880  25 0d 48 08 1c 20 20 21  62 6c 6f 63 6b 25 20 3d  |%.H..  !block% =|
0000b890  20 73 61 76 65 5f 77 69  6e 64 6f 77 25 0d 48 12  | save_window%.H.|
0000b8a0  12 20 20 62 6c 6f 63 6b  25 21 34 20 3d 20 35 0d  |.  block%!4 = 5.|
0000b8b0  48 1c 1f 20 20 62 6c 6f  63 6b 25 21 38 20 3d 20  |H..  block%!8 = |
0000b8c0  62 6c 6f 63 6b 25 21 38  20 2b 77 65 78 25 0d 48  |block%!8 +wex%.H|
0000b8d0  26 21 20 20 62 6c 6f 63  6b 25 21 31 32 20 3d 20  |&!  block%!12 = |
0000b8e0  62 6c 6f 63 6b 25 21 31  32 20 2b 77 65 79 25 0d  |block%!12 +wey%.|
0000b8f0  48 30 21 20 20 62 6c 6f  63 6b 25 21 31 36 20 3d  |H0!  block%!16 =|
0000b900  20 62 6c 6f 63 6b 25 21  31 36 20 2b 77 65 78 25  | block%!16 +wex%|
0000b910  0d 48 3a 21 20 20 62 6c  6f 63 6b 25 21 32 30 20  |.H:!  block%!20 |
0000b920  3d 20 62 6c 6f 63 6b 25  21 32 30 20 2b 77 65 79  |= block%!20 +wey|
0000b930  25 0d 48 44 13 20 20 62  6c 6f 63 6b 25 21 32 34  |%.HD.  block%!24|
0000b940  20 3d 20 30 0d 48 4e 13  20 20 62 6c 6f 63 6b 25  | = 0.HN.  block%|
0000b950  21 32 38 20 3d 20 30 0d  48 58 1b 20 20 62 6c 6f  |!28 = 0.HX.  blo|
0000b960  63 6b 25 21 33 32 20 3d  20 26 37 46 46 46 46 46  |ck%!32 = &7FFFFF|
0000b970  46 46 0d 48 62 1b 20 20  62 6c 6f 63 6b 25 21 33  |FF.Hb.  block%!3|
0000b980  36 20 3d 20 26 37 46 46  46 46 46 46 46 0d 48 6c  |6 = &7FFFFFFF.Hl|
0000b990  1e 20 20 c8 99 22 57 69  6d 70 5f 44 72 61 67 42  |.  .."Wimp_DragB|
0000b9a0  6f 78 22 2c 2c 62 6c 6f  63 6b 25 0d 48 76 07 20  |ox",,block%.Hv. |
0000b9b0  20 cd 0d 48 80 05 e1 0d  48 8a 04 0d 48 94 04 0d  | ..H....H...H...|
0000b9c0  48 9e 16 dd 20 f2 73 74  61 72 74 5f 64 69 73 6b  |H... .start_disk|
0000b9d0  5f 6c 69 73 74 0d 48 a8  23 c8 99 22 57 69 6d 70  |_list.H.#.."Wimp|
0000b9e0  5f 47 65 74 50 6f 69 6e  74 65 72 49 6e 66 6f 22  |_GetPointerInfo"|
0000b9f0  2c 2c 62 6c 6f 63 6b 25  0d 48 b2 12 62 6c 6f 63  |,,block%.H..bloc|
0000ba00  6b 25 21 32 30 20 3d 20  36 34 0d 48 bc 11 62 6c  |k%!20 = 64.H..bl|
0000ba10  6f 63 6b 25 21 33 32 20  3d 20 30 0d 48 c6 11 62  |ock%!32 = 0.H..b|
0000ba20  6c 6f 63 6b 25 21 33 36  20 3d 20 31 0d 48 d0 19  |lock%!36 = 1.H..|
0000ba30  62 6c 6f 63 6b 25 21 34  30 20 3d 20 62 6c 6f 63  |block%!40 = bloc|
0000ba40  6b 25 21 31 32 0d 48 da  19 62 6c 6f 63 6b 25 21  |k%!12.H..block%!|
0000ba50  34 34 20 3d 20 62 6c 6f  63 6b 25 21 31 36 0d 48  |44 = block%!16.H|
0000ba60  e4 17 62 6c 6f 63 6b 25  21 34 38 20 3d 20 21 62  |..block%!48 = !b|
0000ba70  6c 6f 63 6b 25 0d 48 ee  18 62 6c 6f 63 6b 25 21  |lock%.H..block%!|
0000ba80  35 32 20 3d 20 62 6c 6f  63 6b 25 21 34 0d 48 f8  |52 = block%!4.H.|
0000ba90  2a 62 6c 6f 63 6b 25 21  35 36 20 3d 20 31 30 30  |*block%!56 = 100|
0000baa0  30 30 20 3a 20 f4 20 73  69 7a 65 20 6f 66 20 74  |00 : . size of t|
0000bab0  68 65 20 66 69 6c 65 0d  49 02 2f 62 6c 6f 63 6b  |he file.I./block|
0000bac0  25 21 36 30 20 3d 20 26  46 46 46 20 20 3a 20 f4  |%!60 = &FFF  : .|
0000bad0  20 66 69 6c 65 20 74 79  70 65 20 6f 66 20 74 68  | file type of th|
0000bae0  65 20 66 69 6c 65 0d 49  0c 2a 24 28 62 6c 6f 63  |e file.I.*$(bloc|
0000baf0  6b 25 2b 36 34 29 20 3d  20 a4 6c 65 61 66 28 24  |k%+64) = .leaf($|
0000bb00  74 65 78 74 5f 66 69 6c  65 5f 6e 61 6d 65 25 29  |text_file_name%)|
0000bb10  0d 49 16 2d 3f 28 62 6c  6f 63 6b 25 2b 36 35 2b  |.I.-?(block%+65+|
0000bb20  a9 a4 6c 65 61 66 28 24  74 65 78 74 5f 66 69 6c  |..leaf($text_fil|
0000bb30  65 5f 6e 61 6d 65 25 29  29 20 3d 20 30 0d 49 20  |e_name%)) = 0.I |
0000bb40  39 c8 99 22 57 69 6d 70  5f 53 65 6e 64 4d 65 73  |9.."Wimp_SendMes|
0000bb50  73 61 67 65 22 2c 31 37  2c 62 6c 6f 63 6b 25 2b  |sage",17,block%+|
0000bb60  32 30 2c 62 6c 6f 63 6b  25 21 31 32 2c 62 6c 6f  |20,block%!12,blo|
0000bb70  63 6b 25 21 31 36 0d 49  2a 05 e1 0d 49 34 04 0d  |ck%!16.I*...I4..|
0000bb80  49 3e 04 0d 49 48 04 0d  49 52 20 dd 20 f2 70 72  |I>..IH..IR . .pr|
0000bb90  6f 64 75 63 65 5f 6f 75  74 70 75 74 28 66 69 6c  |oduce_output(fil|
0000bba0  65 6e 61 6d 65 24 29 0d  49 5c 08 ea 20 69 25 0d  |ename$).I\.. i%.|
0000bbb0  49 66 0e 65 72 72 6f 72  25 20 3d 20 a3 0d 49 70  |If.error% = ..Ip|
0000bbc0  26 e7 20 c0 24 73 65 61  72 63 68 5f 6c 69 73 74  |&. .$search_list|
0000bbd0  25 2c 39 29 20 3d 22 66  69 65 6c 64 6c 69 73 74  |%,9) ="fieldlist|
0000bbe0  22 20 8c 0d 49 7a 21 20  20 f2 63 6c 6f 73 65 61  |" ..Iz!  .closea|
0000bbf0  77 69 6e 64 6f 77 28 73  61 76 65 5f 77 69 6e 64  |window(save_wind|
0000bc00  6f 77 25 29 0d 49 84 1f  20 20 f2 77 72 69 74 65  |ow%).I..  .write|
0000bc10  5f 66 69 65 6c 64 5f 6c  69 73 74 5f 74 6f 5f 64  |_field_list_to_d|
0000bc20  69 73 63 0d 49 8e 05 cc  0d 49 98 1a 20 20 f2 65  |isc.I....I..  .e|
0000bc30  78 74 72 61 63 74 5f 72  65 63 6f 72 64 5f 64 61  |xtract_record_da|
0000bc40  74 61 0d 49 a2 32 20 20  e7 20 a4 76 61 6c 69 64  |ta.I.2  . .valid|
0000bc50  5f 72 65 63 6f 72 64 20  80 20 a4 6f 76 65 72 77  |_record . .overw|
0000bc60  72 69 74 65 5f 6f 6b 28  66 69 6c 65 6e 61 6d 65  |rite_ok(filename|
0000bc70  24 29 20 8c 0d 49 ac 41  20 20 20 20 f2 77 72 69  |$) ..I.A    .wri|
0000bc80  74 65 5f 72 65 63 6f 72  64 28 bb 28 24 72 65 63  |te_record(.($rec|
0000bc90  5f 6e 75 6d 62 65 72 25  29 29 20 3a 20 f4 20 73  |_number%)) : . s|
0000bca0  61 76 65 20 74 68 65 20  6c 61 74 65 73 74 20 72  |ave the latest r|
0000bcb0  65 63 6f 72 64 0d 49 b6  23 20 20 20 20 e7 20 a4  |ecord.I.#    . .|
0000bcc0  65 78 74 72 61 63 74 5f  6f 75 74 70 75 74 5f 6c  |extract_output_l|
0000bcd0  69 73 74 5f 6f 6b 20 8c  0d 49 c0 24 20 20 20 20  |ist_ok ..I.$    |
0000bce0  e7 20 a4 63 72 65 61 74  65 5f 73 65 61 72 63 68  |. .create_search|
0000bcf0  5f 73 74 72 69 6e 67 5f  6f 6b 20 8c 0d 49 ca 22  |_string_ok ..I."|
0000bd00  20 20 20 20 e7 20 a4 76  61 6c 69 64 5f 73 65 61  |    . .valid_sea|
0000bd10  72 63 68 5f 63 72 69 74  65 72 69 61 20 8c 0d 49  |rch_criteria ..I|
0000bd20  d4 19 20 20 20 20 20 20  e3 20 6c 69 73 74 25 20  |..      . list% |
0000bd30  3d 20 30 20 b8 20 35 0d  49 de 30 20 20 20 20 20  |= 0 . 5.I.0     |
0000bd40  20 20 20 70 6f 69 6e 74  65 72 25 20 3d 20 6f 75  |   pointer% = ou|
0000bd50  74 70 75 74 5f 64 69 73  70 6c 61 79 25 2b 6c 69  |tput_display%+li|
0000bd60  73 74 25 2a 33 30 30 0d  49 e8 1a 20 20 20 20 20  |st%*300.I..     |
0000bd70  20 20 20 24 70 6f 69 6e  74 65 72 25 20 3d 20 22  |   $pointer% = "|
0000bd80  22 0d 49 f2 0b 20 20 20  20 20 20 ed 0d 49 fc 2c  |".I..      ..I.,|
0000bd90  20 20 20 20 20 20 6f 75  74 70 75 74 5f 66 69 6c  |      output_fil|
0000bda0  65 5f 68 61 6e 64 6c 65  25 20 3d 20 ae 28 66 69  |e_handle% = .(fi|
0000bdb0  6c 65 6e 61 6d 65 24 29  0d 4a 06 36 20 20 20 20  |lename$).J.6    |
0000bdc0  20 20 e7 20 a4 69 63 6f  6e 5f 73 65 74 28 6f 75  |  . .icon_set(ou|
0000bdd0  74 70 75 74 5f 77 69 6e  64 6f 77 25 2c 68 65 61  |tput_window%,hea|
0000bde0  64 69 6e 67 73 5f 69 63  6f 6e 25 29 20 8c 0d 4a  |dings_icon%) ..J|
0000bdf0  10 1b 20 20 20 20 20 20  20 20 f2 62 75 69 6c 64  |..        .build|
0000be00  5f 68 65 61 64 69 6e 67  73 0d 4a 1a 19 20 20 20  |_headings.J..   |
0000be10  20 20 20 20 20 e3 20 69  25 20 3d 20 30 20 b8 20  |     . i% = 0 . |
0000be20  31 35 0d 4a 24 2f 20 20  20 20 20 20 20 20 20 20  |15.J$/          |
0000be30  f2 70 72 69 6e 74 5f 74  6f 5f 74 68 65 5f 64 69  |.print_to_the_di|
0000be40  73 6b 28 68 65 61 64 69  6e 67 73 24 28 69 25 29  |sk(headings$(i%)|
0000be50  29 0d 4a 2e 0d 20 20 20  20 20 20 20 20 ed 0d 4a  |).J..        ..J|
0000be60  38 0b 20 20 20 20 20 20  cd 0d 4a 42 26 20 20 20  |8.      ..JB&   |
0000be70  20 20 20 f2 6f 70 65 6e  5f 77 69 6e 64 6f 77 28  |   .open_window(|
0000be80  73 63 72 65 65 6e 5f 77  69 6e 64 6f 77 25 29 0d  |screen_window%).|
0000be90  4a 4c 12 20 20 20 20 20  20 72 65 63 25 20 3d 20  |JL.      rec% = |
0000bea0  31 0d 4a 56 14 20 20 20  20 20 20 6d 61 74 63 68  |1.JV.      match|
0000beb0  25 20 3d 20 30 0d 4a 60  1e 20 20 20 20 20 20 24  |% = 0.J`.      $|
0000bec0  6f 75 74 70 75 74 5f 72  65 63 25 20 3d 20 c3 72  |output_rec% = .r|
0000bed0  65 63 25 0d 4a 6a 1d 20  20 20 20 20 20 24 6d 61  |ec%.Jj.      $ma|
0000bee0  74 63 68 65 73 25 20 3d  20 c3 6d 61 74 63 68 25  |tches% = .match%|
0000bef0  0d 4a 74 3b 20 20 20 20  20 20 c8 99 22 57 69 6d  |.Jt;      .."Wim|
0000bf00  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 73  |p_ForceRedraw",s|
0000bf10  63 72 65 65 6e 5f 77 69  6e 64 6f 77 25 2c 30 2c  |creen_window%,0,|
0000bf20  2d 35 30 30 2c 34 30 30  30 2c 30 0d 4a 7e 15 20  |-500,4000,0.J~. |
0000bf30  20 20 20 20 20 65 73 63  61 70 65 25 20 3d 20 a3  |     escape% = .|
0000bf40  0d 4a 88 12 20 20 20 20  20 20 f2 70 6f 6c 6c 28  |.J..      .poll(|
0000bf50  30 29 0d 4a 92 33 20 20  20 20 20 20 c8 95 20 72  |0).J.3      .. r|
0000bf60  65 63 25 20 3c 3d 20 6e  75 6d 62 65 72 5f 6f 66  |ec% <= number_of|
0000bf70  5f 72 65 63 6f 72 64 73  25 20 80 20 ac 20 65 73  |_records% . . es|
0000bf80  63 61 70 65 25 0d 4a 9c  1e 20 20 20 20 20 20 20  |cape%.J..       |
0000bf90  20 f2 72 65 61 64 5f 72  65 63 6f 72 64 28 72 65  | .read_record(re|
0000bfa0  63 25 29 0d 4a a6 50 20  20 20 20 20 20 20 20 e7  |c%).J.P        .|
0000bfb0  20 ac 20 a4 69 63 6f 6e  5f 73 65 74 28 6f 75 74  | . .icon_set(out|
0000bfc0  70 75 74 5f 77 69 6e 64  6f 77 25 2c 63 61 73 65  |put_window%,case|
0000bfd0  5f 73 65 6e 73 5f 69 63  6f 6e 25 29 20 8c 20 f2  |_sens_icon%) . .|
0000bfe0  63 6f 6e 76 65 72 74 5f  72 65 63 6f 72 64 5f 63  |convert_record_c|
0000bff0  61 73 65 0d 4a b0 21 20  20 20 20 20 20 20 20 e7  |ase.J.!        .|
0000c000  20 a0 28 73 65 61 72 63  68 5f 73 74 72 69 6e 67  | .(search_string|
0000c010  24 29 20 8c 0d 4a ba 44  20 20 20 20 20 20 20 20  |$) ..J.D        |
0000c020  20 20 f2 72 65 61 64 5f  72 65 63 6f 72 64 28 72  |  .read_record(r|
0000c030  65 63 25 29 20 3a 20 f4  20 62 65 63 61 75 73 65  |ec%) : . because|
0000c040  20 74 68 65 20 63 61 73  65 20 6d 61 79 20 62 65  | the case may be|
0000c050  20 63 68 61 6e 67 65 64  0d 4a c4 3f 20 20 20 20  | changed.J.?    |
0000c060  20 20 20 20 20 20 e7 20  a4 69 63 6f 6e 5f 73 65  |      . .icon_se|
0000c070  74 28 6f 75 74 70 75 74  5f 77 69 6e 64 6f 77 25  |t(output_window%|
0000c080  2c 74 61 62 5f 69 63 6f  6e 25 29 20 8c 20 f2 74  |,tab_icon%) . .t|
0000c090  61 62 75 6c 61 74 65 0d  4a ce 18 20 20 20 20 20  |abulate.J..     |
0000c0a0  20 20 20 20 20 6d 61 74  63 68 25 20 2b 3d 31 0d  |     match% +=1.|
0000c0b0  4a d8 22 20 20 20 20 20  20 20 20 20 20 24 6f 75  |J."          $ou|
0000c0c0  74 70 75 74 5f 72 65 63  25 20 3d 20 c3 72 65 63  |tput_rec% = .rec|
0000c0d0  25 0d 4a e2 21 20 20 20  20 20 20 20 20 20 20 24  |%.J.!          $|
0000c0e0  6d 61 74 63 68 65 73 25  20 3d 20 c3 6d 61 74 63  |matches% = .matc|
0000c0f0  68 25 0d 4a ec 1d 20 20  20 20 20 20 20 20 20 20  |h%.J..          |
0000c100  e3 20 6c 69 73 74 25 20  3d 20 30 20 b8 20 35 0d  |. list% = 0 . 5.|
0000c110  4a f6 34 20 20 20 20 20  20 20 20 20 20 20 20 70  |J.4            p|
0000c120  6f 69 6e 74 65 72 25 20  3d 20 6f 75 74 70 75 74  |ointer% = output|
0000c130  5f 64 69 73 70 6c 61 79  25 2b 6c 69 73 74 25 2a  |_display%+list%*|
0000c140  33 30 30 0d 4b 00 2d 20  20 20 20 20 20 20 20 20  |300.K.-         |
0000c150  20 20 20 e7 20 a9 28 6f  75 74 70 75 74 5f 6c 69  |   . .(output_li|
0000c160  73 74 24 28 6c 69 73 74  25 29 29 20 3e 30 20 8c  |st$(list%)) >0 .|
0000c170  0d 4b 0a 1a 20 20 20 20  20 20 20 20 20 20 20 20  |.K..            |
0000c180  20 20 f2 64 6f 5f 6c 69  73 74 0d 4b 14 2f 20 20  |  .do_list.K./  |
0000c190  20 20 20 20 20 20 20 20  20 20 20 20 f2 70 72 69  |            .pri|
0000c1a0  6e 74 5f 74 6f 5f 74 68  65 5f 64 69 73 6b 28 24  |nt_to_the_disk($|
0000c1b0  70 6f 69 6e 74 65 72 25  29 0d 4b 1e 11 20 20 20  |pointer%).K..   |
0000c1c0  20 20 20 20 20 20 20 20  20 cc 0d 4b 28 20 20 20  |         ..K(   |
0000c1d0  20 20 20 20 20 20 20 20  20 20 20 20 24 70 6f 69  |            $poi|
0000c1e0  6e 74 65 72 25 20 3d 20  22 22 0d 4b 32 11 20 20  |nter% = "".K2.  |
0000c1f0  20 20 20 20 20 20 20 20  20 20 cd 0d 4b 3c 0f 20  |          ..K<. |
0000c200  20 20 20 20 20 20 20 20  20 ed 0d 4b 46 3f 20 20  |         ..KF?  |
0000c210  20 20 20 20 20 20 20 20  c8 99 22 57 69 6d 70 5f  |        .."Wimp_|
0000c220  46 6f 72 63 65 52 65 64  72 61 77 22 2c 73 63 72  |ForceRedraw",scr|
0000c230  65 65 6e 5f 77 69 6e 64  6f 77 25 2c 30 2c 2d 35  |een_window%,0,-5|
0000c240  30 30 2c 34 30 30 30 2c  30 0d 4b 50 0d 20 20 20  |00,4000,0.KP.   |
0000c250  20 20 20 20 20 cc 0d 4b  5a 22 20 20 20 20 20 20  |     ..KZ"      |
0000c260  20 20 20 20 24 6f 75 74  70 75 74 5f 72 65 63 25  |    $output_rec%|
0000c270  20 3d 20 c3 72 65 63 25  0d 4b 64 41 20 20 20 20  | = .rec%.KdA    |
0000c280  20 20 20 20 20 20 c8 99  22 57 69 6d 70 5f 46 6f  |      .."Wimp_Fo|
0000c290  72 63 65 52 65 64 72 61  77 22 2c 73 63 72 65 65  |rceRedraw",scree|
0000c2a0  6e 5f 77 69 6e 64 6f 77  25 2c 36 32 30 2c 2d 36  |n_window%,620,-6|
0000c2b0  32 2c 37 37 30 2c 2d 31  34 0d 4b 6e 0d 20 20 20  |2,770,-14.Kn.   |
0000c2c0  20 20 20 20 20 cd 0d 4b  78 14 20 20 20 20 20 20  |     ..Kx.      |
0000c2d0  20 20 72 65 63 25 20 2b  3d 31 0d 4b 82 14 20 20  |  rec% +=1.K..  |
0000c2e0  20 20 20 20 20 20 f2 70  6f 6c 6c 28 30 29 0d 4b  |      .poll(0).K|
0000c2f0  8c 0b 20 20 20 20 20 20  ce 0d 4b 96 44 20 20 20  |..      ..K.D   |
0000c300  20 20 20 f2 72 65 61 64  5f 72 65 63 6f 72 64 28  |   .read_record(|
0000c310  bb 28 24 72 65 63 5f 6e  75 6d 62 65 72 25 29 29  |.($rec_number%))|
0000c320  20 3a 20 f4 20 72 65 6c  6f 61 64 20 74 68 65 20  | : . reload the |
0000c330  6c 61 74 65 73 74 20 72  65 63 6f 72 64 0d 4b a0  |latest record.K.|
0000c340  16 20 20 20 20 20 20 e7  20 ac 20 65 72 72 6f 72  |.      . . error|
0000c350  25 20 8c 0d 4b aa 18 20  20 20 20 20 20 20 20 e7  |% ..K..        .|
0000c360  20 65 73 63 61 70 65 25  20 20 8c 0d 4b b4 68 20  | escape%  ..K.h |
0000c370  20 20 20 20 20 20 20 20  20 f2 6d 65 73 73 61 67  |         .messag|
0000c380  65 28 22 53 74 6f 70 20  73 65 6c 65 63 74 65 64  |e("Stop selected|
0000c390  2e 20 53 65 61 72 63 68  20 69 6e 63 6f 6d 70 6c  |. Search incompl|
0000c3a0  65 74 65 2e 20 22 2b c3  28 6d 61 74 63 68 25 29  |ete. "+.(match%)|
0000c3b0  2b 22 20 6d 61 74 63 68  65 73 20 68 61 76 65 20  |+" matches have |
0000c3c0  62 65 65 6e 20 66 6f 75  6e 64 20 73 6f 20 66 61  |been found so fa|
0000c3d0  72 22 29 0d 4b be 0d 20  20 20 20 20 20 20 20 cc  |r").K..        .|
0000c3e0  0d 4b c8 50 20 20 20 20  20 20 20 20 20 20 f2 6d  |.K.P          .m|
0000c3f0  65 73 73 61 67 65 28 22  53 65 61 72 63 68 20 63  |essage("Search c|
0000c400  6f 6d 70 6c 65 74 65 2e  20 22 2b c3 28 6d 61 74  |omplete. "+.(mat|
0000c410  63 68 25 29 2b 22 20 6d  61 74 63 68 65 73 20 68  |ch%)+" matches h|
0000c420  61 76 65 20 62 65 65 6e  20 66 6f 75 6e 64 22 29  |ave been found")|
0000c430  0d 4b d2 0d 20 20 20 20  20 20 20 20 cd 0d 4b dc  |.K..        ..K.|
0000c440  0b 20 20 20 20 20 20 cd  0d 4b e6 27 20 20 20 20  |.      ..K.'    |
0000c450  20 20 f2 63 6c 6f 73 65  61 77 69 6e 64 6f 77 28  |  .closeawindow(|
0000c460  73 63 72 65 65 6e 5f 77  69 6e 64 6f 77 25 29 0d  |screen_window%).|
0000c470  4b f0 25 20 20 20 20 20  20 f2 63 6c 6f 73 65 61  |K.%      .closea|
0000c480  77 69 6e 64 6f 77 28 73  61 76 65 5f 77 69 6e 64  |window(save_wind|
0000c490  6f 77 25 29 0d 4b fa 20  20 20 20 20 20 20 d9 23  |ow%).K.       .#|
0000c4a0  20 6f 75 74 70 75 74 5f  66 69 6c 65 5f 68 61 6e  | output_file_han|
0000c4b0  64 6c 65 25 0d 4c 04 29  20 20 20 20 20 20 ff 28  |dle%.L.)      .(|
0000c4c0  22 73 65 74 74 79 70 65  20 22 2b 66 69 6c 65 6e  |"settype "+filen|
0000c4d0  61 6d 65 24 2b 22 20 74  65 78 74 22 29 0d 4c 0e  |ame$+" text").L.|
0000c4e0  09 20 20 20 20 cd 0d 4c  18 23 20 20 20 20 f2 63  |.    ..L.#    .c|
0000c4f0  6c 6f 73 65 61 77 69 6e  64 6f 77 28 73 61 76 65  |loseawindow(save|
0000c500  5f 77 69 6e 64 6f 77 25  29 0d 4c 22 09 20 20 20  |_window%).L".   |
0000c510  20 cd 0d 4c 2c 08 20 20  20 cd 0d 4c 36 07 20 20  | ..L,.   ..L6.  |
0000c520  cd 0d 4c 40 05 cd 0d 4c  4a 05 e1 0d 4c 54 04 0d  |..L@...LJ...LT..|
0000c530  4c 5e 04 0d 4c 68 04 0d  4c 72 1f dd 20 f2 77 72  |L^..Lh..Lr.. .wr|
0000c540  69 74 65 5f 66 69 65 6c  64 5f 6c 69 73 74 5f 74  |ite_field_list_t|
0000c550  6f 5f 64 69 73 63 0d 4c  7c 20 e7 20 a4 6f 76 65  |o_disc.L| . .ove|
0000c560  72 77 72 69 74 65 5f 6f  6b 28 66 69 6c 65 6e 61  |rwrite_ok(filena|
0000c570  6d 65 24 29 20 8c 0d 4c  86 28 20 20 6f 75 74 70  |me$) ..L.(  outp|
0000c580  75 74 5f 66 69 6c 65 5f  68 61 6e 64 6c 65 25 20  |ut_file_handle% |
0000c590  3d 20 ae 28 66 69 6c 65  6e 61 6d 65 24 29 0d 4c  |= .(filename$).L|
0000c5a0  90 1c 20 20 20 20 f2 63  72 65 61 74 65 5f 66 69  |..    .create_fi|
0000c5b0  65 6c 64 5f 6f 75 74 70  75 74 0d 4c 9a 15 20 20  |eld_output.L..  |
0000c5c0  20 20 e3 20 69 25 20 3d  20 30 20 b8 20 31 35 0d  |  . i% = 0 . 15.|
0000c5d0  4c a4 2c 20 20 20 20 20  20 20 f2 70 72 69 6e 74  |L.,       .print|
0000c5e0  5f 74 6f 5f 74 68 65 5f  64 69 73 6b 28 68 65 61  |_to_the_disk(hea|
0000c5f0  64 69 6e 67 73 24 28 69  25 29 29 0d 4c ae 09 20  |dings$(i%)).L.. |
0000c600  20 20 20 ed 0d 4c b8 1c  20 20 d9 23 20 6f 75 74  |   ..L..  .# out|
0000c610  70 75 74 5f 66 69 6c 65  5f 68 61 6e 64 6c 65 25  |put_file_handle%|
0000c620  0d 4c c2 25 20 20 ff 28  22 73 65 74 74 79 70 65  |.L.%  .("settype|
0000c630  20 22 2b 66 69 6c 65 6e  61 6d 65 24 2b 22 20 74  | "+filename$+" t|
0000c640  65 78 74 22 29 0d 4c cc  05 cd 0d 4c d6 05 e1 0d  |ext").L....L....|
0000c650  4c e0 04 0d 4c ea 04 0d  4c f4 22 dd 20 f2 77 72  |L...L...L.". .wr|
0000c660  69 74 65 5f 66 69 65 6c  64 5f 6c 69 73 74 5f 74  |ite_field_list_t|
0000c670  6f 5f 70 72 69 6e 74 65  72 0d 4c fe 1c 20 20 20  |o_printer.L..   |
0000c680  20 f2 63 72 65 61 74 65  5f 66 69 65 6c 64 5f 6f  | .create_field_o|
0000c690  75 74 70 75 74 0d 4d 08  15 20 20 20 20 e3 20 69  |utput.M..    . i|
0000c6a0  25 20 3d 20 30 20 b8 20  31 35 0d 4d 12 20 20 20  |% = 0 . 15.M.   |
0000c6b0  20 20 20 20 20 f2 70 72  69 6e 74 28 68 65 61 64  |     .print(head|
0000c6c0  69 6e 67 73 24 28 69 25  29 29 0d 4d 1c 09 20 20  |ings$(i%)).M..  |
0000c6d0  20 20 ed 0d 4d 26 05 e1  0d 4d 30 04 0d 4d 3a 04  |  ..M&...M0..M:.|
0000c6e0  0d 4d 44 1f dd 20 f2 70  72 69 6e 74 5f 74 6f 5f  |.MD.. .print_to_|
0000c6f0  74 68 65 5f 64 69 73 6b  28 74 65 78 74 24 29 0d  |the_disk(text$).|
0000c700  4d 4e 08 ea 20 69 25 0d  4d 58 12 e7 20 a9 74 65  |MN.. i%.MX.. .te|
0000c710  78 74 24 20 3e 20 30 20  8c 0d 4d 62 14 e3 20 69  |xt$ > 0 ..Mb.. i|
0000c720  25 3d 20 31 20 b8 20 a9  74 65 78 74 24 0d 4d 6c  |%= 1 . .text$.Ml|
0000c730  2b 20 20 d5 23 6f 75 74  70 75 74 5f 66 69 6c 65  |+  .#output_file|
0000c740  5f 68 61 6e 64 6c 65 25  2c 97 28 c1 74 65 78 74  |_handle%,.(.text|
0000c750  24 2c 69 25 2c 31 29 29  0d 4d 76 05 ed 0d 4d 80  |$,i%,1)).Mv...M.|
0000c760  05 cd 0d 4d 8a 46 20 20  e7 20 a4 69 63 6f 6e 5f  |...M.F  . .icon_|
0000c770  73 65 74 28 6f 75 74 70  75 74 5f 77 69 6e 64 6f  |set(output_windo|
0000c780  77 25 2c 63 72 5f 69 63  6f 6e 25 29 20 8c 20 d5  |w%,cr_icon%) . .|
0000c790  20 23 6f 75 74 70 75 74  5f 66 69 6c 65 5f 68 61  | #output_file_ha|
0000c7a0  6e 64 6c 65 25 2c 31 33  0d 4d 94 1f 20 20 d5 20  |ndle%,13.M..  . |
0000c7b0  23 6f 75 74 70 75 74 5f  66 69 6c 65 5f 68 61 6e  |#output_file_han|
0000c7c0  64 6c 65 25 2c 31 30 0d  4d 9e 05 e1 0d 4d a8 04  |dle%,10.M....M..|
0000c7d0  0d 4d b2 04 0d 4d bc 11  dd 20 f2 71 75 69 63 6b  |.M...M... .quick|
0000c7e0  5f 73 61 76 65 0d 4d c6  24 20 20 e7 20 a7 24 74  |_save.M.$  . .$t|
0000c7f0  65 78 74 5f 66 69 6c 65  5f 6e 61 6d 65 25 2c 22  |ext_file_name%,"|
0000c800  2e 22 29 20 3d 20 30 20  8c 0d 4d d0 47 20 20 20  |.") = 0 ..M.G   |
0000c810  20 f2 65 72 72 6f 72 5f  6d 65 73 73 61 67 65 28  | .error_message(|
0000c820  22 54 6f 20 73 61 76 65  2c 20 64 72 61 67 20 74  |"To save, drag t|
0000c830  68 65 20 69 63 6f 6e 20  74 6f 20 61 20 64 69 72  |he icon to a dir|
0000c840  65 63 74 6f 72 79 20 76  69 65 77 65 72 2e 22 29  |ectory viewer.")|
0000c850  0d 4d da 07 20 20 cc 0d  4d e4 29 20 20 20 20 f2  |.M..  ..M.)    .|
0000c860  70 72 6f 64 75 63 65 5f  6f 75 74 70 75 74 28 24  |produce_output($|
0000c870  74 65 78 74 5f 66 69 6c  65 5f 6e 61 6d 65 25 29  |text_file_name%)|
0000c880  0d 4d ee 07 20 20 cd 0d  4d f8 05 e1 0d 4e 02 04  |.M..  ..M....N..|
0000c890  0d 4e 0c 04 0d 4e 16 04  0d 4e 20 1e dd 20 a4 6f  |.N...N...N .. .o|
0000c8a0  76 65 72 77 72 69 74 65  5f 6f 6b 28 66 69 6c 65  |verwrite_ok(file|
0000c8b0  6e 61 6d 65 24 29 0d 4e  2a 12 ea 20 6e 61 6d 65  |name$).N*.. name|
0000c8c0  24 2c 20 74 79 70 65 25  0d 4e 34 1a 6e 61 6d 65  |$, type%.N4.name|
0000c8d0  24 20 3d 20 66 69 6c 65  6e 61 6d 65 24 20 2b 20  |$ = filename$ + |
0000c8e0  bd 30 0d 4e 3e 25 c8 99  22 4f 53 5f 46 69 6c 65  |.0.N>%.."OS_File|
0000c8f0  22 2c 35 2c 6e 61 6d 65  24 2c 2c 2c 2c 2c 30 20  |",5,name$,,,,,0 |
0000c900  b8 20 74 79 70 65 25 0d  4e 48 0e c8 8e 20 74 79  |. type%.NH... ty|
0000c910  70 65 25 20 ca 0d 4e 52  0f 20 20 c9 20 30 20 3a  |pe% ..NR.  . 0 :|
0000c920  20 3d 20 b9 0d 4e 5c 7f  20 20 c9 20 31 20 3a 20  | = ..N\.  . 1 : |
0000c930  72 65 73 75 6c 74 25 20  3d 20 a4 63 61 6e 63 65  |result% = .cance|
0000c940  6c 5f 6d 65 73 73 61 67  65 28 22 41 20 66 69 6c  |l_message("A fil|
0000c950  65 20 6f 66 20 74 68 69  73 20 6e 61 6d 65 20 65  |e of this name e|
0000c960  78 69 73 74 73 2e 20 43  6c 69 63 6b 20 6f 6e 20  |xists. Click on |
0000c970  4f 4b 20 74 6f 20 72 65  70 6c 61 63 65 20 69 74  |OK to replace it|
0000c980  2e 20 43 6c 69 63 6b 20  6f 6e 20 43 41 4e 43 45  |. Click on CANCE|
0000c990  4c 20 74 6f 20 61 62 6f  72 74 20 73 65 61 72 63  |L to abort searc|
0000c9a0  68 22 29 0d 4e 66 1e 20  20 20 20 20 20 20 20 20  |h").Nf.         |
0000c9b0  20 20 e7 20 72 65 73 75  6c 74 25 20 3d 20 31 20  |  . result% = 1 |
0000c9c0  8c 0d 4e 70 15 20 20 20  20 20 20 20 20 20 20 20  |..Np.           |
0000c9d0  20 20 20 3d 20 b9 0d 4e  7a 10 20 20 20 20 20 20  |   = ..Nz.      |
0000c9e0  20 20 20 20 20 cc 0d 4e  84 15 20 20 20 20 20 20  |     ..N..      |
0000c9f0  20 20 20 20 20 20 20 20  3d 20 a3 0d 4e 8e 10 20  |        = ..N.. |
0000ca00  20 20 20 20 20 20 20 20  20 20 cd 0d 4e 98 3a 20  |          ..N.: |
0000ca10  20 c9 20 32 20 3a 20 f2  65 72 72 6f 72 5f 6d 65  | . 2 : .error_me|
0000ca20  73 73 61 67 65 28 22 54  68 69 73 20 69 73 20 61  |ssage("This is a|
0000ca30  20 64 69 72 65 63 74 6f  72 79 20 6e 61 6d 65 22  | directory name"|
0000ca40  29 3a 3d 20 a3 0d 4e a2  05 cb 0d 4e ac 04 0d 4e  |):= ..N....N...N|
0000ca50  b6 10 dd 20 a4 66 69 6c  65 5f 73 69 7a 65 0d 4e  |... .file_size.N|
0000ca60  c0 0e ea 20 72 30 2c 72  31 2c 72 32 0d 4e ca 22  |... r0,r1,r2.N."|
0000ca70  c8 99 22 4f 53 5f 41 72  67 73 22 2c 32 2c 66 69  |.."OS_Args",2,fi|
0000ca80  6c 65 25 20 b8 20 72 30  2c 72 31 2c 72 32 0d 4e  |le% . r0,r1,r2.N|
0000ca90  d4 07 3d 72 32 0d 4e de  04 0d 4e e8 14 dd 20 f2  |..=r2.N...N... .|
0000caa0  64 65 6c 65 74 65 5f 72  65 63 6f 72 64 0d 4e f2  |delete_record.N.|
0000cab0  0e ea 20 70 72 65 73 65  6e 74 25 0d 4e fc 1e e7  |.. present%.N...|
0000cac0  20 6e 75 6d 62 65 72 5f  6f 66 5f 72 65 63 6f 72  | number_of_recor|
0000cad0  64 73 25 20 3d 20 31 20  8c 0d 4f 06 51 20 f2 65  |ds% = 1 ..O.Q .e|
0000cae0  72 72 6f 72 5f 6d 65 73  73 61 67 65 28 22 54 68  |rror_message("Th|
0000caf0  65 20 66 69 6c 65 20 63  6f 6e 74 61 69 6e 73 20  |e file contains |
0000cb00  6f 6e 6c 79 20 6f 6e 65  20 72 65 63 6f 72 64 2e  |only one record.|
0000cb10  20 54 68 69 73 20 63 61  6e 20 6e 6f 74 20 62 65  | This can not be|
0000cb20  20 64 65 6c 65 74 65 64  22 29 0d 4f 10 05 cc 0d  | deleted").O....|
0000cb30  4f 1a 20 20 20 70 72 65  73 65 6e 74 25 20 3d 20  |O.   present% = |
0000cb40  bb 28 24 72 65 63 5f 6e  75 6d 62 65 72 25 29 0d  |.($rec_number%).|
0000cb50  4f 24 27 20 20 e7 20 70  72 65 73 65 6e 74 25 20  |O$'  . present% |
0000cb60  3d 20 6e 75 6d 62 65 72  5f 6f 66 5f 72 65 63 6f  |= number_of_reco|
0000cb70  72 64 73 25 20 8c 0d 4f  2e 2f 20 20 20 20 6e 75  |rds% ..O./    nu|
0000cb80  6d 62 65 72 5f 6f 66 5f  72 65 63 6f 72 64 73 25  |mber_of_records%|
0000cb90  3d 6e 75 6d 62 65 72 5f  6f 66 5f 72 65 63 6f 72  |=number_of_recor|
0000cba0  64 73 25 2d 31 0d 4f 38  2c 20 20 20 20 24 72 65  |ds%-1.O8,    $re|
0000cbb0  63 5f 6e 75 6d 62 65 72  25 20 3d 20 c3 28 6e 75  |c_number% = .(nu|
0000cbc0  6d 62 65 72 5f 6f 66 5f  72 65 63 6f 72 64 73 25  |mber_of_records%|
0000cbd0  29 0d 4f 42 25 20 20 20  20 f2 72 65 61 64 5f 72  |).OB%    .read_r|
0000cbe0  65 63 6f 72 64 28 bb 28  24 72 65 63 5f 6e 75 6d  |ecord(.($rec_num|
0000cbf0  62 65 72 25 29 29 0d 4f  4c 17 20 20 20 20 f2 75  |ber%)).OL.    .u|
0000cc00  70 64 61 74 65 5f 64 69  73 70 6c 61 79 0d 4f 56  |pdate_display.OV|
0000cc10  07 20 20 cc 0d 4f 60 14  20 20 20 20 70 72 6f 63  |.  ..O`.    proc|
0000cc20  65 65 64 25 20 3d 20 a3  0d 4f 6a 2f 20 20 20 20  |eed% = ..Oj/    |
0000cc30  e7 20 6e 75 6d 62 65 72  5f 6f 66 5f 72 65 63 6f  |. number_of_reco|
0000cc40  72 64 73 25 20 2d 20 70  72 65 73 65 6e 74 25 20  |rds% - present% |
0000cc50  3c 20 35 30 30 20 8c 0d  4f 74 17 20 20 20 20 20  |< 500 ..Ot.     |
0000cc60  20 20 70 72 6f 63 65 65  64 25 20 3d 20 b9 0d 4f  |  proceed% = ..O|
0000cc70  7e 09 20 20 20 20 cc 0d  4f 88 53 20 20 20 20 20  |~.    ..O.S     |
0000cc80  20 e7 20 a4 63 61 6e 63  65 6c 5f 6d 65 73 73 61  | . .cancel_messa|
0000cc90  67 65 28 22 54 68 69 73  20 6d 61 79 20 74 61 6b  |ge("This may tak|
0000cca0  65 20 73 6f 6d 65 20 74  69 6d 65 2e 20 53 65 6c  |e some time. Sel|
0000ccb0  65 63 74 20 4f 4b 20 74  6f 20 63 6f 6e 74 69 6e  |ect OK to contin|
0000ccc0  75 65 22 29 20 3d 20 31  20 8c 0d 4f 92 17 20 20  |ue") = 1 ..O..  |
0000ccd0  20 20 20 20 20 70 72 6f  63 65 65 64 25 20 3d 20  |     proceed% = |
0000cce0  b9 0d 4f 9c 09 20 20 20  20 cd 0d 4f a6 09 20 20  |..O..    ..O..  |
0000ccf0  20 20 cd 0d 4f b0 14 20  20 20 20 e7 20 70 72 6f  |  ..O..    . pro|
0000cd00  63 65 65 64 25 20 8c 0d  4f ba 11 20 20 20 20 f2  |ceed% ..O..    .|
0000cd10  67 6c 61 73 73 28 b9 29  0d 4f c4 2e 20 20 20 20  |glass(.).O..    |
0000cd20  74 6f 74 61 6c 25 20 3d  20 6e 75 6d 62 65 72 5f  |total% = number_|
0000cd30  6f 66 5f 72 65 63 6f 72  64 73 25 20 2d 20 70 72  |of_records% - pr|
0000cd40  65 73 65 6e 74 25 0d 4f  ce 05 20 0d 4f d8 11 20  |esent%.O.. .O.. |
0000cd50  20 20 20 64 6f 6e 65 25  20 3d 20 30 0d 4f e2 2f  |   done% = 0.O./|
0000cd60  20 20 20 20 e3 20 69 25  20 3d 20 70 72 65 73 65  |    . i% = prese|
0000cd70  6e 74 25 20 b8 20 6e 75  6d 62 65 72 5f 6f 66 5f  |nt% . number_of_|
0000cd80  72 65 63 6f 72 64 73 25  20 2d 31 0d 4f ec 1d 20  |records% -1.O.. |
0000cd90  20 20 20 20 20 20 f2 72  65 61 64 5f 72 65 63 6f  |      .read_reco|
0000cda0  72 64 28 69 25 2b 31 29  0d 4f f6 1c 20 20 20 20  |rd(i%+1).O..    |
0000cdb0  20 20 20 f2 77 72 69 74  65 5f 72 65 63 6f 72 64  |   .write_record|
0000cdc0  28 69 25 29 0d 50 00 37  20 20 20 20 20 20 20 c8  |(i%).P.7       .|
0000cdd0  99 22 48 6f 75 72 67 6c  61 73 73 5f 50 65 72 63  |."Hourglass_Perc|
0000cde0  65 6e 74 61 67 65 22 2c  20 64 6f 6e 65 25 2f 74  |entage", done%/t|
0000cdf0  6f 74 61 6c 25 20 2a 20  31 30 30 0d 50 0a 14 20  |otal% * 100.P.. |
0000ce00  20 20 20 20 20 20 64 6f  6e 65 25 20 2b 3d 31 0d  |      done% +=1.|
0000ce10  50 14 09 20 20 20 20 ed  0d 50 1e 11 20 20 20 20  |P..    ..P..    |
0000ce20  f2 67 6c 61 73 73 28 a3  29 0d 50 28 2f 20 20 20  |.glass(.).P(/   |
0000ce30  20 6e 75 6d 62 65 72 5f  6f 66 5f 72 65 63 6f 72  | number_of_recor|
0000ce40  64 73 25 3d 6e 75 6d 62  65 72 5f 6f 66 5f 72 65  |ds%=number_of_re|
0000ce50  63 6f 72 64 73 25 2d 31  0d 50 32 1e 20 20 20 20  |cords%-1.P2.    |
0000ce60  f2 72 65 61 64 5f 72 65  63 6f 72 64 28 70 72 65  |.read_record(pre|
0000ce70  73 65 6e 74 25 29 0d 50  3c 17 20 20 20 20 f2 75  |sent%).P<.    .u|
0000ce80  70 64 61 74 65 5f 64 69  73 70 6c 61 79 0d 50 46  |pdate_display.PF|
0000ce90  09 20 20 20 20 cd 0d 50  50 05 cd 0d 50 5a 05 cd  |.    ..PP...PZ..|
0000cea0  0d 50 64 05 e1 0d 50 6e  04 0d 50 78 0f dd 20 f2  |.Pd...Pn..Px.. .|
0000ceb0  74 61 62 75 6c 61 74 65  0d 50 82 08 ea 20 66 25  |tabulate.P... f%|
0000cec0  0d 50 8c 20 e3 20 66 25  20 3d 20 30 20 b8 20 6e  |.P. . f% = 0 . n|
0000ced0  75 6d 62 65 72 5f 6f 66  5f 66 69 65 6c 64 73 25  |umber_of_fields%|
0000cee0  0d 50 96 2b 20 20 63 5f  66 5f 76 24 28 66 25 29  |.P.+  c_f_v$(f%)|
0000cef0  3d 63 5f 66 5f 76 24 28  66 25 29 2b c4 bb 66 24  |=c_f_v$(f%)+..f$|
0000cf00  28 66 25 2c 32 29 2c 22  20 22 29 0d 50 a0 28 20  |(f%,2)," ").P.( |
0000cf10  20 63 5f 66 5f 76 24 28  66 25 29 3d c0 20 63 5f  | c_f_v$(f%)=. c_|
0000cf20  66 5f 76 24 28 66 25 29  2c bb 66 24 28 66 25 2c  |f_v$(f%),.f$(f%,|
0000cf30  32 29 29 0d 50 aa 05 ed  0d 50 b4 05 e1 0d 50 be  |2)).P....P....P.|
0000cf40  05 20 0d 50 c8 04 0d 50  d2 04 0d 50 dc 0b dd 20  |. .P...P...P... |
0000cf50  f2 73 6f 72 74 0d 50 e6  0d ea 20 6d 65 6d 6f 72  |.sort.P... memor|
0000cf60  79 25 0d 50 f0 14 6d 65  6d 6f 72 79 5f 73 6f 72  |y%.P..memory_sor|
0000cf70  74 25 20 3d 20 b9 0d 50  fa 1f e7 20 a4 65 78 74  |t% = ..P... .ext|
0000cf80  72 61 63 74 5f 73 6f 72  74 5f 63 6f 6e 64 69 74  |ract_sort_condit|
0000cf90  69 6f 6e 20 8c 0d 51 04  1a 20 20 f2 65 78 74 72  |ion ..Q..  .extr|
0000cfa0  61 63 74 5f 72 65 63 6f  72 64 5f 64 61 74 61 0d  |act_record_data.|
0000cfb0  51 0e 24 20 20 f2 77 72  69 74 65 5f 72 65 63 6f  |Q.$  .write_reco|
0000cfc0  72 64 28 bb 28 24 72 65  63 5f 6e 75 6d 62 65 72  |rd(.($rec_number|
0000cfd0  25 29 29 0d 51 18 1f 20  20 73 69 7a 65 25 20 3d  |%)).Q..  size% =|
0000cfe0  20 a4 66 69 6c 65 5f 73  69 7a 65 20 2b 20 35 30  | .file_size + 50|
0000cff0  30 30 0d 51 22 04 0d 51  2c 09 20 20 ea 20 85 0d  |00.Q"..Q,.  . ..|
0000d000  51 36 1d 20 20 ee 20 85  20 ea 20 20 6d 65 6d 6f  |Q6.  . . .  memo|
0000d010  72 79 5f 73 6f 72 74 25  20 3d 20 a3 0d 51 40 16  |ry_sort% = ..Q@.|
0000d020  20 20 e7 20 6d 65 6d 6f  72 79 5f 73 6f 72 74 25  |  . memory_sort%|
0000d030  20 8c 0d 51 4a 30 20 20  20 20 20 c8 99 22 4f 53  | ..QJ0     .."OS|
0000d040  5f 4d 6f 64 75 6c 65 22  2c 36 2c 2c 2c 73 69 7a  |_Module",6,,,siz|
0000d050  65 25 20 b8 20 72 30 2c  72 31 2c 6d 65 6d 6f 72  |e% . r0,r1,memor|
0000d060  79 25 0d 51 54 0c 20 20  20 20 20 f7 20 85 0d 51  |y%.QT.     . ..Q|
0000d070  5e 20 20 20 20 20 20 20  20 20 f2 6c 6f 61 64 5f  |^         .load_|
0000d080  66 69 6c 65 5f 74 6f 5f  6d 65 6d 6f 72 79 0d 51  |file_to_memory.Q|
0000d090  68 04 0d 51 72 15 20 20  20 20 20 f2 6d 65 6d 6f  |h..Qr.     .memo|
0000d0a0  72 79 5f 73 6f 72 74 0d  51 7c 04 0d 51 86 22 20  |ry_sort.Q|..Q." |
0000d0b0  20 20 20 20 20 20 20 f2  73 61 76 65 5f 66 69 6c  |       .save_fil|
0000d0c0  65 5f 66 72 6f 6d 5f 6d  65 6d 6f 72 79 0d 51 90  |e_from_memory.Q.|
0000d0d0  21 20 20 20 20 20 c8 99  22 4f 53 5f 4d 6f 64 75  |!     .."OS_Modu|
0000d0e0  6c 65 22 2c 37 2c 2c 6d  65 6d 6f 72 79 25 0d 51  |le",7,,memory%.Q|
0000d0f0  9a 07 20 20 cc 0d 51 a4  0c 20 20 20 20 20 f7 20  |..  ..Q..     . |
0000d100  85 0d 51 ae 0b 20 20 20  20 20 ef 37 0d 51 b8 12  |..Q..     .7.Q..|
0000d110  20 20 20 20 20 f2 64 69  73 63 73 6f 72 74 0d 51  |     .discsort.Q|
0000d120  c2 07 20 20 cd 0d 51 cc  23 20 20 f2 72 65 61 64  |..  ..Q.#  .read|
0000d130  5f 72 65 63 6f 72 64 28  bb 28 24 72 65 63 5f 6e  |_record(.($rec_n|
0000d140  75 6d 62 65 72 25 29 29  0d 51 d6 15 20 20 f2 75  |umber%)).Q..  .u|
0000d150  70 64 61 74 65 5f 64 69  73 70 6c 61 79 0d 51 e0  |pdate_display.Q.|
0000d160  05 cd 0d 51 ea 05 e1 0d  51 f4 04 0d 51 fe 04 0d  |...Q....Q...Q...|
0000d170  52 08 12 dd 20 f2 6d 65  6d 6f 72 79 5f 73 6f 72  |R... .memory_sor|
0000d180  74 0d 52 12 0d f2 67 6c  61 73 73 28 b9 29 0d 52  |t.R...glass(.).R|
0000d190  1c 1c 6d 61 78 20 3d 20  6e 75 6d 62 65 72 5f 6f  |..max = number_o|
0000d1a0  66 5f 72 65 63 6f 72 64  73 25 0d 52 26 19 e3 20  |f_records%.R&.. |
0000d1b0  63 75 72 72 65 6e 74 20  3d 20 31 20 b8 20 6d 61  |current = 1 . ma|
0000d1c0  78 2d 31 0d 52 30 25 20  20 20 f2 72 65 63 61 6c  |x-1.R0%   .recal|
0000d1d0  6c 5f 66 72 6f 6d 5f 6d  65 6d 6f 72 79 5f 61 28  |l_from_memory_a(|
0000d1e0  63 75 72 72 65 6e 74 29  0d 52 3a 44 20 20 20 68  |current).R:D   h|
0000d1f0  69 67 68 65 73 74 20 3d  20 63 75 72 72 65 6e 74  |ighest = current|
0000d200  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3a  |               :|
0000d210  f4 20 72 65 63 6f 72 64  5f 62 20 69 73 20 68 69  |. record_b is hi|
0000d220  67 68 65 73 74 20 73 6f  20 66 61 72 0d 52 44 25  |ghest so far.RD%|
0000d230  20 20 20 f2 72 65 63 61  6c 6c 5f 66 72 6f 6d 5f  |   .recall_from_|
0000d240  6d 65 6d 6f 72 79 5f 62  28 63 75 72 72 65 6e 74  |memory_b(current|
0000d250  29 0d 52 4e 1d 20 20 20  e3 20 69 20 3d 20 63 75  |).RN.   . i = cu|
0000d260  72 72 65 6e 74 20 2b 31  20 b8 20 6d 61 78 0d 52  |rrent +1 . max.R|
0000d270  58 21 20 20 20 20 20 f2  72 65 63 61 6c 6c 5f 66  |X!     .recall_f|
0000d280  72 6f 6d 5f 6d 65 6d 6f  72 79 5f 61 28 69 29 0d  |rom_memory_a(i).|
0000d290  52 62 15 20 20 20 20 20  e7 20 a4 63 6f 6d 70 61  |Rb.     . .compa|
0000d2a0  72 65 20 8c 0d 52 6c 16  20 20 20 20 20 20 20 68  |re ..Rl.       h|
0000d2b0  69 67 68 65 73 74 20 3d  20 69 0d 52 76 29 20 20  |ighest = i.Rv)  |
0000d2c0  20 20 20 20 20 f2 72 65  63 61 6c 6c 5f 66 72 6f  |     .recall_fro|
0000d2d0  6d 5f 6d 65 6d 6f 72 79  5f 62 28 68 69 67 68 65  |m_memory_b(highe|
0000d2e0  73 74 29 0d 52 80 0a 20  20 20 20 20 cd 0d 52 8a  |st).R..     ..R.|
0000d2f0  08 20 20 20 ed 0d 52 94  25 20 20 20 f2 72 65 63  |.   ..R.%   .rec|
0000d300  61 6c 6c 5f 66 72 6f 6d  5f 6d 65 6d 6f 72 79 5f  |all_from_memory_|
0000d310  61 28 63 75 72 72 65 6e  74 29 0d 52 9e 22 20 20  |a(current).R."  |
0000d320  20 f2 73 74 6f 72 65 5f  69 6e 5f 6d 65 6d 6f 72  | .store_in_memor|
0000d330  79 5f 61 28 68 69 67 68  65 73 74 29 0d 52 a8 22  |y_a(highest).R."|
0000d340  20 20 20 f2 73 74 6f 72  65 5f 69 6e 5f 6d 65 6d  |   .store_in_mem|
0000d350  6f 72 79 5f 62 28 63 75  72 72 65 6e 74 29 0d 52  |ory_b(current).R|
0000d360  b2 23 20 20 20 f4 20 53  57 41 50 20 72 28 63 75  |.#   . SWAP r(cu|
0000d370  72 72 65 6e 74 29 2c 72  28 68 69 67 68 65 73 74  |rrent),r(highest|
0000d380  29 0d 52 bc 32 20 20 20  c8 99 22 48 6f 75 72 67  |).R.2   .."Hourg|
0000d390  6c 61 73 73 5f 50 65 72  63 65 6e 74 61 67 65 22  |lass_Percentage"|
0000d3a0  2c 20 63 75 72 72 65 6e  74 2f 6d 61 78 20 2a 20  |, current/max * |
0000d3b0  31 30 30 0d 52 c6 0f 20  20 20 f2 70 6f 6c 6c 28  |100.R..   .poll(|
0000d3c0  30 29 0d 52 d0 05 ed 0d  52 da 0d f2 67 6c 61 73  |0).R....R...glas|
0000d3d0  73 28 a3 29 0d 52 e4 05  e1 0d 52 ee 04 0d 52 f8  |s(.).R....R...R.|
0000d3e0  04 0d 53 02 04 0d 53 0c  0f dd 20 f2 64 69 73 63  |..S...S... .disc|
0000d3f0  73 6f 72 74 0d 53 16 1c  6d 61 78 20 3d 20 6e 75  |sort.S..max = nu|
0000d400  6d 62 65 72 5f 6f 66 5f  72 65 63 6f 72 64 73 25  |mber_of_records%|
0000d410  0d 53 20 0d f2 67 6c 61  73 73 28 b9 29 0d 53 2a  |.S ..glass(.).S*|
0000d420  19 e3 20 63 75 72 72 65  6e 74 20 3d 20 31 20 b8  |.. current = 1 .|
0000d430  20 6d 61 78 2d 31 0d 53  34 1e 20 20 20 f2 72 65  | max-1.S4.   .re|
0000d440  61 64 5f 72 65 63 6f 72  64 5f 61 28 63 75 72 72  |ad_record_a(curr|
0000d450  65 6e 74 29 0d 53 3e 44  20 20 20 68 69 67 68 65  |ent).S>D   highe|
0000d460  73 74 20 3d 20 63 75 72  72 65 6e 74 20 20 20 20  |st = current    |
0000d470  20 20 20 20 20 20 20 20  20 20 20 3a f4 20 72 65  |           :. re|
0000d480  63 6f 72 64 5f 62 20 69  73 20 68 69 67 68 65 73  |cord_b is highes|
0000d490  74 20 73 6f 20 66 61 72  0d 53 48 1e 20 20 20 f2  |t so far.SH.   .|
0000d4a0  72 65 61 64 5f 72 65 63  6f 72 64 5f 62 28 63 75  |read_record_b(cu|
0000d4b0  72 72 65 6e 74 29 0d 53  52 1d 20 20 20 e3 20 69  |rrent).SR.   . i|
0000d4c0  20 3d 20 63 75 72 72 65  6e 74 20 2b 31 20 b8 20  | = current +1 . |
0000d4d0  6d 61 78 0d 53 5c 1a 20  20 20 20 20 f2 72 65 61  |max.S\.     .rea|
0000d4e0  64 5f 72 65 63 6f 72 64  5f 61 28 69 29 0d 53 66  |d_record_a(i).Sf|
0000d4f0  15 20 20 20 20 20 e7 20  a4 63 6f 6d 70 61 72 65  |.     . .compare|
0000d500  20 8c 0d 53 70 16 20 20  20 20 20 20 20 68 69 67  | ..Sp.       hig|
0000d510  68 65 73 74 20 3d 20 69  0d 53 7a 22 20 20 20 20  |hest = i.Sz"    |
0000d520  20 20 20 f2 72 65 61 64  5f 72 65 63 6f 72 64 5f  |   .read_record_|
0000d530  62 28 68 69 67 68 65 73  74 29 0d 53 84 0a 20 20  |b(highest).S..  |
0000d540  20 20 20 cd 0d 53 8e 08  20 20 20 ed 0d 53 98 1e  |   ..S..   ..S..|
0000d550  20 20 20 f2 72 65 61 64  5f 72 65 63 6f 72 64 5f  |   .read_record_|
0000d560  61 28 63 75 72 72 65 6e  74 29 0d 53 a2 1f 20 20  |a(current).S..  |
0000d570  20 f2 77 72 69 74 65 5f  72 65 63 6f 72 64 5f 61  | .write_record_a|
0000d580  28 68 69 67 68 65 73 74  29 0d 53 ac 1f 20 20 20  |(highest).S..   |
0000d590  f2 77 72 69 74 65 5f 72  65 63 6f 72 64 5f 62 28  |.write_record_b(|
0000d5a0  63 75 72 72 65 6e 74 29  0d 53 b6 23 20 20 20 f4  |current).S.#   .|
0000d5b0  20 53 57 41 50 20 72 28  63 75 72 72 65 6e 74 29  | SWAP r(current)|
0000d5c0  2c 72 28 68 69 67 68 65  73 74 29 0d 53 c0 32 20  |,r(highest).S.2 |
0000d5d0  20 20 c8 99 22 48 6f 75  72 67 6c 61 73 73 5f 50  |  .."Hourglass_P|
0000d5e0  65 72 63 65 6e 74 61 67  65 22 2c 20 63 75 72 72  |ercentage", curr|
0000d5f0  65 6e 74 2f 6d 61 78 20  2a 20 31 30 30 0d 53 ca  |ent/max * 100.S.|
0000d600  0f 20 20 20 f2 70 6f 6c  6c 28 30 29 0d 53 d4 05  |.   .poll(0).S..|
0000d610  ed 0d 53 de 0d f2 67 6c  61 73 73 28 a3 29 0d 53  |..S...glass(.).S|
0000d620  e8 05 e1 0d 53 f2 04 0d  53 fc 05 20 0d 54 06 04  |....S...S.. .T..|
0000d630  0d 54 10 04 0d 54 1a 04  0d 54 24 05 20 0d 54 2e  |.T...T...T$. .T.|
0000d640  04 0d 54 38 04 0d 54 42  04 0d 54 4c 1f dd 20 f2  |..T8..TB..TL.. .|
0000d650  72 65 61 64 5f 72 65 63  6f 72 64 5f 61 28 70 6f  |read_record_a(po|
0000d660  73 69 74 69 6f 6e 25 29  0d 54 56 13 ea 20 20 70  |sition%).TV..  p|
0000d670  6f 69 6e 74 65 72 25 2c  20 66 25 0d 54 60 12 72  |ointer%, f%.T`.r|
0000d680  65 63 6f 72 64 5f 61 24  28 29 3d 22 22 0d 54 6a  |ecord_a$()="".Tj|
0000d690  2a 70 6f 69 6e 74 65 72  25 20 3d 20 35 30 30 30  |*pointer% = 5000|
0000d6a0  2b 70 6f 73 69 74 69 6f  6e 25 2a 72 65 63 6f 72  |+position%*recor|
0000d6b0  64 5f 73 69 7a 65 25 0d  54 74 16 cf 23 66 69 6c  |d_size%.Tt..#fil|
0000d6c0  65 25 20 3d 20 70 6f 69  6e 74 65 72 25 0d 54 7e  |e% = pointer%.T~|
0000d6d0  12 62 61 64 5f 66 69 65  6c 64 25 20 3d 20 a3 0d  |.bad_field% = ..|
0000d6e0  54 88 07 ea 20 85 0d 54  92 0a 66 25 20 3d 20 30  |T... ..T..f% = 0|
0000d6f0  0d 54 9c 30 c8 95 20 66  25 20 3c 28 6e 75 6d 62  |.T.0.. f% <(numb|
0000d700  65 72 5f 6f 66 5f 66 69  65 6c 64 73 25 20 20 29  |er_of_fields%  )|
0000d710  20 20 80 20 ac 20 62 61  64 5f 66 69 65 6c 64 25  |  . . bad_field%|
0000d720  0d 54 a6 1a 20 20 ee 20  85 20 ea 20 62 61 64 5f  |.T..  . . . bad_|
0000d730  66 69 65 6c 64 25 20 3d  20 b9 0d 54 b0 16 20 20  |field% = ..T..  |
0000d740  e7 20 ac 20 62 61 64 5f  66 69 65 6c 64 25 20 8c  |. . bad_field% .|
0000d750  0d 54 ba 1f 20 20 20 20  e8 20 23 66 69 6c 65 25  |.T..    . #file%|
0000d760  2c 20 72 65 63 6f 72 64  5f 61 24 28 66 25 29 0d  |, record_a$(f%).|
0000d770  54 c4 0e 20 20 20 20 66  25 20 2b 3d 31 0d 54 ce  |T..    f% +=1.T.|
0000d780  07 20 20 cd 0d 54 d8 05  ce 0d 54 e2 07 f7 20 85  |.  ..T....T... .|
0000d790  0d 54 ec 05 e1 0d 54 f6  04 0d 55 00 04 0d 55 0a  |.T....T...U...U.|
0000d7a0  20 dd 20 f2 77 72 69 74  65 5f 72 65 63 6f 72 64  | . .write_record|
0000d7b0  5f 61 28 70 6f 73 69 74  69 6f 6e 25 29 0d 55 14  |_a(position%).U.|
0000d7c0  0e ea 20 70 6f 69 6e 74  65 72 25 0d 55 1e 2a 70  |.. pointer%.U.*p|
0000d7d0  6f 69 6e 74 65 72 25 20  3d 20 35 30 30 30 2b 70  |ointer% = 5000+p|
0000d7e0  6f 73 69 74 69 6f 6e 25  2a 72 65 63 6f 72 64 5f  |osition%*record_|
0000d7f0  73 69 7a 65 25 0d 55 28  16 cf 23 66 69 6c 65 25  |size%.U(..#file%|
0000d800  20 3d 20 70 6f 69 6e 74  65 72 25 0d 55 32 22 e3  | = pointer%.U2".|
0000d810  20 66 25 20 3d 20 30 20  b8 20 6e 75 6d 62 65 72  | f% = 0 . number|
0000d820  5f 6f 66 5f 66 69 65 6c  64 73 25 2d 31 0d 55 3c  |_of_fields%-1.U<|
0000d830  1c 20 f1 20 23 66 69 6c  65 25 2c 20 72 65 63 6f  |. . #file%, reco|
0000d840  72 64 5f 61 24 28 66 25  29 0d 55 46 05 ed 0d 55  |rd_a$(f%).UF...U|
0000d850  50 05 e1 0d 55 5a 04 0d  55 64 1f dd 20 f2 72 65  |P...UZ..Ud.. .re|
0000d860  61 64 5f 72 65 63 6f 72  64 5f 62 28 70 6f 73 69  |ad_record_b(posi|
0000d870  74 69 6f 6e 25 29 0d 55  6e 13 ea 20 20 70 6f 69  |tion%).Un..  poi|
0000d880  6e 74 65 72 25 2c 20 66  25 0d 55 78 14 72 65 63  |nter%, f%.Ux.rec|
0000d890  6f 72 64 5f 62 24 28 29  20 3d 20 22 22 0d 55 82  |ord_b$() = "".U.|
0000d8a0  2a 70 6f 69 6e 74 65 72  25 20 3d 20 35 30 30 30  |*pointer% = 5000|
0000d8b0  2b 70 6f 73 69 74 69 6f  6e 25 2a 72 65 63 6f 72  |+position%*recor|
0000d8c0  64 5f 73 69 7a 65 25 0d  55 8c 16 cf 23 66 69 6c  |d_size%.U...#fil|
0000d8d0  65 25 20 3d 20 70 6f 69  6e 74 65 72 25 0d 55 96  |e% = pointer%.U.|
0000d8e0  12 62 61 64 5f 66 69 65  6c 64 25 20 3d 20 a3 0d  |.bad_field% = ..|
0000d8f0  55 a0 07 ea 20 85 0d 55  aa 0a 66 25 20 3d 20 30  |U... ..U..f% = 0|
0000d900  0d 55 b4 30 c8 95 20 66  25 20 3c 28 6e 75 6d 62  |.U.0.. f% <(numb|
0000d910  65 72 5f 6f 66 5f 66 69  65 6c 64 73 25 20 20 29  |er_of_fields%  )|
0000d920  20 20 80 20 ac 20 62 61  64 5f 66 69 65 6c 64 25  |  . . bad_field%|
0000d930  0d 55 be 1a 20 20 ee 20  85 20 ea 20 62 61 64 5f  |.U..  . . . bad_|
0000d940  66 69 65 6c 64 25 20 3d  20 b9 0d 55 c8 16 20 20  |field% = ..U..  |
0000d950  e7 20 ac 20 62 61 64 5f  66 69 65 6c 64 25 20 8c  |. . bad_field% .|
0000d960  0d 55 d2 1f 20 20 20 20  e8 20 23 66 69 6c 65 25  |.U..    . #file%|
0000d970  2c 20 72 65 63 6f 72 64  5f 62 24 28 66 25 29 0d  |, record_b$(f%).|
0000d980  55 dc 0e 20 20 20 20 66  25 20 2b 3d 31 0d 55 e6  |U..    f% +=1.U.|
0000d990  07 20 20 cd 0d 55 f0 05  ce 0d 55 fa 07 f7 20 85  |.  ..U....U... .|
0000d9a0  0d 56 04 05 e1 0d 56 0e  04 0d 56 18 04 0d 56 22  |.V....V...V...V"|
0000d9b0  20 dd 20 f2 77 72 69 74  65 5f 72 65 63 6f 72 64  | . .write_record|
0000d9c0  5f 62 28 70 6f 73 69 74  69 6f 6e 25 29 0d 56 2c  |_b(position%).V,|
0000d9d0  0e ea 20 70 6f 69 6e 74  65 72 25 0d 56 36 2a 70  |.. pointer%.V6*p|
0000d9e0  6f 69 6e 74 65 72 25 20  3d 20 35 30 30 30 2b 70  |ointer% = 5000+p|
0000d9f0  6f 73 69 74 69 6f 6e 25  2a 72 65 63 6f 72 64 5f  |osition%*record_|
0000da00  73 69 7a 65 25 0d 56 40  16 cf 23 66 69 6c 65 25  |size%.V@..#file%|
0000da10  20 3d 20 70 6f 69 6e 74  65 72 25 0d 56 4a 22 e3  | = pointer%.VJ".|
0000da20  20 66 25 20 3d 20 30 20  b8 20 6e 75 6d 62 65 72  | f% = 0 . number|
0000da30  5f 6f 66 5f 66 69 65 6c  64 73 25 2d 31 0d 56 54  |_of_fields%-1.VT|
0000da40  1c 20 f1 20 23 66 69 6c  65 25 2c 20 72 65 63 6f  |. . #file%, reco|
0000da50  72 64 5f 62 24 28 66 25  29 0d 56 5e 05 ed 0d 56  |rd_b$(f%).V^...V|
0000da60  68 05 e1 0d 56 72 04 0d  56 7c 04 0d 56 86 04 0d  |h...Vr..V|..V...|
0000da70  56 90 1d dd 20 a4 65 78  74 72 61 63 74 5f 73 6f  |V... .extract_so|
0000da80  72 74 5f 63 6f 6e 64 69  74 69 6f 6e 0d 56 9a 1b  |rt_condition.V..|
0000da90  ea 20 61 25 2c 20 6c 65  66 74 24 2c 20 72 69 67  |. a%, left$, rig|
0000daa0  68 74 24 2c 20 66 25 0d  56 a4 0b 6f 6b 25 20 3d  |ht$, f%.V..ok% =|
0000dab0  20 b9 0d 56 ae 10 e3 20  61 25 20 3d 20 30 20 b8  | ..V... a% = 0 .|
0000dac0  20 35 0d 56 b8 33 20 20  73 6f 72 74 5f 6c 69 6e  | 5.V.3  sort_lin|
0000dad0  65 24 28 61 25 29 20 3d  20 a4 75 70 70 65 72 28  |e$(a%) = .upper(|
0000dae0  24 28 73 6f 72 74 5f 66  69 65 6c 64 25 2b 35 30  |$(sort_field%+50|
0000daf0  2a 61 25 29 29 0d 56 c2  25 20 20 70 6f 69 6e 74  |*a%)).V.%  point|
0000db00  65 72 25 20 3d 20 73 6f  72 74 5f 66 69 65 6c 64  |er% = sort_field|
0000db10  25 2b 35 30 2a 61 25 2b  32 32 0d 56 cc 14 20 20  |%+50*a%+22.V..  |
0000db20  c8 8e 20 24 70 6f 69 6e  74 65 72 25 20 ca 0d 56  |.. $pointer% ..V|
0000db30  d6 2c 20 20 20 c9 20 22  41 22 2c 22 61 22 20 3a  |.,   . "A","a" :|
0000db40  20 20 73 6f 72 74 5f 6f  70 65 72 61 74 6f 72 24  |  sort_operator$|
0000db50  28 61 25 29 20 3d 20 22  3c 22 0d 56 e0 2c 20 20  |(a%) = "<".V.,  |
0000db60  20 c9 20 22 44 22 2c 22  64 22 20 3a 20 20 73 6f  | . "D","d" :  so|
0000db70  72 74 5f 6f 70 65 72 61  74 6f 72 24 28 61 25 29  |rt_operator$(a%)|
0000db80  20 3d 20 22 3e 22 0d 56  ea 08 20 20 20 7f 0d 56  | = ">".V..   ..V|
0000db90  f4 24 20 20 20 20 20 73  6f 72 74 5f 6f 70 65 72  |.$     sort_oper|
0000dba0  61 74 6f 72 24 28 61 25  29 20 3d 20 22 54 52 55  |ator$(a%) = "TRU|
0000dbb0  45 22 0d 56 fe 08 20 20  20 cb 0d 57 08 1e 20 20  |E".V..   ..W..  |
0000dbc0  20 e7 20 a9 20 73 6f 72  74 5f 6c 69 6e 65 24 28  | . . sort_line$(|
0000dbd0  61 25 29 20 3e 30 20 8c  0d 57 12 1c 20 20 20 20  |a%) >0 ..W..    |
0000dbe0  20 e7 20 a9 20 24 70 6f  69 6e 74 65 72 25 20 3d  | . . $pointer% =|
0000dbf0  20 30 20 8c 0d 57 1c 75  20 20 20 20 20 20 20 20  | 0 ..W.u        |
0000dc00  f2 65 72 72 6f 72 5f 6d  65 73 73 61 67 65 28 22  |.error_message("|
0000dc10  4c 69 6e 65 20 22 2b c3  28 61 25 2b 31 29 2b 22  |Line "+.(a%+1)+"|
0000dc20  20 68 61 73 20 61 20 66  69 65 6c 64 20 6e 61 6d  | has a field nam|
0000dc30  65 20 62 75 74 20 74 68  65 20 64 69 72 65 63 74  |e but the direct|
0000dc40  69 6f 6e 20 6f 66 20 74  68 65 20 73 6f 72 74 20  |ion of the sort |
0000dc50  68 61 73 20 6e 6f 74 20  62 65 65 6e 20 73 70 65  |has not been spe|
0000dc60  63 69 66 69 65 64 2e 22  29 0d 57 26 13 20 20 20  |cified.").W&.   |
0000dc70  20 20 20 20 20 6f 6b 25  20 3d 20 a3 0d 57 30 09  |     ok% = ..W0.|
0000dc80  20 20 20 20 cc 0d 57 3a  11 20 20 20 20 20 20 20  |    ..W:.       |
0000dc90  66 25 20 3d 20 30 0d 57  44 49 20 20 20 20 20 20  |f% = 0.WDI      |
0000dca0  20 c8 95 20 73 6f 72 74  5f 6c 69 6e 65 24 28 61  | .. sort_line$(a|
0000dcb0  25 29 20 3c 3e 20 a4 75  70 70 65 72 28 66 24 28  |%) <> .upper(f$(|
0000dcc0  66 25 2c 30 29 29 20 80  20 66 25 20 3c 20 6e 75  |f%,0)) . f% < nu|
0000dcd0  6d 62 65 72 5f 6f 66 5f  66 69 65 6c 64 73 25 0d  |mber_of_fields%.|
0000dce0  57 4e 12 20 20 20 20 20  20 20 20 20 66 25 2b 3d  |WN.         f%+=|
0000dcf0  31 0d 57 58 0c 20 20 20  20 20 20 20 ce 0d 57 62  |1.WX.       ..Wb|
0000dd00  31 20 20 20 20 20 20 20  e7 20 73 6f 72 74 5f 6c  |1       . sort_l|
0000dd10  69 6e 65 24 28 61 25 29  20 3c 3e 20 a4 75 70 70  |ine$(a%) <> .upp|
0000dd20  65 72 28 66 24 28 66 25  2c 30 29 29 20 8c 0d 57  |er(f$(f%,0)) ..W|
0000dd30  6c 6e 20 20 20 20 20 20  20 20 f2 65 72 72 6f 72  |ln        .error|
0000dd40  5f 6d 65 73 73 61 67 65  28 22 4c 69 6e 65 20 22  |_message("Line "|
0000dd50  2b c3 28 61 25 2b 31 29  2b 22 20 68 61 73 20 61  |+.(a%+1)+" has a|
0000dd60  20 66 69 65 6c 64 20 63  61 6c 6c 65 64 20 22 2b  | field called "+|
0000dd70  73 6f 72 74 5f 6c 69 6e  65 24 28 61 25 29 2b 22  |sort_line$(a%)+"|
0000dd80  20 74 68 69 73 20 66 69  65 6c 64 20 64 6f 65 73  | this field does|
0000dd90  20 6e 6f 74 20 65 78 69  73 74 22 29 0d 57 76 13  | not exist").Wv.|
0000dda0  20 20 20 20 20 20 20 20  6f 6b 25 20 3d 20 a3 0d  |        ok% = ..|
0000ddb0  57 80 0c 20 20 20 20 20  20 20 cd 0d 57 8a 21 20  |W..       ..W.! |
0000ddc0  20 20 20 20 20 20 6c 65  66 74 24 20 3d 20 73 6f  |      left$ = so|
0000ddd0  72 74 5f 6c 69 6e 65 24  28 61 25 29 0d 57 94 22  |rt_line$(a%).W."|
0000dde0  20 20 20 20 20 20 20 72  69 67 68 74 24 20 3d 20  |       right$ = |
0000ddf0  73 6f 72 74 5f 6c 69 6e  65 24 28 61 25 29 0d 57  |sort_line$(a%).W|
0000de00  9e 18 20 20 20 20 20 20  20 c8 8e 20 66 24 28 66  |..       .. f$(f|
0000de10  25 2c 31 29 20 ca 0d 57  a8 3b 20 20 20 20 20 20  |%,1) ..W.;      |
0000de20  20 c9 20 22 44 22 2c 22  64 22 20 3a 20 6c 65 66  | . "D","d" : lef|
0000de30  74 24 20 3d 20 22 46 4e  64 61 74 65 28 72 65 63  |t$ = "FNdate(rec|
0000de40  6f 72 64 5f 61 24 28 22  2b c3 66 25 2b 22 29 29  |ord_a$("+.f%+"))|
0000de50  22 0d 57 b2 3e 20 20 20  20 20 20 20 20 20 20 20  |".W.>           |
0000de60  20 20 20 20 20 20 20 20  20 20 20 72 69 67 68 74  |           right|
0000de70  24 3d 20 22 46 4e 64 61  74 65 28 72 65 63 6f 72  |$= "FNdate(recor|
0000de80  64 5f 62 24 28 22 2b c3  66 25 2b 22 29 29 22 0d  |d_b$("+.f%+"))".|
0000de90  57 bc 38 20 20 20 20 20  20 20 c9 20 22 4e 22 2c  |W.8       . "N",|
0000dea0  22 6e 22 20 3a 20 6c 65  66 74 24 20 3d 20 22 56  |"n" : left$ = "V|
0000deb0  41 4c 28 72 65 63 6f 72  64 5f 61 24 28 22 2b c3  |AL(record_a$("+.|
0000dec0  66 25 2b 22 29 29 22 0d  57 c6 3b 20 20 20 20 20  |f%+"))".W.;     |
0000ded0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3a  |               :|
0000dee0  20 72 69 67 68 74 24 3d  20 22 56 41 4c 28 72 65  | right$= "VAL(re|
0000def0  63 6f 72 64 5f 62 24 28  22 2b c3 66 25 2b 22 29  |cord_b$("+.f%+")|
0000df00  29 22 0d 57 d0 34 20 20  20 20 20 20 20 c9 20 22  |)".W.4       . "|
0000df10  54 22 2c 22 74 22 20 3a  20 e7 20 a4 69 63 6f 6e  |T","t" : . .icon|
0000df20  5f 73 65 74 28 73 6f 72  74 5f 77 69 6e 64 6f 77  |_set(sort_window|
0000df30  25 2c 34 29 20 8c 0d 57  da 39 20 20 20 20 20 20  |%,4) ..W.9      |
0000df40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000df50  20 20 20 6c 65 66 74 24  20 3d 20 22 72 65 63 6f  |   left$ = "reco|
0000df60  72 64 5f 61 24 28 22 2b  c3 66 25 2b 22 29 22 0d  |rd_a$("+.f%+")".|
0000df70  57 e4 39 20 20 20 20 20  20 20 20 20 20 20 20 20  |W.9             |
0000df80  20 20 20 20 20 20 20 20  20 20 20 20 72 69 67 68  |            righ|
0000df90  74 24 3d 20 22 72 65 63  6f 72 64 5f 62 24 28 22  |t$= "record_b$("|
0000dfa0  2b c3 66 25 2b 22 29 22  0d 57 ee 1b 20 20 20 20  |+.f%+")".W..    |
0000dfb0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000dfc0  20 20 cc 0d 57 f8 42 20  20 20 20 20 20 20 20 20  |  ..W.B         |
0000dfd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000dfe0  6c 65 66 74 24 20 3d 20  22 46 4e 75 70 70 65 72  |left$ = "FNupper|
0000dff0  28 72 65 63 6f 72 64 5f  61 24 28 22 2b c3 66 25  |(record_a$("+.f%|
0000e000  2b 22 29 29 22 0d 58 02  42 20 20 20 20 20 20 20  |+"))".X.B       |
0000e010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000e020  20 20 72 69 67 68 74 24  3d 20 22 46 4e 75 70 70  |  right$= "FNupp|
0000e030  65 72 28 72 65 63 6f 72  64 5f 62 24 28 22 2b c3  |er(record_b$("+.|
0000e040  66 25 2b 22 29 29 22 0d  58 0c 1b 20 20 20 20 20  |f%+"))".X..     |
0000e050  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000e060  20 cd 0d 58 16 0c 20 20  20 20 20 20 20 cb 0d 58  | ..X..       ..X|
0000e070  20 2a 20 20 20 20 20 20  20 e7 20 73 6f 72 74 5f  | *       . sort_|
0000e080  6f 70 65 72 61 74 6f 72  24 28 61 25 29 20 3d 20  |operator$(a%) = |
0000e090  22 54 52 55 45 22 20 8c  0d 58 2a 22 20 20 20 20  |"TRUE" ..X*"    |
0000e0a0  20 20 20 20 20 73 6f 72  74 5f 6c 69 6e 65 24 28  |     sort_line$(|
0000e0b0  61 25 29 3d 22 54 52 55  45 22 0d 58 34 0c 20 20  |a%)="TRUE".X4.  |
0000e0c0  20 20 20 20 20 cc 0d 58  3e 3d 20 20 20 20 20 20  |     ..X>=      |
0000e0d0  20 20 20 73 6f 72 74 5f  6c 69 6e 65 24 28 61 25  |   sort_line$(a%|
0000e0e0  29 20 3d 20 6c 65 66 74  24 2b 73 6f 72 74 5f 6f  |) = left$+sort_o|
0000e0f0  70 65 72 61 74 6f 72 24  28 61 25 29 2b 72 69 67  |perator$(a%)+rig|
0000e100  68 74 24 0d 58 48 30 20  20 20 20 20 20 20 20 20  |ht$.XH0         |
0000e110  73 6f 72 74 5f 6c 69 6e  65 24 28 61 25 2b 36 29  |sort_line$(a%+6)|
0000e120  20 3d 20 6c 65 66 74 24  2b 22 3d 22 2b 72 69 67  | = left$+"="+rig|
0000e130  68 74 24 0d 58 52 0c 20  20 20 20 20 20 20 cd 0d  |ht$.XR.       ..|
0000e140  58 5c 09 20 20 20 20 cd  0d 58 66 08 20 20 20 cc  |X\.    ..Xf.   .|
0000e150  0d 58 70 1e 20 20 20 20  20 73 6f 72 74 5f 6c 69  |.Xp.     sort_li|
0000e160  6e 65 24 28 61 25 29 3d  22 54 52 55 45 22 0d 58  |ne$(a%)="TRUE".X|
0000e170  7a 20 20 20 20 20 20 73  6f 72 74 5f 6c 69 6e 65  |z      sort_line|
0000e180  24 28 61 25 2b 36 29 3d  22 54 52 55 45 22 0d 58  |$(a%+6)="TRUE".X|
0000e190  84 09 20 20 20 20 cd 0d  58 8e 05 ed 0d 58 98 08  |..    ..X....X..|
0000e1a0  3d 6f 6b 25 0d 58 a2 05  20 0d 58 ac 04 0d 58 b6  |=ok%.X.. .X...X.|
0000e1b0  04 0d 58 c0 0e dd 20 a4  63 6f 6d 70 61 72 65 0d  |..X... .compare.|
0000e1c0  58 ca 0d ea 20 72 65 73  75 6c 74 25 0d 58 d4 0f  |X... result%.X..|
0000e1d0  72 65 73 75 6c 74 25 20  3d 20 a3 0d 58 de 16 e7  |result% = ..X...|
0000e1e0  20 a0 73 6f 72 74 5f 6c  69 6e 65 24 28 30 29 20  | .sort_line$(0) |
0000e1f0  8c 0d 58 e8 11 20 20 72  65 73 75 6c 74 25 20 3d  |..X..  result% =|
0000e200  20 b9 0d 58 f2 05 cc 0d  58 fc 18 20 20 e7 20 a0  | ..X....X..  . .|
0000e210  73 6f 72 74 5f 6c 69 6e  65 24 28 36 29 20 8c 0d  |sort_line$(6) ..|
0000e220  59 06 05 20 0d 59 10 1a  20 20 20 20 e7 20 a0 73  |Y.. .Y..    . .s|
0000e230  6f 72 74 5f 6c 69 6e 65  24 28 31 29 20 8c 0d 59  |ort_line$(1) ..Y|
0000e240  1a 15 20 20 20 20 20 20  72 65 73 75 6c 74 25 20  |..      result% |
0000e250  3d 20 b9 0d 59 24 09 20  20 20 20 cc 0d 59 2e 1b  |= ..Y$.    ..Y..|
0000e260  20 20 20 20 20 e7 20 a0  73 6f 72 74 5f 6c 69 6e  |     . .sort_lin|
0000e270  65 24 28 37 29 20 8c 0d  59 38 05 20 0d 59 42 1d  |e$(7) ..Y8. .YB.|
0000e280  20 20 20 20 20 20 20 e7  20 a0 73 6f 72 74 5f 6c  |       . .sort_l|
0000e290  69 6e 65 24 28 32 29 20  8c 0d 59 4c 17 20 20 20  |ine$(2) ..YL.   |
0000e2a0  20 20 20 20 20 72 65 73  75 6c 74 25 20 3d 20 b9  |     result% = .|
0000e2b0  0d 59 56 0c 20 20 20 20  20 20 20 cc 0d 59 60 1e  |.YV.       ..Y`.|
0000e2c0  20 20 20 20 20 20 20 20  e7 20 a0 73 6f 72 74 5f  |        . .sort_|
0000e2d0  6c 69 6e 65 24 28 38 29  20 8c 0d 59 6a 05 20 0d  |line$(8) ..Yj. .|
0000e2e0  59 74 20 20 20 20 20 20  20 20 20 20 20 e7 20 a0  |Yt           . .|
0000e2f0  73 6f 72 74 5f 6c 69 6e  65 24 28 33 29 20 8c 0d  |sort_line$(3) ..|
0000e300  59 7e 1b 20 20 20 20 20  20 20 20 20 20 20 20 72  |Y~.            r|
0000e310  65 73 75 6c 74 25 20 3d  20 b9 0d 59 88 0f 20 20  |esult% = ..Y..  |
0000e320  20 20 20 20 20 20 20 20  cc 0d 59 92 22 20 20 20  |        ..Y."   |
0000e330  20 20 20 20 20 20 20 20  20 e7 20 a0 73 6f 72 74  |         . .sort|
0000e340  5f 6c 69 6e 65 24 28 39  29 20 8c 0d 59 9c 05 20  |_line$(9) ..Y.. |
0000e350  0d 59 a6 24 20 20 20 20  20 20 20 20 20 20 20 20  |.Y.$            |
0000e360  20 20 e7 20 a0 73 6f 72  74 5f 6c 69 6e 65 24 28  |  . .sort_line$(|
0000e370  34 29 20 8c 0d 59 b0 1f  20 20 20 20 20 20 20 20  |4) ..Y..        |
0000e380  20 20 20 20 20 20 20 20  72 65 73 75 6c 74 25 20  |        result% |
0000e390  3d 20 b9 0d 59 ba 13 20  20 20 20 20 20 20 20 20  |= ..Y..         |
0000e3a0  20 20 20 20 20 cc 0d 59  c4 27 20 20 20 20 20 20  |     ..Y.'      |
0000e3b0  20 20 20 20 20 20 20 20  20 20 e7 20 a0 73 6f 72  |          . .sor|
0000e3c0  74 5f 6c 69 6e 65 24 28  31 30 29 20 8c 0d 59 ce  |t_line$(10) ..Y.|
0000e3d0  05 20 0d 59 d8 29 20 20  20 20 20 20 20 20 20 20  |. .Y.)          |
0000e3e0  20 20 20 20 20 20 20 20  20 e7 20 a0 73 6f 72 74  |         . .sort|
0000e3f0  5f 6c 69 6e 65 24 28 35  29 20 8c 0d 59 e2 24 20  |_line$(5) ..Y.$ |
0000e400  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000e410  20 20 20 20 72 65 73 75  6c 74 25 20 3d 20 b9 0d  |    result% = ..|
0000e420  59 ec 18 20 20 20 20 20  20 20 20 20 20 20 20 20  |Y..             |
0000e430  20 20 20 20 20 20 cc 0d  59 f6 2c 20 20 20 20 20  |      ..Y.,     |
0000e440  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000e450  e7 20 a0 73 6f 72 74 5f  6c 69 6e 65 24 28 31 31  |. .sort_line$(11|
0000e460  29 20 8c 0d 5a 00 05 20  0d 5a 0a 18 20 20 20 20  |) ..Z.. .Z..    |
0000e470  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cd  |               .|
0000e480  0d 5a 14 17 20 20 20 20  20 20 20 20 20 20 20 20  |.Z..            |
0000e490  20 20 20 20 20 20 cd 0d  5a 1e 04 0d 5a 28 15 20  |      ..Z...Z(. |
0000e4a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cd  |               .|
0000e4b0  0d 5a 32 13 20 20 20 20  20 20 20 20 20 20 20 20  |.Z2.            |
0000e4c0  20 20 cd 0d 5a 3c 04 0d  5a 46 11 20 20 20 20 20  |  ..Z<..ZF.     |
0000e4d0  20 20 20 20 20 20 20 cd  0d 5a 50 0f 20 20 20 20  |       ..ZP.    |
0000e4e0  20 20 20 20 20 20 cd 0d  5a 5a 04 0d 5a 64 0c 20  |      ..ZZ..Zd. |
0000e4f0  20 20 20 20 20 20 cd 0d  5a 6e 0a 20 20 20 20 20  |      ..Zn.     |
0000e500  cd 0d 5a 78 04 0d 5a 82  09 20 20 20 20 cd 0d 5a  |..Zx..Z..    ..Z|
0000e510  8c 07 20 20 cd 0d 5a 96  05 20 0d 5a a0 07 20 20  |..  ..Z.. .Z..  |
0000e520  cd 0d 5a aa 05 cd 0d 5a  b4 0c 3d 72 65 73 75 6c  |..Z....Z..=resul|
0000e530  74 25 0d 5a be 04 0d 5a  c8 1a dd 20 f2 6c 6f 61  |t%.Z...Z... .loa|
0000e540  64 5f 66 69 6c 65 5f 74  6f 5f 6d 65 6d 6f 72 79  |d_file_to_memory|
0000e550  0d 5a d2 23 e3 20 72 65  63 25 20 3d 20 31 20 b8  |.Z.#. rec% = 1 .|
0000e560  20 6e 75 6d 62 65 72 5f  6f 66 5f 72 65 63 6f 72  | number_of_recor|
0000e570  64 73 25 0d 5a dc 1a 20  20 f2 72 65 61 64 5f 72  |ds%.Z..  .read_r|
0000e580  65 63 6f 72 64 5f 61 28  72 65 63 25 29 0d 5a e6  |ecord_a(rec%).Z.|
0000e590  1e 20 20 f2 73 74 6f 72  65 5f 69 6e 5f 6d 65 6d  |.  .store_in_mem|
0000e5a0  6f 72 79 5f 61 28 72 65  63 25 29 0d 5a f0 05 ed  |ory_a(rec%).Z...|
0000e5b0  0d 5a fa 05 e1 0d 5b 04  04 0d 5b 0e 1c dd 20 f2  |.Z....[...[... .|
0000e5c0  73 61 76 65 5f 66 69 6c  65 5f 66 72 6f 6d 5f 6d  |save_file_from_m|
0000e5d0  65 6d 6f 72 79 0d 5b 18  23 e3 20 72 65 63 25 20  |emory.[.#. rec% |
0000e5e0  3d 20 31 20 b8 20 6e 75  6d 62 65 72 5f 6f 66 5f  |= 1 . number_of_|
0000e5f0  72 65 63 6f 72 64 73 25  0d 5b 22 21 20 20 f2 72  |records%.["!  .r|
0000e600  65 63 61 6c 6c 5f 66 72  6f 6d 5f 6d 65 6d 6f 72  |ecall_from_memor|
0000e610  79 5f 61 28 72 65 63 25  29 0d 5b 2c 1b 20 20 f2  |y_a(rec%).[,.  .|
0000e620  77 72 69 74 65 5f 72 65  63 6f 72 64 5f 61 28 72  |write_record_a(r|
0000e630  65 63 25 29 0d 5b 36 05  ed 0d 5b 40 05 e1 0d 5b  |ec%).[6...[@...[|
0000e640  4a 04 0d 5b 54 04 0d 5b  5e 1e dd 20 f2 73 74 6f  |J..[T..[^.. .sto|
0000e650  72 65 5f 69 6e 5f 6d 65  6d 6f 72 79 5f 61 28 72  |re_in_memory_a(r|
0000e660  65 63 25 29 0d 5b 68 28  70 6f 69 6e 74 65 72 25  |ec%).[h(pointer%|
0000e670  20 3d 20 72 65 63 25 2a  72 65 63 6f 72 64 5f 73  | = rec%*record_s|
0000e680  69 7a 65 25 2b 6d 65 6d  6f 72 79 25 0d 5b 72 23  |ize%+memory%.[r#|
0000e690  e3 20 66 25 20 3d 20 30  20 b8 20 6e 75 6d 62 65  |. f% = 0 . numbe|
0000e6a0  72 5f 6f 66 5f 66 69 65  6c 64 73 25 20 2d 31 0d  |r_of_fields% -1.|
0000e6b0  5b 7c 20 20 20 20 24 70  6f 69 6e 74 65 72 25 20  |[|    $pointer% |
0000e6c0  3d 20 72 65 63 6f 72 64  5f 61 24 28 66 25 29 0d  |= record_a$(f%).|
0000e6d0  5b 86 2e 20 20 20 20 70  6f 69 6e 74 65 72 25 20  |[..    pointer% |
0000e6e0  3d 20 70 6f 69 6e 74 65  72 25 20 2b 20 a9 72 65  |= pointer% + .re|
0000e6f0  63 6f 72 64 5f 61 24 28  66 25 29 2b 31 0d 5b 90  |cord_a$(f%)+1.[.|
0000e700  05 ed 0d 5b 9a 05 e1 0d  5b a4 04 0d 5b ae 1e dd  |...[....[...[...|
0000e710  20 f2 73 74 6f 72 65 5f  69 6e 5f 6d 65 6d 6f 72  | .store_in_memor|
0000e720  79 5f 62 28 72 65 63 25  29 0d 5b b8 28 70 6f 69  |y_b(rec%).[.(poi|
0000e730  6e 74 65 72 25 20 3d 20  72 65 63 25 2a 72 65 63  |nter% = rec%*rec|
0000e740  6f 72 64 5f 73 69 7a 65  25 2b 6d 65 6d 6f 72 79  |ord_size%+memory|
0000e750  25 0d 5b c2 23 e3 20 66  25 20 3d 20 30 20 b8 20  |%.[.#. f% = 0 . |
0000e760  6e 75 6d 62 65 72 5f 6f  66 5f 66 69 65 6c 64 73  |number_of_fields|
0000e770  25 20 2d 31 0d 5b cc 20  20 20 20 24 70 6f 69 6e  |% -1.[.    $poin|
0000e780  74 65 72 25 20 3d 20 72  65 63 6f 72 64 5f 62 24  |ter% = record_b$|
0000e790  28 66 25 29 0d 5b d6 2e  20 20 20 20 70 6f 69 6e  |(f%).[..    poin|
0000e7a0  74 65 72 25 20 3d 20 70  6f 69 6e 74 65 72 25 20  |ter% = pointer% |
0000e7b0  2b 20 a9 72 65 63 6f 72  64 5f 62 24 28 66 25 29  |+ .record_b$(f%)|
0000e7c0  2b 31 0d 5b e0 05 ed 0d  5b ea 05 e1 0d 5b f4 04  |+1.[....[....[..|
0000e7d0  0d 5b fe 04 0d 5c 08 21  dd 20 f2 72 65 63 61 6c  |.[...\.!. .recal|
0000e7e0  6c 5f 66 72 6f 6d 5f 6d  65 6d 6f 72 79 5f 61 28  |l_from_memory_a(|
0000e7f0  72 65 63 25 29 0d 5c 12  28 70 6f 69 6e 74 65 72  |rec%).\.(pointer|
0000e800  25 20 3d 20 72 65 63 25  2a 72 65 63 6f 72 64 5f  |% = rec%*record_|
0000e810  73 69 7a 65 25 2b 6d 65  6d 6f 72 79 25 0d 5c 1c  |size%+memory%.\.|
0000e820  23 e3 20 66 25 20 3d 20  30 20 b8 20 6e 75 6d 62  |#. f% = 0 . numb|
0000e830  65 72 5f 6f 66 5f 66 69  65 6c 64 73 25 20 2d 31  |er_of_fields% -1|
0000e840  0d 5c 26 20 20 20 20 72  65 63 6f 72 64 5f 61 24  |.\&    record_a$|
0000e850  28 66 25 29 20 3d 20 24  70 6f 69 6e 74 65 72 25  |(f%) = $pointer%|
0000e860  0d 5c 30 2e 20 20 20 20  70 6f 69 6e 74 65 72 25  |.\0.    pointer%|
0000e870  20 3d 20 70 6f 69 6e 74  65 72 25 20 2b 20 a9 72  | = pointer% + .r|
0000e880  65 63 6f 72 64 5f 61 24  28 66 25 29 2b 31 0d 5c  |ecord_a$(f%)+1.\|
0000e890  3a 05 ed 0d 5c 44 05 e1  0d 5c 4e 04 0d 5c 58 21  |:...\D...\N..\X!|
0000e8a0  dd 20 f2 72 65 63 61 6c  6c 5f 66 72 6f 6d 5f 6d  |. .recall_from_m|
0000e8b0  65 6d 6f 72 79 5f 62 28  72 65 63 25 29 0d 5c 62  |emory_b(rec%).\b|
0000e8c0  28 70 6f 69 6e 74 65 72  25 20 3d 20 72 65 63 25  |(pointer% = rec%|
0000e8d0  2a 72 65 63 6f 72 64 5f  73 69 7a 65 25 2b 6d 65  |*record_size%+me|
0000e8e0  6d 6f 72 79 25 0d 5c 6c  23 e3 20 66 25 20 3d 20  |mory%.\l#. f% = |
0000e8f0  30 20 b8 20 6e 75 6d 62  65 72 5f 6f 66 5f 66 69  |0 . number_of_fi|
0000e900  65 6c 64 73 25 20 2d 31  0d 5c 76 20 20 20 20 72  |elds% -1.\v    r|
0000e910  65 63 6f 72 64 5f 62 24  28 66 25 29 20 3d 20 24  |ecord_b$(f%) = $|
0000e920  70 6f 69 6e 74 65 72 25  0d 5c 80 2e 20 20 20 20  |pointer%.\..    |
0000e930  70 6f 69 6e 74 65 72 25  20 3d 20 70 6f 69 6e 74  |pointer% = point|
0000e940  65 72 25 20 2b 20 a9 72  65 63 6f 72 64 5f 62 24  |er% + .record_b$|
0000e950  28 66 25 29 2b 31 0d 5c  8a 05 ed 0d 5c 94 05 e1  |(f%)+1.\....\...|
0000e960  0d 5c 9e 04 0d 5c a8 04  0d 5c b2 11 dd 20 f2 72  |.\...\...\... .r|
0000e970  65 61 64 5f 76 69 72 75  73 0d 5c bc 08 ea 20 66  |ead_virus.\... f|
0000e980  25 0d 5c c6 21 66 25 20  3d 20 8e 28 22 3c 43 61  |%.\.!f% = .("<Ca|
0000e990  72 64 42 61 73 65 24 44  69 72 3e 2e 64 61 74 65  |rdBase$Dir>.date|
0000e9a0  22 29 0d 5c d0 0e e7 20  66 25 20 3e 20 30 20 8c  |").\... f% > 0 .|
0000e9b0  0d 5c da 14 20 20 76 69  72 75 73 5f 73 65 74 25  |.\..  virus_set%|
0000e9c0  20 3d 20 b9 0d 5c e4 12  20 20 de 20 76 69 72 75  | = ..\..  . viru|
0000e9d0  73 24 28 31 32 29 0d 5c  ee 11 20 20 63 6f 75 6e  |s$(12).\..  coun|
0000e9e0  74 25 20 3d 20 2d 31 0d  5c f8 07 20 20 f5 0d 5d  |t% = -1.\..  ..]|
0000e9f0  02 13 20 20 20 20 20 63  6f 75 6e 74 25 20 2b 3d  |..     count% +=|
0000ea00  31 0d 5d 0c 24 20 20 20  20 20 6e 6f 5f 6d 6f 72  |1.].$     no_mor|
0000ea10  65 25 20 3d 20 a4 72 65  61 64 5f 76 69 72 75 73  |e% = .read_virus|
0000ea20  5f 6c 69 6e 65 0d 5d 16  1e 20 20 fd 20 63 6f 75  |_line.]..  . cou|
0000ea30  6e 74 25 20 3d 20 31 30  20 84 20 6e 6f 5f 6d 6f  |nt% = 10 . no_mo|
0000ea40  72 65 25 0d 5d 20 0b 20  20 d9 20 23 66 25 0d 5d  |re%.] .  . #f%.]|
0000ea50  2a 23 20 20 e7 20 c0 76  69 72 75 73 24 28 30 29  |*#  . .virus$(0)|
0000ea60  2c 36 29 20 3c 3e 20 c1  91 24 2c 35 2c 36 29 20  |,6) <> ..$,5,6) |
0000ea70  8c 0d 5d 34 17 20 20 20  20 20 76 69 72 75 73 5f  |..]4.     virus_|
0000ea80  73 65 74 25 20 3d 20 a3  0d 5d 3e 07 20 20 cc 0d  |set% = ..]>.  ..|
0000ea90  5d 48 1b 20 20 20 20 6e  6f 5f 6f 66 5f 76 69 72  |]H.    no_of_vir|
0000eaa0  5f 6d 65 73 73 25 20 3d  20 30 0d 5d 52 15 20 20  |_mess% = 0.]R.  |
0000eab0  20 20 e3 20 6a 25 20 3d  20 31 20 b8 20 31 30 0d  |  . j% = 1 . 10.|
0000eac0  5d 5c 2f 20 20 20 20 20  e7 20 a9 76 69 72 75 73  |]\/     . .virus|
0000ead0  24 28 6a 25 29 20 3e 20  30 20 8c 20 6e 6f 5f 6f  |$(j%) > 0 . no_o|
0000eae0  66 5f 76 69 72 5f 6d 65  73 73 25 2b 3d 31 0d 5d  |f_vir_mess%+=1.]|
0000eaf0  66 09 20 20 20 20 ed 0d  5d 70 1e 20 20 20 20 20  |f.    ..]p.     |
0000eb00  63 75 72 72 65 6e 74 5f  76 69 72 5f 6d 65 73 73  |current_vir_mess|
0000eb10  25 20 3d 20 31 0d 5d 7a  2e 20 20 20 20 e7 20 6e  |% = 1.]z.    . n|
0000eb20  6f 5f 6f 66 5f 76 69 72  5f 6d 65 73 73 25 20 3d  |o_of_vir_mess% =|
0000eb30  20 30 20 8c 20 76 69 72  75 73 5f 73 65 74 25 20  | 0 . virus_set% |
0000eb40  3d 20 a3 0d 5d 84 07 20  20 cd 0d 5d 8e 05 cc 0d  |= ..]..  ..]....|
0000eb50  5d 98 14 20 20 76 69 72  75 73 5f 73 65 74 25 20  |]..  virus_set% |
0000eb60  3d 20 a3 0d 5d a2 05 cd  0d 5d ac 05 e1 0d 5d b6  |= ..]....]....].|
0000eb70  05 20 0d 5d c0 04 0d 5d  ca 16 dd 20 a4 72 65 61  |. .]...]... .rea|
0000eb80  64 5f 76 69 72 75 73 5f  6c 69 6e 65 0d 5d d4 11  |d_virus_line.]..|
0000eb90  20 20 f2 67 65 74 5f 61  5f 6c 69 6e 65 0d 5d de  |  .get_a_line.].|
0000eba0  20 20 20 c8 95 20 c0 6c  69 6e 65 24 2c 31 29 20  |   .. .line$,1) |
0000ebb0  3d 22 7c 22 20 80 20 ac  20 c5 23 66 25 0d 5d e8  |="|" . . .#f%.].|
0000ebc0  14 20 20 20 20 20 f2 67  65 74 5f 61 5f 6c 69 6e  |.     .get_a_lin|
0000ebd0  65 0d 5d f2 07 20 20 ce  0d 5d fc 1c 20 20 76 69  |e.]..  ..]..  vi|
0000ebe0  72 75 73 24 28 63 6f 75  6e 74 25 29 20 3d 20 6c  |rus$(count%) = l|
0000ebf0  69 6e 65 24 0d 5e 06 0b  3d 20 c5 20 23 66 25 0d  |ine$.^..= . #f%.|
0000ec00  5e 10 04 0d 5e 1a 04 0d  5e 24 11 dd 20 f2 67 65  |^...^...^$.. .ge|
0000ec10  74 5f 61 5f 6c 69 6e 65  0d 5e 2e 0f 20 20 6c 69  |t_a_line.^..  li|
0000ec20  6e 65 24 20 3d 22 22 0d  5e 38 0f 20 20 63 25 20  |ne$ ="".^8.  c% |
0000ec30  3d 20 9a 23 66 25 0d 5e  42 11 20 20 c8 95 20 63  |= .#f%.^B.  .. c|
0000ec40  25 20 3c 3e 20 31 30 0d  5e 4c 19 20 20 20 20 6c  |% <> 10.^L.    l|
0000ec50  69 6e 65 24 20 3d 20 6c  69 6e 65 24 2b bd 63 25  |ine$ = line$+.c%|
0000ec60  0d 5e 56 11 20 20 20 20  63 25 20 3d 20 9a 23 66  |.^V.    c% = .#f|
0000ec70  25 0d 5e 60 07 20 20 ce  0d 5e 6a 05 e1 0d 5e 74  |%.^`.  ..^j...^t|
0000ec80  04 0d 5e 7e 05 20 0d 5e  88 04 0d 5e 92 11 dd 20  |..^~. .^...^... |
0000ec90  f2 73 68 6f 77 5f 76 69  72 75 73 0d 5e 9c 27 f2  |.show_virus.^.'.|
0000eca0  6d 65 73 73 61 67 65 28  76 69 72 75 73 24 28 63  |message(virus$(c|
0000ecb0  75 72 72 65 6e 74 5f 76  69 72 5f 6d 65 73 73 25  |urrent_vir_mess%|
0000ecc0  29 29 0d 5e a6 19 63 75  72 72 65 6e 74 5f 76 69  |)).^..current_vi|
0000ecd0  72 5f 6d 65 73 73 25 20  2b 3d 31 0d 5e b0 2b e7  |r_mess% +=1.^.+.|
0000ece0  20 63 75 72 72 65 6e 74  5f 76 69 72 5f 6d 65 73  | current_vir_mes|
0000ecf0  73 25 20 3e 20 6e 6f 5f  6f 66 5f 76 69 72 5f 6d  |s% > no_of_vir_m|
0000ed00  65 73 73 25 20 8c 0d 5e  ba 1b 20 20 20 63 75 72  |ess% ..^..   cur|
0000ed10  72 65 6e 74 5f 76 69 72  5f 6d 65 73 73 25 20 3d  |rent_vir_mess% =|
0000ed20  31 0d 5e c4 05 cd 0d 5e  ce 05 e1 0d 5e d8 04 0d  |1.^....^....^...|
0000ed30  5e e2 04 0d 5e ec 04 0d  5e f6 04 0d 5f 00 1d dd  |^...^...^..._...|
0000ed40  20 a4 65 78 74 72 61 63  74 5f 6f 75 74 70 75 74  | .extract_output|
0000ed50  5f 6c 69 73 74 5f 6f 6b  0d 5f 0a 13 ea 20 65 72  |_list_ok._... er|
0000ed60  72 6f 72 25 2c 20 6c 69  73 74 25 0d 5f 14 0e 6c  |ror%, list%._..l|
0000ed70  69 73 74 25 20 3d 20 2d  31 0d 5f 1e 1b c8 95 20  |ist% = -1._.... |
0000ed80  6c 69 73 74 25 20 3c 20  35 20 80 20 ac 20 65 72  |list% < 5 . . er|
0000ed90  72 6f 72 25 0d 5f 28 10  20 20 6c 69 73 74 25 20  |ror%._(.  list% |
0000eda0  2b 3d 20 31 0d 5f 32 2a  20 20 70 6f 69 6e 74 65  |+= 1._2*  pointe|
0000edb0  72 25 20 3d 20 6f 75 74  70 75 74 5f 6c 69 73 74  |r% = output_list|
0000edc0  25 20 2b 20 6c 69 73 74  25 20 2a 20 37 30 0d 5f  |% + list% * 70._|
0000edd0  3c 25 20 20 6f 75 74 70  75 74 5f 6c 69 73 74 24  |<%  output_list$|
0000ede0  28 6c 69 73 74 25 29 20  3d 20 24 70 6f 69 6e 74  |(list%) = $point|
0000edf0  65 72 25 0d 5f 46 3e 20  20 6f 75 74 70 75 74 5f  |er%._F>  output_|
0000ee00  6c 69 73 74 24 28 6c 69  73 74 25 29 20 3d 20 a4  |list$(list%) = .|
0000ee10  6f 75 74 70 75 74 5f 75  70 70 65 72 28 6f 75 74  |output_upper(out|
0000ee20  70 75 74 5f 6c 69 73 74  24 28 6c 69 73 74 25 29  |put_list$(list%)|
0000ee30  29 0d 5f 50 38 20 20 f2  6f 75 74 70 75 74 5f 73  |)._P8  .output_s|
0000ee40  74 72 69 6e 67 5f 63 6f  6e 76 65 72 74 28 6f 75  |tring_convert(ou|
0000ee50  74 70 75 74 5f 6c 69 73  74 24 28 6c 69 73 74 25  |tput_list$(list%|
0000ee60  29 2c 65 72 72 6f 72 25  29 0d 5f 5a 05 ce 0d 5f  |),error%)._Z..._|
0000ee70  64 0d 3d ac 20 65 72 72  6f 72 25 0d 5f 6e 04 0d  |d.=. error%._n..|
0000ee80  5f 78 04 0d 5f 82 04 0d  5f 8c 04 0d 5f 96 04 0d  |_x.._..._..._...|
0000ee90  5f a0 1e dd 20 a4 63 72  65 61 74 65 5f 73 65 61  |_... .create_sea|
0000eea0  72 63 68 5f 73 74 72 69  6e 67 5f 6f 6b 0d 5f aa  |rch_string_ok._.|
0000eeb0  15 ea 20 73 65 61 72 63  68 25 2c 20 65 72 72 6f  |.. search%, erro|
0000eec0  72 25 0d 5f b4 11 20 20  73 65 61 72 63 68 25 20  |r%._..  search% |
0000eed0  3d 20 b9 0d 5f be 24 20  20 73 65 61 72 63 68 5f  |= .._.$  search_|
0000eee0  73 74 72 69 6e 67 24 20  3d 20 24 73 65 61 72 63  |string$ = $searc|
0000eef0  68 5f 6c 69 73 74 25 0d  5f c8 33 20 20 e7 20 a4  |h_list%._.3  . .|
0000ef00  69 63 6f 6e 5f 73 65 74  28 6f 75 74 70 75 74 5f  |icon_set(output_|
0000ef10  77 69 6e 64 6f 77 25 2c  63 61 73 65 5f 73 65 6e  |window%,case_sen|
0000ef20  73 5f 69 63 6f 6e 25 29  20 8c 0d 5f d2 36 20 20  |s_icon%) .._.6  |
0000ef30  20 20 20 73 65 61 72 63  68 5f 73 74 72 69 6e 67  |   search_string|
0000ef40  24 20 3d a4 6f 75 74 70  75 74 5f 75 70 70 65 72  |$ =.output_upper|
0000ef50  28 73 65 61 72 63 68 5f  73 74 72 69 6e 67 24 29  |(search_string$)|
0000ef60  0d 5f dc 07 20 20 cc 0d  5f e6 2f 20 20 20 20 20  |._..  .._./     |
0000ef70  73 65 61 72 63 68 5f 73  74 72 69 6e 67 24 20 3d  |search_string$ =|
0000ef80  a4 75 70 70 65 72 28 73  65 61 72 63 68 5f 73 74  |.upper(search_st|
0000ef90  72 69 6e 67 24 29 0d 5f  f0 07 20 20 cd 0d 5f fa  |ring$)._..  .._.|
0000efa0  33 20 20 f2 73 65 61 72  63 68 5f 73 74 72 69 6e  |3  .search_strin|
0000efb0  67 5f 63 6f 6e 76 65 72  74 28 73 65 61 72 63 68  |g_convert(search|
0000efc0  5f 73 74 72 69 6e 67 24  2c 65 72 72 6f 72 25 29  |_string$,error%)|
0000efd0  0d 60 04 0d 3d ac 20 65  72 72 6f 72 25 0d 60 0e  |.`..=. error%.`.|
0000efe0  04 0d 60 18 04 0d 60 22  31 dd 20 f2 6f 75 74 70  |..`...`"1. .outp|
0000eff0  75 74 5f 73 74 72 69 6e  67 5f 63 6f 6e 76 65 72  |ut_string_conver|
0000f000  74 28 f8 20 73 74 72 69  6e 67 24 2c 20 f8 20 65  |t(. string$, . e|
0000f010  72 72 6f 72 25 29 0d 60  2c 0d ea 20 72 65 73 75  |rror%).`,.. resu|
0000f020  6c 74 24 0d 60 36 10 72  65 73 75 6c 74 24 20 3d  |lt$.`6.result$ =|
0000f030  20 22 22 0d 60 40 12 c8  95 20 73 74 72 69 6e 67  | "".`@... string|
0000f040  24 3c 3e 22 22 0d 60 4a  24 20 20 20 f2 73 74 72  |$<>"".`J$   .str|
0000f050  69 70 5f 6c 65 61 64 69  6e 67 5f 73 70 61 63 65  |ip_leading_space|
0000f060  28 73 74 72 69 6e 67 24  29 0d 60 54 32 20 20 20  |(string$).`T2   |
0000f070  f2 6f 75 74 70 75 74 5f  6e 65 78 74 5f 65 6c 65  |.output_next_ele|
0000f080  6d 65 6e 74 28 69 74 65  6d 24 2c 73 74 72 69 6e  |ment(item$,strin|
0000f090  67 24 2c 20 65 72 72 6f  72 25 29 0d 60 5e 22 20  |g$, error%).`^" |
0000f0a0  20 20 72 65 73 75 6c 74  24 20 3d 20 72 65 73 75  |  result$ = resu|
0000f0b0  6c 74 24 2b 69 74 65 6d  24 2b 22 20 22 0d 60 68  |lt$+item$+" ".`h|
0000f0c0  05 ce 0d 60 72 15 73 74  72 69 6e 67 24 20 3d 20  |...`r.string$ = |
0000f0d0  72 65 73 75 6c 74 24 0d  60 7c 05 e1 0d 60 86 04  |result$.`|...`..|
0000f0e0  0d 60 90 04 0d 60 9a 04  0d 60 a4 04 0d 60 ae 33  |.`...`...`...`.3|
0000f0f0  dd 20 f2 6f 75 74 70 75  74 5f 6e 65 78 74 5f 65  |. .output_next_e|
0000f100  6c 65 6d 65 6e 74 28 f8  20 69 74 65 6d 24 2c 20  |lement(. item$, |
0000f110  f8 20 73 24 2c 20 f8 20  65 72 72 6f 72 25 29 0d  |. s$, . error%).|
0000f120  60 b8 0e 69 74 65 6d 24  20 3d 20 22 22 0d 60 c2  |`..item$ = "".`.|
0000f130  14 e7 20 c0 73 24 2c 31  29 20 3d 20 bd 33 34 20  |.. .s$,1) = .34 |
0000f140  8c 0d 60 cc 10 20 20 69  74 65 6d 24 3d 20 bd 33  |..`..  item$= .3|
0000f150  34 0d 60 d6 07 20 20 f5  0d 60 e0 19 20 20 20 20  |4.`..  ..`..    |
0000f160  73 24 20 3d 20 c2 73 24  2c a9 28 73 24 29 2d 31  |s$ = .s$,.(s$)-1|
0000f170  29 0d 60 ea 17 20 20 20  20 69 74 65 6d 24 20 2b  |).`..    item$ +|
0000f180  3d 20 c0 73 24 2c 31 29  0d 60 f4 1a 20 20 fd 20  |= .s$,1).`..  . |
0000f190  c0 73 24 2c 31 29 3d bd  33 34 20 84 20 73 24 3d  |.s$,1)=.34 . s$=|
0000f1a0  22 22 0d 60 fe 17 20 20  73 24 20 3d 20 c2 73 24  |"".`..  s$ = .s$|
0000f1b0  2c a9 28 73 24 29 2d 31  29 0d 61 08 26 20 20 e7  |,.(s$)-1).a.&  .|
0000f1c0  20 a9 69 74 65 6d 24 20  3d 20 31 20 84 20 c2 69  | .item$ = 1 . .i|
0000f1d0  74 65 6d 24 2c 31 29 3c  3e 20 bd 33 34 20 8c 0d  |tem$,1)<> .34 ..|
0000f1e0  61 12 12 20 20 20 20 65  72 72 6f 72 25 20 3d 20  |a..    error% = |
0000f1f0  b9 0d 61 1c 50 20 20 20  20 f2 65 72 72 6f 72 5f  |..a.P    .error_|
0000f200  6d 65 73 73 61 67 65 28  22 4f 75 74 70 75 74 20  |message("Output |
0000f210  6c 69 6e 65 20 22 2b c3  28 6c 69 73 74 25 2b 31  |line "+.(list%+1|
0000f220  29 2b 22 20 63 6f 6e 74  61 69 6e 73 20 61 6e 20  |)+" contains an |
0000f230  75 6e 6d 61 74 63 68 65  64 20 71 75 6f 74 65 22  |unmatched quote"|
0000f240  29 0d 61 26 07 20 20 cd  0d 61 30 05 cc 0d 61 3a  |).a&.  ..a0...a:|
0000f250  12 20 20 20 74 24 20 3d  20 c0 73 24 2c 31 29 0d  |.   t$ = .s$,1).|
0000f260  61 44 18 20 20 20 e7 20  a7 22 2c 3b 2b 22 2c 74  |aD.   . .",;+",t|
0000f270  24 29 20 3e 30 20 8c 0d  61 4e 13 20 20 20 20 20  |$) >0 ..aN.     |
0000f280  69 74 65 6d 24 20 3d 20  74 24 0d 61 58 1a 20 20  |item$ = t$.aX.  |
0000f290  20 20 20 73 24 20 3d 20  c2 73 24 2c a9 28 73 24  |   s$ = .s$,.(s$|
0000f2a0  29 2d 31 29 0d 61 62 08  20 20 20 cc 0d 61 6c 16  |)-1).ab.   ..al.|
0000f2b0  20 20 20 20 20 20 20 74  24 20 3d 20 c0 73 24 2c  |       t$ = .s$,|
0000f2c0  31 29 0d 61 76 29 20 20  20 20 20 20 20 c8 95 20  |1).av)       .. |
0000f2d0  74 24 20 3c 3e 22 22 20  80 20 a7 22 20 2c 3b 2b  |t$ <>"" . ." ,;+|
0000f2e0  22 2b bd 33 34 2c 74 24  29 3d 30 0d 61 80 1f 20  |"+.34,t$)=0.a.. |
0000f2f0  20 20 20 20 20 20 20 20  20 20 20 69 74 65 6d 24  |           item$|
0000f300  3d 69 74 65 6d 24 20 2b  74 24 0d 61 8a 21 20 20  |=item$ +t$.a.!  |
0000f310  20 20 20 20 20 20 20 20  20 20 73 24 20 3d 20 c2  |          s$ = .|
0000f320  73 24 2c a9 28 73 24 29  2d 31 29 0d 61 94 1b 20  |s$,.(s$)-1).a.. |
0000f330  20 20 20 20 20 20 20 20  20 20 20 74 24 20 3d 20  |           t$ = |
0000f340  c0 73 24 2c 31 29 0d 61  9e 0c 20 20 20 20 20 20  |.s$,1).a..      |
0000f350  20 ce 0d 61 a8 21 20 20  20 20 20 20 20 f4 20 64  | ..a.!       . d|
0000f360  6f 20 73 75 62 73 74 69  74 75 74 69 6f 6e 20 68  |o substitution h|
0000f370  65 72 65 0d 61 b2 2c 20  20 20 20 20 20 20 f2 6f  |ere.a.,       .o|
0000f380  75 74 70 75 74 5f 73 75  62 73 74 69 74 75 74 65  |utput_substitute|
0000f390  28 69 74 65 6d 24 2c 20  65 72 72 6f 72 25 29 0d  |(item$, error%).|
0000f3a0  61 bc 08 20 20 20 cd 0d  61 c6 05 cd 0d 61 d0 05  |a..   ..a....a..|
0000f3b0  e1 0d 61 da 04 0d 61 e4  04 0d 61 ee 20 dd 20 f2  |..a...a...a. . .|
0000f3c0  73 74 72 69 70 5f 6c 65  61 64 69 6e 67 5f 73 70  |strip_leading_sp|
0000f3d0  61 63 65 28 f8 20 73 24  29 0d 61 f8 13 c8 95 20  |ace(. s$).a.... |
0000f3e0  c0 73 24 2c 31 29 20 3d  20 22 20 22 0d 62 02 17  |.s$,1) = " ".b..|
0000f3f0  20 20 73 24 20 3d 20 c2  73 24 2c a9 28 73 24 29  |  s$ = .s$,.(s$)|
0000f400  2d 31 29 0d 62 0c 05 ce  0d 62 16 05 e1 0d 62 20  |-1).b....b....b |
0000f410  04 0d 62 2a 04 0d 62 34  04 0d 62 3e 2b dd 20 f2  |..b*..b4..b>+. .|
0000f420  6f 75 74 70 75 74 5f 73  75 62 73 74 69 74 75 74  |output_substitut|
0000f430  65 28 f8 20 74 65 78 74  24 2c 20 f8 20 65 72 72  |e(. text$, . err|
0000f440  6f 72 25 29 0d 62 48 10  ea 20 66 25 2c 20 66 6f  |or%).bH.. f%, fo|
0000f450  75 6e 64 25 0d 62 52 0e  66 6f 75 6e 64 25 20 3d  |und%.bR.found% =|
0000f460  20 a3 0d 62 5c 0b 66 25  20 3d 20 2d 31 0d 62 66  | ..b\.f% = -1.bf|
0000f470  28 c8 95 20 66 25 20 3c  20 6e 75 6d 62 65 72 5f  |(.. f% < number_|
0000f480  6f 66 5f 66 69 65 6c 64  73 25 20 80 20 ac 20 66  |of_fields% . . f|
0000f490  6f 75 6e 64 25 0d 62 70  0e 20 20 20 20 66 25 20  |ound%.bp.    f% |
0000f4a0  2b 3d 31 0d 62 7a 24 20  20 20 20 e7 20 74 65 78  |+=1.bz$    . tex|
0000f4b0  74 24 20 3d 20 a4 75 70  70 65 72 28 66 24 28 66  |t$ = .upper(f$(f|
0000f4c0  25 2c 30 29 29 20 8c 0d  62 84 14 20 20 20 20 20  |%,0)) ..b..     |
0000f4d0  20 66 6f 75 6e 64 25 20  3d 20 b9 0d 62 8e 23 20  | found% = ..b.# |
0000f4e0  20 20 20 20 20 74 65 78  74 24 3d 22 63 5f 66 5f  |     text$="c_f_|
0000f4f0  76 24 28 22 2b c3 28 66  25 29 2b 22 29 22 0d 62  |v$("+.(f%)+")".b|
0000f500  98 09 20 20 20 20 cd 0d  62 a2 05 ce 0d 62 ac 10  |..    ..b....b..|
0000f510  e7 20 ac 20 66 6f 75 6e  64 25 20 8c 0d 62 b6 62  |. . found% ..b.b|
0000f520  20 20 20 f2 65 72 72 6f  72 5f 6d 65 73 73 61 67  |   .error_messag|
0000f530  65 28 22 54 68 65 20 66  69 65 6c 64 20 22 2b 74  |e("The field "+t|
0000f540  65 78 74 24 2b 22 20 75  73 65 64 20 69 6e 20 74  |ext$+" used in t|
0000f550  68 65 20 6f 75 74 70 75  74 20 6c 69 6e 65 20 22  |he output line "|
0000f560  2b c3 28 6c 69 73 74 25  2b 31 29 2b 22 20 64 6f  |+.(list%+1)+" do|
0000f570  65 73 20 6e 6f 74 20 65  78 69 73 74 22 29 0d 62  |es not exist").b|
0000f580  c0 11 20 20 20 65 72 72  6f 72 25 20 3d 20 b9 0d  |..   error% = ..|
0000f590  62 ca 05 cd 0d 62 d4 05  e1 0d 62 de 04 0d 62 e8  |b....b....b...b.|
0000f5a0  04 0d 62 f2 31 dd 20 f2  73 65 61 72 63 68 5f 73  |..b.1. .search_s|
0000f5b0  74 72 69 6e 67 5f 63 6f  6e 76 65 72 74 28 f8 20  |tring_convert(. |
0000f5c0  73 74 72 69 6e 67 24 2c  20 f8 20 65 72 72 6f 72  |string$, . error|
0000f5d0  25 29 0d 62 fc 0d ea 20  72 65 73 75 6c 74 24 0d  |%).b... result$.|
0000f5e0  63 06 0e 65 72 72 6f 72  25 20 3d 20 a3 0d 63 10  |c..error% = ..c.|
0000f5f0  10 72 65 73 75 6c 74 24  20 3d 20 22 22 0d 63 1a  |.result$ = "".c.|
0000f600  1d c8 95 20 73 74 72 69  6e 67 24 3c 3e 22 22 20  |... string$<>"" |
0000f610  80 20 ac 20 65 72 72 6f  72 25 0d 63 24 24 20 20  |. . error%.c$$  |
0000f620  20 f2 73 74 72 69 70 5f  6c 65 61 64 69 6e 67 5f  | .strip_leading_|
0000f630  73 70 61 63 65 28 73 74  72 69 6e 67 24 29 0d 63  |space(string$).c|
0000f640  2e 32 20 20 20 f2 73 65  61 72 63 68 5f 6e 65 78  |.2   .search_nex|
0000f650  74 5f 65 6c 65 6d 65 6e  74 28 69 74 65 6d 24 2c  |t_element(item$,|
0000f660  73 74 72 69 6e 67 24 2c  20 65 72 72 6f 72 25 29  |string$, error%)|
0000f670  0d 63 38 22 20 20 20 72  65 73 75 6c 74 24 20 3d  |.c8"   result$ =|
0000f680  20 72 65 73 75 6c 74 24  2b 69 74 65 6d 24 2b 22  | result$+item$+"|
0000f690  20 22 0d 63 42 05 ce 0d  63 4c 15 73 74 72 69 6e  | ".cB...cL.strin|
0000f6a0  67 24 20 3d 20 72 65 73  75 6c 74 24 0d 63 56 05  |g$ = result$.cV.|
0000f6b0  e1 0d 63 60 04 0d 63 6a  04 0d 63 74 04 0d 63 7e  |..c`..cj..ct..c~|
0000f6c0  04 0d 63 88 33 dd 20 f2  73 65 61 72 63 68 5f 6e  |..c.3. .search_n|
0000f6d0  65 78 74 5f 65 6c 65 6d  65 6e 74 28 f8 20 69 74  |ext_element(. it|
0000f6e0  65 6d 24 2c 20 f8 20 73  24 2c 20 f8 20 65 72 72  |em$, . s$, . err|
0000f6f0  6f 72 25 29 0d 63 92 0e  65 72 72 6f 72 25 20 3d  |or%).c..error% =|
0000f700  20 a3 0d 63 9c 0e 69 74  65 6d 24 20 3d 20 22 22  | ..c..item$ = ""|
0000f710  0d 63 a6 14 e7 20 c0 73  24 2c 31 29 20 3d 20 bd  |.c... .s$,1) = .|
0000f720  33 34 20 8c 0d 63 b0 10  20 20 69 74 65 6d 24 3d  |34 ..c..  item$=|
0000f730  20 bd 33 34 0d 63 ba 07  20 20 f5 0d 63 c4 19 20  | .34.c..  ..c.. |
0000f740  20 20 20 73 24 20 3d 20  c2 73 24 2c a9 28 73 24  |   s$ = .s$,.(s$|
0000f750  29 2d 31 29 0d 63 ce 17  20 20 20 20 69 74 65 6d  |)-1).c..    item|
0000f760  24 20 2b 3d 20 c0 73 24  2c 31 29 0d 63 d8 1a 20  |$ += .s$,1).c.. |
0000f770  20 fd 20 c0 73 24 2c 31  29 3d bd 33 34 20 84 20  | . .s$,1)=.34 . |
0000f780  73 24 3d 22 22 0d 63 e2  17 20 20 73 24 20 3d 20  |s$="".c..  s$ = |
0000f790  c2 73 24 2c a9 28 73 24  29 2d 31 29 0d 63 ec 26  |.s$,.(s$)-1).c.&|
0000f7a0  20 20 e7 20 a9 69 74 65  6d 24 20 3d 20 31 20 84  |  . .item$ = 1 .|
0000f7b0  20 c2 69 74 65 6d 24 2c  31 29 3c 3e 20 bd 33 34  | .item$,1)<> .34|
0000f7c0  20 8c 0d 63 f6 12 20 20  20 20 65 72 72 6f 72 25  | ..c..    error%|
0000f7d0  20 3d 20 b9 0d 64 00 47  20 20 20 20 f2 65 72 72  | = ..d.G    .err|
0000f7e0  6f 72 5f 6d 65 73 73 61  67 65 28 22 54 68 65 20  |or_message("The |
0000f7f0  73 65 61 72 63 68 20 73  74 72 69 6e 67 20 63 6f  |search string co|
0000f800  6e 74 61 69 6e 73 20 61  6e 20 75 6e 6d 61 74 63  |ntains an unmatc|
0000f810  68 65 64 20 71 75 6f 74  65 22 29 0d 64 0a 07 20  |hed quote").d.. |
0000f820  20 cd 0d 64 14 05 cc 0d  64 1e 12 20 20 20 74 24  | ..d....d..   t$|
0000f830  20 3d 20 c0 73 24 2c 32  29 0d 64 28 26 20 20 20  | = .s$,2).d(&   |
0000f840  e7 20 74 24 3d 22 3c 3e  22 20 84 20 74 24 3d 22  |. t$="<>" . t$="|
0000f850  3e 3d 22 20 84 20 74 24  3d 22 3c 3d 22 20 8c 0d  |>=" . t$="<=" ..|
0000f860  64 32 13 20 20 20 20 20  69 74 65 6d 24 20 3d 20  |d2.     item$ = |
0000f870  74 24 0d 64 3c 1a 20 20  20 20 20 73 24 20 3d 20  |t$.d<.     s$ = |
0000f880  c2 73 24 2c a9 28 73 24  29 2d 32 29 0d 64 46 08  |.s$,.(s$)-2).dF.|
0000f890  20 20 20 cc 0d 64 50 14  20 20 20 20 20 74 24 20  |   ..dP.     t$ |
0000f8a0  3d 20 c0 73 24 2c 31 29  0d 64 5a 22 20 20 20 20  |= .s$,1).dZ"    |
0000f8b0  20 e7 20 a7 22 3d 2c 3b  2b 2d 28 29 2f 2a 3e 3c  | . ."=,;+-()/*><|
0000f8c0  22 2c 74 24 29 20 3e 30  20 8c 0d 64 64 15 20 20  |",t$) >0 ..dd.  |
0000f8d0  20 20 20 20 20 69 74 65  6d 24 20 3d 20 74 24 0d  |     item$ = t$.|
0000f8e0  64 6e 1c 20 20 20 20 20  20 20 73 24 20 3d 20 c2  |dn.       s$ = .|
0000f8f0  73 24 2c a9 28 73 24 29  2d 31 29 0d 64 78 0a 20  |s$,.(s$)-1).dx. |
0000f900  20 20 20 20 cc 0d 64 82  16 20 20 20 20 20 20 20  |    ..d..       |
0000f910  74 24 20 3d 20 c0 73 24  2c 31 29 0d 64 8c 17 20  |t$ = .s$,1).d.. |
0000f920  20 20 20 20 20 20 e7 20  74 24 20 3d 20 22 5b 22  |      . t$ = "["|
0000f930  20 8c 0d 64 96 24 20 20  20 20 20 20 20 20 20 c8  | ..d.$         .|
0000f940  95 20 74 24 20 3c 3e 22  22 20 80 20 a7 22 5d 22  |. t$ <>"" . ."]"|
0000f950  2c 74 24 29 3d 30 0d 64  a0 1f 20 20 20 20 20 20  |,t$)=0.d..      |
0000f960  20 20 20 20 20 20 69 74  65 6d 24 3d 69 74 65 6d  |      item$=item|
0000f970  24 20 2b 74 24 0d 64 aa  21 20 20 20 20 20 20 20  |$ +t$.d.!       |
0000f980  20 20 20 20 20 73 24 20  3d 20 c2 73 24 2c a9 28  |     s$ = .s$,.(|
0000f990  73 24 29 2d 31 29 0d 64  b4 1b 20 20 20 20 20 20  |s$)-1).d..      |
0000f9a0  20 20 20 20 20 20 74 24  20 3d 20 c0 73 24 2c 31  |      t$ = .s$,1|
0000f9b0  29 0d 64 be 0f 20 20 20  20 20 20 20 20 20 20 ce  |).d..          .|
0000f9c0  0d 64 c8 1f 20 20 20 20  20 20 20 20 20 20 73 24  |.d..          s$|
0000f9d0  20 3d 20 c2 73 24 2c a9  28 73 24 29 2d 31 29 0d  | = .s$,.(s$)-1).|
0000f9e0  64 d2 2a 20 20 20 20 20  20 20 20 20 20 69 74 65  |d.*          ite|
0000f9f0  6d 24 20 3d 20 c1 69 74  65 6d 24 2c 32 2c a9 28  |m$ = .item$,2,.(|
0000fa00  69 74 65 6d 24 29 2d 31  29 0d 64 dc 29 20 20 20  |item$)-1).d.)   |
0000fa10  20 20 20 20 20 20 20 e7  20 a9 20 69 74 65 6d 24  |       . . item$|
0000fa20  20 3c 3e 20 38 20 84 20  74 24 20 3c 3e 22 5d 22  | <> 8 . t$ <>"]"|
0000fa30  20 8c 0d 64 e6 1a 20 20  20 20 20 20 20 20 20 20  | ..d..          |
0000fa40  20 20 65 72 72 6f 72 25  20 3d 20 b9 0d 64 f0 ac  |  error% = ..d..|
0000fa50  20 20 20 20 20 20 20 20  20 20 20 20 f2 65 72 72  |            .err|
0000fa60  6f 72 5f 6d 65 73 73 61  67 65 28 22 54 68 65 20  |or_message("The |
0000fa70  73 65 61 72 63 68 20 73  74 72 69 6e 67 20 63 6f  |search string co|
0000fa80  6e 74 61 69 6e 73 20 61  20 64 61 74 65 20 77 69  |ntains a date wi|
0000fa90  74 68 20 61 6e 20 75 6e  6d 61 74 63 68 65 64 20  |th an unmatched |
0000faa0  62 72 61 63 6b 65 74 2e  20 44 61 74 65 73 20 6d  |bracket. Dates m|
0000fab0  75 73 74 20 62 65 20 65  6e 63 6c 6f 73 65 64 20  |ust be enclosed |
0000fac0  77 69 74 68 69 6e 20 5b  5d 20 61 6e 64 20 63 6f  |within [] and co|
0000fad0  6e 74 61 69 6e 20 38 20  63 68 61 72 61 63 74 65  |ntain 8 characte|
0000fae0  72 73 22 2b bd 31 33 2b  22 65 67 20 5b 30 33 20  |rs"+.13+"eg [03 |
0000faf0  31 31 20 39 32 5d 22 29  0d 64 fa 0f 20 20 20 20  |11 92]").d..    |
0000fb00  20 20 20 20 20 20 cd 0d  65 04 29 20 20 20 20 20  |      ..e.)     |
0000fb10  20 20 20 20 20 f4 20 64  6f 20 64 61 74 65 20 73  |     . do date s|
0000fb20  75 62 73 74 69 74 75 74  69 6f 6e 20 68 65 72 65  |ubstitution here|
0000fb30  0d 65 0e 31 20 20 20 20  20 20 20 20 20 20 69 74  |.e.1          it|
0000fb40  65 6d 24 20 3d 20 22 46  4e 64 61 74 65 28 22 2b  |em$ = "FNdate("+|
0000fb50  bd 33 34 2b 69 74 65 6d  24 2b bd 33 34 2b 22 29  |.34+item$+.34+")|
0000fb60  22 0d 65 18 0c 20 20 20  20 20 20 20 cc 0d 65 22  |".e..       ..e"|
0000fb70  33 20 20 20 20 20 20 20  20 20 20 c8 95 20 74 24  |3          .. t$|
0000fb80  20 3c 3e 22 22 20 80 20  a7 22 20 2c 3b 2b 3d 3c  | <>"" . ." ,;+=<|
0000fb90  3e 28 29 2a 2f 22 2b bd  33 34 2c 74 24 29 3d 30  |>()*/"+.34,t$)=0|
0000fba0  0d 65 2c 1f 20 20 20 20  20 20 20 20 20 20 20 20  |.e,.            |
0000fbb0  69 74 65 6d 24 3d 69 74  65 6d 24 20 2b 74 24 0d  |item$=item$ +t$.|
0000fbc0  65 36 21 20 20 20 20 20  20 20 20 20 20 20 20 73  |e6!            s|
0000fbd0  24 20 3d 20 c2 73 24 2c  a9 28 73 24 29 2d 31 29  |$ = .s$,.(s$)-1)|
0000fbe0  0d 65 40 1b 20 20 20 20  20 20 20 20 20 20 20 20  |.e@.            |
0000fbf0  74 24 20 3d 20 c0 73 24  2c 31 29 0d 65 4a 0f 20  |t$ = .s$,1).eJ. |
0000fc00  20 20 20 20 20 20 20 20  20 ce 0d 65 54 24 20 20  |         ..eT$  |
0000fc10  20 20 20 20 20 20 20 20  f4 20 64 6f 20 73 75 62  |        . do sub|
0000fc20  73 74 69 74 75 74 69 6f  6e 20 68 65 72 65 0d 65  |stitution here.e|
0000fc30  5e 2e 20 20 20 20 20 20  20 20 20 20 f2 73 65 61  |^.          .sea|
0000fc40  72 63 68 5f 73 75 62 73  74 69 74 75 74 65 28 69  |rch_substitute(i|
0000fc50  74 65 6d 24 2c 65 72 72  6f 72 25 29 0d 65 68 0c  |tem$,error%).eh.|
0000fc60  20 20 20 20 20 20 20 cd  0d 65 72 0a 20 20 20 20  |       ..er.    |
0000fc70  20 cd 0d 65 7c 08 20 20  20 cd 0d 65 86 05 cd 0d  | ..e|.   ..e....|
0000fc80  65 90 05 e1 0d 65 9a 04  0d 65 a4 04 0d 65 ae 04  |e....e...e...e..|
0000fc90  0d 65 b8 04 0d 65 c2 04  0d 65 cc 2b dd 20 f2 73  |.e...e...e.+. .s|
0000fca0  65 61 72 63 68 5f 73 75  62 73 74 69 74 75 74 65  |earch_substitute|
0000fcb0  28 f8 20 74 65 78 74 24  2c 20 f8 20 65 72 72 6f  |(. text$, . erro|
0000fcc0  72 25 29 0d 65 d6 10 ea  20 66 25 2c 20 66 6f 75  |r%).e... f%, fou|
0000fcd0  6e 64 25 0d 65 e0 0e 66  6f 75 6e 64 25 20 3d 20  |nd%.e..found% = |
0000fce0  a3 0d 65 ea 0b 66 25 20  3d 20 2d 31 0d 65 f4 28  |..e..f% = -1.e.(|
0000fcf0  c8 95 20 66 25 20 3c 20  6e 75 6d 62 65 72 5f 6f  |.. f% < number_o|
0000fd00  66 5f 66 69 65 6c 64 73  25 20 80 20 ac 20 66 6f  |f_fields% . . fo|
0000fd10  75 6e 64 25 0d 65 fe 0e  20 20 20 20 66 25 20 2b  |und%.e..    f% +|
0000fd20  3d 31 0d 66 08 24 20 20  20 20 e7 20 74 65 78 74  |=1.f.$    . text|
0000fd30  24 20 3d 20 a4 75 70 70  65 72 28 66 24 28 66 25  |$ = .upper(f$(f%|
0000fd40  2c 30 29 29 20 8c 0d 66  12 14 20 20 20 20 20 20  |,0)) ..f..      |
0000fd50  66 6f 75 6e 64 25 20 3d  20 b9 0d 66 1c 27 20 20  |found% = ..f.'  |
0000fd60  20 20 20 20 20 20 20 e7  20 a4 75 70 70 65 72 28  |       . .upper(|
0000fd70  66 24 28 66 25 2c 31 29  29 20 3d 20 22 54 22 20  |f$(f%,1)) = "T" |
0000fd80  8c 0d 66 26 29 20 20 20  20 20 20 20 20 20 20 20  |..f&)           |
0000fd90  20 74 65 78 74 24 3d 22  63 5f 66 5f 76 24 28 22  | text$="c_f_v$("|
0000fda0  2b c3 28 66 25 29 2b 22  29 22 0d 66 30 0e 20 20  |+.(f%)+")".f0.  |
0000fdb0  20 20 20 20 20 20 20 cd  0d 66 3a 27 20 20 20 20  |       ..f:'    |
0000fdc0  20 20 20 20 20 e7 20 a4  75 70 70 65 72 28 66 24  |     . .upper(f$|
0000fdd0  28 66 25 2c 31 29 29 20  3d 20 22 4e 22 20 8c 0d  |(f%,1)) = "N" ..|
0000fde0  66 44 2c 20 20 20 20 20  20 20 20 20 20 20 20 74  |fD,            t|
0000fdf0  65 78 74 24 3d 22 56 41  4c 63 5f 66 5f 76 24 28  |ext$="VALc_f_v$(|
0000fe00  22 2b c3 28 66 25 29 2b  22 29 22 0d 66 4e 0e 20  |"+.(f%)+")".fN. |
0000fe10  20 20 20 20 20 20 20 20  cd 0d 66 58 27 20 20 20  |        ..fX'   |
0000fe20  20 20 20 20 20 20 e7 20  a4 75 70 70 65 72 28 66  |      . .upper(f|
0000fe30  24 28 66 25 2c 31 29 29  20 3d 20 22 44 22 20 8c  |$(f%,1)) = "D" .|
0000fe40  0d 66 62 31 20 20 20 20  20 20 20 20 20 20 20 20  |.fb1            |
0000fe50  74 65 78 74 24 3d 22 46  4e 64 61 74 65 28 63 5f  |text$="FNdate(c_|
0000fe60  66 5f 76 24 28 22 2b c3  28 66 25 29 2b 22 29 29  |f_v$("+.(f%)+"))|
0000fe70  22 0d 66 6c 0e 20 20 20  20 20 20 20 20 20 cd 0d  |".fl.         ..|
0000fe80  66 76 09 20 20 20 20 cd  0d 66 80 05 ce 0d 66 8a  |fv.    ..f....f.|
0000fe90  0b 69 25 20 3d 20 2d 31  0d 66 94 2b c8 95 20 69  |.i% = -1.f.+.. i|
0000fea0  25 20 3c 20 6e 75 6d 62  65 72 5f 6f 66 5f 6f 70  |% < number_of_op|
0000feb0  65 72 61 74 6f 72 73 25  20 80 20 ac 20 66 6f 75  |erators% . . fou|
0000fec0  6e 64 25 0d 66 9e 0c 20  20 69 25 20 2b 3d 31 0d  |nd%.f..  i% +=1.|
0000fed0  66 a8 1f 20 20 e7 20 74  65 78 74 24 20 3d 20 6f  |f..  . text$ = o|
0000fee0  70 65 72 61 74 6f 72 24  28 69 25 29 20 8c 0d 66  |perator$(i%) ..f|
0000fef0  b2 13 20 20 20 20 20 66  6f 75 6e 64 25 20 3d 20  |..     found% = |
0000ff00  b9 0d 66 bc 07 20 20 cd  0d 66 c6 05 ce 0d 66 d0  |..f..  ..f....f.|
0000ff10  10 e7 20 ac 20 66 6f 75  6e 64 25 20 8c 0d 66 da  |.. . found% ..f.|
0000ff20  23 20 20 66 6f 75 6e 64  25 20 3d 20 a4 69 74 73  |#  found% = .its|
0000ff30  5f 61 5f 6e 75 6d 62 65  72 28 74 65 78 74 24 29  |_a_number(text$)|
0000ff40  0d 66 e4 05 cd 0d 66 ee  04 0d 66 f8 10 e7 20 ac  |.f....f...f... .|
0000ff50  20 66 6f 75 6e 64 25 20  8c 0d 67 02 11 20 20 20  | found% ..g..   |
0000ff60  65 72 72 6f 72 25 20 3d  20 b9 0d 67 0c 55 20 20  |error% = ..g.U  |
0000ff70  20 f2 65 72 72 6f 72 5f  6d 65 73 73 61 67 65 28  | .error_message(|
0000ff80  22 54 68 65 20 66 69 65  6c 64 20 22 2b 74 65 78  |"The field "+tex|
0000ff90  74 24 2b 22 20 75 73 65  64 20 69 6e 20 74 68 65  |t$+" used in the|
0000ffa0  20 73 65 61 72 63 68 20  73 74 72 69 6e 67 20 64  | search string d|
0000ffb0  6f 65 73 20 6e 6f 74 20  65 78 69 73 74 22 29 0d  |oes not exist").|
0000ffc0  67 16 05 cd 0d 67 20 05  e1 0d 67 2a 04 0d 67 34  |g....g ...g*..g4|
0000ffd0  17 dd 20 a4 69 74 73 5f  61 5f 6e 75 6d 62 65 72  |.. .its_a_number|
0000ffe0  28 6e 24 29 0d 67 3e 0d  ea 20 6f 6b 25 2c 20 69  |(n$).g>.. ok%, i|
0000fff0  25 0d 67 48 0b 6f 6b 25  20 3d 20 b9 0d 67 52 12  |%.gH.ok% = ..gR.|
00010000  e3 20 69 25 20 3d 20 31  20 b8 20 a9 6e 24 0d 67  |. i% = 1 . .n$.g|
00010010  5c 2b 20 20 e7 20 a7 22  30 31 32 33 34 35 36 37  |\+  . ."01234567|
00010020  38 39 2d 2b 2e 45 22 2c  20 c1 6e 24 2c 69 25 2c  |89-+.E", .n$,i%,|
00010030  31 29 29 20 3d 20 30 20  8c 0d 67 66 10 20 20 20  |1)) = 0 ..gf.   |
00010040  20 20 6f 6b 25 20 3d 20  a3 0d 67 70 07 20 20 cd  |  ok% = ..gp.  .|
00010050  0d 67 7a 05 ed 0d 67 84  08 3d 6f 6b 25 0d 67 8e  |.gz...g..=ok%.g.|
00010060  04 0d 67 98 1d dd a4 69  63 6f 6e 5f 73 65 74 28  |..g....icon_set(|
00010070  77 69 6e 64 6f 77 25 2c  69 63 6f 6e 25 29 0d 67  |window%,icon%).g|
00010080  a2 15 21 62 6c 6f 63 6b  5f 33 25 3d 77 69 6e 64  |..!block_3%=wind|
00010090  6f 77 25 0d 67 ac 14 62  6c 6f 63 6b 5f 33 25 21  |ow%.g..block_3%!|
000100a0  34 3d 69 63 6f 6e 25 0d  67 b6 23 c8 99 22 57 69  |4=icon%.g.#.."Wi|
000100b0  6d 70 5f 47 65 74 49 63  6f 6e 53 74 61 74 65 22  |mp_GetIconState"|
000100c0  2c 2c 62 6c 6f 63 6b 5f  33 25 0d 67 c0 1f 3d 28  |,,block_3%.g..=(|
000100d0  28 62 6c 6f 63 6b 5f 33  25 21 32 34 20 80 20 31  |(block_3%!24 . 1|
000100e0  3c 3c 32 31 29 3c 3e 30  29 0d 67 ca 05 3a 0d 67  |<<21)<>0).g..:.g|
000100f0  d4 04 0d 67 de 12 dd 20  f2 71 75 69 63 6b 5f 63  |...g... .quick_c|
00010100  6c 6f 73 65 0d 67 e8 19  20 20 c8 99 20 22 57 69  |lose.g..  .. "Wi|
00010110  6d 70 5f 43 6c 6f 73 65  44 6f 77 6e 22 0d 67 f2  |mp_CloseDown".g.|
00010120  05 e1 0d 67 fc 04 0d 68  06 04 0d 68 10 19 dd 20  |...g...h...h... |
00010130  a4 66 75 6c 6c 5f 61 63  63 65 73 73 28 6e 61 6d  |.full_access(nam|
00010140  65 24 29 0d 68 1a 11 ea  20 73 74 61 74 65 25 2c  |e$).h... state%,|
00010150  20 72 35 25 0d 68 24 2a  20 20 c8 99 22 4f 53 5f  | r5%.h$*  .."OS_|
00010160  46 69 6c 65 22 2c 35 2c  6e 61 6d 65 24 2c 2c 2c  |File",5,name$,,,|
00010170  2c 2c 30 20 b8 20 2c 2c  2c 2c 2c 72 35 25 0d 68  |,,0 . ,,,,,r5%.h|
00010180  2e 1a 20 20 73 74 61 74  65 25 20 3d 20 72 35 25  |..  state% = r5%|
00010190  20 80 20 25 31 30 31 31  0d 68 38 12 20 20 3d 20  | . %1011.h8.  = |
000101a0  73 74 61 74 65 25 20 3d  20 33 0d 68 42 04 0d 68  |state% = 3.hB..h|
000101b0  4c 04 0d 68 56 04 0d 68  60 0b f4 20 64 75 6d 6d  |L..hV..h`.. dumm|
000101c0  79 0d 68 6a 04 0d 68 74  04 0d 68 7e 09 64 75 6d  |y.hj..ht..h~.dum|
000101d0  6d 79 0d ff                                       |my..|
000101d4