}* MAKEHTM.TXT MAKES A WARE NET CATALOGUE }* }* THROUGHOUT, "WARE" MAY ALSO MEAN "SERVICE". }* }* AND WHEN IT COMES TO PEOPLE AND COMPANIES BEING }* }* GENEROUS, IT IS NOT NECESSARY TO PUT A PRICE }* }* TO ALL PRODUCTS/WARES/SERVICES LISTED HERE!!! }* }* THIS PROGRAM IS OVERWHELMINGLY KIND TO THE }* }* INTERACTOR, AND SO YOU CAN FIND MUCH USEFUL AND }* }* ALSO TUTORIAL ELEMENTS HERE, CLIP & USE & MISUSE.}* }* TRUST THE LANGUAGE. THE LISA GJ2 FIC3 LANGUAGE, }* }* ALSO CALLED (WHEN THE EXPANDED LIGHT3D VERSION }* }* ARRIVES) GAMEV, IS TRUSTWORTHY. WHEN SOMETHING }* }* DOESN'T WORK OUT, SMILE, LOOK AROUND, KNOWING }* }* THAT, AS A RULE OF THUMB, THE MORE DRASTIC THE }* }* ERROR IN THE PROGRAM BEHAVIOUR SEEMS, THE MORE }* }* EASY, OBVIOUS AND TRIVIAL IT IS TO FIX IT, WHEN }* }* IT IS SEEN. BUT TO CATCH IT, DON'T DESPAIR, BUT }* }* BE OPTIMISTIC, DRINK COFFEE, ENTERTAINING A }* }* SMILE NO MATTER WHAT HAPPENS IN LIFE AND BEYOND. }* }* HINT: SWITCH BETWEEN XXXLT, XXX AND B9 AS }* }* EDITORS. DON'T SWEAR. TAKE NAPS. VARY MUSIC. }* }* THE PROFESSIONAL PROGRAMMER IS THE TRUE AMATEUR }* }* WHO LOVES BEAUTY AND ORDER AND WHOLENESS AND }* }* HAS A KEEN EYE TO DETECT WHAT IS TO BE CLEARED }* }* UP ON AN ESTHETICAL LEVEL, AND THUS ALSO CLEARS }* }* UP PROGRAMMING MISTAKES. }* }* IF ANY UNAUTHORISED PART OF RAM IS ACCESSED, }* }* PC MAY STOP; PUT THEN IN STEP BY STEP MESSAGE }* }* BEFORE AND AFTER SUSPECTED BAD CODE WITH A-KEY }* }* AND CLS TO GO, CLICK BY CLICK, TOWARDS LOCATING }* }* THE POINT. FIND THE POINT, KILL THE WRONGNESS. }* }* (WAS THE # CORRECTLY INITIALISED? WAS THE N1 OR }* }* N5 CORRECTLY SET? OR DID YOU COPY/PASTE TOO }* }* FAST? GET THE FRESH LOOK, DON'T ASSUME.) }* }* MAKE IT RIGHT, AND THE YOUNG PROGRAMMER ALWAYS }* }* MAKES IT SEXY. }* }* GOOD LUCK WITH PROGRAMMING ALWAYS!!!!! }* }* MOST RECENT UPDATE: }* }* 1::A::2012::3::15. WRITTEN BY ARISTO }* }* TACOMA WITH LISA, ATHINA & HELENA SALINGER }* }* (& ALL GROUPWORKS SIGNED A.T. OR ATwLAH) }* }* WHEN YOU PROGRAM IN LISA GJ2 FIC3 PROGRAMMING }* }* LANGUAGE, THEN YOU ARE NATURALLY FREE TO COPY }* }* AND PASTE AND MODIFY ANYTHING YOU LIKE FROM THE }* }* STANDARD OPEN SOURCE PROGRAMS WHICH FORM PART }* }* OF THE LISA GJ2 FIC3 PROGRAMMING LANGUAGE FIRTH }* }* ENTERPRISE -- EVEN IF WE SAY, AS ALWAYS, }* }* THAT IT IS LICENSED ACCORDING TO THE }* }* OPEN SOURCE yoga4d.org/cfdl.txt LICENSE. HERE, }* }* TONS OF VERY EASY TO USE SMALL ALGORITHMS }* }* THAT YOU CAN COPY AND PASTE TO MAKE OTHER }* }* PROGRAMS THAT HAS DATABASES AND SUCH IN LISA }* }* GJ2 FIC3, FOR THEY ARE V E R Y GENERAL. }* }* YOU DON'T HAVE TO UNDERSTAND THE FUNCTION FULLY }* }* IN HOW IT WORKS TO COPY IT AND PASTE IT IN THE }* }* BEGINNING OF YOUR PROGRAM, AS LONG AS YOU HANDLE }* }* THE INPUT TO IT, AND THE OUTPUT FROM IT, WELL. }* }* SO WHAT IS M A K E H T M ALL ABOUT? }* }* THIS PROGRAM "HOLDS THE PERSON IN THE HAND" IN }* }* VERY FOOLPROOF MENU-GUIDED UPDATES OF A WARE }* }* CATALOGUE, A FIRST-HAND DATABASE, FROM WHICH }* }* NET .HTM PAGES ARE THEN AUTOMATICALLY GENERATED. }* }* ABSOLUTELY NO PROGRAMMING KNOWLEDGE IS REQUIRED }* }* IN ORDER FOR A PROFESSIONAL PERSON TO REGULARLY }* }* UPDATE A NET CATALOGUE. BY SUITABLE EXTRA }* }* PROGRAMMING, DEPENDING ON HOW INTERNET WORKS }* }* AS FOR MONEY TRANSFERS AND JAVASCRIPT AND SUCH }* }* IN THE PRESENT SOCIETY, A PROGRAMMER CAN EXTEND }* }* THIS SO THAT IT IS NOT JUST A NET CATALOGUE BUT }* }* ALSO A FULL-FLEDGED NETSHOP WITH ORDER }* }* PLACEMENTS AND, WHERE FITTING, MONEY TRANSFERS }* }* BY MEANS OF CORRECT ONLINE BEHAVIOUR. THE }* }* APPROACH SUGGESTED IS BY MEANS OF A NET BANK }* }* ACCOUNT WHICH IS NOT FOUNDED ON ANY CREDIT CARD }* }* OR LOAN IDEA AT ALL. SO FIND A WIDELY USED }* }* DEBET CARD, AND IN ONE WAY OR ANOTHER LINK TO }* }* THIS AS PART OF THE GENERATED .HTM. }* }* FOR B E G I N N E R S DON'T BE OVERWHELMED }* }* BY PROGRAM SIZE. PROGRAMS ARE OFTEN MADE BY }* }* COPYING AND PASTING STUFF, MODIFYING HERE AND }* }* THERE. THINGS WHICH LOOK COMPLEX OFTEN HAS A }* }* BIT OF EXTRA HOURS OF FOCUSSED WORK ON JUST }* }* THOSE LINES, IGNORING EVERYTHING ELSE. WHEN YOU }* }* WANT TO LEARN ABOUT A PROGRAM, READ IT BOTTOM-UP }* }* WHILE YOU ALSO WORK ON GETTING AN OVERVIEW OVER }* }* HOW DATA IS ORGANISED. THE BOTTOM OF THE PROGRAM }* }* HAS OF COURSE THE HIGHEST LEVELS WHICH ACT AS }* }* MAP OVER ALL THE REST OF THE PROGRAM, AND THESE }* }* OFTEN HAS A GOOD BIT OF ENGLISH NATURAL LANGUAGE }* }* IN THEM. JUST LOOK AT THIS, WHICH IS NOT VERY }* }* FAR FROM THE BOTTOM OF THIS CODE: }* }* (LET MAKEHTM-ACTION-3 BE (( )) }* }* (( }* }* (( GOLABEL1: )) }* }* (( VIEW A WARE, OPTIONALLY MODIFY PRICES OR ITS PAGE# AT NET: ; }* }* 100 ; 100 => B9-POP )) }* }* (( PICK-A-WARE )) }* }* (( JUST-FOUND-WARENUM >>> ; -1 => EQN = EXIT === )) }* }* (( VIEW-PRESENT-WARE-RECORD )) }* }* (( OPTION-TO-MODIFY-PRICES-OR-PAGE-NUM )) }* }* (( CLS )) }* }* (( GOUP1 )) }* }* )) OK) }* }* SEE WHAT WE MEAN? }* }* AND YOU CAN OFTEN DO MEANINGFUL CHANGES TO A }* }* PROGRAM MEANT TO BE CHANGED, LIKE THIS, WITHOUT }* }* HAVING TO WORK OUT VERY MUCH OF THE CODE AT ALL! }* }* FOR INSTANCE, IF YOU KNOW A LITTLE HTML, THEN }* }* YOU CAN RATHER INSTANTLY BEGIN TO MODIFY JUST }* }* THE HTML-GENERATING LINES IN THIS CODE TO MAKE }* }* THE LAYOUT FOR YOUR COMPANY, OR A COMPANY THAT }* }* YOU ARE A PAID CONSULTANT FOR. }* }* MAKEHTM.TXT CONTAINS A SIGNIFICANT NUMBER OF }* }* EXTRACTABLE PROGRAMMING SNIPPETS IN ORDER TO }* }* MAKE FILE STORING AND RETRIEVAL VERY ROBUST AND }* }* DEPENDABLE, AND HOW TO MAKE INTERACTION WITH }* }* THE PERSON USING THE PROGRAM SMOOTH AND SAFE. }* }* FOR THESE REASONS, THE MAKEHTM.TXT IS INCLUDED }* }* AS A STANDARD PROGRAM IN ALL F3 RELEASES, }* }* SO THAT THE LISA GJ2 FIC3 PROGRAMMING LANGUAGE }* }* (ALSO CALLED THE F3V PROGRAMMING LANGUAGE) }* }* WITH THE (RELATIVE TO THIS PROGRAM) }* }* UPCOMING EXTENSION WITH OPTIMALISED LIGHT3D }* }* CAN BE STARTED WITH THE COMMAND GAMEV, RUNNING }* }* AS ALWAYS IN THE FIRTH LISA_CD OPERATING }* }* APPROACH FOR COMPUTERS. }* }* SEE NOTES ON GAMEV.EXE WHEN IT ARRIVES AND }* }* PREFER TO USE IT FOR ALL FUTURE STARTUP OF }* }* LISA GJ2 FIC3, OR THE F3V (OR JUST F3) LANGUAGE! }* }* THE NOTION OF STARTING AN ALSO PROFESSIONAL }* }* COMPUTER PROGRAMMING LANGUAGE WITH A PHRASE }* }* CONTAINING THE WORD 'GAME' IS SIMILAR TO THE }* }* USE OF THE SAME WORD 'GAME' IN THE NAME OF }* }* SELF-OWNED COMPANY BEHIND YOGA6DORG MAXIDOS }* }* FIRTH AND SEARCH ENGINE, NAMELY, 'YOGA4D VON }* }* REUSCH GAMEMAKERS'. IT IS ALSO SOMEWHAT SIMILAR }* }* TO OUR FOCUS ON THE WORDS 'DANCE' AND 'DANCING' }* }* IN A RANGE OF AREAS FROM PHYSICS TO }* }* INTERACTIVITY ECONOMY -- NAMELY, TO REMIND AND }* }* REITERATE THAT THE PLAYFUL, FLEXIBLE MIND AND }* }* BODILY ATTITUDE, ALSO ASSOCIATED WITH THE GAME- }* }* LIKE MIND (VIEWING LIFE ALSO AS GAME), IS }* }* PSYCHOLOGICALLY, SPIRITUALLY AND RELIGIOUSLY }* }* PART OF THE FOUNDATION ALSO OF PROFESSIONAL }* }* USE OF COMPUTERS, OF ECONOMY, OF SCIENCE ETC. }* }* THESE REMINDERS ENHANCE FIRST-HANDEDNESS, }* }* AND ACT TO ENLIVEN OUR ENORMOUSLY BROAD }* }* AND DEEP AWARENESS OF LIFE AND DEATH AS A WHOLE, }* }* SO THAT WE DON'T GET STUCK IN TECHNICALITIES. }* }* IN THE AREA OF ACTUALLY MAKING 3D (LIGHT3D) }* }* GAMES, WE CAN FLIRT WITH SIMULATION BUT NOT }* }* ENTERING SIMULATION BY MAINTAINING THE SENSE }* }* THAT THE ART AS DISPLAYED BY THE COMPUTER, }* }* WHETHER IN MOVING LIGHT 3D OR IN SKETCH DRAWINGS }* }* OR IN PHOTO MUST NOT HAVE FEATURES TO 'COMPETE' }* }* WITH REALITY. MORE ABOUT THIS ELSEWHERE. }* }* COPYRIGHT AND REDISTRIBUTION ACCORDING TO }* }* OUR GENEROUS LICENSE yoga4d.org/cfdl.txt }* }* THIS PROGRAM IS ALSO AVAILABLE AT }* }* www.norskesites.org/fic3/fic3inf3.htm AND IT'S }* }* WRITTEN IN ORDER TO BE OF PRACTICAL REAL }* }* USE AND OBVIOUSLY NOT MERELY AS EDUCATION, }* }* WHERE THOSE WHO UPDATE THE WARE-DATABASE ARE }* }* NOT HAVING TO LOOK INTO TECHNICALITIES AT ALL }* }* BUT CAN FOCUS ON DOING GOOD BUSINESS, }* }* PROFESSIONALLY. }* }* IT SHOULD BE RELATIVELY EASY TO EXTEND AND }* }* MODIFY SO AS TO ENABLE ALSO AN ON-LINE NETSHOP. }* }* AT SOME TIME A SERVICE CALLED GLOWF3NET WILL }* }* PROVIDE SOMETHING OF THIS, FREE, TO REGISTERED }* }* STAMASH EDUCTION CENTERS STUDENTS, AS A NATURAL }* }* EXTENSION OF THIS PROGRAM TOWARDS DEBET CARD }* }* PAYMENT BY CUSTOMER TO A SELLER OFFERING THIS. }* }* NOTE THAT SOME CHANGES OF SOME VARIABLES (E.G. }* }* NUMBER OF PAGES MAX IN HTM WARE CATALOGUE IF YOU }* }* SET IT MUCH HIGHER, SO THE AMOUNT OF DIGITS }* }* WILL NECESSITATE FEWER LETTERS IN 8-SIZE .HTM }* }* FILENAME) REQUIRES LOOKING AT HOW THESE ARE }* }* USED IN THE PROGRAM AND IN APPROPRIATE CASES }* }* ADJUSTMENTS MUST BE MADE IN THE PROGRAM. }* }* INSTALLING THIS PROGRAM FOR THE FIRST TIME: }* }* START FIRTH. BEFORE DOING :MAKEHTM IN INSIDE }* }* F3V THE FIRST TIME, MAKE THE DATA FOLDER. THIS }* }* FOLDER CAN BE EMPTY ON FIRST RUN. YOU CAN MAKE }* }* IT IN FIRTH BY TYPING HM TO GO TO THE }* }* c:\boehm\boehmian DIRECTORY THEN TYPE }* }* MKDIR MHWARES }* }* IF YOU LIKE, YOU CAN PUT THE MAKEHTM.TXT FILE }* }* INTO A NEW FILE WHICH HAS FIC3VIBE.TXT AS ITS }* }* BEGINNING, SO THAT YOU CAN START IT UP }* }* DIRECTLY BY A BATCH-FILE THAT HAS CALLS LIKE }* }* THIS (ASSUMING NAME IS FIC3MHW.TXT FOR EXTENDED }* }* FIC3VIBE), AND THAT AUTOMATICALLY CLEANSES THEN }* }* COPIES ALL THE NEW WORKS UP TO c:\allwares }* }* WHERE FILES CAN EASILY BE FETCHED WITH FTP. }* }* DO A MKDIR ALLWARES AFTER COMMAND TOP }* }* BEFORE RUNNING SUCH A .BAT FILE LIKE THIS: }* }* DEL C:\ALLWARES\*.HTM }* }* DEL C:\ALLWARES\*.TXT }* }* C: }* }* CD \BOEHM\BOEHMIAN }* }* FIC3 FIC3MHW }* }* COPY MHWARES\*.HTM \ALLWARES\ }* }* COPY MHWARES\*.TXT \ALLWARES\ }* }* FTPSRV }* }* OR, IF YOU USE GAMEV, YOU WOULD USE THE GAMEV }* }* FOLDER, AND YOU WOULDN'T HAVE TO MAKE THAT }* }* EXTENDED FIC3MHW FOR GAMEV DOES THINGS FASTER }* }* IN THAT MORE OF FIC3 IS PRECOMPILED AND }* }* SUCH. }* }* NOTE THAT THE BUNDLE OF .TXT FILES ARE, IN FACT, }* }* DATA FILES CONTAINING THE DATABASE, AND READABLE }* }* PRIMARELY FOR AN F3 PROGRAM. THE .HTMs SHOULD BE }* }* VIEWABLE IN ANY BROWSER GIVEN THAT THE IMAGE }* }* FILES ARE CONTAINED IN SUBFOLDER warepic }* }* RELATIVE TO WHERE YOU PUT THE .HTM PAGES }* }* ON YOUR WEBSITE. ENSURE (UPPER)CASE RIGHT. }* }* NOTE THAT FILES CONTAINING ONLY TEXT LINES ARE }* }* SNAPPIER STORED (AND RETRIEVED) WHEN SAVING THEM }* }* AS PLAIN TEXT FILES (WITH PM2FILE) INSTEAD OF }* }* SAVING THEM AS MATRICES OF NUMBERS WITH THE }* }* (PM2FILENUM) FUNCTION. BUT IN SAVING AS TEXT }* }* FILE, UNUSED LINES IN A RAM-PM MATRIX DO NOT }* }* APPEAR AT ALL, AND SO LINE NUMBERING MAY BE }* }* AFFECTED WHEN SOME LINES ARE LEFT UNTOUCHED. }* }* THOSE FILES SAVED AS TEXT-FILES HAVE, IN THIS }* }* CASE THEREFORE (SINCE LINENUMBERS HERE MATTER), }* }* A CALL TO HYPHEN-OR-TXT WHICH SOLVES THIS }* }* BY CONVERTING A ZERO-LENGTH LINE TO A HYPHEN _. }* }* NOTE THAT MAKING A LONGER FILE OUT OF FIC3VIBE }* }* IS SOMETHING THE MERGE COMMAND IN FIRTH CAN BE }* }* USED FOR, SEE THE OVERVIEW OVER LISACODE IN U }* }* MENU. THERE ARE SOME ELEMENTS OF FIRTH THAT }* }* ONE MUST GET USED TO, AS A RESULT OF LAST-MINUTE }* }* CHANGES BEFORE RELEASE, SUCH AS RENAMING OF }* }* 'SYDNEY' TO 'SEVILLE', SUCH AS NOT NEARLY ALL }* }* ITS PROGRAMS WORKING IN ALL CONTEXTS; STILL }* }* IT IS ENTIRELY STABLE AND ROBUST IN ITS OWN WAYS }* }* AND SO THE PREFERRED GROUND FOR ALL LISA GJ2 }* }* FIC3 PROGRAMMING IN ALL FUTURE. }* }* A NUMBER OF WORK-AROUNDS MUST BE ASSUMED FOR }* }* CONTINOUS FIRTH USE. HOWEVER WITH THE APPROACH }* }* OF FIRTH -- RATHER A NETWORK OF PROGRAMS -- }* }* THERE IS A ROBUSTNESS NOT GIVEN TO ANY GRAPHICAL-}* }* ONLY PLATFORM. }* }* TO MAKE THIS PROGRAM EASIER TO MODIFY, WE WILL }* }* INDICATE HOW THE FIVE MAIN MATRICES / FILES ARE }* }* BEING USED, AS NOTES THAT MAKE MOST SENSE TO }* }* THOSE WHO HAVE ALREADY LOOKED RATHER MUCH INTO }* }* THIS PROGRAM, WHICH WE INCLUDE ALSO FOR ITS }* }* TUTORIAL ASPECTS IN THE STANDARD LISA GJ2 FIC3 }* }* DOSBOXEX FROM NOW ON. THIS INCLUDES THE ORIGINAL }* }* DOSBOX74.EXE FOR VARIATION PURPOSES ALTHOUGH THE }* }* ASSUMPTION IS USE OF FIRTH AND SO THIS IS JUST }* }* KEPT AS IS UNCHANGED. THE VIRTUALBOX IS UPDATED }* }* BY THE GNU GPL OPEN SOURCE MAINTAINERS OF THE }* }* VIRTUALBOX, AT VIRTUALBOX.ORG, FOR ANY PC. }* }* SO HERE ARE THE MATRICES, THOUGH THE NUMBERS }* }* DEFINING THEIR DIMENSIONS MIGHT BE CHANGED IN }* }* SOME VARIATIONS OF THIS PROGRAM: }* }* WARE-DATA 3 & 3 LINES AT A TIME IS ONE }* }* RECORD. THE FIRST LINE HAS SOME QUANTITY }* }* VARIABLES. THE USE OF GET-.. AND PUT-.. IS SUCH }* }* THAT THESE SIGNIFY FUNCTIONS, NOT VARIABLES, }* }* SO THAT IT IS EASY TO SEE THAT >>> IS NOT TO BE }* }* PUT AFTER A CALL TO GET-.. IN PARTICULAR, WE }* }* HAVE SOME GET- AND PUT- THAT REFER TO FIRST LINE }* }* OF WARE-DATA. THE IDEA OF 'TRIREC' -- SHORT FOR }* }* 'TRIPLE RECORD' AND 'MATRPOS' -- SHORT FOR }* }* 'MATRIX POSITION IN TERMS OF ROW NUMBER' -- IS }* }* USED IN NAMING A COUPLE OF FUNCTIONS HERE. }* }* FOR EACH WARE RECORD, THE FIRST LINE (OR ROW) }* }* HAS PRICE DATA, QUANTITY DATA, AND SO FORTH. }* }* THE SECOND AND THIRD LINE HAS IMAGE FILE NAMES. }* }* WARE-DATA IS STORED BY PM2FILENUM IN DATA.TXT. }* }* WARE-DATA HAS 20 COLUMNS (LINEWIDTH = 20). }* }* WARE-DESC HAS 35 IN LINELENGTH AND THE }* }* ASSUMPTION OF THIS TEXT FILE, STORED WITH }* }* PM2FILE, IS THAT THE LINENUMBERS MATCHES THE }* }* ALL-IMPORTANT WARE-DATA EXACTLY, 3 AND 3. }* }* THIS HAS THE DESCRIPTION OF THE WARE. UNUSED }* }* LINES ARE SET TO HYPHEN MEANING THAT ONE HYPHEN }* }* IS CONVERTED TO NOTHING IF ENCOUNTERED DURING THE}* }* READING OUT OF A WARE-DESCRIPTION IN GENERATING }* }* .HTM FILES. HYPHEN ENSURES THAT EMPTY LINES ARE }* }* NOT COMPRESSED AWAY UPSETTING THE MATCHING. }* }* WHEN A WARE IS DELETED FROM THE WARE-DATA, }* }* COMPRESSION HAPPENS, ALSO OF WARE-DESC. }* }* WITH A VERY MUCH LARGER DATABASE QUANTITY THAN }* }* WHAT IS HERE ASSUMED, ONE WOULD MAINTAIN STH }* }* SUCH AS A QSORT2 SORTED INDEX AND DO BINARY }* }* SEARCH ON IT AND MAINTAIN A 'LIST OF DELETED' }* }* RECORDS INSTEAD OF COMPRESSING, TO FACILITATE }* }* SPEED. BUT ALL THIS IS UNNECESSARY HERE. FOR }* }* SORTING METHODS, SEE ALSO LIGHT3D.TXT. }* }* WARE-DESC IS STORED IN DESC.TXT. }* }* WARE-CAT-HEADERS HAS 70 IN LINELENGTH AND }* }* LIKE THE FORMER IS STORED AS TEXT FILE, HEAD.TXT.}* }* THIS HAS ONE LINE PR PAGE. MAX-QTY-PAGES IS SET }* }* TO 33 AND SO THIS FILE HAS MAX THAT #LINESR. AN }* }* UNUSED LINE IS SET TO HYPHEN AS IN OTHER TEXT }* }* FILES HERE, TO MAINTAIN STRICT NUMBERING. }* }* WARE-CATALOGUE IS PUT IN PAGE.TXT AS A }* }* MATRIX (PM2FILENUM) WITH 101 IN LINELENGTH, }* }* THE FIRST NUMBER IS QUANTITY IN THIS PAGE. }* }* THE NEXT NUMBERS ARE THE WARE NUMBERS IN THIS }* }* PAGE, WITH ONE MATRIX ROW FOR EACH .HTM PAGE TO }* }* BE MADE. NOTE THAT ON DELETION OF A PAGE NUMBER }* }* (SEE ROUTINE COMPRESS- FOR THIS) FROM SUCH A }* }* ROW THE QUANTITY, STORED IN FIRST COLUMN, }* }* IS REDUCED BY ONE WITHOUT NECESSARILY ANY ZERO }* }* BEING PUT INTO THE ROW AT ITS COMPLETION. SO }* }* THERE CAN BE SOME EXTRA NUMBERS HERE BUT THESE }* }* DO NOT AT ALL CONFUSE THE PROGRAM, NOR TAKE UP }* }* ANY TOO MUCH SPACE IN RAM NOR ON DISK, SO WE }* }* LET THEM BE THERE. IN ANY CASE THEY WILL GO }* }* BACK AND FORTH AS NEW WARES ARE INSERTED INTO }* }* PAGE AGAIN. MAX-QTY-WARES-PR-PAGE IS A }* }* VARIABLE SET TO 99 SO LENGTH IS A LITTLE MORE. }* }* NOTE THAT ANY ROUTINE DEALING WITH THIS MATRIX }* }* ADDS 3 TO THE PAGE NUMBER TO GET THE RIGHT ROW#. }* }* THIS IS BECAUSE WE SAW IT FIT TO PUT IN WHICH }* }* OF THE CURRENCY CHOICES THE INTERACTOR WITH THIS }* }* WARE CATALOGUE DATABASE PROGRAM WANTS TO HAVE -- }* }* 1, 2 OR 3 CURRENCIES -- IN THE FIRST THREE LINES.}* }* THIS IS PERHAPS A BIT LUXURIOUS WAY OF STORING }* }* THE COUPLE OF LETTERS INVOLVED BUT AS WE HAVE }* }* MEGABYTES TO WALLOW IN, RICHLY, SOME HUNDREDS OF }* }* BYTES FOR THIS WE CERTAINLY CAN AFFORD. }* }* FINALLY, THE GENERATED-HTM IS JUST A }* }* TEXT-ORIENTED THINGY WRITTEN TO LINE BY LINE }* }* WITH OUR FUNCTION TOCAT AND PUT TO A .HTM }* }* FILE EACH TIME IT IS FULL. }* }* THE NEXT APPEARS AS PART OF THE TOP TEXT OF }* }* THE WARE CATALOGUE PAGES, AND ON THE MAIN MENU, }* }* AND IS ADJUSTED AT THE COMPLETING LINE OF THIS }* }* PROGRAM: }* (( VARSTRING THIS-PROGRAM-TAILORFITTED-TO )) (( VARSTRING MH-IMAGE-SUFFIX }.jpg} ; MH-IMAGE-SUFFIX => >VARSTR )) (( VARSTRING RECENTLY-SOUGHT-VARETEXT }} ; RECENTLY-SOUGHT-VARETEXT => >VARSTR )) (( VARSTRING HTM-IMAGE-SUBFOLDER }warepic/} ; HTM-IMAGE-SUBFOLDER => >VARSTR )) (( VARSTRING WARE-MAIN-FOLDER }MHWARES/} ; WARE-MAIN-FOLDER => >VARSTR )) (( VARSTRING MH-CURRENCY-1 )) (( VARSTRING MH-CURRENCY-2 )) (( VARSTRING MH-CURRENCY-3 )) ((DATA MIN-WARENUM 100000 MIN-WARENUM < SETBASIS )) ((DATA JUST-OPENED-RECT JUST-OPENED-RECT => SETBASIS )) ((DATA ANY-MHDB-CHANGES-YET ANY-MHDB-CHANGES-YET => SETBASIS )) ((DATA WARE-DATA 20 ; MAX-QTY-WARES >>> ; 5 => ADD ; 3 => MUL => RAM-PM WARE-DATA <>> ; 5 => ADD ; 3 => MUL => RAM-PM WARE-DESC <>> => INC ; MAX-QTY-PAGES >>> ; 5 => ADD => RAM-PM WARE-CATALOGUE <>> ; 5 => ADD => RAM-PM WARE-CAT-HEADERS <>> ; 8 => MUL ; 30 => ADD => RAM-PM GENERATED-HTM < SETDANCE )) (( VARSTRING MH-WARENUM )) (( VARSTRING MH-DESC1 )) (( VARSTRING MH-DESC2 )) (( VARSTRING MH-DESC3 )) (( VARSTRING MH-PRICE )) (( VARSTRING MH-PRICE-TYPE2 )) (( VARSTRING MH-PRICE-TYPE3 )) (( VARSTRING MH-DELIVERY )) (( VARSTRING MH-DELIVERY-TYPE2 )) (( VARSTRING MH-DELIVERY-TYPE3 )) (( VARSTRING MH-SHOW-IN-PAGENUM )) (( VARSTRING MH-POS-IN-PAGE )) (( VARSTRING MH-TH-IMAGE )) (( VARSTRING MH-IMAGE )) (( VARSTRING MH-TH-IMAGE-IMGSRC-EXPANDED )) (( VARSTRING MH-IMAGE-IMGSRC-EXPANDED )) ((DATA DOES-HAVE-TH-IMAGE )) ((DATA DOES-HAVE-MAIN-IMAGE )) (( VARSTRING MH-PUBLIC-QTY-WARES )) (( VARSTRING MH-PRIVATE-QTY-WARES )) (( LOOKSTK )) (LET TRIRECNUM>MATRPOS BE (( >N11 )) (( (( N11 ; 3 => MUL => INC => => )) )) OK) (LET MATRPOS>TRIRECNUM BE (( >N11 )) (( (( N11 => DEC ; 3 => DIV => => )) )) OK) (LET MH-SHOULD-SAVE BE (( )) (( (( ANY-MHDB-CHANGES-YET => SETDANCE )) )) OK) (LET FLIP-COLORS BE (( )) (( (( B9-FONT-CURRENT-COLOR >>> ; )) (( ; B9-POP-BG >>> B9-FONT-CURRENT-COLOR < RECTFILL )) )) OK) (LET GET-CURRENCY-TEXT BE (( >N1 )) (( (( }MH-CURRENCY-} ; N1 => CONCAT => ? => H => VARSTR> => => )) )) OK) (LET CHK-IF-NOTHING-BUT-DIGITS-IN-THIS BE (( ; )) (( (( ; => LENGTH => ISBASIS = ; RM ; YES => => === )) (( ; => LENGTH (COUNT (( ; N1 => CHN ; 48 ; 57 => WITH => NOT (MATCHED (( ; RM RMS RMS )) (( NO => => ; EXIT )) MATCHED) ; )) COUNTUP) ; )) (( ; RM )) (( YES => => )) )) OK) (LET CHK-IF-GOOD-WARENUM BE (( ; )) (( (( ; => ONE => CHK-IF-NOTHING-BUT-DIGITS-IN-THIS => SWITCH ; MIN-WARENUM >>> ; MAX-WARENUM >>> => WITH => AND => => )) )) OK) (LET EMPTY-THIS-ROW BE (( & >N1 )) (( (( N1 ; # => %GET => %EMPTY )) (( && )) )) OK) (LET ANIHILATE-THESE-THREE BE (( & >N2 >N1 )) (( (( N1 => ISBASIS = && ; EXIT === )) (( N1 ; N2 => INTGREATER = && ; EXIT === )) (( N1 => TRIRECNUM>MATRPOS => >N3 )) (( N2 => TRIRECNUM>MATRPOS => >N4 )) (( N3 ; # => EMPTY-THIS-ROW )) (( N3 => INC ; # => EMPTY-THIS-ROW )) (( N3 => INC => INC ; # => EMPTY-THIS-ROW )) (( N2 ; N1 => EQN = && ; EXIT === )) (( N3 ; # => %GET => >N9 )) (( N3 => INC ; # => %GET => >N10 )) (( N3 => INC => INC ; # => %GET => >N11 )) (( N2 ; N1 => SUB (COUNT (( N1 ; N3 => ADD => DEC => TRIRECNUM>MATRPOS => >N5 )) (( N5 ; 3 => ADD ; # => %GET N5 ; # => %PUT )) (( N5 ; 4 => ADD ; # => %GET N5 => INC ; # => %PUT )) (( N5 ; 5 => ADD ; # => %GET N5 => INC => INC ; # => %PUT )) COUNTUP) )) (( N9 ; N4 ; # => %PUT )) (( N10 ; N4 => INC ; # => %PUT )) (( N11 ; N4 => INC => INC ; # => %PUT )) (( && )) )) OK) (LET FIND-POSNUM-IN-ROW-WITH-COUNT BE (( & >N2 >N1 )) (( (( 1 ; N2 ; # => GM => >N10 )) (( N10 => ISBASIS = && ; -1 => => ; EXIT === )) (( N2 ; # => %GET => & )) (( N10 (COUNT (( N1 => INC ; # => %GET ; N3 => EQN (MATCHED (( N1 => => )) (( RMS RMS && && )) (( EXIT )) MATCHED) )) COUNTUP) )) (( -1 => => )) (( && && )) )) OK) (LET NEW-TEXT-TO-THIS-LINE BE (( & >N1 ; )) (( (( ; N1 ; # => EMPTY-THIS-ROW ; )) (( ; N1 ; # => TEXT>MATRIX )) (( && )) )) OK) (LET HYPHEN-OR-TXT BE (( ; )) (( (( ; => LENGTH => ISBASIS (MATCHED (( ; RM )) (( }_} ; )) MATCHED) ; )) (( ; => => )) )) OK) (LET HYPHEN-TO-NIL BE (( ; )) (( (( ; }_} => TEQ (MATCHED (( }} ; )) MATCHED) ; )) (( ; => => )) )) OK) (LET ENSURE-THIS-FILE-IS-HYPHENISED BE (( & )) (( (( # => %LENGTH (COUNT (( N1 ; # => MATR>TEXT => TOLEN => ISBASIS (MATCHED (( }_} ; N1 ; # => TEXT>MATRIX )) MATCHED) )) COUNTUP) )) (( && )) )) OK) (LET LIST-IF-NOZ BE (( >N1 )) (( (( N1 => ISBASIS (MATCHED (( }} => => )) )(OTHER (( N1 => => )) MATCHED) )) )) OK) (LET AFFIRM-MAXLEN-6 BE (( ; )) (( (( ; => LENGTH ; 6 => INTGREATER = ; 6 => SETLENGTH ; === ; )) )) OK) (LET MH-DECIMALS BE (( ; )) (( (( ; => EXTRACTNUMBERSTUFF ; )) (( ; => AFFIRM-MAXLEN-6 ; )) (( ; => STKTORICH ; $100 => *R => ROUNDR => RICHTOSTK => => )) )) OK) (LET MH-DECIMALS-ON BE (( ; )) (( (( ; => STKTORICH ; $100 => \R => RICHTOSTK => PRETTIFY-NUMBER => => )) )) OK) (LET MH-DECIMALS-ON-OR-NIL BE (( ; )) (( (( ; => ONE => ISBASIS (MATCHED (( ; RM )) (( }} => => )) (( EXIT )) MATCHED) )) (( ; => STKTORICH ; $100 => \R => RICHTOSTK => PRETTIFY-NUMBER => => )) )) OK) (LET GET-QTY-OF-WARES BE (( )) (( (( 3 ; 1 ; WARE-DATA >>> => GM => => )) )) OK) (LET PUT-QTY-OF-WARES BE (( ; )) (( (( N1 ; 0 ; MAX-QTY-WARES >>> => SET-RANGE => >N1 )) (( ; 3 ; 1 ; WARE-DATA >>> => PM )) )) OK) (LET GET-MAX-USED-PAGENUM BE (( )) (( (( 5 ; 1 ; WARE-DATA >>> => GM => => )) )) OK) (LET PUT-MAX-USED-PAGENUM BE (( >N1 )) (( (( N1 ; 1 ; MAX-QTY-PAGES >>> => SET-RANGE => >N1 )) (( N1 ; 5 ; 1 ; WARE-DATA >>> => PM )) )) OK) (LET GET-WARENUM-AT-POS-IN-THIS-PAGE BE (( >N10 >N8 )) (( (( WARE-CATALOGUE >>> => & )) (( N8 => INC ; N10 ; 3 => ADD ; # => GM => => )) (( && )) )) OK) (LET QUANTITY-IN-THIS-NETSHOPPAGE BE (( >N3 )) (( (( WARE-CATALOGUE >>> => & )) (( 1 ; (( N3 ; 3 => ADD )) ; # => GM => => )) (( && )) )) OK) (LET IS-THERE-FREE-SPACE-ON-PAGE BE (( >N1 )) (( (( WARE-CATALOGUE >>> => & )) (( MAX-QTY-WARES-PR-PAGE >>> ; N1 => QUANTITY-IN-THIS-NETSHOPPAGE => INTGREATER => => )) (( && )) )) OK) (LET EXPAND-CATALOGUE BE (( >N3 >N2 >N1 )) (( }* TUTORIAL NOTE: WHEN MOVING LOTS AND LOTS OF BYTES, }* }* WE USE A FUNCTION LIKE COPYNUMSHIGH. BUT THIS IS }* }* MORE ANALYSABLE AND MORE THAN FAST ENOUGH FOR }* }* A FEW HUNDRED NUMBERS. TO EXPAND A LIST BY MOVING }* }* ONE NUMBER "RIGHTWAYS" MAKES GOOD SENSE ESP. IF }* }* WE START ON THE RIGHT SIDE AND MOVE LEFTWARDS, }* }* SO WE DON'T COPY THE SAME NUMBER RIGHTWARDS. }* }* SO THAT'S WHY COPYNUMSHIGH AND COPYNUMS ARE TWO }* }* DISTINCT ROUTINES. WHEN WE DO IT "MANUALLY", AS }* }* IN THIS BEAUTIFUL COUNT LOOP, WE WANT TO COUNT }* }* FROM THE TOP TOWARDS 1. THE N2 HAS THE TOP-COUNT. }* }* SO (( N2 ; N1 => SUB => INC => >N11 )) }* }* "MAGICALLY" TRANSFORMS THE USUAL COUNT N1 WHICH }* }* GOES UP AND UP TO N11 WHICH STARTS ON TOP. TO }* }* WORK OUT WHAT THE N1..N11 MEAN WITHIN EACH }* }* FUNCTION -- THEY DON'T CARRY OVER -- IS A BIT }* }* LIKE A MEDITATION OVER NAMELESS SYMBOLS. THIS IS }* }* FURTHER AMPLIFIED, THE BIT OF REQUIRED THINKING, }* }* BY THE FACT THAT INSIDE A COUNT LOOP, TO GET THE }* }* N1 "OUTSIDE" OF THE LOOP, YOU MUST REFER TO IT }* }* AS N3 "INSIDE" THE LOOP. ALSO, YOU MUST TAKE CARE }* }* TO DO A DEC OR AN INC AFTER MANY ADDITIONS OR }* }* SUBSTRACTIONS SO THAT WE GET THE NUMBERS SORTED }* }* OUT JUST RIGHT. IN THE CASE OF THE NETSHOP WARE }* }* CATALOGUE, THE MATRIX IS SUCH THAT THE THREE }* }* FIRST ROWS HAS OTHER DATA, CURRENCIES. }* }* THEN THE FIRST COLUMN IN EACH ROW TELLS HOW MANY }* }* WARES ARE ON EACH PAGE. SO ALL THIS MUST BE }* }* KEPT IN MIND TO WORK OUT A NEAT ALGORITHM TO DO }* }* EXACTLY AND FAULTLESSLY SUCH AS THIS FUNCTION, }* }* WHICH IS TO EXPAND -- IF THERE IS SPACE -- THE }* }* NETSHOP PAGE WITH A NEW WARENUM. THIS MATRIX IS }* }* THEN USED BY THE GENERATE HTM FUNCTION ELSEWHERE. }* (( WARE-CATALOGUE >>> => & )) (( MAX-QTY-WARES-PR-PAGE >>> => >N4 )) (( N3 ; 3 => ADD => >N3 )) (( 1 ; N3 ; # => GM => >N6 )) (( INCN6 )) (( N6 ; 1 ; N4 => WITH => NOT = && ; EXIT === )) (( N6 ; 1 ; N3 ; # => PM )) (( N2 ; 1 ; N6 => SET-RANGE => >N2 )) (( N6 ; N2 => INTGREATER (MATCHED (( N6 ; N2 => SUB (COUNT (( N2 ; N1 => SUB => INC => >N11 )) (( (( N11 ; N4 => ADD )) ; N5 ; # => GM ; (( N11 ; N4 => ADD => INC )) ; N5 ; # => PM )) COUNTUP) )) MATCHED) )) (( N1 ; N2 => INC ; N3 ; # => PM )) (( && )) )) OK) (LET COMPRESS-CATALOGUE BE (( >N11 >N1 )) (( (( WARE-CATALOGUE >>> => & )) (( N11 ; 3 => ADD => >N2 )) (( 1 ; N2 ; # => GM => >N6 )) (( N6 => ISBASIS = && ; EXIT === )) (( N6 => ISDANCE (MATCHED (( N1 => ISDANCE => NOT = && ; EXIT === )) (( 0 ; 1 ; N2 ; # => PM )) (( N11 ; GET-MAX-USED-PAGENUM => EQN (MATCHED (( N11 => DEC => PUT-MAX-USED-PAGENUM )) MATCHED) )) (( && ; EXIT )) MATCHED) )) (( N6 ; N1 => INTGREATER (MATCHED (( N6 ; N1 => SUB (COUNT (( N1 ; N3 => ADD => INC ; N4 ; # => GM ; N1 ; N3 => ADD ; N4 ; # => PM )) COUNTUP) )) MATCHED) )) (( N6 => DEC ; 1 ; N2 ; # => PM )) (( && )) )) OK) (LET GET-CURRENCY-CHOICES BE (( )) (( }* THIS IS OF COURSE MODIFIED ON MENU, AND STORED. }* }* THE CURRENCIES HERE ARE MERELY EXAMPLE TEXTS, }* }* IN CASE THE DATABASE IS ENTIRELY NEW. }* (( WARE-CATALOGUE >>> => & )) (( 1 ; # => MATR>TEXT ; )) (( ; => LENGTH => ISBASIS = ; RM ; }Dollar USD} === ; )) (( ; MH-CURRENCY-1 => >VARSTR )) (( 2 ; # => MATR>TEXT ; )) (( ; => LENGTH => ISBASIS = ; RM ; }Swiss Franc CHF} === ; )) (( ; MH-CURRENCY-2 => >VARSTR )) (( 3 ; # => MATR>TEXT ; )) (( ; => LENGTH => ISBASIS = ; RM ; }Yen JPY} === ; )) (( ; MH-CURRENCY-3 => >VARSTR )) (( && )) )) OK) (LET PUT-CURRENCY-CHOICES BE (( )) (( (( WARE-CATALOGUE >>> => & )) (( 1 ; # => EMPTY-THIS-ROW )) (( 2 ; # => EMPTY-THIS-ROW )) (( 3 ; # => EMPTY-THIS-ROW )) (( MH-CURRENCY-1 => VARSTR> ; 1 ; # => TEXT>MATRIX )) (( MH-CURRENCY-2 => VARSTR> ; 2 ; # => TEXT>MATRIX )) (( MH-CURRENCY-3 => VARSTR> ; 3 ; # => TEXT>MATRIX )) (( && )) )) OK) (( LOOKSTK )) (LET READ-IN-THE-MH-FILES BE (( )) (( (( WARE-DATA >>> => & )) (( WARE-DESC >>> => & )) (( WARE-CATALOGUE >>> => & )) (( WARE-CAT-HEADERS >>> => & )) (( WARE-MAIN-FOLDER => VARSTR> ; }DATA.TXT} => CONCAT ; #### => FILENUM2PM ; RM )) (( WARE-MAIN-FOLDER => VARSTR> ; }DESC.TXT} => CONCAT ; ### => FILE2PM ; RM )) (( ### => ENSURE-THIS-FILE-IS-HYPHENISED )) (( WARE-MAIN-FOLDER => VARSTR> ; }PAGE.TXT} => CONCAT ; ## => FILENUM2PM ; RM )) (( WARE-MAIN-FOLDER => VARSTR> ; }HEAD.TXT} => CONCAT ; # => FILE2PM ; RM )) (( # => ENSURE-THIS-FILE-IS-HYPHENISED )) (( ANY-MHDB-CHANGES-YET => SETBASIS )) (( GET-MAX-USED-PAGENUM => ISBASIS (MATCHED (( 1 => PUT-MAX-USED-PAGENUM )) MATCHED) )) (( && && && && )) )) OK) (( LOOKSTK )) (LET STORE-THE-MH-DATABASE-FILES BE (( )) (( (( WARE-DATA >>> => & )) (( WARE-DESC >>> => & )) (( WARE-CATALOGUE >>> => & )) (( WARE-CAT-HEADERS >>> => & )) (( WARE-MAIN-FOLDER => VARSTR> ; }DATA.TXT} => CONCAT ; #### => PM2FILENUM ; RM )) (( WARE-MAIN-FOLDER => VARSTR> ; }DESC.TXT} => CONCAT ; ### => PM2FILE ; RM )) (( WARE-MAIN-FOLDER => VARSTR> ; }PAGE.TXT} => CONCAT ; ## => PM2FILENUM ; RM )) (( WARE-MAIN-FOLDER => VARSTR> ; }HEAD.TXT} => CONCAT ; # => PM2FILE ; RM )) (( ANY-MHDB-CHANGES-YET => SETBASIS )) (( && && && && )) )) OK) (( LOOKSTK )) (LET FIND-WARENUM-IN-DB BE (( >N4 )) (( (( WARE-DATA >>> => & )) (( }} ; RECENTLY-SOUGHT-VARETEXT => >VARSTR )) (( JUST-FOUND-WARENUM => SETBASIS )) (( JUST-OPENED-RECT => SETBASIS )) (( 0 => >N8 )) (( GET-QTY-OF-WARES (COUNT (( 1 ; N1 => TRIRECNUM>MATRPOS ; # => GM ; N6 => EQN (MATCHED (( N1 => >N10 )) (( N2 => >N1 )) (( N6 JUST-FOUND-WARENUM < => )) (( && )) )) OK) (LET IS-FIRST-TEXT-WITHIN-SECOND-TEXT BE (( ; ; )) (( (( ; ; => UPCM ; ; )) (( ; ; => SWITCH => UPCM ; ; )) (( ; ; 1 => FINL => >N1 ; RM )) (( N1 => ISPRO => => )) )) OK) (LET GET-THIS-TEXT-FROM-THIS-TRIPLET BE (( & >N2 >N1 )) (( (( N2 => TRIRECNUM>MATRPOS => DEC ; N1 => ADD => >N3 )) (( N3 ; # => MATR>TEXT => HYPHEN-TO-NIL => => )) (( && )) )) OK) (LET PUT-THIS-TEXT-TO-THIS-TRIPLET BE (( & >N2 >N1 ; )) (( (( ; N2 => TRIRECNUM>MATRPOS => DEC ; N1 => ADD => >N3 ; )) (( ; N3 ; # => TEXT>MATRIX )) (( && )) )) OK) (LET UPDATE-JUST-FOUND-WARENUM BE (( )) (( (( WARE-DATA >>> => & )) (( JUST-OPENED-RECT >>> => ISPRO => NOT = && ; EXIT === )) (( JUST-OPENED-RECT >>> => >N1 )) (( 1 ; N1 => TRIRECNUM>MATRPOS ; # => GM JUST-FOUND-WARENUM <>> => & ; )) (( ; => ONE RECENTLY-SOUGHT-VARETEXT => >VARSTR ; )) (( ; JUST-FOUND-WARENUM => SETBASIS ; )) (( ; JUST-OPENED-RECT => SETBASIS ; )) (( ; => LENGTH => ISBASIS = ; RM ; && ; 0 => => ; EXIT === ; )) (( ; GET-QTY-OF-WARES (COUNT (( ; => ONE ; 1 ; N1 ; # => GET-THIS-TEXT-FROM-THIS-TRIPLET => IS-FIRST-TEXT-WITHIN-SECOND-TEXT (MATCHED (( ; N1 JUST-OPENED-RECT < >N1 ; )) MATCHED) ; )) COUNTUP) ; )) (( ; RM )) (( JUST-OPENED-RECT >>> => => )) (( && )) )) OK) (LET FIND-SAME-WARETEXT-AFTER-THIS-REC BE (( >N1 )) (( (( WARE-DESC >>> => & )) (( RECENTLY-SOUGHT-VARETEXT => VARSTR> ; )) (( ; JUST-FOUND-WARENUM => SETBASIS ; )) (( ; JUST-OPENED-RECT => SETBASIS ; )) (( ; => LENGTH => ISBASIS = ; RM ; && ; 0 => => ; EXIT === ; )) (( ; N1 => ISBASIS = ; RM ; && ; 0 => => ; EXIT === ; )) (( ; N1 => INC ; GET-QTY-OF-WARES => INTGREATER = ; RM ; && ; 0 => => ; EXIT === ; )) (( ; GET-QTY-OF-WARES ; N1 => SUB (COUNT (( ; => ONE ; 1 ; N1 ; N3 => ADD ; # => GET-THIS-TEXT-FROM-THIS-TRIPLET => IS-FIRST-TEXT-WITHIN-SECOND-TEXT (MATCHED (( ; N1 ; N3 => ADD JUST-OPENED-RECT < >N1 ; )) MATCHED) ; )) COUNTUP) ; )) (( ; RM )) (( JUST-OPENED-RECT >>> => => )) (( && )) )) OK) (( LOOKSTK )) (LET GET-UNUSED-WARENUM BE (( )) (( (( GOLABEL1: )) (( MAX-WARENUM >>> ; MIN-WARENUM >>> => SUB => STKTOVAR => FR GETV ; MIN-WARENUM >>> => ADD => >N2 )) (( N2 => FIND-WARENUM-IN-DB >>> => ISPRO (MATCHED (( GOUP1 )) MATCHED) )) (( N2 => => )) )) OK) (LET READFIELD BE (( >N3 >N2 >N1 )) (( (( N1 => MAKEBL ; N2 ; N3 => B9-POP )) (( N1 ; N2 ; N3 => B9-READLN => => )) )) OK) (LET SHOWFIELD BE (( >N3 >N2 >N1 ; )) (( (( ; N1 => MAKEBL ; N2 ; N3 => B9-POP ; )) (( ; N2 ; N3 => B9-POP )) )) OK) (LET MAKE-GOOD-WARENUM-OUT-OF-THIS BE (( ; => HEAL => >N1 )) (( (( MIN-WARENUM >>> ; N1 => INTGREATER = MIN-WARENUM >>> ; N1 => ADD => >N1 === )) (( N1 ; MIN-WARENUM >>> ; MAX-WARENUM >>> => SET-RANGE => >N1 )) (( N1 => => )) )) OK) (LET REGISTER-TYPED-IN-WARENUM BE (( )) (( (( }} ; MH-WARENUM => >VARSTR )) (( GOLABEL2: )) (( WARENUM-SIZE >>> ; 830 ; 150 => READFIELD => RMBL ; )) (( ; :F => TEQ (MATCHED (( GET-UNUSED-WARENUM ; )) MATCHED) ; )) (( ; => EXTRACTNUMBERSTUFF ; )) (( ; => LENGTH => ISBASIS = ; RM ; EXIT === ; )) (( ; => MAKE-GOOD-WARENUM-OUT-OF-THIS => >N1 )) (( N1 ; 6 ; 830 ; 150 => SHOWFIELD )) (( N1 => FIND-WARENUM-IN-DB => >N5 )) (( N5 => ISPRO (MATCHED (( }< B9-POP )) (( GOUP2 )) MATCHED) )) (( } } ; 930 ; 150 => B9-POP )) (( N1 PRESENT-WARENUM < >VARSTR )) )) OK) (LET REGISTER-TYPED-IN-DESC1 BE (( )) (( (( 35 ; 560 ; 180 => READFIELD ; )) (( ; => ONE ; MH-DESC1 => >VARSTR )) (( ; 35 ; 560 ; 180 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-DESC2 BE (( )) (( (( 35 ; 560 ; 210 => READFIELD ; )) (( ; => ONE ; MH-DESC2 => >VARSTR )) (( ; 35 ; 560 ; 210 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-DESC3 BE (( )) (( (( 35 ; 560 ; 240 => READFIELD ; )) (( ; => ONE ; MH-DESC3 => >VARSTR ; )) (( ; 35 ; 560 ; 240 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-PRICE BE (( )) (( (( 12 ; 830 ; 270 => READFIELD => EXTRACTNUMBERSTUFF ; )) (( ; => AFFIRM-MAXLEN-6 ; )) (( ; => PRETTIFY-NUMBER ; )) (( ; => ONE ; MH-PRICE => >VARSTR ; )) (( ; 12 ; 830 ; 270 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-PRICE-TYPE2 BE (( )) (( (( 12 ; 830 ; 300 => READFIELD => EXTRACTNUMBERSTUFF ; )) (( ; => AFFIRM-MAXLEN-6 ; )) (( ; => PRETTIFY-NUMBER ; )) (( ; => ONE ; MH-PRICE-TYPE2 => >VARSTR ; )) (( ; 12 ; 830 ; 300 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-PRICE-TYPE3 BE (( )) (( (( 12 ; 830 ; 330 => READFIELD => EXTRACTNUMBERSTUFF ; )) (( ; => AFFIRM-MAXLEN-6 ; )) (( ; => PRETTIFY-NUMBER ; )) (( ; => ONE ; MH-PRICE-TYPE3 => >VARSTR )) (( ; 12 ; 830 ; 330 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-DELIVERY BE (( )) (( (( 12 ; 830 ; 420 => READFIELD => EXTRACTNUMBERSTUFF ; )) (( ; => AFFIRM-MAXLEN-6 ; )) (( ; => PRETTIFY-NUMBER ; )) (( ; => ONE ; MH-DELIVERY => >VARSTR ; )) (( ; 12 ; 830 ; 420 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-DELIVERY-TYPE2 BE (( )) (( (( 12 ; 830 ; 450 => READFIELD => EXTRACTNUMBERSTUFF ; )) (( ; => AFFIRM-MAXLEN-6 ; )) (( ; => PRETTIFY-NUMBER ; )) (( ; => ONE ; MH-DELIVERY-TYPE2 => >VARSTR ; )) (( ; 12 ; 830 ; 450 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-DELIVERY-TYPE3 BE (( )) (( (( 12 ; 830 ; 480 => READFIELD => EXTRACTNUMBERSTUFF ; )) (( ; => AFFIRM-MAXLEN-6 ; )) (( ; => PRETTIFY-NUMBER ; )) (( ; => ONE ; MH-DELIVERY-TYPE3 => >VARSTR )) (( ; 12 ; 830 ; 480 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-SHOW-IN-PAGENUM BE (( )) (( (( 2 ; 830 ; 510 => READFIELD => HEAL => >N4 )) (( N4 ; 0 ; MAX-QTY-PAGES >>> => SET-RANGE => >N4 )) (( N4 ; 2 ; 830 ; 510 => SHOWFIELD )) (( N4 ; MH-SHOW-IN-PAGENUM => >VARSTR )) (( N4 => ISBASIS (MATCHED (( }} ; MH-POS-IN-PAGE => >VARSTR )) (( }} ; 2 ; 830 ; 540 => SHOWFIELD )) MATCHED) )) )) OK) (LET REGISTER-TYPED-IN-POS-IN-PAGE BE (( )) (( (( 2 ; 830 ; 540 => READFIELD => EXTRACTNUMBERSTUFF ; )) (( ; => HEAL => ONE ; MH-POS-IN-PAGE => >VARSTR ; )) (( ; 2 ; 830 ; 540 => SHOWFIELD )) )) OK) (LET REGISTER-TYPED-IN-TH-IMAGE BE (( )) (( (( 15 ; 830 ; 570 => READFIELD ; )) (( ; => FILTERSPECCHARS => REMOVEDOT => RMBL => LPCM ; )) (( ; => ONE ; 15 ; 830 ; 570 => SHOWFIELD ; )) (( ; MH-TH-IMAGE => >VARSTR )) )) OK) (LET REGISTER-TYPED-IN-IMAGE BE (( )) (( (( 15 ; 830 ; 600 => READFIELD ; )) (( ; => FILTERSPECCHARS => REMOVEDOT => RMBL => LPCM ; )) (( ; => ONE ; 15 ; 830 ; 600 => SHOWFIELD ; )) (( ; MH-IMAGE => >VARSTR )) )) OK) (LET REGISTER-TYPED-IN-PUBLIC-QTY-WARES BE (( )) (( (( 8 ; 830 ; 630 => READFIELD ; )) (( ; MH-PUBLIC-QTY-WARES => >VARSTR )) )) OK) (LET REGISTER-TYPED-IN-PRIVATE-QTY-WARES BE (( )) (( (( 8 ; 830 ; 660 => READFIELD ; )) (( ; MH-PRIVATE-QTY-WARES => >VARSTR )) )) OK) (LET PUT-THIS-PAGEPOS-FOR-THIS-NEW-WARE BE (( >N3 >N2 >N1 )) (( (( N2 => ISBASIS = 9999 => >N2 === )) (( N1 ; N2 ; N3 => EXPAND-CATALOGUE )) )) OK) (LET STORE-THIS-NEW-WARE BE (( )) (( (( WARE-DESC >>> => & )) (( WARE-DATA >>> => & )) (( GET-QTY-OF-WARES => INC => >N5 )) (( N5 => PUT-QTY-OF-WARES )) (( N5 => TRIRECNUM>MATRPOS => >N5 )) (( MH-WARENUM => VARSTR> ; 1 ; N5 ; # => PM )) (( MH-DESC1 => VARSTR> => HYPHEN-OR-TXT ; N5 ; ## => NEW-TEXT-TO-THIS-LINE )) (( MH-DESC2 => VARSTR> => HYPHEN-OR-TXT ; N5 => INC ; ## => NEW-TEXT-TO-THIS-LINE )) (( MH-DESC3 => VARSTR> => HYPHEN-OR-TXT ; N5 => INC => INC ; ## => NEW-TEXT-TO-THIS-LINE )) (( MH-PRICE => VARSTR> => MH-DECIMALS ; 3 ; N5 ; # => PM )) (( MH-PRICE-TYPE2 => VARSTR> => MH-DECIMALS ; 4 ; N5 ; # => PM )) (( MH-PRICE-TYPE3 => VARSTR> => MH-DECIMALS ; 5 ; N5 ; # => PM )) (( MH-DELIVERY => VARSTR> => MH-DECIMALS ; 6 ; N5 ; # => PM )) (( MH-DELIVERY-TYPE2 => VARSTR> => MH-DECIMALS ; 7 ; N5 ; # => PM )) (( MH-DELIVERY-TYPE3 => VARSTR> => MH-DECIMALS ; 8 ; N5 ; # => PM )) (( MH-TH-IMAGE => VARSTR> ; N5 => INC ; # => NEW-TEXT-TO-THIS-LINE )) (( MH-IMAGE => VARSTR> ; N5 => INC => INC ; # => NEW-TEXT-TO-THIS-LINE )) (( MH-PUBLIC-QTY-WARES => VARSTR> ; 9 ; N5 ; # => PM )) (( MH-PRIVATE-QTY-WARES => VARSTR> ; 10 ; N5 ; # => PM )) (( MH-SHOW-IN-PAGENUM => VARSTR> => >N8 )) (( 0 ; 12 ; N5 ; # => PM )) (( N8 => ISPRO => NOT = && && ; EXIT === )) (( N8 => IS-THERE-FREE-SPACE-ON-PAGE (MATCHED (( N8 ; 12 ; N5 ; # => PM )) (( N8 ; GET-MAX-USED-PAGENUM => INTGREATER (MATCHED (( N8 => PUT-MAX-USED-PAGENUM )) MATCHED) )) (( MH-WARENUM => VARSTR> ; MH-POS-IN-PAGE => VARSTR> ; N8 => PUT-THIS-PAGEPOS-FOR-THIS-NEW-WARE )) MATCHED) )) (( && && )) )) OK) (( LOOKSTK )) (LET ADD-NEW-WARES-TO-MH-DB BE (( )) (( (( GOLABEL1: )) (( GOLABEL4: )) (( REGISTER-TYPED-IN-WARENUM )) (( } } ; 885 ; 118 => B9-POP )) (( MH-WARENUM => VARSTR> => TOLEN => ISBASIS (MATCHED (( EXIT )) MATCHED) )) (( REGISTER-TYPED-IN-DESC1 )) (( MH-DESC1 => VARSTR> => RMBL => TOLEN => ISBASIS (MATCHED (( GOUP4 )) MATCHED) )) (( REGISTER-TYPED-IN-DESC2 )) (( REGISTER-TYPED-IN-DESC3 )) (( REGISTER-TYPED-IN-PRICE )) (( REGISTER-TYPED-IN-PRICE-TYPE2 )) (( REGISTER-TYPED-IN-PRICE-TYPE3 )) (( REGISTER-TYPED-IN-DELIVERY )) (( REGISTER-TYPED-IN-DELIVERY-TYPE2 )) (( REGISTER-TYPED-IN-DELIVERY-TYPE3 )) (( REGISTER-TYPED-IN-SHOW-IN-PAGENUM )) (( MH-SHOW-IN-PAGENUM => VARSTR> => ISPRO (MATCHED (( REGISTER-TYPED-IN-POS-IN-PAGE )) MATCHED) )) (( REGISTER-TYPED-IN-TH-IMAGE )) (( REGISTER-TYPED-IN-IMAGE )) (( REGISTER-TYPED-IN-PUBLIC-QTY-WARES )) (( REGISTER-TYPED-IN-PRIVATE-QTY-WARES )) (( STORE-THIS-NEW-WARE )) (( MH-SHOULD-SAVE )) (( }STORED!!!} ; 885 ; 118 => B9-POP )) (( GOUP1 )) )) OK) (( LOOKSTK )) (LET MAKEHTM-ACTION-1 BE (( )) (( (( }TYPE IN NEW WARE FOR NETSHOP, THANKS (or lineshift at [1] for menu)} 40 ; 118 => B9-POP )) (( }Please, in DESCRIPTION lines, avoid special characters like < and &.} 150 ; 32 => B9-POP )) (( }For orderly setup of netshop invoices, a six-digit warenum is used.} 150 ; 57 => B9-POP )) (( }Pls retype warenumber (or type F) if program says it is "USED".} ; 150 ; 82 => B9-POP )) (( }[1]Warenumber (or type F for program to Find an unused ware#): } ; 40 ; 150 => B9-POP )) (( }[2]UNIQUE IDENTIFYING description:} ; 40 ; 180 => B9-POP )) (( }[3]Optional explanatory description:} ; 40 ; 210 => B9-POP )) (( }[4]A third line of optional description:} ; 40 ; 240 => B9-POP )) (( }[5]Price of this ware / service (0=free) in main currency:} ; 40 ; 270 => B9-POP )) (( }[6]If used consistently: Optional price in 2nd currency:} ; 40 ; 300 => B9-POP )) (( }[7]Opt.price in 3rd currency (be consistent throughout): } 40 ; 330 => B9-POP )) (( }OPTIONAL DELIVERY COST (FOR ONE FORM OF DELIVERY); FOR THOSE WARES} 40 ; 360 => B9-POP )) (( }IN WHICH TALK WITH EACH CUSTOMER MUST PRECEDE PAYMENT, TYPE -1 NEXT:} 40 ; 390 => B9-POP )) (( } [8]DELIVERY (other delivery types by agreement), main currency:} 40 ; 420 => B9-POP )) (( } [9]DELIVERY (other delivery types by agreement), 2nd currency:} ; 40 ; 450 => B9-POP )) (( } [10]DELIVERY (other delivery types by agreement), 3rd currency:} 40 ; 480 => B9-POP )) (( }[11]Show this ware at PAGE number (0=means hide ware):} ; 40 ; 510 => B9-POP )) (( }[12]Where on page? POSITION number (1=top, 99=append):} ; 40 ; 540 => B9-POP )) (( }[13]Small image (l.c., no blanks, max 15 chars, no suffix):} ; 40 ; 570 => B9-POP )) (( }[14]MAIN IMAGE (l.c., no blanks, max 15 chars, no suffix):} ; 40 ; 600 => B9-POP )) (( }[15]Where it applies, quantity of wares as SEEN ON NET:} ; 40 ; 630 => B9-POP )) (( }[16]Hidden info, not viewable on net, quantity of this ware:} ; 40 ; 660 => B9-POP )) (( }*Note: pls check regularly with option 8 on main menu that the} ; 40 ; 690 => B9-POP )) (( }*number of wares on each page are within the meaningful limits.} ; 40 ; 720 => B9-POP )) (( ADD-NEW-WARES-TO-MH-DB )) )) OK) (( LOOKSTK )) (LET NEWCAT BE (( )) (( (( GENERATED-HTM >>> => & )) (( # => CLEAR-MATRIX )) (( CATLINE => SETDANCE )) (( && )) )) OK) (LET STORE-THIS-HTM-CAT-PAGE BE (( )) (( (( GENERATED-HTM >>> => & )) (( CAT-PAGE-MADE-NOW >>> => >N1 )) (( WARE-MAIN-FOLDER => VARSTR> ; }DBPAGE} => CONCAT ; N1 => CONCAT ; }.HTM} => CONCAT ; # => PM2FILE ; RM )) (( && )) )) OK) (LET TOCAT BE (( ; )) (( (( ; GENERATED-HTM >>> => & ; )) (( ; => LENGTH => ISBASIS (MATCHED (( ; RM )) (( } } ; )) MATCHED) ; )) (( ; CATLINE >>> ; # => TEXT>MATRIX )) (( CATLINE => INCVAR )) (( && )) )) OK) (LET TOCAT-IF-ANYTHING BE (( ; )) (( (( ; => LENGTH => NOZ (MATCHED (( ; => TOCAT )) )(OTHER (( ; RM )) MATCHED) )) )) OK) (LET MAKE-PAGE-LINK-PARTS BE (( )) (( (( CAT-PAGE-MADE-NOW >>> ; GET-MAX-USED-PAGENUM => NOT_INTEQUAL (MATCHED (( }Link to next catalogue page.} => CONCAT => TOCAT )) (( CAT-PAGE-MADE-NOW >>> ; 1 => INTGREATER (MATCHED }And previous page.} => CONCAT => TOCAT )) MATCHED) )) )(OTHER (( CAT-PAGE-MADE-NOW >>> ; 1 => INTGREATER (MATCHED (( }Link to first catalogue page.} => CONCAT => TOCAT )) MATCHED) )) MATCHED) )) (( }} => TOCAT )) )) OK) (LET MAKE-HEADER-PART-OF-THIS-HTM BE (( )) (( (( WARE-CAT-HEADERS >>> => & )) (( NEWCAT )) (( }} => TOCAT )) (( }} => TOCAT )) (( }} ; CAT-PAGE-MADE-NOW >>> ; # => MATR>TEXT => HYPHEN-TO-NIL => CONCAT ; }} => CONCAT => TOCAT )) (( }} => TOCAT )) (( } TOCAT )) (( }link="#000000" vlink="#000000"} => TOCAT )) (( }alink="#000000">} => TOCAT )) (( }
} => TOCAT ))
    (( }} => CONCAT => TOCAT ))
    (( }} => TOCAT ))
    (( CAT-PAGE-MADE-NOW >>> ; # => MATR>TEXT =>  
      HYPHEN-TO-NIL => TOCAT ))  
    (( }} => TOCAT ))
    (( GET-MAX-USED-PAGENUM => ISDANCE => NOT
      (MATCHED
        (( }CATALOGUE page } ;
          CAT-PAGE-MADE-NOW >>> => CONCAT ;  
          } of } => CONCAT ;
          GET-MAX-USED-PAGENUM => CONCAT => TOCAT )) 
      MATCHED) ))
    (( }} => TOCAT ))
}} TOCAT 
}
We are happy to receive} TOCAT }payments via debet card approach.} TOCAT }
} TOCAT (( }} => TOCAT )) (( MAKE-PAGE-LINK-PARTS )) (( }} => TOCAT )) (( && )) )) OK) (LET SUPPORT-IMGSRC-ALSO-BY-JUST-OPENED-RECT BE (( )) (( (( WARE-DATA >>> => & )) (( DOES-HAVE-TH-IMAGE => SETBASIS )) (( DOES-HAVE-MAIN-IMAGE => SETBASIS )) (( 2 ; JUST-OPENED-RECT >>> ; # => GET-THIS-TEXT-FROM-THIS-TRIPLET => RMBL ; )) (( ; => LENGTH => ISPRO = ; DOES-HAVE-TH-IMAGE => SETDANCE === ; )) (( ; => ONE MH-TH-IMAGE => >VARSTR ; )) (( ; }} => CONCAT ; MH-TH-IMAGE-IMGSRC-EXPANDED => >VARSTR )) (( 3 ; JUST-OPENED-RECT >>> ; # => GET-THIS-TEXT-FROM-THIS-TRIPLET => RMBL ; )) (( ; => LENGTH => ISPRO = ; DOES-HAVE-MAIN-IMAGE => SETDANCE === ; )) (( ; => ONE ; MH-IMAGE => >VARSTR ; )) (( ; }} => CONCAT ; MH-IMAGE-IMGSRC-EXPANDED => >VARSTR )) (( && )) )) OK) (LET MAKE-IMAGE-PART-OF-THIS-WARE-IN-HTM-PAGE BE (( )) (( (( DOES-HAVE-TH-IMAGE => VISDANCE ; DOES-HAVE-MAIN-IMAGE => VISBASIS => AND (MATCHED (( MH-TH-IMAGE-IMGSRC-EXPANDED => VARSTR> => TOCAT )) MATCHED) )) (( DOES-HAVE-TH-IMAGE => VISDANCE ; DOES-HAVE-MAIN-IMAGE => VISDANCE => AND (MATCHED (( } CONCAT => TOCAT )) (( }>} => CONCAT ; MH-TH-IMAGE-IMGSRC-EXPANDED => VARSTR> => CONCAT ; }} => CONCAT => TOCAT )) MATCHED) )) )) OK) (LET PRODUCE-HTM-FOR-PRICE-AND-DELIV-IN-CURRENCY BE (( >N3 >N2 >N1 )) (( (( N3 => GET-CURRENCY-TEXT ; )) (( ; => LENGTH => ISPRO (MATCHED (( ; }: } => CONCAT ; )) MATCHED) ; )) (( ; N1 => MH-DECIMALS-ON-OR-NIL => RMBL => CONCAT ; )) (( ; => TOCAT )) (( N2 => ISPRO (MATCHED (( }[ add delivery: } ; N2 => MH-DECIMALS-ON => RMBL => CONCAT ; } ]} => CONCAT => TOCAT )) MATCHED) )) (( N2 => SG => ISPRO (MATCHED (( }Delivery: Do pls get in touch with us to buy this.} => TOCAT )) MATCHED) )) )) OK) (LET SHOW-FOUND-WARE-IN-HTM-PAGE BE (( )) (( (( WARE-DESC >>> => & )) (( WARE-DATA >>> => & )) (( JUST-OPENED-RECT >>> => >N1 )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( JUST-FOUND-WARENUM >>> => >N9 )) (( SUPPORT-IMGSRC-ALSO-BY-JUST-OPENED-RECT )) (( MAKE-IMAGE-PART-OF-THIS-WARE-IN-HTM-PAGE )) (( 1 ; N1 ; ## => GET-THIS-TEXT-FROM-THIS-TRIPLET => TOCAT-IF-ANYTHING )) (( 2 ; N1 ; ## => GET-THIS-TEXT-FROM-THIS-TRIPLET => TOCAT-IF-ANYTHING )) (( 3 ; N1 ; ## => GET-THIS-TEXT-FROM-THIS-TRIPLET => TOCAT-IF-ANYTHING )) (( 3 ; N8 ; # => GM => >N10 )) (( N10 => ISBASIS (MATCHED (( }[price:FREE]} => TOCAT )) )(OTHER (( N10 ; (( 6 ; N8 ; # => GM )) ; 1 => PRODUCE-HTM-FOR-PRICE-AND-DELIV-IN-CURRENCY )) MATCHED) )) (( }[cat.num: } ; N9 => CONCAT ; }]} => CONCAT => TOCAT )) (( 4 ; N8 ; # => GM => >N10 )) (( N10 => NOZ (MATCHED (( N10 ; (( 7 ; N8 ; # => GM )) ; 2 => PRODUCE-HTM-FOR-PRICE-AND-DELIV-IN-CURRENCY )) MATCHED) )) (( 5 ; N8 ; # => GM => >N10 )) (( N10 => NOZ (MATCHED (( N10 ; (( 8 ; N8 ; # => GM )) ; 3 => PRODUCE-HTM-FOR-PRICE-AND-DELIV-IN-CURRENCY )) MATCHED) )) (( 9 ; N8 ; # => GM => >N11 )) (( N11 => ISPRO (MATCHED (( }Qty in stock: } ; N11 => CONCAT => TOCAT )) MATCHED) )) (( && && )) )) OK) (LET MAKE-HTM-TO-SHOW-THIS-WARE-IN-PAGE (( >N1 )) (( (( N1 => FIND-WARENUM-IN-DB => ISPRO (MATCHED (( }} => TOCAT )) (( }} => TOCAT )) (( SHOW-FOUND-WARE-IN-HTM-PAGE )) (( }} => TOCAT )) (( }} => TOCAT )) (( }} => TOCAT )) MATCHED) )) )) OK) (LET MAKE-CONTENT-PART-OF-THIS-HTM BE (( )) (( (( CAT-PAGE-MADE-NOW >>> => >N4 )) (( N4 => QUANTITY-IN-THIS-NETSHOPPAGE => >N6 )) (( N6 (COUNT (( N1 ; N6 => GET-WARENUM-AT-POS-IN-THIS-PAGE => >N10 )) (( N10 => NOZ (MATCHED (( N10 => MAKE-HTM-TO-SHOW-THIS-WARE-IN-PAGE )) MATCHED) )) COUNTUP) )) )) OK) (( LOOKSTK )) (LET MAKE-COMPLETION-PART-OF-THIS-HTM BE (( )) (( (( MAKE-PAGE-LINK-PARTS )) (( }} => TOCAT )) (( }
} => TOCAT )) (( }
} => TOCAT )) (( }} => TOCAT )) (( }} => TOCAT )) )) OK) (LET STORE-THE-MH-DATABASE-FILES-AS-HTM-ALSO BE (( )) (( (( GET-MAX-USED-PAGENUM (COUNT (( N1 CAT-PAGE-MADE-NOW < B9-POP )) (( }***Storing db and making updated .HTM..} ; 100 ; 200 => B9-POP )) (( PUT-CURRENCY-CHOICES )) (( STORE-THE-MH-DATABASE-FILES )) (( STORE-THE-MH-DATABASE-FILES-AS-HTM-ALSO )) (( }***COMPLETE!!! Next, FTP to get HTM to net.} ; 100 ; 250 => B9-POP )) (( 3 => SECS )) (( MANUAL-CLEAR-KEYBUF )) )) OK) (LET NEW-VALUE-IN-DESC1-WITH-SCR-UPDATE BE (( )) (( (( }*MAIN DESCRIPTION:} ; 10 ; 43 => B9-POP )) (( 35 ; 283 ; 43 => B9-READLN ; )) (( ; => FILTERSPECCHARS => HYPHEN-OR-TXT ; )) (( ; 1 ; JUST-OPENED-RECT >>> => WARE-DESC >>> => PUT-THIS-TEXT-TO-THIS-TRIPLET )) (( MH-SHOULD-SAVE )) (( 60 => MAKEBL ; 310 ; 690 => B9-POP )) (( }MAIN DESCRIPTION: } ; 1 ; JUST-OPENED-RECT >>> ; WARE-DESC >>> => GET-THIS-TEXT-FROM-THIS-TRIPLET => CONCAT ; 310 ; 690 => B9-POP )) )) OK) (LET NEW-VALUE-IN-DESC2 BE (( )) (( (( }*DESC.LINE 2:} ; 10 ; 43 => B9-POP )) (( 35 ; 283 ; 43 => B9-READLN ; )) (( ; => FILTERSPECCHARS => HYPHEN-OR-TXT ; )) (( ; 2 ; JUST-OPENED-RECT >>> => WARE-DESC >>> => PUT-THIS-TEXT-TO-THIS-TRIPLET )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-DESC3 BE (( )) (( (( }*DESC.LINE 3:} ; 10 ; 43 => B9-POP )) (( 35 ; 283 ; 43 => B9-READLN ; )) (( ; => FILTERSPECCHARS => HYPHEN-OR-TXT ; )) (( ; 3 ; JUST-OPENED-RECT >>> => WARE-DESC >>> => PUT-THIS-TEXT-TO-THIS-TRIPLET )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-PRICE BE (( )) (( (( }*MAIN PRICE:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 12 ; 283 ; 43 => B9-READLN => MH-DECIMALS ; 3 ; N8 ; WARE-DATA >>> => PM )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-PRICE-TYPE2 BE (( )) (( (( }*PRICE 2ND CCY:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 12 ; 283 ; 43 => B9-READLN => MH-DECIMALS ; 4 ; N8 ; WARE-DATA >>> => PM )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-PRICE-TYPE3 BE (( )) (( (( }*PRICE 3RD CCY:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 12 ; 283 ; 43 => B9-READLN => MH-DECIMALS ; 5 ; N8 ; WARE-DATA >>> => PM )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-DELIVERY BE (( )) (( (( }*DELIVERY:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 12 ; 283 ; 43 => B9-READLN => MH-DECIMALS ; 6 ; N8 ; WARE-DATA >>> => PM )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-DELIVERY-TYPE2 BE (( )) (( (( }*DELIV, 2ND CCY:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 12 ; 283 ; 43 => B9-READLN => MH-DECIMALS ; 7 ; N8 ; WARE-DATA >>> => PM )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-DELIVERY-TYPE3 BE (( )) (( (( }*DELIV, 3RD CCY:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 12 ; 283 ; 43 => B9-READLN => MH-DECIMALS ; 8 ; N8 ; WARE-DATA >>> => PM )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-PAGENUM BE (( )) (( (( }*PAGENUM (0=HIDE):} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 2 ; 283 ; 43 => B9-READLN => HEAL => >N4 )) (( N4 ; 0 ; MAX-QTY-PAGES >>> => SET-RANGE => >N4 )) (( 12 ; N8 ; WARE-DATA >>> => GM => >N5 )) (( N5 ; N4 => EQN = EXIT === )) (( N5 => ISPRO (MATCHED (( JUST-FOUND-WARENUM >>> ; (( N5 ; 3 => ADD )) ; WARE-CATALOGUE >>> => FIND-POSNUM-IN-ROW-WITH-COUNT => >N6 )) (( N6 => ISPRO (MATCHED (( N6 ; N5 => COMPRESS-CATALOGUE )) MATCHED) )) MATCHED) )) (( N4 ; 12 ; N8 ; WARE-DATA >>> => PM )) (( N4 => ISPRO (MATCHED (( N4 => IS-THERE-FREE-SPACE-ON-PAGE (MATCHED (( JUST-FOUND-WARENUM >>> ; 9999 ; N4 => PUT-THIS-PAGEPOS-FOR-THIS-NEW-WARE )) MATCHED) )) MATCHED) )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-TH-IMAGE BE (( )) (( (( }*SMALL IMAGE:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 15 ; 283 ; 43 => B9-READLN ; )) (( ; => FILTERSPECCHARS => REMOVEDOT => RMBL => LPCM ; N8 => INC ; WARE-DATA >>> => NEW-TEXT-TO-THIS-LINE )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-IMAGE BE (( )) (( (( }*MAIN IMAGE:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 15 ; 283 ; 43 => B9-READLN ; )) (( ; => FILTERSPECCHARS => REMOVEDOT => RMBL => LPCM ; N8 => INC => INC ; WARE-DATA >>> => NEW-TEXT-TO-THIS-LINE )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-PUBLIC-QTY-WARES BE (( )) (( (( }*MAIN QUANTITY:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 8 ; 283 ; 43 => B9-READLN => RMBL ; 9 ; N8 ; WARE-DATA >>> => PM )) (( MH-SHOULD-SAVE )) )) OK) (LET NEW-VALUE-IN-PRIVATE-QTY-WARES BE (( )) (( (( }*PRIVATE QTY:} ; 10 ; 43 => B9-POP )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 8 ; 283 ; 43 => B9-READLN => RMBL ; 10 ; N8 ; WARE-DATA >>> => PM )) (( MH-SHOULD-SAVE )) )) OK) (LET PICK-A-WARE BE (( )) (( (( -1 ; JUST-FOUND-WARENUM < SETBASIS )) (( }*****FIND WARE::: type WARENUM (or dot . for 'present warenum'), or} ; 10 ; 125 => B9-POP )) (( }type (unique) bit of 1st desc. text:} ; 10 ; 150 => B9-POP )) (( 35 ; 560 ; 150 => B9-READLN ; )) (( ; => LENGTH => ISBASIS = ; RM ; EXIT === ; )) (( ; JUST-FOUND-WARENUM => SETBASIS ; )) (( ; => ONE => RMBL ; }.} => EQ (MATCHED (( ; RM )) (( PRESENT-WARENUM >>> => FIND-WARENUM-IN-DB ; RM )) (( EXIT )) MATCHED) ; )) (( ; => ONE => CHK-IF-GOOD-WARENUM (MATCHED (( ; => FIND-WARENUM-IN-DB ; RM )) (( EXIT )) MATCHED) ; )) (( ; => FIND-WARETEXT-IN-DB ; RM )) )) OK) (LET CLEANSE-FACADE-EASILY BE (( )) (( (( 85 => MAKEBL ; 10 ; 43 => B9-POP )) )) OK) (LET REFRESH-VIEW-PRESENT-WARE BE (( )) (( (( WARE-DESC >>> => & )) (( WARE-DATA >>> => & )) (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( CLEANSE-FACADE-EASILY )) (( BLACKEN-PART-OF-SCREEN )) (( FLIP-COLORS )) (( }DESC. LINE 2>>> } ; 2 ; JUST-OPENED-RECT >>> ; ## => GET-THIS-TEXT-FROM-THIS-TRIPLET => CONCAT ; 10 ; 200 => B9-POP )) (( }DESC. LINE 3>>> } ; 3 ; JUST-OPENED-RECT >>> ; ## => GET-THIS-TEXT-FROM-THIS-TRIPLET => CONCAT ; 10 ; 225 => B9-POP )) (( }PRICES, MAIN>>> } ; 3 ; N8 ; # => GM => MH-DECIMALS-ON-OR-NIL => CONCAT ; 10 ; 250 => B9-POP )) (( } SECOND>>> } ; 4 ; N8 ; # => GM => MH-DECIMALS-ON-OR-NIL => CONCAT ; 10 ; 275 => B9-POP )) (( } THIRD>>> } ; 5 ; N8 ; # => GM => MH-DECIMALS-ON-OR-NIL => CONCAT ; 10 ; 300 => B9-POP )) (( }DELIV., MAIN>>> } ; 6 ; N8 ; # => GM => MH-DECIMALS-ON-OR-NIL => RMBL => CONCAT ; 10 ; 325 => B9-POP )) (( } SECOND>>> } ; 7 ; N8 ; # => GM => MH-DECIMALS-ON-OR-NIL => RMBL => CONCAT ; 10 ; 350 => B9-POP )) (( } THIRD>>> } ; 8 ; N8 ; # => GM => MH-DECIMALS-ON-OR-NIL => RMBL => CONCAT ; 10 ; 375 => B9-POP )) (( } OPTIONAL CLICKABLE SMALL IMAGE>>> } ; 2 ; JUST-OPENED-RECT >>> ; # => GET-THIS-TEXT-FROM-THIS-TRIPLET => CONCAT ; 10 ; 400 => B9-POP )) (( }MAIN IMAGE>>> } ; 3 ; JUST-OPENED-RECT >>> ; # => GET-THIS-TEXT-FROM-THIS-TRIPLET => CONCAT ; 10 ; 425 => B9-POP )) (( }PUBLIC QTY. OF WARES>>> } ; 9 ; N8 ; # => GM => LIST-IF-NOZ => CONCAT ; } OPTIONAL PRIVATE QTY. OF WARES>>> } ; 10 ; N8 ; # => GM LIST-IF-NOZ => CONCAT => CONCAT ; 10 ; 450 => B9-POP )) (( }AT PRESENT LISTED IN CATALOGUE PAGE #>>> } ; 12 ; N8 ; # => GM LIST-IF-NOZ => CONCAT ; 10 ; 475 => B9-POP )) (( }Sequence in page can be viewed and modified in menu#8. } ; }Currencies, menu #9.} => CONCAT ; 10 ; 500 => B9-POP )) (( }For interpretation of some values here, see info at menu#1.} ; 10 ; 525 => B9-POP )) (( FLIP-COLORS )) (( && && )) )) OK) (LET DETAILED-VIEW-PRESENT-WARE-RECORD BE (( )) (( (( 85 => MAKEBL ; 5 ; 740 => B9-POP )) (( }STARTED viewing/working on this} ; 5 ; 740 => B9-POP )) (( REFRESH-VIEW-PRESENT-WARE )) (( }Note that the suffix } ; MH-IMAGE-SUFFIX => VARSTR> => CONCAT ; } is automatically added to the image filenames.} => CONCAT ; 10 ; 43 => B9-POP )) )) OK) (LET VIEW-PRESENT-WARE-RECORD BE (( )) (( (( GOLABEL3: )) (( 85 => MAKEBL ; 5 ; 690 => B9-POP )) (( JUST-FOUND-WARENUM >>> => ISPRO => NOT = EXIT === )) (( JUST-FOUND-WARENUM >>> PRESENT-WARENUM <>> => CONCAT ; 5 ; 690 => B9-POP )) (( }MAIN DESCRIPTION: } ; 1 ; JUST-OPENED-RECT >>> ; WARE-DESC >>> => GET-THIS-TEXT-FROM-THIS-TRIPLET => CONCAT ; 310 ; 690 => B9-POP )) (( RECENTLY-SOUGHT-VARETEXT => VARSTR> => TOLEN => ISPRO (MATCHED (( }S)TART viewing/working on this, or search N)EXT -- N or S?} ; 5 ; 740 => B9-POP )) (( MANUAL-CLEAR-KEYBUF )) (( KEY ; }N} => EQ (MATCHED (( JUST-OPENED-RECT >>> => FIND-SAME-WARETEXT-AFTER-THIS-REC ; RM )) (( GOUP3 )) MATCHED) )) MATCHED) )) (( DETAILED-VIEW-PRESENT-WARE-RECORD )) )) OK) (LET OPTION-TO-MODIFY-PRICES-OR-PAGE-NUM BE (( )) (( (( JUST-FOUND-WARENUM >>> => ISPRO => NOT = EXIT === )) (( GOLABEL4: )) (( MANUAL-CLEAR-KEYBUF )) (( }====>>> ENTER OR TYPE (1) MODIFY MAIN PRICE, (2) 2ND PRICE, (3) 3RD,} 10 ; 590 => B9-POP )) (( }(4) PAGE.NUM? [ALWAYS POSSIBLE TO PRESS [ENTER] TO GO TO MAIN MENU.] } 10 ; 640 => B9-POP )) (( KEYNUM => >N1 )) (( CLEANSE-FACADE-EASILY )) (( N1 ; KEY-ENTER >>> => EQN = EXIT === )) (( N1 ; 48 => SUB => >N1 )) (( MANUAL-CLEAR-KEYBUF )) (( N1 ; 1 => EQN = NEW-VALUE-IN-PRICE === )) (( N1 ; 2 => EQN = NEW-VALUE-IN-PRICE-TYPE2 === )) (( N1 ; 3 => EQN = NEW-VALUE-IN-PRICE-TYPE3 === )) (( N1 ; 4 => EQN = NEW-VALUE-IN-PAGENUM === )) (( REFRESH-VIEW-PRESENT-WARE )) (( GOUP4 )) )) OK) (LET MAKEHTM-ACTION-3 BE (( )) (( (( GOLABEL1: )) (( }VIEW A WARE, OPTIONALLY MODIFY PRICES OR ITS PAGE# AT NET:} ; 100 ; 100 => B9-POP )) (( PICK-A-WARE )) (( JUST-FOUND-WARENUM >>> ; -1 => EQN = EXIT === )) (( VIEW-PRESENT-WARE-RECORD )) (( OPTION-TO-MODIFY-PRICES-OR-PAGE-NUM )) (( CLS )) (( GOUP1 )) )) OK) (LET OPTION-TO-MODIFY-QUANTITY-OR-DESCRIPTIONS BE (( )) (( (( JUST-FOUND-WARENUM >>> => ISPRO => NOT = EXIT === )) (( GOLABEL4: )) (( MANUAL-CLEAR-KEYBUF )) (( }====>>> ENTER OR TYPE (1) MODIFY PUBL. QUANTIY, (2) PRIVATE QUANTITY,} 10 ; 590 => B9-POP )) (( }(3) UNIQUE IDENTIFYING MAIN TEXT, (4) DESC.LINE#2, (5) DESC.LINE#3 } 10 ; 640 => B9-POP )) (( KEYNUM => >N1 )) (( CLEANSE-FACADE-EASILY )) (( N1 ; KEY-ENTER >>> => EQN = EXIT === )) (( N1 ; 48 => SUB => >N1 )) (( MANUAL-CLEAR-KEYBUF )) (( N1 ; 1 => EQN = NEW-VALUE-IN-PUBLIC-QTY-WARES === )) (( N1 ; 2 => EQN = NEW-VALUE-IN-PRIVATE-QTY-WARES === )) (( N1 ; 3 => EQN = NEW-VALUE-IN-DESC1-WITH-SCR-UPDATE === )) (( N1 ; 4 => EQN = NEW-VALUE-IN-DESC2 === )) (( N1 ; 5 => EQN = NEW-VALUE-IN-DESC3 === )) (( REFRESH-VIEW-PRESENT-WARE )) (( GOUP4 )) )) OK) (LET MAKEHTM-ACTION-4 BE (( )) (( (( GOLABEL1: )) (( }MODIFY QUANTITY AVAIL OR TEXT OF ONE OR MORE EXISTING WARES:} ; 100 ; 100 => B9-POP )) (( PICK-A-WARE )) (( JUST-FOUND-WARENUM >>> ; -1 => EQN = EXIT === )) (( VIEW-PRESENT-WARE-RECORD )) (( OPTION-TO-MODIFY-QUANTITY-OR-DESCRIPTIONS )) (( CLS )) (( GOUP1 )) )) OK) (LET OPTION-TO-MODIFY-DELIVERY BE (( )) (( (( JUST-FOUND-WARENUM >>> => ISPRO => NOT = EXIT === )) (( GOLABEL4: )) (( MANUAL-CLEAR-KEYBUF )) (( }====>>> ENTER OR TYPE (1) MODIFY DELIVERY PRICE (-1=BY AGREEMENT),} 10 ; 590 => B9-POP )) (( }(2) DELIVERY PRICE IN 2ND CURRENCY, (3) D.PRICE IN 3RD CCY } 10 ; 640 => B9-POP )) (( KEYNUM => >N1 )) (( CLEANSE-FACADE-EASILY )) (( N1 ; KEY-ENTER >>> => EQN = EXIT === )) (( N1 ; 48 => SUB => >N1 )) (( MANUAL-CLEAR-KEYBUF )) (( N1 ; 1 => EQN = NEW-VALUE-IN-DELIVERY === )) (( N1 ; 2 => EQN = NEW-VALUE-IN-DELIVERY-TYPE2 === )) (( N1 ; 3 => EQN = NEW-VALUE-IN-DELIVERY-TYPE3 === )) (( REFRESH-VIEW-PRESENT-WARE )) (( GOUP4 )) )) OK) (LET MAKEHTM-ACTION-5 BE (( )) (( (( GOLABEL1: )) (( }MODIFY DELIVERY PRICES ETC OF ONE OR MORE EXISTING WARES:} ; 100 ; 100 => B9-POP )) (( PICK-A-WARE )) (( JUST-FOUND-WARENUM >>> ; -1 => EQN = EXIT === )) (( VIEW-PRESENT-WARE-RECORD )) (( OPTION-TO-MODIFY-DELIVERY )) (( CLS )) (( GOUP1 )) )) OK) (LET OPTION-TO-MODIFY-IMAGES BE (( )) (( (( JUST-FOUND-WARENUM >>> => ISPRO => NOT = EXIT === )) (( GOLABEL4: )) (( MANUAL-CLEAR-KEYBUF )) (( }====>>> ENTER OR TYPE (1) MODIFY M A I N IMAGE (2) MINI-IMAGE} 10 ; 590 => B9-POP )) (( }[ALWAYS POSSIBLE TO PRESS [ENTER] TO GO TO MAIN MENU.] } 10 ; 640 => B9-POP )) (( KEYNUM => >N1 )) (( CLEANSE-FACADE-EASILY )) (( N1 ; KEY-ENTER >>> => EQN = EXIT === )) (( N1 ; 48 => SUB => >N1 )) (( MANUAL-CLEAR-KEYBUF )) (( N1 ; 1 => EQN = NEW-VALUE-IN-IMAGE === )) (( N1 ; 2 => EQN = NEW-VALUE-IN-TH-IMAGE === )) (( REFRESH-VIEW-PRESENT-WARE )) (( GOUP4 )) )) OK) (LET MAKEHTM-ACTION-6 BE (( )) (( (( GOLABEL1: )) (( }MODIFY NAME OF IMAGE-FILE OF ONE OR MORE EXISTING WARES:} ; 100 ; 100 => B9-POP )) (( PICK-A-WARE )) (( JUST-FOUND-WARENUM >>> ; -1 => EQN = EXIT === )) (( VIEW-PRESENT-WARE-RECORD )) (( OPTION-TO-MODIFY-IMAGES )) (( CLS )) (( GOUP1 )) )) OK) (LET ASK-CONFIRM-FOR-DELETION-THEN-DELETE BE (( )) (( (( }**==>>//??\\OK REMOVE?} ; 10 ; 43 => B9-POP )) (( 350 ; 43 => B9-YNIN (MATCHED (( JUST-OPENED-RECT >>> => TRIRECNUM>MATRPOS => >N8 )) (( 12 ; N8 ; WARE-DATA >>> => GM => >N5 )) (( N5 => ISPRO (MATCHED (( JUST-FOUND-WARENUM >>> ; (( N5 ; 3 => ADD )) ; WARE-CATALOGUE >>> => FIND-POSNUM-IN-ROW-WITH-COUNT => >N6 )) (( N6 => ISPRO (MATCHED (( N6 ; N5 => COMPRESS-CATALOGUE )) MATCHED) )) MATCHED) )) (( JUST-OPENED-RECT >>> ; GET-QTY-OF-WARES ; WARE-DATA >>> => ANIHILATE-THESE-THREE )) (( JUST-OPENED-RECT >>> ; GET-QTY-OF-WARES ; WARE-DESC >>> => ANIHILATE-THESE-THREE )) (( GET-QTY-OF-WARES => DEC => PUT-QTY-OF-WARES )) (( 300508 PRESENT-WARENUM < => )) )(OTHER (( NO => => )) MATCHED) )) (( CLEANSE-FACADE-EASILY )) )) OK) (LET REINCARNATION-STATION BE (( )) (( (( JUST-FOUND-WARENUM >>> => ISPRO => NOT = EXIT === )) (( GOLABEL4: )) (( MANUAL-CLEAR-KEYBUF )) (( }====>>> ENTER=EXIT, OR (1) TO DELETE THIS WARERECORD} ; 10 ; 590 => B9-POP )) (( }(UNDO OPTION IS TO EXIT THE DATABASE & ANSWER NO TO STORE DB) } ; 10 ; 640 => B9-POP )) (( KEYNUM => >N1 )) (( CLEANSE-FACADE-EASILY )) (( N1 ; KEY-ENTER >>> => EQN = EXIT === )) (( N1 ; 48 => SUB => >N1 )) (( MANUAL-CLEAR-KEYBUF )) (( N1 ; 1 => EQN (MATCHED (( ASK-CONFIRM-FOR-DELETION-THEN-DELETE (MATCHED (( EXIT )) MATCHED) )) MATCHED) )) (( REFRESH-VIEW-PRESENT-WARE )) (( GOUP4 )) )) OK) (LET MAKEHTM-ACTION-7 BE (( )) (( (( GOLABEL1: )) (( }DELETE A WARE RECORD IN THE DB, AND RELEASE THE WARENUMBER:} ; 100 ; 100 => B9-POP )) (( PICK-A-WARE )) (( JUST-FOUND-WARENUM >>> ; -1 => EQN = EXIT === )) (( VIEW-PRESENT-WARE-RECORD )) (( REINCARNATION-STATION )) (( CLS )) (( GOUP1 )) )) OK) (LET MOVE-TO-NEW-POS-IN-NETSHOPPAGE BE (( >N3 >N2 >N1 )) (( (( WARE-CATALOGUE >>> => & )) (( N1 ; N3 => GET-WARENUM-AT-POS-IN-THIS-PAGE => >N10 )) (( N1 ; N3 => COMPRESS-CATALOGUE )) (( N2 ; N1 => INTGREATER (MATCHED (( DECN2 )) MATCHED) )) (( N10 ; N2 ; N3 => EXPAND-CATALOGUE )) (( && )) )) OK) (LET VIEW-MODIFY-THIS-PAGE BE (( >N4 )) (( (( WARE-CATALOGUE >>> => & )) (( GOLABEL2: )) (( CLS )) (( }VIEW/MODIFY CATALOGUE PAGE } ; N4 => CONCAT ; }:} => CONCAT ; 10 ; 10 => B9-POP )) (( N4 => QUANTITY-IN-THIS-NETSHOPPAGE => >N6 )) (( }QUANTITY HERE: } ; N6 => CONCAT ; 400 ; 10 => B9-POP )) (( }FOCUS WARENUM: } ; PRESENT-WARENUM >>> => CONCAT ; 750 ; 10 => B9-POP )) (( N6 (COUNT (( N1 ; }:} => CONCAT ; N1 ; N6 => GET-WARENUM-AT-POS-IN-THIS-PAGE => CONCAT ; (( N1 ; 5 => MOD ; 170 => MUL ; 20 => ADD )) ; (( N1 ; 5 => DIV ; 25 => MUL ; 35 => ADD )) => B9-POP )) COUNTUP) )) (( N6 ; 1 => INTGREATER (MATCHED (( }Indicate 1..} ; N6 => CONCAT ; } which you want to move (or press ENTER to keep as is):} => CONCAT ; 10 ; 715 => B9-POP )) (( }THEN: tell where 1..} ; N6 => INC => CONCAT ; } we should push in fresh space for this ware:} => CONCAT ; 10 ; 740 => B9-POP )) (( 2 ; 970 ; 715 => B9-READLN => >N11 )) (( N11 ; 1 ; N6 => WITH (MATCHED (( N11 ; N4 => GET-WARENUM-AT-POS-IN-THIS-PAGE PRESENT-WARENUM <>> => CONCAT ; }, to see its text press ENTER 3 times, then use menu 3.} => CONCAT ; 10 ; 650 => B9-POP )) (( 2 ; 970 ; 740 => B9-READLN => >N10 )) (( (( N10 ; N6 => INC => EQN ; N11 ; N6 => EQN => AND => NOT )) ; N10 ; 1 ; N6 => INC => WITH ; N10 ; N11 => NOT_INTEQUAL => TRIPLEAND (MATCHED (( N11 ; N10 ; N4 => MOVE-TO-NEW-POS-IN-NETSHOPPAGE )) (( MH-SHOULD-SAVE )) MATCHED) )) (( GOUP2 )) MATCHED) )) )(OTHER (( 200 ; 600 => B9-ENTERPLS )) MATCHED) )) (( CLS )) (( && )) )) OK) (LET MAKEHTM-ACTION-8 BE (( )) (( (( GOLABEL3: )) (( }VIEW/MODIFY SEQUENCE OF WARES ON A NET CATALOGUE PAGE:} ; 50 ; 100 => B9-POP )) (( }Indicate page number to view/modify (or ENTER for menu): } ; 50 ; 200 => B9-POP )) (( }A good idea to regularly check quantity of wares on the } ; 50 ; 400 => B9-POP )) (( }pages -- so that newly typed in wares indeed do fit in there. } ; 50 ; 450 => B9-POP )) (( }These limits presently apply (can be modified in program):} ; 50 ; 500 => B9-POP )) (( }Max amount pages: } ; MAX-QTY-PAGES >>> => CONCAT ; } Max amount wares pr page: } => CONCAT ; MAX-QTY-WARES-PR-PAGE >>> => CONCAT ; 50 ; 550 => B9-POP )) (( }Max amount waretypes (each numbered } ; MIN-WARENUM >>> => CONCAT ; }..} => CONCAT ; MAX-WARENUM >>> => CONCAT ; }): } => CONCAT ; MAX-QTY-WARES >>> => CONCAT ; 50 ; 600 => B9-POP )) (( }Note: On this menu, only the SEQUENCE WITHIN A PAGE is changed.} ; 50 ; 680 => B9-POP )) (( }To relocate a ware from one page to another, use menu point 3.} ; 50 ; 705 => B9-POP )) (( 2 ; 900 ; 200 => B9-READLN => HEAL => >N5 )) (( N5 => ISBASIS = EXIT === )) (( N5 ; 1 ; MAX-QTY-PAGES >>> => SET-RANGE => >N5 )) (( N5 => VIEW-MODIFY-THIS-PAGE )) (( GOUP3 )) )) OK) (LET MODIFY-CURRENCY-CHOICES BE (( )) (( (( }These currency texts, as relevant, will appear together with} ; 50 ; 175 => B9-POP )) (( }the first, second and third price, and also delivery prices,} ; 50 ; 200 => B9-POP )) (( }listed for a ware -- in each case of a nonzero price field.} ; 50 ; 225 => B9-POP )) (( }Depending on your netshop, it may be most relevant to display} ; 50 ; 250 => B9-POP )) (( }price in terms of only one or two currencies (be consistent).} ; 50 ; 275 => B9-POP )) (( }In choice of digits, your prices should be goodlooking, and so} ; 50 ; 300 => B9-POP )) (( }it is suggested you manually set every price in the ware database.} ; 50 ; 325 => B9-POP )) (( }With currency variations, more prices pr ware means more updates.} ; 50 ; 350 => B9-POP )) (( GOLABEL4: )) (( }Currency text 1: "} ; MH-CURRENCY-1 => VARSTR> => CONCAT ; :" => CONCAT ; 50 ; 375 => B9-POP )) (( }Currency text 2: "} ; MH-CURRENCY-2 => VARSTR> => CONCAT ; :" => CONCAT ; 50 ; 400 => B9-POP )) (( }Currency text 3: "} ; MH-CURRENCY-3 => VARSTR> => CONCAT ; :" => CONCAT ; 50 ; 425 => B9-POP )) (( }CHANGE (1, 2, 3=CHANGE, or lineshift for main menu):} ; 50 ; 450 => B9-POP )) (( 1 ; 950 ; 450 => B9-READLN => >N1 )) (( N1 => ISBASIS = EXIT === )) (( N1 ; 1 ; 3 => SET-RANGE => >N1 )) (( }Text for #} ; N1 => CONCAT ; }:} => CONCAT ; 50 ; 475 => B9-POP )) (( 30 ; 380 ; 475 => B9-READLN ; )) (( ; => ONE => RMBL => TOLEN => ISBASIS (MATCHED (( ; RM )) (( }USD} )) MATCHED) )) (( ; N1 ; 1 => EQ = ; MH-CURRENCY-1 => >VARSTR )) (( == ; N1 ; 2 => EQ = ; MH-CURRENCY-2 => >VARSTR )) (( == ; MH-CURRENCY-3 => >VARSTR )) (( === === )) (( MH-SHOULD-SAVE )) (( CLS )) (( GOUP4 )) )) OK) (LET ADJUST-HOW-MANY-PAGES BE (( )) (( (( CLS )) (( } highest page# } ; GET-MAX-USED-PAGENUM => CONCAT ; 10 ; 10 => B9-POP )) (( }SET NEW VALUE FOR HIGHEST PAGENUMBER:} ; 10 ; 100 => B9-POP )) (( }-- NOTE THAT THIS CANNOT DELETE ANYTHING.} ; 10 ; 125 => B9-POP )) (( }IT SIMPLY TELLS THE PROGRAM HOW MANY PAGES} ; 10 ; 150 => B9-POP )) (( }TO INCLUDE -- WHETHER THEY HAVE WARES OR NOT} ; 10 ; 175 => B9-POP )) (( }WHEN MAKING THE NET CATALOGUE .HTM PAGES.} ; 10 ; 200 => B9-POP )) (( }Note that this variable is automatically} ; 10 ; 600 => B9-POP )) (( }adjusted by some of the other menu points.} ; 10 ; 630 => B9-POP )) (( 2 ; 888 ; 100 => B9-READLN => HEAL ; 1 ; MAX-QTY-PAGES >>> => SET-RANGE PUT-MAX-USED-PAGENUM )) (( MH-SHOULD-SAVE )) )) OK) (LET MODIFY-PAGE-HEADERS BE (( )) (( (( WARE-CAT-HEADERS >>> => & )) (( }Each page must have a header. When you have more than one page,} 50 ; 175 => B9-POP )) (( }seek to describe each page of wares in a meaningful 1st-hand way.} ; 50 ; 200 => B9-POP )) (( GOLABEL1: )) (( GOLABEL3: )) (( }View/modify header for which page? (enter=main menu)} ; 50 ; 225 => B9-POP )) (( }Or type A to adjust QUANTITY OF PAGES SHOWN AT NET.} ; 50 ; 250 => B9-POP )) (( 2 ; 850 ; 225 => B9-READLN ; )) (( ; => ONE => RMBL => TOLEN => ISBASIS = ; RM && ; EXIT === ; )) (( ; => ONE ; }A} => EQ (MATCHED (( ; RM )) (( ADJUST-HOW-MANY-PAGES )) (( GOUP1 )) MATCHED) ; )) (( ; => HEAL => >N1 )) (( N1 ; 1 ; MAX-QTY-PAGES >>> => SET-RANGE => >N1 )) (( GOLABEL4: )) (( }The header for page #} ; N1 => CONCAT ; } is shown.} => CONCAT ; 50 ; 350 => B9-POP )) (( }"} ; N1 ; # => MATR>TEXT => HYPHEN-TO-NIL => CONCAT ; }"} => CONCAT ; 50 ; 275 => B9-POP )) (( }Press lineshift to avoid changing it. Or type new header:} ; 50 ; 300 => B9-POP )) (( 69 ; 50 ; 325 => B9-READLN => LENGTH => >N8 )) (( ; N8 => ISBASIS = ; RM ; CLS ; GOUP3 === ; )) (( ; N1 ; # => HYPHEN-OR-TXT => NEW-TEXT-TO-THIS-LINE )) (( MH-SHOULD-SAVE )) (( N1 ; GET-MAX-USED-PAGENUM => INTGREATER (MATCHED (( N1 => PUT-MAX-USED-PAGENUM )) MATCHED) )) (( CLS )) (( GOUP4 )) (( && )) )) OK) (LET MAKEHTM-ACTION-9 BE (( )) (( (( }VIEW/SET HEADERS OF NET PAGES AND CHOSEN 1..3 CURRENCIES:} ; 100 ; 100 => B9-POP )) (( }Is it the currencies you wish to look into right now?} ; 50 ; 125 => B9-POP )) (( 200 ; 150 => B9-YNIN (MATCHED (( MODIFY-CURRENCY-CHOICES )) )(OTHER (( MODIFY-PAGE-HEADERS )) MATCHED) )) )) OK) (LET MAKEHTM-DO-THIS BE (( >N1 )) (( (( CLS )) (( }MAKEHTM MENU } ; N1 => CONCAT ; } *****} => CONCAT ; 650 ; 5 => B9-POP )) (( }MAKEHTM-ACTION-} ; N1 => CONCAT => ? => HYPERCONNECT )) )) OK) (( LOOKSTK )) (LET MAKEHTM BE (( )) (( (( GJ-ON )) (( }LOADING..} ; 200 ; 400 => B9-POP )) (( 2 PRETTIFY-NUMBER-DECIMALS < SETBASIS )) (( READ-IN-THE-MH-FILES )) (( GET-CURRENCY-CHOICES )) (( GET-QTY-OF-WARES => ISBASIS (MATCHED (( CLS )) (( }GREATEST WELCOME TO MAKEHTM!!! The present files in the} ; 50 ; 100 => B9-POP )) (( }folder used by MAKEHTM seem to be empty as for wares.} ; 50 ; 125 => B9-POP )) (( }If this is one of the first times you start MAKEHTM,} ; 50 ; 150 => B9-POP )) (( }this is of course perfectly in order, as long} ; 50 ; 175 => B9-POP )) (( }as you have created the empty folder (see inside} ; 50 ; 200 => B9-POP )) (( }this program for what it is supposed to be called).} ; 50 ; 225 => B9-POP )) (( }If, on the other hand, you have files somewhere} ; 50 ; 250 => B9-POP )) (( }else, and want to get them in place before working} ; 50 ; 275 => B9-POP )) (( }with this program, OR if you haven't created the} ; 50 ; 300 => B9-POP )) (( }empty folder, then you should exit this program now.} ; 50 ; 325 => B9-POP )) (( }SO, DO YOU WANT TO START THE MAKEHTM PROGRAM?} ; 50 ; 350 => B9-POP )) (( 250 ; 400 => B9-YNIN => NOT (MATCHED (( GJ-DONE )) (( EXIT )) MATCHED) )) MATCHED) )) (( GOLABEL4: )) (( CLS )) (( }Welcome to this database over wares, services, at a price and free.} ; 50 ; 20 => B9-POP )) (( }Fit to your own netshops. "WARE" can here also mean service!} ; 50 ; 50 => B9-POP )) (( }Please select MAKEHTM database action next, by pressing a number:} ; 50 ; 80 => B9-POP )) (( } 1>>>Add an entirely new ware (incl. service) to database.} ; 50 ; 110 => B9-POP )) (( } 2>>>STORE PRESENT WARE-DATABASE & GENERATE .HTM INTERNET PAGES.} ; 50 ; 140 => B9-POP )) (( } 3>>>View a ware, optionally modify PRICES or its PAGE# AT NET.} ; 50 ; 170 => B9-POP )) (( } 4>>>Modify QUANTITY or DESCRIPTION of one or more existing wares.} ; 50 ; 200 => B9-POP )) (( } 5>>>Modify DELIVERY PRICES ETC of one or more existing wares.} ; 50 ; 230 => B9-POP )) (( } 6>>>Modify NAME OF IMAGE-FILE of one or more existing wares.} ; 50 ; 260 => B9-POP )) (( } 7>>>delete a ware record in the db, and release the warenumber.} ; 50 ; 290 => B9-POP )) (( } 8>>>View/modify SEQUENCE OF WARES AT A NET CATALOGUE PAGE.} ; 50 ; 320 => B9-POP )) (( } 9>>>IMPORTANT: SET PAGE HEADINGS, QTY PAGES SHOWN, CURRENCIES.} ; 50 ; 350 => B9-POP )) (( } [[[ qty in db: } ; GET-QTY-OF-WARES => CONCAT ; } highest page# } => CONCAT ; GET-MAX-USED-PAGENUM => CONCAT ; } PRESENT WARE# } => CONCAT ; PRESENT-WARENUM >>> => CONCAT ; } ]]]} => CONCAT ; 50 ; 380 => B9-POP )) (( }***Remember press 2 to STORE before you exit with ESC} ; 50 ; 425 => B9-POP )) (( }***when you are satisfied with changes and want .HTM net files} ; 50 ; 450 => B9-POP )) (( }***made. Then call on FTP to move the .HTM files towards the net.} ; 50 ; 475 => B9-POP )) (( }***Name your image files in a clearcut easy way to spell correct.} ; 50 ; 500 => B9-POP )) (( }***Check, on net, that each modified ware has the right image.} ; 50 ; 525 => B9-POP )) (( }***When you modify image of a ware, do pls change the image-name,} ; 50 ; 550 => B9-POP )) (( }***to push browsers to read the new image into their storage!} ; 50 ; 575 => B9-POP )) (( }***In any case, after uploading the new catalogue to the net,} 50 ; 600 => B9-POP )) (( }***wait a minute then, in the browser, press CTR-R to refresh.} ; 50 ; 625 => B9-POP )) (( }This program is adapted for each company with unique net layout.} ; 50 ; 650 => B9-POP )) (( }TAILORFITTED TO: } ; THIS-PROGRAM-TAILORFITTED-TO => VARSTR> => CONCAT ; 50 ; 675 => B9-POP )) (( }Your MAKEHTM menu selection, please?} ; 50 ; 720 => B9-POP )) (( KEYNUM => >N1 )) (( N1 ; KEY-ESC >>> => EQN = GOFORWARD3 === )) (( N1 ; 48 => SUB => >N5 )) (( N5 ; 1 ; 9 => WITH = N5 => MAKEHTM-DO-THIS === )) (( GOUP4 )) (( GOLABEL3: )) (( ANY-MHDB-CHANGES-YET => VISDANCE (MATCHED (( CLS )) (( MANUAL-CLEAR-KEYBUF )) (( }DO YOU APPROVE OF THE CHANGES? For you might have made some} ; 50 ; 90 => B9-POP )) (( }changes to your MAKEHTM ware database or its net page layout.} ; 50 ; 120 => B9-POP )) (( }****==>DO YOU WANT TO PUT THESE TO DISK? (If you answer Y} ; 50 ; 150 => B9-POP )) (( }or just press lineshift, menu option #2 will run,} ; 50 ; 180 => B9-POP )) (( }but if you answer N, program will exit). BE SURE!!! ;)} ; 50 ; 210 => B9-POP )) (( 200 ; 450 ; B9-YNIN (MATCHED (( 2 => MAKEHTM-DO-THIS )) MATCHED) )) MATCHED) )) (( GJ-DONE )) )) OK) (( LOOKSTK )) (( }YOUR COMPANY} ; THIS-PROGRAM-TAILORFITTED-TO => >VARSTR )) (LET AUTOSTART BE MAKEHTM OK)