home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / HISOFT.LZH / HISOFT_B.MSA / EXAMPLES / HGTEXAM / ADDRESS.BAS next >
BASIC Source File  |  1991-09-17  |  6KB  |  282 lines

  1. REM $option !gy
  2. REM $option k100
  3.  
  4. REM $include toolbox.bas
  5. REM $include dialog.bas
  6. REM $include menu.bas
  7.  
  8. REM $include address.bh
  9.  
  10. ' The routines for handling the address book file and data structure
  11. SUB PutRecord(BYVAL i)
  12. SHARED nnames$(1),addr1$(1),addr2$(1),addr3$(1),addr4$(1),phones$(1)
  13. SHARED nname$,addr$(1),phone$
  14.     PUT #1,i+1
  15.     nnames$(i)=nname$
  16.     addr1$(i)=addr$(1)
  17.     addr2$(i)=addr$(2)
  18.     addr3$(i)=addr$(3)
  19.     addr4$(i)=addr$(4)
  20.     phones$(i)=phone$
  21. END SUB
  22.  
  23. SUB GetRecord(BYVAL i)
  24. SHARED nnames$(1),addr1$(1),addr2$(1),addr3$(1),addr4$(1),phones$(1)
  25. SHARED nname$,addr$(1),phone$
  26.     GET #1,i+1
  27.     nnames$(i)=nname$
  28.     addr1$(i)=addr$(1)
  29.     addr2$(i)=addr$(2)
  30.     addr3$(i)=addr$(3)
  31.     addr4$(i)=addr$(4)
  32.     phones$(i)=phone$
  33. END SUB
  34.  
  35. SUB OpenFile
  36. SHARED nnames$(1),addr1$(1),addr2$(1),addr3$(1),addr4$(1),phones$(1)
  37. SHARED nname$,addr$(1),phone$,records,max_records,recordcnt$
  38. STATIC newfile,i
  39. newfile= FEXISTS("address.dat")=0
  40. OPEN "address.dat" FOR RANDOM AS #1 LEN=180
  41.  
  42. DIM addr$(4)
  43. FIELD #1,    20 AS nname$,_
  44.             35 AS addr$(1),_
  45.             35 AS addr$(2),_
  46.             35 AS addr$(3),_
  47.             35 AS addr$(4),_
  48.             20 AS phone$
  49. FIELD #1,    2 AS recordcnt$
  50. IF newfile THEN
  51.     records=0
  52. ELSE
  53.     GET #1,1
  54.     records=CVI(recordcnt$)
  55. END IF
  56. max_records=records+10
  57. DIM nnames$(max_records)
  58. DIM addr1$(max_records)
  59. DIM addr2$(max_records)
  60. DIM addr3$(max_records)
  61. DIM addr4$(max_records)
  62. DIM phones$(max_records)
  63. FOR i=1 TO records
  64.     GetRecord i
  65. NEXT i
  66. END SUB
  67.  
  68. SUB CloseFile
  69. SHARED recordcnt$,records
  70. LSET recordcnt$=MKI$(records)
  71. PUT #1,1
  72. CLOSE #1
  73. END SUB
  74.  
  75. FUNCTION AddRecord
  76. SHARED records,max_records,nnames$(1)
  77. SHARED addr1$(1),addr2$(1),addr3$(1),addr4$(1),phones$(1)
  78.     INCR records
  79.     IF records>max_records THEN
  80.         max_records=max_records+10
  81.         REDIM APPEND nnames$(max_records),addr1$(max_records),addr2$(max_records),addr3$(max_records),addr4$(max_records),phones$(max_records)
  82.     END IF
  83.     PutRecord records
  84.     AddRecord=records
  85. END FUNCTION
  86.  
  87. FUNCTION NextRecord(BYVAL i)
  88. SHARED records,nnames$(1)
  89. DO 
  90.     INCR i
  91.     IF i>records THEN i=0: EXIT LOOP
  92. LOOP WHILE LEFT$(nnames$(i),7)="DELETED"
  93. NextRecord=i
  94. END FUNCTION
  95.  
  96.  
  97. FUNCTION PreviousRecord(BYVAL i)
  98. SHARED records,nnames$(1)
  99. DO
  100.     DECR i
  101.     IF i<=0 THEN i=0: EXIT LOOP
  102. LOOP WHILE LEFT$(nnames$(i),7)="DELETED"
  103. PreviousRecord=i
  104. END FUNCTION
  105.  
  106.  
  107. FUNCTION FindRecord(partname$,cur_record)
  108. SHARED nnames$(1),records
  109. STATIC start_record,i
  110. start_record=cur_record
  111. i=cur_record
  112. DO
  113.     i=NextRecord(i)
  114.     IF i=0 THEN
  115.         IF start_record=0 THEN
  116.             i=0
  117.         ELSE
  118.             i=NextRecord(0)    
  119.             IF i=0 THEN i=start_record    'no records at all
  120.         END IF
  121.     END IF
  122.     IF i=start_record THEN
  123.         'record not found
  124.         FindRecord=-1
  125.         EXIT LOOP
  126.     END IF
  127.     IF INSTR(nnames$(i),partname$)>0 THEN
  128.         FindRecord=i
  129.         EXIT LOOP
  130.     END IF
  131. LOOP
  132. END FUNCTION
  133.  
  134. SUB DeleteRecord(BYVAL i)
  135. SHARED nname$
  136. LSET nname$="DELETED"
  137. PutRecord i
  138. END SUB
  139.  
  140. SUB ReOrganiseFile
  141. SHARED nnames$(1),addr1$(1),addr2$(1),addr3$(1),addr4$(1),phones$(1)
  142. SHARED records,nname$
  143. STATIC i,j
  144. j=1:i=1
  145. DO
  146.     IF i>records THEN EXIT LOOP
  147.     GET #1,i+1
  148.     IF LEFT$(nname$,7)<>"DELETED" THEN
  149.         IF i<>j THEN
  150.             PUT #1,j+1
  151.             nnames$(j)=nnames$(i)
  152.             addr1$(j)=addr1$(i)
  153.             addr2$(j)=addr2$(i)
  154.             addr3$(j)=addr3$(i)
  155.             addr4$(j)=addr4$(i)
  156.             phones$(j)=phones$(i)
  157.         END IF
  158.         INCR j
  159.     END IF
  160.     INCR i
  161. LOOP
  162. records=j-1
  163. END SUB
  164.  
  165. 'Now the routines that handle the user interface/data structure conversions
  166. SUB DisplayRecord(BYVAL i)
  167. SHARED nnames$(1),addr1$(1),addr2$(1),addr3$(1),addr4$(1),phones$(1)
  168. IF i=0 THEN EXIT SUB
  169. SelectTree MAINDIALOG
  170. Sette_ptext MDNAME,RTRIM$(nnames$(i))
  171. Sette_ptext MDADDR1,RTRIM$(addr1$(i))
  172. Sette_ptext MDADDR2,RTRIM$(addr2$(i))
  173. Sette_ptext MDADDR3,RTRIM$(addr3$(i))
  174. Sette_ptext MDADDR4,RTRIM$(addr4$(i))
  175. Sette_ptext MDPHONE,RTRIM$(phones$(i))
  176.  
  177. END SUB
  178.  
  179. SUB ExtractInfo
  180. SHARED nname$,addr$(1),phone$
  181. STATIC i
  182. LSET nname$=Gette_ptext$(MDNAME)
  183. FOR i=1 TO 4
  184.     LSET addr$(i)=Gette_ptext$(MDADDR1+i-1)
  185. NEXT i        
  186. LSET phone$=Gette_ptext$(MDPHONE)
  187. END SUB
  188.  
  189. ' Now the purely user interface routines
  190. SUB ClearDialog
  191. SHARED i
  192. SelectTree MAINDIALOG
  193. Sette_ptext MDNAME,""
  194. FOR i=1 TO 4
  195.     Sette_ptext MDADDR1+i-1,""
  196. NEXT i
  197. Sette_ptext MDPHONE,""
  198. END SUB
  199.  
  200. SUB HandleEdits
  201. SHARED nname$,addr$(1),phone$,cur_record
  202. STATIC Comm,i
  203. cur_record=0
  204. DO
  205.     SelectTree MAINDIALOG
  206.     Comm=HandleDialog(MDNAME)
  207.     SELECT CASE Comm 
  208.     CASE MDNEW:
  209.             ExtractInfo
  210.             cur_record=AddRecord
  211.     CASE MDFIND:
  212.             SelectTree FindDialog
  213.             IF HandleDialog(0)=FDOK THEN
  214.                 i=FindRecord(Gette_ptext$(FDSTRING),cur_record)
  215.                 IF i>0 THEN
  216.                     cur_record=i
  217.                     DisplayRecord cur_record
  218.                 ELSE
  219.                     junk=Newform_alert(ALERTNOTFOUND,1)
  220.                 END IF    
  221.             END IF
  222.     CASE MDDELETE:
  223.             IF cur_record=0 THEN
  224.                 junk=newform_alert(NOTHINGDEL,1)
  225.             ELSE
  226.                 IF Newform_alert(DELETEWARN,1)=2 THEN
  227.                     DeleteRecord cur_record
  228.                     cur_record=0
  229.                 END IF
  230.             END IF
  231.     CASE MDPREVIOUS:
  232.             i=PreviousRecord(cur_record)
  233.             IF i>0 THEN
  234.                 cur_record=i
  235.                 DisplayRecord cur_record
  236.             END IF
  237.     CASE MDNEXT:
  238.             i=NextRecord(cur_record)
  239.             IF i>0 THEN
  240.                 cur_record=i
  241.                 DisplayRecord cur_record
  242.             END IF
  243.     CASE MDUPDATE:
  244.             IF cur_record>0 THEN
  245.                 ExtractInfo
  246.                 PutRecord cur_record
  247.             ELSE
  248.                 junk=Newform_alert(NOTHINGUPDATE,1)
  249.             END IF
  250.     CASE MDCLEAR:
  251.             ClearDialog
  252.             cur_record=0
  253.     CASE MDEXIT:
  254.             EXIT SUB
  255.     END SELECT        
  256. LOOP
  257. END SUB
  258.  
  259. SUB ProcessUserMenus(VAL cur_front,VAL item,VAL title)
  260. SHARED texth,wolines(1),lines$(2),TextWindows
  261. STATIC i,finame$,temp,id
  262. SELECT CASE item
  263. CASE MeAboutAddress:
  264.     SelectTree AboutDialog
  265.     junk=HandleDialog(0)
  266. CASE MeReorganise:    
  267.     ReorganiseFile
  268. CASE MeEdit:
  269.     HandleEdits
  270. END SELECT
  271. END SUB
  272.  
  273. SUB jokeredraw
  274. END SUB
  275.  
  276. StartProgram "ADDRESS.RSC",MENU,MEQUIT
  277. OpenFile
  278. ClearDialog
  279. HGTloop
  280. CloseFile
  281. StopProgram
  282.