home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / utilities / utilsp / printlbls / !PrintLbls / !RunImage (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  1994-02-23  |  29.7 KB  |  1,294 lines

  1.  ><PrintLbls$Dir>.!RunImage
  2.  !PrintLbls:
  3.  Steven Haslam 1991-4
  4.  Interface module:
  5.  Simon Huntingdon 1990
  6.  Sliding heap manager:
  7.  Steven Haslam 1992
  8.  TASK 4:$TASK="TASK"
  9.  "Wimp_Initialise",200,!TASK,"Label printer" 
  10.  version%,thistask%
  11.  version%<200 
  12.  0,"WindowManager 2.00 required"
  13.  "Wimp_ClaimInterface",thistask%
  14. wimpy_error(
  15.  block% &400
  16. init_vars
  17. setup_heap
  18. load_setup
  19. i_size%=&1000
  20.  indirection% i_size%
  21. i_ptr%=indirection%
  22. i_end%=indirection%+i_size%
  23. menublocksize%=&200
  24.  menublock% menublocksize%
  25.  "OS_File",5,"<PrintLbls$Dir>.Sprites" 
  26.  ,,,,splen%
  27. create_named_sliding_block(spritesanchor%,splen%+4)
  28. !#privatesprites%=!spritesanchor%
  29. !privatesprites%=splen%+4
  30.  "OS_File",255,"<PrintLbls$Dir>.Sprites",privatesprites%+4
  31. load_windows
  32. mi_ptr%=i_ptr%
  33. create_menus
  34. create_iconbar
  35. quit%=
  36. erwok%=
  37. wimpy_error(
  38.  "OS_ReadMonotonicTime" 
  39.  oldtime%
  40.  auto_revise% 
  41.  "OS_ReadMonotonicTime" 
  42.  newtime%
  43.  (newtime%-oldtime%)>0
  44. oldtime%+=100
  45.  "Wimp_PollIdle",,block%,oldtime% 
  46.  Reason%
  47.  "Wimp_Poll",1,block% 
  48.  Reason%
  49.  "Wimp_PollPointer",Reason%,,thistask%
  50.  Reason% 
  51.  0     : 
  52. gstrans("<Font$Path>")<>oldfontpath$ 
  53. create_menus
  54.  1     : 
  55. redraww(!block%)
  56.  2     : 
  57.  "Wimp_OpenWindow",,block%
  58.  3     : 
  59. close_window(!block%)
  60.  6     : 
  61. mouse(block%!0,block%!4,block%!8,block%!12,block%!16)
  62.  8     : 
  63. keypress(block%!0,block%!4,block%!20,block%!24)
  64.  9     : 
  65. menu_choice
  66.  17,18 : 
  67. message_received
  68.  19    : 
  69. no_acknowledge
  70.  quit%
  71. shut_down
  72. shut_down
  73.  "Wimp_CloseTemplate"
  74. lose_fonts
  75.  "Wimp_ReleaseInterface",thistask%
  76.  "Wimp_CloseDown"
  77. message_received
  78. fromtask%=block%!4
  79. my_ref%=block%!8
  80. your_ref%=block%!12
  81. message%=block%!16
  82. ("Set Message$Type "+
  83. ~message%)
  84.  message% 
  85.  0: quit%=
  86.  Message_DataSave
  87.  (block%!40=&FFF 
  88.  block%!40=&DFE) 
  89.  ((block%!20=window%(mainW%,1) 
  90.  block%!24=3) 
  91.  (block%!20=-2 
  92.  block%!24=iconbarI%)) 
  93. bar_drag%=block%!20=-2
  94. block%!36=-1
  95. block%!0=256
  96. ["$(block%+44)="<Wimp$Scrap>"+
  97. block%!12=my_ref%
  98. block%!16=2
  99.  i%=0 
  100.  256 
  101. block%!(i%+512)=block%!i%
  102. inputfile$="
  103.  None 
  104.  block%!36=-1 
  105. RAMb%=256
  106. RAMb%=block%!36
  107. transfers%=0
  108. block%!36=RAMb%
  109. filesize%=0
  110.  !fileanchor% 
  111. scrap_sliding_block(fileanchor%)
  112. create_named_sliding_block(fileanchor%,block%!36)
  113. block%!16=6
  114. block%!20=!fileanchor%
  115. block%!24=block%!36
  116.  "Wimp_SendMessage",18,block%,fromtask%
  117.  Message_DataLoad
  118.  (block%!40=&FFF 
  119.  block%!40=&DFE) 
  120.  ((block%!20=window%(mainW%,1) 
  121.  block%!24=3) 
  122.  (block%!20=-2 
  123.  block%!24=iconbarI%)) 
  124. bar_drag%=block%!20=-2
  125. loadCSV(
  126. getstr(block%+44))
  127. block%!0=256
  128. block%!12=my_ref%
  129. block%!16=4
  130.  "Wimp_SendMessage",17,block%,fromtask%
  131.  apptrans% 
  132. ("Remove "+
  133. getstr(block%+44)):apptrans%=
  134.  Message_RAMTransmit
  135. RAMTransmit
  136.  &400C0: 
  137.  Message_MenuWarning
  138.  block%!20<=windows% 
  139. W%=block%!20
  140.  window%(W%,1)=-1 
  141.  "Wimp_CreateWindow",,window%(W%,2) 
  142.  window%(W%,1)
  143. block%!20=window%(W%,1)
  144.  "Wimp_CreateSubMenu",,block%!20,block%!24,block%!28
  145.  &400C7: 
  146.  Message_TaskNameIs
  147. .inputfile$="Data from "+
  148. getstr(block%+28)
  149.  bar_drag% 
  150. ask_if_print
  151. icontextaddr(window%(mainW%,1),2)=inputfile$
  152. inputfile$>=18 
  153. rj(window%(mainW%,1),2)
  154.  &80147: 
  155.  printer changed
  156.  window%(mainW%,1)>0 
  157. pdriver
  158. mainH%=window%(mainW%,1)
  159. icontextaddr(mainH%,13)=pdriver$:
  160. redrawicon(mainH%,13)
  161. icontextaddr(mainH%,14)=pres$   :
  162. redrawicon(mainH%,14)
  163. lighticon(mainH%,9,pdriver%)
  164. wimpy_error(code%,mess$,canquit%)
  165.  what%,result%
  166.  "Hourglass_Smash"
  167.  code%>1 
  168.  mess$+="; code: "+
  169. code%
  170. what%=1
  171. mess$,11)="Fatal error":what%=2
  172.  canquit%:mess$+="; (Cancel to quit, OK to continue)":what%+=2
  173. !block%=code%
  174. $(block%+4)=mess$+
  175.  "Wimp_ReportError",block%,what%,"Label printer" 
  176.  ,result%
  177.  result%=2 
  178. shut_down
  179. create_iconbar
  180. block%!0=-1
  181. block%!4=0
  182. block%!8=0
  183. block%!12=68
  184. block%!16=68
  185. block%!20=&3002
  186. $(block%+24)="!PrintLbls"
  187.  "Wimp_CreateIcon",,block% 
  188.  iconbarI%
  189. - Menu procedures BEGIN
  190. tickr(a%,i1%,i2%,ix%)
  191.  i%,ia%
  192. ia%=a%+28+24*i1%
  193.  i%=i1% 
  194.  ix%=i% 
  195.  !ia%=!ia% 
  196.  !ia%=!ia% 
  197.  &FFFFFFFE
  198. ia%+=24
  199. light(a%,i%,c%)
  200. a%=a%+36+24*i%
  201.  !a%=!a% 
  202.  &FFBFFFFF 
  203.  !a%=!a% 
  204.  &00400000
  205. tick(a%,i%,c%)
  206. a%=a%+28+24*i%
  207.  !a%=!a% 
  208.  !a%=!a% 
  209.  &FFFFFFFE
  210. lit(test%)
  211.  test% 
  212.  ="|lit1" 
  213.  ="|lit0"
  214. tick(test%)
  215.  test% 
  216.  ="|tog1" 
  217.  ="|tog0"
  218. sub(m$,m%)="|sub"+
  219. "000000000000"+
  220. (m%),12)+m$
  221. menuitem(text$)
  222.  menuflags%,iconflags%,submenu%,indlen%,valid%
  223.  menuptr%+24>menend% 
  224.  255,"No room for primary menu definitions"
  225. valid%=-1
  226.     ii%=
  227. indlen%=-1
  228. submenu%=-1
  229.  text$="" 
  230. menuflags%=8
  231. iconflags%=&07000021
  232. text$,1)="|"
  233. text$,2,3) 
  234.  "brk":
  235. menuflags%+=2
  236. text$=
  237. text$,5)
  238.  "sub":
  239. submenu%=
  240. text$,5,12))
  241. text$=
  242. text$,17)
  243.  "lit":
  244. *iconflags%+=(1<<22)*(1-
  245. text$,5,1)))
  246. text$=
  247. text$,6)
  248.  "tog":
  249. menuflags%+=
  250. text$,5,1))
  251. text$=
  252. text$,6)
  253.  "wri":
  254. text$,5,2) 
  255.  "sp":indlen%=255:valid%=-1
  256. menuflags%+=%100
  257. text$=
  258. text$,7)
  259. (text$)>menumax% menumax%=
  260. (text$)
  261. menuptr%!0=menuflags%
  262. menuptr%!4=submenu%
  263. menuptr%!8=iconflags%
  264. (text$)>11 indlen%=
  265. (text$)
  266.  indlen%<0 
  267. $(menuptr%+12)=text$
  268. (menuptr%!8=(menuptr%!8) 
  269.  %100000000
  270. menuptr%!12=i_ptr%
  271. menuptr%!16=valid%
  272. menuptr%!20=indlen%
  273.  i_ptr%+indlen%+1>i_end% 
  274.  255,"No room for MENU indirection"
  275. $i_ptr%=text$
  276. i_ptr%+=indlen%+1
  277. menuptr%+=24
  278. setmenstr(menu%,item%,s$)
  279. !$(!(menu%+28+24*item%+12))=s$
  280. menstr(menu%,item%)
  281. getstr(!(menu%+28+24*item%+12))
  282. makemen($block%,menutitle$)
  283. makemen2(block%,menutitle$)
  284. makemen2(mendat%,menutitle$)
  285.  menumax%,wasptr%
  286. wasptr%=menuptr%
  287. menumax%=10
  288. menuptr%!20=40
  289. $menuptr%=menutitle$
  290. menuptr%?12=7
  291. menuptr%?13=2
  292. menuptr%?14=7
  293. menuptr%?15=0
  294. maxaddr%=menuptr%+16
  295. menuptr%!24=0
  296. menuptr%+=28
  297. i1%=i%+1
  298. item$=""
  299.  i%?mendat%<>
  300.  i%?mendat%>=32
  301. item$+=
  302. (i%?mendat%)
  303. #    i%+=1
  304.  i%?mendat%=
  305. "," i%+=1
  306. menuitem(item$)
  307.  i%?mendat%<32
  308. (%menuptr%!-24=(menuptr%!-24) 
  309. !maxaddr%=menumax%*16+32
  310. =wasptr%
  311. assemble_menu(dest%,destend%,source%,title$)
  312.  a%,b%,junk%
  313. a%=menuptr%
  314. b%=menend%
  315. menuptr%=dest%
  316. menend%=destend%
  317. 2#junk%=
  318. makemen2(source%,title$)
  319. menuptr%=a%
  320. menend%=b%
  321. open_menu(m%,x%,y%)
  322. MenuBLK%=m%
  323. MenuX%=x%
  324. MenuY%=y%
  325.  "Wimp_CreateMenu",,m%,x%,y%
  326. - Menu procedures 
  327. create_menus
  328.  "Hourglass_On"
  329. menuptr%=menublock%
  330. C%menend%=menublock%+menublocksize%
  331. i_ptr%=mi_ptr%
  332. fonts
  333. FTIconM%=
  334. makemen(
  335. sub("Info",infoW%)+",Save setup,Quit","PrintLbls"):I_entries%=3
  336. highfontM%=
  337. makemen(
  338. sub("Name",fontM%)+","+
  339. sub("Address",fontM%)+",|brk"+
  340. sub("Last line",fontM%)+",Revise font list,"+
  341. tick(auto_revise%)+"Auto-revise","Fonts setup")
  342. HQunitsM%=
  343. makemen("Inches,Points,Millipoints,Centimetres,Millimetres","Units")
  344. I/units%=
  345. "**|in|pt|mp|cm|mm","|"+units$)/3-1
  346. tickr(unitsM%,0,4,units%)
  347. K^mainM%=
  348. makemen(
  349. sub("Fonts",highfontM%)+",Remove CSV,"+
  350. sub("Units",unitsM%),"PrintLbls")
  351.  "Hourglass_Off"
  352. mouse(x%,y%,b%,w%,i%)
  353.  b%<>2 
  354.  b%<8 
  355.  "Wimp_BorderIcon",,block%
  356.  -2: 
  357. iconbar_click(x%,y%,b%)
  358.  window%(mainW%,1): 
  359. main_click(x%,y%,b%,w%,i%)
  360.  window%(errorW%,1): 
  361. error_click(w%,i%)
  362.  window%(setupW%,1): 
  363. setup_click(b%,w%,i%)
  364. index(w%,
  365.  b%<>2 
  366.  b%<8 
  367. block%!0=x%
  368. block%!4=y%
  369. block%!8=0
  370. block%!12=w%
  371. block%!16=i%
  372.  "Wimp_BorderIcon",,block%
  373. iconbar_click(x%,y%,b%)
  374. open_window(mainW%)
  375. open_menu(IconM%,x%-64,96+40*I_entries%)
  376. error_click(w%,i%)
  377.  0,0,1280,1024
  378.  i%=3 
  379. shut_down
  380. close_window(errorW%)
  381. erwok%=
  382. setup_click(b%,w%,i%)
  383.  setupH%
  384. setupH%=w%
  385.  11: 
  386. close_window(setupW%)
  387.  12: 
  388. write_label_sizes: 
  389. save_setup: 
  390. close_window(setupW%)
  391.  10: 
  392. write_label_sizes: 
  393. close_window(setupW%)
  394. write_label_sizes
  395.  temp%
  396. ~$temp%=
  397. icontextaddr(setupH%,4)
  398.  temp%=0 
  399. wimpy_error(0,"You must have at least 1 label across!",
  400.  no_across%=temp%
  401. $temp%=
  402. icontextaddr(setupH%,5)
  403.  temp%=0 
  404. wimpy_error(0,"You must have at least 1 label down!",
  405.  no_down%=temp%
  406. 1topmargin=
  407. strtomp($
  408. icontextaddr(setupH%,9))
  409. 2leftmargin=
  410. strtomp($
  411. icontextaddr(setupH%,8))
  412. -width=
  413. strtomp($
  414. icontextaddr(setupH%,6))
  415. .height=
  416. strtomp($
  417. icontextaddr(setupH%,7))
  418. 4indentation=
  419. strtomp($
  420. icontextaddr(setupH%,14))
  421. menu_choice
  422.  adjust%
  423. choice0%=block%!0
  424. choice1%=block%!4
  425. choice2%=block%!8
  426.  "Wimp_DecodeMenu",,MenuBLK%,block%,block%+&100,&100
  427.  choice$=
  428. getstr(block%+&100)
  429.  "Wimp_GetPointerInfo",,block%
  430. adjust%=(block%!8) 
  431.  MenuBLK% 
  432.  IconM%:
  433. icon_menu(choice0%)
  434.  mainM%:
  435. main_menu(choice$,choice0%,choice1%)
  436.  adjust% 
  437. open_menu(MenuBLK%,MenuX%,MenuY%)
  438. getstr(p%)
  439.     p$=""
  440.  ?p%>31
  441.     p%+=1
  442. icon_menu(choice%)
  443.  choice% 
  444.  2: quit%=
  445. save_setup
  446. load_windows
  447. windows%=4
  448.  window%(windows%,2)
  449. window%()=-1
  450. )infoW%=1:mainW%=2:errorW%=3:setupW%=4
  451.  "Wimp_OpenTemplate",,"<PrintLbls$Dir>.Templates"
  452.  space for window def. = 88 + 32 * no. of icons
  453.  proginfoS% 88+32*10
  454.  "Wimp_LoadTemplate",,proginfoS%,i_ptr%,i_end%,-1,"progInfo" 
  455.  ,,i_ptr%
  456.  window%(infoW%,2)=proginfoS%
  457.  mainS% 88+32*20
  458.  "Wimp_LoadTemplate",,mainS%,i_ptr%,i_end%,-1,"main" 
  459.  ,,i_ptr%
  460. window%(mainW%,2)=mainS%
  461. mainS%!64=privatesprites%
  462.  errorS% 88+32*6
  463.  "Wimp_LoadTemplate",,errorS%,i_ptr%,i_end%,-1,"error" 
  464.  ,,i_ptr%
  465. window%(errorW%,2)=errorS%
  466.  setupS% 88+32*15
  467.  "Wimp_LoadTemplate",,setupS%,i_ptr%,i_end%,-1,"setuplabels" 
  468.  ,,i_ptr%
  469. window%(setupW%,2)=setupS%
  470. setupS%!64=privatesprites%
  471.  "Wimp_CloseTemplate"
  472. close_window(index%)
  473.  loop%,handle%
  474.  index%<=windows% 
  475.  window%(index%,1)=-1 
  476. handle%=window%(index%,1)
  477. handle%=index%
  478. !block%=handle%
  479.  "Wimp_CloseWindow",,block%
  480.  loop%=1 
  481.  windows%
  482.  window%(loop%,1)=handle% 
  483. window_delete(loop%)
  484. !block%=handle%
  485.  "Wimp_DeleteWindow",,block%
  486. window%(loop%,1)=-1
  487. loop%=windows%
  488.  index%=mainW% 
  489. close_window(setupW%)
  490. open_window(index%)
  491.  handle%
  492.  index%<=windows% 
  493.  window%(index%,1)=-1 
  494.  "Wimp_CreateWindow",,window%(index%,2) 
  495.  window%(index%,1)
  496. window_create(index%)
  497. handle%=window%(index%,1)
  498. handle%=index%
  499. !block%=handle%
  500.  "Wimp_GetWindowState",,block%
  501. block%!28=-1
  502.  "Wimp_OpenWindow",,block%
  503. redraww(handle%)
  504.  index%
  505. index%=
  506. index(handle%,
  507. !block%=handle%
  508.  "Wimp_RedrawWindow",,block% 
  509.  more%
  510.  more%
  511.  "Wimp_BorderWindow",,block%
  512.  index% 
  513.  "Wimp_GetRectangle",,block% 
  514.  more%
  515. index(handle%,error%)
  516.  index%,loop%
  517. index%=0
  518.  loop%=1 
  519.  windows%
  520.  window%(loop%,1)=handle% 
  521. index%=loop%
  522. loop%=windows%
  523.  index%=0 
  524.  error% 
  525.  255,"Window index not found"
  526. =index%
  527. window_create(index%)
  528.  f%,handle%
  529. handle%=window%(index%,1)
  530.  index% 
  531.  mainW%:
  532.  f%=1 
  533. get_font(f%)
  534. icontextaddr(handle%,2)=inputfile$
  535.  inputfile$="
  536.  None 
  537. inputfile$<18 
  538. centre(handle%,2) 
  539. rj(handle%,2)
  540. pdriver
  541. icontextaddr(handle%,13)=pdriver$
  542. icontextaddr(handle%,14)=pres$
  543. icontextaddr(handle%,17)=
  544. namesize%+"pt"
  545. icontextaddr(handle%,18)=
  546. addrsize%+"pt"
  547. lighticon(handle%,9,pdriver%)
  548. update_fontcontrols
  549.  setupW%:
  550. icontextaddr(handle%,9)=
  551. display(topmargin)
  552. icontextaddr(handle%,8)=
  553. display(leftmargin)
  554. icontextaddr(handle%,6)=
  555. display(width)
  556. icontextaddr(handle%,7)=
  557. display(height)
  558. icontextaddr(handle%,14)=
  559. display(indentation)
  560. icontextaddr(handle%,4)=
  561. (no_across%)
  562. icontextaddr(handle%,5)=
  563. (no_down%)
  564. window_delete(index%)
  565.  index% 
  566.  mainW%: 
  567. lose_fonts
  568. init_vars
  569. cmtoin=(1/2.540005)
  570. inputfile$="
  571.  None 
  572. erwok%=
  573.  font$(3),font%(3,1)
  574. maxaddrs%=100
  575.  addr$(maxaddrs%,10),last%(maxaddrs%)
  576. apptrans%=
  577. namesize%=24
  578. addrsize%=12
  579.  transform% 16,rectangle% 16,plotpos% 8,labelrect% 16
  580. icontextaddr(wi%,ic%)
  581. q%=block%+&100
  582. q%!0=wi%:q%!4=ic%
  583.  "Wimp_GetIconState",,q%
  584. =q%!28
  585. loadCSV(fname$)
  586.  "Hourglass_On"
  587.  inputfile$<>"
  588.  None 
  589. scrap_sliding_block(fileanchor%)
  590.  "OS_File",5,fname$ 
  591.  ,,,,CSVlength%
  592. create_named_sliding_block(fileanchor%,CSVlength%)
  593.  "OS_File",255,fname$,!fileanchor%
  594. inputfile$=fname$
  595.  window%(mainW%,1)>0 
  596. icontextaddr(window%(mainW%,1),2)=inputfile$
  597. inputfile$>=18 
  598. rj(window%(mainW%,1),2)
  599.  bar_drag% 
  600. ask_if_print
  601. checknewfile(CSVlength%)
  602.  "Hourglass_Off"
  603. setup_heap
  604. initheaps(1024,8)
  605. O,spritesanchor%=
  606. create_anchor("Sprites")
  607. P+fileanchor%=
  608. create_anchor("File data")
  609. Q/fontmenuanchor%=
  610. create_anchor("Font menu")
  611. R+tempanchor%=
  612. create_anchor("Temporary")
  613. redrawicon(w%,i%)
  614. q%=block%+&100
  615. !q%=w%
  616. q%!4=i%
  617. q%!8=0
  618. q%!12=0
  619.  "Wimp_SetIconState",,q%
  620. main_click(x%,y%,b%,w%,i%)
  621. open_menu(mainM%,x%-64,y%)
  622. wimpy_error(0,"Drag a CSV file, type Text (&FFF) or CSV (&DFE), onto this icon to load it.",
  623.  inputfile$="
  624.  None 
  625. wimpy_error(0,"You must have loaded in a file in order to print it!",
  626. print
  627. create_menus
  628. open_window(setupW%)
  629. fonts
  630.  header$,blocksize%,heapblocksize%,heapblockinc%,count%,options%,lastfont$
  631.  "Hourglass_On"
  632.  !tempanchor%<>0 
  633. scrap_sliding_block(tempanchor%)
  634.  !fontmenuanchor%<>0 
  635. scrap_sliding_block(fontmenuanchor%)
  636. lose_fonts
  637. y"header$="|brk|lit0System font"
  638. blocksize%=
  639. header$
  640. heapblocksize%=&400
  641. heapblockinc%=&100
  642. create_named_sliding_block(tempanchor%,heapblocksize%)
  643. $!tempanchor%=header$
  644. count%=0
  645. fonts%=0
  646. options%=1
  647. lastfont$="No fonts"
  648.  "Hourglass_LEDs",count% 
  649.  "Font_ListFonts",,block%,count% 
  650.  ,,count%
  651.  count%<>-1 
  652. lastfont$=$block%
  653. fonts%=count%
  654. options%+=1
  655.  blocksize%+
  656. $block%+2>heapblocksize% 
  657. !heapblocksize%+=heapblockinc%
  658. heapblockinc%+=&100
  659. extend_named_sliding_block(tempanchor%,heapblocksize%)
  660. *$(!tempanchor%+blocksize%)=","+$block%
  661. blocksize%+=
  662. $block%+1
  663.  f%=1 
  664.  font$(f%)=$block% 
  665. font%(f%,0)=1
  666.  count%=-1
  667.  lastfont$="No fonts" 
  668. wimpy_error(0,"Fatal error: No fonts",
  669. create_named_sliding_block(fontmenuanchor%,28+options%*24)
  670. assemble_menu(!fontmenuanchor%,!fontmenuanchor%+28+options%*24,!tempanchor%,"Font list")
  671. scrap_sliding_block(tempanchor%)
  672. fontM%=!fontmenuanchor%
  673.  f%=1 
  674.  font%(f%,0)=0 
  675. wimpy_error(0,"Font """+font$(f%)+""" not found. It shall be replaced by """+lastfont$+"""",
  676. font$(f%)=lastfont$
  677. font%(f%,0)=0
  678.  "Hourglass_LEDs"
  679.  window%(mainW%,1)>0 
  680.  f%=1 
  681. get_font(f%)
  682.  "Hourglass_Off"
  683. (oldfontpath$=
  684. gstrans("<Font$Path>")
  685. main_menu(choice$,choice0%,choice1%)
  686.  dot%,option1$,option2$
  687. dot%=
  688. choice$,".")
  689. option1$=
  690. choice$,dot%-1)
  691. choice$=
  692. choice$,dot%+1)
  693. dot%=
  694. choice$,".")
  695. option2$=
  696. choice$,dot%-1)
  697. choice$=
  698. choice$,dot%+1)
  699.  choice0% 
  700. font_menu_choice(choice1%,option2$,choice$)
  701.  inputfile$<>"
  702.  None 
  703. scrap_sliding_block(fileanchor%):!fileanchor%=0
  704. inputfile$="
  705.  None 
  706. icontextaddr(window%(mainW%,1),2)=inputfile$
  707. centre(window%(mainW%,1),2)
  708.  choice1% 
  709.  0:units$="in"
  710.  1:units$="pt"
  711.  2:units$="mp"
  712.  3:units$="cm"
  713.  4:units$="mm"
  714. /units%=
  715. "**|in|pt|mp|cm|mm","|"+units$)/3-1
  716. tickr(unitsM%,0,4,units%)
  717. font_menu_choice(choice1%,area$,font$)
  718.  choice1% 
  719.  0,1,2:
  720.  area$<>font$ 
  721. change_font(choice1%+1,font$)
  722. create_menus
  723.  4: auto_revise%=
  724.  auto_revise%
  725. tick(highfontM%,4,auto_revise%)
  726. change_font(area%,font$)
  727. lose_font(area%)
  728. font$(area%)=font$
  729. get_font(area%)
  730. update_fontcontrols
  731. lose_fonts
  732.  x%,y%
  733.  x%=1 
  734.  y%=0 
  735.  font%(x%,y%) 
  736.  "Font_LoseFont",font%(x%,y%)
  737. font%(x%,y%)=0
  738. lose_font(f%)
  739.  y%=0 
  740.  font%(f%,y%) 
  741.  "Font_LoseFont",font%(f%,y%)
  742. font%(f%,y%)=0
  743. get_font(f%)
  744.  "Font_FindFont",,font$(f%),12*16,12*16 
  745.  font%(f%,0)
  746. save_setup
  747.  setup%
  748. %setup%=
  749. ("<PrintLbls$Dir>.Setup")
  750.  f%=1 
  751. #setup%,font$(f%)
  752. #setup%,
  753. namesize%
  754. #setup%,
  755. addrsize%
  756. #setup%,
  757. topmargin
  758. #setup%,
  759. leftmargin
  760. #setup%,
  761. width
  762. #setup%,
  763. height
  764. #setup%,
  765. indentation
  766. #setup%,
  767. no_across%
  768. #setup%,
  769. no_down%
  770. #setup%,units$
  771.  auto_revise% 
  772. #setup%,"Y" 
  773. #setup%,"N"
  774. #setup%
  775. load_setup
  776.  setup%
  777. %setup%=
  778. ("<PrintLbls$Dir>.Setup")
  779.  f%=1 
  780. font$(f%)=
  781. #setup%
  782. namesize%=
  783. #setup%)
  784. addrsize%=
  785. #setup%)
  786. topmargin=
  787. #setup%)
  788. leftmargin=
  789. #setup%)
  790. width=
  791. #setup%)
  792. height=
  793. #setup%)
  794. indentation=
  795. #setup%)
  796. no_across%=
  797. #setup%)
  798. no_down%=
  799. #setup%)
  800. units$=
  801. #setup%
  802. auto_revise%=
  803. #setup%="Y"
  804. #setup%
  805. update_fontcontrols
  806.  handle%,f%
  807. handle%=window%(mainW%,1)
  808.  f%=1 
  809. icontextaddr(handle%,f%+5)=font$(f%)
  810. !block%=handle%
  811. block%!4=f%+5
  812. (%block%!8=(1<<6)+(font%(f%,0)<<24)
  813. block%!12=(1<<6)+(255<<24)
  814.  "Wimp_SetIconState",,block%
  815. memfile(
  816.  pointer%)
  817. getstr(pointer%)
  818. pointer%+=
  819. - Business part BEGINS
  820. print
  821.  "Hourglass_On"
  822. fileptr%=!fileanchor%
  823. filebase%=!fileanchor%
  824. :"strsppage%=no_across%*no_down%
  825. addr$()=""
  826. labelN%=0
  827.  (fileptr%-filebase%)<=CSVlength%
  828. > line$=
  829. memfile(fileptr%)+","
  830.  line$<>"," 
  831. line%=0
  832.  line$>""
  833. line$,1)="""" 
  834. quote%=
  835. line$,
  836. 34,2)
  837. D nextpart$=
  838. line$,2,quote%-2)
  839. line$=
  840. line$,quote%+2)
  841. comma%=
  842. line$,",")
  843. nextpart$=
  844. line$,comma%-1)
  845. line$=
  846. line$,comma%+1)
  847. K"addr$(labelN%,line%)=nextpart$
  848. line%+=1
  849. last%(labelN%)=line%-1
  850. labelN%+=1
  851.  labelN%=strsppage% 
  852. print_page
  853. labelN%=0
  854. addr$()=""
  855.  labelN%>0 
  856. print_page
  857.  "Hourglass_Off"
  858. show_addrs
  859.  i%=0 
  860.  labelN%-1
  861.  j%=0 
  862.  last%(i%)
  863.  addr$(i%,j%)
  864. printing_error(N%,e$)
  865.  "PDriver_AbortJob",file%
  866. #file%
  867. wimpy_error(N%,""""+e$+""" during printing",
  868. print_page
  869.  OStm,OSlm,OSwd,OSht
  870. ("RMEnsure PDriver Error 255 No PDriver module!")
  871.  "PDriver_Info" 
  872.  ,xres%,yres%
  873.  "PDriver_PageSize" 
  874.  ,xsize%,ysize%
  875. file%=
  876. ("printer:")
  877. printing_error(
  878.  "PDriver_SelectJob",file%,inputfile$
  879. OSlm=leftmargin/72000*180
  880. OStm=topmargin/72000*180
  881. OSwd=width/72000*180
  882. OSht=height/72000*180
  883. transform%!00=
  884. fixed16(1)
  885. transform%!04=
  886. fixed16(0)
  887. transform%!08=
  888. fixed16(0)
  889. transform%!12=
  890. fixed16(1)
  891. top=ysize%/72000*180
  892. rectangle%!0=0
  893. rectangle%!4=0
  894. ~!rectangle%!8=xsize%/72000*180
  895. rectangle%!12=top
  896. plotpos%!0=0
  897. plotpos%!4=0
  898.  "PDriver_GiveRectangle",1,rectangle%,transform%,plotpos%,-256
  899.  "PDriver_DrawPage",1,rectangle% 
  900.  more%,,rect%
  901.  more%
  902. xn%=0:yn%=0
  903. x=OSlm:y=top-OStm
  904.  l%=0 
  905.  labelN%
  906. labelrect%!0=x
  907. labelrect%!4=y-OSht
  908. labelrect%!8=x+OSwd
  909. labelrect%!12=y
  910. intersect(rectangle%,labelrect%) 
  911. printlabel(l%,x,y)
  912. xn%+=1:x+=OSwd
  913.  xn%=no_across% 
  914.  yn%+=1:xn%=0:x=OSlm:y-=OSht
  915.  "PDriver_GetRectangle",,rectangle% 
  916.  more%,,rect%
  917.  "PDriver_EndJob",file%
  918. #file%
  919. printlabel(label%,x%,y%)
  920.  loop%,dy%
  921. dy%=namesize%/72*180
  922. y%-=dy%
  923.  "Font_FindFont",,font$(1),namesize%*16,namesize%*16 
  924.  font%(1,1)
  925.  "Font_SetFont",font%(1,1)
  926.  "ColourTrans_SetFontColours",,-256,0,14
  927.  "Font_Paint",,addr$(label%,0),1<<4,x%,y%
  928.  "Font_LoseFont",font%(1,1)
  929. x%+=indentation/72000*180
  930. dy%=addrsize%/72*180
  931. y%-=dy%*1.2
  932.  loop%=1 
  933.  last%(label%)
  934.  loop%=last%(label%) 
  935.  "Font_FindFont",,font$(3),addrsize%*16,addrsize%*16 
  936.  font%(3,1)
  937. font%=font%(3,1)
  938.  "Font_FindFont",,font$(2),addrsize%*16,addrsize%*16 
  939.  font%(2,1)
  940. font%=font%(2,1)
  941.  "Font_SetFont",font%
  942.  "ColourTrans_SetFontColours",,-256,0,14
  943.  "Font_Paint",,addr$(label%,loop%),1<<4,x%,y%
  944.  "Font_LoseFont",font%
  945.  loop%=last%(label%) 
  946. font%(3,1)=0
  947. font%(2,1)=0
  948. x%+=indentation/72000*180
  949. y%-=dy%
  950. fixed16(N)=N*(2^16)
  951. intersect(boxA%,boxB%)
  952.  boxA%!0<=boxB%!0 
  953.  boxA%!8>=boxB%!0 
  954.  boxA%!0<boxB%!8 
  955.  boxA%!8>=boxB%!12 
  956.  boxA%!4<=boxB%!4 
  957.  boxA%!12>=boxB%!4 
  958.  boxA%!4<boxB%!12 
  959.  boxA%!12>=boxB%!12 
  960. - Business part ENDS
  961. no_acknowledge
  962.  block%!16 
  963. apptrans%=
  964.  i%=0 
  965. block%!i%=block%!(i%+512)
  966.  "Wimp_SendMessage",18,block%,block%!4
  967. apptrans%=
  968.  &400C6:
  969. inputfile$="RAM Transfer"
  970. icontextaddr(window%(mainW%,1),2)=inputfile$
  971. centre(window%(mainW%,1),2)
  972. RAMTransmit
  973. filesize%+=block%!24
  974.  block%!24=RAMb% 
  975. extend_named_sliding_block(fileanchor%,filesize%+RAMb%)
  976. block%!12=my_ref%
  977. block%!16=6
  978. $block%!20=!fileanchor%+filesize%
  979. block%!24=RAMb%
  980.  "Wimp_SendMessage",17,block%,fromtask%
  981. block%!0=24
  982. block%!12=0
  983. block%!16=&400C6
  984. block%!20=fromtask%
  985.  "Wimp_SendMessage",18,block%
  986. checknewfile(filesize%)
  987. checknewfile(fsize%)
  988. extend_named_sliding_block(fileanchor%,fsize%+1)
  989. file%=!fileanchor%
  990. file%?fsize%=10
  991.  file%?(fsize%-1)<>10 
  992.  fsize%+=1:
  993. checknewfile(fsize%)
  994. CSVlength%=fsize%
  995. pdriver
  996. pdriver%=
  997.  xres%,yres%,xres$,yres$
  998. :pdriver$="none installed":pres$="none installed":
  999.  "PDriver_Info" 
  1000.  ,xres%,yres%,,pdriver$
  1001. xres$=
  1002. xres%
  1003. yres$=
  1004. yres%
  1005. xres$>
  1006. yres$
  1007. yres$+=" "
  1008. xres$<
  1009. yres$
  1010. xres$=" "+xres$
  1011. pres$=xres$+" 
  1012.  "+yres$
  1013. pdriver%=
  1014. lighticon(wi%,ic%,co%)
  1015. q%=block%+&100
  1016. q%!0=wi%
  1017. q%!4=ic%
  1018.  co% 
  1019. q%!8=0
  1020. q%!8=1<<22
  1021. q%!12=1<<22
  1022.  "Wimp_SetIconState",,q%
  1023. keypress(w%,i%,s%,k%)
  1024.  index%,process%
  1025. process%=
  1026. index%=
  1027. index(w%,
  1028.  index% 
  1029.  mainW%: 
  1030. main_key(w%,i%,k%)
  1031.  process% 
  1032.  "Wimp_ProcessKey",k%
  1033. main_key(w%,i%,k%)
  1034.  k%=13 
  1035.  (i%=17 
  1036.  i%=18) 
  1037. icontextaddr(w%,i%)
  1038. s$,2)="pt" 
  1039.  s%>(height/1000) 
  1040.  i%=17 
  1041. icontextaddr(w%,i%)=
  1042. namesize%+"pt" 
  1043. icontextaddr(w%,i%)=
  1044. addrsize%+"pt"
  1045.  "Wimp_SetCaretPosition",-1
  1046. wimpy_error(0,"That value is ridiculous! The label itself isn't that high!",
  1047.  i%=17 
  1048.  namesize%=s% 
  1049.  addrsize%=s%
  1050. icontextaddr(w%,i%)=
  1051. s%+"pt"
  1052. redrawicon(w%,i%)
  1053. i%=35-i%
  1054.  "Wimp_SetCaretPosition",w%,i%,,,-1,
  1055. icontextaddr(w%,i%)
  1056. process%=
  1057. centre(w%,i%)
  1058. q%=block%+&100
  1059. q%!0=w%
  1060. q%!4=i%
  1061. q%!8=(1<<3)
  1062. q%!12=(1<<3)+(1<<9)
  1063.  "Wimp_SetIconState",,q%
  1064. rj(w%,i%)
  1065. q%=block%+&100
  1066. q%!0=w%
  1067. q%!4=i%
  1068. q%!8=(1<<9)
  1069. q%!12=(1<<3)+(1<<9)
  1070.  "Wimp_SetIconState",,q%
  1071. mptomm(mp)
  1072. mmtomp=(1/25.40005)*72000
  1073. =mp/mmtomp
  1074. mmtomp(mm)
  1075. mmtomp=(1/25.40005)*72000
  1076. =mm*mmtomp
  1077. strtomp(str$)
  1078.  srcunits$,number$
  1079. srcunits$=
  1080. str$,2)
  1081. number$=
  1082. str$))
  1083.  srcunits$ 
  1084.  "mp":=
  1085. number$
  1086.  "pt":=
  1087. number$*1000
  1088.  "in":=
  1089. number$*72000
  1090.  "mm":=
  1091. mmtomp(
  1092. number$)
  1093.  "cm":=
  1094. mmtomp(
  1095. number$)*10
  1096. strtomp(
  1097. str$)+units$)
  1098. display(mp)
  1099.  str$,oldf%
  1100. oldf%=@%
  1101.  units$ 
  1102.  "in":@%="+g10.3":str$=
  1103. (mp/72000)+"in"
  1104.  "pt":@%="+g10.9":str$=
  1105. (mp/1000)+"pt"
  1106.  "mp":@%="+g10.9":str$=
  1107. mp+"mp"
  1108.  "mm":@%="+g10.3":str$=
  1109. mptomm(mp))+"mm"
  1110.  "cm":@%="+g10.3":str$=
  1111. mptomm(mp)/10)+"cm"
  1112. @%=oldf%
  1113. j    =str$
  1114. ask_if_print
  1115. pdriver
  1116.  pdriver%=
  1117. confirm("Print this CSV file on "+pdriver$+" printer at "+pres$+"?")=
  1118. print
  1119. confirm(str$)
  1120. !block%=0
  1121. $(block%+4)=str$+
  1122.  "Wimp_ReportError",block%,&13,"!PrintLbls, confirm:" 
  1123.  ,result%
  1124. =result%=1
  1125. gstrans(str$)
  1126.  "OS_GSTrans",str$,block%,block%+&400 
  1127.  ,,end%
  1128. block%?end%=13
  1129. =$block%
  1130.  --- SLIDING HEAP 2.00 PROCEDURES
  1131.  requires SlidingHeap 2.00
  1132.  module and PROCs
  1133.  Steven Haslam 1992
  1134. _heap_slotsize
  1135.  "Wimp_SlotSize",-1,-1 
  1136. _heap_numtostr(d%,n%)=
  1137. d%,"0")+
  1138. ~n%,d%)
  1139. _heap_snumtostr(d%,n%)=
  1140. d%," ")+
  1141. n%,d%)
  1142. heapsinfo
  1143.  "OS_Heap",1,fixedheapbase% 
  1144.  ,,bigbloc%,totfree%
  1145.  "Fixed heap"
  1146.  "----- ----"
  1147.  "Heap base    : &";
  1148. _heap_numtostr(8,fixedheapbase%)
  1149.  "Heap size    : ";
  1150. _heap_bytes2(fixedheapsize%)
  1151.  "Largest free : ";
  1152. _heap_bytes2(bigbloc%)
  1153.  "Total free   : ";
  1154. _heap_bytes2(totfree%)
  1155.  "Sliding heap"
  1156.  "------- ----"
  1157.  "SlidingHeap_HeapInfo",slidingheapbase%
  1158. _heap_pageup(n%)
  1159.  "OS_ReadMemMapInfo" 
  1160. =(n%+R0%-1) 
  1161.  (R0%-1)
  1162. initheaps(heapsize%,slidingblocks%)
  1163. fixedheapsize%=heapsize%
  1164. Lheap_trigger%=
  1165. _heap_pageup(
  1166. +fixedheapsize%+20+20*slidingblocks%-&8000)
  1167. setslotsize(heap_trigger%)
  1168. _heap_slotsize<heap_trigger% 
  1169.  130,"Unable to initialise heap"
  1170. fixedheapbase%=
  1171. %slidingheapbase%=
  1172. +fixedheapsize%
  1173.  "OS_Heap",0,fixedheapbase%,,fixedheapsize%
  1174.  "SlidingHeap_Create",slidingheapbase%,2,slidingblocks%
  1175.  "SlidingHeap_VerifyHeap",slidingheapbase%
  1176. _heap_nextfree
  1177.  nextfree%
  1178.  "SlidingHeap_NextFree",slidingheapbase% 
  1179.  nextfree%
  1180. =nextfree%
  1181. destroyheaps
  1182. setslotsize(
  1183. -&8000)
  1184. _heap_wordup(x%)=(x%+3) 
  1185. create_anchor(name$)
  1186.  space%
  1187.  space% 4+
  1188. name$+1
  1189. !space%=0
  1190. $(space%+4)=name$
  1191. =space%
  1192. create_named_sliding_block(anchor%,size%)
  1193.  trysize%
  1194. size%=
  1195. _heap_wordup(size%)
  1196. 7trysize%=
  1197. _heap_pageup(
  1198. _heap_nextfree+size%-&7FF4)
  1199.  trysize%>heap_trigger% 
  1200. setslotsize(trysize%)
  1201. _heap_slotsize<trysize% 
  1202. %      
  1203. setslotsize(heap_trigger%)
  1204. F      
  1205.  131,"Not enough room to create block """+$(anchor%+4)+""""
  1206.        heap_trigger%=trysize%
  1207.  "SlidingHeap_NewBlock",slidingheapbase%,anchor%,size%,anchor%+4
  1208.  "SlidingHeap_VerifyHeap",slidingheapbase%
  1209. scrap_sliding_block(anchor%)
  1210.  !anchor%=0 
  1211.  "SlidingHeap_ScrapBlock",slidingheapbase%,anchor%
  1212. 1trysize%=
  1213. _heap_pageup(
  1214. _heap_nextfree-&7FFC)
  1215.  trysize%<>heap_trigger% 
  1216. setslotsize(trysize%)
  1217.    heap_trigger%=trysize%
  1218. !anchor%=0
  1219.  "SlidingHeap_VerifyHeap",slidingheapbase%
  1220. setslotsize(newsize%)
  1221.  "Wimp_SlotSize",newsize%,-1
  1222. extend_named_sliding_block(anchor%,newsize%)
  1223.  !anchor%=0 
  1224. create_named_sliding_block(anchor%,newsize%):
  1225.  !anchor%>
  1226. _heap_nextfree 
  1227.  129,"Block beyond heap limits"
  1228. $newsize%=
  1229. _heap_wordup(newsize%)
  1230.  "SlidingHeap_DescribeBlock",slidingheapbase%,anchor% 
  1231.  ,,oldsize%
  1232. larger%=newsize%>oldsize%
  1233.  larger% 
  1234. H   trysize%=
  1235. _heap_pageup(
  1236. _heap_nextfree+(newsize%-oldsize%)-&7FFC)
  1237.  trysize%>heap_trigger% 
  1238.        
  1239. setslotsize(trysize%)
  1240. &      
  1241. _heap_slotsize<trysize% 
  1242. (         
  1243. setslotsize(heap_trigger%)
  1244. @         
  1245.  132,"Not enough room to extend block #"+
  1246. ~anchor%
  1247.       
  1248. #         heap_trigger%=trysize%
  1249.       
  1250.  "SlidingHeap_ExtendBlock",slidingheapbase%,anchor%,newsize%
  1251. 1trysize%=
  1252. _heap_pageup(
  1253. _heap_nextfree-&7FFC)
  1254.  trysize%<>heap_trigger% 
  1255. setslotsize(trysize%)
  1256.    heap_trigger%=trysize%
  1257.  "SlidingHeap_VerifyHeap",slidingheapbase%
  1258. _heap_bytes(b%)
  1259.  end%
  1260.  "OS_ConvertFixedFileSize",b%,block%,block%+&100 
  1261.  ,end%
  1262. ?end%=13
  1263. =$block%
  1264. _heap_bytes2(b%)
  1265.  end%
  1266.  "OS_ConvertFileSize",b%,block%,block%+&100 
  1267.  ,end%
  1268. ?end%=13
  1269. =$block%
  1270. create_fixed_block(size%)
  1271.  pointer%,flag%
  1272.  "XOS_Heap",2,fixedheapbase%,,size% 
  1273.  ,,pointer%;flag%
  1274.  flag% 
  1275. extendfixedheap
  1276.  "XOS_Heap",2,fixedheapbase%,,size% 
  1277.  ,,pointer%;flag%
  1278. =pointer%
  1279. extendfixedheap
  1280.  nshb%,extend%,trysize%
  1281.  "OS_ReadMemMapInfo" 
  1282.  extend%
  1283. $trysize%=
  1284. _heap_slotsize+extend%
  1285. setslotsize(trysize%)
  1286. _heap_slotsize<trysize% 
  1287.  255,"No room to extend fixed heap"
  1288. "nshb%=slidingheapbase%+extend%
  1289.  "SlidingHeap_ShiftHeap",slidingheapbase%,nshb%
  1290.  "OS_Heap",5,fixedheapbase%,,extend%
  1291. fixedheapsize%+=extend%
  1292. slidingheapbase%=nshb%
  1293.  "SlidingHeap_VerifyHeap",slidingheapbase%
  1294.