1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-02 00:31:03 +11:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Virgil Dupras
4d893d90fc VE: Improve I and F buffer typing
Previously, it would keep the old buffer displayed why typing over
it. I had kept it thus because I didn't want to erase the buffer
right away because the behavior is that when we type nothing, we
keep the buffer as-is and repeat the action.

Now, the behavior of I and F is much better. It keeps the buffer
displayed until the first non-return keystroke and then erases it.

Also, fixed PSP leak in _type and fixed PSP overuse in successful
_F (they balanced out).
2020-06-08 21:23:23 -04:00
Zac Stewart
ae954906d8
Make blkpack close files when it's done reading them (#108)
* Report when a file cannot be opened

* Close files when done reading them
2020-06-08 19:09:45 -05:00
6 changed files with 24 additions and 15 deletions

View File

@ -1,8 +1,6 @@
: _type ( buf -- ) : _type ( buf -- )
C< DUP 0xd = IF 2DROP EXIT THEN OVER DUP _zbuf ( c a ) C< DUP 0xd = IF 2DROP EXIT THEN SWAP DUP _zbuf ( c a )
BEGIN ( c a ) BEGIN ( c a ) C!+ C< TUCK 0x0d = UNTIL ( c a ) C! ;
C!+ C< SWAP
OVER 0x0d = UNTIL ( c a ) C! ;
( user-facing lines are 1-based ) ( user-facing lines are 1-based )
: T 1- DUP 64 * EDPOS ! _pln ; : T 1- DUP 64 * EDPOS ! _pln ;
: P IBUF _type IBUF EDPOS @ _cpos 64 MOVE BLK!! ; : P IBUF _type IBUF EDPOS @ _cpos 64 MOVE BLK!! ;

12
blk/107
View File

@ -1,10 +1,10 @@
: _F ( F without _pln. used in VE ) : _F ( F without _type and _pln. used in VE )
FBUF _type FBUF EDPOS @ _cpos ( a1 a2 ) FBUF EDPOS @ _cpos ( a1 a2 )
BEGIN BEGIN
C@+ ROT ( a2+1 c2 a1 ) C@+ ROT ( a2+1 a1+1 c1 c2 ) C@+ ROT ( a2+1 c2 a1 ) C@+ ROT ( a2+1 a1+1 c1 c2 )
= NOT IF DROP FBUF THEN = NOT IF DROP FBUF THEN ( a2 a1 )
TUCK C@ 0xd = ( a1 a2 f1 ) TUCK C@ 0xd = ( a1 a2 f1 )
OVER BLK) = OR ( a1 a2 f1|f2 ) OVER BLK) = OR ( a1 a2 f1|f2 )
UNTIL UNTIL ( a1 a2 )
DUP BLK) < IF BLK( - FBUF + -^ EDPOS ! THEN DROP ; DUP BLK) < IF BLK( - FBUF + -^ EDPOS ! ELSE DROP THEN ;
: F _F EDPOS @ 64 / _pln ; : F FBUF _type _F EDPOS @ 64 / _pln ;

View File

@ -3,8 +3,8 @@
: _rbufsz ( size of linebuf to the right of curpos ) : _rbufsz ( size of linebuf to the right of curpos )
EDPOS @ 64 MOD 63 -^ ; EDPOS @ 64 MOD 63 -^ ;
: i COMPILE I ; IMMEDIATE ( save overshadowed ) : i COMPILE I ; IMMEDIATE ( save overshadowed )
: _I ( I without _pln. used in VE ) : _I ( I without _pln and _type. used in VE )
IBUF _type _rbufsz IBUF _blen 2DUP > IF _rbufsz IBUF _blen 2DUP > IF
TUCK - ( ilen chars-to-move ) TUCK - ( ilen chars-to-move )
SWAP EDPOS @ _cpos 2DUP + ( ctm ilen a a+ilen ) SWAP EDPOS @ _cpos 2DUP + ( ctm ilen a a+ilen )
3 PICK MOVE- ( ctm ilen ) 3 PICK MOVE- ( ctm ilen )
@ -12,4 +12,4 @@
ELSE DROP ( ilen becomes rbuffsize ) ELSE DROP ( ilen becomes rbuffsize )
THEN THEN
DUP IBUF EDPOS @ _cpos ROT MOVE ( ilen ) EDPOS +! BLK!! ; DUP IBUF EDPOS @ _cpos ROT MOVE ( ilen ) EDPOS +! BLK!! ;
: I _I EDPOS @ 64 / _pln ; : I IBUF _type _I EDPOS @ 64 / _pln ;

View File

@ -3,3 +3,8 @@
: setpos ( -- ) EDPOS @ 64 /MOD : setpos ( -- ) EDPOS @ 64 /MOD
3 + ( header ) SWAP 3 + ( gutter ) SWAP AT-XY ; 3 + ( header ) SWAP 3 + ( gutter ) SWAP AT-XY ;
: cmv ( n -- , char movement ) acc@ * EDPOS @ + pos! ; : cmv ( n -- , char movement ) acc@ * EDPOS @ + pos! ;
: buftype ( buf ln -- )
3 OVER AT-XY C< DUP 0xd = IF 2DROP DROP EXIT THEN
( buf ln c ) 63 nspcs SWAP 4 SWAP AT-XY ( buf c )
SWAP DUP _zbuf BEGIN ( c a )
C!+ C< TUCK 0x0d = UNTIL ( c a ) C! ;

View File

@ -2,8 +2,8 @@
: $g ACC @ selblk 0acc ; : $g ACC @ selblk 0acc ;
: $[ BLK> @ acc@ - selblk ; : $[ BLK> @ acc@ - selblk ;
: $] BLK> @ acc@ + selblk ; : $] BLK> @ acc@ + selblk ;
: $I mode! 'I' EMIT 3 1 AT-XY _I contents mode! SPC ; : $I mode! 'I' EMIT IBUF 1 buftype _I contents mode! SPC ;
: $F mode! 'F' EMIT 3 2 AT-XY _F setpos mode! SPC ; : $F mode! 'F' EMIT FBUF 2 buftype _F setpos mode! SPC ;
: $E E contents ; : $E E contents ;
: $X acc@ X contents ; : $X acc@ X contents ;
: $h -1 cmv ; : $l 1 cmv ; : $k -64 cmv ; : $j 64 cmv ; : $h -1 cmv ; : $l 1 cmv ; : $k -64 cmv ; : $j 64 cmv ;

View File

@ -2,6 +2,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <dirent.h> #include <dirent.h>
#include <errno.h>
#include <string.h> #include <string.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -41,6 +42,10 @@ int main(int argc, char *argv[])
strcat(fullpath, "/"); strcat(fullpath, "/");
strcat(fullpath, ep->d_name); strcat(fullpath, ep->d_name);
FILE *fp = fopen(fullpath, "r"); FILE *fp = fopen(fullpath, "r");
if (fp == NULL) {
fprintf(stderr, "Could not open %s: %s\n", ep->d_name, strerror(errno));
continue;
}
char *line = NULL; char *line = NULL;
size_t n = 0; size_t n = 0;
for (int i=0; i<16; i++) { for (int i=0; i<16; i++) {
@ -56,6 +61,7 @@ int main(int argc, char *argv[])
fprintf(stderr, "blk %s has more than 16 lines\n", ep->d_name); fprintf(stderr, "blk %s has more than 16 lines\n", ep->d_name);
} }
free(line); free(line);
fclose(fp);
} }
fwrite(buf, 1024, blkcnt, stdout); fwrite(buf, 1024, blkcnt, stdout);
free(buf); free(buf);