Editor di linee (altro testo qui)


9

Negli anni nebbiosi di un tempo, quando i terminali a ventaglio camminavano sulla terra, viveva una strana creatura. Stranamente paralizzato e tuttavia stranamente potente, l'editore di linea brulicava nel panorama della programmazione in numeri indicibili; coprendo la terra a perdita d'occhio.

Ora è caduto in tempi difficili. Quella vasta popolazione cacciava, perseguitava e spingeva sull'orlo dell'estinzione. Rimangono solo pochi esemplari, la maggior parte in gabbie anguste e non abbellite nel tipo di zoo meno illuminato, anche se alcuni esempi di animali imbalsamati e montati possono essere visti nei musei di acque arretrate. Oh, e c'è ed.

Simile a Frankenstein, risorgeremo la nobile bestia!

comandi

Il nostro editor è abbastanza minimale e supporterà i seguenti comandi

Mettere a fuoco i comandi in movimento

  • <number>[,<number>]- sposta lo stato attivo sulla riga dichiarata e se il secondo argomento viene dato alla colonna state. Un numero di riga eccessivo ottiene l'ultima riga. Un numero di colonna eccessivo ottiene la fine della riga.
  • ,<number> - passa al numero di colonna sulla riga corrente
  • e - sposta lo stato attivo alla fine del file ma non inizia una nuova riga.
  • b - sposta lo stato attivo all'inizio del file.

Comandi informativi

  • L- Eco il contesto attuale. Vengono stampate le cinque linee centrate sulla linea corrente. Tutte e cinque le righe sono rientrate da un carattere; la riga corrente è contrassegnata da un ">", gli altri da un "". Sotto queste righe viene stampata un'altra riga costituita interamente da spazi tranne un "^" nella colonna corrente (vengono stampate in totale sei righe).
  • l - echo la riga corrente
  • p [[<start>],[<end>]]- Stampa il file dall'inizio alla fine dell'indirizzo. Questi valori predefiniti sono 1 e 0 (la fine del file).

Comandi di modifica dei file

  • A [<text>] - Passa alla riga oltre la fine del file (ovvero inizia una nuova riga) e (eventualmente) aggiungi testo.
  • <return>(da solo) - Inserisci una nuova riga. Quindi a <return> <return>inserisce una nuova riga dopo quella corrente.
  • r <text> - Sostituisce tutto dal focus alla fine della riga con il testo.
  • i [<text>]- inserisce il testo seguito da una nuova riga nel focus corrente. Qualsiasi porzione di questa linea oltre il focus finisce sulla riga successiva.
  • I <text>- inserisce il testo nel focus corrente, preservando il resto della linea. L'attenzione rimane su questa linea.
  • d - Elimina il contenuto della riga corrente o se la riga corrente è già vuota, rimuovi la riga.
  • j - Unisci questa linea alla successiva

Di quest'ultimo gruppo i primi quattro terminano con lo stato attivo che passa alla riga successiva, mentre Ilo stato attivo viene mantenuto alla fine del testo aggiunto. Quando si elimina o si unisce lo stato attivo rimane lo stesso numero di riga e colonna .

L'interpretazione dei numeri di riga nei comandi

I numeri che iniziano con '+' o '-' vengono interpretati come offset dal numero di riga corrente. I numeri senza segno vengono interpretati come numeri di riga assoluti, tranne per il fatto che "0" indica l'ultima riga del file.

Rapido e interazione

L'editor funziona come una shell e il prompt ha la forma in <line>','<column>'>'cui line è il numero di riga, tranne per il fatto che "end" viene utilizzato quando il focus è sull'ultimo carattere del file.

Ogni comando è accettato solo quando l'utente preme newline. E colpisce.

Il supporto di readline è consentito ma non richiesto.

Non viene fornito alcun feedback tranne i valori variabili di e nel prompt, se non indicato esplicitamente nella descrizione dei comandi.

punteggio

Questo è , quindi vince la risposta più breve in ogni lingua.

Un ringraziamento speciale a dmkee per averlo realizzato nella sandbox dove l'ho adottato.


2
Ciao, ho votato a fondo in giù questa sfida perché personalmente trovo che non sia estremamente ben definito, non sia estremamente interessante e abbia anche requisiti di runtime abbastanza rigidi. Ad esempio, molte lingue non sono in grado di eseguire l'I / O in quel modo, come quasi tutte le lingue del golf. Inoltre, il formato dell'intera sfida mi fa chiedere se sia stato progettato per essere adatto a un linguaggio di programmazione specifico. Se puoi spiegarmi perché questa sfida è particolarmente interessante con questi requisiti I / O, ritornerò volentieri al mio voto negativo.
HyperNeutrino,

8
@HyperNeutrino Personalmente non penso che una sfida sia negativa perché le lingue del golf non possono partecipare, ma questa è solo la mia opinione personale, prendila come vuoi. Puoi anche elaborare i requisiti di runtime? Non vedo nulla di pertinente al runtime nella descrizione della domanda
musicman523

3
@HyperNeutrino Se hai avuto problemi hai avuto diversi anni per sollevarli nella sandbox.
Christopher,

1
@ mbomb007 quindi vuoi che il tuo editor di testo non sia interattivo? Questa sfida si basa su cose reali.
Christopher,

2
@ mbomb007 ma questo è un vero pezzo di codice che potrebbe essere usato irl. Quindi il linguaggio pratico funziona meglio
Christopher,

Risposte:


7

C (gcc), 1288 1212 1188 1171 1146 byte

#define P printf(
#define A case
#define B break
#define L(i,e,t,f,s)for(o=i;o e;){strcpy(l[o t],l[o f]);c[o t]=c[s o];}
#define R(m,o){return b<1|b>m?m o:b;}
#define N(f)sscanf(f,"%d,%d",&i,&j)||sscanf(f,",%d",&j)
r,i,j,o,z,c[999],*C,x=1,y=1;char a[999],l[999][999],(*L)[999];D(){L(r,>y,,-1,--)r++?strcpy(l[o],l[o-1]+--x),c[o-1]=x,l[o-1][x]=0:0;c[y++]=strlen(l[o]);x=1;}U(){strcat(*L,l[y]);*C=strlen(*L);L(y+1,<r,-1,,++)--r;*l[r]=c[r]=0;}X(b)R(c[y-1],+1)Y(b)R(r,)main(){for(;;){z=i=y;L=l+--z;C=c+z;j=x;!r||y/r&&x>*C?P"end> "):P"%d,%d> ",y,x);scanf("%[^\n]%*c",a)?a[2]*=!!a[1],N(a)?y=Y(i+(i<0|*a=='+')*y),x=X(j+(j<0||strchr(a+1,'+'))*x):0:(*a=D(),scanf("%*c"));switch(*a){A'e':y=r;x=c[r-1]+1;B;A'b':y=1;x=1;B;A'L':for(o=y-4;++o<y+2;)o<0^o<r&&P"%c%s\n",o^z?' ':'>',l[o]);for(o=x+1;--o;)P" ");P"^\n");B;A'l':puts(*L);B;A'p':i=1;j=0;N(a+2);for(o=Y(i)-1;o<Y(j);++o)puts(l[o]);B;A'A':y=r++;strcpy(l[y],a+2);x=c[y]=strlen(a+2);++x;++y;B;A'i':D();--y;x=X(0);A'r':strcpy(*L+x-1,a+2);*C=strlen(*L);x=1;++y>r&&++r;B;A'I':o=strlen(a+2);memmove(*L+x+o-1,*L+x-1,*C-x+1);*C+=o;memcpy(*L+x-1,a+2,o);x+=o;B;A'd':**L?**L=*C=0,x=1:U();y=y>r?r:y;B;A'j':y<r&&U();}}}

dimostrazione

La prima volta che provo a fare qualcosa del genere, quindi probabilmente ci sono alcune opportunità mancate per ridurlo. (Grazie Jerry Jeremiah per averne sottolineato alcuni)

Ecco una versione (leggermente) più leggibile:

// often used functions/keywords:
#define P printf(
#define A case
#define B break

// loops for copying rows upwards/downwards are similar -> macro
#define L(i,e,t,f,s)for(o=i;o e;){strcpy(l[o t],l[o f]);c[o t]=c[s o];}

// range check for rows/columns is similar -> macro
#define R(m,o){return b<1|b>m?m o:b;}

// checking for numerical input is needed twice (move and print command):
#define N(f)sscanf(f,"%d,%d",&i,&j)||sscanf(f,",%d",&j)

// room for 999 rows with each 999 cols (not specified, should be enough)
// also declare "current line pointers" (*L for data, *C for line length),
// an input buffer (a) and scratch variables
r,i,j,o,z,c[999],*C,x=1,y=1;char a[999],l[999][999],(*L)[999];

// move rows down from current cursor position
D()
{
    L(r,>y,,-1,--)
    r++?strcpy(l[o],l[o-1]+--x),c[o-1]=x,l[o-1][x]=0:0;
    c[y++]=strlen(l[o]);
    x=1;
}

// move rows up, appending uppermost to current line
U()
{
    strcat(*L,l[y]);
    *C=strlen(*L);
    L(y+1,<r,-1,,++)
    --r;
    *l[r]=c[r]=0;
}

// normalize positions, treat 0 as max
X(b)R(c[y-1],+1)
Y(b)R(r,)

main()
{
    for(;;)
    {
        // initialize z as current line index, the current line pointers,
        // i and j for default values of positioning
        z=i=y;L=l+--z;C=c+z;j=x;

        // prompt:
        !r||y/r&&x>*C?P"end> "):P"%d,%d> ",y,x);

        // read a line of input (using scanf so we don't need an include)
        scanf("%[^\n]%*c",a)?

        // no command arguments -> make check easier:
        a[2]*=!!a[1],

        // numerical input -> have move command:
        // calculate new coordinates, checking for "relative"
        N(a)?y=Y(i+(i<0|*a=='+')*y),x=X(j+(j<0||strchr(a+1,'+'))*x):0:

        // check for empty input, read single newline and perform <return> command:
        (*a=D(),scanf("%*c"));

        switch(*a)
        {
            A'e':y=r;x=c[r-1]+1;B;
            A'b':y=1;x=1;B;
            A'L':for(o=y-4;++o<y+2;)o<0^o<r&&P"%c%s\n",o^z?' ':'>',l[o]);for(o=x+1;--o;)P" ");P"^\n");B;
            A'l':puts(*L);B;
            A'p':i=1;j=0;N(a+2);for(o=Y(i)-1;o<Y(j);++o)puts(l[o]);B;
            A'A':y=r++;strcpy(l[y],a+2);x=c[y]=strlen(a+2);++x;++y;B;
            A'i':D();--y;x=X(0);
            // Commands i and r are very similar -> fall through from i to r
            // after moving rows down and setting position at end of line:
            A'r':strcpy(*L+x-1,a+2);*C=strlen(*L);x=1;++y>r&&++r;B;
            A'I':o=strlen(a+2);memmove(*L+x+o-1,*L+x-1,*C-x+1);*C+=o;memcpy(*L+x-1,a+2,o);x+=o;B;
            A'd':**L?**L=*C=0,x=1:U();y=y>r?r:y;B;
            A'j':y<r&&U();
        }
    }
}

Questa sfida lascia un sacco di casi angolari da esplorare - credo di aver risolto tutti i bug ormai, ma se qualcuno ne trova uno in più, per favore commenta. Per quanto riguarda le revisioni, ho rimosso i conteggi dei byte per le versioni precedenti che contenevano bug sottili.


Nella parte Ddopo il ciclo, penso che è possibile risparmiare byte sostituendo i riferimenti per o-1e ocon o, --o, o, o, ++o. Inoltre, puoi fare cose simili con xnella stessa area.
CalcolatriceFeline

@CalculatorFeline grazie per il suggerimento, devo controllare. Penso che a --oper il primo o-1qui sarebbe UB perché non è seguito con un altro accesso di o:(
Felix Palmen,

UB è consentito. Prova anche [questo] (tio.run).
CalcolatriceFeline

@CalculatorFeline certo, pensavo di sì, solo questi problemi di sequenziamento potrebbero cambiare anche tra le versioni del compilatore: o dovrei semplicemente aggiungere una versione esplicita? E per il tuo link, grazie, ma non credo che supporti i programmi interattivi?
Felix Palmen,

Sfortunatamente no. Tuttavia, è possibile utilizzare sequenze di input prespecificate. Può essere conveniente per i test.
CalcolatriceFeline

5

AWK , 747 807 829 807 byte

func d(D){if(D>0){for(;D<NR;)f[D++]=f[D+1];NR--}else{for(c=NR;x>-D;x--)f[x+1]=f[x];NR++}}
{f[r=NR]=$0}
END{while(1){printf"%s,%d>",r==NR?"end":r,c
getline v<"-"
split("  >  ",l,"")
if(v=="e")r=NR
if(v=="b")r=1
if(v=="L"){for(i=-2;i<3;i++)print l[i+3] f[r+i];printf"%"c+1"s\n","^"}if(v=="l")print f[r]
if(v=="d")z=f[r]=""?d(r):f[r]=""
if(v=="j"){f[r]=f[r] f[r+1];d(r+1)}
S=index(v," ")
z=S?substr(v,S+1):v
a=substr(v,1,1)
n=split(z,N,",")
x=N[1]~/[-+].*/?r+N[1]:N[1]
y=N[2]~/[-+].*/?c+N[2]:N[2]
if(!S&&v~/[0-9+-,]+.*/){r=x?x>NR?NR:x:x=="0"?NR:r
C=length(f[r])
c=n>1?y>C?C:y:c}
if(a=="p")for(i=x?x:1;i<=(y?y:NR);)print f[i++]
if(a=="r"||a=="i"||a=="I"){k=substr(f[r],c)
if(a=="i"){if(c<length(f[r])){d(-r-1);f[r+1]=k}f[r]=substr(f[r],1,c) z (a=="I"?k:"")}if(a="a"||a=="A"){if(a=="A")r=NR;r=r+1;d(r);f[r]=z}}}}

Provalo online!

La rimozione di elses rende le linee un po 'più brevi / leggibili ma l'assegnazione del cursore è un po' più complicata.

Solo per le risatine, ho creato una versione per aggiungere un po 'più di "funzionalità":

q chiude il programma

w <outfile[defaults to input file]> scrive le modifiche.

Provalo online!


1
Non ottenere un cursore per la posizione della colonna con il Lcomando qui ...
Felix Palmen,

Ah. Non ho visto questo requisito. Grazie per aver scoperto che @FelixPalmen
Robert Benson il

1
Lavora adesso! Vedo anche alcuni requisiti interpretati diversamente dalla mia soluzione, forse la sfida dovrebbe essere più precisa qui ...
Felix Palmen,

1
il mio indice dei caratteri in una riga è basato su 1, tu usi la base 0. La posizione EOF nel mio programma è una dopo l'ultimo carattere dell'ultima riga, nel tuo programma è il primo carattere della riga dopo l'ultima riga. La mia richiesta mostra solo end>nella posizione EOF, la tua mostra end,[col]>nell'ultima riga. entrambi non sono esattamente ciò che è specificato immagino ...
Felix Palmen,

1
Quelli furono sicuramente esclusi dalle specifiche. Forse era intenzionalmente per consentire semplificazioni in diverse lingue?
Robert Benson,

4

6502 Assembly (C64, Caricatore BASIC), 5761 5352 byte

0fOa=49152to50573:rEb:pOa,b:nE:sY49152
1dA162,54,134,1,162,1,134,7,134,8,202,142,0,96,134,251,162,96,134,21,162,128
2dA142,145,2,162,23,142,24,208,166,8,169,0,160,253,32,98,194,32,126,195,32,173
3dA195,166,2,240,103,202,202,16,2,162,0,142,160,191,173,162,191,201,69,240,93
4dA201,66,240,95,201,204,240,97,201,76,240,96,201,80,240,100,201,193,240,99,201
5dA73,240,123,201,82,240,122,201,201,240,121,201,68,240,123,201,74,240,122,162
6dA0,32,108,196,165,34,166,251,32,81,194,201,255,240,10,133,8,170,169,0,160,253
7dA32,98,194,160,0,177,253,170,232,165,35,201,255,208,2,165,7,32,81,194,133,7
8dA16,134,32,156,194,76,30,192,169,0,133,35,240,204,169,1,133,35,208,198,76,76
9dA193,166,8,32,198,193,76,30,192,76,233,192,166,251,232,134,251,134,8,169,0
10dA160,253,32,98,194,169,0,168,145,253,200,132,7,32,244,193,76,30,192,76,153
11dA193,76,178,193,32,244,193,76,30,192,76,45,193,32,8,195,76,30,192,166,251
12dA240,249,162,1,134,34,202,134,35,162,2,173,160,191,240,3,32,49,196,165,34
13dA166,251,32,81,194,201,255,208,2,169,1,133,34,166,251,165,35,201,255,208,2
14dA169,0,32,81,194,141,37,193,166,34,32,198,193,166,34,224,255,240,190,232,134
15dA34,208,242,160,0,177,253,208,17,165,8,197,251,208,5,198,8,200,132,7,32,8
16dA195,76,30,192,152,145,253,200,132,7,208,245,166,251,240,70,166,8,160,3,202
17dA240,6,200,202,240,2,200,202,232,140,120,193,142,122,193,228,8,240,7,169,32
18dA32,210,255,208,5,169,62,32,210,255,32,198,193,160,255,162,255,136,240,4,228
19dA251,208,219,169,32,166,7,32,210,255,202,208,250,169,94,32,210,255,169,13,32
20dA210,255,76,30,192,32,156,194,198,8,160,0,177,253,133,7,230,7,32,244,193,230
21dA8,162,1,134,7,76,30,192,160,0,166,7,202,138,145,253,32,244,193,230,8,162,1
22dA134,7,76,30,192,169,193,160,219,32,98,194,174,219,193,232,142,229,193,174
23dA220,193,142,230,193,174,255,255,240,16,142,236,193,160,0,185,255,255,32,210
24dA255,200,192,255,208,245,169,13,76,210,255,165,253,24,101,7,141,38,194,141
25dA57,194,165,254,105,0,141,39,194,141,58,194,173,38,194,109,160,191,141,41
26dA194,173,39,194,105,0,141,42,194,160,0,177,253,56,229,7,48,11,170,24,189,255
27dA255,157,255,255,202,16,247,174,160,191,202,16,1,96,189,164,191,157,255,255
28dA202,16,247,160,0,177,253,24,109,160,191,145,253,165,7,24,109,160,191,133,7
29dA96,141,93,194,201,255,240,9,201,0,240,4,224,255,16,1,138,96,141,154,194,141
30dA146,194,140,153,194,200,140,145,194,202,138,41,7,168,138,74,74,74,170,169,0
31dA24,202,48,4,105,3,144,249,141,161,191,185,129,197,41,3,109,161,191,105,96
32dA141,255,255,185,129,197,41,240,141,255,255,96,166,251,232,134,251,142,172
33dA194,169,195,160,120,32,98,194,162,255,202,142,194,194,228,8,240,16,48,14
34dA169,195,160,117,32,98,194,32,101,195,162,255,16,220,173,120,195,141,244,194
35dA141,235,194,173,121,195,141,245,194,141,236,194,160,0,177,253,141,240,194
36dA198,7,56,229,7,72,165,7,145,253,104,170,142,255,255,240,11,160,255,177,253
37dA157,255,255,136,202,208,247,162,1,134,7,166,8,228,251,240,3,232,134,8,96
38dA166,8,228,251,240,86,232,169,195,160,53,32,98,194,173,53,195,141,39,195,173
39dA54,195,141,40,195,160,0,177,253,174,255,255,240,18,142,48,195,24,105,255
40dA145,253,168,189,255,255,145,253,136,202,208,247,166,8,232,228,251,240,30
41dA142,79,195,169,195,160,120,32,98,194,162,255,232,142,95,195,169,195,160,117
42dA32,98,194,32,101,195,162,255,208,222,198,251,96,173,117,195,141,114,195,173
43dA118,195,141,115,195,174,255,255,189,255,255,157,255,255,202,16,247,96,165,8
44dA197,251,144,22,160,0,177,253,197,7,16,14,162,0,189,137,197,32,210,255,232
45dA224,5,208,245,96,165,8,32,196,196,169,44,32,210,255,165,7,32,196,196,162,3
46dA208,225,162,0,134,2,134,204,32,228,255,240,251,36,21,240,17,166,2,224,30
47dA240,241,32,210,255,157,162,191,232,134,2,16,230,201,13,208,19,169,0,166,2
48dA157,162,191,230,204,169,32,32,210,255,169,13,76,210,255,201,20,208,203,166
49dA2,240,199,32,210,255,202,134,2,16,191,141,11,196,141,22,196,32,117,197,160
50dA0,189,162,191,240,44,201,43,208,7,169,1,133,255,232,208,9,201,45,208,8,169
51dA255,133,255,232,189,162,191,240,19,201,48,48,15,201,58,16,11,153,194,191
52dA232,200,192,3,16,2,48,232,96,142,69,196,160,0,132,25,132,32,136,132,34,132
53dA35,169,25,32,244,195,224,255,240,10,142,81,196,32,31,197,133,34,162,255,189
54dA162,191,201,44,208,18,232,142,99,196,169,32,32,244,195,224,255,240,5,32,31
55dA197,133,35,96,32,49,196,169,1,36,25,240,36,16,21,165,34,197,8,48,6,169,1
56dA133,34,208,22,165,8,56,229,34,133,34,208,13,165,8,24,101,34,133,34,144,4
57dA169,0,133,34,169,1,36,32,240,36,16,21,165,35,197,7,48,6,169,1,133,35,208,22
58dA165,7,56,229,35,133,35,208,13,165,7,24,101,35,133,35,144,4,169,0,133,35,96
59dA32,215,196,162,0,189,194,191,240,3,32,210,255,232,224,3,208,243,96,133,20
60dA32,117,197,162,8,160,2,185,194,191,201,5,48,5,105,2,153,194,191,136,16,241
61dA160,2,165,20,10,133,20,185,194,191,42,201,16,41,15,153,194,191,136,16,242
62dA202,208,215,173,196,191,9,48,141,196,191,160,1,185,194,191,240,8,9,48,153
63dA194,191,136,16,243,96,173,196,191,208,19,173,195,191,141,196,191,173,194
64dA191,141,195,191,169,0,141,194,191,240,232,160,2,185,194,191,240,5,41,207
65dA153,194,191,136,16,243,162,8,160,125,24,185,69,191,144,2,9,16,74,153,69,191
66dA200,16,242,165,20,106,202,208,1,96,133,20,160,2,185,194,191,201,8,48,5,233
67dA3,153,194,191,136,16,241,48,211,169,0,141,194,191,141,195,191,141,196,191
68dA96,0,96,192,33,129,225,66,162,69,78,68,62,32

dimostrazione

Questa voce è solo per divertimento e probabilmente non raggiungerà mai un numero di byte decente. È solo perché la sfida riguarda uno strumento "antico", perché non implementarlo per una macchina antica;)

Guardalo in azione qui

Nel corso della creazione di questa cosa, mi è stato ricordato ancora una volta che il sistema C64 non fornisce alcun modo sensato di convertire tra stringhe e numeri interi - sono coperte solo stringhe e float e questo è ridicolo, quindi questo pezzo di codice contiene proprio routine di conversione. In effetti, le uniche routine del sistema operativo chiamate sono GETIN(leggere un singolo carattere dalla tastiera) e CHROUT(scrivere un singolo carattere sullo schermo).

Ora, assembly è probabilmente la lingua "meno golfy" di sempre. Per come "giocare a golf", la mia idea vista qui è un caricatore BASIC, che scrive i byte del binario finale in una posizione di memoria e salta lì. È un programma BASIC funzionante in questo modo;) Se qualcuno ha un'idea migliore su come giocare a golf, si prega di lasciare un commento!

Il buffer di testo è piuttosto limitato, utilizzando lo spazio tra $6000e $BFFF(la ROM BASIC è disattivata perché non è necessaria) e il programma stesso risiede $C000. Tutto sommato, c'è spazio per 255 linee con 95 caratteri ciascuna e il programma non esegue alcun controllo dei limiti, quindi giocando con esso, assicurati che le tue linee non crescano troppo;)

Infine, cerca qui la fonte leggibile , incluso il mio "strumento di golf".


Poiché si tratta di elementi piuttosto limitati e il C64 può fare di meglio, ecco che arriva la "edizione deluxe" con display a 80 colonne. Per fare questo, Kernal deve essere disattivato, quindi devono essere inclusi elementi di base come un driver della tastiera, un font, una logica di manipolazione bitmap per l'output, la gestione degli interrupt ecc., Quindi è piuttosto una sfida adattarsi a tutto ciò nell'area 4K $C000-$CFFF(e questo è necessario per caricare il programma da un programma BASIC per funzionare).

Alcuni fatti casuali su questa versione:

  • si inserisce nel 4K, ma per poco ... ha ottenuto 6 byte "di riserva" ora 3686 3841 byte;)
  • il caricatore di base è 13743 13385 13963 byte (utilizzato i byte salvati per la nuova funzione "modifica riga")
  • il colore dello schermo e i dati di sprite sono nascosti nella ram "sotto" l'area MMIO $D000-$DFFF
  • Il cursore di testo in stile PC è un "cursore hardware", che utilizza uno sprite
  • la bitmap usa l'area $E000-$FF3F, liberamente accessibile perché il kernal è spento
  • È stato implementato un comando aggiuntivo: qesce dall'editor
  • Funzionalità extra: modifica della riga di comando usando il cursore RIGHTe LEFT, Pos1 ( HOME), End ( SHIFT + HOME) e backspace ( DEL)

Schermata della versione 80col

dimostrazione

Programma per scrivere te stesso, se vuoi una sensazione da computer anni 80:

0fOa=49152to52992:rEb:pOa,b:nE:sY49152
1dA162,2,181,0,157,0,207,232,208,248,173,32,208,133,2,173,33,208,133,3,173,17
2dA208,133,5,120,169,0,141,21,208,169,52,133,1,169,15,162,0,32,67,196,32,96,196
3dA162,127,169,0,157,0,218,202,16,250,169,240,141,18,218,141,21,218,169,104,141
4dA248,223,169,53,133,1,169,25,141,0,208,169,50,141,1,208,169,0,141,16,208,141
5dA29,208,141,23,208,141,28,208,169,1,141,39,208,141,27,208,141,21,208,169,228
6dA141,250,255,169,195,141,251,255,169,0,141,14,221,141,4,221,141,5,221,169,129
7dA141,13,221,169,1,141,14,221,173,0,221,41,252,141,0,221,173,24,208,133,4,32
8dA241,195,32,39,196,169,0,133,6,133,7,141,32,208,88,162,1,134,46,32,156,196
9dA120,32,25,196,173,0,221,9,3,141,0,221,165,4,141,24,208,169,55,133,1,169,1
10dA141,13,221,173,13,221,165,5,141,17,208,165,2,141,32,208,165,3,141,33,208
11dA169,0,141,21,208,162,2,189,0,207,149,0,232,208,248,88,96,133,10,169,0,133
12dA11,165,10,10,38,11,10,38,11,10,38,11,133,10,169,1,24,101,10,133,10,169,203
13dA101,11,133,11,96,169,0,133,9,165,6,10,10,10,10,38,9,10,38,9,10,38,9,133,8
14dA165,9,101,6,105,224,133,9,165,12,10,10,10,144,3,230,9,24,101,8,144,2,230,9
15dA133,8,96,160,224,132,9,200,132,11,160,64,132,10,160,0,132,8,162,50,169,0
16dA168,224,3,48,2,177,10,145,8,200,192,160,208,243,202,240,23,169,159,101,8
17dA133,8,144,3,230,9,24,169,160,101,10,133,10,144,218,230,11,176,214,96,72,132
18dA21,76,199,193,72,132,21,201,13,240,15,201,17,240,30,32,241,193,230,7,160,80
19dA196,7,208,52,160,0,132,7,230,6,160,25,196,6,208,40,198,6,32,59,193,240,33
20dA169,32,164,7,240,5,136,132,7,16,19,160,79,132,7,164,6,240,5,136,132,6,16,6
21dA160,0,132,7,240,3,32,241,193,165,6,10,10,10,105,50,141,1,208,169,0,141,16
22dA208,165,7,10,10,144,4,238,16,208,24,105,24,144,3,238,16,208,141,0,208,32
23dA229,195,104,164,21,96,24,74,176,67,32,235,192,160,7,177,10,41,240,153,13,0
24dA136,16,246,165,7,74,133,12,176,18,32,12,193,160,7,177,8,41,15,25,13,0,145,8
25dA136,16,244,96,32,12,193,160,7,177,8,41,240,74,74,74,74,74,25,13,0,106,106
26dA106,106,145,8,136,16,235,96,32,235,192,160,7,177,10,41,15,153,13,0,136,16
27dA246,165,7,74,133,12,176,25,32,12,193,160,7,177,8,10,10,10,10,10,25,13,0,42
28dA42,42,42,145,8,136,16,237,96,32,12,193,160,7,177,8,41,240,25,13,0,145,8,136
29dA16,244,96,174,113,202,236,114,202,240,11,181,22,202,16,2,162,15,142,113,202
30dA24,96,169,0,133,43,133,38,133,40,169,127,141,0,220,173,1,220,73,255,240,25
31dA170,41,4,240,6,165,43,9,128,133,43,138,41,251,240,9,230,40,32,161,195,105
32dA56,133,38,169,191,141,0,220,173,1,220,73,255,240,25,170,41,16,240,6,165,43
33dA9,64,133,43,138,41,239,240,9,230,40,32,161,195,105,48,133,38,169,223,141,0
34dA220,173,1,220,73,255,240,9,230,40,32,161,195,105,40,133,38,169,239,141,0
35dA220,173,1,220,73,255,240,9,230,40,32,161,195,105,32,133,38,169,247,141,0
36dA220,173,1,220,73,255,240,9,230,40,32,161,195,105,24,133,38,169,251,141,0
37dA220,173,1,220,73,255,240,9,230,40,32,161,195,105,16,133,38,169,253,141,0
38dA220,173,1,220,73,255,240,25,170,41,128,240,6,165,43,9,64,133,43,138,41,127
39dA240,9,230,40,32,161,195,105,8,133,38,169,254,141,0,220,173,1,220,73,255,240
40dA7,230,40,32,161,195,133,38,165,40,208,5,169,128,133,39,96,165,38,197,39,240
41dA51,133,39,162,25,134,41,162,1,134,42,5,43,174,114,202,149,22,202,16,2,162
42dA15,142,114,202,236,113,202,208,8,202,16,2,162,15,142,113,202,96,162,7,74
43dA176,4,202,16,250,96,138,24,96,166,41,240,4,202,134,41,96,166,42,240,4,202
44dA134,42,96,162,1,134,42,76,132,195,133,44,134,45,198,46,208,12,169,24,133,46
45dA169,1,77,21,208,141,21,208,32,141,194,169,255,141,25,208,166,45,165,44,64
46dA120,160,1,140,21,208,160,24,132,46,88,96,169,127,141,13,220,173,13,220,169
47dA1,141,26,208,141,25,208,169,16,141,18,208,173,17,208,41,127,141,17,208,169
48dA196,141,254,255,169,195,141,255,255,96,169,0,141,26,208,141,25,208,169,131
49dA141,13,220,96,173,17,208,9,32,141,17,208,169,121,141,24,208,96,173,17,208
50dA41,223,141,17,208,169,114,141,24,208,96,134,47,10,10,10,10,101,47,162,220
51dA134,48,160,0,132,47,162,4,145,47,200,208,251,230,48,202,208,246,96,169,0
52dA168,133,47,162,224,134,48,162,31,145,47,200,208,251,230,48,202,208,246,160
53dA63,145,47,136,16,251,96,32,121,194,184,176,24,170,16,3,44,115,202,41,127
54dA170,189,116,202,80,2,9,128,201,31,176,3,44,115,202,24,96,162,1,134,56,134
55dA55,202,142,0,96,134,54,166,55,160,57,32,208,198,32,188,199,32,235,199,166
56dA65,240,108,202,202,16,2,162,0,134,49,165,128,201,69,240,99,201,66,240,101
57dA201,108,240,103,201,76,240,102,201,80,240,105,201,97,240,103,201,73,240,124
58dA201,82,240,122,201,105,240,120,201,68,240,121,201,74,240,119,201,81,208,1
59dA96,162,0,32,104,201,165,67,166,54,224,0,240,167,32,191,198,201,255,240,8
60dA133,55,170,160,57,32,208,198,160,0,177,57,170,232,165,68,201,255,208,2,165
61dA56,32,191,198,133,56,16,131,32,0,199,16,63,169,0,133,68,240,203,169,1,133
62dA68,208,197,76,10,198,166,55,32,87,198,80,41,240,42,166,54,232,134,54,134,55
63dA160,57,32,208,198,169,0,168,145,57,200,132,56,32,118,198,16,14,240,82,240
64dA104,32,118,198,16,5,240,122,32,94,199,76,168,196,166,54,240,249,162,1,134
65dA67,202,134,68,162,2,165,49,240,3,32,49,201,165,67,166,54,32,191,198,201,255
66dA208,2,169,1,133,67,166,54,165,68,201,255,208,2,169,0,32,191,198,141,167,197
67dA166,67,32,87,198,166,67,224,255,240,191,232,134,67,208,242,32,0,199,198,55
68dA160,0,177,57,133,56,230,56,32,118,198,230,55,162,1,134,56,208,162,160,0,166
69dA56,202,138,145,57,32,118,198,166,54,228,55,240,124,230,55,162,1,134,56,208
70dA116,160,0,196,54,240,110,177,57,208,24,165,55,197,54,208,5,198,55,200,132
71dA56,32,94,199,160,1,196,55,48,86,132,55,16,82,152,145,57,200,132,56,208,74
72dA166,54,240,70,166,55,160,3,202,240,6,200,202,240,2,200,202,232,140,54,198
73dA142,56,198,228,55,240,7,169,32,32,125,193,208,5,169,62,32,125,193,32,87,198
74dA160,255,162,255,136,240,4,228,54,208,219,169,32,166,56,32,125,193,202,208
75dA250,169,38,32,125,193,169,13,32,125,193,76,168,196,160,50,32,208,198,160,0
76dA177,50,240,15,141,110,198,230,50,177,50,32,125,193,200,192,255,208,246,169
77dA13,76,125,193,165,57,24,101,56,133,50,165,58,105,0,133,51,165,50,101,49,133
78dA52,165,51,105,0,133,53,160,0,177,57,56,229,56,48,8,168,177,50,145,52,136,16
79dA249,164,49,136,16,1,96,185,130,0,145,50,136,16,248,160,0,177,57,24,101,49
80dA145,57,165,56,24,101,49,133,56,96,141,203,198,201,255,240,9,201,0,240,4,224
81dA255,16,1,138,96,140,254,198,200,140,247,198,202,138,41,7,168,138,74,74,74
82dA170,169,0,24,202,48,4,105,3,144,249,133,63,185,244,202,41,3,101,63,105,96
83dA133,255,185,244,202,41,240,133,255,96,166,54,232,134,54,134,64,160,59,32
84dA208,198,198,64,166,64,228,55,240,14,48,12,160,61,32,208,198,32,175,199,166
85dA64,16,227,165,59,141,74,199,165,60,141,75,199,160,0,177,57,141,70,199,198
86dA56,56,229,56,72,165,56,145,57,104,160,0,145,59,170,240,11,160,255,177,57
87dA157,255,255,136,202,208,247,162,1,134,56,166,55,228,54,240,3,232,134,55,96
88dA166,55,228,54,240,74,232,160,61,32,208,198,165,61,141,134,199,165,62,141
89dA135,199,160,0,177,61,240,20,170,177,57,134,64,24,101,64,145,57,168,189,255
90dA255,145,57,136,202,208,247,166,55,232,134,64,228,54,240,21,160,59,32,208
91dA198,230,64,166,64,160,61,32,208,198,32,175,199,166,64,208,231,198,54,96,160
92dA0,177,61,168,177,61,145,59,136,16,249,96,165,55,197,54,144,22,160,0,177,57
93dA197,56,16,14,162,0,189,252,202,32,125,193,232,224,5,208,245,96,165,55,32
94dA192,201,169,44,32,125,193,165,56,32,192,201,162,3,208,225,166,7,134,74,166
95dA6,134,75,160,0,132,65,132,66,132,76,164,76,240,6,169,13,32,125,193,96,32
96dA125,196,176,241,112,86,164,65,192,80,240,233,196,66,240,7,182,127,150,128
97dA136,16,245,32,125,193,166,6,134,72,166,7,134,73,208,8,166,6,228,75,208,2
98dA198,75,153,128,0,200,132,66,230,65,196,65,240,23,185,128,0,32,125,193,165,7
99dA208,10,169,24,197,72,208,4,198,72,198,75,200,16,229,166,72,134,6,166,73,134
100dA7,32,119,193,16,153,201,13,208,4,230,76,208,40,201,11,208,10,166,66,228,65
101dA240,135,230,66,16,30,201,12,208,8,166,66,240,46,198,66,16,18,201,15,208,6
102dA162,0,134,66,16,8,201,16,208,31,166,65,134,66,166,75,134,6,24,165,74,101
103dA66,201,80,133,7,144,6,233,80,133,7,230,6,32,119,193,76,251,199,201,17,208
104dA249,164,66,240,245,136,198,65,132,66,196,65,240,7,182,129,150,128,200,16
105dA245,32,125,193,166,6,134,72,166,7,134,73,164,66,196,65,240,9,185,128,0,32
106dA125,193,200,16,243,169,32,32,125,193,166,72,134,6,166,73,134,7,32,119,193
107dA76,251,199,141,12,201,141,23,201,32,104,202,160,0,181,128,240,43,201,43
108dA208,7,169,1,133,255,232,208,9,201,45,208,7,169,255,133,255,232,181,128,240
109dA19,201,48,48,15,201,58,16,11,153,209,0,232,200,192,3,16,2,48,233,96,134,71
110dA160,0,132,69,132,70,136,132,67,132,68,169,69,32,246,200,228,71,240,9,134
111dA71,32,24,202,133,67,166,71,181,128,201,44,208,17,232,134,71,169,70,32,246
112dA200,228,71,240,5,32,24,202,133,68,96,32,49,201,169,1,36,69,240,36,16,21
113dA165,67,197,55,48,6,169,1,133,67,208,22,165,55,56,229,67,133,67,208,13,165
114dA55,24,101,67,133,67,144,4,169,0,133,67,169,1,36,70,240,36,16,21,165,68,197
115dA56,48,6,169,1,133,68,208,22,165,56,56,229,68,133,68,208,13,165,56,24,101
116dA68,133,68,144,4,169,0,133,68,96,32,210,201,162,0,181,209,240,3,32,125,193
117dA232,224,3,208,244,96,133,212,32,104,202,162,8,160,2,185,209,0,201,5,48,5
118dA105,2,153,209,0,136,16,241,160,2,165,212,10,133,212,185,209,0,42,201,16,41
119dA15,153,209,0,136,16,242,202,208,215,165,211,9,48,133,211,160,1,185,209,0
120dA240,8,9,48,153,209,0,136,16,243,96,165,211,208,14,165,210,133,211,165,209
121dA133,210,169,0,133,209,240,238,160,2,185,209,0,240,5,41,207,153,209,0,136
122dA16,243,162,8,160,125,24,185,84,0,144,2,9,16,74,153,84,0,200,16,242,165,212
123dA106,202,208,1,96,133,212,160,2,185,209,0,201,8,48,5,233,3,153,209,0,136,16
124dA241,48,211,169,0,133,209,133,210,133,211,96,15,15,127,9,5,3,1,7,11,13,17,0
125dA69,83,90,52,65,87,51,88,84,70,67,54,68,82,53,86,85,72,66,56,71,89,55,78,79
126dA75,77,48,74,73,57,44,64,58,46,45,76,80,43,47,94,61,0,15,59,42,124,21,81,19
127dA32,50,0,0,49,10,6,4,2,8,12,14,18,0,101,115,122,36,97,119,35,120,116,102,99
128dA38,100,114,37,118,117,104,98,40,103,121,39,110,111,107,109,48,106,105,41
129dA60,64,91,62,45,108,112,43,63,94,61,0,16,93,42,124,22,113,20,32,34,0,0,33,0
130dA96,192,33,129,225,66,162,69,78,68,62,32,34,20,34,85,119,85,85,0,82,5,34,85
131dA119,85,85,0,34,20,119,68,102,68,119,0,82,5,119,68,102,68,119,0,34,20,34,85
132dA85,85,34,0,82,5,34,85,85,85,34,0,65,34,85,85,85,85,34,0,82,5,80,85,85,85
133dA34,0,0,34,20,102,17,51,119,0,0,82,5,102,17,51,119,0,0,34,20,34,119,68,34,0
134dA0,82,5,34,119,68,34,0,0,34,20,34,85,85,34,0,0,82,5,34,85,85,34,0,0,65,34
135dA85,85,85,51,0,0,82,5,80,85,85,51,0,2,2,2,2,2,0,2,0,102,102,15,6,15,6,6,0
136dA37,113,66,98,18,100,37,0,34,82,4,0,0,0,0,0,36,66,66,66,66,66,36,0,0,82,34
137dA119,34,82,0,0,0,0,0,7,0,32,32,64,1,1,2,2,2,36,36,0,33,83,117,113,81,81,33
138dA0,34,85,17,34,33,69,114,0,23,52,86,113,17,21,18,0,39,65,65,98,82,82,34,0
139dA34,85,85,35,81,81,34,0,0,34,34,0,0,34,34,4,0,16,39,64,39,16,0,0,2,69,33,18
140dA34,64,2,0,32,80,118,81,115,69,39,0,64,64,99,84,84,84,99,0,16,16,50,85,87
141dA84,50,0,16,32,115,37,37,35,33,2,66,64,98,82,82,82,82,0,36,4,37,38,38,38,37
142dA64,32,32,38,39,37,37,37,0,0,0,98,85,85,85,82,0,0,0,99,85,85,99,65,65,0,0
143dA98,84,70,65,70,0,32,32,117,37,37,37,19,0,0,0,85,85,87,119,34,0,0,0,85,37
144dA37,34,82,4,1,2,114,36,34,66,113,0,36,34,34,33,34,34,36,0,82,165,5,6,5,5,6
145dA4,34,37,21,7,5,5,5,0,99,84,84,100,84,84,99,0,103,84,84,86,84,84,103,0,118
146dA69,68,103,69,69,71,0,87,82,82,114,82,82,87,0,21,21,22,22,22,85,37,0,69,71
147dA71,69,69,69,117,0,82,85,117,117,117,85,82,0,98,85,85,101,69,71,67,0,98,85
148dA84,98,97,85,82,0,117,37,37,37,37,37,34,0,85,85,85,85,87,119,37,0,85,85,37
149dA34,34,82,82,0,115,18,34,34,34,66,115,0,6,50,66,114,226,66,54,0,48,64,67,68
150dA68,51,17,34,221,235,221,170,136,170,170,255,173,250,221,170,136,170,170
151dA255,221,235,136,187,153,187,136,255,173,250,136,187,153,187,136,255,221
152dA235,221,170,170,170,221,255,173,250,221,170,170,170,221,255,190,221,170
153dA170,170,170,221,255,173,250,175,170,170,170,221,255,255,221,235,153,238
154dA204,136,255,255,173,250,153,238,204,136,255,255,221,235,221,136,187,221
155dA255,255,173,250,221,136,187,221,255,255,221,235,221,170,170,221,255,255
156dA173,250,221,170,170,221,255,255,190,221,170,170,170,204,255,255,173,250
157dA175,170,170,204,255,253,253,253,253,253,255,253,255,153,153,240,249,240
158dA249,249,255,218,142,189,157,237,155,218,255,221,173,251,255,255,255,255
159dA255,219,189,189,189,189,189,219,255,255,173,221,136,221,173,255,255,255
160dA255,255,248,255,223,223,191,254,254,253,253,253,219,219,255,222,172,138
161dA142,174,174,222,255,221,170,238,221,222,186,141,255,232,203,169,142,238
162dA234,237,255,216,190,190,157,173,173,221,255,221,170,170,220,174,174,221
163dA255,255,221,221,255,255,221,221,251,255,239,216,191,216,239,255,255,253
164dA186,222,237,221,191,253,255,223,175,137,174,140,186,216,255,191,191,156
165dA171,171,171,156,255,239,239,205,170,168,171,205,255,239,223,140,218,218
166dA220,222,253,189,191,157,173,173,173,173,255,219,251,218,217,217,217,218
167dA191,223,223,217,216,218,218,218,255,255,255,157,170,170,170,173,255,255
168dA255,156,170,170,156,190,190,255,255,157,171,185,190,185,255,223,223,138
169dA218,218,218,236,255,255,255,170,170,168,136,221,255,255,255,170,218,218
170dA221,173,251,254,253,141,219,221,189,142,255,219,221,221,222,221,221,219
171dA255,173,90,250,249,250,250,249,251,221,218,234,248,250,250,250,255,156,171
172dA171,155,171,171,156,255,152,171,171,169,171,171,152,255,137,186,187,152
173dA186,186,184,255,168,173,173,141,173,173,168,255,234,234,233,233,233,170
174dA218,255,186,184,184,186,186,186,138,255,173,170,138,138,138,170,173,255
175dA157,170,170,154,186,184,188,255,157,170,171,157,158,170,173,255,138,218
176dA218,218,218,218,221,255,170,170,170,170,168,136,218,255,170,170,218,221
177dA221,173,173,255,140,237,221,221,221,189,140,255,249,205,189,141,29,189,201
178dA255,207,191,188,187,187,204,238,221

Codice sorgente leggibile .


1
Santo cielo ce l'hai fatta
Christopher,

Eh sì, è divertente :) "edizione deluxe" con modalità testo 80col in arrivo, questa è una sfida per adattarsi a 4K (ha bisogno di un font, un driver della tastiera e gestire una modalità bitmap per la visualizzazione del testo - Penso che possa essere fatto )
Felix Palmen,

Con ora 259 byte rimasti per codice aggiuntivo e 2306 byte non utilizzati sotto l'area I / O, mi viene in mente una cronologia dei comandi ... (sarebbe sufficiente per contenere 28 righe di storia) ... farlo in 259 byte di codice sembra impegnativo;)
Felix Palmen

Fallo! Per favore, fallo
Christopher il

Immagino di aver valutato erroneamente la complessità di una buona cronologia dei comandi;) Devi assicurarti che non ci siano due voci identiche adiacenti e devi salvare la riga "corrente" mentre navighi nella cronologia ... sembra impossibile implementarla nel 259 byte, dovrò trovare altri trucchi per ridurre prima le dimensioni;)
Felix Palmen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.