82 lines
2.9 KiB
Plaintext
82 lines
2.9 KiB
Plaintext
SYS "LoadLibrary", "URLMON.DLL" TO U%
|
|
IF U% == 0 ERROR 100, "DLL not available in your OS"
|
|
SYS "GetProcAddress", U%, "URLDownloadToFileA" TO U%
|
|
|
|
Q$=CHR$34 : REM The quote
|
|
BlkSize%=256 * 1024 : REM 256k must be enough
|
|
DIM Blk% BlkSize% - 1 : REM Reserve memory block to load data into
|
|
|
|
PROCFetchData("Programming_Tasks")
|
|
|
|
REM Count number of tasks and declare and populate Task$() array.
|
|
P%=Blk%
|
|
REPEAT
|
|
I%=INSTR($$P%, "title")
|
|
IF I% Tasks%+=1 : P%+=I%
|
|
UNTIL I% == 0
|
|
DIM Task$(Tasks%-1)
|
|
P%=Blk%
|
|
FOR I%=0 TO Tasks% - 1
|
|
Task$(I%)=FNValue(P%, "title")
|
|
NEXT
|
|
|
|
PROCShowUnimplemented("BBC_BASIC")
|
|
PROCShowUnimplemented("C++")
|
|
END
|
|
|
|
REM -------------------------------------------------------------------------
|
|
REM Compare each task title against loaded language data in memory.
|
|
DEF PROCShowUnimplemented(language$)
|
|
LOCAL i%, j%, mem%, n%
|
|
|
|
PROCFetchData(language$)
|
|
mem%=Blk%
|
|
PRINT "Unimplemented tasks for the '" language$ "' programming language:"
|
|
FOR i%=0 TO Tasks% - 1
|
|
j%=INSTR($$mem%, Task$(i%))
|
|
IF j% THEN
|
|
mem%+=j%
|
|
ELSE
|
|
n%+=1
|
|
PRINT " -" Task$(i%)
|
|
ENDIF
|
|
NEXT
|
|
PRINT "Total is: ";n% '
|
|
ENDPROC
|
|
|
|
REM -------------------------------------------------------------------------
|
|
REM Stitch the pages for this category together in the memory block.
|
|
DEF PROCFetchData(category$)
|
|
LOCAL mem%, continue$, e%, f%, tempfile$, url$
|
|
|
|
tempfile$=@tmp$ + "result.json"
|
|
mem%=Blk%
|
|
REPEAT
|
|
url$="http://www.rosettacode.org/w/api.php?" +\
|
|
\ "action=query&list=categorymembers&cmtitle=Category:" + category$ +\
|
|
\ "&cmlimit=500&format=json&cmcontinue=" + continue$
|
|
|
|
SYS U%, 0, url$, tempfile$, 0, 0 TO e% : REM Get one page to a file
|
|
IF e% ERROR 100, "Can't get data from Rosetta API"
|
|
|
|
f%=OPENINtempfile$ : e%=EXT#f% : CLOSE#f% : REM Get file size
|
|
IF mem% - Blk% + e% > BlkSize% ERROR 100, "Insufficient memory to load data"
|
|
OSCLI "LOAD " + tempfile$ + " " + STR$~mem% : REM Append to previous
|
|
e%=mem% + e%
|
|
?e%=0 : REM Terminating 0x00
|
|
continue$=FNValue(mem%, "cmcontinue") : REM Loaded page contains this name?
|
|
mem%=e% : REM Advance memory pointer
|
|
UNTIL continue$ == ""
|
|
ENDPROC
|
|
|
|
REM -------------------------------------------------------------------------
|
|
REM Retrieve value for a JSON name from address p% and advance p% afterwards.
|
|
DEF FNValue(RETURN p%, name$)
|
|
LOCAL s%
|
|
|
|
name$=Q$ + name$ + Q$ + ":"
|
|
s%=INSTR($$p%, name$)
|
|
IF s% == 0 THEN =""
|
|
p%+=s% + LENname$
|
|
=LEFT$($$p%, INSTR($$p%, Q$) - 1)
|