--- title: "REDRAW" id: 72978 type: "computer_media" slug: "redraw" url: "http://localhost/computer_media/redraw/" markdown_url: "http://localhost/computer_media/redraw.md" published_at: "2026-10-27T21:30:09+00:00" modified_at: "2026-10-27T21:30:09+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2022/04/20230809-041332.jpg" excerpt: "Routines that store pictures drawn in QDRAW in a compact form and redraw them from your own programs, such as adventures." post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "QL" slug: "ql" taxonomy: "post_tag" url: "http://localhost/tag/ql/" model: - name: "Sinclair QL" slug: "sinclair-ql" taxonomy: "model" url: "http://localhost/model/sinclair-ql/" indiv: - name: "A. Towers" slug: "a-towers" taxonomy: "indiv" url: "http://localhost/indiv/a-towers/" genre: - name: "Graphics" slug: "graphics" taxonomy: "genre" url: "http://localhost/type/graphics/" media_type: "Diskette" programmers: - name: "A. Towers" slug: "a-towers" taxonomy: "indiv" url: "http://localhost/indiv/a-towers/" download_url: "https://archive.org/download/timex-sinclair-software-archive/REDRAW%20%281985%29%28Towers%2C%20A.%29%28Sinclair%20QL%29%28UK%29%28Program%29.zip" mediadate: "1985" media_type_tags: "Graphics" license: false --- # REDRAW REDRAW stores pictures made with the QDRAW drawing program in a more compact form and redraws them from within your own programs, such as adventures. One call to `BASIC_DRAW` at line 11000 redraws a picture. You MERGE `ADD_TO_REDRAW_bas` with `REDRAW_bas` and then MERGE the result into your own program; `EXAMPLE_bas` shows how. The routines are credited to A. Towers, 1985. The download includes `REDRAW_doc`, a Quill document describing them. ### Potential Issues - `EXAMPLE_bas` loads a picture file, `PIC_dat`, which was lost from the disk image, so the example stops with “not found”. QDRAW itself also did not survive complete. It came from a QL owner’s floppy copies of QUANTA and IQLUG library material, imaged double-stepped so that only half of each disk survived; this file read back complete. The download holds the files exactly as recovered and a QL5A floppy image, *REDRAW.img*, with the same files and their QDOS headers. Mount the image as FLP1_ (drop it on the QLRun page, or use it as a floppy image in sQLux, QPC2 or Q-emuLator) and type `lrun flp1_EXAMPLE_bas`. In the image copies only, `MDV1_` reads `FLP1_` so the program finds its files on the floppy. Not tested beyond loading, because the example picture is missing. ## Source Code ``` 11000 DEFine PROCedure BASIC_DRAW 11010 ro=0:col=0:CLS 11020 REPeat drw 11030 sort=BSTORE(ro,col) 11050 SELect ON sort 11060 =76:ADVANCE:DLIN 11062 =77:ADVANCE 11064 adds=BSTORE(ro,col) 11066 ADVANCE:POKE_DUMMY 2 11070 =82:ADVANCE:DRECTANGLE 11080 =67:ADVANCE:DCIRCLE 11085 =80:ADVANCE:DPOINT 11090 =83:ADVANCE:DSHAPE 11095 =68:ADVANCE:DDRAW 11100 =REMAINDER :EXIT drw 11110 END SELect 11120 END REPeat drw 11130 FILL 0 11140 END DEFine BASIC_DRAW 11150 : 11160 DEFine PROCedure DLIN 11170 FOR n=0 TO 5 11180 SELect ON n 11185 =0:ic=BSTORE(ro,col) 11190 =1:b=BSTORE(ro,col) 11200 =2:dx=BSTORE(ro,col) 11210 =3:dy=BSTORE(ro,col) 11220 =4:x=BSTORE(ro,col) 11230 =5:y=BSTORE(ro,col) 11240 END SELect 11250 ADVANCE 11260 NEXT n 11265 INK ic 11270 IF b=0 THEN 11280 LINE dx,dy TO x,y 11290 ELSE 11300 ARC dx,dy TO x,y,b 11310 END IF 11320 END DEFine DLINE 11330 : 11340 DEFine PROCedure DCIRCLE 11350 FOR n=0 TO 6 11360 SELect ON n 11370 =0:ic=BSTORE(ro,col) 11380 =1:fi=BSTORE(ro,col) 11390 =2:dx=BSTORE(ro,col) 11400 =3:dy=BSTORE(ro,col) 11410 =4:size=BSTORE(ro,col) 11420 =5:ec=BSTORE(ro,col) 11430 =6:ang=BSTORE(ro,col) 11440 END SELect 11450 ADVANCE 11460 NEXT n 11470 FILL fi:INK ic 11480 CIRCLE dx,dy,size,ec,ang 11485 FILL 0 11490 END DEFine DCIRCLE 11500 : 11510 DEFine PROCedure DRECTANGLE 11520 FOR n=0 TO 5 11530 SELect ON n 11540 =0:ic=BSTORE(ro,col) 11550 =1:fi=BSTORE(ro,col) 11560 =2:dx=BSTORE(ro,col) 11570 =3:dy=BSTORE(ro,col) 11580 =4:x=BSTORE(ro,col) 11590 =5:y=BSTORE(ro,col) 11600 END SELect 11610 ADVANCE 11620 NEXT n 11630 INK ic 11632 IF fi=1 THEN 11640 FILL fi:LINE x,y TO x,dy 11650 LINE dx,y TO dx,dy 11652 ELSE 11653 LINE dx,dy TO dx,y TO x,y TO x,dy TO dx,dy 11654 END IF 11655 FILL 0 11660 END DEFine DRECTANGLE 11670 : 11680 DEFine PROCedure DSHAPE 11690 FOR n=0 TO 2 11700 SELect ON n=0:ic=BSTORE(ro,col) 11710 SELect ON n=1:fi=BSTORE(ro,col):FILL fi 11715 SELect ON n=2:sc=BSTORE(ro,col) 11720 ADVANCE 11730 NEXT n 11731 INK ic 11732 n=INT(256/sc):SCALE n,0,0 11740 c=BSTORE(ro,col):ADVANCE 11750 sx=BSTORE(ro,col):ADVANCE 11760 sy=BSTORE(ro,col):ADVANCE 11790 LINE sx,sy 11800 FOR n=3 TO c+1 STEP 2 11802 xx=BSTORE(ro,col):ADVANCE 11804 yy=BSTORE(ro,col):ADVANCE 11810 LINE TO xx,yy 11820 NEXT n 11830 LINE TO sx,sy:FILL 0 11837 SCALE 256,0,0 11840 END DEFine DSHAPE 11850 : 11860 DEFine PROCedure DDRAW 11861 px=BSTORE(ro,col):ADVANCE 11862 py=BSTORE(ro,col):ADVANCE 11863 ic=BSTORE(ro,col)-900:INK ic:ADVANCE 11864 LINE px,py:PENDOWN:TURNTO 0 11870 REPeat loop 11880 n=BSTORE(ro,col):ADVANCE 11890 SELect ON n 11900 =900 TO 1155:INK n-900 11910 =500 TO 859:TURNTO n-500 11920 =880:EXIT loop 11930 =REMAINDER :MOVE n 11940 END SELect 11950 END REPeat loop 11955 PENUP 11960 END DEFine DDRAW 11970 : 11980 DEFine PROCedure DPOINT 11990 ic=BSTORE(ro,col):ADVANCE:INK ic 12000 x=BSTORE(ro,col):ADVANCE 12010 y=BSTORE(ro,col):ADVANCE 12020 POINT x,y:POINT x,y-1 12030 END DEFine DPOINT ```