10 REM **** MENINGSL\SA MENINGAR **** 11 REM * * 12 REM * MICHAEL WIDENIUS 13-6-1980 * 13 REM * * 14 REM ****************************** 15 REM 16 REM 17 REM UPPGIFTER : 18 REM B=ANTAL BOKST[VER I TESTEN 19 REM M=MENINGARNAS ANTAL 20 REM C=ANTALET OLIKA KOMBINATIONER 21 REM C$( ) =BOKSTAVSKOMBINATIONERNA 22 REM C(--) =ANTAL C$(--) I 23 REM A$( ) =TEXTEN 24 REM C1(-) =ORDNINGSNUMRET F\R C$(-) 25 REM C2(-) =SORTERINGS-HJ[LPVEKTOR 26 REM C1 =MINSTA ORDNINGSNUMRET 27 REM 28 COMMON Meny$=16%,Qwerty$=16%,Highcolour%,Rambuffer%,Qwerty1%,Qwerty2%,Qwerty3% 29 RANDOMIZE 30 DIM A$=200%,In$=160% 31 REM 32 REM *** INSTRUKTIONER *** 33 REM 34 ; CHR$(12%) RED DBLE TAB(16%) "MENINGAR" 35 ; : ; : ; 36 ; "Har du n}gonsin undrat hur ditt spr}k" 37 ; "l}ter i en utl{nnings |ron ?" 38 ; "Nu har du en m|jighet att f} h|ra" 39 ; "(egentligen l{sa) hur det l}ter." 40 ; 41 ; "Du skall nu skriva en kort text och" 42 ; "med den som utg}ngspunkt s{tter" 43 ; "jag upp en analys och konstruerar" 44 ; '"nya" meningar.' 45 ; 46 ; "N{r du skriver beakta f|ljande:" 47 ; 48 ; "-" CYA "Kom ih}g punkten efter varje mening !" 49 ; "-" CYA "Ju mera variationshaltig text desto" 50 ; CYA " b{ttre resultat." 51 ; "-" CYA "Texten b|r vara min" RED "40" CYA "ord !" 52 ; "-" CYA "OBS!" RED "TIDEN" CYA "beror p} meningarnas antal." 53 ; "-" CYA 'Sluta texten med raden' GRN '"SLUT"' CYA "." 54 GET A$ : IF ASCII(A$)=231% THEN 168 55 ; : ; 56 ; "-" YEL "Hj{lpkommandon vid filhantering:" 57 ; 58 ; GRN "PF1" WHT "- Skriv." 59 ; GRN "PF2" WHT "- L{ser en ascii-fil." 60 ; GRN "PF3" WHT "- L{ser en datafil." 61 ; GRN "PF4" WHT "- Skriver data till en datafil." 62 ! 63 ! 64 ; SPACE$(40%*10%) 65 ON ERROR GOTO 174 66 ; CUR(17%,0%) "Hur m}nga bokst{ver skall analysen" 67 INPUT "anv{nda ( 2-5 )? "B% 68 IF B%>5% OR B%<2% THEN 66 69 ; CUR(20%,0%); 70 INPUT "Hur m}nga meningar skall bildas ?"M% 71 IF M%<1% OR M%>10% THEN 69 72 ON ERROR GOTO 73 REM 74 REM *** DIMENSIONERINGEN *** 75 REM 76 ! 77 D%=900% : D1%=24% : L{ngd%=90% ! MAX ANTAL 78 DIM C$(D%+1%)=5%,C%(D%),C1%(D%),C2%(D%) 79 DIM A$(D1%)=L{ngd% 80 C$=SPACE$(B%-1%) : C%=-1% : Flg%=0% 81 Carry$=C$ : A1%=0% 82 Error$=CHR$(192%,193%,194%,195%,199%) 83 ! 84 REM 85 REM *** GE MENINGARNA *** 86 REM 87 ; CHR$(12%) CYA "F|rfattandet kan nu b|rja:" 88 ; : ; 89 ! 90 Flag%=0% 91 FOR I%=0% TO D1%-1% 92 ON ERROR GOTO 174 93 INPUT LINE A$ 94 ON ERROR GOTO 95 A$=FNRad$(A$) 96 IF LEN(A$)>90% THEN A$(I%)=LEFT$(A$,85%) : A$=RIGHT$(A$,86%) : I%=I%+1% 97 A$(I%)=A$ 98 IF A$(I%)="SLUT" THEN 103 99 ; 100 NEXT I% 101 Flag%=-1% : A%=I%-1% 102 ; YEL "V[NTA ETT \GONBLICK"; : GOTO 105 103 A%=I%-1% 104 ; CHR$(12%) RED DBLE "Ta't lugnt" BLU "- Jag sorterar data !" 105 REM 106 REM *** STR[NGARNA ORDNAS *** 107 REM *** EFTER STORLEK *** 108 REM 109 FOR I%=0% TO A% 110 IF FNLagrakod%(A$(I%)) THEN 185 111 NEXT I% 112 IF Flag% OR C%<30% THEN ; CHR$(13%) SPACE$(39%) CHR$(13%,7%); : GOTO 90 113 ! 114 GOSUB 263 ! SORTERINGEN 115 C$(C%+1%)=STRING$(B%,127%) ! KONTRL 116 REM 117 REM *** B|rja bilda meningar *** 118 REM 119 ; CHR$(12%) "TYSTNAD P]BJUDES" MAG "-JAG BILDAR MENINGARNA!" 120 ; CUR(5%,0%); 121 FOR I%=1% TO M% 122 ; CHR$(13%) CYA "Sats nummer" I% "av" M% "bildas."; 123 A$(I%)=C$ 124 A$=RIGHT$(A$(I%),LEN(A$(I%))-B%+2%) 125 A%=FNS|k%(A$) 126 A1%=A% : S%=0% 127 WHILE LEFT$(C$(A%),B%-1%)=A$ 128 S%=S%+C%(A%) : A%=A%+1% 129 WEND 130 S%=INT(RND*S%)+1% 131 S%=S%-C%(A1%) : IF S%>0% THEN A1%=A1%+1% : GOTO 131 132 A$=RIGHT$(C$(A1%),B%) : IF A$="." AND LEN(A$(I%))<5% THEN 123 133 A$(I%)=A$(I%)+A$ : IF A$="." THEN 135 134 A%=LEN(A$(I%)) : IF A%<88% OR A$<>" " AND A%<71% THEN 124 135 NEXT I% 136 REM 137 REM *** [NTLIGEN F[RDIG *** 138 REM 139 IF Flag% THEN 142 140 ; " - F[RDIG??"; : GET A$ 141 IF ASCII(A$)=223% THEN 168 142 ; CHR$(12%) CYA "... och resultatet blev: " 143 Flag%=0% 144 ; : ; 145 FOR I%=1% TO M% 146 IF ASCII(A$(I%))=32% THEN A$(I%)=RIGHT$(A$(I%),2%) : GOTO 146 147 IF LEN(A$(I%))<40% THEN 151 148 FOR I1%=39% TO 5% STEP -1% 149 IF MID$(A$(I%),I1%,1%)<>" " THEN NEXT I1% 150 ; LEFT$(A$(I%),I1%) : A$(I%)=RIGHT$(A$(I%),I1%+1%) : GOTO 147 151 ; A$(I%) : NEXT I% 152 ; CUR(22%,0%); 153 IF C%=-1% THEN 87 ! INGA DATA 154 ON ERROR GOTO 174 155 INPUT "Vill du ha n}gra meningar till (J)? "A$ 156 IF (ASCII(A$) AND 95%)=78% THEN 167 157 ; CUR(22%,0%) SPACE$(70%) CUR(22%,0%); 158 INPUT "Hur m}nga nya meningar (10)? "A$ 159 IF A$="" THEN A$="10" 160 M%=VAL(A$) : IF M%<1% OR M%>10% THEN 158 161 REM 162 REM *** SLUT *** 163 REM 164 ; CUR(22%,0%) SPACE$(70%) CUR(22%,0%); 165 ON ERROR GOTO 166 GOTO 121 167 ; CUR(22%,0%) SPACE$(70%) CUR(22%,0%); 168 ON ERROR GOTO 170 169 CHAIN Meny$ 170 END 171 REM 172 REM *** ERRORHANTERINGEN *** 173 REM 174 IF ERRCODE<>53% THEN 181 175 Skr%=SYS(6%) : GET A$ 176 IF ASCII(A$)=231% RESUME 168 177 IF ASCII(A$)=198% THEN Skr%=FNRutlist%("MENINGAR",2%) 178 Skr%=INSTR(1%,Error$,A$) 179 IF Skr%=0% THEN 181 180 ON Skr% RESUME 87,194,220,244,152 181 ; CHR$(7%,13%); : A$="-1" 182 RESUME 183 ! 184 ! 185 ; CHR$(12%) RED "JAG BEKLAGAR ..." 186 ; STRING$(10%,7%); : ; : ; 187 ; CYA "- ANTALET BOKSTAVSKOMBINATIONER" 188 ; CYA " [R FLER EN JAG KAN KLARA AV (" YEL;NUM$(D%) CYA ")." 189 ; : ; 190 END 191 REM 192 REM *** L[SER EN ASCII-FIL *** 193 REM 194 ; CHR$(12%) RED DBLE TAB(16%) "MENINGAR" 195 ; : ; 196 ; TAB(7%) CYA "L[SER TEXTEN FR]N SKIVA" 197 ; CUR(7%,0%); 198 ON ERROR GOTO 174 199 INPUT " GE NAMNET F] FILEN: "A$ 200 ; SPACE$(40%*2%); 201 ON ERROR GOTO 213 202 OPEN A$ AS FILE 1% 203 ; CYA "Och filen inneh}ller ...." 204 ; 205 FOR I%=0% TO D1% 206 INPUT LINE #1%,A$ 207 ; A$; 208 IF FNLagrakod%(FNRad$(A$)) THEN 210 209 NEXT I% 210 CLOSE 211 ; CHR$(12%) CYA "... klart. Du kan forts{tta skriva:" 212 GOTO 88 ! RETURN 213 IF ERRCODE=34% RESUME 210 214 ; : ; : ; RED CHR$(7%) "ERROR" ERRCODE " !!"; 215 GET A$ 216 RESUME 194 217 REM 218 REM *** L[SER DATA FR]N FIL *** 219 REM 220 ; CHR$(12%) RED DBLE TAB(16%) "MENINGAR" 221 ; : ; 222 ; TAB(8%) CYA "L[SER DATA FR]N SKIVA" 223 ; TAB(2%) RED "OBS!" CYA "- ALLT GAMMALT DATA F\RST\RS" 224 ; CUR(8%,0%); 225 ON ERROR GOTO 174 226 INPUT "GE NAMNET F] FILEN: "A$ 227 ; SPACE$(2%*40%); 228 ON ERROR GOTO 238 229 OPEN A$ AS FILE 1% 230 FOR I%=0% TO D% 231 INPUT #1%,C$(I%),C%(I%) 232 C1%(I%)=I% 233 NEXT I% 234 B%=LEN(C$(0%)) : C$=SPACE$(B%-1%) 235 C%=I%-1% : C1%=0% 236 CLOSE 237 GOTO 152 ! RETURN 238 IF ERRCODE=34% RESUME 234 239 ; CUR(10%,0%) RED CHR$(7%) "ERROR" ERRCODE " !!" 240 RESUME 224 241 REM 242 REM *** SKRIVER DATA TILL FIL *** 243 REM 244 ; CHR$(12%) RED DBLE TAB(16%) "MENINGAR" 245 ; : ; 246 ; TAB(7%) CYA "SKRIVER DATA P] SKIVAN" 247 ; CUR(7%,0%); 248 ON ERROR GOTO 174 249 INPUT " GE NAMNET F] FILEN: "A$ 250 ; SPACE$(2%*40%); 251 ON ERROR GOTO 258 252 PREPARE A$ AS FILE 1% 253 FOR I%=0% TO C% 254 PRINT #1%,'"'+C$(I%)+'",';C%(I%) 255 NEXT I% 256 CLOSE 257 GOTO 152 ! RETURN 258 ; CUR(9%,0%) "RED CHR$(7) " Error% " ERRCODE " ! !" 259 RESUME 247 260 REM 261 REM *** SORTERINGEN *** 262 REM 263 FOR I%=0% TO C% 264 C2%(C1%)=I% : C1%=C1%(C1%) 265 NEXT I% 266 ! C2(X)=Y ANGER ATT X:TE ORDKOMB. 267 ! SKALL LIGGA P] PLATS Y EFTER SORTERINGEN 268 Plats%=0% 269 WHILE Plats%<>C% 270 A$=C$(Plats%) : A%=C%(Plats%) : L{ge%=C2%(Plats%) 271 WHILE L{ge%<>Plats% 272 S$=C$(L{ge%) : C$(L{ge%)=A$ : A$=S$ 273 S%=C%(L{ge%) : C%(L{ge%)=A% : A%=S% 274 Skr%=L{ge% : L{ge%=C2%(L{ge%) : C2%(Skr%)=Skr% 275 WEND 276 C$(Plats%)=A$ : C%(Plats%)=A% : Plats%=Plats%+1% 277 WEND 278 FOR I%=0% TO C% : C1%(I%)=I% : NEXT I% : C1%=0% 279 RETURN 280 REM 281 REM *** FUNKTIONERNA *** 282 REM 283 DEF FNRad$(In$) LOCAL A$=200 284 A$=LEFT$(In$,LEN(In$)-2%) 285 ! *** FINNS DET "." -er ? *** 286 IF A1% THEN A$=C$+" "+A$ 287 A1%=INSTR(A1%,A$,".") 288 IF A1% AND A1%<>LEN(A$) THEN A$=LEFT$(A$,A1%)+C$+RIGHT$(A$,A1%+1%) : A1%=A1%+1% : GOTO 287 289 RETURN A$ 290 FNEND 291 ! 292 ! 293 DEF FNS|k%(C$) LOCAL Min%,S%,Max% 294 Min%=0% : Max%=C% 295 WHILE Min%<>Max% 296 S%=(Min%+Max%)/2% 297 IF C$>C$(S%) THEN Min%=S%+1% ELSE Max%=S% 298 WEND 299 RETURN Min% 300 FNEND 301 ! 302 ! 303 DEF FNLagrakod%(In$) LOCAL A$=200,B$=200,A%,A1% 304 B$=Carry$+In$ 305 FOR T%=1% TO LEN(In$) 306 A$=LEFT$(B$,B%) 307 A%=C1% : A1%=-1% 308 FOR T1%=0% TO C% 309 IF A$-1% THEN C1%(A1%)=C% ELSE C1%=C% 315 IF C%=D% RETURN -1% 316 B$=RIGHT$(B$,2%) 317 NEXT T% 318 Carry$=B$ 319 RETURN 0% 320 FNEND 321 ! 322 ! 323 DEF FNRutlist%(Rubrik$,Storlek%) LOCAL Grafik%,Output$=132,A$=40,A%,A1%,A2%,I% 324 A$=SPACE$(20%*(Storlek%-1%)-(Storlek%=3% AND 6%)) 325 A%=31744% : I%=0% ! START 326 OPEN "PR:VSA50D72.5" AS FILE 1% 327 IF Rubrik$<>"" ; #1%,CHR$(31%) TAB(20%-LEN(Rubrik$)/2%) Rubrik$ CHR$(10%,10%) 328 ; #1%,CHR$(27%,54%,32%-Storlek%) 329 IF Storlek%=3% THEN ; #1%,CHR$(27%,56%) ! H\JDEN 330 WHILE I%<24% 331 Grafik%=0% : Output$=A$ : I%=I%+1% : A2%=A%+40% 332 WHILE A%16% AND A1%<24% THEN Grafik%=128% 335 IF A1%<>0% AND A1%<8% THEN Grafik%=0% 336 IF A1%<32% THEN A1%=32% 337 IF Grafik%=0% OR A1%=32% OR A1%>63% AND A1%<96% THEN 340 338 A1%=A1%-(A1%<64% AND 32%)+Grafik% 339 ! A1=A1 XOR 63 ! INVERS 340 Output$=Output$+CHR$(A1%) : A%=A%+1% 341 WEND 342 A%=A%+88% : IF A%<1% THEN A%=A%-984% 343 A2%=LEN(Output$) 344 WHILE A2%<>1% AND MID$(Output$,A2%,1%)=" " : A2%=A2%-1% : WEND 345 IF A2%<>1% ; #1%,LEFT$(Output$,A2%) ELSE ; #1% 346 WEND 347 ; #1% 348 ; #1% "- ANALYSEN [R GJORD P] BASEN AV" B% "BOKST[VER" 349 ; #1% "- OCH DEN HAR" C% "BOKSTAVSKOMBINATIONER LAGRADE." 350 ; #1%,CHR$(15%,30%,27%,54%) STRING$(6%,10%) 351 CLOSE 1% 352 RETURN 0% 353 FNEND